From 8ae934f56384bd9cf58bd1b9f65ac85438ef96b1 Mon Sep 17 00:00:00 2001 From: Joey Yakimowich-Payne Date: Sun, 19 Apr 2026 08:26:15 -0600 Subject: [PATCH] chore: remove Playwright cache dirs from tracking, ignore them --- .gitignore | 7 + .../0074be174b3741950f3cd2397be5021d5a963c7f | 61 -- .../08f2420cae7b69e0586592300a00f88114a8f1d3 | 117 ---- .../0ae8e46ff803e589e0c4a36e72c8a9306a951779 | 168 ----- .../0bfa7743c7dcb43a6dbd2a4c775db22b7e842ecf | 100 --- .../0c2e59579c95ee8062fab5ded45f2e91c65540eb | 144 ---- .../0db5c344d5c1329263b6e79127352c79e14ae98d | 252 ------- .../120d19c1e99d853dca67e9c8c1604d66d5846f91 | 56 -- .../12bbefb2af83afa42dcda83dc28fd071cb086b9f | 23 - .../16b76b90a468901a171a38b0ba9f984618222f1f | 61 -- .../17a0231cc14565028b367ee234297355ed9d71c0 | 55 -- .../189749634973e9d7cce1d22ca0415a5f155605a2 | 72 -- .../1bbe3405c4d7adc02d15dcd5b3c412e322835308 | 295 -------- .../1c3d8bc54c74c954d05023e4d1afbf5b334e002d | 227 ------ .../1e76730402967a9c04a07074ca3920765b14a319 | 73 -- .../1f1d1de7a83b574b0b09311fab7b3b978b678f35 | 55 -- .../1f67b058354b3349f9e57ea7dbc1e4abbb9fb928 | 99 --- .../1fcaf8706a95797cce038e8d2c1fdc3bbb19faa5 | 18 - .../2007ff265d248740b3ed27e9b2a3df9c404511d2 | 86 --- .../213c66f629aabaf99f1a9a79b69beab2c806a16a | 32 - .../24537bf340b088fcdf47c578f3a3786e9380e89f | 231 ------- .../253f0b3eee530ac4b1075b53dfcb3c5ede308968 | 118 ---- .../26861562d32f5b3ccb4eee454f01812af38cd8cb | 22 - .../2a7f7e59a149ed5f24a2dcb7bcd631c240ed6c5d | 191 ------ .../2ac6444d3315f9938e27f0ba0b4b4fd273d3b93e | 5 - .../2c559355ba6fe30981ae7230cd0760a8e8550068 | 54 -- .../2c9c612179fe3efe81a782d67ce825dfdbc39e24 | 54 -- .../2de3dd191927de7c69694b1da7bb4bfe2f119a3e | 159 ----- .../3070fbfe3da1caa3aa8617048dad75a970e157f2 | 86 --- .../30e57b5431b2510d8f0015905b5749d40fb050c7 | 222 ------ .../30ebd793fe734fae4420662fadde274ae2ba2cd3 | 38 -- .../30f8abd88eaad257d5243923a60e7c0cc438eaf5 | 21 - .../3281e36502f2da1d1e777c063dc6be5dd791beca | 81 --- .../3402929c146499ba5f5cc64032055249c09ec972 | 227 ------ .../39f74eb78736761cc01be8d5c3ac562a6d70b419 | 126 ---- .../3b926c4c77a074502e39dd7b69dd7ed3a80e457b | 28 - .../3ca2520b03679ac850c19af3fa9473e0dac3ce3b | 96 --- .../3f812d03f9d2946c59dbf20c595858f7672a68c9 | 32 - .../40b9f1f37d5bd759c353e90078138580f67eb091 | 27 - .../4240fdfe86bcd9986050fa871305bc44db1efc74 | 287 -------- .../442ebf3ac79f68fe86487d3ffcebc61824a2540d | 23 - .../457014b126b3c023dcf81bd144f236f39702cbb0 | 163 ----- .../4bb62efd20e3dc4ba3eddfb4cfac81a49cf1054c | 94 --- .../4c002fffaadee63137d687cb8330b59aa34002e2 | 70 -- .../4e23f6d68ad38ee1ad15ac975e901a9a700998fc | 7 - .../4ec78e20c470365845f2c37f1e6c496206fbd67a | 70 -- .../4f08dc3aae6b824416553b7b206e34c857a7d0ec | 5 - .../50aee9b9326f39216380efe05b630e763742813c | 330 --------- .../51ba6fc6a114b61bdc4cfd71e2a38ae6ac37dd81 | 21 - .../57d085201360afb9929959d4bf9fd051e1b46b0b | 11 - .../5bf0f20da686b067343f0f435b278d635f80d980 | 141 ---- .../6034a6596878f47503e8eb62460c8adada6415da | 96 --- .../61212ab2cb2dd1014ec28f222f7a16693a8dc704 | 5 - .../6140973a3e41c9e10775129f7df0d2e0ec71507f | 5 - .../63927b8561240ae5565092905e25f88a0ec65efb | 110 --- .../63aa90a3f7866d28b88897a72607b4b394969d5a | 34 - .../6623074b7aca1ecaf396d6b3f8a45169103647c9 | 18 - .../678e146b1f33e2b0e8a47c1f43303128a5523ae9 | 5 - .../6af8c01d8a0b854ecbbba3e996e3f8defaf5dab4 | 70 -- .../6b65ade2c2953561fe0150f7c1abebc0c0c5c0db | 49 -- .../6d0dbbce4a5bfc3d91ea3cda6ae1026ae5f19182 | 21 - .../6f0456a37ed510d24f7c002d2625bb39ac9ff41f | 181 ----- .../6f3f4f0d5514021cf9fb69adb91fdd7e92d83259 | 5 - .../6fbd706f9c7aba12152874394f40de3b5e0d4ffb | 155 ----- .../70308924277a8722c76c082d2896c0b0afd5ae07 | 53 -- .../762ce37da2a2589b1d10505d5f2beb8d6535a9b4 | 154 ----- .../778beafecaae71b0bd8ca0acab50cdfc4aa45b72 | 151 ---- .../78de59ef0bd506df2a5315e7cd51c3c91f34b2ff | 5 - .../7a14004d0a83487154bf6954b45a2ac876af434c | 179 ----- .../7b9f60646d124ed7069776b1486ead04dd8b0f41 | 167 ----- .../7e74e4860bc162b5f27ee95149a511fc266897bb | 60 -- .../7f25075c2f5d6892c387e443add584b9a5d1033a | 71 -- .../7f28fbcafd62683bddf3e0e31deebb0b8d662089 | 161 ----- .../8286c9fd745186907847a8a16ad952f8bec2c34c | 5 - .../85c7c6ae1e7237a8e62a9876eaac89c659ea1a85 | 91 --- .../86e6fa0d58da34ac9f2c18b2f3791b86158e7622 | 62 -- .../88970f5e126aa527bc7cb4b9802a736e31a501b1 | 97 --- .../88d4090eb7940066aea6027e094b269f2ba4f15f | 161 ----- .../88ea9f1e8bdf7c3c003e44d531ebfad4e503a16e | 31 - .../894a7239df265fb9e666d77b1b7bc26eb50ee57c | 177 ----- .../899683bff7ae897887133feecc8687bd7f454830 | 27 - .../89ac0a6d5b766ba928f3c6d8c1164a768e7ff475 | 73 -- .../8a8fc9a82b64efffeb46c5583041b6b744577506 | 73 -- .../90abb0845fa44a68c9b5130c8493917cf1007fc1 | 42 -- .../90bfe13060c1c642fa8bd2d92efb58fa47aa6cb2 | 99 --- .../91b2a24a80057bfb1814b6845e799b4ce08a6d5f | 60 -- .../924073366ec737c84909b9810e0b6044da633b7b | 22 - .../972377de7c6d161cc492125e10d16faa2d6d326b | 60 -- .../976d380d8ad4c558f2108e3e9ed81b5dcaf23e3f | 33 - .../9821dc9a464f6f41c8a232a233cbc2f605203678 | 99 --- .../994baeb2889f14afc67a23d081038c8021b4c55c | 121 ---- .../9a6fda0ed697fcab701479616016c98d69e29963 | 48 -- .../9af4bbd039d06f6e7f6e97a1144e11b8d4339e8d | 646 ------------------ .../9d39083cebaf1c866df45696efde36a3c907d76d | 38 -- .../9e7fcb28845dc7690fe9be4fcf25a2e83050810d | 92 --- .../a0320f3cc19669dfd1818c82c40188bde27044e2 | 70 -- .../a11415dcae5aabd4b08e8a454dac5ae255d5e2be | 148 ---- .../a2397fb9c27e85416333624c5be5dc87765ef2e4 | 144 ---- .../a318a3d11b180ee6cf058027db65ed98aaeccfa9 | 32 - .../a3e5117daf14c606399875ff9e0ddafdb1023b59 | 36 - .../a54a30811b10c6f8e965b4e67f5e8e3671234ffe | 85 --- .../a7924c57f97592e4fe37cc13ea6732b04b6d91ed | 23 - .../a8cdfcd90e80afdd2ed30a5af912bd845278b3cc | 84 --- .../abaa22879be648e77307809e2fed3e33788b7d38 | 47 -- .../ae1c000fe4a4312428fdec8d424d2ab5555add5b | 439 ------------ .../af573d81d2a257160d0f3fc85c8298ce8fbc7be3 | 76 --- .../b0b8b391e4ef158458cc7b93c3c059b81387582e | 88 --- .../b351db6f7cf25266048a8501818cf309a7c849f7 | 29 - .../b3a2c20e27082adb17db9af4c128a010accfd8a3 | 109 --- .../b60bc9eae8425a9fca19f536c7f2dc7b4af54bc0 | 117 ---- .../b61ad0b545d4fdc57294ac57c8420113df2b682d | 63 -- .../bb1f31d584d3ea42861de5c8fe2f01e6ed2e1916 | 48 -- .../bd91a864a2be3e44d4272bc457bbd94eaa647a40 | 46 -- .../bf253a878189638f5cb2cd1e83a924434129e36b | 35 - .../bf4236e14121cc1c3653c6bb560b81d033db9116 | 270 -------- .../bf4815f872de80b2dac8d80cf0878f2d60301520 | 186 ----- .../bfe37ee30c4fd16bd9dfead2c5e64e0aa91786ef | 188 ----- .../c20ac38ed840ff4e3504dcaaf1345e147f142c29 | 135 ---- .../c31f6f8adb7e31e865857e8fd64fc172d0566ac8 | 325 --------- .../c3f222a70c1ae9a31e31e75d274f5c7fd112e9a6 | 172 ----- .../c55659fa7d2a07a1fd702b5ad03d1520967be980 | 43 -- .../cccca8a43a3acfc272e308d3ed9cc93a70295919 | 79 --- .../cf2245d0d987994e7f7d15a9f1eb343f4e4aca18 | 192 ------ .../cfc287e9d02cf31515d555daed467fd70fe79b93 | 41 -- .../d04f43e85f06e15e6c7b3e5d99011a097c59873f | 5 - .../d10a4779c3f462b401d323acb3c5cdfb4bbf5d9e | 94 --- .../d1f50050ce9a51cb0317dd794cca990f7d93c1d1 | 107 --- .../d51fa15a7d21af2c8b4eee183f295f74925b021f | 41 -- .../d6a5a867d412f144c6facd61d10de26817b378da | 28 - .../d764771e3b4a1c5b152bc3e695590281516c06ee | 49 -- .../d7de857bbe1c4da21f3dc6d028fc7bf45ef42308 | 24 - .../d9bc0bba74945e5398e70976b2454f20bd6f0529 | 202 ------ .../dcef99cfc007191855422cbf66c4827c8a4ec13a | 51 -- .../ded30c1d23a82bf6914fff3eb54c5549384c50d1 | 192 ------ .../df19234216ec42bf89b4594b108403573b310d4d | 76 --- .../e040cfeceb8ca2eeee50842dcbbea74e2340aa05 | 5 - .../e3ccca0e5f842fe5114a7a26c89df67bb87ef62c | 40 -- .../e4ac6c0f21092408b3b0c5513515a511434a47be | 79 --- .../e588e11bd975898b7463d1b9e4b9fd979ca579e8 | 191 ------ .../e740e376ffefa5c44186f6d401c545e9e6845fa4 | 128 ---- .../e83537cee566cd0b2c174791b06c9ef54cdea965 | 50 -- .../e8fdc57cd2300fd0985368f318a34676bafd975f | 84 --- .../ea3ca6df615b2d05dea33e9fdc5db2b747e787b2 | 27 - .../ebc2fd92961aee86125ebb364497f472a1342ba3 | 78 --- .../ed0aea79fff975a3ae29ebbb6d79fb0adb988228 | 178 ----- .../edb230cdb8a3c96b51880f55ec073d65873521b2 | 172 ----- .../f3e84aeded298552fe8290ed641cd3e76dd8094d | 5 - .../f71fcd25eb25ccdad3d46df42c418af0712c7eab | 5 - .../f8015fa350709a3fe41f99101571ac0a67fa8139 | 87 --- .../f85a4fa33bbdfe8f75e2f8f8848b797a1a39b63e | 31 - .../ff261415619f60c32a85e2a6cf18f7c160bcd2e5 | 45 -- .../02326cc10e030cba14fc923a76bad25b397e5343 | 145 ---- .../0ea38dec87b7a66a8ca65094b63b807345b2997f | 17 - .../1503818afb959535b0bd54d07f910d5a5126f94f | 57 -- .../165b76710a8d2c90c45e68d40dbc18f6b16628eb | 86 --- .../16f29161648ac78d602063bb24ae2e8558f8f1ad | 160 ----- .../1cec8e63defb18f3dd708f4ca5744836d42c48a2 | 102 --- .../2bde65eef67242240fbbdfc08750e35dcc9e8ef9 | 110 --- .../2dd379aad1c93faae38f9b1d0638d03363114997 | 168 ----- .../33ac9e23c363e7a132e75690edb2049ac44ff228 | 213 ------ .../3431ddef70250c56a057973496fdc256aa145fef | 143 ---- .../40b9f1f37d5bd759c353e90078138580f67eb091 | 27 - .../4e1fe810b0795e085e467f1e587e46fb0550713d | 54 -- .../51d2e7e0afb9d6a402aa189897abde14291d4d78 | 65 -- .../5616f1602c0b70eeb2d6db6d1df128b66a78a022 | 149 ---- .../667bd8c80d5efca30ab186d6beccba2fcf695a95 | 65 -- .../75c3f427e31351da668473419c1935b85733a3ac | 27 - .../827e2340f78f871ce090d705d86460e4ffa4101d | 222 ------ .../886e79af9836e3b49335d4ce04024fcf74e6fa37 | 85 --- .../958c3465f1775b65389eef9a14a218554757cddc | 147 ---- .../999b109347b67fd75be7f129a894f74893f1d45f | 119 ---- .../9f0b6ad014a45665df4dbaf45124a060c9753232 | 149 ---- .../9fc1165fea3f0efa2c86975b4117ca9317a7181d | 153 ----- .../a065c15443140b905f33d7c0aed358751306bd38 | 132 ---- .../a326fe3aa8f25949c84e65351a62ccf1d4bf05a2 | 76 --- .../a986294acbd1d665b1748e2f410b5818a265ef3f | 132 ---- .../abed934cafdc3023c71ae51f026a0b9c82f3b770 | 101 --- .../b451dbe98797931b016352248d2dc02dcf0d4709 | 74 -- .../b7d67486f74642811525c6073035fb5993b9d6f4 | 119 ---- .../bbbd9acd1a9aa6a50c86076077f18e8bfb248f92 | 138 ---- .../c3951fd38e84a1cbe51a93f04d81f806f4c3dc83 | 200 ------ .../c960fde1ba215ebcfc25e86c75d199ea418a6441 | 42 -- .../cbc49e9df7d0f1c2b361cde0cc6363daba257635 | 190 ------ .../df2ab80bfa3d1684d6f5763127d76a8dfb9f7b6b | 66 -- .../eac4dfb96c341f2cddd257fefaabd20bc000c149 | 113 --- .../eda9ea166e5ef80b6d3b9865d141db0cbcfbb47f | 180 ----- .../f3059f314999130dd3f743a6efff84c800195ebc | 58 -- .../fc3adbd64f7d5a65dd71c62f062c319a6ce82488 | 15 - .../fc93d79d2151156c20ca5492ba07114929726195 | 155 ----- .../0db5c344d5c1329263b6e79127352c79e14ae98d | 252 ------- .../1594dee83aebde54195c5a79edc06f3158e84895 | 50 -- .../189749634973e9d7cce1d22ca0415a5f155605a2 | 72 -- .../1c3d8bc54c74c954d05023e4d1afbf5b334e002d | 227 ------ .../1f67b058354b3349f9e57ea7dbc1e4abbb9fb928 | 99 --- .../253f0b3eee530ac4b1075b53dfcb3c5ede308968 | 118 ---- .../2907f03a94e8c5fca188f0af6ce6627c14f9e3ea | 171 ----- .../2c0949419de9479defe2393e86c2c024245e4ebc | 457 ------------- .../2de3dd191927de7c69694b1da7bb4bfe2f119a3e | 159 ----- .../30f8abd88eaad257d5243923a60e7c0cc438eaf5 | 21 - .../34b2e75d07f219f60baf6277909b4498ac46e618 | 69 -- .../40b9f1f37d5bd759c353e90078138580f67eb091 | 27 - .../42ffa0b714d5003b3590ec4be36c8a33871db208 | 216 ------ .../457014b126b3c023dcf81bd144f236f39702cbb0 | 163 ----- .../45ad18a232d4ffe83153cebbbdf885aac134c828 | 280 -------- .../4c0d134e83b7ffe8eb0bda16ef1dc7b9ab9aa805 | 550 --------------- .../762ce37da2a2589b1d10505d5f2beb8d6535a9b4 | 154 ----- .../778beafecaae71b0bd8ca0acab50cdfc4aa45b72 | 151 ---- .../77f2a033e44cfb527d5d543b7e9d24fd0e5e851a | 97 --- .../7a3d1c5ff9eefc26669a903d4709e2bafd93dd65 | 646 ------------------ .../85c7c6ae1e7237a8e62a9876eaac89c659ea1a85 | 91 --- .../86e6fa0d58da34ac9f2c18b2f3791b86158e7622 | 62 -- .../89a33ae3e683dc5cba0c5e83b4173d8412019e0a | 132 ---- .../8a8fc9a82b64efffeb46c5583041b6b744577506 | 73 -- .../90bfe13060c1c642fa8bd2d92efb58fa47aa6cb2 | 99 --- .../972377de7c6d161cc492125e10d16faa2d6d326b | 60 -- .../a3e5117daf14c606399875ff9e0ddafdb1023b59 | 36 - .../b351db6f7cf25266048a8501818cf309a7c849f7 | 29 - .../be379be6fb06dccc89804de7db4b6c535783241d | 110 --- .../c9616aeb97e4a546d490aa8f7a78908354cdff9c | 337 --------- .../cccca8a43a3acfc272e308d3ed9cc93a70295919 | 79 --- .../d1f50050ce9a51cb0317dd794cca990f7d93c1d1 | 107 --- .../ded30c1d23a82bf6914fff3eb54c5549384c50d1 | 192 ------ .../df19234216ec42bf89b4594b108403573b310d4d | 76 --- .../e4ac6c0f21092408b3b0c5513515a511434a47be | 79 --- .../f4d5266287bda20e716467172dcce63b8ef341d6 | 75 -- .../fc9ed36031d3cc653cb001f7b7c4b957f8674a3f | 180 ----- org.chromium.Chromium.GIGFbs/SingletonCookie | 1 - 227 files changed, 7 insertions(+), 24421 deletions(-) delete mode 100644 7xOfJqsDU787fe61oSCq1/web/0074be174b3741950f3cd2397be5021d5a963c7f delete mode 100644 7xOfJqsDU787fe61oSCq1/web/08f2420cae7b69e0586592300a00f88114a8f1d3 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/0ae8e46ff803e589e0c4a36e72c8a9306a951779 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/0bfa7743c7dcb43a6dbd2a4c775db22b7e842ecf delete mode 100644 7xOfJqsDU787fe61oSCq1/web/0c2e59579c95ee8062fab5ded45f2e91c65540eb delete mode 100644 7xOfJqsDU787fe61oSCq1/web/0db5c344d5c1329263b6e79127352c79e14ae98d delete mode 100644 7xOfJqsDU787fe61oSCq1/web/120d19c1e99d853dca67e9c8c1604d66d5846f91 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/12bbefb2af83afa42dcda83dc28fd071cb086b9f delete mode 100644 7xOfJqsDU787fe61oSCq1/web/16b76b90a468901a171a38b0ba9f984618222f1f delete mode 100644 7xOfJqsDU787fe61oSCq1/web/17a0231cc14565028b367ee234297355ed9d71c0 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/189749634973e9d7cce1d22ca0415a5f155605a2 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/1bbe3405c4d7adc02d15dcd5b3c412e322835308 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/1c3d8bc54c74c954d05023e4d1afbf5b334e002d delete mode 100644 7xOfJqsDU787fe61oSCq1/web/1e76730402967a9c04a07074ca3920765b14a319 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/1f1d1de7a83b574b0b09311fab7b3b978b678f35 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/1f67b058354b3349f9e57ea7dbc1e4abbb9fb928 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/1fcaf8706a95797cce038e8d2c1fdc3bbb19faa5 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/2007ff265d248740b3ed27e9b2a3df9c404511d2 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/213c66f629aabaf99f1a9a79b69beab2c806a16a delete mode 100644 7xOfJqsDU787fe61oSCq1/web/24537bf340b088fcdf47c578f3a3786e9380e89f delete mode 100644 7xOfJqsDU787fe61oSCq1/web/253f0b3eee530ac4b1075b53dfcb3c5ede308968 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/26861562d32f5b3ccb4eee454f01812af38cd8cb delete mode 100644 7xOfJqsDU787fe61oSCq1/web/2a7f7e59a149ed5f24a2dcb7bcd631c240ed6c5d delete mode 100644 7xOfJqsDU787fe61oSCq1/web/2ac6444d3315f9938e27f0ba0b4b4fd273d3b93e delete mode 100644 7xOfJqsDU787fe61oSCq1/web/2c559355ba6fe30981ae7230cd0760a8e8550068 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/2c9c612179fe3efe81a782d67ce825dfdbc39e24 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/2de3dd191927de7c69694b1da7bb4bfe2f119a3e delete mode 100644 7xOfJqsDU787fe61oSCq1/web/3070fbfe3da1caa3aa8617048dad75a970e157f2 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/30e57b5431b2510d8f0015905b5749d40fb050c7 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/30ebd793fe734fae4420662fadde274ae2ba2cd3 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/30f8abd88eaad257d5243923a60e7c0cc438eaf5 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/3281e36502f2da1d1e777c063dc6be5dd791beca delete mode 100644 7xOfJqsDU787fe61oSCq1/web/3402929c146499ba5f5cc64032055249c09ec972 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/39f74eb78736761cc01be8d5c3ac562a6d70b419 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/3b926c4c77a074502e39dd7b69dd7ed3a80e457b delete mode 100644 7xOfJqsDU787fe61oSCq1/web/3ca2520b03679ac850c19af3fa9473e0dac3ce3b delete mode 100644 7xOfJqsDU787fe61oSCq1/web/3f812d03f9d2946c59dbf20c595858f7672a68c9 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/40b9f1f37d5bd759c353e90078138580f67eb091 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/4240fdfe86bcd9986050fa871305bc44db1efc74 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/442ebf3ac79f68fe86487d3ffcebc61824a2540d delete mode 100644 7xOfJqsDU787fe61oSCq1/web/457014b126b3c023dcf81bd144f236f39702cbb0 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/4bb62efd20e3dc4ba3eddfb4cfac81a49cf1054c delete mode 100644 7xOfJqsDU787fe61oSCq1/web/4c002fffaadee63137d687cb8330b59aa34002e2 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/4e23f6d68ad38ee1ad15ac975e901a9a700998fc delete mode 100644 7xOfJqsDU787fe61oSCq1/web/4ec78e20c470365845f2c37f1e6c496206fbd67a delete mode 100644 7xOfJqsDU787fe61oSCq1/web/4f08dc3aae6b824416553b7b206e34c857a7d0ec delete mode 100644 7xOfJqsDU787fe61oSCq1/web/50aee9b9326f39216380efe05b630e763742813c delete mode 100644 7xOfJqsDU787fe61oSCq1/web/51ba6fc6a114b61bdc4cfd71e2a38ae6ac37dd81 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/57d085201360afb9929959d4bf9fd051e1b46b0b delete mode 100644 7xOfJqsDU787fe61oSCq1/web/5bf0f20da686b067343f0f435b278d635f80d980 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/6034a6596878f47503e8eb62460c8adada6415da delete mode 100644 7xOfJqsDU787fe61oSCq1/web/61212ab2cb2dd1014ec28f222f7a16693a8dc704 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/6140973a3e41c9e10775129f7df0d2e0ec71507f delete mode 100644 7xOfJqsDU787fe61oSCq1/web/63927b8561240ae5565092905e25f88a0ec65efb delete mode 100644 7xOfJqsDU787fe61oSCq1/web/63aa90a3f7866d28b88897a72607b4b394969d5a delete mode 100644 7xOfJqsDU787fe61oSCq1/web/6623074b7aca1ecaf396d6b3f8a45169103647c9 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/678e146b1f33e2b0e8a47c1f43303128a5523ae9 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/6af8c01d8a0b854ecbbba3e996e3f8defaf5dab4 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/6b65ade2c2953561fe0150f7c1abebc0c0c5c0db delete mode 100644 7xOfJqsDU787fe61oSCq1/web/6d0dbbce4a5bfc3d91ea3cda6ae1026ae5f19182 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/6f0456a37ed510d24f7c002d2625bb39ac9ff41f delete mode 100644 7xOfJqsDU787fe61oSCq1/web/6f3f4f0d5514021cf9fb69adb91fdd7e92d83259 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/6fbd706f9c7aba12152874394f40de3b5e0d4ffb delete mode 100644 7xOfJqsDU787fe61oSCq1/web/70308924277a8722c76c082d2896c0b0afd5ae07 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/762ce37da2a2589b1d10505d5f2beb8d6535a9b4 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/778beafecaae71b0bd8ca0acab50cdfc4aa45b72 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/78de59ef0bd506df2a5315e7cd51c3c91f34b2ff delete mode 100644 7xOfJqsDU787fe61oSCq1/web/7a14004d0a83487154bf6954b45a2ac876af434c delete mode 100644 7xOfJqsDU787fe61oSCq1/web/7b9f60646d124ed7069776b1486ead04dd8b0f41 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/7e74e4860bc162b5f27ee95149a511fc266897bb delete mode 100644 7xOfJqsDU787fe61oSCq1/web/7f25075c2f5d6892c387e443add584b9a5d1033a delete mode 100644 7xOfJqsDU787fe61oSCq1/web/7f28fbcafd62683bddf3e0e31deebb0b8d662089 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/8286c9fd745186907847a8a16ad952f8bec2c34c delete mode 100644 7xOfJqsDU787fe61oSCq1/web/85c7c6ae1e7237a8e62a9876eaac89c659ea1a85 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/86e6fa0d58da34ac9f2c18b2f3791b86158e7622 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/88970f5e126aa527bc7cb4b9802a736e31a501b1 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/88d4090eb7940066aea6027e094b269f2ba4f15f delete mode 100644 7xOfJqsDU787fe61oSCq1/web/88ea9f1e8bdf7c3c003e44d531ebfad4e503a16e delete mode 100644 7xOfJqsDU787fe61oSCq1/web/894a7239df265fb9e666d77b1b7bc26eb50ee57c delete mode 100644 7xOfJqsDU787fe61oSCq1/web/899683bff7ae897887133feecc8687bd7f454830 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/89ac0a6d5b766ba928f3c6d8c1164a768e7ff475 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/8a8fc9a82b64efffeb46c5583041b6b744577506 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/90abb0845fa44a68c9b5130c8493917cf1007fc1 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/90bfe13060c1c642fa8bd2d92efb58fa47aa6cb2 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/91b2a24a80057bfb1814b6845e799b4ce08a6d5f delete mode 100644 7xOfJqsDU787fe61oSCq1/web/924073366ec737c84909b9810e0b6044da633b7b delete mode 100644 7xOfJqsDU787fe61oSCq1/web/972377de7c6d161cc492125e10d16faa2d6d326b delete mode 100644 7xOfJqsDU787fe61oSCq1/web/976d380d8ad4c558f2108e3e9ed81b5dcaf23e3f delete mode 100644 7xOfJqsDU787fe61oSCq1/web/9821dc9a464f6f41c8a232a233cbc2f605203678 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/994baeb2889f14afc67a23d081038c8021b4c55c delete mode 100644 7xOfJqsDU787fe61oSCq1/web/9a6fda0ed697fcab701479616016c98d69e29963 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/9af4bbd039d06f6e7f6e97a1144e11b8d4339e8d delete mode 100644 7xOfJqsDU787fe61oSCq1/web/9d39083cebaf1c866df45696efde36a3c907d76d delete mode 100644 7xOfJqsDU787fe61oSCq1/web/9e7fcb28845dc7690fe9be4fcf25a2e83050810d delete mode 100644 7xOfJqsDU787fe61oSCq1/web/a0320f3cc19669dfd1818c82c40188bde27044e2 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/a11415dcae5aabd4b08e8a454dac5ae255d5e2be delete mode 100644 7xOfJqsDU787fe61oSCq1/web/a2397fb9c27e85416333624c5be5dc87765ef2e4 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/a318a3d11b180ee6cf058027db65ed98aaeccfa9 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/a3e5117daf14c606399875ff9e0ddafdb1023b59 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/a54a30811b10c6f8e965b4e67f5e8e3671234ffe delete mode 100644 7xOfJqsDU787fe61oSCq1/web/a7924c57f97592e4fe37cc13ea6732b04b6d91ed delete mode 100644 7xOfJqsDU787fe61oSCq1/web/a8cdfcd90e80afdd2ed30a5af912bd845278b3cc delete mode 100644 7xOfJqsDU787fe61oSCq1/web/abaa22879be648e77307809e2fed3e33788b7d38 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/ae1c000fe4a4312428fdec8d424d2ab5555add5b delete mode 100644 7xOfJqsDU787fe61oSCq1/web/af573d81d2a257160d0f3fc85c8298ce8fbc7be3 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/b0b8b391e4ef158458cc7b93c3c059b81387582e delete mode 100644 7xOfJqsDU787fe61oSCq1/web/b351db6f7cf25266048a8501818cf309a7c849f7 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/b3a2c20e27082adb17db9af4c128a010accfd8a3 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/b60bc9eae8425a9fca19f536c7f2dc7b4af54bc0 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/b61ad0b545d4fdc57294ac57c8420113df2b682d delete mode 100644 7xOfJqsDU787fe61oSCq1/web/bb1f31d584d3ea42861de5c8fe2f01e6ed2e1916 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/bd91a864a2be3e44d4272bc457bbd94eaa647a40 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/bf253a878189638f5cb2cd1e83a924434129e36b delete mode 100644 7xOfJqsDU787fe61oSCq1/web/bf4236e14121cc1c3653c6bb560b81d033db9116 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/bf4815f872de80b2dac8d80cf0878f2d60301520 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/bfe37ee30c4fd16bd9dfead2c5e64e0aa91786ef delete mode 100644 7xOfJqsDU787fe61oSCq1/web/c20ac38ed840ff4e3504dcaaf1345e147f142c29 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/c31f6f8adb7e31e865857e8fd64fc172d0566ac8 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/c3f222a70c1ae9a31e31e75d274f5c7fd112e9a6 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/c55659fa7d2a07a1fd702b5ad03d1520967be980 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/cccca8a43a3acfc272e308d3ed9cc93a70295919 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/cf2245d0d987994e7f7d15a9f1eb343f4e4aca18 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/cfc287e9d02cf31515d555daed467fd70fe79b93 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/d04f43e85f06e15e6c7b3e5d99011a097c59873f delete mode 100644 7xOfJqsDU787fe61oSCq1/web/d10a4779c3f462b401d323acb3c5cdfb4bbf5d9e delete mode 100644 7xOfJqsDU787fe61oSCq1/web/d1f50050ce9a51cb0317dd794cca990f7d93c1d1 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/d51fa15a7d21af2c8b4eee183f295f74925b021f delete mode 100644 7xOfJqsDU787fe61oSCq1/web/d6a5a867d412f144c6facd61d10de26817b378da delete mode 100644 7xOfJqsDU787fe61oSCq1/web/d764771e3b4a1c5b152bc3e695590281516c06ee delete mode 100644 7xOfJqsDU787fe61oSCq1/web/d7de857bbe1c4da21f3dc6d028fc7bf45ef42308 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/d9bc0bba74945e5398e70976b2454f20bd6f0529 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/dcef99cfc007191855422cbf66c4827c8a4ec13a delete mode 100644 7xOfJqsDU787fe61oSCq1/web/ded30c1d23a82bf6914fff3eb54c5549384c50d1 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/df19234216ec42bf89b4594b108403573b310d4d delete mode 100644 7xOfJqsDU787fe61oSCq1/web/e040cfeceb8ca2eeee50842dcbbea74e2340aa05 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/e3ccca0e5f842fe5114a7a26c89df67bb87ef62c delete mode 100644 7xOfJqsDU787fe61oSCq1/web/e4ac6c0f21092408b3b0c5513515a511434a47be delete mode 100644 7xOfJqsDU787fe61oSCq1/web/e588e11bd975898b7463d1b9e4b9fd979ca579e8 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/e740e376ffefa5c44186f6d401c545e9e6845fa4 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/e83537cee566cd0b2c174791b06c9ef54cdea965 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/e8fdc57cd2300fd0985368f318a34676bafd975f delete mode 100644 7xOfJqsDU787fe61oSCq1/web/ea3ca6df615b2d05dea33e9fdc5db2b747e787b2 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/ebc2fd92961aee86125ebb364497f472a1342ba3 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/ed0aea79fff975a3ae29ebbb6d79fb0adb988228 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/edb230cdb8a3c96b51880f55ec073d65873521b2 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/f3e84aeded298552fe8290ed641cd3e76dd8094d delete mode 100644 7xOfJqsDU787fe61oSCq1/web/f71fcd25eb25ccdad3d46df42c418af0712c7eab delete mode 100644 7xOfJqsDU787fe61oSCq1/web/f8015fa350709a3fe41f99101571ac0a67fa8139 delete mode 100644 7xOfJqsDU787fe61oSCq1/web/f85a4fa33bbdfe8f75e2f8f8848b797a1a39b63e delete mode 100644 7xOfJqsDU787fe61oSCq1/web/ff261415619f60c32a85e2a6cf18f7c160bcd2e5 delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/02326cc10e030cba14fc923a76bad25b397e5343 delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/0ea38dec87b7a66a8ca65094b63b807345b2997f delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/1503818afb959535b0bd54d07f910d5a5126f94f delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/165b76710a8d2c90c45e68d40dbc18f6b16628eb delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/16f29161648ac78d602063bb24ae2e8558f8f1ad delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/1cec8e63defb18f3dd708f4ca5744836d42c48a2 delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/2bde65eef67242240fbbdfc08750e35dcc9e8ef9 delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/2dd379aad1c93faae38f9b1d0638d03363114997 delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/33ac9e23c363e7a132e75690edb2049ac44ff228 delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/3431ddef70250c56a057973496fdc256aa145fef delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/40b9f1f37d5bd759c353e90078138580f67eb091 delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/4e1fe810b0795e085e467f1e587e46fb0550713d delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/51d2e7e0afb9d6a402aa189897abde14291d4d78 delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/5616f1602c0b70eeb2d6db6d1df128b66a78a022 delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/667bd8c80d5efca30ab186d6beccba2fcf695a95 delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/75c3f427e31351da668473419c1935b85733a3ac delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/827e2340f78f871ce090d705d86460e4ffa4101d delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/886e79af9836e3b49335d4ce04024fcf74e6fa37 delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/958c3465f1775b65389eef9a14a218554757cddc delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/999b109347b67fd75be7f129a894f74893f1d45f delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/9f0b6ad014a45665df4dbaf45124a060c9753232 delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/9fc1165fea3f0efa2c86975b4117ca9317a7181d delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/a065c15443140b905f33d7c0aed358751306bd38 delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/a326fe3aa8f25949c84e65351a62ccf1d4bf05a2 delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/a986294acbd1d665b1748e2f410b5818a265ef3f delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/abed934cafdc3023c71ae51f026a0b9c82f3b770 delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/b451dbe98797931b016352248d2dc02dcf0d4709 delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/b7d67486f74642811525c6073035fb5993b9d6f4 delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/bbbd9acd1a9aa6a50c86076077f18e8bfb248f92 delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/c3951fd38e84a1cbe51a93f04d81f806f4c3dc83 delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/c960fde1ba215ebcfc25e86c75d199ea418a6441 delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/cbc49e9df7d0f1c2b361cde0cc6363daba257635 delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/df2ab80bfa3d1684d6f5763127d76a8dfb9f7b6b delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/eac4dfb96c341f2cddd257fefaabd20bc000c149 delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/eda9ea166e5ef80b6d3b9865d141db0cbcfbb47f delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/f3059f314999130dd3f743a6efff84c800195ebc delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/fc3adbd64f7d5a65dd71c62f062c319a6ce82488 delete mode 100644 IJGn1F-WxLUCbfU1lu8pU/ssr/fc93d79d2151156c20ca5492ba07114929726195 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/0db5c344d5c1329263b6e79127352c79e14ae98d delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/1594dee83aebde54195c5a79edc06f3158e84895 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/189749634973e9d7cce1d22ca0415a5f155605a2 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/1c3d8bc54c74c954d05023e4d1afbf5b334e002d delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/1f67b058354b3349f9e57ea7dbc1e4abbb9fb928 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/253f0b3eee530ac4b1075b53dfcb3c5ede308968 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/2907f03a94e8c5fca188f0af6ce6627c14f9e3ea delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/2c0949419de9479defe2393e86c2c024245e4ebc delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/2de3dd191927de7c69694b1da7bb4bfe2f119a3e delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/30f8abd88eaad257d5243923a60e7c0cc438eaf5 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/34b2e75d07f219f60baf6277909b4498ac46e618 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/40b9f1f37d5bd759c353e90078138580f67eb091 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/42ffa0b714d5003b3590ec4be36c8a33871db208 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/457014b126b3c023dcf81bd144f236f39702cbb0 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/45ad18a232d4ffe83153cebbbdf885aac134c828 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/4c0d134e83b7ffe8eb0bda16ef1dc7b9ab9aa805 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/762ce37da2a2589b1d10505d5f2beb8d6535a9b4 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/778beafecaae71b0bd8ca0acab50cdfc4aa45b72 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/77f2a033e44cfb527d5d543b7e9d24fd0e5e851a delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/7a3d1c5ff9eefc26669a903d4709e2bafd93dd65 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/85c7c6ae1e7237a8e62a9876eaac89c659ea1a85 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/86e6fa0d58da34ac9f2c18b2f3791b86158e7622 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/89a33ae3e683dc5cba0c5e83b4173d8412019e0a delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/8a8fc9a82b64efffeb46c5583041b6b744577506 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/90bfe13060c1c642fa8bd2d92efb58fa47aa6cb2 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/972377de7c6d161cc492125e10d16faa2d6d326b delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/a3e5117daf14c606399875ff9e0ddafdb1023b59 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/b351db6f7cf25266048a8501818cf309a7c849f7 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/be379be6fb06dccc89804de7db4b6c535783241d delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/c9616aeb97e4a546d490aa8f7a78908354cdff9c delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/cccca8a43a3acfc272e308d3ed9cc93a70295919 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/d1f50050ce9a51cb0317dd794cca990f7d93c1d1 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/ded30c1d23a82bf6914fff3eb54c5549384c50d1 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/df19234216ec42bf89b4594b108403573b310d4d delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/e4ac6c0f21092408b3b0c5513515a511434a47be delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/f4d5266287bda20e716467172dcce63b8ef341d6 delete mode 100644 KMr2_dqTOvh2R-Vg1E6cO/ssr/fc9ed36031d3cc653cb001f7b7c4b957f8674a3f delete mode 120000 org.chromium.Chromium.GIGFbs/SingletonCookie diff --git a/.gitignore b/.gitignore index 8a216ca..97b6a36 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,10 @@ test-results/ *.tsbuildinfo bun.lock node-compile-cache/ + +# Playwright/Chromium runtime caches (random hash directories) +7xOfJqsDU787fe61oSCq1/ +IJGn1F-WxLUCbfU1lu8pU/ +KMr2_dqTOvh2R-Vg1E6cO/ +org.chromium.Chromium.*/ + diff --git a/7xOfJqsDU787fe61oSCq1/web/0074be174b3741950f3cd2397be5021d5a963c7f b/7xOfJqsDU787fe61oSCq1/web/0074be174b3741950f3cd2397be5021d5a963c7f deleted file mode 100644 index 629df4a..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/0074be174b3741950f3cd2397be5021d5a963c7f +++ /dev/null @@ -1,61 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "getBoardPieces", { enumerable: true, configurable: true, get(){ try { return getBoardPieces } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "isPieceAt", { enumerable: true, configurable: true, get(){ try { return isPieceAt } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "isEnemyAt", { enumerable: true, configurable: true, get(){ try { return isEnemyAt } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "isAllyAt", { enumerable: true, configurable: true, get(){ try { return isAllyAt } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "getPiecePosition", { enumerable: true, configurable: true, get(){ try { return getPiecePosition } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "getPieceColor", { enumerable: true, configurable: true, get(){ try { return getPieceColor } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "getPieceAt", { enumerable: true, configurable: true, get(){ try { return getPieceAt } catch {} }}); -function getBoardPieces(session) { - const facts = session.allFacts(); - const result = []; - for (const f of facts) { - if (f.attr !== "Position") continue; - const colorFact = facts.find((c) => c.id === f.id && c.attr === "Color"); - if (colorFact === void 0) continue; - result.push({ - id: f.id, - position: f.value, - color: colorFact.value - }); - }; - return result; -}; -function isPieceAt(session, square) { - const facts = session.allFacts(); - for (const f of facts) { - if (f.attr === "Position" && f.value === square) return true; - }; - return false; -}; -function isEnemyAt(session, square, myColor) { - const facts = session.allFacts(); - const positionFact = facts.find((f) => f.attr === "Position" && f.value === square); - if (positionFact === void 0) return false; - const colorFact = facts.find((f) => f.id === positionFact.id && f.attr === "Color"); - if (colorFact === void 0) return false; - return colorFact.value !== myColor; -}; -function isAllyAt(session, square, myColor) { - const facts = session.allFacts(); - const positionFact = facts.find((f) => f.attr === "Position" && f.value === square); - if (positionFact === void 0) return false; - const colorFact = facts.find((f) => f.id === positionFact.id && f.attr === "Color"); - if (colorFact === void 0) return false; - return colorFact.value === myColor; -}; -function getPiecePosition(session, pieceId) { - const value = session.get(pieceId, "Position"); - return value === void 0 ? null : value; -}; -function getPieceColor(session, pieceId) { - const value = session.get(pieceId, "Color"); - return value === void 0 ? null : value; -}; -function getPieceAt(session, square) { - const facts = session.allFacts(); - const positionFact = facts.find((f) => f.attr === "Position" && f.value === square); - return positionFact === void 0 ? null : positionFact.id; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQWlCTyxTQUFTLGVBQWUsU0FBZ0M7QUFDN0QsUUFBTSxRQUFRLFFBQVEsU0FBUztBQUMvQixRQUFNLFNBQXVCLENBQUM7QUFDOUIsYUFBVyxLQUFLLE9BQU87QUFDckIsUUFBSSxFQUFFLFNBQVMsV0FBWTtBQUMzQixVQUFNLFlBQVksTUFBTSxLQUFLLE9BQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsT0FBTztBQUNyRSxRQUFJLGNBQWMsT0FBVztBQUM3QixXQUFPLEtBQUs7QUFBQSxNQUNWLElBQUksRUFBRTtBQUFBLE1BQ04sVUFBVSxFQUFFO0FBQUEsTUFDWixPQUFPLFVBQVU7QUFBQSxJQUNuQixDQUFDO0FBQUEsRUFDSDtBQUNBLFNBQU87QUFDVDtBQUdPLFNBQVMsVUFBVSxTQUFrQixRQUF5QjtBQUNuRSxRQUFNLFFBQVEsUUFBUSxTQUFTO0FBQy9CLGFBQVcsS0FBSyxPQUFPO0FBQ3JCLFFBQUksRUFBRSxTQUFTLGNBQWMsRUFBRSxVQUFVLE9BQVEsUUFBTztBQUFBLEVBQzFEO0FBQ0EsU0FBTztBQUNUO0FBR08sU0FBUyxVQUFVLFNBQWtCLFFBQWdCLFNBQThCO0FBQ3hGLFFBQU0sUUFBUSxRQUFRLFNBQVM7QUFDL0IsUUFBTSxlQUFlLE1BQU0sS0FBSyxPQUFLLEVBQUUsU0FBUyxjQUFjLEVBQUUsVUFBVSxNQUFNO0FBQ2hGLE1BQUksaUJBQWlCLE9BQVcsUUFBTztBQUN2QyxRQUFNLFlBQVksTUFBTSxLQUFLLE9BQUssRUFBRSxPQUFPLGFBQWEsTUFBTSxFQUFFLFNBQVMsT0FBTztBQUNoRixNQUFJLGNBQWMsT0FBVyxRQUFPO0FBQ3BDLFNBQU8sVUFBVSxVQUFVO0FBQzdCO0FBR08sU0FBUyxTQUFTLFNBQWtCLFFBQWdCLFNBQThCO0FBQ3ZGLFFBQU0sUUFBUSxRQUFRLFNBQVM7QUFDL0IsUUFBTSxlQUFlLE1BQU0sS0FBSyxPQUFLLEVBQUUsU0FBUyxjQUFjLEVBQUUsVUFBVSxNQUFNO0FBQ2hGLE1BQUksaUJBQWlCLE9BQVcsUUFBTztBQUN2QyxRQUFNLFlBQVksTUFBTSxLQUFLLE9BQUssRUFBRSxPQUFPLGFBQWEsTUFBTSxFQUFFLFNBQVMsT0FBTztBQUNoRixNQUFJLGNBQWMsT0FBVyxRQUFPO0FBQ3BDLFNBQU8sVUFBVSxVQUFVO0FBQzdCO0FBR08sU0FBUyxpQkFBaUIsU0FBa0IsU0FBa0M7QUFDbkYsUUFBTSxRQUFRLFFBQVEsSUFBSSxTQUFTLFVBQVU7QUFDN0MsU0FBTyxVQUFVLFNBQVksT0FBUTtBQUN2QztBQUdPLFNBQVMsY0FBYyxTQUFrQixTQUFzQztBQUNwRixRQUFNLFFBQVEsUUFBUSxJQUFJLFNBQVMsT0FBTztBQUMxQyxTQUFPLFVBQVUsU0FBWSxPQUFRO0FBQ3ZDO0FBR08sU0FBUyxXQUFXLFNBQWtCLFFBQWlDO0FBQzVFLFFBQU0sUUFBUSxRQUFRLFNBQVM7QUFDL0IsUUFBTSxlQUFlLE1BQU0sS0FBSyxPQUFLLEVBQUUsU0FBUyxjQUFjLEVBQUUsVUFBVSxNQUFNO0FBQ2hGLFNBQU8saUJBQWlCLFNBQVksT0FBTyxhQUFhO0FBQzFEIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJib2FyZC1xdWVyaWVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSGVscGVyIGZ1bmN0aW9ucyB0byBxdWVyeSBib2FyZCBzdGF0ZSBmcm9tIGEgU2Vzc2lvbi5cbiAqXG4gKiBBbGwgcXVlcmllcyB3YWxrIGBzZXNzaW9uLmFsbEZhY3RzKClgIChkZXRlcm1pbmlzdGljLCBzb3J0ZWQgb3JkZXIpLlxuICogVGhlc2UgaGVscGVycyBhcmUgcmVhZC1vbmx5IGFuZCBoYXZlIG5vIHNpZGUgZWZmZWN0cy5cbiAqL1xuaW1wb3J0IHR5cGUgeyBTZXNzaW9uLCBFbnRpdHlJZCB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuaW1wb3J0IHR5cGUgeyBQaWVjZUNvbG9yLCBTcXVhcmUgfSBmcm9tIFwiLi4vc2NoZW1hLmpzXCI7XG5cbi8qKiBBIHtwaWVjZUlkLCBwb3NpdGlvbiwgY29sb3J9IHRyaXBsZSBwcm9qZWN0ZWQgZnJvbSB0aGUgd29ya2luZyBtZW1vcnkuICovXG5leHBvcnQgaW50ZXJmYWNlIEJvYXJkUGllY2Uge1xuICByZWFkb25seSBpZDogRW50aXR5SWQ7XG4gIHJlYWRvbmx5IHBvc2l0aW9uOiBTcXVhcmU7XG4gIHJlYWRvbmx5IGNvbG9yOiBQaWVjZUNvbG9yO1xufVxuXG4vKiogR2V0IGFsbCBwaWVjZXMgb24gdGhlIGJvYXJkIHdpdGgga25vd24gUG9zaXRpb24gKyBDb2xvci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCb2FyZFBpZWNlcyhzZXNzaW9uOiBTZXNzaW9uKTogQm9hcmRQaWVjZVtdIHtcbiAgY29uc3QgZmFjdHMgPSBzZXNzaW9uLmFsbEZhY3RzKCk7XG4gIGNvbnN0IHJlc3VsdDogQm9hcmRQaWVjZVtdID0gW107XG4gIGZvciAoY29uc3QgZiBvZiBmYWN0cykge1xuICAgIGlmIChmLmF0dHIgIT09IFwiUG9zaXRpb25cIikgY29udGludWU7XG4gICAgY29uc3QgY29sb3JGYWN0ID0gZmFjdHMuZmluZChjID0+IGMuaWQgPT09IGYuaWQgJiYgYy5hdHRyID09PSBcIkNvbG9yXCIpO1xuICAgIGlmIChjb2xvckZhY3QgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgcmVzdWx0LnB1c2goe1xuICAgICAgaWQ6IGYuaWQsXG4gICAgICBwb3NpdGlvbjogZi52YWx1ZSBhcyBTcXVhcmUsXG4gICAgICBjb2xvcjogY29sb3JGYWN0LnZhbHVlIGFzIFBpZWNlQ29sb3IsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqIElzIGFueSBwaWVjZSBvY2N1cHlpbmcgdGhlIGdpdmVuIHNxdWFyZT8gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BpZWNlQXQoc2Vzc2lvbjogU2Vzc2lvbiwgc3F1YXJlOiBTcXVhcmUpOiBib29sZWFuIHtcbiAgY29uc3QgZmFjdHMgPSBzZXNzaW9uLmFsbEZhY3RzKCk7XG4gIGZvciAoY29uc3QgZiBvZiBmYWN0cykge1xuICAgIGlmIChmLmF0dHIgPT09IFwiUG9zaXRpb25cIiAmJiBmLnZhbHVlID09PSBzcXVhcmUpIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqIElzIGFuIGVuZW15IHBpZWNlIChjb2xvciAhPT0gbXlDb2xvcikgb2NjdXB5aW5nIHRoZSBnaXZlbiBzcXVhcmU/ICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbmVteUF0KHNlc3Npb246IFNlc3Npb24sIHNxdWFyZTogU3F1YXJlLCBteUNvbG9yOiBQaWVjZUNvbG9yKTogYm9vbGVhbiB7XG4gIGNvbnN0IGZhY3RzID0gc2Vzc2lvbi5hbGxGYWN0cygpO1xuICBjb25zdCBwb3NpdGlvbkZhY3QgPSBmYWN0cy5maW5kKGYgPT4gZi5hdHRyID09PSBcIlBvc2l0aW9uXCIgJiYgZi52YWx1ZSA9PT0gc3F1YXJlKTtcbiAgaWYgKHBvc2l0aW9uRmFjdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGNvbG9yRmFjdCA9IGZhY3RzLmZpbmQoZiA9PiBmLmlkID09PSBwb3NpdGlvbkZhY3QuaWQgJiYgZi5hdHRyID09PSBcIkNvbG9yXCIpO1xuICBpZiAoY29sb3JGYWN0ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGNvbG9yRmFjdC52YWx1ZSAhPT0gbXlDb2xvcjtcbn1cblxuLyoqIElzIGFuIGFsbHkgcGllY2UgKGNvbG9yID09PSBteUNvbG9yKSBvY2N1cHlpbmcgdGhlIGdpdmVuIHNxdWFyZT8gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FsbHlBdChzZXNzaW9uOiBTZXNzaW9uLCBzcXVhcmU6IFNxdWFyZSwgbXlDb2xvcjogUGllY2VDb2xvcik6IGJvb2xlYW4ge1xuICBjb25zdCBmYWN0cyA9IHNlc3Npb24uYWxsRmFjdHMoKTtcbiAgY29uc3QgcG9zaXRpb25GYWN0ID0gZmFjdHMuZmluZChmID0+IGYuYXR0ciA9PT0gXCJQb3NpdGlvblwiICYmIGYudmFsdWUgPT09IHNxdWFyZSk7XG4gIGlmIChwb3NpdGlvbkZhY3QgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBjb2xvckZhY3QgPSBmYWN0cy5maW5kKGYgPT4gZi5pZCA9PT0gcG9zaXRpb25GYWN0LmlkICYmIGYuYXR0ciA9PT0gXCJDb2xvclwiKTtcbiAgaWYgKGNvbG9yRmFjdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBjb2xvckZhY3QudmFsdWUgPT09IG15Q29sb3I7XG59XG5cbi8qKiBHZXQgYSBwaWVjZSdzIGN1cnJlbnQgcG9zaXRpb24uIFJldHVybnMgbnVsbCBpZiBub3QgZm91bmQuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGllY2VQb3NpdGlvbihzZXNzaW9uOiBTZXNzaW9uLCBwaWVjZUlkOiBFbnRpdHlJZCk6IFNxdWFyZSB8IG51bGwge1xuICBjb25zdCB2YWx1ZSA9IHNlc3Npb24uZ2V0KHBpZWNlSWQsIFwiUG9zaXRpb25cIik7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6ICh2YWx1ZSBhcyBTcXVhcmUpO1xufVxuXG4vKiogR2V0IGEgcGllY2UncyBjb2xvci4gUmV0dXJucyBudWxsIGlmIG5vdCBmb3VuZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQaWVjZUNvbG9yKHNlc3Npb246IFNlc3Npb24sIHBpZWNlSWQ6IEVudGl0eUlkKTogUGllY2VDb2xvciB8IG51bGwge1xuICBjb25zdCB2YWx1ZSA9IHNlc3Npb24uZ2V0KHBpZWNlSWQsIFwiQ29sb3JcIik7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6ICh2YWx1ZSBhcyBQaWVjZUNvbG9yKTtcbn1cblxuLyoqIEdldCB0aGUgcGllY2UgZW50aXR5IElEIGF0IGEgZ2l2ZW4gc3F1YXJlIChvciBudWxsKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQaWVjZUF0KHNlc3Npb246IFNlc3Npb24sIHNxdWFyZTogU3F1YXJlKTogRW50aXR5SWQgfCBudWxsIHtcbiAgY29uc3QgZmFjdHMgPSBzZXNzaW9uLmFsbEZhY3RzKCk7XG4gIGNvbnN0IHBvc2l0aW9uRmFjdCA9IGZhY3RzLmZpbmQoZiA9PiBmLmF0dHIgPT09IFwiUG9zaXRpb25cIiAmJiBmLnZhbHVlID09PSBzcXVhcmUpO1xuICByZXR1cm4gcG9zaXRpb25GYWN0ID09PSB1bmRlZmluZWQgPyBudWxsIDogcG9zaXRpb25GYWN0LmlkO1xufVxuIl0sImZpbGUiOiIvc3JjL3J1bGVzL2JvYXJkLXF1ZXJpZXMudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/08f2420cae7b69e0586592300a00f88114a8f1d3 b/7xOfJqsDU787fe61oSCq1/web/08f2420cae7b69e0586592300a00f88114a8f1d3 deleted file mode 100644 index 53b354b..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/08f2420cae7b69e0586592300a00f88114a8f1d3 +++ /dev/null @@ -1,117 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/layouts/fen.ts", {"importedNames":["toFen","fromFen"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/starting-position.ts", {"importedNames":["CLASSIC_LAYOUT"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["algebraicToSquare"]}); -(0,__vite_ssr_import_0__.describe)("toFen()", () => { - (0,__vite_ssr_import_0__.it)("encodes CLASSIC_LAYOUT as the standard FIDE starting FEN", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.toFen)(__vite_ssr_import_2__.CLASSIC_LAYOUT.pieces)).toBe( - "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR" - ); - }); - (0,__vite_ssr_import_0__.it)("encodes an empty board as eight rows of '8'", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.toFen)([])).toBe("8/8/8/8/8/8/8/8"); - }); - (0,__vite_ssr_import_0__.it)("encodes a single white king on e1", () => { - const pieces = [ - { type: "king", color: "white", square: (0,__vite_ssr_import_3__.algebraicToSquare)("e1") } - ]; - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.toFen)(pieces)).toBe("8/8/8/8/8/8/8/4K3"); - }); - (0,__vite_ssr_import_0__.it)("encodes a single black queen on d8", () => { - const pieces = [ - { type: "queen", color: "black", square: (0,__vite_ssr_import_3__.algebraicToSquare)("d8") } - ]; - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.toFen)(pieces)).toBe("3q4/8/8/8/8/8/8/8"); - }); - (0,__vite_ssr_import_0__.it)("encodes multiple pieces on the same rank with digit runs between", () => { - const pieces = [ - { type: "king", color: "white", square: (0,__vite_ssr_import_3__.algebraicToSquare)("a1") }, - { type: "rook", color: "white", square: (0,__vite_ssr_import_3__.algebraicToSquare)("h1") } - ]; - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.toFen)(pieces)).toBe("8/8/8/8/8/8/8/K6R"); - }); -}); -(0,__vite_ssr_import_0__.describe)("fromFen()", () => { - (0,__vite_ssr_import_0__.it)("round-trips the FIDE starting FEN back to CLASSIC_LAYOUT's pieces", () => { - const fen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR"; - const { pieces, errors } = (0,__vite_ssr_import_1__.fromFen)(fen); - (0,__vite_ssr_import_0__.expect)(errors).toHaveLength(0); - (0,__vite_ssr_import_0__.expect)(pieces).toHaveLength(32); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.toFen)(pieces)).toBe(fen); - }); - (0,__vite_ssr_import_0__.it)("round-trips an empty board", () => { - const fen = "8/8/8/8/8/8/8/8"; - const { pieces, errors } = (0,__vite_ssr_import_1__.fromFen)(fen); - (0,__vite_ssr_import_0__.expect)(errors).toHaveLength(0); - (0,__vite_ssr_import_0__.expect)(pieces).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("parses partial positions (single king + queen)", () => { - const fen = "3q4/8/8/8/8/8/8/4K3"; - const { pieces, errors } = (0,__vite_ssr_import_1__.fromFen)(fen); - (0,__vite_ssr_import_0__.expect)(errors).toHaveLength(0); - (0,__vite_ssr_import_0__.expect)(pieces).toHaveLength(2); - const king = pieces.find((p) => p.type === "king"); - const queen = pieces.find((p) => p.type === "queen"); - (0,__vite_ssr_import_0__.expect)(king).toEqual({ - type: "king", - color: "white", - square: (0,__vite_ssr_import_3__.algebraicToSquare)("e1") - }); - (0,__vite_ssr_import_0__.expect)(queen).toEqual({ - type: "queen", - color: "black", - square: (0,__vite_ssr_import_3__.algebraicToSquare)("d8") - }); - }); - (0,__vite_ssr_import_0__.it)("ignores extra fields (side-to-move, castling, etc.) after first space", () => { - const fullFen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"; - const { pieces, errors } = (0,__vite_ssr_import_1__.fromFen)(fullFen); - (0,__vite_ssr_import_0__.expect)(errors).toHaveLength(0); - (0,__vite_ssr_import_0__.expect)(pieces).toHaveLength(32); - }); - (0,__vite_ssr_import_0__.it)("reports error for fewer than 8 ranks", () => { - const { errors } = (0,__vite_ssr_import_1__.fromFen)("rnbqkbnr/pppppppp/8/8/8/PPPPPPPP/RNBQKBNR"); - (0,__vite_ssr_import_0__.expect)(errors.length).toBeGreaterThan(0); - }); - (0,__vite_ssr_import_0__.it)("reports error for unknown symbol", () => { - const { errors } = (0,__vite_ssr_import_1__.fromFen)("8/8/8/8/8/8/8/Z7"); - (0,__vite_ssr_import_0__.expect)(errors.length).toBeGreaterThan(0); - (0,__vite_ssr_import_0__.expect)(errors[0]).toMatch(/unknown.*Z/i); - }); - (0,__vite_ssr_import_0__.it)("reports error for rank that describes more than 8 squares", () => { - const { errors } = (0,__vite_ssr_import_1__.fromFen)("8/8/8/8/8/8/8/KKKKKKKKK"); - (0,__vite_ssr_import_0__.expect)(errors.length).toBeGreaterThan(0); - }); - (0,__vite_ssr_import_0__.it)("reports error for empty input", () => { - const { errors } = (0,__vite_ssr_import_1__.fromFen)(""); - (0,__vite_ssr_import_0__.expect)(errors.length).toBeGreaterThan(0); - }); - (0,__vite_ssr_import_0__.it)("reports error for whitespace-only input", () => { - const { errors } = (0,__vite_ssr_import_1__.fromFen)(" "); - (0,__vite_ssr_import_0__.expect)(errors.length).toBeGreaterThan(0); - }); - (0,__vite_ssr_import_0__.it)("parses white vs black by letter case", () => { - const { pieces, errors } = (0,__vite_ssr_import_1__.fromFen)("4k3/8/8/8/8/8/8/4K3"); - (0,__vite_ssr_import_0__.expect)(errors).toHaveLength(0); - const whiteKing = pieces.find((p) => p.color === "white"); - const blackKing = pieces.find((p) => p.color === "black"); - (0,__vite_ssr_import_0__.expect)(whiteKing?.square).toBe((0,__vite_ssr_import_3__.algebraicToSquare)("e1")); - (0,__vite_ssr_import_0__.expect)(blackKing?.square).toBe((0,__vite_ssr_import_3__.algebraicToSquare)("e8")); - }); - (0,__vite_ssr_import_0__.it)("round-trips a custom piece via {type} bracket notation", () => { - const pieces = [ - { type: "cannon", color: "white", square: (0,__vite_ssr_import_3__.algebraicToSquare)("e4") } - ]; - const fen = (0,__vite_ssr_import_1__.toFen)(pieces); - (0,__vite_ssr_import_0__.expect)(fen).toContain("{Cannon}"); - const { pieces: decoded, errors } = (0,__vite_ssr_import_1__.fromFen)(fen); - (0,__vite_ssr_import_0__.expect)(errors).toHaveLength(0); - (0,__vite_ssr_import_0__.expect)(decoded).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(decoded[0]?.type).toBe("cannon"); - (0,__vite_ssr_import_0__.expect)(decoded[0]?.color).toBe("white"); - (0,__vite_ssr_import_0__.expect)(decoded[0]?.square).toBe((0,__vite_ssr_import_3__.algebraicToSquare)("e4")); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFJLENBQUM7QUFDdEQscUNBQU8sV0FBVyxNQUFNLEVBQUUsUUFBSyx5Q0FBa0IsSUFBSSxDQUFDO0FBQUEsRUFDeEQsQ0FBQztBQUVELCtCQUFHLDBEQUEwRCxNQUFNO0FBR2pFLFVBQU0sU0FBMkI7QUFBQSxNQUMvQixFQUFFLE1BQU0sVUFBbUIsT0FBTyxTQUFTLFdBQVEseUNBQWtCLElBQUksRUFBRTtBQUFBLElBQzdFO0FBQ0EsVUFBTSxTQUFNLDZCQUFNLE1BQU07QUFDeEIscUNBQU8sR0FBRyxFQUFFLFVBQVUsVUFBVTtBQUVoQyxVQUFNLEVBQUUsUUFBUSxTQUFTLE9BQU8sT0FBSSwrQkFBUSxHQUFHO0FBQy9DLHFDQUFPLE1BQU0sRUFBRSxhQUFhLENBQUM7QUFDN0IscUNBQU8sT0FBTyxFQUFFLGFBQWEsQ0FBQztBQUM5QixxQ0FBTyxRQUFRLENBQUMsR0FBRyxJQUFJLEVBQUUsS0FBSyxRQUFRO0FBQ3RDLHFDQUFPLFFBQVEsQ0FBQyxHQUFHLEtBQUssRUFBRSxLQUFLLE9BQU87QUFDdEMscUNBQU8sUUFBUSxDQUFDLEdBQUcsTUFBTSxFQUFFLFFBQUsseUNBQWtCLElBQUksQ0FBQztBQUFBLEVBQ3pELENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJmZW4udGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgaXQsIGV4cGVjdCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB7IHRvRmVuLCBmcm9tRmVuIH0gZnJvbSBcIi4vZmVuLmpzXCI7XG5pbXBvcnQgeyBDTEFTU0lDX0xBWU9VVCB9IGZyb20gXCIuLi9zdGFydGluZy1wb3NpdGlvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQaWVjZVBsYWNlbWVudCB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBhbGdlYnJhaWNUb1NxdWFyZSB9IGZyb20gXCIuLi9jb29yZC5qc1wiO1xuXG5kZXNjcmliZShcInRvRmVuKClcIiwgKCkgPT4ge1xuICBpdChcImVuY29kZXMgQ0xBU1NJQ19MQVlPVVQgYXMgdGhlIHN0YW5kYXJkIEZJREUgc3RhcnRpbmcgRkVOXCIsICgpID0+IHtcbiAgICBleHBlY3QodG9GZW4oQ0xBU1NJQ19MQVlPVVQucGllY2VzKSkudG9CZShcbiAgICAgIFwicm5icWtibnIvcHBwcHBwcHAvOC84LzgvOC9QUFBQUFBQUC9STkJRS0JOUlwiLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwiZW5jb2RlcyBhbiBlbXB0eSBib2FyZCBhcyBlaWdodCByb3dzIG9mICc4J1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHRvRmVuKFtdKSkudG9CZShcIjgvOC84LzgvOC84LzgvOFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJlbmNvZGVzIGEgc2luZ2xlIHdoaXRlIGtpbmcgb24gZTFcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHBpZWNlczogUGllY2VQbGFjZW1lbnRbXSA9IFtcbiAgICAgIHsgdHlwZTogXCJraW5nXCIsIGNvbG9yOiBcIndoaXRlXCIsIHNxdWFyZTogYWxnZWJyYWljVG9TcXVhcmUoXCJlMVwiKSB9LFxuICAgIF07XG4gICAgZXhwZWN0KHRvRmVuKHBpZWNlcykpLnRvQmUoXCI4LzgvOC84LzgvOC84LzRLM1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJlbmNvZGVzIGEgc2luZ2xlIGJsYWNrIHF1ZWVuIG9uIGQ4XCIsICgpID0+IHtcbiAgICBjb25zdCBwaWVjZXM6IFBpZWNlUGxhY2VtZW50W10gPSBbXG4gICAgICB7IHR5cGU6IFwicXVlZW5cIiwgY29sb3I6IFwiYmxhY2tcIiwgc3F1YXJlOiBhbGdlYnJhaWNUb1NxdWFyZShcImQ4XCIpIH0sXG4gICAgXTtcbiAgICBleHBlY3QodG9GZW4ocGllY2VzKSkudG9CZShcIjNxNC84LzgvOC84LzgvOC84XCIpO1xuICB9KTtcblxuICBpdChcImVuY29kZXMgbXVsdGlwbGUgcGllY2VzIG9uIHRoZSBzYW1lIHJhbmsgd2l0aCBkaWdpdCBydW5zIGJldHdlZW5cIiwgKCkgPT4ge1xuICAgIC8vIFdoaXRlIGtpbmcgb24gYTEsIHdoaXRlIHJvb2sgb24gaDEg4oaSIFwiUlwiIGFuZCBcIktcIiB3aXRoIDYgZW1wdHlcbiAgICAvLyBzcXVhcmVzIGJldHdlZW4gKGluIEZFTiByYW5rLTEgb3JkZXI6IGtpbmcgZmlyc3QgYTEsIHJvb2sgbGFzdFxuICAgIC8vIGgxIOKGkiBcIks2UlwiKS5cbiAgICBjb25zdCBwaWVjZXM6IFBpZWNlUGxhY2VtZW50W10gPSBbXG4gICAgICB7IHR5cGU6IFwia2luZ1wiLCBjb2xvcjogXCJ3aGl0ZVwiLCBzcXVhcmU6IGFsZ2VicmFpY1RvU3F1YXJlKFwiYTFcIikgfSxcbiAgICAgIHsgdHlwZTogXCJyb29rXCIsIGNvbG9yOiBcIndoaXRlXCIsIHNxdWFyZTogYWxnZWJyYWljVG9TcXVhcmUoXCJoMVwiKSB9LFxuICAgIF07XG4gICAgZXhwZWN0KHRvRmVuKHBpZWNlcykpLnRvQmUoXCI4LzgvOC84LzgvOC84L0s2UlwiKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJmcm9tRmVuKClcIiwgKCkgPT4ge1xuICBpdChcInJvdW5kLXRyaXBzIHRoZSBGSURFIHN0YXJ0aW5nIEZFTiBiYWNrIHRvIENMQVNTSUNfTEFZT1VUJ3MgcGllY2VzXCIsICgpID0+IHtcbiAgICBjb25zdCBmZW4gPSBcInJuYnFrYm5yL3BwcHBwcHBwLzgvOC84LzgvUFBQUFBQUFAvUk5CUUtCTlJcIjtcbiAgICBjb25zdCB7IHBpZWNlcywgZXJyb3JzIH0gPSBmcm9tRmVuKGZlbik7XG4gICAgZXhwZWN0KGVycm9ycykudG9IYXZlTGVuZ3RoKDApO1xuICAgIGV4cGVjdChwaWVjZXMpLnRvSGF2ZUxlbmd0aCgzMik7XG5cbiAgICAvLyBSZS1lbmNvZGU7IHNob3VsZCBtYXRjaCBpbnB1dC5cbiAgICBleHBlY3QodG9GZW4ocGllY2VzKSkudG9CZShmZW4pO1xuICB9KTtcblxuICBpdChcInJvdW5kLXRyaXBzIGFuIGVtcHR5IGJvYXJkXCIsICgpID0+IHtcbiAgICBjb25zdCBmZW4gPSBcIjgvOC84LzgvOC84LzgvOFwiO1xuICAgIGNvbnN0IHsgcGllY2VzLCBlcnJvcnMgfSA9IGZyb21GZW4oZmVuKTtcbiAgICBleHBlY3QoZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgZXhwZWN0KHBpZWNlcykudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcblxuICBpdChcInBhcnNlcyBwYXJ0aWFsIHBvc2l0aW9ucyAoc2luZ2xlIGtpbmcgKyBxdWVlbilcIiwgKCkgPT4ge1xuICAgIC8vIFdoaXRlIGtpbmcgb24gZTEsIGJsYWNrIHF1ZWVuIG9uIGQ4LlxuICAgIGNvbnN0IGZlbiA9IFwiM3E0LzgvOC84LzgvOC84LzRLM1wiO1xuICAgIGNvbnN0IHsgcGllY2VzLCBlcnJvcnMgfSA9IGZyb21GZW4oZmVuKTtcbiAgICBleHBlY3QoZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgZXhwZWN0KHBpZWNlcykudG9IYXZlTGVuZ3RoKDIpO1xuXG4gICAgY29uc3Qga2luZyA9IHBpZWNlcy5maW5kKChwKSA9PiBwLnR5cGUgPT09IFwia2luZ1wiKTtcbiAgICBjb25zdCBxdWVlbiA9IHBpZWNlcy5maW5kKChwKSA9PiBwLnR5cGUgPT09IFwicXVlZW5cIik7XG4gICAgZXhwZWN0KGtpbmcpLnRvRXF1YWwoe1xuICAgICAgdHlwZTogXCJraW5nXCIsXG4gICAgICBjb2xvcjogXCJ3aGl0ZVwiLFxuICAgICAgc3F1YXJlOiBhbGdlYnJhaWNUb1NxdWFyZShcImUxXCIpLFxuICAgIH0pO1xuICAgIGV4cGVjdChxdWVlbikudG9FcXVhbCh7XG4gICAgICB0eXBlOiBcInF1ZWVuXCIsXG4gICAgICBjb2xvcjogXCJibGFja1wiLFxuICAgICAgc3F1YXJlOiBhbGdlYnJhaWNUb1NxdWFyZShcImQ4XCIpLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcImlnbm9yZXMgZXh0cmEgZmllbGRzIChzaWRlLXRvLW1vdmUsIGNhc3RsaW5nLCBldGMuKSBhZnRlciBmaXJzdCBzcGFjZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgZnVsbEZlbiA9XG4gICAgICBcInJuYnFrYm5yL3BwcHBwcHBwLzgvOC84LzgvUFBQUFBQUFAvUk5CUUtCTlIgdyBLUWtxIC0gMCAxXCI7XG4gICAgY29uc3QgeyBwaWVjZXMsIGVycm9ycyB9ID0gZnJvbUZlbihmdWxsRmVuKTtcbiAgICBleHBlY3QoZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgZXhwZWN0KHBpZWNlcykudG9IYXZlTGVuZ3RoKDMyKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXBvcnRzIGVycm9yIGZvciBmZXdlciB0aGFuIDggcmFua3NcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgZXJyb3JzIH0gPSBmcm9tRmVuKFwicm5icWtibnIvcHBwcHBwcHAvOC84LzgvUFBQUFBQUFAvUk5CUUtCTlJcIik7XG4gICAgZXhwZWN0KGVycm9ycy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXBvcnRzIGVycm9yIGZvciB1bmtub3duIHN5bWJvbFwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBlcnJvcnMgfSA9IGZyb21GZW4oXCI4LzgvOC84LzgvOC84L1o3XCIpO1xuICAgIGV4cGVjdChlcnJvcnMubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMCk7XG4gICAgZXhwZWN0KGVycm9yc1swXSkudG9NYXRjaCgvdW5rbm93bi4qWi9pKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXBvcnRzIGVycm9yIGZvciByYW5rIHRoYXQgZGVzY3JpYmVzIG1vcmUgdGhhbiA4IHNxdWFyZXNcIiwgKCkgPT4ge1xuICAgIC8vIFJhbmsgMSBoYXMgOSBwaWVjZXMuIFBhcnNlciBzaG91bGQgY29tcGxhaW4uXG4gICAgY29uc3QgeyBlcnJvcnMgfSA9IGZyb21GZW4oXCI4LzgvOC84LzgvOC84L0tLS0tLS0tLS1wiKTtcbiAgICBleHBlY3QoZXJyb3JzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICB9KTtcblxuICBpdChcInJlcG9ydHMgZXJyb3IgZm9yIGVtcHR5IGlucHV0XCIsICgpID0+IHtcbiAgICBjb25zdCB7IGVycm9ycyB9ID0gZnJvbUZlbihcIlwiKTtcbiAgICBleHBlY3QoZXJyb3JzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICB9KTtcblxuICBpdChcInJlcG9ydHMgZXJyb3IgZm9yIHdoaXRlc3BhY2Utb25seSBpbnB1dFwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBlcnJvcnMgfSA9IGZyb21GZW4oXCIgICBcIik7XG4gICAgZXhwZWN0KGVycm9ycy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgfSk7XG5cbiAgaXQoXCJwYXJzZXMgd2hpdGUgdnMgYmxhY2sgYnkgbGV0dGVyIGNhc2VcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgcGllY2VzLCBlcnJvcnMgfSA9IGZyb21GZW4oXCI0azMvOC84LzgvOC84LzgvNEszXCIpO1xuICAgIGV4cGVjdChlcnJvcnMpLnRvSGF2ZUxlbmd0aCgwKTtcblxuICAgIGNvbnN0IHdoaXRlS2luZyA9IHBpZWNlcy5maW5kKChwKSA9PiBwLmNvbG9yID09PSBcIndoaXRlXCIpO1xuICAgIGNvbnN0IGJsYWNrS2luZyA9IHBpZWNlcy5maW5kKChwKSA9PiBwLmNvbG9yID09PSBcImJsYWNrXCIpO1xuICAgIGV4cGVjdCh3aGl0ZUtpbmc/LnNxdWFyZSkudG9CZShhbGdlYnJhaWNUb1NxdWFyZShcImUxXCIpKTtcbiAgICBleHBlY3QoYmxhY2tLaW5nPy5zcXVhcmUpLnRvQmUoYWxnZWJyYWljVG9TcXVhcmUoXCJlOFwiKSk7XG4gIH0pO1xuXG4gIGl0KFwicm91bmQtdHJpcHMgYSBjdXN0b20gcGllY2UgdmlhIHt0eXBlfSBicmFja2V0IG5vdGF0aW9uXCIsICgpID0+IHtcbiAgICAvLyBXaGl0ZSBjYW5ub24gb24gZTQuIHRvRmVuIGVtaXRzIGB7Q2Fubm9ufWAgKGNhcGl0YWxpemVkKTtcbiAgICAvLyBmcm9tRmVuIHJlYWRzIGNhc2Ugb2YgZmlyc3QgbGV0dGVyIHRvIGRldGVybWluZSBjb2xvci5cbiAgICBjb25zdCBwaWVjZXM6IFBpZWNlUGxhY2VtZW50W10gPSBbXG4gICAgICB7IHR5cGU6IFwiY2Fubm9uXCIgYXMgbmV2ZXIsIGNvbG9yOiBcIndoaXRlXCIsIHNxdWFyZTogYWxnZWJyYWljVG9TcXVhcmUoXCJlNFwiKSB9LFxuICAgIF07XG4gICAgY29uc3QgZmVuID0gdG9GZW4ocGllY2VzKTtcbiAgICBleHBlY3QoZmVuKS50b0NvbnRhaW4oXCJ7Q2Fubm9ufVwiKTtcblxuICAgIGNvbnN0IHsgcGllY2VzOiBkZWNvZGVkLCBlcnJvcnMgfSA9IGZyb21GZW4oZmVuKTtcbiAgICBleHBlY3QoZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgZXhwZWN0KGRlY29kZWQpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICBleHBlY3QoZGVjb2RlZFswXT8udHlwZSkudG9CZShcImNhbm5vblwiKTtcbiAgICBleHBlY3QoZGVjb2RlZFswXT8uY29sb3IpLnRvQmUoXCJ3aGl0ZVwiKTtcbiAgICBleHBlY3QoZGVjb2RlZFswXT8uc3F1YXJlKS50b0JlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZTRcIikpO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL2NoZXNzL3NyYy9sYXlvdXRzL2Zlbi50ZXN0LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/0ae8e46ff803e589e0c4a36e72c8a9306a951779 b/7xOfJqsDU787fe61oSCq1/web/0ae8e46ff803e589e0c4a36e72c8a9306a951779 deleted file mode 100644 index 05a6e34..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/0ae8e46ff803e589e0c4a36e72c8a9306a951779 +++ /dev/null @@ -1,168 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect","beforeEach","beforeAll","vi"]});__vite_ssr_import_0__.vi.mock("react", async () => await __vite_ssr_import_0__.vi.importActual("react")); -const __vi_import_0__ = await __vite_ssr_dynamic_import__("/src/persist/layout-library.ts"); - - -(0,__vite_ssr_import_0__.beforeAll)(() => { - const store = /* @__PURE__ */ new Map(); - const shim = { - get length() { - return store.size; - }, - clear() { - store.clear(); - }, - getItem(k) { - return store.get(k) ?? null; - }, - setItem(k, v) { - store.set(k, v); - }, - removeItem(k) { - store.delete(k); - }, - key(i) { - return [...store.keys()][i] ?? null; - } - }; - Object.defineProperty(globalThis, "localStorage", { - configurable: true, - value: shim - }); -}); -(0,__vite_ssr_import_0__.beforeEach)(() => { - localStorage.clear(); -}); -function seed(entry = {}) { - return { - id: __vi_import_0__.makeId(), - name: "Test", - pieces: [ - { type: "king", color: "white", square: 4 }, - { type: "king", color: "black", square: 60 } - ], - starred: false, - updatedAt: Date.now(), - ...entry - }; -} -(0,__vite_ssr_import_0__.describe)("loadLibrary()", () => { - (0,__vite_ssr_import_0__.it)("returns [] when no key is set", () => { - (0,__vite_ssr_import_0__.expect)(__vi_import_0__.loadLibrary()).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("returns [] when storage contains malformed JSON", () => { - localStorage.setItem(__vi_import_0__.__test__.STORAGE_KEY, "not json"); - (0,__vite_ssr_import_0__.expect)(__vi_import_0__.loadLibrary()).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("filters out entries that fail shape validation", () => { - localStorage.setItem( - __vi_import_0__.__test__.STORAGE_KEY, - JSON.stringify([ - { id: "ok", name: "ok", pieces: [], starred: false, updatedAt: 0 }, - { not: "a valid entry" } - ]) - ); - const library = __vi_import_0__.loadLibrary(); - (0,__vite_ssr_import_0__.expect)(library).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(library[0]?.id).toBe("ok"); - }); -}); -(0,__vite_ssr_import_0__.describe)("saveToLibrary()", () => { - (0,__vite_ssr_import_0__.it)("appends a new entry", () => { - const result = __vi_import_0__.saveToLibrary(seed({ name: "First" })); - (0,__vite_ssr_import_0__.expect)(result.ok).toBe(true); - const library = __vi_import_0__.loadLibrary(); - (0,__vite_ssr_import_0__.expect)(library).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(library[0]?.name).toBe("First"); - }); - (0,__vite_ssr_import_0__.it)("updates in place when id matches", () => { - const entry = seed({ name: "Original" }); - __vi_import_0__.saveToLibrary(entry); - __vi_import_0__.saveToLibrary({ ...entry, name: "Renamed" }); - const library = __vi_import_0__.loadLibrary(); - (0,__vite_ssr_import_0__.expect)(library).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(library[0]?.name).toBe("Renamed"); - }); - (0,__vite_ssr_import_0__.it)("evicts the oldest non-starred when MAX_ENTRIES is hit", () => { - for (let i = 0; i < __vi_import_0__.__test__.MAX_ENTRIES; i++) { - __vi_import_0__.saveToLibrary(seed({ name: `E${String(i)}`, updatedAt: i })); - }; - (0,__vite_ssr_import_0__.expect)(__vi_import_0__.loadLibrary()).toHaveLength(__vi_import_0__.__test__.MAX_ENTRIES); - __vi_import_0__.saveToLibrary(seed({ name: "newest", updatedAt: 9999 })); - const library = __vi_import_0__.loadLibrary(); - (0,__vite_ssr_import_0__.expect)(library).toHaveLength(__vi_import_0__.__test__.MAX_ENTRIES); - (0,__vite_ssr_import_0__.expect)(library.map((e) => e.name)).not.toContain("E0"); - (0,__vite_ssr_import_0__.expect)(library.some((e) => e.name === "newest")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("refuses save when every entry is starred and library is full", () => { - for (let i = 0; i < __vi_import_0__.__test__.MAX_ENTRIES; i++) { - __vi_import_0__.saveToLibrary(seed({ name: `E${String(i)}`, starred: true })); - }; - const result = __vi_import_0__.saveToLibrary(seed({ name: "newest" })); - (0,__vite_ssr_import_0__.expect)(result.ok).toBe(false); - if (!result.ok) { - (0,__vite_ssr_import_0__.expect)(result.reason).toMatch(/unstar/i); - }; - (0,__vite_ssr_import_0__.expect)(__vi_import_0__.loadLibrary()).toHaveLength(__vi_import_0__.__test__.MAX_ENTRIES); - }); -}); -(0,__vite_ssr_import_0__.describe)("deleteFromLibrary()", () => { - (0,__vite_ssr_import_0__.it)("removes the matching entry", () => { - const entry = seed(); - __vi_import_0__.saveToLibrary(entry); - __vi_import_0__.deleteFromLibrary(entry.id); - (0,__vite_ssr_import_0__.expect)(__vi_import_0__.loadLibrary()).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("is a no-op for unknown id", () => { - __vi_import_0__.saveToLibrary(seed()); - __vi_import_0__.deleteFromLibrary("not-real"); - (0,__vite_ssr_import_0__.expect)(__vi_import_0__.loadLibrary()).toHaveLength(1); - }); -}); -(0,__vite_ssr_import_0__.describe)("setStarred()", () => { - (0,__vite_ssr_import_0__.it)("toggles starred and updates updatedAt", () => { - const entry = seed({ starred: false, updatedAt: 100 }); - __vi_import_0__.saveToLibrary(entry); - const before = Date.now(); - __vi_import_0__.setStarred(entry.id, true); - const library = __vi_import_0__.loadLibrary(); - (0,__vite_ssr_import_0__.expect)(library[0]?.starred).toBe(true); - (0,__vite_ssr_import_0__.expect)(library[0]?.updatedAt).toBeGreaterThanOrEqual(before); - }); -}); -(0,__vite_ssr_import_0__.describe)("duplicateEntry()", () => { - (0,__vite_ssr_import_0__.it)("creates a copy with a new id and '(copy)' name suffix", () => { - const entry = seed({ name: "Original" }); - __vi_import_0__.saveToLibrary(entry); - const newId = __vi_import_0__.duplicateEntry(entry.id); - (0,__vite_ssr_import_0__.expect)(newId).toBeDefined(); - (0,__vite_ssr_import_0__.expect)(newId).not.toBe(entry.id); - const library = __vi_import_0__.loadLibrary(); - (0,__vite_ssr_import_0__.expect)(library).toHaveLength(2); - const copy = library.find((e) => e.id === newId); - (0,__vite_ssr_import_0__.expect)(copy?.name).toBe("Original (copy)"); - (0,__vite_ssr_import_0__.expect)(copy?.starred).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("returns undefined for unknown id", () => { - (0,__vite_ssr_import_0__.expect)(__vi_import_0__.duplicateEntry("not-real")).toBeUndefined(); - }); -}); -(0,__vite_ssr_import_0__.describe)("makeId()", () => { - (0,__vite_ssr_import_0__.it)("produces unique ids", () => { - const ids = /* @__PURE__ */ new Set(); - for (let i = 0; i < 100; i++) ids.add(__vi_import_0__.makeId()); - (0,__vite_ssr_import_0__.expect)(ids.size).toBe(100); - }); - (0,__vite_ssr_import_0__.it)("falls back when crypto.randomUUID is unavailable", () => { - const original = crypto.randomUUID; - crypto.randomUUID = void 0; - try { - const id = __vi_import_0__.makeId(); - (0,__vite_ssr_import_0__.expect)(id).toMatch(/^layout-/); - } finally { - crypto.randomUUID = original; - } - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBTyxPQUFPLEVBQUUsYUFBYSxDQUFDO0FBQzlCLFVBQU0sT0FBTyxRQUFRLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxLQUFLO0FBQy9DLHFDQUFPLE1BQU0sSUFBSSxFQUFFLEtBQUssaUJBQWlCO0FBQ3pDLHFDQUFPLE1BQU0sT0FBTyxFQUFFLEtBQUssS0FBSztBQUFBLEVBQ2xDLENBQUM7QUFFRCwrQkFBRyxvQ0FBb0MsTUFBTTtBQUMzQyxxQ0FBTywrQkFBZSxVQUFVLENBQUMsRUFBRSxjQUFjO0FBQUEsRUFDbkQsQ0FBQztBQUNILENBQUM7R0FFRCxnQ0FBUyxZQUFZLE1BQU07QUFDekIsK0JBQUcsdUJBQXVCLE1BQU07QUFDOUIsVUFBTSxNQUFNLG9CQUFJLElBQVk7QUFDNUIsYUFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLElBQUssS0FBSSxJQUFJLHVCQUFPLENBQUM7QUFDOUMscUNBQU8sSUFBSSxJQUFJLEVBQUUsS0FBSyxHQUFHO0FBQUEsRUFDM0IsQ0FBQztBQUVELCtCQUFHLG9EQUFvRCxNQUFNO0FBQzNELFVBQU0sV0FBVyxPQUFPO0FBRXhCLFdBQU8sYUFBYTtBQUNwQixRQUFJO0FBQ0YsWUFBTSxLQUFLLHVCQUFPO0FBQ2xCLHVDQUFPLEVBQUUsRUFBRSxRQUFRLFVBQVU7QUFBQSxJQUMvQixVQUFFO0FBQ0EsYUFBTyxhQUFhO0FBQUEsSUFDdEI7QUFBQSxFQUNGLENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJsYXlvdXQtbGlicmFyeS50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBpdCwgZXhwZWN0LCBiZWZvcmVFYWNoLCBiZWZvcmVBbGwsIHZpIH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IHtcbiAgbG9hZExpYnJhcnksXG4gIHNhdmVUb0xpYnJhcnksXG4gIGRlbGV0ZUZyb21MaWJyYXJ5LFxuICBzZXRTdGFycmVkLFxuICBkdXBsaWNhdGVFbnRyeSxcbiAgbWFrZUlkLFxuICBfX3Rlc3RfXyxcbiAgdHlwZSBTYXZlZExheW91dCxcbn0gZnJvbSBcIi4vbGF5b3V0LWxpYnJhcnkuanNcIjtcblxuLy8gaGFwcHktZG9tIHByb3ZpZGVzIGEgbG9jYWxTdG9yYWdlIG9iamVjdCBidXQgaXRzIG1ldGhvZHMgYXJlXG4vLyBib3VuZCB0byBhIHByb3RvdHlwZSB0aGF0IGRvZXNuJ3Qgc3Vydml2ZSBjZXJ0YWluIGRlc3RydWN0dXJpbmdcbi8vIHBhdHRlcm5zOyB3ZSBpbnN0YWxsIGEgc2ltcGxlIE1hcC1iYWNrZWQgc2hpbSB1bmNvbmRpdGlvbmFsbHkgc29cbi8vIHRoZSB0ZXN0cyBoYXZlIHByZWRpY3RhYmxlIGJlaGF2aW9yLlxuYmVmb3JlQWxsKCgpID0+IHtcbiAgY29uc3Qgc3RvcmUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBjb25zdCBzaGltOiBTdG9yYWdlID0ge1xuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICByZXR1cm4gc3RvcmUuc2l6ZTtcbiAgICB9LFxuICAgIGNsZWFyKCkge1xuICAgICAgc3RvcmUuY2xlYXIoKTtcbiAgICB9LFxuICAgIGdldEl0ZW0oazogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RvcmUuZ2V0KGspID8/IG51bGw7XG4gICAgfSxcbiAgICBzZXRJdGVtKGs6IHN0cmluZywgdjogc3RyaW5nKSB7XG4gICAgICBzdG9yZS5zZXQoaywgdik7XG4gICAgfSxcbiAgICByZW1vdmVJdGVtKGs6IHN0cmluZykge1xuICAgICAgc3RvcmUuZGVsZXRlKGspO1xuICAgIH0sXG4gICAga2V5KGk6IG51bWJlcikge1xuICAgICAgcmV0dXJuIFsuLi5zdG9yZS5rZXlzKCldW2ldID8/IG51bGw7XG4gICAgfSxcbiAgfTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIFwibG9jYWxTdG9yYWdlXCIsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHNoaW0sXG4gIH0pO1xufSk7XG5cbi8vIENsZWFyIGJldHdlZW4gdGVzdHMgc28gZWFjaCBvbmUgc3RhcnRzIGZyZXNoLlxuYmVmb3JlRWFjaCgoKSA9PiB7XG4gIGxvY2FsU3RvcmFnZS5jbGVhcigpO1xufSk7XG5cbmZ1bmN0aW9uIHNlZWQoZW50cnk6IFBhcnRpYWw8U2F2ZWRMYXlvdXQ+ID0ge30pOiBTYXZlZExheW91dCB7XG4gIHJldHVybiB7XG4gICAgaWQ6IG1ha2VJZCgpLFxuICAgIG5hbWU6IFwiVGVzdFwiLFxuICAgIHBpZWNlczogW1xuICAgICAgeyB0eXBlOiBcImtpbmdcIiwgY29sb3I6IFwid2hpdGVcIiwgc3F1YXJlOiA0IH0sXG4gICAgICB7IHR5cGU6IFwia2luZ1wiLCBjb2xvcjogXCJibGFja1wiLCBzcXVhcmU6IDYwIH0sXG4gICAgXSxcbiAgICBzdGFycmVkOiBmYWxzZSxcbiAgICB1cGRhdGVkQXQ6IERhdGUubm93KCksXG4gICAgLi4uZW50cnksXG4gIH07XG59XG5cbmRlc2NyaWJlKFwibG9hZExpYnJhcnkoKVwiLCAoKSA9PiB7XG4gIGl0KFwicmV0dXJucyBbXSB3aGVuIG5vIGtleSBpcyBzZXRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChsb2FkTGlicmFyeSgpKS50b0VxdWFsKFtdKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIFtdIHdoZW4gc3RvcmFnZSBjb250YWlucyBtYWxmb3JtZWQgSlNPTlwiLCAoKSA9PiB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oX190ZXN0X18uU1RPUkFHRV9LRVksIFwibm90IGpzb25cIik7XG4gICAgZXhwZWN0KGxvYWRMaWJyYXJ5KCkpLnRvRXF1YWwoW10pO1xuICB9KTtcblxuICBpdChcImZpbHRlcnMgb3V0IGVudHJpZXMgdGhhdCBmYWlsIHNoYXBlIHZhbGlkYXRpb25cIiwgKCkgPT4ge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgX190ZXN0X18uU1RPUkFHRV9LRVksXG4gICAgICBKU09OLnN0cmluZ2lmeShbXG4gICAgICAgIHsgaWQ6IFwib2tcIiwgbmFtZTogXCJva1wiLCBwaWVjZXM6IFtdLCBzdGFycmVkOiBmYWxzZSwgdXBkYXRlZEF0OiAwIH0sXG4gICAgICAgIHsgbm90OiBcImEgdmFsaWQgZW50cnlcIiB9LFxuICAgICAgXSksXG4gICAgKTtcbiAgICBjb25zdCBsaWJyYXJ5ID0gbG9hZExpYnJhcnkoKTtcbiAgICBleHBlY3QobGlicmFyeSkudG9IYXZlTGVuZ3RoKDEpO1xuICAgIGV4cGVjdChsaWJyYXJ5WzBdPy5pZCkudG9CZShcIm9rXCIpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInNhdmVUb0xpYnJhcnkoKVwiLCAoKSA9PiB7XG4gIGl0KFwiYXBwZW5kcyBhIG5ldyBlbnRyeVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gc2F2ZVRvTGlicmFyeShzZWVkKHsgbmFtZTogXCJGaXJzdFwiIH0pKTtcbiAgICBleHBlY3QocmVzdWx0Lm9rKS50b0JlKHRydWUpO1xuICAgIGNvbnN0IGxpYnJhcnkgPSBsb2FkTGlicmFyeSgpO1xuICAgIGV4cGVjdChsaWJyYXJ5KS50b0hhdmVMZW5ndGgoMSk7XG4gICAgZXhwZWN0KGxpYnJhcnlbMF0/Lm5hbWUpLnRvQmUoXCJGaXJzdFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJ1cGRhdGVzIGluIHBsYWNlIHdoZW4gaWQgbWF0Y2hlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgZW50cnkgPSBzZWVkKHsgbmFtZTogXCJPcmlnaW5hbFwiIH0pO1xuICAgIHNhdmVUb0xpYnJhcnkoZW50cnkpO1xuICAgIHNhdmVUb0xpYnJhcnkoeyAuLi5lbnRyeSwgbmFtZTogXCJSZW5hbWVkXCIgfSk7XG5cbiAgICBjb25zdCBsaWJyYXJ5ID0gbG9hZExpYnJhcnkoKTtcbiAgICBleHBlY3QobGlicmFyeSkudG9IYXZlTGVuZ3RoKDEpO1xuICAgIGV4cGVjdChsaWJyYXJ5WzBdPy5uYW1lKS50b0JlKFwiUmVuYW1lZFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJldmljdHMgdGhlIG9sZGVzdCBub24tc3RhcnJlZCB3aGVuIE1BWF9FTlRSSUVTIGlzIGhpdFwiLCAoKSA9PiB7XG4gICAgLy8gU2VlZCB3aXRoIE1BWF9FTlRSSUVTIGVudHJpZXMsIGluY3JlbWVudGluZyB1cGRhdGVkQXQuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBfX3Rlc3RfXy5NQVhfRU5UUklFUzsgaSsrKSB7XG4gICAgICBzYXZlVG9MaWJyYXJ5KHNlZWQoeyBuYW1lOiBgRSR7U3RyaW5nKGkpfWAsIHVwZGF0ZWRBdDogaSB9KSk7XG4gICAgfVxuICAgIGV4cGVjdChsb2FkTGlicmFyeSgpKS50b0hhdmVMZW5ndGgoX190ZXN0X18uTUFYX0VOVFJJRVMpO1xuXG4gICAgLy8gU2F2ZSBvbmUgbW9yZSDigJQgb2xkZXN0IChFMCkgc2hvdWxkIGJlIGV2aWN0ZWQuXG4gICAgc2F2ZVRvTGlicmFyeShzZWVkKHsgbmFtZTogXCJuZXdlc3RcIiwgdXBkYXRlZEF0OiA5OTk5IH0pKTtcbiAgICBjb25zdCBsaWJyYXJ5ID0gbG9hZExpYnJhcnkoKTtcbiAgICBleHBlY3QobGlicmFyeSkudG9IYXZlTGVuZ3RoKF9fdGVzdF9fLk1BWF9FTlRSSUVTKTtcbiAgICBleHBlY3QobGlicmFyeS5tYXAoKGUpID0+IGUubmFtZSkpLm5vdC50b0NvbnRhaW4oXCJFMFwiKTtcbiAgICBleHBlY3QobGlicmFyeS5zb21lKChlKSA9PiBlLm5hbWUgPT09IFwibmV3ZXN0XCIpKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcInJlZnVzZXMgc2F2ZSB3aGVuIGV2ZXJ5IGVudHJ5IGlzIHN0YXJyZWQgYW5kIGxpYnJhcnkgaXMgZnVsbFwiLCAoKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBfX3Rlc3RfXy5NQVhfRU5UUklFUzsgaSsrKSB7XG4gICAgICBzYXZlVG9MaWJyYXJ5KHNlZWQoeyBuYW1lOiBgRSR7U3RyaW5nKGkpfWAsIHN0YXJyZWQ6IHRydWUgfSkpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBzYXZlVG9MaWJyYXJ5KHNlZWQoeyBuYW1lOiBcIm5ld2VzdFwiIH0pKTtcbiAgICBleHBlY3QocmVzdWx0Lm9rKS50b0JlKGZhbHNlKTtcbiAgICBpZiAoIXJlc3VsdC5vaykge1xuICAgICAgZXhwZWN0KHJlc3VsdC5yZWFzb24pLnRvTWF0Y2goL3Vuc3Rhci9pKTtcbiAgICB9XG4gICAgZXhwZWN0KGxvYWRMaWJyYXJ5KCkpLnRvSGF2ZUxlbmd0aChfX3Rlc3RfXy5NQVhfRU5UUklFUyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiZGVsZXRlRnJvbUxpYnJhcnkoKVwiLCAoKSA9PiB7XG4gIGl0KFwicmVtb3ZlcyB0aGUgbWF0Y2hpbmcgZW50cnlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gc2VlZCgpO1xuICAgIHNhdmVUb0xpYnJhcnkoZW50cnkpO1xuICAgIGRlbGV0ZUZyb21MaWJyYXJ5KGVudHJ5LmlkKTtcbiAgICBleHBlY3QobG9hZExpYnJhcnkoKSkudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcblxuICBpdChcImlzIGEgbm8tb3AgZm9yIHVua25vd24gaWRcIiwgKCkgPT4ge1xuICAgIHNhdmVUb0xpYnJhcnkoc2VlZCgpKTtcbiAgICBkZWxldGVGcm9tTGlicmFyeShcIm5vdC1yZWFsXCIpO1xuICAgIGV4cGVjdChsb2FkTGlicmFyeSgpKS50b0hhdmVMZW5ndGgoMSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwic2V0U3RhcnJlZCgpXCIsICgpID0+IHtcbiAgaXQoXCJ0b2dnbGVzIHN0YXJyZWQgYW5kIHVwZGF0ZXMgdXBkYXRlZEF0XCIsICgpID0+IHtcbiAgICBjb25zdCBlbnRyeSA9IHNlZWQoeyBzdGFycmVkOiBmYWxzZSwgdXBkYXRlZEF0OiAxMDAgfSk7XG4gICAgc2F2ZVRvTGlicmFyeShlbnRyeSk7XG4gICAgY29uc3QgYmVmb3JlID0gRGF0ZS5ub3coKTtcbiAgICBzZXRTdGFycmVkKGVudHJ5LmlkLCB0cnVlKTtcblxuICAgIGNvbnN0IGxpYnJhcnkgPSBsb2FkTGlicmFyeSgpO1xuICAgIGV4cGVjdChsaWJyYXJ5WzBdPy5zdGFycmVkKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChsaWJyYXJ5WzBdPy51cGRhdGVkQXQpLnRvQmVHcmVhdGVyVGhhbk9yRXF1YWwoYmVmb3JlKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJkdXBsaWNhdGVFbnRyeSgpXCIsICgpID0+IHtcbiAgaXQoXCJjcmVhdGVzIGEgY29weSB3aXRoIGEgbmV3IGlkIGFuZCAnKGNvcHkpJyBuYW1lIHN1ZmZpeFwiLCAoKSA9PiB7XG4gICAgY29uc3QgZW50cnkgPSBzZWVkKHsgbmFtZTogXCJPcmlnaW5hbFwiIH0pO1xuICAgIHNhdmVUb0xpYnJhcnkoZW50cnkpO1xuXG4gICAgY29uc3QgbmV3SWQgPSBkdXBsaWNhdGVFbnRyeShlbnRyeS5pZCk7XG4gICAgZXhwZWN0KG5ld0lkKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChuZXdJZCkubm90LnRvQmUoZW50cnkuaWQpO1xuXG4gICAgY29uc3QgbGlicmFyeSA9IGxvYWRMaWJyYXJ5KCk7XG4gICAgZXhwZWN0KGxpYnJhcnkpLnRvSGF2ZUxlbmd0aCgyKTtcbiAgICBjb25zdCBjb3B5ID0gbGlicmFyeS5maW5kKChlKSA9PiBlLmlkID09PSBuZXdJZCk7XG4gICAgZXhwZWN0KGNvcHk/Lm5hbWUpLnRvQmUoXCJPcmlnaW5hbCAoY29weSlcIik7XG4gICAgZXhwZWN0KGNvcHk/LnN0YXJyZWQpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcInJldHVybnMgdW5kZWZpbmVkIGZvciB1bmtub3duIGlkXCIsICgpID0+IHtcbiAgICBleHBlY3QoZHVwbGljYXRlRW50cnkoXCJub3QtcmVhbFwiKSkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIm1ha2VJZCgpXCIsICgpID0+IHtcbiAgaXQoXCJwcm9kdWNlcyB1bmlxdWUgaWRzXCIsICgpID0+IHtcbiAgICBjb25zdCBpZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKSBpZHMuYWRkKG1ha2VJZCgpKTtcbiAgICBleHBlY3QoaWRzLnNpemUpLnRvQmUoMTAwKTtcbiAgfSk7XG5cbiAgaXQoXCJmYWxscyBiYWNrIHdoZW4gY3J5cHRvLnJhbmRvbVVVSUQgaXMgdW5hdmFpbGFibGVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsID0gY3J5cHRvLnJhbmRvbVVVSUQ7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciDigJQgaW50ZW50aW9uYWwgb3ZlcnJpZGUgZm9yIHRlc3RcbiAgICBjcnlwdG8ucmFuZG9tVVVJRCA9IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaWQgPSBtYWtlSWQoKTtcbiAgICAgIGV4cGVjdChpZCkudG9NYXRjaCgvXmxheW91dC0vKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY3J5cHRvLnJhbmRvbVVVSUQgPSBvcmlnaW5hbDtcbiAgICB9XG4gIH0pO1xufSk7XG5cbi8vIFNpbGVuY2UgUmVhY3QgdGVzdGluZy1saWJyYXJ5IHdhcm5pbmdzIGlmIHRoaXMgZmlsZSBydW5zIGluIGEgbWl4ZWQgZW52LlxudmkubW9jayhcInJlYWN0XCIsIGFzeW5jICgpID0+IGF3YWl0IHZpLmltcG9ydEFjdHVhbChcInJlYWN0XCIpKTtcbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9jaGVzcy9zcmMvcGVyc2lzdC9sYXlvdXQtbGlicmFyeS50ZXN0LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/0bfa7743c7dcb43a6dbd2a4c775db22b7e842ecf b/7xOfJqsDU787fe61oSCq1/web/0bfa7743c7dcb43a6dbd2a4c775db22b7e842ecf deleted file mode 100644 index c256b7e..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/0bfa7743c7dcb43a6dbd2a4c775db22b7e842ecf +++ /dev/null @@ -1,100 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["fileOf","rankOf","squareOf"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/rules/board-queries.ts", {"importedNames":["isAllyAt","isEnemyAt","isPieceAt"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/presets/registry.ts", {"importedNames":["PRESET_REGISTRY"]}); -function warpDest(session, path, color) { - for (const sq of path) { - if ((0,__vite_ssr_import_1__.isAllyAt)(session, sq, color)) return null; - if ((0,__vite_ssr_import_1__.isEnemyAt)(session, sq, color)) return sq; - }; - return path.length > 0 ? path[path.length - 1] ?? null : null; -} -__vite_ssr_import_2__.PRESET_REGISTRY.register({ - id: "rook-warp", - name: "Rook Warp", - description: "After a rook's normal slide, it may warp around the board edge to the opposite end of its rank or file.", - incompatibleWith: ["wrap-board"], - requires: [], - getExtraMoves: (engine, pieceId) => { - const session = engine.session; - const facts = session.allFacts(); - const typeFact = facts.find((f) => f.id === pieceId && f.attr === "PieceType"); - if (!typeFact || typeFact.value !== "rook") return []; - const colorFact = facts.find((f) => f.id === pieceId && f.attr === "Color"); - const posFact = facts.find((f) => f.id === pieceId && f.attr === "Position"); - if (!colorFact || !posFact) return []; - const color = colorFact.value; - const from = posFact.value; - const file = (0,__vite_ssr_import_0__.fileOf)(from); - const rank = (0,__vite_ssr_import_0__.rankOf)(from); - const destinations = /* @__PURE__ */ new Set(); - if (file < 7) { - let clearToEdge = true; - for (let f = file + 1; f <= 7; f++) { - if ((0,__vite_ssr_import_1__.isPieceAt)(session, (0,__vite_ssr_import_0__.squareOf)(f, rank))) { - clearToEdge = false; - break; - } - }; - if (clearToEdge) { - const path = []; - for (let f = 0; f < file; f++) path.push((0,__vite_ssr_import_0__.squareOf)(f, rank)); - const dest = warpDest(session, path, color); - if (dest !== null && dest !== from) destinations.add(dest); - } - }; - if (file > 0) { - let clearToEdge = true; - for (let f = file - 1; f >= 0; f--) { - if ((0,__vite_ssr_import_1__.isPieceAt)(session, (0,__vite_ssr_import_0__.squareOf)(f, rank))) { - clearToEdge = false; - break; - } - }; - if (clearToEdge) { - const path = []; - for (let f = 7; f > file; f--) path.push((0,__vite_ssr_import_0__.squareOf)(f, rank)); - const dest = warpDest(session, path, color); - if (dest !== null && dest !== from) destinations.add(dest); - } - }; - if (rank < 7) { - let clearToEdge = true; - for (let r = rank + 1; r <= 7; r++) { - if ((0,__vite_ssr_import_1__.isPieceAt)(session, (0,__vite_ssr_import_0__.squareOf)(file, r))) { - clearToEdge = false; - break; - } - }; - if (clearToEdge) { - const path = []; - for (let r = 0; r < rank; r++) path.push((0,__vite_ssr_import_0__.squareOf)(file, r)); - const dest = warpDest(session, path, color); - if (dest !== null && dest !== from) destinations.add(dest); - } - }; - if (rank > 0) { - let clearToEdge = true; - for (let r = rank - 1; r >= 0; r--) { - if ((0,__vite_ssr_import_1__.isPieceAt)(session, (0,__vite_ssr_import_0__.squareOf)(file, r))) { - clearToEdge = false; - break; - } - }; - if (clearToEdge) { - const path = []; - for (let r = 7; r > rank; r--) path.push((0,__vite_ssr_import_0__.squareOf)(file, r)); - const dest = warpDest(session, path, color); - if (dest !== null && dest !== from) destinations.add(dest); - } - }; - return [...destinations].map((to) => ({ - pieceId, - from, - to, - isCapture: (0,__vite_ssr_import_1__.isPieceAt)(session, to) - })); - } -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUssUUFBSyxnQ0FBUyxNQUFNLENBQUMsQ0FBQztBQUMxRCxjQUFNLE9BQU8sU0FBUyxTQUFTLE1BQU0sS0FBSztBQUMxQyxZQUFJLFNBQVMsUUFBUSxTQUFTLEtBQU0sY0FBYSxJQUFJLElBQUk7QUFBQSxNQUMzRDtBQUFBLElBQ0Y7QUFHQSxRQUFJLE9BQU8sR0FBRztBQUNaLFVBQUksY0FBYztBQUNsQixlQUFTLElBQUksT0FBTyxHQUFHLEtBQUssR0FBRyxLQUFLO0FBQ2xDLGVBQUksaUNBQVUsWUFBUyxnQ0FBUyxNQUFNLENBQUMsQ0FBQyxHQUFHO0FBQUUsd0JBQWM7QUFBTztBQUFBLFFBQU87QUFBQSxNQUMzRTtBQUNBLFVBQUksYUFBYTtBQUNmLGNBQU0sT0FBaUIsQ0FBQztBQUN4QixpQkFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLElBQUssTUFBSyxRQUFLLGdDQUFTLE1BQU0sQ0FBQyxDQUFDO0FBQzFELGNBQU0sT0FBTyxTQUFTLFNBQVMsTUFBTSxLQUFLO0FBQzFDLFlBQUksU0FBUyxRQUFRLFNBQVMsS0FBTSxjQUFhLElBQUksSUFBSTtBQUFBLE1BQzNEO0FBQUEsSUFDRjtBQUVBLFdBQU8sQ0FBQyxHQUFHLFlBQVksRUFBRSxJQUFJLFNBQU87QUFBQSxNQUNsQztBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQSxjQUFXLGlDQUFVLFNBQVMsRUFBRTtBQUFBLElBQ2xDLEVBQUU7QUFBQSxFQUNKO0FBQ0YsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsicm9vay13YXJwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHJlc2V0OiBgcm9vay13YXJwYCAoUlVMRVMubWQgcnVsZSAjNilcbiAqXG4gKiBBZnRlciB0aGUgcm9vaydzIG5vcm1hbCBzbGlkZSBpcyBleGhhdXN0ZWQsIGl0IG1heSBcIndhcnBcIiDigJQgY29udGludWluZyB0aGVcbiAqIHNsaWRlIGFzIGlmIHRoZSBmYXIgZWRnZSB3cmFwcGVkIHRvIHRoZSBuZWFyIGVkZ2Ug4oCUIGxhbmRpbmcgb24gdGhlIGZhciBlbmRcbiAqIG9mIHRoZSBzYW1lIHJhbmsgb3IgZmlsZS4gV2FycCBpcyBpbnRlcnJ1cHRlZCBieSBmcmllbmRseSBwaWVjZXMgYW5kIGJ5IHRoZVxuICogZmlyc3QgZW5lbXkgcGllY2UgZW5jb3VudGVyZWQgKGNhcHR1cmluZyBpdCkuXG4gKlxuICogVGhpcyBwcmVzZXQgY29udHJpYnV0ZXMgdGhlIHdhcnAgZGVzdGluYXRpb25zIGFzIGFkZGl0aW9uYWwgbGVnYWwgbW92ZXNcbiAqIGJleW9uZCB0aGUgYmFzZSBGSURFIHJvb2sgcnVsZS4gRGVzdGluYXRpb25zIG9uIHRoZSByb29rJ3MgY3VycmVudCBzcXVhcmVcbiAqIG9yIHRoYXQgY29pbmNpZGUgd2l0aCBiYXNlLXJ1bGUgZGVzdGluYXRpb25zIGFyZSBvbWl0dGVkLlxuICovXG5pbXBvcnQgdHlwZSB7IFBpZWNlQ29sb3IsIFNxdWFyZSB9IGZyb20gXCIuLi9zY2hlbWEuanNcIjtcbmltcG9ydCB7IGZpbGVPZiwgcmFua09mLCBzcXVhcmVPZiB9IGZyb20gXCIuLi9jb29yZC5qc1wiO1xuaW1wb3J0IHsgaXNBbGx5QXQsIGlzRW5lbXlBdCwgaXNQaWVjZUF0IH0gZnJvbSBcIi4uL3J1bGVzL2JvYXJkLXF1ZXJpZXMuanNcIjtcbmltcG9ydCB7IFBSRVNFVF9SRUdJU1RSWSB9IGZyb20gXCIuL3JlZ2lzdHJ5LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNlc3Npb24gfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcblxuLyoqXG4gKiBXYWxrIGEgc3RyYWlnaHQgcGF0aCBjb2xsZWN0aW5nIHRoZSB3YXJwIGRlc3RpbmF0aW9uLCBzdG9wcGluZyBhdCB0aGUgZmlyc3RcbiAqIGFsbHkgKG5vIGRlc3RpbmF0aW9uKSBvciBlbmVteSAoY2FwdHVyZSBkZXN0aW5hdGlvbikuXG4gKlxuICogQHBhcmFtIHBhdGgg4oCUIHNxdWFyZXMgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIFwiZW50ZXJlZFwiIGFmdGVyIHRoZSB3cmFwLlxuICovXG5mdW5jdGlvbiB3YXJwRGVzdChcbiAgc2Vzc2lvbjogU2Vzc2lvbixcbiAgcGF0aDogUmVhZG9ubHlBcnJheTxTcXVhcmU+LFxuICBjb2xvcjogUGllY2VDb2xvcixcbik6IFNxdWFyZSB8IG51bGwge1xuICBmb3IgKGNvbnN0IHNxIG9mIHBhdGgpIHtcbiAgICBpZiAoaXNBbGx5QXQoc2Vzc2lvbiwgc3EsIGNvbG9yKSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKGlzRW5lbXlBdChzZXNzaW9uLCBzcSwgY29sb3IpKSByZXR1cm4gc3E7IC8vIGNhcHR1cmUgYW5kIHN0b3BcbiAgfVxuICAvLyBFbnRpcmUgcGF0aCBlbXB0eTogdGhlIGxhc3Qgc3F1YXJlIG9uIHRoZSBwYXRoIGlzIHRoZSB3YXJwIGRlc3RpbmF0aW9uLlxuICByZXR1cm4gcGF0aC5sZW5ndGggPiAwID8gKHBhdGhbcGF0aC5sZW5ndGggLSAxXSA/PyBudWxsKSA6IG51bGw7XG59XG5cblBSRVNFVF9SRUdJU1RSWS5yZWdpc3Rlcih7XG4gIGlkOiBcInJvb2std2FycFwiLFxuICBuYW1lOiBcIlJvb2sgV2FycFwiLFxuICBkZXNjcmlwdGlvbjogXCJBZnRlciBhIHJvb2sncyBub3JtYWwgc2xpZGUsIGl0IG1heSB3YXJwIGFyb3VuZCB0aGUgYm9hcmQgZWRnZSB0byB0aGUgb3Bwb3NpdGUgZW5kIG9mIGl0cyByYW5rIG9yIGZpbGUuXCIsXG4gIGluY29tcGF0aWJsZVdpdGg6IFtcIndyYXAtYm9hcmRcIl0sXG4gIHJlcXVpcmVzOiBbXSxcbiAgZ2V0RXh0cmFNb3ZlczogKGVuZ2luZSwgcGllY2VJZCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBlbmdpbmUuc2Vzc2lvbjtcbiAgICBjb25zdCBmYWN0cyA9IHNlc3Npb24uYWxsRmFjdHMoKTtcblxuICAgIGNvbnN0IHR5cGVGYWN0ID0gZmFjdHMuZmluZChmID0+IGYuaWQgPT09IHBpZWNlSWQgJiYgZi5hdHRyID09PSBcIlBpZWNlVHlwZVwiKTtcbiAgICBpZiAoIXR5cGVGYWN0IHx8IHR5cGVGYWN0LnZhbHVlICE9PSBcInJvb2tcIikgcmV0dXJuIFtdO1xuXG4gICAgY29uc3QgY29sb3JGYWN0ID0gZmFjdHMuZmluZChmID0+IGYuaWQgPT09IHBpZWNlSWQgJiYgZi5hdHRyID09PSBcIkNvbG9yXCIpO1xuICAgIGNvbnN0IHBvc0ZhY3QgPSBmYWN0cy5maW5kKGYgPT4gZi5pZCA9PT0gcGllY2VJZCAmJiBmLmF0dHIgPT09IFwiUG9zaXRpb25cIik7XG4gICAgaWYgKCFjb2xvckZhY3QgfHwgIXBvc0ZhY3QpIHJldHVybiBbXTtcblxuICAgIGNvbnN0IGNvbG9yID0gY29sb3JGYWN0LnZhbHVlIGFzIFBpZWNlQ29sb3I7XG4gICAgY29uc3QgZnJvbSA9IHBvc0ZhY3QudmFsdWUgYXMgbnVtYmVyO1xuICAgIGNvbnN0IGZpbGUgPSBmaWxlT2YoZnJvbSk7XG4gICAgY29uc3QgcmFuayA9IHJhbmtPZihmcm9tKTtcblxuICAgIC8vIEZvdXIgd2FycCBkaXJlY3Rpb25zLiBGb3IgZWFjaCwgd2UgbXVzdCBlc3RhYmxpc2ggdGhhdCB0aGUgcm9vayBjYW5cbiAgICAvLyByZWFjaCB0aGUgZWRnZSBpbiB0aGF0IGRpcmVjdGlvbiAoYmFzZSBzbGlkZSByZWFjaGVzIHRoZSBlZGdlKSwgdGhlblxuICAgIC8vIHRoZSB3YXJwIHBhdGggc3RhcnRzIGF0IHRoZSBvcHBvc2l0ZSBlZGdlIGFuZCBwcm9jZWVkcyB0b3dhcmQgYGZyb21gLFxuICAgIC8vIHN0b3BwaW5nIGp1c3QgYmVmb3JlIGBmcm9tYC5cbiAgICAvL1xuICAgIC8vIFRvIGtlZXAgdGhpcyBwcmVzZXQgc2ltcGxlIGFuZCBhbGlnbmVkIHdpdGggdGhlIGJhc2Ugc2xpZGUsIHdlIHJlcXVpcmVcbiAgICAvLyB0aGUgZnVsbCBcImZvcndhcmRcIiBwYXRoIHRvIHRoZSBlZGdlIHRvIGJlIGVtcHR5IOKAlCBvdGhlcndpc2UgdGhlIHJvb2tcbiAgICAvLyBjb3VsZCBub3QgaGF2ZSB3cmFwcGVkIGFyb3VuZC4gVGhlIHdhcnAgY2FuZGlkYXRlIGlzIHRoZW4gdGhlIGZpcnN0XG4gICAgLy8gcmVhY2hhYmxlIHNxdWFyZSBvbiB0aGUgb3Bwb3NpdGUgc2lkZSAocGVyIHdhcnBEZXN0IHNlbWFudGljcykuXG5cbiAgICBjb25zdCBkZXN0aW5hdGlvbnMgPSBuZXcgU2V0PFNxdWFyZT4oKTtcblxuICAgIC8vIFJpZ2h0IOKGkiB3cmFwcyBmcm9tIGZpbGUgMC5cbiAgICBpZiAoZmlsZSA8IDcpIHtcbiAgICAgIGxldCBjbGVhclRvRWRnZSA9IHRydWU7XG4gICAgICBmb3IgKGxldCBmID0gZmlsZSArIDE7IGYgPD0gNzsgZisrKSB7XG4gICAgICAgIGlmIChpc1BpZWNlQXQoc2Vzc2lvbiwgc3F1YXJlT2YoZiwgcmFuaykpKSB7IGNsZWFyVG9FZGdlID0gZmFsc2U7IGJyZWFrOyB9XG4gICAgICB9XG4gICAgICBpZiAoY2xlYXJUb0VkZ2UpIHtcbiAgICAgICAgY29uc3QgcGF0aDogU3F1YXJlW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgZiA9IDA7IGYgPCBmaWxlOyBmKyspIHBhdGgucHVzaChzcXVhcmVPZihmLCByYW5rKSk7XG4gICAgICAgIGNvbnN0IGRlc3QgPSB3YXJwRGVzdChzZXNzaW9uLCBwYXRoLCBjb2xvcik7XG4gICAgICAgIGlmIChkZXN0ICE9PSBudWxsICYmIGRlc3QgIT09IGZyb20pIGRlc3RpbmF0aW9ucy5hZGQoZGVzdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGVmdCDihpIgd3JhcHMgZnJvbSBmaWxlIDcuXG4gICAgaWYgKGZpbGUgPiAwKSB7XG4gICAgICBsZXQgY2xlYXJUb0VkZ2UgPSB0cnVlO1xuICAgICAgZm9yIChsZXQgZiA9IGZpbGUgLSAxOyBmID49IDA7IGYtLSkge1xuICAgICAgICBpZiAoaXNQaWVjZUF0KHNlc3Npb24sIHNxdWFyZU9mKGYsIHJhbmspKSkgeyBjbGVhclRvRWRnZSA9IGZhbHNlOyBicmVhazsgfVxuICAgICAgfVxuICAgICAgaWYgKGNsZWFyVG9FZGdlKSB7XG4gICAgICAgIGNvbnN0IHBhdGg6IFNxdWFyZVtdID0gW107XG4gICAgICAgIGZvciAobGV0IGYgPSA3OyBmID4gZmlsZTsgZi0tKSBwYXRoLnB1c2goc3F1YXJlT2YoZiwgcmFuaykpO1xuICAgICAgICBjb25zdCBkZXN0ID0gd2FycERlc3Qoc2Vzc2lvbiwgcGF0aCwgY29sb3IpO1xuICAgICAgICBpZiAoZGVzdCAhPT0gbnVsbCAmJiBkZXN0ICE9PSBmcm9tKSBkZXN0aW5hdGlvbnMuYWRkKGRlc3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVwIOKGkiB3cmFwcyBmcm9tIHJhbmsgMC5cbiAgICBpZiAocmFuayA8IDcpIHtcbiAgICAgIGxldCBjbGVhclRvRWRnZSA9IHRydWU7XG4gICAgICBmb3IgKGxldCByID0gcmFuayArIDE7IHIgPD0gNzsgcisrKSB7XG4gICAgICAgIGlmIChpc1BpZWNlQXQoc2Vzc2lvbiwgc3F1YXJlT2YoZmlsZSwgcikpKSB7IGNsZWFyVG9FZGdlID0gZmFsc2U7IGJyZWFrOyB9XG4gICAgICB9XG4gICAgICBpZiAoY2xlYXJUb0VkZ2UpIHtcbiAgICAgICAgY29uc3QgcGF0aDogU3F1YXJlW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgciA9IDA7IHIgPCByYW5rOyByKyspIHBhdGgucHVzaChzcXVhcmVPZihmaWxlLCByKSk7XG4gICAgICAgIGNvbnN0IGRlc3QgPSB3YXJwRGVzdChzZXNzaW9uLCBwYXRoLCBjb2xvcik7XG4gICAgICAgIGlmIChkZXN0ICE9PSBudWxsICYmIGRlc3QgIT09IGZyb20pIGRlc3RpbmF0aW9ucy5hZGQoZGVzdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRG93biDihpIgd3JhcHMgZnJvbSByYW5rIDcuXG4gICAgaWYgKHJhbmsgPiAwKSB7XG4gICAgICBsZXQgY2xlYXJUb0VkZ2UgPSB0cnVlO1xuICAgICAgZm9yIChsZXQgciA9IHJhbmsgLSAxOyByID49IDA7IHItLSkge1xuICAgICAgICBpZiAoaXNQaWVjZUF0KHNlc3Npb24sIHNxdWFyZU9mKGZpbGUsIHIpKSkgeyBjbGVhclRvRWRnZSA9IGZhbHNlOyBicmVhazsgfVxuICAgICAgfVxuICAgICAgaWYgKGNsZWFyVG9FZGdlKSB7XG4gICAgICAgIGNvbnN0IHBhdGg6IFNxdWFyZVtdID0gW107XG4gICAgICAgIGZvciAobGV0IHIgPSA3OyByID4gcmFuazsgci0tKSBwYXRoLnB1c2goc3F1YXJlT2YoZmlsZSwgcikpO1xuICAgICAgICBjb25zdCBkZXN0ID0gd2FycERlc3Qoc2Vzc2lvbiwgcGF0aCwgY29sb3IpO1xuICAgICAgICBpZiAoZGVzdCAhPT0gbnVsbCAmJiBkZXN0ICE9PSBmcm9tKSBkZXN0aW5hdGlvbnMuYWRkKGRlc3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbLi4uZGVzdGluYXRpb25zXS5tYXAodG8gPT4gKHtcbiAgICAgIHBpZWNlSWQsXG4gICAgICBmcm9tLFxuICAgICAgdG8sXG4gICAgICBpc0NhcHR1cmU6IGlzUGllY2VBdChzZXNzaW9uLCB0byksXG4gICAgfSkpO1xuICB9LFxufSk7XG4iXSwiZmlsZSI6Ii9zcmMvcHJlc2V0cy9yb29rLXdhcnAudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/0c2e59579c95ee8062fab5ded45f2e91c65540eb b/7xOfJqsDU787fe61oSCq1/web/0c2e59579c95ee8062fab5ded45f2e91c65540eb deleted file mode 100644 index 8d53095..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/0c2e59579c95ee8062fab5ded45f2e91c65540eb +++ /dev/null @@ -1,144 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/layouts/validate.ts", {"importedNames":["validateLayout"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/starting-position.ts", {"importedNames":["CLASSIC_LAYOUT"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/layouts/chess960.ts", {"importedNames":["buildChess960Layout"]}); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/layouts/dunsany.ts", {"importedNames":["DUNSANY_LAYOUT"]}); -const __vite_ssr_import_5__ = await __vite_ssr_import__("/src/layouts/monster.ts", {"importedNames":["MONSTER_LAYOUT"]}); -const __vite_ssr_import_6__ = await __vite_ssr_import__("/src/layouts/pawns-only.ts", {"importedNames":["PAWNS_ONLY_LAYOUT"]}); -const __vite_ssr_import_7__ = await __vite_ssr_import__("/src/layouts/horde.ts", {"importedNames":["HORDE_LAYOUT"]}); -const __vite_ssr_import_8__ = await __vite_ssr_import__("/src/layouts/knightmate.ts", {"importedNames":["KNIGHTMATE_LAYOUT"]}); -const __vite_ssr_import_9__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["algebraicToSquare"]}); -function minimal(pieces, id = "test") { - return { - id, - name: "Test", - description: "test-only", - pieces, - source: "custom" - }; -} -(0,__vite_ssr_import_0__.describe)("validateLayout() — errors", () => { - (0,__vite_ssr_import_0__.it)("CLASSIC_LAYOUT validates with zero errors and zero warnings", () => { - const result = (0,__vite_ssr_import_1__.validateLayout)((0,__vite_ssr_import_2__.CLASSIC_LAYOUT)); - (0,__vite_ssr_import_0__.expect)(result.errors).toHaveLength(0); - (0,__vite_ssr_import_0__.expect)(result.warnings).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("reports error when no white king is present", () => { - const layout = minimal([ - { type: "king", color: "black", square: (0,__vite_ssr_import_9__.algebraicToSquare)("e8") } - ]); - const { errors } = (0,__vite_ssr_import_1__.validateLayout)(layout); - (0,__vite_ssr_import_0__.expect)(errors.some((e) => /no white king/i.test(e))).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("reports error when no black king is present", () => { - const layout = minimal([ - { type: "king", color: "white", square: (0,__vite_ssr_import_9__.algebraicToSquare)("e1") } - ]); - const { errors } = (0,__vite_ssr_import_1__.validateLayout)(layout); - (0,__vite_ssr_import_0__.expect)(errors.some((e) => /no black king/i.test(e))).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("reports error when both kings are missing", () => { - const layout = minimal([ - { type: "rook", color: "white", square: 0 } - ]); - const { errors } = (0,__vite_ssr_import_1__.validateLayout)(layout); - (0,__vite_ssr_import_0__.expect)(errors.some((e) => /no white king/i.test(e))).toBe(true); - (0,__vite_ssr_import_0__.expect)(errors.some((e) => /no black king/i.test(e))).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("reports error when two pieces occupy the same square", () => { - const layout = minimal([ - { type: "king", color: "white", square: (0,__vite_ssr_import_9__.algebraicToSquare)("e1") }, - { type: "king", color: "black", square: (0,__vite_ssr_import_9__.algebraicToSquare)("e8") }, - { type: "rook", color: "white", square: (0,__vite_ssr_import_9__.algebraicToSquare)("a1") }, - { type: "rook", color: "white", square: (0,__vite_ssr_import_9__.algebraicToSquare)("a1") } - // duplicate - ]); - const { errors } = (0,__vite_ssr_import_1__.validateLayout)(layout); - (0,__vite_ssr_import_0__.expect)(errors.some((e) => /duplicate/i.test(e))).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("reports error for square index < 0", () => { - const layout = minimal([ - { type: "king", color: "white", square: -1 }, - { type: "king", color: "black", square: (0,__vite_ssr_import_9__.algebraicToSquare)("e8") } - ]); - const { errors } = (0,__vite_ssr_import_1__.validateLayout)(layout); - (0,__vite_ssr_import_0__.expect)(errors.some((e) => /out-of-range/i.test(e))).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("reports error for square index >= 64", () => { - const layout = minimal([ - { type: "king", color: "white", square: 64 }, - { type: "king", color: "black", square: (0,__vite_ssr_import_9__.algebraicToSquare)("e8") } - ]); - const { errors } = (0,__vite_ssr_import_1__.validateLayout)(layout); - (0,__vite_ssr_import_0__.expect)(errors.some((e) => /out-of-range/i.test(e))).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("allows multiple kings per side (Knightmate)", () => { - const layout = minimal([ - { type: "king", color: "white", square: (0,__vite_ssr_import_9__.algebraicToSquare)("b1") }, - { type: "king", color: "white", square: (0,__vite_ssr_import_9__.algebraicToSquare)("g1") }, - { type: "king", color: "black", square: (0,__vite_ssr_import_9__.algebraicToSquare)("e8") } - ]); - const { errors } = (0,__vite_ssr_import_1__.validateLayout)(layout); - (0,__vite_ssr_import_0__.expect)(errors).toHaveLength(0); - }); -}); -(0,__vite_ssr_import_0__.describe)("validateLayout() — warnings", () => { - (0,__vite_ssr_import_0__.it)("warns when a white pawn sits on rank 1 (cannot move)", () => { - const layout = minimal([ - { type: "king", color: "white", square: (0,__vite_ssr_import_9__.algebraicToSquare)("e1") }, - { type: "king", color: "black", square: (0,__vite_ssr_import_9__.algebraicToSquare)("e8") }, - { type: "pawn", color: "white", square: (0,__vite_ssr_import_9__.algebraicToSquare)("a1") } - ]); - const { warnings } = (0,__vite_ssr_import_1__.validateLayout)(layout); - (0,__vite_ssr_import_0__.expect)(warnings.some((w) => /rank 1/i.test(w))).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("warns when a white pawn sits on rank 8 (promotion rank)", () => { - const layout = minimal([ - { type: "king", color: "white", square: (0,__vite_ssr_import_9__.algebraicToSquare)("e1") }, - { type: "king", color: "black", square: (0,__vite_ssr_import_9__.algebraicToSquare)("e8") }, - { type: "pawn", color: "white", square: (0,__vite_ssr_import_9__.algebraicToSquare)("a8") } - ]); - const { warnings } = (0,__vite_ssr_import_1__.validateLayout)(layout); - (0,__vite_ssr_import_0__.expect)(warnings.some((w) => /promotion/i.test(w))).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("warns when material count exceeds 32 per color", () => { - const pieces = [ - { type: "king", color: "white", square: 0 }, - { type: "king", color: "black", square: 63 } - ]; - for (let sq = 1; sq <= 32; sq++) { - pieces.push({ type: "pawn", color: "white", square: sq }); - }; - const { warnings } = (0,__vite_ssr_import_1__.validateLayout)(minimal(pieces)); - (0,__vite_ssr_import_0__.expect)(warnings.some((w) => /full FIDE army/i.test(w))).toBe(true); - }); -}); -(0,__vite_ssr_import_0__.describe)("validateLayout() — every shipped premade passes", () => { - (0,__vite_ssr_import_0__.it)("Dunsany passes with no errors", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.validateLayout)((0,__vite_ssr_import_4__.DUNSANY_LAYOUT)).errors).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("Monster passes with no errors", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.validateLayout)((0,__vite_ssr_import_5__.MONSTER_LAYOUT)).errors).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("Pawns-Only passes with no errors", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.validateLayout)((0,__vite_ssr_import_6__.PAWNS_ONLY_LAYOUT)).errors).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("Horde passes with no errors", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.validateLayout)((0,__vite_ssr_import_7__.HORDE_LAYOUT)).errors).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("Knightmate passes with no errors", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.validateLayout)((0,__vite_ssr_import_8__.KNIGHTMATE_LAYOUT)).errors).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("Chess960 passes for seed 518 (FIDE) and 20 random seeds", () => { - const seeds = [518]; - for (let i = 0; i < 20; i++) seeds.push(Math.floor(Math.random() * 960)); - for (const seed of seeds) { - const layout = (0,__vite_ssr_import_3__.buildChess960Layout)(seed); - const { errors } = (0,__vite_ssr_import_1__.validateLayout)(layout); - (0,__vite_ssr_import_0__.expect)(errors, `seed ${seed}: ${errors.join("; ")}`).toHaveLength(0); - } - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxTQUFTLFFBQ1AsUUFDQSxLQUFLLFFBQ1c7QUFDaEIsU0FBTztBQUFBLElBQ0w7QUFBQSxJQUNBLE1BQU07QUFBQSxJQUNOLGFBQWE7QUFBQSxJQUNiO0FBQUEsSUFDQSxRQUFRO0FBQUEsRUFDVjtBQUNGO0dBRUEsZ0NBQVMsNkJBQTZCLE1BQU07QUFDMUMsK0JBQUcsK0RBQStELE1BQU07QUFDdEUsVUFBTSxZQUFTLHlDQUFlLHFDQUFjO0FBQzVDLHFDQUFPLE9BQU8sTUFBTSxFQUFFLGFBQWEsQ0FBQztBQUNwQyxxQ0FBTyxPQUFPLFFBQVEsRUFBRSxhQUFhLENBQUM7QUFBQSxFQUN4QyxDQUFDO0FBRUQsK0JBQUcsK0NBQStDLE1BQU07QUFDdEQsVUFBTSxTQUFTLFFBQVE7QUFBQSxNQUNyQixFQUFFLE1BQU0sUUFBUSxPQUFPLFNBQVMsV0FBUSx5Q0FBa0IsSUFBSSxFQUFFO0FBQUEsSUFDbEUsQ0FBQztBQUNELFVBQU0sRUFBRSxPQUFPLE9BQUksc0NBQWUsTUFBTTtBQUN4QyxxQ0FBTyxPQUFPLEtBQUssQ0FBQyxNQUFNLGlCQUFpQixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJO0FBQUEsRUFDaEUsQ0FBQztBQUVELCtCQUFHLCtDQUErQyxNQUFNO0FBQ3RELFVBQU0sU0FBUyxRQUFRO0FBQUEsTUFDckIsRUFBRSxNQUFNLFFBQVEsT0FBTyxTQUFTLFdBQVEseUNBQWtCLElBQUksRUFBRTtBQUFBLElBQ2xFLENBQUM7QUFDRCxVQUFNLEVBQUUsT0FBTyxPQUFJLHNDQUFlLE1BQU07QUFDeEMscUNBQU8sT0FBTyxLQUFLLENBQUMsTUFBTSxpQkFBaUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSTtBQUFBLEVBQ2hFLENBQUM7QUFFRCwrQkFBRyw2Q0FBNkMsTUFBTTtBQUNwRCxVQUFNLFNBQVMsUUFBUTtBQUFBLE1BQ3JCLEVBQUUsTUFBTSxRQUFRLE9BQU8sU0FBUyxRQUFRLEVBQUU7QUFBQSxJQUM1QyxDQUFDO0FBQ0QsVUFBTSxFQUFFLE9BQU8sT0FBSSxzQ0FBZSxNQUFNO0FBQ3hDLHFDQUFPLE9BQU8sS0FBSyxDQUFDLE1BQU0saUJBQWlCLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUk7QUFDOUQscUNBQU8sT0FBTyxLQUFLLENBQUMsTUFBTSxpQkFBaUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSTtBQUFBLEVBQ2hFLENBQUM7QUFFRCwrQkFBRyx3REFBd0QsTUFBTTtBQUMvRCxVQUFNLFNBQVMsUUFBUTtBQUFBLE1BQ3JCLEVBQUUsTUFBTSxRQUFRLE9BQU8sU0FBUyxXQUFRLHlDQUFrQixJQUFJLEVBQUU7QUFBQSxNQUNoRSxFQUFFLE1BQU0sUUFBUSxPQUFPLFNBQVMsV0FBUSx5Q0FBa0IsSUFBSSxFQUFFO0FBQUEsTUFDaEUsRUFBRSxNQUFNLFFBQVEsT0FBTyxTQUFTLFdBQVEseUNBQWtCLElBQUksRUFBRTtBQUFBLE1BQ2hFLEVBQUUsTUFBTSxRQUFRLE9BQU8sU0FBUyxXQUFRLHlDQUFrQixJQUFJLEVBQUU7QUFBQTtBQUFBLElBQ2xFLENBQUM7QUFDRCxVQUFNLEVBQUUsT0FBTyxPQUFJLHNDQUFlLE1BQU07QUFDeEMscUNBQU8sT0FBTyxLQUFLLENBQUMsTUFBTSxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUk7QUFBQSxFQUM1RCxDQUFDO0FBRUQsK0JBQUcsc0NBQXNDLE1BQU07QUFDN0MsVUFBTSxTQUFTLFFBQVE7QUFBQSxNQUNyQixFQUFFLE1BQU0sUUFBUSxPQUFPLFNBQVMsUUFBUSxHQUFHO0FBQUEsTUFDM0MsRUFBRSxNQUFNLFFBQVEsT0FBTyxTQUFTLFdBQVEseUNBQWtCLElBQUksRUFBRTtBQUFBLElBQ2xFLENBQUM7QUFDRCxVQUFNLEVBQUUsT0FBTyxPQUFJLHNDQUFlLE1BQU07QUFDeEMscUNBQU8sT0FBTyxLQUFLLENBQUMsTUFBTSxnQkFBZ0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSTtBQUFBLEVBQy9ELENBQUM7QUFFRCwrQkFBRyx3Q0FBd0MsTUFBTTtBQUMvQyxVQUFNLFNBQVMsUUFBUTtBQUFBLE1BQ3JCLEVBQUUsTUFBTSxRQUFRLE9BQU8sU0FBUyxRQUFRLEdBQUc7QUFBQSxNQUMzQyxFQUFFLE1BQU0sUUFBUSxPQUFPLFNBQVMsV0FBUSx5Q0FBa0IsSUFBSSxFQUFFO0FBQUEsSUFDbEUsQ0FBQztBQUNELFVBQU0sRUFBRSxPQUFPLE9BQUksc0NBQWUsTUFBTTtBQUN4QyxxQ0FBTyxPQUFPLEtBQUssQ0FBQyxNQUFNLGdCQUFnQixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJO0FBQUEsRUFDL0QsQ0FBQztBQUVELCtCQUFHLCtDQUErQyxNQUFNO0FBRXRELFVBQU0sU0FBUyxRQUFRO0FBQUEsTUFDckIsRUFBRSxNQUFNLFFBQVEsT0FBTyxTQUFTLFdBQVEseUNBQWtCLElBQUksRUFBRTtBQUFBLE1BQ2hFLEVBQUUsTUFBTSxRQUFRLE9BQU8sU0FBUyxXQUFRLHlDQUFrQixJQUFJLEVBQUU7QUFBQSxNQUNoRSxFQUFFLE1BQU0sUUFBUSxPQUFPLFNBQVMsV0FBUSx5Q0FBa0IsSUFBSSxFQUFFO0FBQUEsSUFDbEUsQ0FBQztBQUNELFVBQU0sRUFBRSxPQUFPLE9BQUksc0NBQWUsTUFBTTtBQUN4QyxxQ0FBTyxNQUFNLEVBQUUsYUFBYSxDQUFDO0FBQUEsRUFDL0IsQ0FBQztBQUNILENBQUM7R0FFRCxnQ0FBUywrQkFBK0IsTUFBTTtBQUM1QywrQkFBRyx3REFBd0QsTUFBTTtBQUMvRCxVQUFNLFNBQVMsUUFBUTtBQUFBLE1BQ3JCLEVBQUUsTUFBTSxRQUFRLE9BQU8sU0FBUyxXQUFRLHlDQUFrQixJQUFJLEVBQUU7QUFBQSxNQUNoRSxFQUFFLE1BQU0sUUFBUSxPQUFPLFNBQVMsV0FBUSx5Q0FBa0IsSUFBSSxFQUFFO0FBQUEsTUFDaEUsRUFBRSxNQUFNLFFBQVEsT0FBTyxTQUFTLFdBQVEseUNBQWtCLElBQUksRUFBRTtBQUFBLElBQ2xFLENBQUM7QUFDRCxVQUFNLEVBQUUsU0FBUyxPQUFJLHNDQUFlLE1BQU07QUFDMUMscUNBQU8sU0FBUyxLQUFLLENBQUMsTUFBTSxVQUFVLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUk7QUFBQSxFQUMzRCxDQUFDO0FBRUQsK0JBQUcsMkRBQTJELE1BQU07QUFDbEUsVUFBTSxTQUFTLFFBQVE7QUFBQSxNQUNyQixFQUFFLE1BQU0sUUFBUSxPQUFPLFNBQVMsV0FBUSx5Q0FBa0IsSUFBSSxFQUFFO0FBQUEsTUFDaEUsRUFBRSxNQUFNLFFBQVEsT0FBTyxTQUFTLFdBQVEseUNBQWtCLElBQUksRUFBRTtBQUFBLE1BQ2hFLEVBQUUsTUFBTSxRQUFRLE9BQU8sU0FBUyxXQUFRLHlDQUFrQixJQUFJLEVBQUU7QUFBQSxJQUNsRSxDQUFDO0FBQ0QsVUFBTSxFQUFFLFNBQVMsT0FBSSxzQ0FBZSxNQUFNO0FBQzFDLHFDQUFPLFNBQVMsS0FBSyxDQUFDLE1BQU0sYUFBYSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJO0FBQUEsRUFDOUQsQ0FBQztBQUVELCtCQUFHLGtEQUFrRCxNQUFNO0FBRXpELFVBQU0sU0FBNkM7QUFBQSxNQUNqRCxFQUFFLE1BQU0sUUFBUSxPQUFPLFNBQVMsUUFBUSxFQUFFO0FBQUEsTUFDMUMsRUFBRSxNQUFNLFFBQVEsT0FBTyxTQUFTLFFBQVEsR0FBRztBQUFBLElBQzdDO0FBQ0EsYUFBUyxLQUFLLEdBQUcsTUFBTSxJQUFJLE1BQU07QUFDL0IsYUFBTyxLQUFLLEVBQUUsTUFBTSxRQUFRLE9BQU8sU0FBUyxRQUFRLEdBQUcsQ0FBQztBQUFBLElBQzFEO0FBQ0EsVUFBTSxFQUFFLFNBQVMsT0FBSSxzQ0FBZSxRQUFRLE1BQU0sQ0FBQztBQUNuRCxxQ0FBTyxTQUFTLEtBQUssQ0FBQyxNQUFNLGtCQUFrQixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJO0FBQUEsRUFDbkUsQ0FBQztBQUNILENBQUM7R0FFRCxnQ0FBUyxtREFBbUQsTUFBTTtBQUNoRSwrQkFBRyxpQ0FBaUMsTUFBTTtBQUN4Qyx3Q0FBTyx5Q0FBZSxxQ0FBYyxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUM7QUFBQSxFQUM5RCxDQUFDO0FBRUQsK0JBQUcsaUNBQWlDLE1BQU07QUFDeEMsd0NBQU8seUNBQWUscUNBQWMsRUFBRSxNQUFNLEVBQUUsYUFBYSxDQUFDO0FBQUEsRUFDOUQsQ0FBQztBQUVELCtCQUFHLG9DQUFvQyxNQUFNO0FBQzNDLHdDQUFPLHlDQUFlLHdDQUFpQixFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUM7QUFBQSxFQUNqRSxDQUFDO0FBRUQsK0JBQUcsK0JBQStCLE1BQU07QUFDdEMsd0NBQU8seUNBQWUsbUNBQVksRUFBRSxNQUFNLEVBQUUsYUFBYSxDQUFDO0FBQUEsRUFDNUQsQ0FBQztBQUVELCtCQUFHLG9DQUFvQyxNQUFNO0FBRzNDLHdDQUFPLHlDQUFlLHdDQUFpQixFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUM7QUFBQSxFQUNqRSxDQUFDO0FBRUQsK0JBQUcsMkRBQTJELE1BQU07QUFDbEUsVUFBTSxRQUFRLENBQUMsR0FBRztBQUNsQixhQUFTLElBQUksR0FBRyxJQUFJLElBQUksSUFBSyxPQUFNLEtBQUssS0FBSyxNQUFNLEtBQUssT0FBTyxJQUFJLEdBQUcsQ0FBQztBQUN2RSxlQUFXLFFBQVEsT0FBTztBQUN4QixZQUFNLFlBQVMsMkNBQW9CLElBQUk7QUFDdkMsWUFBTSxFQUFFLE9BQU8sT0FBSSxzQ0FBZSxNQUFNO0FBQ3hDLHVDQUFPLFFBQVEsUUFBUSxJQUFJLEtBQUssT0FBTyxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDO0FBQUEsSUFDckU7QUFBQSxFQUNGLENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJ2YWxpZGF0ZS50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBpdCwgZXhwZWN0IH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IHsgdmFsaWRhdGVMYXlvdXQgfSBmcm9tIFwiLi92YWxpZGF0ZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTdGFydGluZ0xheW91dCB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBDTEFTU0lDX0xBWU9VVCB9IGZyb20gXCIuLi9zdGFydGluZy1wb3NpdGlvbi5qc1wiO1xuaW1wb3J0IHsgYnVpbGRDaGVzczk2MExheW91dCB9IGZyb20gXCIuL2NoZXNzOTYwLmpzXCI7XG5pbXBvcnQgeyBEVU5TQU5ZX0xBWU9VVCB9IGZyb20gXCIuL2R1bnNhbnkuanNcIjtcbmltcG9ydCB7IE1PTlNURVJfTEFZT1VUIH0gZnJvbSBcIi4vbW9uc3Rlci5qc1wiO1xuaW1wb3J0IHsgUEFXTlNfT05MWV9MQVlPVVQgfSBmcm9tIFwiLi9wYXducy1vbmx5LmpzXCI7XG5pbXBvcnQgeyBIT1JERV9MQVlPVVQgfSBmcm9tIFwiLi9ob3JkZS5qc1wiO1xuaW1wb3J0IHsgS05JR0hUTUFURV9MQVlPVVQgfSBmcm9tIFwiLi9rbmlnaHRtYXRlLmpzXCI7XG5pbXBvcnQgeyBhbGdlYnJhaWNUb1NxdWFyZSB9IGZyb20gXCIuLi9jb29yZC5qc1wiO1xuXG5mdW5jdGlvbiBtaW5pbWFsKFxuICBwaWVjZXM6IFN0YXJ0aW5nTGF5b3V0W1wicGllY2VzXCJdLFxuICBpZCA9IFwidGVzdFwiLFxuKTogU3RhcnRpbmdMYXlvdXQge1xuICByZXR1cm4ge1xuICAgIGlkLFxuICAgIG5hbWU6IFwiVGVzdFwiLFxuICAgIGRlc2NyaXB0aW9uOiBcInRlc3Qtb25seVwiLFxuICAgIHBpZWNlcyxcbiAgICBzb3VyY2U6IFwiY3VzdG9tXCIsXG4gIH07XG59XG5cbmRlc2NyaWJlKFwidmFsaWRhdGVMYXlvdXQoKSDigJQgZXJyb3JzXCIsICgpID0+IHtcbiAgaXQoXCJDTEFTU0lDX0xBWU9VVCB2YWxpZGF0ZXMgd2l0aCB6ZXJvIGVycm9ycyBhbmQgemVybyB3YXJuaW5nc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGVMYXlvdXQoQ0xBU1NJQ19MQVlPVVQpO1xuICAgIGV4cGVjdChyZXN1bHQuZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgZXhwZWN0KHJlc3VsdC53YXJuaW5ncykudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcblxuICBpdChcInJlcG9ydHMgZXJyb3Igd2hlbiBubyB3aGl0ZSBraW5nIGlzIHByZXNlbnRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGxheW91dCA9IG1pbmltYWwoW1xuICAgICAgeyB0eXBlOiBcImtpbmdcIiwgY29sb3I6IFwiYmxhY2tcIiwgc3F1YXJlOiBhbGdlYnJhaWNUb1NxdWFyZShcImU4XCIpIH0sXG4gICAgXSk7XG4gICAgY29uc3QgeyBlcnJvcnMgfSA9IHZhbGlkYXRlTGF5b3V0KGxheW91dCk7XG4gICAgZXhwZWN0KGVycm9ycy5zb21lKChlKSA9PiAvbm8gd2hpdGUga2luZy9pLnRlc3QoZSkpKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcInJlcG9ydHMgZXJyb3Igd2hlbiBubyBibGFjayBraW5nIGlzIHByZXNlbnRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGxheW91dCA9IG1pbmltYWwoW1xuICAgICAgeyB0eXBlOiBcImtpbmdcIiwgY29sb3I6IFwid2hpdGVcIiwgc3F1YXJlOiBhbGdlYnJhaWNUb1NxdWFyZShcImUxXCIpIH0sXG4gICAgXSk7XG4gICAgY29uc3QgeyBlcnJvcnMgfSA9IHZhbGlkYXRlTGF5b3V0KGxheW91dCk7XG4gICAgZXhwZWN0KGVycm9ycy5zb21lKChlKSA9PiAvbm8gYmxhY2sga2luZy9pLnRlc3QoZSkpKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcInJlcG9ydHMgZXJyb3Igd2hlbiBib3RoIGtpbmdzIGFyZSBtaXNzaW5nXCIsICgpID0+IHtcbiAgICBjb25zdCBsYXlvdXQgPSBtaW5pbWFsKFtcbiAgICAgIHsgdHlwZTogXCJyb29rXCIsIGNvbG9yOiBcIndoaXRlXCIsIHNxdWFyZTogMCB9LFxuICAgIF0pO1xuICAgIGNvbnN0IHsgZXJyb3JzIH0gPSB2YWxpZGF0ZUxheW91dChsYXlvdXQpO1xuICAgIGV4cGVjdChlcnJvcnMuc29tZSgoZSkgPT4gL25vIHdoaXRlIGtpbmcvaS50ZXN0KGUpKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QoZXJyb3JzLnNvbWUoKGUpID0+IC9ubyBibGFjayBraW5nL2kudGVzdChlKSkpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwicmVwb3J0cyBlcnJvciB3aGVuIHR3byBwaWVjZXMgb2NjdXB5IHRoZSBzYW1lIHNxdWFyZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgbGF5b3V0ID0gbWluaW1hbChbXG4gICAgICB7IHR5cGU6IFwia2luZ1wiLCBjb2xvcjogXCJ3aGl0ZVwiLCBzcXVhcmU6IGFsZ2VicmFpY1RvU3F1YXJlKFwiZTFcIikgfSxcbiAgICAgIHsgdHlwZTogXCJraW5nXCIsIGNvbG9yOiBcImJsYWNrXCIsIHNxdWFyZTogYWxnZWJyYWljVG9TcXVhcmUoXCJlOFwiKSB9LFxuICAgICAgeyB0eXBlOiBcInJvb2tcIiwgY29sb3I6IFwid2hpdGVcIiwgc3F1YXJlOiBhbGdlYnJhaWNUb1NxdWFyZShcImExXCIpIH0sXG4gICAgICB7IHR5cGU6IFwicm9va1wiLCBjb2xvcjogXCJ3aGl0ZVwiLCBzcXVhcmU6IGFsZ2VicmFpY1RvU3F1YXJlKFwiYTFcIikgfSwgLy8gZHVwbGljYXRlXG4gICAgXSk7XG4gICAgY29uc3QgeyBlcnJvcnMgfSA9IHZhbGlkYXRlTGF5b3V0KGxheW91dCk7XG4gICAgZXhwZWN0KGVycm9ycy5zb21lKChlKSA9PiAvZHVwbGljYXRlL2kudGVzdChlKSkpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwicmVwb3J0cyBlcnJvciBmb3Igc3F1YXJlIGluZGV4IDwgMFwiLCAoKSA9PiB7XG4gICAgY29uc3QgbGF5b3V0ID0gbWluaW1hbChbXG4gICAgICB7IHR5cGU6IFwia2luZ1wiLCBjb2xvcjogXCJ3aGl0ZVwiLCBzcXVhcmU6IC0xIH0sXG4gICAgICB7IHR5cGU6IFwia2luZ1wiLCBjb2xvcjogXCJibGFja1wiLCBzcXVhcmU6IGFsZ2VicmFpY1RvU3F1YXJlKFwiZThcIikgfSxcbiAgICBdKTtcbiAgICBjb25zdCB7IGVycm9ycyB9ID0gdmFsaWRhdGVMYXlvdXQobGF5b3V0KTtcbiAgICBleHBlY3QoZXJyb3JzLnNvbWUoKGUpID0+IC9vdXQtb2YtcmFuZ2UvaS50ZXN0KGUpKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXBvcnRzIGVycm9yIGZvciBzcXVhcmUgaW5kZXggPj0gNjRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGxheW91dCA9IG1pbmltYWwoW1xuICAgICAgeyB0eXBlOiBcImtpbmdcIiwgY29sb3I6IFwid2hpdGVcIiwgc3F1YXJlOiA2NCB9LFxuICAgICAgeyB0eXBlOiBcImtpbmdcIiwgY29sb3I6IFwiYmxhY2tcIiwgc3F1YXJlOiBhbGdlYnJhaWNUb1NxdWFyZShcImU4XCIpIH0sXG4gICAgXSk7XG4gICAgY29uc3QgeyBlcnJvcnMgfSA9IHZhbGlkYXRlTGF5b3V0KGxheW91dCk7XG4gICAgZXhwZWN0KGVycm9ycy5zb21lKChlKSA9PiAvb3V0LW9mLXJhbmdlL2kudGVzdChlKSkpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwiYWxsb3dzIG11bHRpcGxlIGtpbmdzIHBlciBzaWRlIChLbmlnaHRtYXRlKVwiLCAoKSA9PiB7XG4gICAgLy8gMiB3aGl0ZSBraW5ncyArIDEgYmxhY2sga2luZyDigJQgc2hvdWxkIGJlIE9LIChLbmlnaHRtYXRlLWlzaCkuXG4gICAgY29uc3QgbGF5b3V0ID0gbWluaW1hbChbXG4gICAgICB7IHR5cGU6IFwia2luZ1wiLCBjb2xvcjogXCJ3aGl0ZVwiLCBzcXVhcmU6IGFsZ2VicmFpY1RvU3F1YXJlKFwiYjFcIikgfSxcbiAgICAgIHsgdHlwZTogXCJraW5nXCIsIGNvbG9yOiBcIndoaXRlXCIsIHNxdWFyZTogYWxnZWJyYWljVG9TcXVhcmUoXCJnMVwiKSB9LFxuICAgICAgeyB0eXBlOiBcImtpbmdcIiwgY29sb3I6IFwiYmxhY2tcIiwgc3F1YXJlOiBhbGdlYnJhaWNUb1NxdWFyZShcImU4XCIpIH0sXG4gICAgXSk7XG4gICAgY29uc3QgeyBlcnJvcnMgfSA9IHZhbGlkYXRlTGF5b3V0KGxheW91dCk7XG4gICAgZXhwZWN0KGVycm9ycykudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInZhbGlkYXRlTGF5b3V0KCkg4oCUIHdhcm5pbmdzXCIsICgpID0+IHtcbiAgaXQoXCJ3YXJucyB3aGVuIGEgd2hpdGUgcGF3biBzaXRzIG9uIHJhbmsgMSAoY2Fubm90IG1vdmUpXCIsICgpID0+IHtcbiAgICBjb25zdCBsYXlvdXQgPSBtaW5pbWFsKFtcbiAgICAgIHsgdHlwZTogXCJraW5nXCIsIGNvbG9yOiBcIndoaXRlXCIsIHNxdWFyZTogYWxnZWJyYWljVG9TcXVhcmUoXCJlMVwiKSB9LFxuICAgICAgeyB0eXBlOiBcImtpbmdcIiwgY29sb3I6IFwiYmxhY2tcIiwgc3F1YXJlOiBhbGdlYnJhaWNUb1NxdWFyZShcImU4XCIpIH0sXG4gICAgICB7IHR5cGU6IFwicGF3blwiLCBjb2xvcjogXCJ3aGl0ZVwiLCBzcXVhcmU6IGFsZ2VicmFpY1RvU3F1YXJlKFwiYTFcIikgfSxcbiAgICBdKTtcbiAgICBjb25zdCB7IHdhcm5pbmdzIH0gPSB2YWxpZGF0ZUxheW91dChsYXlvdXQpO1xuICAgIGV4cGVjdCh3YXJuaW5ncy5zb21lKCh3KSA9PiAvcmFuayAxL2kudGVzdCh3KSkpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwid2FybnMgd2hlbiBhIHdoaXRlIHBhd24gc2l0cyBvbiByYW5rIDggKHByb21vdGlvbiByYW5rKVwiLCAoKSA9PiB7XG4gICAgY29uc3QgbGF5b3V0ID0gbWluaW1hbChbXG4gICAgICB7IHR5cGU6IFwia2luZ1wiLCBjb2xvcjogXCJ3aGl0ZVwiLCBzcXVhcmU6IGFsZ2VicmFpY1RvU3F1YXJlKFwiZTFcIikgfSxcbiAgICAgIHsgdHlwZTogXCJraW5nXCIsIGNvbG9yOiBcImJsYWNrXCIsIHNxdWFyZTogYWxnZWJyYWljVG9TcXVhcmUoXCJlOFwiKSB9LFxuICAgICAgeyB0eXBlOiBcInBhd25cIiwgY29sb3I6IFwid2hpdGVcIiwgc3F1YXJlOiBhbGdlYnJhaWNUb1NxdWFyZShcImE4XCIpIH0sXG4gICAgXSk7XG4gICAgY29uc3QgeyB3YXJuaW5ncyB9ID0gdmFsaWRhdGVMYXlvdXQobGF5b3V0KTtcbiAgICBleHBlY3Qod2FybmluZ3Muc29tZSgodykgPT4gL3Byb21vdGlvbi9pLnRlc3QodykpKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcIndhcm5zIHdoZW4gbWF0ZXJpYWwgY291bnQgZXhjZWVkcyAzMiBwZXIgY29sb3JcIiwgKCkgPT4ge1xuICAgIC8vIDMzIHdoaXRlIHBpZWNlcyAoa2luZyArIDMyIGV4dHJhIG9uIHVuaXF1ZSBzcXVhcmVzKS5cbiAgICBjb25zdCBwaWVjZXM6IFN0YXJ0aW5nTGF5b3V0W1wicGllY2VzXCJdW251bWJlcl1bXSA9IFtcbiAgICAgIHsgdHlwZTogXCJraW5nXCIsIGNvbG9yOiBcIndoaXRlXCIsIHNxdWFyZTogMCB9LFxuICAgICAgeyB0eXBlOiBcImtpbmdcIiwgY29sb3I6IFwiYmxhY2tcIiwgc3F1YXJlOiA2MyB9LFxuICAgIF07XG4gICAgZm9yIChsZXQgc3EgPSAxOyBzcSA8PSAzMjsgc3ErKykge1xuICAgICAgcGllY2VzLnB1c2goeyB0eXBlOiBcInBhd25cIiwgY29sb3I6IFwid2hpdGVcIiwgc3F1YXJlOiBzcSB9KTtcbiAgICB9XG4gICAgY29uc3QgeyB3YXJuaW5ncyB9ID0gdmFsaWRhdGVMYXlvdXQobWluaW1hbChwaWVjZXMpKTtcbiAgICBleHBlY3Qod2FybmluZ3Muc29tZSgodykgPT4gL2Z1bGwgRklERSBhcm15L2kudGVzdCh3KSkpLnRvQmUodHJ1ZSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwidmFsaWRhdGVMYXlvdXQoKSDigJQgZXZlcnkgc2hpcHBlZCBwcmVtYWRlIHBhc3Nlc1wiLCAoKSA9PiB7XG4gIGl0KFwiRHVuc2FueSBwYXNzZXMgd2l0aCBubyBlcnJvcnNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCh2YWxpZGF0ZUxheW91dChEVU5TQU5ZX0xBWU9VVCkuZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xuXG4gIGl0KFwiTW9uc3RlciBwYXNzZXMgd2l0aCBubyBlcnJvcnNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCh2YWxpZGF0ZUxheW91dChNT05TVEVSX0xBWU9VVCkuZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xuXG4gIGl0KFwiUGF3bnMtT25seSBwYXNzZXMgd2l0aCBubyBlcnJvcnNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCh2YWxpZGF0ZUxheW91dChQQVdOU19PTkxZX0xBWU9VVCkuZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xuXG4gIGl0KFwiSG9yZGUgcGFzc2VzIHdpdGggbm8gZXJyb3JzXCIsICgpID0+IHtcbiAgICBleHBlY3QodmFsaWRhdGVMYXlvdXQoSE9SREVfTEFZT1VUKS5lcnJvcnMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG5cbiAgaXQoXCJLbmlnaHRtYXRlIHBhc3NlcyB3aXRoIG5vIGVycm9yc1wiLCAoKSA9PiB7XG4gICAgLy8gS25pZ2h0bWF0ZSBoYXMgMiBraW5ncyBwZXIgc2lkZTsgdmFsaWRhdG9yJ3MgcmVsYXhlZCBydWxlXG4gICAgLy8gKGF0IGxlYXN0IDEgcGVyIHNpZGUpIGFkbWl0cyB0aGlzLlxuICAgIGV4cGVjdCh2YWxpZGF0ZUxheW91dChLTklHSFRNQVRFX0xBWU9VVCkuZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xuXG4gIGl0KFwiQ2hlc3M5NjAgcGFzc2VzIGZvciBzZWVkIDUxOCAoRklERSkgYW5kIDIwIHJhbmRvbSBzZWVkc1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2VlZHMgPSBbNTE4XTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIwOyBpKyspIHNlZWRzLnB1c2goTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogOTYwKSk7XG4gICAgZm9yIChjb25zdCBzZWVkIG9mIHNlZWRzKSB7XG4gICAgICBjb25zdCBsYXlvdXQgPSBidWlsZENoZXNzOTYwTGF5b3V0KHNlZWQpO1xuICAgICAgY29uc3QgeyBlcnJvcnMgfSA9IHZhbGlkYXRlTGF5b3V0KGxheW91dCk7XG4gICAgICBleHBlY3QoZXJyb3JzLCBgc2VlZCAke3NlZWR9OiAke2Vycm9ycy5qb2luKFwiOyBcIil9YCkudG9IYXZlTGVuZ3RoKDApO1xuICAgIH1cbiAgfSk7XG59KTtcbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9jaGVzcy9zcmMvbGF5b3V0cy92YWxpZGF0ZS50ZXN0LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/0db5c344d5c1329263b6e79127352c79e14ae98d b/7xOfJqsDU787fe61oSCq1/web/0db5c344d5c1329263b6e79127352c79e14ae98d deleted file mode 100644 index 755161f..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/0db5c344d5c1329263b6e79127352c79e14ae98d +++ /dev/null @@ -1,252 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "AggregationNode", { enumerable: true, configurable: true, get(){ try { return AggregationNode } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/beta.js", {"importedNames":["Token"]});/** - * AggregationNode — maintains a running aggregate over match bindings and - * emits a single "aggregate token" downstream whose binding for the result - * variable reflects the current aggregate value. - * - * Per `packages/rete/SPEC.md §Rete II Reference Target` (table row - * "AggregationNode"), supported aggregators are: - * - * - `count` — number of input matches (O(1) update). - * - `sum` — numeric sum (O(1) update, incremental on both sides). - * - `min` — minimum numeric value (O(n) scan on update; see note). - * - `max` — maximum numeric value (O(n) scan on update; see note). - * - `collect` — array of all values (unsorted; O(n) copy per emit). - * - * ### Downstream emission protocol - * - * An AggregationNode always has *exactly one* active aggregate token at a - * time after {@link init} has been called. When the aggregate value - * changes, the node: - * - * 1. Deactivates the previous aggregate token (listeners fire). - * 2. Activates a fresh token carrying the new value (listeners fire). - * - * This matches how downstream BetaMemory/JoinNode/ProductionNode handle - * update semantics — they rely on deactivate-then-activate, not on token - * mutation. {@link Token} is immutable by convention, so we allocate a new - * token on every change rather than mutating `bindings`. - * - * ### Incremental strategy - * - * For `sum`, the node tracks a running total and updates by +value on - * activate / −value on deactivate. This avoids a full scan of the input - * set on every retract, which is the requirement called out for large - * match sets. - * - * For `count`, the size of the underlying value map is O(1) to read. - * - * For `min` / `max`, we scan the current value set on each update. A - * sorted multiset would give O(log n) update but at the cost of - * significant structural complexity; the scan is fast (tight inner loop - * over a `Map`) for the match-set sizes this engine is designed for - * (hundreds to low thousands of tokens per node). The scalability test - * in `aggregate.test.ts` exercises 1000 activations per aggregator to - * keep this assumption honest. - * - * For `collect`, each emission copies the value list into a fresh array - * so downstream code can safely snapshot bindings without observing - * later mutations. - * - * ### Empty-set semantics - * - * With zero input matches, the node emits: - * - `count` → `0` - * - `sum` → `0` - * - `min` → `0` (no natural "identity"; `0` chosen for consistency - * with `sum`, so rules can test `result > 0` safely) - * - `max` → `0` - * - `collect` → `[]` - * - * Callers that need to distinguish "no matches" from "min happens to be - * zero" should combine the aggregation with a count condition or use an - * ExistentialNode upstream. - */ - -/** - * Synthetic fact carried by every aggregate token. - * - * Aggregate tokens do not derive from a single working-memory fact — they - * represent a summary of many. Downstream nodes that walk `.fact` for - * diagnostics will see this sentinel rather than an arbitrary one of the - * contributing facts, which would be misleading. - * - * The id `-1` is outside the range of any application-assigned entity id - * (all real ids are allocated as non-negative integers — see - * `schema.ts`), so there is no risk of collision. - */ -const AGG_FACT = { - id: -1, - attr: "__agg__", - value: null, -}; -class AggregationNode { - kind; - inputVar; - resultVar; - #activateListeners = []; - #deactivateListeners = []; - /** - * All current input matches keyed by their upstream token, mapped to - * the binding value this node is aggregating over. - * - * Keyed by the token reference (not by binding value) so that two - * tokens contributing the same value — e.g. two units both at `hp=10` - * — are tracked independently and both contribute to `count`, `sum`, - * `collect`, etc. - */ - #values = new Map(); - /** Running sum, kept in sync with {@link #values} for O(1) update on sum. */ - #sumTotal = 0; - /** The currently-active aggregate token downstream, or `null` if {@link init} - * has not yet been called. */ - #currentToken = null; - constructor(kind, - /** Variable name in the incoming bindings whose value is aggregated. */ - inputVar, - /** Variable name used in the outgoing aggregate token's bindings. */ - resultVar) { - this.kind = kind; - this.inputVar = inputVar; - this.resultVar = resultVar; - } - addDownstreamActivate(listener) { - this.#activateListeners.push(listener); - } - addDownstreamDeactivate(listener) { - this.#deactivateListeners.push(listener); - } - /** - * Emit the initial aggregate token (reflecting zero input matches). - * - * Must be called after wiring downstream listeners. Aggregation nodes - * differ from BetaMemory / JoinNode in that they always hold one active - * downstream token — even with no inputs the aggregate is defined - * (count=0, sum=0, collect=[]) and rules may legitimately depend on it. - */ - init() { - this.#emitUpdate(); - } - /** - * Record a new input match and emit the updated aggregate. - * - * Idempotency: re-activating the same token reference is not supported - * by upstream callers (BetaMemory always deactivates before re-activating - * a changed partial match). We overwrite silently to avoid a silent - * double-count of `sum` in that degenerate case, but the caller should - * not rely on this. - */ - leftActivate(token) { - const value = this.#readValue(token); - // If the token is already tracked (shouldn't happen in well-wired - // networks), subtract the old contribution from the running sum first - // so the new value replaces — not adds to — the old. - if (this.#values.has(token) && this.kind === "sum") { - const prev = this.#values.get(token); - if (typeof prev === "number") - this.#sumTotal -= prev; - }; - this.#values.set(token, value); - if (this.kind === "sum" && typeof value === "number") { - this.#sumTotal += value; - }; - this.#emitUpdate(); - } - /** - * Retract an input match and emit the updated aggregate. - * - * Unknown tokens are a no-op on the internal state but still trigger a - * downstream emit, mirroring {@link BetaMemory.leftDeactivate}'s lenient - * contract — downstream may have derived tokens that need to settle to - * a consistent aggregate value regardless. - */ - leftDeactivate(token) { - const had = this.#values.has(token); - if (had && this.kind === "sum") { - const prev = this.#values.get(token); - if (typeof prev === "number") - this.#sumTotal -= prev; - }; - this.#values.delete(token); - this.#emitUpdate(); - } - /** - * Read the aggregation value from the given token's bindings. - * - * Falls back to `0` when the binding is missing so that callers who - * incorrectly wire the node don't crash; aggregated bindings that are - * missing would be a network-wiring bug which surfaces as "sum not - * changing" rather than an opaque `NaN`. - */ - #readValue(token) { - const v = token.bindings[this.inputVar]; - return v === undefined ? 0 : v; - } - /** - * Deactivate the previous aggregate token (if any) and activate a new - * one carrying the freshly-computed result. - */ - #emitUpdate() { - const result = this.#materialize(); - const bindings = { [this.resultVar]: result }; - const newToken = new __vite_ssr_import_0__.Token(null, AGG_FACT, bindings); - // Deactivate the old aggregate token first, so downstream sees a clean - // transition (deactivate-then-activate) rather than two simultaneously - // active summaries of the same input set. - const prev = this.#currentToken; - this.#currentToken = newToken; - if (prev !== null) { - for (const listener of this.#deactivateListeners) - listener(prev); - }; - for (const listener of this.#activateListeners) - listener(newToken); - } - /** Compute the current aggregate value from internal state. */ - #materialize() { - switch (this.kind) { - case "count": - return this.#values.size; - case "sum": - // `#sumTotal` is kept incrementally in sync on activate/deactivate. - return this.#sumTotal; - case "min": - return this.#scanExtremum("min"); - case "max": - return this.#scanExtremum("max"); - case "collect": - // Fresh array per emit so downstream snapshots are not affected by - // later activations — see the "fresh array" test in - // `aggregate.test.ts`. - return [...this.#values.values()]; - } - } - /** - * Scan the current value set for the min or max. - * - * Returns `0` for the empty set (see module header for rationale) so - * downstream rules don't have to special-case `undefined`. Non-numeric - * values are skipped — if the caller aggregates `min` over a string - * binding, that is a wiring bug; the best recoverable behaviour is to - * ignore the non-numeric entries rather than emit `NaN`. - */ - #scanExtremum(which) { - if (this.#values.size === 0) - return 0; - let best = null; - for (const v of this.#values.values()) { - if (typeof v !== "number") - continue; - if (best === null) { - best = v; - } - else if (which === "min" ? v < best : v > best) { - best = v; - } - }; - return best ?? 0; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQStEQSxpSkEvREE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEwRUE7Ozs7Ozs7Ozs7OztBQVlBLE1BQU0sUUFBUSxHQUFHO0lBQ2YsRUFBRSxFQUFFLENBQUMsQ0FBd0I7SUFDN0IsSUFBSSxFQUFFLFNBQW9CO0lBQzFCLEtBQUssRUFBRSxJQUFpQjtDQUNoQjtBQUVKLE1BQU8sZUFBZTtJQXVCZjtJQUVBO0lBRUE7SUExQkYsa0JBQWtCLEdBQXVCLEVBQUU7SUFDM0Msb0JBQW9CLEdBQXlCLEVBQUU7SUFFeEQ7Ozs7Ozs7OztJQVNTLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBb0I7SUFFOUM7SUFDQSxTQUFTLEdBQUcsQ0FBQztJQUViOztJQUVBLGFBQWEsR0FBaUIsSUFBSTtJQUVsQyxZQUNXLElBQW9CO0lBQzdCO0lBQ1MsUUFBZ0I7SUFDekI7SUFDUyxTQUFpQjtRQUpqQixTQUFJLEdBQUosSUFBSTtRQUVKLGFBQVEsR0FBUixRQUFRO1FBRVIsY0FBUyxHQUFULFNBQVM7SUFDakI7SUFFSCxxQkFBcUIsQ0FBQyxRQUEwQjtRQUM5QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN4QztJQUVBLHVCQUF1QixDQUFDLFFBQTRCO1FBQ2xELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzFDO0lBRUE7Ozs7Ozs7O0lBUUEsSUFBSTtRQUNGLElBQUksQ0FBQyxXQUFXLEVBQUU7SUFDcEI7SUFFQTs7Ozs7Ozs7O0lBU0EsWUFBWSxDQUFDLEtBQVk7UUFDdkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFFcEM7UUFDQTtRQUNBO1FBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtZQUNsRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDcEMsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO2dCQUFFLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSTtRQUN0RDtRQUVBLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7UUFFOUIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDcEQsSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLO1FBQ3pCO1FBRUEsSUFBSSxDQUFDLFdBQVcsRUFBRTtJQUNwQjtJQUVBOzs7Ozs7OztJQVFBLGNBQWMsQ0FBQyxLQUFZO1FBQ3pCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUNuQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtZQUM5QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDcEMsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO2dCQUFFLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSTtRQUN0RDtRQUNBLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsV0FBVyxFQUFFO0lBQ3BCO0lBRUE7Ozs7Ozs7O0lBUUEsVUFBVSxDQUFDLEtBQVk7UUFDckIsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3ZDLE9BQU8sQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDO0lBRUE7Ozs7SUFJQSxXQUFXO1FBQ1QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRTtRQUNsQyxNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRTtRQUN2RCxNQUFNLFFBQVEsR0FBRyxJQUFJLDJCQUFLLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUM7UUFFcEQ7UUFDQTtRQUNBO1FBQ0EsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWE7UUFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRO1FBRTdCLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtZQUNqQixLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxvQkFBb0I7Z0JBQUUsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNsRTtRQUNBLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLGtCQUFrQjtZQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUM7SUFDcEU7SUFFQTtJQUNBLFlBQVk7UUFDVixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDakIsS0FBSyxPQUFPO2dCQUNWLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJO1lBRTFCLEtBQUssS0FBSztnQkFDUjtnQkFDQSxPQUFPLElBQUksQ0FBQyxTQUFTO1lBRXZCLEtBQUssS0FBSztnQkFDUixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1lBRWxDLEtBQUssS0FBSztnQkFDUixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1lBRWxDLEtBQUssU0FBUztnQkFDWjtnQkFDQTtnQkFDQTtnQkFDQSxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3JDO0lBQ0Y7SUFFQTs7Ozs7Ozs7O0lBU0EsYUFBYSxDQUFDLEtBQW9CO1FBQ2hDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQztZQUFFLE9BQU8sQ0FBQztRQUNyQyxJQUFJLElBQUksR0FBa0IsSUFBSTtRQUM5QixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRO2dCQUFFO1lBQzNCLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtnQkFDakIsSUFBSSxHQUFHLENBQUM7WUFDVjtpQkFBTyxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUU7Z0JBQ2hELElBQUksR0FBRyxDQUFDO1lBQ1Y7UUFDRjtRQUNBLE9BQU8sSUFBSSxJQUFJLENBQUM7SUFDbEIiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9hZ2dyZWdhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBZ2dyZWdhdGlvbk5vZGUg4oCUIG1haW50YWlucyBhIHJ1bm5pbmcgYWdncmVnYXRlIG92ZXIgbWF0Y2ggYmluZGluZ3MgYW5kXG4gKiBlbWl0cyBhIHNpbmdsZSBcImFnZ3JlZ2F0ZSB0b2tlblwiIGRvd25zdHJlYW0gd2hvc2UgYmluZGluZyBmb3IgdGhlIHJlc3VsdFxuICogdmFyaWFibGUgcmVmbGVjdHMgdGhlIGN1cnJlbnQgYWdncmVnYXRlIHZhbHVlLlxuICpcbiAqIFBlciBgcGFja2FnZXMvcmV0ZS9TUEVDLm1kIMKnUmV0ZSBJSSBSZWZlcmVuY2UgVGFyZ2V0YCAodGFibGUgcm93XG4gKiBcIkFnZ3JlZ2F0aW9uTm9kZVwiKSwgc3VwcG9ydGVkIGFnZ3JlZ2F0b3JzIGFyZTpcbiAqXG4gKiAgIC0gYGNvdW50YCAgIOKAlCBudW1iZXIgb2YgaW5wdXQgbWF0Y2hlcyAoTygxKSB1cGRhdGUpLlxuICogICAtIGBzdW1gICAgICDigJQgbnVtZXJpYyBzdW0gKE8oMSkgdXBkYXRlLCBpbmNyZW1lbnRhbCBvbiBib3RoIHNpZGVzKS5cbiAqICAgLSBgbWluYCAgICAg4oCUIG1pbmltdW0gbnVtZXJpYyB2YWx1ZSAoTyhuKSBzY2FuIG9uIHVwZGF0ZTsgc2VlIG5vdGUpLlxuICogICAtIGBtYXhgICAgICDigJQgbWF4aW11bSBudW1lcmljIHZhbHVlIChPKG4pIHNjYW4gb24gdXBkYXRlOyBzZWUgbm90ZSkuXG4gKiAgIC0gYGNvbGxlY3RgIOKAlCBhcnJheSBvZiBhbGwgdmFsdWVzICh1bnNvcnRlZDsgTyhuKSBjb3B5IHBlciBlbWl0KS5cbiAqXG4gKiAjIyMgRG93bnN0cmVhbSBlbWlzc2lvbiBwcm90b2NvbFxuICpcbiAqIEFuIEFnZ3JlZ2F0aW9uTm9kZSBhbHdheXMgaGFzICpleGFjdGx5IG9uZSogYWN0aXZlIGFnZ3JlZ2F0ZSB0b2tlbiBhdCBhXG4gKiB0aW1lIGFmdGVyIHtAbGluayBpbml0fSBoYXMgYmVlbiBjYWxsZWQuIFdoZW4gdGhlIGFnZ3JlZ2F0ZSB2YWx1ZVxuICogY2hhbmdlcywgdGhlIG5vZGU6XG4gKlxuICogICAxLiBEZWFjdGl2YXRlcyB0aGUgcHJldmlvdXMgYWdncmVnYXRlIHRva2VuIChsaXN0ZW5lcnMgZmlyZSkuXG4gKiAgIDIuIEFjdGl2YXRlcyBhIGZyZXNoIHRva2VuIGNhcnJ5aW5nIHRoZSBuZXcgdmFsdWUgKGxpc3RlbmVycyBmaXJlKS5cbiAqXG4gKiBUaGlzIG1hdGNoZXMgaG93IGRvd25zdHJlYW0gQmV0YU1lbW9yeS9Kb2luTm9kZS9Qcm9kdWN0aW9uTm9kZSBoYW5kbGVcbiAqIHVwZGF0ZSBzZW1hbnRpY3Mg4oCUIHRoZXkgcmVseSBvbiBkZWFjdGl2YXRlLXRoZW4tYWN0aXZhdGUsIG5vdCBvbiB0b2tlblxuICogbXV0YXRpb24uIHtAbGluayBUb2tlbn0gaXMgaW1tdXRhYmxlIGJ5IGNvbnZlbnRpb24sIHNvIHdlIGFsbG9jYXRlIGEgbmV3XG4gKiB0b2tlbiBvbiBldmVyeSBjaGFuZ2UgcmF0aGVyIHRoYW4gbXV0YXRpbmcgYGJpbmRpbmdzYC5cbiAqXG4gKiAjIyMgSW5jcmVtZW50YWwgc3RyYXRlZ3lcbiAqXG4gKiBGb3IgYHN1bWAsIHRoZSBub2RlIHRyYWNrcyBhIHJ1bm5pbmcgdG90YWwgYW5kIHVwZGF0ZXMgYnkgK3ZhbHVlIG9uXG4gKiBhY3RpdmF0ZSAvIOKIknZhbHVlIG9uIGRlYWN0aXZhdGUuIFRoaXMgYXZvaWRzIGEgZnVsbCBzY2FuIG9mIHRoZSBpbnB1dFxuICogc2V0IG9uIGV2ZXJ5IHJldHJhY3QsIHdoaWNoIGlzIHRoZSByZXF1aXJlbWVudCBjYWxsZWQgb3V0IGZvciBsYXJnZVxuICogbWF0Y2ggc2V0cy5cbiAqXG4gKiBGb3IgYGNvdW50YCwgdGhlIHNpemUgb2YgdGhlIHVuZGVybHlpbmcgdmFsdWUgbWFwIGlzIE8oMSkgdG8gcmVhZC5cbiAqXG4gKiBGb3IgYG1pbmAgLyBgbWF4YCwgd2Ugc2NhbiB0aGUgY3VycmVudCB2YWx1ZSBzZXQgb24gZWFjaCB1cGRhdGUuIEFcbiAqIHNvcnRlZCBtdWx0aXNldCB3b3VsZCBnaXZlIE8obG9nIG4pIHVwZGF0ZSBidXQgYXQgdGhlIGNvc3Qgb2ZcbiAqIHNpZ25pZmljYW50IHN0cnVjdHVyYWwgY29tcGxleGl0eTsgdGhlIHNjYW4gaXMgZmFzdCAodGlnaHQgaW5uZXIgbG9vcFxuICogb3ZlciBhIGBNYXBgKSBmb3IgdGhlIG1hdGNoLXNldCBzaXplcyB0aGlzIGVuZ2luZSBpcyBkZXNpZ25lZCBmb3JcbiAqIChodW5kcmVkcyB0byBsb3cgdGhvdXNhbmRzIG9mIHRva2VucyBwZXIgbm9kZSkuIFRoZSBzY2FsYWJpbGl0eSB0ZXN0XG4gKiBpbiBgYWdncmVnYXRlLnRlc3QudHNgIGV4ZXJjaXNlcyAxMDAwIGFjdGl2YXRpb25zIHBlciBhZ2dyZWdhdG9yIHRvXG4gKiBrZWVwIHRoaXMgYXNzdW1wdGlvbiBob25lc3QuXG4gKlxuICogRm9yIGBjb2xsZWN0YCwgZWFjaCBlbWlzc2lvbiBjb3BpZXMgdGhlIHZhbHVlIGxpc3QgaW50byBhIGZyZXNoIGFycmF5XG4gKiBzbyBkb3duc3RyZWFtIGNvZGUgY2FuIHNhZmVseSBzbmFwc2hvdCBiaW5kaW5ncyB3aXRob3V0IG9ic2VydmluZ1xuICogbGF0ZXIgbXV0YXRpb25zLlxuICpcbiAqICMjIyBFbXB0eS1zZXQgc2VtYW50aWNzXG4gKlxuICogV2l0aCB6ZXJvIGlucHV0IG1hdGNoZXMsIHRoZSBub2RlIGVtaXRzOlxuICogICAtIGBjb3VudGAgICDihpIgYDBgXG4gKiAgIC0gYHN1bWAgICAgIOKGkiBgMGBcbiAqICAgLSBgbWluYCAgICAg4oaSIGAwYCAgKG5vIG5hdHVyYWwgXCJpZGVudGl0eVwiOyBgMGAgY2hvc2VuIGZvciBjb25zaXN0ZW5jeVxuICogICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGBzdW1gLCBzbyBydWxlcyBjYW4gdGVzdCBgcmVzdWx0ID4gMGAgc2FmZWx5KVxuICogICAtIGBtYXhgICAgICDihpIgYDBgXG4gKiAgIC0gYGNvbGxlY3RgIOKGkiBgW11gXG4gKlxuICogQ2FsbGVycyB0aGF0IG5lZWQgdG8gZGlzdGluZ3Vpc2ggXCJubyBtYXRjaGVzXCIgZnJvbSBcIm1pbiBoYXBwZW5zIHRvIGJlXG4gKiB6ZXJvXCIgc2hvdWxkIGNvbWJpbmUgdGhlIGFnZ3JlZ2F0aW9uIHdpdGggYSBjb3VudCBjb25kaXRpb24gb3IgdXNlIGFuXG4gKiBFeGlzdGVudGlhbE5vZGUgdXBzdHJlYW0uXG4gKi9cbmltcG9ydCB7IFRva2VuLCB0eXBlIEJpbmRpbmdzIH0gZnJvbSBcIi4vYmV0YS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBdHRyS2V5LCBGYWN0VmFsdWUgfSBmcm9tIFwiLi93bS5qc1wiO1xuXG4vKiogU3VwcG9ydGVkIGFnZ3JlZ2F0b3Iga2luZHMuIEV4dGVuZGluZyB0aGlzIGxpc3QgcmVxdWlyZXMgYSBuZXcgY2FzZSBpblxuICogIGBhcHBseU9uQWN0aXZhdGVgIC8gYGFwcGx5T25EZWFjdGl2YXRlYCAvIGBtYXRlcmlhbGl6ZWAuICovXG5leHBvcnQgdHlwZSBBZ2dyZWdhdG9yS2luZCA9IFwiY291bnRcIiB8IFwic3VtXCIgfCBcIm1pblwiIHwgXCJtYXhcIiB8IFwiY29sbGVjdFwiO1xuXG50eXBlIEFjdGl2YXRlTGlzdGVuZXIgPSAodG9rZW46IFRva2VuKSA9PiB2b2lkO1xudHlwZSBEZWFjdGl2YXRlTGlzdGVuZXIgPSAodG9rZW46IFRva2VuKSA9PiB2b2lkO1xuXG4vKipcbiAqIFN5bnRoZXRpYyBmYWN0IGNhcnJpZWQgYnkgZXZlcnkgYWdncmVnYXRlIHRva2VuLlxuICpcbiAqIEFnZ3JlZ2F0ZSB0b2tlbnMgZG8gbm90IGRlcml2ZSBmcm9tIGEgc2luZ2xlIHdvcmtpbmctbWVtb3J5IGZhY3Qg4oCUIHRoZXlcbiAqIHJlcHJlc2VudCBhIHN1bW1hcnkgb2YgbWFueS4gRG93bnN0cmVhbSBub2RlcyB0aGF0IHdhbGsgYC5mYWN0YCBmb3JcbiAqIGRpYWdub3N0aWNzIHdpbGwgc2VlIHRoaXMgc2VudGluZWwgcmF0aGVyIHRoYW4gYW4gYXJiaXRyYXJ5IG9uZSBvZiB0aGVcbiAqIGNvbnRyaWJ1dGluZyBmYWN0cywgd2hpY2ggd291bGQgYmUgbWlzbGVhZGluZy5cbiAqXG4gKiBUaGUgaWQgYC0xYCBpcyBvdXRzaWRlIHRoZSByYW5nZSBvZiBhbnkgYXBwbGljYXRpb24tYXNzaWduZWQgZW50aXR5IGlkXG4gKiAoYWxsIHJlYWwgaWRzIGFyZSBhbGxvY2F0ZWQgYXMgbm9uLW5lZ2F0aXZlIGludGVnZXJzIOKAlCBzZWVcbiAqIGBzY2hlbWEudHNgKSwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBjb2xsaXNpb24uXG4gKi9cbmNvbnN0IEFHR19GQUNUID0ge1xuICBpZDogLTEgYXMgdW5rbm93biBhcyBFbnRpdHlJZCxcbiAgYXR0cjogXCJfX2FnZ19fXCIgYXMgQXR0cktleSxcbiAgdmFsdWU6IG51bGwgYXMgRmFjdFZhbHVlLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNsYXNzIEFnZ3JlZ2F0aW9uTm9kZSB7XG4gIHJlYWRvbmx5ICNhY3RpdmF0ZUxpc3RlbmVyczogQWN0aXZhdGVMaXN0ZW5lcltdID0gW107XG4gIHJlYWRvbmx5ICNkZWFjdGl2YXRlTGlzdGVuZXJzOiBEZWFjdGl2YXRlTGlzdGVuZXJbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBBbGwgY3VycmVudCBpbnB1dCBtYXRjaGVzIGtleWVkIGJ5IHRoZWlyIHVwc3RyZWFtIHRva2VuLCBtYXBwZWQgdG9cbiAgICogdGhlIGJpbmRpbmcgdmFsdWUgdGhpcyBub2RlIGlzIGFnZ3JlZ2F0aW5nIG92ZXIuXG4gICAqXG4gICAqIEtleWVkIGJ5IHRoZSB0b2tlbiByZWZlcmVuY2UgKG5vdCBieSBiaW5kaW5nIHZhbHVlKSBzbyB0aGF0IHR3b1xuICAgKiB0b2tlbnMgY29udHJpYnV0aW5nIHRoZSBzYW1lIHZhbHVlIOKAlCBlLmcuIHR3byB1bml0cyBib3RoIGF0IGBocD0xMGBcbiAgICog4oCUIGFyZSB0cmFja2VkIGluZGVwZW5kZW50bHkgYW5kIGJvdGggY29udHJpYnV0ZSB0byBgY291bnRgLCBgc3VtYCxcbiAgICogYGNvbGxlY3RgLCBldGMuXG4gICAqL1xuICByZWFkb25seSAjdmFsdWVzID0gbmV3IE1hcDxUb2tlbiwgRmFjdFZhbHVlPigpO1xuXG4gIC8qKiBSdW5uaW5nIHN1bSwga2VwdCBpbiBzeW5jIHdpdGgge0BsaW5rICN2YWx1ZXN9IGZvciBPKDEpIHVwZGF0ZSBvbiBzdW0uICovXG4gICNzdW1Ub3RhbCA9IDA7XG5cbiAgLyoqIFRoZSBjdXJyZW50bHktYWN0aXZlIGFnZ3JlZ2F0ZSB0b2tlbiBkb3duc3RyZWFtLCBvciBgbnVsbGAgaWYge0BsaW5rIGluaXR9XG4gICAqICBoYXMgbm90IHlldCBiZWVuIGNhbGxlZC4gKi9cbiAgI2N1cnJlbnRUb2tlbjogVG9rZW4gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBraW5kOiBBZ2dyZWdhdG9yS2luZCxcbiAgICAvKiogVmFyaWFibGUgbmFtZSBpbiB0aGUgaW5jb21pbmcgYmluZGluZ3Mgd2hvc2UgdmFsdWUgaXMgYWdncmVnYXRlZC4gKi9cbiAgICByZWFkb25seSBpbnB1dFZhcjogc3RyaW5nLFxuICAgIC8qKiBWYXJpYWJsZSBuYW1lIHVzZWQgaW4gdGhlIG91dGdvaW5nIGFnZ3JlZ2F0ZSB0b2tlbidzIGJpbmRpbmdzLiAqL1xuICAgIHJlYWRvbmx5IHJlc3VsdFZhcjogc3RyaW5nLFxuICApIHt9XG5cbiAgYWRkRG93bnN0cmVhbUFjdGl2YXRlKGxpc3RlbmVyOiBBY3RpdmF0ZUxpc3RlbmVyKTogdm9pZCB7XG4gICAgdGhpcy4jYWN0aXZhdGVMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICBhZGREb3duc3RyZWFtRGVhY3RpdmF0ZShsaXN0ZW5lcjogRGVhY3RpdmF0ZUxpc3RlbmVyKTogdm9pZCB7XG4gICAgdGhpcy4jZGVhY3RpdmF0ZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0IHRoZSBpbml0aWFsIGFnZ3JlZ2F0ZSB0b2tlbiAocmVmbGVjdGluZyB6ZXJvIGlucHV0IG1hdGNoZXMpLlxuICAgKlxuICAgKiBNdXN0IGJlIGNhbGxlZCBhZnRlciB3aXJpbmcgZG93bnN0cmVhbSBsaXN0ZW5lcnMuIEFnZ3JlZ2F0aW9uIG5vZGVzXG4gICAqIGRpZmZlciBmcm9tIEJldGFNZW1vcnkgLyBKb2luTm9kZSBpbiB0aGF0IHRoZXkgYWx3YXlzIGhvbGQgb25lIGFjdGl2ZVxuICAgKiBkb3duc3RyZWFtIHRva2VuIOKAlCBldmVuIHdpdGggbm8gaW5wdXRzIHRoZSBhZ2dyZWdhdGUgaXMgZGVmaW5lZFxuICAgKiAoY291bnQ9MCwgc3VtPTAsIGNvbGxlY3Q9W10pIGFuZCBydWxlcyBtYXkgbGVnaXRpbWF0ZWx5IGRlcGVuZCBvbiBpdC5cbiAgICovXG4gIGluaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jZW1pdFVwZGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCBhIG5ldyBpbnB1dCBtYXRjaCBhbmQgZW1pdCB0aGUgdXBkYXRlZCBhZ2dyZWdhdGUuXG4gICAqXG4gICAqIElkZW1wb3RlbmN5OiByZS1hY3RpdmF0aW5nIHRoZSBzYW1lIHRva2VuIHJlZmVyZW5jZSBpcyBub3Qgc3VwcG9ydGVkXG4gICAqIGJ5IHVwc3RyZWFtIGNhbGxlcnMgKEJldGFNZW1vcnkgYWx3YXlzIGRlYWN0aXZhdGVzIGJlZm9yZSByZS1hY3RpdmF0aW5nXG4gICAqIGEgY2hhbmdlZCBwYXJ0aWFsIG1hdGNoKS4gV2Ugb3ZlcndyaXRlIHNpbGVudGx5IHRvIGF2b2lkIGEgc2lsZW50XG4gICAqIGRvdWJsZS1jb3VudCBvZiBgc3VtYCBpbiB0aGF0IGRlZ2VuZXJhdGUgY2FzZSwgYnV0IHRoZSBjYWxsZXIgc2hvdWxkXG4gICAqIG5vdCByZWx5IG9uIHRoaXMuXG4gICAqL1xuICBsZWZ0QWN0aXZhdGUodG9rZW46IFRva2VuKTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLiNyZWFkVmFsdWUodG9rZW4pO1xuXG4gICAgLy8gSWYgdGhlIHRva2VuIGlzIGFscmVhZHkgdHJhY2tlZCAoc2hvdWxkbid0IGhhcHBlbiBpbiB3ZWxsLXdpcmVkXG4gICAgLy8gbmV0d29ya3MpLCBzdWJ0cmFjdCB0aGUgb2xkIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSBydW5uaW5nIHN1bSBmaXJzdFxuICAgIC8vIHNvIHRoZSBuZXcgdmFsdWUgcmVwbGFjZXMg4oCUIG5vdCBhZGRzIHRvIOKAlCB0aGUgb2xkLlxuICAgIGlmICh0aGlzLiN2YWx1ZXMuaGFzKHRva2VuKSAmJiB0aGlzLmtpbmQgPT09IFwic3VtXCIpIHtcbiAgICAgIGNvbnN0IHByZXYgPSB0aGlzLiN2YWx1ZXMuZ2V0KHRva2VuKTtcbiAgICAgIGlmICh0eXBlb2YgcHJldiA9PT0gXCJudW1iZXJcIikgdGhpcy4jc3VtVG90YWwgLT0gcHJldjtcbiAgICB9XG5cbiAgICB0aGlzLiN2YWx1ZXMuc2V0KHRva2VuLCB2YWx1ZSk7XG5cbiAgICBpZiAodGhpcy5raW5kID09PSBcInN1bVwiICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgdGhpcy4jc3VtVG90YWwgKz0gdmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy4jZW1pdFVwZGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJhY3QgYW4gaW5wdXQgbWF0Y2ggYW5kIGVtaXQgdGhlIHVwZGF0ZWQgYWdncmVnYXRlLlxuICAgKlxuICAgKiBVbmtub3duIHRva2VucyBhcmUgYSBuby1vcCBvbiB0aGUgaW50ZXJuYWwgc3RhdGUgYnV0IHN0aWxsIHRyaWdnZXIgYVxuICAgKiBkb3duc3RyZWFtIGVtaXQsIG1pcnJvcmluZyB7QGxpbmsgQmV0YU1lbW9yeS5sZWZ0RGVhY3RpdmF0ZX0ncyBsZW5pZW50XG4gICAqIGNvbnRyYWN0IOKAlCBkb3duc3RyZWFtIG1heSBoYXZlIGRlcml2ZWQgdG9rZW5zIHRoYXQgbmVlZCB0byBzZXR0bGUgdG9cbiAgICogYSBjb25zaXN0ZW50IGFnZ3JlZ2F0ZSB2YWx1ZSByZWdhcmRsZXNzLlxuICAgKi9cbiAgbGVmdERlYWN0aXZhdGUodG9rZW46IFRva2VuKTogdm9pZCB7XG4gICAgY29uc3QgaGFkID0gdGhpcy4jdmFsdWVzLmhhcyh0b2tlbik7XG4gICAgaWYgKGhhZCAmJiB0aGlzLmtpbmQgPT09IFwic3VtXCIpIHtcbiAgICAgIGNvbnN0IHByZXYgPSB0aGlzLiN2YWx1ZXMuZ2V0KHRva2VuKTtcbiAgICAgIGlmICh0eXBlb2YgcHJldiA9PT0gXCJudW1iZXJcIikgdGhpcy4jc3VtVG90YWwgLT0gcHJldjtcbiAgICB9XG4gICAgdGhpcy4jdmFsdWVzLmRlbGV0ZSh0b2tlbik7XG4gICAgdGhpcy4jZW1pdFVwZGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgdGhlIGFnZ3JlZ2F0aW9uIHZhbHVlIGZyb20gdGhlIGdpdmVuIHRva2VuJ3MgYmluZGluZ3MuXG4gICAqXG4gICAqIEZhbGxzIGJhY2sgdG8gYDBgIHdoZW4gdGhlIGJpbmRpbmcgaXMgbWlzc2luZyBzbyB0aGF0IGNhbGxlcnMgd2hvXG4gICAqIGluY29ycmVjdGx5IHdpcmUgdGhlIG5vZGUgZG9uJ3QgY3Jhc2g7IGFnZ3JlZ2F0ZWQgYmluZGluZ3MgdGhhdCBhcmVcbiAgICogbWlzc2luZyB3b3VsZCBiZSBhIG5ldHdvcmstd2lyaW5nIGJ1ZyB3aGljaCBzdXJmYWNlcyBhcyBcInN1bSBub3RcbiAgICogY2hhbmdpbmdcIiByYXRoZXIgdGhhbiBhbiBvcGFxdWUgYE5hTmAuXG4gICAqL1xuICAjcmVhZFZhbHVlKHRva2VuOiBUb2tlbik6IEZhY3RWYWx1ZSB7XG4gICAgY29uc3QgdiA9IHRva2VuLmJpbmRpbmdzW3RoaXMuaW5wdXRWYXJdO1xuICAgIHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAwIDogdjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlIHRoZSBwcmV2aW91cyBhZ2dyZWdhdGUgdG9rZW4gKGlmIGFueSkgYW5kIGFjdGl2YXRlIGEgbmV3XG4gICAqIG9uZSBjYXJyeWluZyB0aGUgZnJlc2hseS1jb21wdXRlZCByZXN1bHQuXG4gICAqL1xuICAjZW1pdFVwZGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLiNtYXRlcmlhbGl6ZSgpO1xuICAgIGNvbnN0IGJpbmRpbmdzOiBCaW5kaW5ncyA9IHsgW3RoaXMucmVzdWx0VmFyXTogcmVzdWx0IH07XG4gICAgY29uc3QgbmV3VG9rZW4gPSBuZXcgVG9rZW4obnVsbCwgQUdHX0ZBQ1QsIGJpbmRpbmdzKTtcblxuICAgIC8vIERlYWN0aXZhdGUgdGhlIG9sZCBhZ2dyZWdhdGUgdG9rZW4gZmlyc3QsIHNvIGRvd25zdHJlYW0gc2VlcyBhIGNsZWFuXG4gICAgLy8gdHJhbnNpdGlvbiAoZGVhY3RpdmF0ZS10aGVuLWFjdGl2YXRlKSByYXRoZXIgdGhhbiB0d28gc2ltdWx0YW5lb3VzbHlcbiAgICAvLyBhY3RpdmUgc3VtbWFyaWVzIG9mIHRoZSBzYW1lIGlucHV0IHNldC5cbiAgICBjb25zdCBwcmV2ID0gdGhpcy4jY3VycmVudFRva2VuO1xuICAgIHRoaXMuI2N1cnJlbnRUb2tlbiA9IG5ld1Rva2VuO1xuXG4gICAgaWYgKHByZXYgIT09IG51bGwpIHtcbiAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy4jZGVhY3RpdmF0ZUxpc3RlbmVycykgbGlzdGVuZXIocHJldik7XG4gICAgfVxuICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy4jYWN0aXZhdGVMaXN0ZW5lcnMpIGxpc3RlbmVyKG5ld1Rva2VuKTtcbiAgfVxuXG4gIC8qKiBDb21wdXRlIHRoZSBjdXJyZW50IGFnZ3JlZ2F0ZSB2YWx1ZSBmcm9tIGludGVybmFsIHN0YXRlLiAqL1xuICAjbWF0ZXJpYWxpemUoKTogRmFjdFZhbHVlIHtcbiAgICBzd2l0Y2ggKHRoaXMua2luZCkge1xuICAgICAgY2FzZSBcImNvdW50XCI6XG4gICAgICAgIHJldHVybiB0aGlzLiN2YWx1ZXMuc2l6ZTtcblxuICAgICAgY2FzZSBcInN1bVwiOlxuICAgICAgICAvLyBgI3N1bVRvdGFsYCBpcyBrZXB0IGluY3JlbWVudGFsbHkgaW4gc3luYyBvbiBhY3RpdmF0ZS9kZWFjdGl2YXRlLlxuICAgICAgICByZXR1cm4gdGhpcy4jc3VtVG90YWw7XG5cbiAgICAgIGNhc2UgXCJtaW5cIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuI3NjYW5FeHRyZW11bShcIm1pblwiKTtcblxuICAgICAgY2FzZSBcIm1heFwiOlxuICAgICAgICByZXR1cm4gdGhpcy4jc2NhbkV4dHJlbXVtKFwibWF4XCIpO1xuXG4gICAgICBjYXNlIFwiY29sbGVjdFwiOlxuICAgICAgICAvLyBGcmVzaCBhcnJheSBwZXIgZW1pdCBzbyBkb3duc3RyZWFtIHNuYXBzaG90cyBhcmUgbm90IGFmZmVjdGVkIGJ5XG4gICAgICAgIC8vIGxhdGVyIGFjdGl2YXRpb25zIOKAlCBzZWUgdGhlIFwiZnJlc2ggYXJyYXlcIiB0ZXN0IGluXG4gICAgICAgIC8vIGBhZ2dyZWdhdGUudGVzdC50c2AuXG4gICAgICAgIHJldHVybiBbLi4udGhpcy4jdmFsdWVzLnZhbHVlcygpXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2NhbiB0aGUgY3VycmVudCB2YWx1ZSBzZXQgZm9yIHRoZSBtaW4gb3IgbWF4LlxuICAgKlxuICAgKiBSZXR1cm5zIGAwYCBmb3IgdGhlIGVtcHR5IHNldCAoc2VlIG1vZHVsZSBoZWFkZXIgZm9yIHJhdGlvbmFsZSkgc29cbiAgICogZG93bnN0cmVhbSBydWxlcyBkb24ndCBoYXZlIHRvIHNwZWNpYWwtY2FzZSBgdW5kZWZpbmVkYC4gTm9uLW51bWVyaWNcbiAgICogdmFsdWVzIGFyZSBza2lwcGVkIOKAlCBpZiB0aGUgY2FsbGVyIGFnZ3JlZ2F0ZXMgYG1pbmAgb3ZlciBhIHN0cmluZ1xuICAgKiBiaW5kaW5nLCB0aGF0IGlzIGEgd2lyaW5nIGJ1ZzsgdGhlIGJlc3QgcmVjb3ZlcmFibGUgYmVoYXZpb3VyIGlzIHRvXG4gICAqIGlnbm9yZSB0aGUgbm9uLW51bWVyaWMgZW50cmllcyByYXRoZXIgdGhhbiBlbWl0IGBOYU5gLlxuICAgKi9cbiAgI3NjYW5FeHRyZW11bSh3aGljaDogXCJtaW5cIiB8IFwibWF4XCIpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLiN2YWx1ZXMuc2l6ZSA9PT0gMCkgcmV0dXJuIDA7XG4gICAgbGV0IGJlc3Q6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIGZvciAoY29uc3QgdiBvZiB0aGlzLiN2YWx1ZXMudmFsdWVzKCkpIHtcbiAgICAgIGlmICh0eXBlb2YgdiAhPT0gXCJudW1iZXJcIikgY29udGludWU7XG4gICAgICBpZiAoYmVzdCA9PT0gbnVsbCkge1xuICAgICAgICBiZXN0ID0gdjtcbiAgICAgIH0gZWxzZSBpZiAod2hpY2ggPT09IFwibWluXCIgPyB2IDwgYmVzdCA6IHYgPiBiZXN0KSB7XG4gICAgICAgIGJlc3QgPSB2O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmVzdCA/PyAwO1xuICB9XG59XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvcmV0ZS9kaXN0L2FnZ3JlZ2F0ZS5qcyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/120d19c1e99d853dca67e9c8c1604d66d5846f91 b/7xOfJqsDU787fe61oSCq1/web/120d19c1e99d853dca67e9c8c1604d66d5846f91 deleted file mode 100644 index b390870..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/120d19c1e99d853dca67e9c8c1604d66d5846f91 +++ /dev/null @@ -1,56 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/zod@4.3.6/node_modules/zod/index.js", {"importedNames":["z"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/modifiers/registry.ts", {"importedNames":["MODIFIER_REGISTRY"]}); -function mockDescriptor(id) { - return { - id, - attrName: "Hp", - label: `Mock ${id}`, - valueSchema: __vite_ssr_import_1__.z.unknown(), - stackingRule: "additive", - apply: (_session, _pieceId, _value) => { - }, - describe: (value) => `mock=${String(value)}`, - uiForm: "number" - }; -} -(0,__vite_ssr_import_0__.describe)("MODIFIER_REGISTRY", () => { - (0,__vite_ssr_import_0__.it)("starts empty (no T1 descriptors registered yet)", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.MODIFIER_REGISTRY.list()).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("register(descriptor) makes it retrievable via get(id)", () => { - const desc = mockDescriptor("test-get"); - __vite_ssr_import_2__.MODIFIER_REGISTRY.register(desc); - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.MODIFIER_REGISTRY.get("test-get")).toBe(desc); - }); - (0,__vite_ssr_import_0__.it)("has(id) returns true after registration, false before", () => { - const id = "test-has"; - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.MODIFIER_REGISTRY.has(id)).toBe(false); - __vite_ssr_import_2__.MODIFIER_REGISTRY.register(mockDescriptor("test-has")); - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.MODIFIER_REGISTRY.has(id)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("list() returns every registered descriptor", () => { - const a = mockDescriptor("test-list-a"); - const b = mockDescriptor("test-list-b"); - __vite_ssr_import_2__.MODIFIER_REGISTRY.register(a); - __vite_ssr_import_2__.MODIFIER_REGISTRY.register(b); - const all = __vite_ssr_import_2__.MODIFIER_REGISTRY.list(); - (0,__vite_ssr_import_0__.expect)(all).toContain(a); - (0,__vite_ssr_import_0__.expect)(all).toContain(b); - }); - (0,__vite_ssr_import_0__.it)("register() with duplicate id throws an error mentioning the id", () => { - const id = "test-dup"; - __vite_ssr_import_2__.MODIFIER_REGISTRY.register(mockDescriptor(id)); - (0,__vite_ssr_import_0__.expect)(() => __vite_ssr_import_2__.MODIFIER_REGISTRY.register(mockDescriptor(id))).toThrow( - /test-dup/ - ); - }); - (0,__vite_ssr_import_0__.it)("get() returns undefined for unknown ids", () => { - (0,__vite_ssr_import_0__.expect)( - __vite_ssr_import_2__.MODIFIER_REGISTRY.get("test-never-registered") - ).toBeUndefined(); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBY0E7QUFDQTtBQUVBO0FBUUEsU0FBUyxlQUFlLElBQWdDO0FBQ3RELFNBQU87QUFBQSxJQUNMO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVixPQUFPLFFBQVEsRUFBRTtBQUFBLElBQ2pCLGFBQWEsd0JBQUUsUUFBUTtBQUFBLElBQ3ZCLGNBQWM7QUFBQSxJQUNkLE9BQU8sQ0FBQyxVQUFtQixVQUFvQixXQUFvQjtBQUFBLElBRW5FO0FBQUEsSUFDQSxVQUFVLENBQUMsVUFBVSxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQUEsSUFDMUMsUUFBUTtBQUFBLEVBQ1Y7QUFDRjtHQUVBLGdDQUFTLHFCQUFxQixNQUFNO0FBQ2xDLCtCQUFHLG1EQUFtRCxNQUFNO0FBTTFELHFDQUFPLHdDQUFrQixLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUFBLEVBQzdDLENBQUM7QUFFRCwrQkFBRyx5REFBeUQsTUFBTTtBQUNoRSxVQUFNLE9BQU8sZUFBZSxVQUFVO0FBQ3RDLDRDQUFrQixTQUFTLElBQUk7QUFDL0IscUNBQU8sd0NBQWtCLElBQUksVUFBNEIsQ0FBQyxFQUFFLEtBQUssSUFBSTtBQUFBLEVBQ3ZFLENBQUM7QUFFRCwrQkFBRyx5REFBeUQsTUFBTTtBQUNoRSxVQUFNLEtBQUs7QUFDWCxxQ0FBTyx3Q0FBa0IsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEtBQUs7QUFDNUMsNENBQWtCLFNBQVMsZUFBZSxVQUFVLENBQUM7QUFDckQscUNBQU8sd0NBQWtCLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJO0FBQUEsRUFDN0MsQ0FBQztBQUVELCtCQUFHLDhDQUE4QyxNQUFNO0FBQ3JELFVBQU0sSUFBSSxlQUFlLGFBQWE7QUFDdEMsVUFBTSxJQUFJLGVBQWUsYUFBYTtBQUN0Qyw0Q0FBa0IsU0FBUyxDQUFDO0FBQzVCLDRDQUFrQixTQUFTLENBQUM7QUFDNUIsVUFBTSxNQUFNLHdDQUFrQixLQUFLO0FBQ25DLHFDQUFPLEdBQUcsRUFBRSxVQUFVLENBQUM7QUFDdkIscUNBQU8sR0FBRyxFQUFFLFVBQVUsQ0FBQztBQUFBLEVBQ3pCLENBQUM7QUFFRCwrQkFBRyxrRUFBa0UsTUFBTTtBQUN6RSxVQUFNLEtBQUs7QUFDWCw0Q0FBa0IsU0FBUyxlQUFlLEVBQUUsQ0FBQztBQUM3QyxxQ0FBTyxNQUFNLHdDQUFrQixTQUFTLGVBQWUsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUFBLE1BQzNEO0FBQUEsSUFDRjtBQUFBLEVBQ0YsQ0FBQztBQUVELCtCQUFHLDJDQUEyQyxNQUFNO0FBQ2xEO0FBQUEsTUFDRSx3Q0FBa0IsSUFBSSx1QkFBeUM7QUFBQSxJQUNqRSxFQUFFLGNBQWM7QUFBQSxFQUNsQixDQUFDO0FBQ0gsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsicmVnaXN0cnkudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVuaXQgdGVzdHMgZm9yIE1PRElGSUVSX1JFR0lTVFJZLlxuICpcbiAqIERlbGliZXJhdGVseSBkb2VzIE5PVCBpbXBvcnQgYC4vaW5kZXguanNgIOKAlCB0aGF0IHdvdWxkIHB1bGwgaW4gZXZlcnlcbiAqIFQxIGRlc2NyaXB0b3IgdmlhIHNpZGUtZWZmZWN0cyBhbmQgcHJlLXBvcHVsYXRlIHRoZSByZWdpc3RyeSwgd2hpY2hcbiAqIHdvdWxkIGJyZWFrIHRoZSBcInN0YXJ0cyBlbXB0eVwiIGFzc2VydGlvbi4gT25jZSBkZXNjcmlwdG9ycyBsYW5kXG4gKiAoVDYtVDExKSwgdGhvc2UgdGVzdHMgbGl2ZSBpbiB0aGVpciBvd24gZmlsZXMuXG4gKlxuICogSU1QT1JUQU5UOiB0aGVzZSB0ZXN0cyBtdXRhdGUgdGhlIHNoYXJlZCBgTU9ESUZJRVJfUkVHSVNUUllgXG4gKiBzaW5nbGV0b24gKHRoZXJlJ3Mgbm8gcmVzZXQvY2xlYXIgQVBJIGJ5IGRlc2lnbiDigJQgdGhlIHJlYWwgcmVnaXN0cnlcbiAqIGlzIHBvcHVsYXRlZCBvbmNlIGF0IG1vZHVsZSBsb2FkIHRpbWUpLiBUbyBzdGF5IGlzb2xhdGVkIHdlIHVzZVxuICogZnJlc2gsIHVuaXF1ZSBpZHMgaW5zaWRlIHRoZSB0ZXN0IGFuZCBvbmx5IGFzc2VydCBwcm9wZXJ0aWVzIG9mXG4gKiBkZXNjcmlwdG9ycyB3ZSBvd24uXG4gKi9cbmltcG9ydCB7IGRlc2NyaWJlLCBpdCwgZXhwZWN0IH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgU2Vzc2lvbiwgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB7IE1PRElGSUVSX1JFR0lTVFJZIH0gZnJvbSBcIi4vcmVnaXN0cnkuanNcIjtcbmltcG9ydCB0eXBlIHsgTW9kaWZpZXJEZXNjcmlwdG9yLCBNb2RpZmllcktpbmRJZCB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5cbi8qKlxuICogQnVpbGQgYSBtaW5pbWFsIG1vY2sgZGVzY3JpcHRvci4gV2UgY2FzdCB0aGUgaWQgdGhyb3VnaCBzdHJpbmdcbiAqIGJlY2F1c2UgdGhlIHRlc3QgZGVzY3JpcHRvcnMgdXNlIHN5bnRoZXRpYyBpZHMgKFwidGVzdC0qXCIpIHRvIGF2b2lkXG4gKiBjb2xsaWRpbmcgd2l0aCByZWFsIG9uZXMgdGhhdCBUNi1UMTEgd2lsbCByZWdpc3Rlci5cbiAqL1xuZnVuY3Rpb24gbW9ja0Rlc2NyaXB0b3IoaWQ6IHN0cmluZyk6IE1vZGlmaWVyRGVzY3JpcHRvciB7XG4gIHJldHVybiB7XG4gICAgaWQ6IGlkIGFzIE1vZGlmaWVyS2luZElkLFxuICAgIGF0dHJOYW1lOiBcIkhwXCIsXG4gICAgbGFiZWw6IGBNb2NrICR7aWR9YCxcbiAgICB2YWx1ZVNjaGVtYTogei51bmtub3duKCksXG4gICAgc3RhY2tpbmdSdWxlOiBcImFkZGl0aXZlXCIsXG4gICAgYXBwbHk6IChfc2Vzc2lvbjogU2Vzc2lvbiwgX3BpZWNlSWQ6IEVudGl0eUlkLCBfdmFsdWU6IHVua25vd24pID0+IHtcbiAgICAgIC8vIG5vLW9wXG4gICAgfSxcbiAgICBkZXNjcmliZTogKHZhbHVlKSA9PiBgbW9jaz0ke1N0cmluZyh2YWx1ZSl9YCxcbiAgICB1aUZvcm06IFwibnVtYmVyXCIsXG4gIH07XG59XG5cbmRlc2NyaWJlKFwiTU9ESUZJRVJfUkVHSVNUUllcIiwgKCkgPT4ge1xuICBpdChcInN0YXJ0cyBlbXB0eSAobm8gVDEgZGVzY3JpcHRvcnMgcmVnaXN0ZXJlZCB5ZXQpXCIsICgpID0+IHtcbiAgICAvLyBBdCB0aGUgdGltZSB0aGlzIHRlc3QgZmlsZSBpcyBsb2FkZWQsIG5vIGRlc2NyaXB0b3Igc2lkZS1lZmZlY3RzXG4gICAgLy8gaGF2ZSBydW4gKHdlIGRvbid0IGltcG9ydCAuL2luZGV4LmpzKSwgc28gdGhlIHJlZ2lzdHJ5IHNob3VsZCBiZVxuICAgIC8vIGVtcHR5LiBJZiB0aGlzIGV2ZXIgZmlyZXMsIHNvbWVvbmUgcmVnaXN0ZXJlZCBhIGRlc2NyaXB0b3IgYXRcbiAgICAvLyBtb2R1bGUgc2NvcGUgd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgaW1wb3J0IGd1YXJkIOKAlCBpbnZlc3RpZ2F0ZVxuICAgIC8vIGJlZm9yZSByZWxheGluZy5cbiAgICBleHBlY3QoTU9ESUZJRVJfUkVHSVNUUlkubGlzdCgpKS50b0VxdWFsKFtdKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWdpc3RlcihkZXNjcmlwdG9yKSBtYWtlcyBpdCByZXRyaWV2YWJsZSB2aWEgZ2V0KGlkKVwiLCAoKSA9PiB7XG4gICAgY29uc3QgZGVzYyA9IG1vY2tEZXNjcmlwdG9yKFwidGVzdC1nZXRcIik7XG4gICAgTU9ESUZJRVJfUkVHSVNUUlkucmVnaXN0ZXIoZGVzYyk7XG4gICAgZXhwZWN0KE1PRElGSUVSX1JFR0lTVFJZLmdldChcInRlc3QtZ2V0XCIgYXMgTW9kaWZpZXJLaW5kSWQpKS50b0JlKGRlc2MpO1xuICB9KTtcblxuICBpdChcImhhcyhpZCkgcmV0dXJucyB0cnVlIGFmdGVyIHJlZ2lzdHJhdGlvbiwgZmFsc2UgYmVmb3JlXCIsICgpID0+IHtcbiAgICBjb25zdCBpZCA9IFwidGVzdC1oYXNcIiBhcyBNb2RpZmllcktpbmRJZDtcbiAgICBleHBlY3QoTU9ESUZJRVJfUkVHSVNUUlkuaGFzKGlkKSkudG9CZShmYWxzZSk7XG4gICAgTU9ESUZJRVJfUkVHSVNUUlkucmVnaXN0ZXIobW9ja0Rlc2NyaXB0b3IoXCJ0ZXN0LWhhc1wiKSk7XG4gICAgZXhwZWN0KE1PRElGSUVSX1JFR0lTVFJZLmhhcyhpZCkpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwibGlzdCgpIHJldHVybnMgZXZlcnkgcmVnaXN0ZXJlZCBkZXNjcmlwdG9yXCIsICgpID0+IHtcbiAgICBjb25zdCBhID0gbW9ja0Rlc2NyaXB0b3IoXCJ0ZXN0LWxpc3QtYVwiKTtcbiAgICBjb25zdCBiID0gbW9ja0Rlc2NyaXB0b3IoXCJ0ZXN0LWxpc3QtYlwiKTtcbiAgICBNT0RJRklFUl9SRUdJU1RSWS5yZWdpc3RlcihhKTtcbiAgICBNT0RJRklFUl9SRUdJU1RSWS5yZWdpc3RlcihiKTtcbiAgICBjb25zdCBhbGwgPSBNT0RJRklFUl9SRUdJU1RSWS5saXN0KCk7XG4gICAgZXhwZWN0KGFsbCkudG9Db250YWluKGEpO1xuICAgIGV4cGVjdChhbGwpLnRvQ29udGFpbihiKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWdpc3RlcigpIHdpdGggZHVwbGljYXRlIGlkIHRocm93cyBhbiBlcnJvciBtZW50aW9uaW5nIHRoZSBpZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgaWQgPSBcInRlc3QtZHVwXCI7XG4gICAgTU9ESUZJRVJfUkVHSVNUUlkucmVnaXN0ZXIobW9ja0Rlc2NyaXB0b3IoaWQpKTtcbiAgICBleHBlY3QoKCkgPT4gTU9ESUZJRVJfUkVHSVNUUlkucmVnaXN0ZXIobW9ja0Rlc2NyaXB0b3IoaWQpKSkudG9UaHJvdyhcbiAgICAgIC90ZXN0LWR1cC8sXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJnZXQoKSByZXR1cm5zIHVuZGVmaW5lZCBmb3IgdW5rbm93biBpZHNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIE1PRElGSUVSX1JFR0lTVFJZLmdldChcInRlc3QtbmV2ZXItcmVnaXN0ZXJlZFwiIGFzIE1vZGlmaWVyS2luZElkKSxcbiAgICApLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG59KTtcbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9jaGVzcy9zcmMvbW9kaWZpZXJzL3JlZ2lzdHJ5LnRlc3QudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/12bbefb2af83afa42dcda83dc28fd071cb086b9f b/7xOfJqsDU787fe61oSCq1/web/12bbefb2af83afa42dcda83dc28fd071cb086b9f deleted file mode 100644 index 68799c3..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/12bbefb2af83afa42dcda83dc28fd071cb086b9f +++ /dev/null @@ -1,23 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/presets/registry.ts", {"importedNames":["PRESET_REGISTRY"]}); -__vite_ssr_import_0__.PRESET_REGISTRY.register({ - id: "knight-immunity", - name: "Bishop-Proof Knights", - description: "Knights are immune to capture by Bishops. Bishops cannot make moves that would capture a Knight.", - incompatibleWith: [], - requires: [], - filterMoves: (moves, engine, pieceId) => { - const facts = engine.session.allFacts(); - const type = facts.find((f) => f.id === pieceId && f.attr === "PieceType")?.value; - if (type !== "bishop") return moves; - return moves.filter((m) => { - if (!m.isCapture) return true; - const targetFact = facts.find((f) => f.attr === "Position" && f.value === m.to); - if (!targetFact) return true; - const targetType = facts.find((f) => f.id === targetFact.id && f.attr === "PieceType")?.value; - return targetType !== "knight"; - }); - } -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBQUE7QUFFQSxzQ0FBZ0IsU0FBUztBQUFBLEVBQ3ZCLElBQUk7QUFBQSxFQUNKLE1BQU07QUFBQSxFQUNOLGFBQWE7QUFBQSxFQUNiLGtCQUFrQixDQUFDO0FBQUEsRUFDbkIsVUFBVSxDQUFDO0FBQUEsRUFDWCxhQUFhLENBQUMsT0FBTyxRQUFRLFlBQVk7QUFDdkMsVUFBTSxRQUFRLE9BQU8sUUFBUSxTQUFTO0FBQ3RDLFVBQU0sT0FBTyxNQUFNLEtBQUssT0FBSyxFQUFFLE9BQU8sV0FBVyxFQUFFLFNBQVMsV0FBVyxHQUFHO0FBQzFFLFFBQUksU0FBUyxTQUFVLFFBQU87QUFDOUIsV0FBTyxNQUFNLE9BQU8sT0FBSztBQUN2QixVQUFJLENBQUMsRUFBRSxVQUFXLFFBQU87QUFDekIsWUFBTSxhQUFhLE1BQU0sS0FBSyxPQUFLLEVBQUUsU0FBUyxjQUFjLEVBQUUsVUFBVSxFQUFFLEVBQUU7QUFDNUUsVUFBSSxDQUFDLFdBQVksUUFBTztBQUN4QixZQUFNLGFBQWEsTUFBTSxLQUFLLE9BQUssRUFBRSxPQUFPLFdBQVcsTUFBTSxFQUFFLFNBQVMsV0FBVyxHQUFHO0FBQ3RGLGFBQU8sZUFBZTtBQUFBLElBQ3hCLENBQUM7QUFBQSxFQUNIO0FBQ0YsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsia25pZ2h0LWltbXVuaXR5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBSRVNFVF9SRUdJU1RSWSB9IGZyb20gXCIuL3JlZ2lzdHJ5LmpzXCI7XG5cblBSRVNFVF9SRUdJU1RSWS5yZWdpc3Rlcih7XG4gIGlkOiBcImtuaWdodC1pbW11bml0eVwiLFxuICBuYW1lOiBcIkJpc2hvcC1Qcm9vZiBLbmlnaHRzXCIsXG4gIGRlc2NyaXB0aW9uOiBcIktuaWdodHMgYXJlIGltbXVuZSB0byBjYXB0dXJlIGJ5IEJpc2hvcHMuIEJpc2hvcHMgY2Fubm90IG1ha2UgbW92ZXMgdGhhdCB3b3VsZCBjYXB0dXJlIGEgS25pZ2h0LlwiLFxuICBpbmNvbXBhdGlibGVXaXRoOiBbXSxcbiAgcmVxdWlyZXM6IFtdLFxuICBmaWx0ZXJNb3ZlczogKG1vdmVzLCBlbmdpbmUsIHBpZWNlSWQpID0+IHtcbiAgICBjb25zdCBmYWN0cyA9IGVuZ2luZS5zZXNzaW9uLmFsbEZhY3RzKCk7XG4gICAgY29uc3QgdHlwZSA9IGZhY3RzLmZpbmQoZiA9PiBmLmlkID09PSBwaWVjZUlkICYmIGYuYXR0ciA9PT0gXCJQaWVjZVR5cGVcIik/LnZhbHVlO1xuICAgIGlmICh0eXBlICE9PSBcImJpc2hvcFwiKSByZXR1cm4gbW92ZXM7XG4gICAgcmV0dXJuIG1vdmVzLmZpbHRlcihtID0+IHtcbiAgICAgIGlmICghbS5pc0NhcHR1cmUpIHJldHVybiB0cnVlO1xuICAgICAgY29uc3QgdGFyZ2V0RmFjdCA9IGZhY3RzLmZpbmQoZiA9PiBmLmF0dHIgPT09IFwiUG9zaXRpb25cIiAmJiBmLnZhbHVlID09PSBtLnRvKTtcbiAgICAgIGlmICghdGFyZ2V0RmFjdCkgcmV0dXJuIHRydWU7XG4gICAgICBjb25zdCB0YXJnZXRUeXBlID0gZmFjdHMuZmluZChmID0+IGYuaWQgPT09IHRhcmdldEZhY3QuaWQgJiYgZi5hdHRyID09PSBcIlBpZWNlVHlwZVwiKT8udmFsdWU7XG4gICAgICByZXR1cm4gdGFyZ2V0VHlwZSAhPT0gXCJrbmlnaHRcIjtcbiAgICB9KTtcbiAgfSxcbn0pO1xuIl0sImZpbGUiOiIvc3JjL3ByZXNldHMva25pZ2h0LWltbXVuaXR5LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/16b76b90a468901a171a38b0ba9f984618222f1f b/7xOfJqsDU787fe61oSCq1/web/16b76b90a468901a171a38b0ba9f984618222f1f deleted file mode 100644 index a34fdd8..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/16b76b90a468901a171a38b0ba9f984618222f1f +++ /dev/null @@ -1,61 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/rules/king.ts", {"importedNames":["getLegalKingMoves"]}); -const mkId = (n) => n; -function insertPiece(session, id, type, color, square) { - const eid = mkId(id); - session.insert(eid, "PieceType", type); - session.insert(eid, "Color", color); - session.insert(eid, "Position", square); - return eid; -} -(0,__vite_ssr_import_0__.describe)("getLegalKingMoves", () => { - (0,__vite_ssr_import_0__.it)("king at e4 (28) has 8 moves on empty board", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const king = insertPiece(session, 1, "king", "white", 28); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.getLegalKingMoves)(session, king)).toHaveLength(8); - }); - (0,__vite_ssr_import_0__.it)("king at a1 (0) has 3 moves on empty board", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const king = insertPiece(session, 1, "king", "white", 0); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.getLegalKingMoves)(session, king)).toHaveLength(3); - }); - (0,__vite_ssr_import_0__.it)("king at h8 (63) has 3 moves on empty board", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const king = insertPiece(session, 1, "king", "black", 63); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.getLegalKingMoves)(session, king)).toHaveLength(3); - }); - (0,__vite_ssr_import_0__.it)("king blocked by own pieces", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const king = insertPiece(session, 1, "king", "white", 28); - insertPiece(session, 2, "pawn", "white", 27); - insertPiece(session, 3, "pawn", "white", 29); - const moves = (0,__vite_ssr_import_2__.getLegalKingMoves)(session, king); - (0,__vite_ssr_import_0__.expect)(moves.find((m) => m.to === 27)).toBeUndefined(); - (0,__vite_ssr_import_0__.expect)(moves.find((m) => m.to === 29)).toBeUndefined(); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(6); - }); - (0,__vite_ssr_import_0__.it)("king can capture enemy piece", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const king = insertPiece(session, 1, "king", "white", 28); - insertPiece(session, 2, "pawn", "black", 27); - const capture = (0,__vite_ssr_import_2__.getLegalKingMoves)(session, king).find((m) => m.to === 27); - (0,__vite_ssr_import_0__.expect)(capture).toBeDefined(); - (0,__vite_ssr_import_0__.expect)(capture?.isCapture).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("quiet moves are marked isCapture=false", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const king = insertPiece(session, 1, "king", "white", 28); - const moves = (0,__vite_ssr_import_2__.getLegalKingMoves)(session, king); - for (const m of moves) { - (0,__vite_ssr_import_0__.expect)(m.isCapture).toBe(false); - } - }); - (0,__vite_ssr_import_0__.it)("returns empty list when pieceId has no Position/Color", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.getLegalKingMoves)(session, mkId(999))).toEqual([]); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QU8seUNBQWtCLFNBQVMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQUEsRUFDMUQsQ0FBQztBQUNILENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImtpbmcudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgaXQsIGV4cGVjdCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB7IFNlc3Npb24gfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB7IGdldExlZ2FsS2luZ01vdmVzIH0gZnJvbSBcIi4va2luZy5qc1wiO1xuXG5jb25zdCBta0lkID0gKG46IG51bWJlcikgPT4gbiBhcyBFbnRpdHlJZDtcblxuZnVuY3Rpb24gaW5zZXJ0UGllY2UoXG4gIHNlc3Npb246IFNlc3Npb24sXG4gIGlkOiBudW1iZXIsXG4gIHR5cGU6IHN0cmluZyxcbiAgY29sb3I6IHN0cmluZyxcbiAgc3F1YXJlOiBudW1iZXIsXG4pOiBFbnRpdHlJZCB7XG4gIGNvbnN0IGVpZCA9IG1rSWQoaWQpO1xuICBzZXNzaW9uLmluc2VydChlaWQsIFwiUGllY2VUeXBlXCIsIHR5cGUpO1xuICBzZXNzaW9uLmluc2VydChlaWQsIFwiQ29sb3JcIiwgY29sb3IpO1xuICBzZXNzaW9uLmluc2VydChlaWQsIFwiUG9zaXRpb25cIiwgc3F1YXJlKTtcbiAgcmV0dXJuIGVpZDtcbn1cblxuZGVzY3JpYmUoXCJnZXRMZWdhbEtpbmdNb3Zlc1wiLCAoKSA9PiB7XG4gIGl0KFwia2luZyBhdCBlNCAoMjgpIGhhcyA4IG1vdmVzIG9uIGVtcHR5IGJvYXJkXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgY29uc3Qga2luZyA9IGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwia2luZ1wiLCBcIndoaXRlXCIsIDI4KTtcbiAgICBleHBlY3QoZ2V0TGVnYWxLaW5nTW92ZXMoc2Vzc2lvbiwga2luZykpLnRvSGF2ZUxlbmd0aCg4KTtcbiAgfSk7XG5cbiAgaXQoXCJraW5nIGF0IGExICgwKSBoYXMgMyBtb3ZlcyBvbiBlbXB0eSBib2FyZFwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGNvbnN0IGtpbmcgPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcImtpbmdcIiwgXCJ3aGl0ZVwiLCAwKTtcbiAgICBleHBlY3QoZ2V0TGVnYWxLaW5nTW92ZXMoc2Vzc2lvbiwga2luZykpLnRvSGF2ZUxlbmd0aCgzKTtcbiAgfSk7XG5cbiAgaXQoXCJraW5nIGF0IGg4ICg2MykgaGFzIDMgbW92ZXMgb24gZW1wdHkgYm9hcmRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBjb25zdCBraW5nID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJraW5nXCIsIFwiYmxhY2tcIiwgNjMpO1xuICAgIGV4cGVjdChnZXRMZWdhbEtpbmdNb3ZlcyhzZXNzaW9uLCBraW5nKSkudG9IYXZlTGVuZ3RoKDMpO1xuICB9KTtcblxuICBpdChcImtpbmcgYmxvY2tlZCBieSBvd24gcGllY2VzXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgY29uc3Qga2luZyA9IGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwia2luZ1wiLCBcIndoaXRlXCIsIDI4KTsgLy8gZTRcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAyLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCAyNyk7IC8vIGQ0XG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMywgXCJwYXduXCIsIFwid2hpdGVcIiwgMjkpOyAvLyBmNFxuICAgIGNvbnN0IG1vdmVzID0gZ2V0TGVnYWxLaW5nTW92ZXMoc2Vzc2lvbiwga2luZyk7XG4gICAgZXhwZWN0KG1vdmVzLmZpbmQobSA9PiBtLnRvID09PSAyNykpLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3QobW92ZXMuZmluZChtID0+IG0udG8gPT09IDI5KSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChtb3ZlcykudG9IYXZlTGVuZ3RoKDYpO1xuICB9KTtcblxuICBpdChcImtpbmcgY2FuIGNhcHR1cmUgZW5lbXkgcGllY2VcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBjb25zdCBraW5nID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJraW5nXCIsIFwid2hpdGVcIiwgMjgpOyAvLyBlNFxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDIsIFwicGF3blwiLCBcImJsYWNrXCIsIDI3KTsgLy8gZDRcbiAgICBjb25zdCBjYXB0dXJlID0gZ2V0TGVnYWxLaW5nTW92ZXMoc2Vzc2lvbiwga2luZykuZmluZChtID0+IG0udG8gPT09IDI3KTtcbiAgICBleHBlY3QoY2FwdHVyZSkudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3QoY2FwdHVyZT8uaXNDYXB0dXJlKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcInF1aWV0IG1vdmVzIGFyZSBtYXJrZWQgaXNDYXB0dXJlPWZhbHNlXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgY29uc3Qga2luZyA9IGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwia2luZ1wiLCBcIndoaXRlXCIsIDI4KTtcbiAgICBjb25zdCBtb3ZlcyA9IGdldExlZ2FsS2luZ01vdmVzKHNlc3Npb24sIGtpbmcpO1xuICAgIGZvciAoY29uc3QgbSBvZiBtb3Zlcykge1xuICAgICAgZXhwZWN0KG0uaXNDYXB0dXJlKS50b0JlKGZhbHNlKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyBlbXB0eSBsaXN0IHdoZW4gcGllY2VJZCBoYXMgbm8gUG9zaXRpb24vQ29sb3JcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBleHBlY3QoZ2V0TGVnYWxLaW5nTW92ZXMoc2Vzc2lvbiwgbWtJZCg5OTkpKSkudG9FcXVhbChbXSk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvY2hlc3Mvc3JjL3J1bGVzL2tpbmcudGVzdC50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/17a0231cc14565028b367ee234297355ed9d71c0 b/7xOfJqsDU787fe61oSCq1/web/17a0231cc14565028b367ee234297355ed9d71c0 deleted file mode 100644 index 4a1ead9..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/17a0231cc14565028b367ee234297355ed9d71c0 +++ /dev/null @@ -1,55 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "isPromotionMove", { enumerable: true, configurable: true, get(){ try { return isPromotionMove } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "getPromotionMoves", { enumerable: true, configurable: true, get(){ try { return getPromotionMoves } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "applyPromotion", { enumerable: true, configurable: true, get(){ try { return applyPromotion } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/schema.ts", {"importedNames":["PROMOTION_PIECES"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["rankOf"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/rules/board-queries.ts", {"importedNames":["getPiecePosition","getPieceColor","isPieceAt","isEnemyAt"]}); - - - - - -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/rules/primitives.ts", {"importedNames":["pawnSingleAdvance","pawnCaptureSqares"]}); -const PROMOTION_RANK = { white: 7, black: 0 }; -function isPromotionMove(to, color) { - return (0,__vite_ssr_import_1__.rankOf)(to) === PROMOTION_RANK[color]; -}; -function getPromotionMoves(session, pieceId) { - const from = (0,__vite_ssr_import_2__.getPiecePosition)(session, pieceId); - const color = (0,__vite_ssr_import_2__.getPieceColor)(session, pieceId); - if (from === null || color === null) return []; - const override = session.get(pieceId, "PromotionOverride"); - if (override === "disabled") return []; - const candidates = []; - const single = (0,__vite_ssr_import_3__.pawnSingleAdvance)(from, color); - if (single !== null && isPromotionMove(single, color) && !(0,__vite_ssr_import_2__.isPieceAt)(session, single)) { - candidates.push({ to: single, isCapture: false }); - }; - for (const sq of (0,__vite_ssr_import_3__.pawnCaptureSqares)(from, color)) { - if (isPromotionMove(sq, color) && (0,__vite_ssr_import_2__.isEnemyAt)(session, sq, color)) { - candidates.push({ to: sq, isCapture: true }); - } - }; - if (candidates.length === 0) return []; - const promotionChoices = override !== void 0 ? [override] : __vite_ssr_import_0__.PROMOTION_PIECES; - const moves = []; - for (const { to, isCapture } of candidates) { - for (const promoteTo of promotionChoices) { - moves.push({ pieceId, from, to, isCapture, promoteTo }); - } - }; - return moves; -}; -function applyPromotion(session, pieceId, promoteTo = "queen") { - const override = session.get(pieceId, "PromotionOverride"); - const target = override !== void 0 && override !== "disabled" ? override : promoteTo; - if (!__vite_ssr_import_0__.PROMOTION_PIECES.includes(target)) { - throw new Error( - `Invalid promotion target: ${target}. Cannot promote to king or pawn.` - ); - }; - session.insert(pieceId, "PieceType", target); -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7O0FBb0JBO0FBQ0E7QUFFQTs7Ozs7O0FBTUE7QUFHQSxNQUFNLGlCQUE2QyxFQUFFLE9BQU8sR0FBRyxPQUFPLEVBQUU7QUFNakUsU0FBUyxnQkFBZ0IsSUFBWSxPQUE0QjtBQUN0RSxZQUFPLDhCQUFPLEVBQUUsTUFBTSxlQUFlLEtBQUs7QUFDNUM7QUFhTyxTQUFTLGtCQUFrQixTQUFrQixTQUFnQztBQUNsRixRQUFNLFVBQU8sd0NBQWlCLFNBQVMsT0FBTztBQUM5QyxRQUFNLFdBQVEscUNBQWMsU0FBUyxPQUFPO0FBQzVDLE1BQUksU0FBUyxRQUFRLFVBQVUsS0FBTSxRQUFPLENBQUM7QUFHN0MsUUFBTSxXQUFXLFFBQVEsSUFBSSxTQUFTLG1CQUFtQjtBQUN6RCxNQUFJLGFBQWEsV0FBWSxRQUFPLENBQUM7QUFFckMsUUFBTSxhQUFtRCxDQUFDO0FBRzFELFFBQU0sWUFBUyx5Q0FBa0IsTUFBTSxLQUFLO0FBQzVDLE1BQUksV0FBVyxRQUFRLGdCQUFnQixRQUFRLEtBQUssS0FBSyxJQUFDLGlDQUFVLFNBQVMsTUFBTSxHQUFHO0FBQ3BGLGVBQVcsS0FBSyxFQUFFLElBQUksUUFBUSxXQUFXLE1BQU0sQ0FBQztBQUFBLEVBQ2xEO0FBR0EsYUFBVyxTQUFNLHlDQUFrQixNQUFNLEtBQUssR0FBRztBQUMvQyxRQUFJLGdCQUFnQixJQUFJLEtBQUssUUFBSyxpQ0FBVSxTQUFTLElBQUksS0FBSyxHQUFHO0FBQy9ELGlCQUFXLEtBQUssRUFBRSxJQUFJLElBQUksV0FBVyxLQUFLLENBQUM7QUFBQSxJQUM3QztBQUFBLEVBQ0Y7QUFFQSxNQUFJLFdBQVcsV0FBVyxFQUFHLFFBQU8sQ0FBQztBQUlyQyxRQUFNLG1CQUNKLGFBQWEsU0FBWSxDQUFDLFFBQVEsSUFBSTtBQUN4QyxRQUFNLFFBQXFCLENBQUM7QUFDNUIsYUFBVyxFQUFFLElBQUksVUFBVSxLQUFLLFlBQVk7QUFDMUMsZUFBVyxhQUFhLGtCQUFrQjtBQUN4QyxZQUFNLEtBQUssRUFBRSxTQUFTLE1BQU0sSUFBSSxXQUFXLFVBQVUsQ0FBQztBQUFBLElBQ3hEO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDtBQWFPLFNBQVMsZUFDZCxTQUNBLFNBQ0EsWUFBdUIsU0FDakI7QUFHTixRQUFNLFdBQVcsUUFBUSxJQUFJLFNBQVMsbUJBQW1CO0FBQ3pELFFBQU0sU0FBUyxhQUFhLFVBQWEsYUFBYSxhQUFhLFdBQVc7QUFFOUUsTUFBSSxDQUFDLHVDQUFpQixTQUFTLE1BQU0sR0FBRztBQUN0QyxVQUFNLElBQUk7QUFBQSxNQUNSLDZCQUE2QixNQUFNO0FBQUEsSUFDckM7QUFBQSxFQUNGO0FBQ0EsVUFBUSxPQUFPLFNBQVMsYUFBYSxNQUFNO0FBQzdDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJwcm9tb3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXduIHByb21vdGlvbiBydWxlcyAoUDIuMTcpLlxuICpcbiAqIEEgcGF3biBwcm9tb3RlcyB3aGVuIGl0IHJlYWNoZXMgdGhlIG9wcG9zaXRlIGJhY2sgcmFuazpcbiAqICAgLSBXaGl0ZSBwYXduIHJlYWNoaW5nIHJhbmsgNyAoc3F1YXJlcyA1Ni02MylcbiAqICAgLSBCbGFjayBwYXduIHJlYWNoaW5nIHJhbmsgMCAoc3F1YXJlcyAwLTcpXG4gKlxuICogYGdldFByb21vdGlvbk1vdmVzYCBlbnVtZXJhdGVzIGFsbCBwYXduIG1vdmVzIHRoYXQgd291bGQgdHJpZ2dlciBwcm9tb3Rpb24sXG4gKiBwcm9kdWNpbmcgb25lIExlZ2FsTW92ZSBwZXIgY2FuZGlkYXRlIHRhcmdldCBzcXVhcmUgw5cgcHJvbW90aW9uIHBpZWNlIHR5cGVcbiAqIChxdWVlbiAvIHJvb2sgLyBiaXNob3AgLyBrbmlnaHQgPSA0IHZhcmlhbnRzIHBlciByZWFjaGFibGUgdGFyZ2V0KS5cbiAqXG4gKiBgYXBwbHlQcm9tb3Rpb25gIG11dGF0ZXMgdGhlIHNlc3Npb24gYnkgcmVwbGFjaW5nIHRoZSBwYXduJ3MgUGllY2VUeXBlXG4gKiBmYWN0IHdpdGggdGhlIGNob3NlbiBwcm9tb3Rpb24gdGFyZ2V0IChkZWZhdWx0cyB0byBxdWVlbikuXG4gKlxuICogSW50ZW50aW9uYWxseSBOT1QgaGFuZGxlZCBoZXJlOlxuICogICAtIGNoZWNrIGZpbHRlcmluZyAoUDIuMTgpXG4gKiAgIC0gdHVybiBvcmRlciAoaGFuZGxlZCBieSBjYWxsZXIpXG4gKi9cbmltcG9ydCB0eXBlIHsgU2Vzc2lvbiwgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB0eXBlIHsgUGllY2VUeXBlLCBQaWVjZUNvbG9yLCBTcXVhcmUgfSBmcm9tIFwiLi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgeyBQUk9NT1RJT05fUElFQ0VTIH0gZnJvbSBcIi4uL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHsgcmFua09mIH0gZnJvbSBcIi4uL2Nvb3JkLmpzXCI7XG5pbXBvcnQgdHlwZSB7IExlZ2FsTW92ZSB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5pbXBvcnQge1xuICBnZXRQaWVjZVBvc2l0aW9uLFxuICBnZXRQaWVjZUNvbG9yLFxuICBpc1BpZWNlQXQsXG4gIGlzRW5lbXlBdCxcbn0gZnJvbSBcIi4vYm9hcmQtcXVlcmllcy5qc1wiO1xuaW1wb3J0IHsgcGF3blNpbmdsZUFkdmFuY2UsIHBhd25DYXB0dXJlU3FhcmVzIH0gZnJvbSBcIi4vcHJpbWl0aXZlcy5qc1wiO1xuXG4vKiogUmFuayBhIHBhd24gb2YgZWFjaCBjb2xvciBtdXN0IHJlYWNoIHRvIHByb21vdGUuICovXG5jb25zdCBQUk9NT1RJT05fUkFOSzogUmVjb3JkPFBpZWNlQ29sb3IsIG51bWJlcj4gPSB7IHdoaXRlOiA3LCBibGFjazogMCB9O1xuXG4vKipcbiAqIFRydWUgaWZmIG1vdmluZyAoYSBwYXduIG9mIGBjb2xvcmApIHRvIHNxdWFyZSBgdG9gIGxhbmRzIG9uIHRoYXQgY29sb3Inc1xuICogcHJvbW90aW9uIHJhbmsuIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgY29uZmlybWluZyB0aGUgbW92ZXIgaXMgYSBwYXduLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9tb3Rpb25Nb3ZlKHRvOiBTcXVhcmUsIGNvbG9yOiBQaWVjZUNvbG9yKTogYm9vbGVhbiB7XG4gIHJldHVybiByYW5rT2YodG8pID09PSBQUk9NT1RJT05fUkFOS1tjb2xvcl07XG59XG5cbi8qKlxuICogRW51bWVyYXRlIGFsbCBwcm9tb3Rpb24gbW92ZXMgYXZhaWxhYmxlIHRvIGBwaWVjZUlkYCBmcm9tIGl0cyBjdXJyZW50XG4gKiBzcXVhcmUuIFJldHVybnMgNCBMZWdhbE1vdmUgZW50cmllcyBwZXIgcmVhY2hhYmxlIHByb21vdGlvbi1yYW5rIHRhcmdldFxuICogKG9uZSBwZXIgZWxlbWVudCBvZiB7QGxpbmsgUFJPTU9USU9OX1BJRUNFU30pLCB1bmxlc3MgYSBQcm9tb3Rpb25PdmVycmlkZVxuICogbW9kaWZpZXIgaXMgYWN0aXZlOlxuICogICAtIFwiZGlzYWJsZWRcIiDihpIgcmV0dXJucyBbXSAocGF3biBjYW5ub3QgcHJvbW90ZSlcbiAqICAgLSBhIHNwZWNpZmljIHBpZWNlIHR5cGUg4oaSIHJldHVybnMgMSBlbnRyeSBwZXIgdGFyZ2V0IChvbmx5IHRoYXQgdHlwZSlcbiAqXG4gKiBEb2VzIG5vdCB2ZXJpZnkgdGhhdCBgcGllY2VJZGAgaXMgYSBwYXduIOKAlCB0aGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvXG4gKiBkaXNwYXRjaCBvbiBQaWVjZVR5cGUuIFJldHVybnMgW10gaWYgdGhlIHBpZWNlIGhhcyBubyBQb3NpdGlvbi9Db2xvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFByb21vdGlvbk1vdmVzKHNlc3Npb246IFNlc3Npb24sIHBpZWNlSWQ6IEVudGl0eUlkKTogTGVnYWxNb3ZlW10ge1xuICBjb25zdCBmcm9tID0gZ2V0UGllY2VQb3NpdGlvbihzZXNzaW9uLCBwaWVjZUlkKTtcbiAgY29uc3QgY29sb3IgPSBnZXRQaWVjZUNvbG9yKHNlc3Npb24sIHBpZWNlSWQpO1xuICBpZiAoZnJvbSA9PT0gbnVsbCB8fCBjb2xvciA9PT0gbnVsbCkgcmV0dXJuIFtdO1xuXG4gIC8vIFJlc3BlY3QgUHJvbW90aW9uT3ZlcnJpZGUgbW9kaWZpZXI6IFwiZGlzYWJsZWRcIiBtZWFucyBubyBwcm9tb3Rpb24gbW92ZXMuXG4gIGNvbnN0IG92ZXJyaWRlID0gc2Vzc2lvbi5nZXQocGllY2VJZCwgXCJQcm9tb3Rpb25PdmVycmlkZVwiKSBhcyBQaWVjZVR5cGUgfCBcImRpc2FibGVkXCIgfCB1bmRlZmluZWQ7XG4gIGlmIChvdmVycmlkZSA9PT0gXCJkaXNhYmxlZFwiKSByZXR1cm4gW107XG5cbiAgY29uc3QgY2FuZGlkYXRlczogeyB0bzogU3F1YXJlOyBpc0NhcHR1cmU6IGJvb2xlYW4gfVtdID0gW107XG5cbiAgLy8gU2luZ2xlIGFkdmFuY2UgdG8gdGhlIGJhY2sgcmFuayAobXVzdCBiZSBlbXB0eSkuXG4gIGNvbnN0IHNpbmdsZSA9IHBhd25TaW5nbGVBZHZhbmNlKGZyb20sIGNvbG9yKTtcbiAgaWYgKHNpbmdsZSAhPT0gbnVsbCAmJiBpc1Byb21vdGlvbk1vdmUoc2luZ2xlLCBjb2xvcikgJiYgIWlzUGllY2VBdChzZXNzaW9uLCBzaW5nbGUpKSB7XG4gICAgY2FuZGlkYXRlcy5wdXNoKHsgdG86IHNpbmdsZSwgaXNDYXB0dXJlOiBmYWxzZSB9KTtcbiAgfVxuXG4gIC8vIERpYWdvbmFsIGNhcHR1cmVzIG9udG8gdGhlIGJhY2sgcmFuayAobXVzdCBoYXZlIGFuIGVuZW15KS5cbiAgZm9yIChjb25zdCBzcSBvZiBwYXduQ2FwdHVyZVNxYXJlcyhmcm9tLCBjb2xvcikpIHtcbiAgICBpZiAoaXNQcm9tb3Rpb25Nb3ZlKHNxLCBjb2xvcikgJiYgaXNFbmVteUF0KHNlc3Npb24sIHNxLCBjb2xvcikpIHtcbiAgICAgIGNhbmRpZGF0ZXMucHVzaCh7IHRvOiBzcSwgaXNDYXB0dXJlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjYW5kaWRhdGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuXG4gIC8vIEZhbiBlYWNoIGNhbmRpZGF0ZSB0YXJnZXQgaW50byBvbmUgTGVnYWxNb3ZlIHBlciBwcm9tb3Rpb24gcGllY2UgdHlwZS5cbiAgLy8gSWYgUHJvbW90aW9uT3ZlcnJpZGUgc3BlY2lmaWVzIGEgcGllY2UgdHlwZSwgb2ZmZXIgb25seSB0aGF0IHNpbmdsZSB0eXBlLlxuICBjb25zdCBwcm9tb3Rpb25DaG9pY2VzOiByZWFkb25seSBQaWVjZVR5cGVbXSA9XG4gICAgb3ZlcnJpZGUgIT09IHVuZGVmaW5lZCA/IFtvdmVycmlkZV0gOiBQUk9NT1RJT05fUElFQ0VTO1xuICBjb25zdCBtb3ZlczogTGVnYWxNb3ZlW10gPSBbXTtcbiAgZm9yIChjb25zdCB7IHRvLCBpc0NhcHR1cmUgfSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgZm9yIChjb25zdCBwcm9tb3RlVG8gb2YgcHJvbW90aW9uQ2hvaWNlcykge1xuICAgICAgbW92ZXMucHVzaCh7IHBpZWNlSWQsIGZyb20sIHRvLCBpc0NhcHR1cmUsIHByb21vdGVUbyB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1vdmVzO1xufVxuXG4vKipcbiAqIEFwcGx5IGEgcHJvbW90aW9uIGJ5IHJlcGxhY2luZyB0aGUgcGF3bidzIFBpZWNlVHlwZSBmYWN0IHdpdGhcbiAqIGBwcm9tb3RlVG9gIChkZWZhdWx0cyB0byBxdWVlbikuIFNlc3Npb24uaW5zZXJ0IGhhcyB1cGRhdGUgc2VtYW50aWNzLFxuICogc28gdGhpcyByZXRyYWN0cyB0aGUgb2xkIFBpZWNlVHlwZSBhbmQgaW5zZXJ0cyB0aGUgbmV3IG9uZSBhdG9taWNhbGx5LlxuICpcbiAqIElmIGEgUHJvbW90aW9uT3ZlcnJpZGUgbW9kaWZpZXIgaXMgYWN0aXZlIG9uIHRoZSBwaWVjZSAoYW5kIGlzIG5vdFxuICogXCJkaXNhYmxlZFwiKSwgdGhlIG92ZXJyaWRlIHZhbHVlIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBgcHJvbW90ZVRvYC5cbiAqXG4gKiBUaHJvd3MgaWYgdGhlIGZpbmFsIHByb21vdGlvbiB0YXJnZXQgaXMgbm90IGluIHtAbGluayBQUk9NT1RJT05fUElFQ0VTfVxuICogKGkuZS4gYXR0ZW1wdHMgdG8gcHJvbW90ZSB0byBwYXduIG9yIGtpbmcpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlQcm9tb3Rpb24oXG4gIHNlc3Npb246IFNlc3Npb24sXG4gIHBpZWNlSWQ6IEVudGl0eUlkLFxuICBwcm9tb3RlVG86IFBpZWNlVHlwZSA9IFwicXVlZW5cIixcbik6IHZvaWQge1xuICAvLyBSZXNwZWN0IFByb21vdGlvbk92ZXJyaWRlIG1vZGlmaWVyOiBhIG5vbi1kaXNhYmxlZCB2YWx1ZSBvdmVycmlkZXMgdGhlXG4gIC8vIGNhbGxlcidzIHJlcXVlc3RlZCB0YXJnZXQgc28gdGhlIHBpZWNlIGFsd2F5cyBiZWNvbWVzIHRoZSBvdmVycmlkZGVuIHR5cGUuXG4gIGNvbnN0IG92ZXJyaWRlID0gc2Vzc2lvbi5nZXQocGllY2VJZCwgXCJQcm9tb3Rpb25PdmVycmlkZVwiKSBhcyBQaWVjZVR5cGUgfCBcImRpc2FibGVkXCIgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHRhcmdldCA9IG92ZXJyaWRlICE9PSB1bmRlZmluZWQgJiYgb3ZlcnJpZGUgIT09IFwiZGlzYWJsZWRcIiA/IG92ZXJyaWRlIDogcHJvbW90ZVRvO1xuXG4gIGlmICghUFJPTU9USU9OX1BJRUNFUy5pbmNsdWRlcyh0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgcHJvbW90aW9uIHRhcmdldDogJHt0YXJnZXR9LiBDYW5ub3QgcHJvbW90ZSB0byBraW5nIG9yIHBhd24uYCxcbiAgICApO1xuICB9XG4gIHNlc3Npb24uaW5zZXJ0KHBpZWNlSWQsIFwiUGllY2VUeXBlXCIsIHRhcmdldCk7XG59XG4iXSwiZmlsZSI6Ii9zcmMvcnVsZXMvcHJvbW90aW9uLnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/189749634973e9d7cce1d22ca0415a5f155605a2 b/7xOfJqsDU787fe61oSCq1/web/189749634973e9d7cce1d22ca0415a5f155605a2 deleted file mode 100644 index fa1c84e..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/189749634973e9d7cce1d22ca0415a5f155605a2 +++ /dev/null @@ -1,72 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "FilterNode", { enumerable: true, configurable: true, get(){ try { return FilterNode } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/registry.js", {"importedNames":["UnknownPredicateError"]}); -class FilterNode { - #specs; - #registry; - #activateListeners = []; - #deactivateListeners = []; - /** - * Tokens that previously passed every predicate. Used to route - * deactivations: only forwarded tokens require downstream withdrawal. - * Identity (reference) tracking matches the rest of the beta network. - */ - #passedTokens = new Set(); - /** - * @throws UnknownPredicateError if any spec names a predicate that is not - * registered on `registry`. Validation happens up-front so wiring errors - * surface at construction time, not at the first activation. - */ - constructor(specs, registry) { - registry.verify(specs.map((s) => s.predicate)); - this.#specs = specs; - this.#registry = registry; - } - /** Subscribe to forwarded tokens. Listeners fire in registration order. */ - addDownstreamActivate(listener) { - this.#activateListeners.push(listener); - } - /** Subscribe to withdrawals. Listeners fire in registration order. */ - addDownstreamDeactivate(listener) { - this.#deactivateListeners.push(listener); - } - /** - * Evaluate the conjunction of registered predicates against `token`. - * Forwards downstream only if every predicate returns `true`. - */ - leftActivate(token) { - if (!this.#allPass(token.bindings)) - return; - this.#passedTokens.add(token); - for (const listener of this.#activateListeners) { - listener(token); - } - } - /** - * Withdraw a token. Downstream listeners fire only if the token was - * previously forwarded — tokens blocked by the filter never reached - * downstream consumers and must not produce phantom deactivations. - */ - leftDeactivate(token) { - if (!this.#passedTokens.delete(token)) - return; - for (const listener of this.#deactivateListeners) { - listener(token); - } - } - #allPass(bindings) { - for (const spec of this.#specs) { - const predFn = this.#registry.get(spec.predicate); - // Constructor-time verification rules this out, but the runtime guard - // keeps the failure mode loud rather than silent if a predicate is - // somehow unregistered between construction and activation. - if (!predFn) - throw new __vite_ssr_import_0__.UnknownPredicateError(spec.predicate); - if (!predFn(bindings, spec.args)) - return false; - }; - return true; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQTBCQTtBQW9CTSxNQUFPLFVBQVU7SUFDWixNQUFNO0lBQ04sU0FBUztJQUNULGtCQUFrQixHQUF1QixFQUFFO0lBQzNDLG9CQUFvQixHQUF5QixFQUFFO0lBQ3hEOzs7OztJQUtTLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBUztJQUV6Qzs7Ozs7SUFLQSxZQUFZLEtBQTRCLEVBQUUsUUFBMkI7UUFDbkUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLO1FBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUTtJQUMzQjtJQUVBO0lBQ0EscUJBQXFCLENBQUMsUUFBMEI7UUFDOUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDeEM7SUFFQTtJQUNBLHVCQUF1QixDQUFDLFFBQTRCO1FBQ2xELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzFDO0lBRUE7Ozs7SUFJQSxZQUFZLENBQUMsS0FBWTtRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQUU7UUFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQzdCLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzlDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDakI7SUFDRjtJQUVBOzs7OztJQUtBLGNBQWMsQ0FBQyxLQUFZO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFBRTtRQUN2QyxLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUNoRCxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ2pCO0lBQ0Y7SUFFQSxRQUFRLENBQUMsUUFBa0I7UUFDekIsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQzlCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDakQ7WUFDQTtZQUNBO1lBQ0EsSUFBSSxDQUFDLE1BQU07Z0JBQUUsTUFBTSxJQUFJLDJDQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDNUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFBRSxPQUFPLEtBQUs7UUFDaEQ7UUFDQSxPQUFPLElBQUk7SUFDYiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2NvbmRpdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZpbHRlck5vZGUg4oCUIGFwcGxpZXMgcmVnaXN0ZXJlZCBwcmVkaWNhdGVzIHRvIHRva2Vucy5cbiAqXG4gKiBQZXIgYHBhY2thZ2VzL3JldGUvU1BFQy5tZCDCp0pTT04gUnVsZSBTY2hlbWFgIGZpbHRlcnMgYXJlIGRlY2xhcmVkIGFzXG4gKiBgeyBwcmVkaWNhdGU6IHN0cmluZywgYXJnczogdW5rbm93bltdIH1gIHBhaXJzIGFuZCBleGVjdXRlZCBhZ2FpbnN0IHRoZVxuICogY3VycmVudCB2YXJpYWJsZSBiaW5kaW5ncyBvZiBhIHRva2VuLiBQcmVkaWNhdGVzIHRoZW1zZWx2ZXMgbGl2ZSBpbiBhXG4gKiB7QGxpbmsgUHJlZGljYXRlUmVnaXN0cnl9IHNvIHJ1bGUgZGVmaW5pdGlvbnMgcmVtYWluIHB1cmUgZGF0YSDigJQgdGhlcmUgYXJlXG4gKiBubyBpbmxpbmUgY2xvc3VyZXMsIG5vIGBldmFsYCwgbm8gYEZ1bmN0aW9uYC1mcm9tLXN0cmluZy5cbiAqXG4gKiBBIEZpbHRlck5vZGUgc2l0cyBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBiZXRhIG5ldHdvcmsgYmV0d2VlbiBhbiB1cHN0cmVhbVxuICogc291cmNlICh7QGxpbmsgSm9pbk5vZGV9IG9yIHtAbGluayBCZXRhTWVtb3J5fSkgYW5kIGEgZG93bnN0cmVhbSBjb25zdW1lclxuICogKGFub3RoZXIgYmV0YSBtZW1vcnkgb3IgYSB7QGxpbmsgUHJvZHVjdGlvbk5vZGV9KS4gU2VtYW50aWNzOlxuICpcbiAqIC0ge0BsaW5rIGxlZnRBY3RpdmF0ZX06IGV2YWx1YXRlIGV2ZXJ5IHNwZWMgYWdhaW5zdCBgdG9rZW4uYmluZGluZ3NgLiBJZlxuICogICBBTEwgcmV0dXJuIGB0cnVlYCwgdGhlIHRva2VuIGlzIGZvcndhcmRlZCB0byBkb3duc3RyZWFtIGFjdGl2YXRlXG4gKiAgIGxpc3RlbmVycy4gVGhlIHRva2VuIHJlZmVyZW5jZSBpcyByZWNvcmRlZCBpbiB7QGxpbmsgcGFzc2VkVG9rZW5zfSBzb1xuICogICBzdWJzZXF1ZW50IGRlYWN0aXZhdGlvbiBjYW4gYmUgcm91dGVkIGNvcnJlY3RseS5cbiAqIC0ge0BsaW5rIGxlZnREZWFjdGl2YXRlfTogb25seSBmaXJlIGRvd25zdHJlYW0gZGVhY3RpdmF0ZSBsaXN0ZW5lcnMgaWYgdGhlXG4gKiAgIHRva2VuIHdhcyBwcmV2aW91c2x5IGZvcndhcmRlZC4gVG9rZW5zIHRoYXQgbmV2ZXIgcGFzc2VkIHRoZSBmaWx0ZXJcbiAqICAgbmV2ZXIgcmVhY2hlZCBkb3duc3RyZWFtIG5vZGVzLCBzbyB0aGVpciB3aXRoZHJhd2FsIG11c3QgYmUgYSBuby1vcC5cbiAqXG4gKiBNdWx0aXBsZSBzcGVjcyBhcmUgY29tYmluZWQgd2l0aCBjb25qdW5jdGlvbiAoQU5EKS4gQW4gZW1wdHkgc3BlYyBsaXN0XG4gKiBwYXNzZXMgZXZlcnkgdG9rZW4gKHZhY3VvdXMgQU5EKSwgd2hpY2gga2VlcHMgdGhlIGNvbnN0cnVjdG9yIHRvdGFsIOKAlCBhXG4gKiBmaWx0ZXIgd2l0aCBubyBwcmVkaWNhdGVzIGlzIHN0cnVjdHVyYWxseSBpZGVudGljYWwgdG8gYSBwYXNzLXRocm91Z2guXG4gKi9cbmltcG9ydCB0eXBlIHsgQmluZGluZ3MsIFRva2VuIH0gZnJvbSBcIi4vYmV0YS5qc1wiO1xuaW1wb3J0IHsgdHlwZSBQcmVkaWNhdGVSZWdpc3RyeSwgVW5rbm93blByZWRpY2F0ZUVycm9yIH0gZnJvbSBcIi4vcmVnaXN0cnkuanNcIjtcblxuLyoqXG4gKiBEZWNsYXJhdGl2ZSBkZXNjcmlwdGlvbiBvZiBhIHNpbmdsZSBwcmVkaWNhdGUgYXBwbGljYXRpb24uXG4gKlxuICogYHByZWRpY2F0ZWAgbXVzdCBuYW1lIGEgZnVuY3Rpb24gcHJldmlvdXNseSByZWdpc3RlcmVkIG9uIHRoZVxuICoge0BsaW5rIFByZWRpY2F0ZVJlZ2lzdHJ5fSBwYXNzZWQgdG8gdGhlIEZpbHRlck5vZGUgY29uc3RydWN0b3IuIGBhcmdzYFxuICogaXMgdGhlIHN0YXRpYyBwYXJhbWV0ZXIgbGlzdCBmb3J3YXJkZWQgdG8gdGhlIHByZWRpY2F0ZSBhdCBldmFsdWF0aW9uXG4gKiB0aW1lLCBhbG9uZ3NpZGUgdGhlIHRva2VuJ3MgY3VycmVudCBiaW5kaW5ncy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJTcGVjIHtcbiAgLyoqIFJlZ2lzdGVyZWQgcHJlZGljYXRlIG5hbWUuICovXG4gIHJlYWRvbmx5IHByZWRpY2F0ZTogc3RyaW5nO1xuICAvKiogU3RhdGljIGFyZ3VtZW50cyBwYXNzZWQgYWxvbmdzaWRlIHRoZSBtYXRjaCBiaW5kaW5ncy4gKi9cbiAgcmVhZG9ubHkgYXJnczogcmVhZG9ubHkgdW5rbm93bltdO1xufVxuXG50eXBlIEFjdGl2YXRlTGlzdGVuZXIgPSAodG9rZW46IFRva2VuKSA9PiB2b2lkO1xudHlwZSBEZWFjdGl2YXRlTGlzdGVuZXIgPSAodG9rZW46IFRva2VuKSA9PiB2b2lkO1xuXG5leHBvcnQgY2xhc3MgRmlsdGVyTm9kZSB7XG4gIHJlYWRvbmx5ICNzcGVjczogcmVhZG9ubHkgRmlsdGVyU3BlY1tdO1xuICByZWFkb25seSAjcmVnaXN0cnk6IFByZWRpY2F0ZVJlZ2lzdHJ5O1xuICByZWFkb25seSAjYWN0aXZhdGVMaXN0ZW5lcnM6IEFjdGl2YXRlTGlzdGVuZXJbXSA9IFtdO1xuICByZWFkb25seSAjZGVhY3RpdmF0ZUxpc3RlbmVyczogRGVhY3RpdmF0ZUxpc3RlbmVyW10gPSBbXTtcbiAgLyoqXG4gICAqIFRva2VucyB0aGF0IHByZXZpb3VzbHkgcGFzc2VkIGV2ZXJ5IHByZWRpY2F0ZS4gVXNlZCB0byByb3V0ZVxuICAgKiBkZWFjdGl2YXRpb25zOiBvbmx5IGZvcndhcmRlZCB0b2tlbnMgcmVxdWlyZSBkb3duc3RyZWFtIHdpdGhkcmF3YWwuXG4gICAqIElkZW50aXR5IChyZWZlcmVuY2UpIHRyYWNraW5nIG1hdGNoZXMgdGhlIHJlc3Qgb2YgdGhlIGJldGEgbmV0d29yay5cbiAgICovXG4gIHJlYWRvbmx5ICNwYXNzZWRUb2tlbnMgPSBuZXcgU2V0PFRva2VuPigpO1xuXG4gIC8qKlxuICAgKiBAdGhyb3dzIFVua25vd25QcmVkaWNhdGVFcnJvciBpZiBhbnkgc3BlYyBuYW1lcyBhIHByZWRpY2F0ZSB0aGF0IGlzIG5vdFxuICAgKiAgIHJlZ2lzdGVyZWQgb24gYHJlZ2lzdHJ5YC4gVmFsaWRhdGlvbiBoYXBwZW5zIHVwLWZyb250IHNvIHdpcmluZyBlcnJvcnNcbiAgICogICBzdXJmYWNlIGF0IGNvbnN0cnVjdGlvbiB0aW1lLCBub3QgYXQgdGhlIGZpcnN0IGFjdGl2YXRpb24uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzcGVjczogcmVhZG9ubHkgRmlsdGVyU3BlY1tdLCByZWdpc3RyeTogUHJlZGljYXRlUmVnaXN0cnkpIHtcbiAgICByZWdpc3RyeS52ZXJpZnkoc3BlY3MubWFwKChzKSA9PiBzLnByZWRpY2F0ZSkpO1xuICAgIHRoaXMuI3NwZWNzID0gc3BlY3M7XG4gICAgdGhpcy4jcmVnaXN0cnkgPSByZWdpc3RyeTtcbiAgfVxuXG4gIC8qKiBTdWJzY3JpYmUgdG8gZm9yd2FyZGVkIHRva2Vucy4gTGlzdGVuZXJzIGZpcmUgaW4gcmVnaXN0cmF0aW9uIG9yZGVyLiAqL1xuICBhZGREb3duc3RyZWFtQWN0aXZhdGUobGlzdGVuZXI6IEFjdGl2YXRlTGlzdGVuZXIpOiB2b2lkIHtcbiAgICB0aGlzLiNhY3RpdmF0ZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKiBTdWJzY3JpYmUgdG8gd2l0aGRyYXdhbHMuIExpc3RlbmVycyBmaXJlIGluIHJlZ2lzdHJhdGlvbiBvcmRlci4gKi9cbiAgYWRkRG93bnN0cmVhbURlYWN0aXZhdGUobGlzdGVuZXI6IERlYWN0aXZhdGVMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuI2RlYWN0aXZhdGVMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGUgdGhlIGNvbmp1bmN0aW9uIG9mIHJlZ2lzdGVyZWQgcHJlZGljYXRlcyBhZ2FpbnN0IGB0b2tlbmAuXG4gICAqIEZvcndhcmRzIGRvd25zdHJlYW0gb25seSBpZiBldmVyeSBwcmVkaWNhdGUgcmV0dXJucyBgdHJ1ZWAuXG4gICAqL1xuICBsZWZ0QWN0aXZhdGUodG9rZW46IFRva2VuKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLiNhbGxQYXNzKHRva2VuLmJpbmRpbmdzKSkgcmV0dXJuO1xuICAgIHRoaXMuI3Bhc3NlZFRva2Vucy5hZGQodG9rZW4pO1xuICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy4jYWN0aXZhdGVMaXN0ZW5lcnMpIHtcbiAgICAgIGxpc3RlbmVyKHRva2VuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2l0aGRyYXcgYSB0b2tlbi4gRG93bnN0cmVhbSBsaXN0ZW5lcnMgZmlyZSBvbmx5IGlmIHRoZSB0b2tlbiB3YXNcbiAgICogcHJldmlvdXNseSBmb3J3YXJkZWQg4oCUIHRva2VucyBibG9ja2VkIGJ5IHRoZSBmaWx0ZXIgbmV2ZXIgcmVhY2hlZFxuICAgKiBkb3duc3RyZWFtIGNvbnN1bWVycyBhbmQgbXVzdCBub3QgcHJvZHVjZSBwaGFudG9tIGRlYWN0aXZhdGlvbnMuXG4gICAqL1xuICBsZWZ0RGVhY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuI3Bhc3NlZFRva2Vucy5kZWxldGUodG9rZW4pKSByZXR1cm47XG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNkZWFjdGl2YXRlTGlzdGVuZXJzKSB7XG4gICAgICBsaXN0ZW5lcih0b2tlbik7XG4gICAgfVxuICB9XG5cbiAgI2FsbFBhc3MoYmluZGluZ3M6IEJpbmRpbmdzKTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBzcGVjIG9mIHRoaXMuI3NwZWNzKSB7XG4gICAgICBjb25zdCBwcmVkRm4gPSB0aGlzLiNyZWdpc3RyeS5nZXQoc3BlYy5wcmVkaWNhdGUpO1xuICAgICAgLy8gQ29uc3RydWN0b3ItdGltZSB2ZXJpZmljYXRpb24gcnVsZXMgdGhpcyBvdXQsIGJ1dCB0aGUgcnVudGltZSBndWFyZFxuICAgICAgLy8ga2VlcHMgdGhlIGZhaWx1cmUgbW9kZSBsb3VkIHJhdGhlciB0aGFuIHNpbGVudCBpZiBhIHByZWRpY2F0ZSBpc1xuICAgICAgLy8gc29tZWhvdyB1bnJlZ2lzdGVyZWQgYmV0d2VlbiBjb25zdHJ1Y3Rpb24gYW5kIGFjdGl2YXRpb24uXG4gICAgICBpZiAoIXByZWRGbikgdGhyb3cgbmV3IFVua25vd25QcmVkaWNhdGVFcnJvcihzcGVjLnByZWRpY2F0ZSk7XG4gICAgICBpZiAoIXByZWRGbihiaW5kaW5ncywgc3BlYy5hcmdzKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvZGlzdC9jb25kaXRpb24uanMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/1bbe3405c4d7adc02d15dcd5b3c412e322835308 b/7xOfJqsDU787fe61oSCq1/web/1bbe3405c4d7adc02d15dcd5b3c412e322835308 deleted file mode 100644 index 787a59a..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/1bbe3405c4d7adc02d15dcd5b3c412e322835308 +++ /dev/null @@ -1,295 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/presets/index.ts"); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/engine.ts", {"importedNames":["ChessEngine"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["algebraicToSquare"]}); -function pieceAt(engine, sq) { - const target = (0,__vite_ssr_import_3__.algebraicToSquare)(sq); - for (const f of engine.session.allFacts()) { - if (f.attr === "Position" && f.value === target) return f.id; - }; - return null; -} -function hpOf(engine, id) { - if (!engine.session.contains(id, "Hp")) return null; - return engine.session.get(id, "Hp"); -} -function exists(engine, id) { - return engine.session.contains(id, "PieceType"); -} -(0,__vite_ssr_import_0__.describe)("engine.dealDamage — default path (no HP preset)", () => { - (0,__vite_ssr_import_0__.it)("damage >= 1 retracts the target and returns died:true", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - const pawn = pieceAt(engine, "e2"); - const result = engine.dealDamage(pawn, 1, { kind: "capture" }); - (0,__vite_ssr_import_0__.expect)(result.died).toBe(true); - (0,__vite_ssr_import_0__.expect)(exists(engine, pawn)).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("damage 0 is a no-op (survived)", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - const pawn = pieceAt(engine, "e2"); - const result = engine.dealDamage(pawn, 0, { kind: "capture" }); - (0,__vite_ssr_import_0__.expect)(result.died).toBe(false); - (0,__vite_ssr_import_0__.expect)(exists(engine, pawn)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("negative damage is a no-op (survived)", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - const pawn = pieceAt(engine, "e2"); - const result = engine.dealDamage(pawn, -3, { kind: "capture" }); - (0,__vite_ssr_import_0__.expect)(result.died).toBe(false); - (0,__vite_ssr_import_0__.expect)(exists(engine, pawn)).toBe(true); - }); -}); -(0,__vite_ssr_import_0__.describe)("piece-hp.onDamage intercepts", () => { - (0,__vite_ssr_import_0__.it)("target with Hp=2 survives 1 damage with Hp=1", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null } - ]); - const pawn = pieceAt(engine, "e2"); - const result = engine.dealDamage(pawn, 1, { kind: "capture" }); - (0,__vite_ssr_import_0__.expect)(result.died).toBe(false); - (0,__vite_ssr_import_0__.expect)(hpOf(engine, pawn)).toBe(1); - (0,__vite_ssr_import_0__.expect)(exists(engine, pawn)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("target with Hp=1 dies from 1 damage", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null } - ]); - const pawn = pieceAt(engine, "e2"); - engine.session.insert(pawn, "Hp", 1); - const result = engine.dealDamage(pawn, 1, { kind: "capture" }); - (0,__vite_ssr_import_0__.expect)(result.died).toBe(true); - (0,__vite_ssr_import_0__.expect)(exists(engine, pawn)).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("amount is respected: Hp=2 dies from 2 damage in one blow", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null } - ]); - const pawn = pieceAt(engine, "e2"); - const result = engine.dealDamage(pawn, 2, { kind: "capture" }); - (0,__vite_ssr_import_0__.expect)(result.died).toBe(true); - (0,__vite_ssr_import_0__.expect)(exists(engine, pawn)).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("amount > current Hp also kills (overkill)", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null } - ]); - const pawn = pieceAt(engine, "e2"); - const result = engine.dealDamage(pawn, 99, { kind: "explosion" }); - (0,__vite_ssr_import_0__.expect)(result.died).toBe(true); - (0,__vite_ssr_import_0__.expect)(exists(engine, pawn)).toBe(false); - }); -}); -(0,__vite_ssr_import_0__.describe)("explosive-rook + piece-hp: the combination that used to be forbidden", () => { - function clearAndSetup(engine) { - const facts = engine.session.allFacts(); - const toClear = []; - for (const f of facts) { - if (f.attr !== "PieceType") continue; - if (f.id <= 0) continue; - if (f.value === "king") continue; - toClear.push(f.id); - }; - for (const id of toClear) { - for (const attr of ["PieceType", "Color", "Position", "HasMoved", "Hp"]) { - if (engine.session.contains(id, attr)) engine.session.retract(id, attr); - } - }; - const rook = engine.session.nextId(); - engine.session.insert(rook, "PieceType", "rook"); - engine.session.insert(rook, "Color", "white"); - engine.session.insert(rook, "Position", (0,__vite_ssr_import_3__.algebraicToSquare)("a1")); - const friendlyPawn = engine.session.nextId(); - engine.session.insert(friendlyPawn, "PieceType", "pawn"); - engine.session.insert(friendlyPawn, "Color", "white"); - engine.session.insert(friendlyPawn, "Position", (0,__vite_ssr_import_3__.algebraicToSquare)("a4")); - engine.session.insert(friendlyPawn, "HasMoved", true); - const targetPawn = engine.session.nextId(); - engine.session.insert(targetPawn, "PieceType", "pawn"); - engine.session.insert(targetPawn, "Color", "black"); - engine.session.insert(targetPawn, "Position", (0,__vite_ssr_import_3__.algebraicToSquare)("a5")); - engine.session.insert(targetPawn, "HasMoved", true); - return { rook, targetPawn, friendlyPawn }; - } - (0,__vite_ssr_import_0__.it)("rook blast deals 1 HP to each victim; pieces with Hp>1 survive", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - const { rook, targetPawn, friendlyPawn } = clearAndSetup(engine); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null }, - { id: "explosive-rook", scope: "both", turnsRemaining: null } - ]); - (0,__vite_ssr_import_0__.expect)(hpOf(engine, rook)).toBe(2); - (0,__vite_ssr_import_0__.expect)(hpOf(engine, targetPawn)).toBe(2); - (0,__vite_ssr_import_0__.expect)(hpOf(engine, friendlyPawn)).toBe(2); - engine.session.retract(friendlyPawn, "Position"); - engine.session.insert(friendlyPawn, "Position", (0,__vite_ssr_import_3__.algebraicToSquare)("a7")); - (0,__vite_ssr_import_0__.expect)(hpOf(engine, friendlyPawn)).toBe(2); - const capture = engine.findMove( - (0,__vite_ssr_import_3__.algebraicToSquare)("a1"), - (0,__vite_ssr_import_3__.algebraicToSquare)("a5") - ); - (0,__vite_ssr_import_0__.expect)(capture).not.toBeNull(); - engine.applyMove(capture); - (0,__vite_ssr_import_0__.expect)(pieceAt(engine, "a1")).toBe(rook); - (0,__vite_ssr_import_0__.expect)(hpOf(engine, targetPawn)).toBe(1); - (0,__vite_ssr_import_0__.expect)(hpOf(engine, friendlyPawn)).toBe(1); - (0,__vite_ssr_import_0__.expect)(hpOf(engine, rook)).toBe(2); - }); - (0,__vite_ssr_import_0__.it)("without HP, rook blast still nukes (default kills)", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - const { rook, targetPawn, friendlyPawn } = clearAndSetup(engine); - engine.session.retract(friendlyPawn, "Position"); - engine.session.insert(friendlyPawn, "Position", (0,__vite_ssr_import_3__.algebraicToSquare)("a7")); - engine.setActivePresets([ - { id: "explosive-rook", scope: "both", turnsRemaining: null } - ]); - const capture = engine.findMove( - (0,__vite_ssr_import_3__.algebraicToSquare)("a1"), - (0,__vite_ssr_import_3__.algebraicToSquare)("a5") - ); - (0,__vite_ssr_import_0__.expect)(capture).not.toBeNull(); - engine.applyMove(capture); - (0,__vite_ssr_import_0__.expect)(exists(engine, targetPawn)).toBe(false); - (0,__vite_ssr_import_0__.expect)(exists(engine, friendlyPawn)).toBe(false); - (0,__vite_ssr_import_0__.expect)(pieceAt(engine, "a5")).toBe(rook); - }); -}); -(0,__vite_ssr_import_0__.describe)("queen-splits + piece-hp: fission only on kills", () => { - function clearAndSetup(engine) { - const facts = engine.session.allFacts(); - const toClear = []; - for (const f of facts) { - if (f.attr !== "PieceType") continue; - if (f.id <= 0) continue; - if (f.value === "king") continue; - toClear.push(f.id); - }; - for (const id of toClear) { - for (const attr of ["PieceType", "Color", "Position", "HasMoved", "Hp"]) { - if (engine.session.contains(id, attr)) engine.session.retract(id, attr); - } - }; - const queen = engine.session.nextId(); - engine.session.insert(queen, "PieceType", "queen"); - engine.session.insert(queen, "Color", "white"); - engine.session.insert(queen, "Position", (0,__vite_ssr_import_3__.algebraicToSquare)("d1")); - const target = engine.session.nextId(); - engine.session.insert(target, "PieceType", "pawn"); - engine.session.insert(target, "Color", "black"); - engine.session.insert(target, "Position", (0,__vite_ssr_import_3__.algebraicToSquare)("d4")); - engine.session.insert(target, "HasMoved", true); - return { queen, target }; - } - (0,__vite_ssr_import_0__.it)("queen pokes Hp=2 target: no fission, queen stays, target Hp=1", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - const { queen, target } = clearAndSetup(engine); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null }, - { id: "queen-splits", scope: "both", turnsRemaining: null } - ]); - (0,__vite_ssr_import_0__.expect)(hpOf(engine, target)).toBe(2); - const capture = engine.findMove( - (0,__vite_ssr_import_3__.algebraicToSquare)("d1"), - (0,__vite_ssr_import_3__.algebraicToSquare)("d4") - ); - (0,__vite_ssr_import_0__.expect)(capture).not.toBeNull(); - engine.applyMove(capture); - (0,__vite_ssr_import_0__.expect)(pieceAt(engine, "d1")).toBe(queen); - (0,__vite_ssr_import_0__.expect)(pieceAt(engine, "d4")).toBe(target); - (0,__vite_ssr_import_0__.expect)(hpOf(engine, target)).toBe(1); - (0,__vite_ssr_import_0__.expect)(engine.session.get(queen, "PieceType")).toBe("queen"); - }); - (0,__vite_ssr_import_0__.it)("queen kills Hp=1 target: fission fires normally", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - const { queen, target } = clearAndSetup(engine); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null }, - { id: "queen-splits", scope: "both", turnsRemaining: null } - ]); - engine.session.insert(target, "Hp", 1); - const capture = engine.findMove( - (0,__vite_ssr_import_3__.algebraicToSquare)("d1"), - (0,__vite_ssr_import_3__.algebraicToSquare)("d4") - ); - (0,__vite_ssr_import_0__.expect)(capture).not.toBeNull(); - engine.applyMove(capture); - (0,__vite_ssr_import_0__.expect)(exists(engine, queen)).toBe(false); - const d4After = pieceAt(engine, "d4"); - (0,__vite_ssr_import_0__.expect)(engine.session.get(d4After, "PieceType")).toBe("rook"); - const d5After = pieceAt(engine, "d5"); - (0,__vite_ssr_import_0__.expect)(d5After).not.toBeNull(); - (0,__vite_ssr_import_0__.expect)(engine.session.get(d5After, "PieceType")).toBe("bishop"); - }); -}); -(0,__vite_ssr_import_0__.describe)("engine.spawnPiece + onPieceSpawn: HP auto-seeds on fission-spawned pieces", () => { - (0,__vite_ssr_import_0__.it)("queen-splits spawns rook+bishop; piece-hp onPieceSpawn seeds Hp=2 on both", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - const facts = engine.session.allFacts(); - const toClear = []; - for (const f of facts) { - if (f.attr !== "PieceType") continue; - if (f.id <= 0) continue; - if (f.value === "king") continue; - toClear.push(f.id); - }; - for (const id of toClear) { - for (const attr of ["PieceType", "Color", "Position", "HasMoved", "Hp"]) { - if (engine.session.contains(id, attr)) engine.session.retract(id, attr); - } - }; - const queenId = engine.session.nextId(); - engine.session.insert(queenId, "PieceType", "queen"); - engine.session.insert(queenId, "Color", "white"); - engine.session.insert(queenId, "Position", (0,__vite_ssr_import_3__.algebraicToSquare)("d1")); - const pawnId = engine.session.nextId(); - engine.session.insert(pawnId, "PieceType", "pawn"); - engine.session.insert(pawnId, "Color", "black"); - engine.session.insert(pawnId, "Position", (0,__vite_ssr_import_3__.algebraicToSquare)("d4")); - engine.session.insert(pawnId, "HasMoved", true); - engine.setActivePresets([ - { id: "queen-splits", scope: "both", turnsRemaining: null } - ]); - engine.setActivePresets([ - { id: "queen-splits", scope: "both", turnsRemaining: null }, - { id: "piece-hp", scope: "both", turnsRemaining: null } - ]); - engine.session.insert(pawnId, "Hp", 1); - const capture = engine.findMove( - (0,__vite_ssr_import_3__.algebraicToSquare)("d1"), - (0,__vite_ssr_import_3__.algebraicToSquare)("d4") - ); - (0,__vite_ssr_import_0__.expect)(capture).not.toBeNull(); - engine.applyMove(capture); - const d4Now = pieceAt(engine, "d4"); - (0,__vite_ssr_import_0__.expect)(engine.session.get(d4Now, "PieceType")).toBe("rook"); - (0,__vite_ssr_import_0__.expect)(hpOf(engine, d4Now)).toBe(2); - const d5Now = pieceAt(engine, "d5"); - (0,__vite_ssr_import_0__.expect)(d5Now).not.toBeNull(); - (0,__vite_ssr_import_0__.expect)(engine.session.get(d5Now, "PieceType")).toBe("bishop"); - (0,__vite_ssr_import_0__.expect)(hpOf(engine, d5Now)).toBe(2); - }); -}); -(0,__vite_ssr_import_0__.describe)("poisoned-squares routes through the damage pipeline", () => { - (0,__vite_ssr_import_0__.it)("each tick deals 1 HP damage via the pipeline; piece dies when Hp hits 0", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null }, - { id: "poisoned-squares", scope: "both", turnsRemaining: null } - ]); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e2"), (0,__vite_ssr_import_3__.algebraicToSquare)("e4")) - ); - const e4Pawn = pieceAt(engine, "e4"); - (0,__vite_ssr_import_0__.expect)(hpOf(engine, e4Pawn)).toBe(1); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("a7"), (0,__vite_ssr_import_3__.algebraicToSquare)("a6")) - ); - (0,__vite_ssr_import_0__.expect)(exists(engine, e4Pawn)).toBe(false); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ2xDLHFDQUFPLE9BQU8sUUFBUSxJQUFJLE9BQU8sV0FBVyxDQUFDLEVBQUUsS0FBSyxNQUFNO0FBQzFELHFDQUFPLEtBQUssUUFBUSxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUM7QUFJbEMsVUFBTSxRQUFRLFFBQVEsUUFBUSxJQUFJO0FBQ2xDLHFDQUFPLEtBQUssRUFBRSxJQUFJLFNBQVM7QUFDM0IscUNBQU8sT0FBTyxRQUFRLElBQUksT0FBUSxXQUFXLENBQUMsRUFBRSxLQUFLLFFBQVE7QUFDN0QscUNBQU8sS0FBSyxRQUFRLEtBQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQztBQUFBLEVBQ3JDLENBQUM7QUFDSCxDQUFDO0dBRUQsZ0NBQVMsdURBQXVELE1BQU07QUFDcEUsK0JBQUcsMkVBQTJFLE1BQU07QUFDbEYsVUFBTSxTQUFTLElBQUksa0NBQVk7QUFDL0IsV0FBTyxpQkFBaUI7QUFBQSxNQUN0QixFQUFFLElBQUksWUFBWSxPQUFPLFFBQVEsZ0JBQWdCLEtBQUs7QUFBQSxNQUN0RCxFQUFFLElBQUksb0JBQW9CLE9BQU8sUUFBUSxnQkFBZ0IsS0FBSztBQUFBLElBQ2hFLENBQUM7QUFJRCxXQUFPO0FBQUEsTUFDTCxPQUFPLFlBQVMseUNBQWtCLElBQUksTUFBRyx5Q0FBa0IsSUFBSSxDQUFDO0FBQUEsSUFDbEU7QUFDQSxVQUFNLFNBQVMsUUFBUSxRQUFRLElBQUk7QUFDbkMscUNBQU8sS0FBSyxRQUFRLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQztBQUtuQyxXQUFPO0FBQUEsTUFDTCxPQUFPLFlBQVMseUNBQWtCLElBQUksTUFBRyx5Q0FBa0IsSUFBSSxDQUFDO0FBQUEsSUFDbEU7QUFDQSxxQ0FBTyxPQUFPLFFBQVEsTUFBTSxDQUFDLEVBQUUsS0FBSyxLQUFLO0FBQUEsRUFDM0MsQ0FBQztBQUNILENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImRhbWFnZS1waXBlbGluZS50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGVzdHMgZm9yIHRoZSBkYW1hZ2UgcGlwZWxpbmUgaW50cm9kdWNlZCB0byBkZWNvdXBsZSBwaWVjZS1ocCBmcm9tXG4gKiBvdGhlciBjYXB0dXJlLXRyaWdnZXJlZCBwcmVzZXRzLlxuICpcbiAqIFdoYXQncyBiZWluZyB0ZXN0ZWQ6XG4gKiAgIC0gQ2hlc3NFbmdpbmUuZGVhbERhbWFnZSgpIGRlZmF1bHQgcGF0aCAoZGFtYWdlIOKJpSAxIHJldHJhY3RzIHRoZVxuICogICAgIHRhcmdldCkgd2hlbiBubyBwcmVzZXQgaW50ZXJjZXB0cy5cbiAqICAgLSBwaWVjZS1ocC5vbkRhbWFnZSBhYnNvcmJzIGRhbWFnZSB3aGlsZSBIcCA+IGFtb3VudCwga2lsbHMgd2hlblxuICogICAgIEhwIHdvdWxkIGdvIOKJpCAwLlxuICogICAtIGV4cGxvc2l2ZS1yb29rICsgcGllY2UtaHAgY29tcG9zaXRpb246IHRoZSBibGFzdCBkZWFscyAxIEhQIHRvXG4gKiAgICAgZWFjaCB2aWN0aW0gaW4gcmFuZ2UgcmF0aGVyIHRoYW4gaW5zdGFudC1raWxsaW5nLCBzbyBwaWVjZXNcbiAqICAgICB3aXRoIEhQID4gMSBzdXJ2aXZlIHRoZSBkZXRvbmF0aW9uLiBUaGlzIHdhcyBpbXBvc3NpYmxlIHVuZGVyXG4gKiAgICAgdGhlIHByZXZpb3VzIGRlc2lnbiAodGhlIHR3byBwcmVzZXRzIHdlcmUgZGVjbGFyZWRcbiAqICAgICBpbmNvbXBhdGlibGUpLlxuICogICAtIHF1ZWVuLXNwbGl0cyArIHBpZWNlLWhwOiBmaXNzaW9uIG9ubHkgaGFwcGVucyBvbiBhIGtpbGxpbmdcbiAqICAgICBibG93OyBhIHF1ZWVuIHRoYXQgXCJwb2tlc1wiIGEgMi1IUCB0YXJnZXQgc3RheXMgYSBxdWVlbi5cbiAqICAgLSBwb2lzb25lZC1zcXVhcmVzICsgcGllY2UtaHA6IGRhbWFnZSBmbG93cyB0aHJvdWdoIHRoZSBwaXBlbGluZVxuICogICAgIHdpdGggY3R4LmtpbmQgPT09IFwicG9pc29uXCIgc28gZnV0dXJlIHByZXNldHMgY291bGQgZmlsdGVyIGl0LFxuICogICAgIGJ1dCB0aGUgb2JzZXJ2YWJsZSBIUCBkZWNyZW1lbnQgaXMgdW5jaGFuZ2VkLlxuICpcbiAqIFRoZXNlIHRlc3RzIGRyaXZlIHRoZSBlbmdpbmUgZGlyZWN0bHkgKG5vdCB0aHJvdWdoIHRoZSBzZXJ2ZXIgL1xuICogUHJlZGljdGlvbk1hbmFnZXIpIHNvIHRoZXkgZm9jdXMgc3RyaWN0bHkgb24gdGhlIHByZXNldCBjb21wb3NpdGlvblxuICogc2VtYW50aWNzLlxuICovXG5pbXBvcnQgeyBkZXNjcmliZSwgaXQsIGV4cGVjdCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCBcIi4vaW5kZXguanNcIjtcbmltcG9ydCB7IENoZXNzRW5naW5lIH0gZnJvbSBcIi4uL2VuZ2luZS5qc1wiO1xuaW1wb3J0IHsgYWxnZWJyYWljVG9TcXVhcmUgfSBmcm9tIFwiLi4vY29vcmQuanNcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcblxuZnVuY3Rpb24gcGllY2VBdChlbmdpbmU6IENoZXNzRW5naW5lLCBzcTogc3RyaW5nKTogRW50aXR5SWQgfCBudWxsIHtcbiAgY29uc3QgdGFyZ2V0ID0gYWxnZWJyYWljVG9TcXVhcmUoc3EpO1xuICBmb3IgKGNvbnN0IGYgb2YgZW5naW5lLnNlc3Npb24uYWxsRmFjdHMoKSkge1xuICAgIGlmIChmLmF0dHIgPT09IFwiUG9zaXRpb25cIiAmJiBmLnZhbHVlID09PSB0YXJnZXQpIHJldHVybiBmLmlkO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBocE9mKGVuZ2luZTogQ2hlc3NFbmdpbmUsIGlkOiBFbnRpdHlJZCk6IG51bWJlciB8IG51bGwge1xuICBpZiAoIWVuZ2luZS5zZXNzaW9uLmNvbnRhaW5zKGlkLCBcIkhwXCIpKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIGVuZ2luZS5zZXNzaW9uLmdldChpZCwgXCJIcFwiKSBhcyBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIGV4aXN0cyhlbmdpbmU6IENoZXNzRW5naW5lLCBpZDogRW50aXR5SWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIGVuZ2luZS5zZXNzaW9uLmNvbnRhaW5zKGlkLCBcIlBpZWNlVHlwZVwiKTtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBkZWFsRGFtYWdlOiBkZWZhdWx0IChubyBpbnRlcmNlcHRvcikgcGF0aFxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmRlc2NyaWJlKFwiZW5naW5lLmRlYWxEYW1hZ2Ug4oCUIGRlZmF1bHQgcGF0aCAobm8gSFAgcHJlc2V0KVwiLCAoKSA9PiB7XG4gIGl0KFwiZGFtYWdlID49IDEgcmV0cmFjdHMgdGhlIHRhcmdldCBhbmQgcmV0dXJucyBkaWVkOnRydWVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGNvbnN0IHBhd24gPSBwaWVjZUF0KGVuZ2luZSwgXCJlMlwiKSE7XG4gICAgY29uc3QgcmVzdWx0ID0gZW5naW5lLmRlYWxEYW1hZ2UocGF3biwgMSwgeyBraW5kOiBcImNhcHR1cmVcIiB9KTtcbiAgICBleHBlY3QocmVzdWx0LmRpZWQpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KGV4aXN0cyhlbmdpbmUsIHBhd24pKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJkYW1hZ2UgMCBpcyBhIG5vLW9wIChzdXJ2aXZlZClcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGNvbnN0IHBhd24gPSBwaWVjZUF0KGVuZ2luZSwgXCJlMlwiKSE7XG4gICAgY29uc3QgcmVzdWx0ID0gZW5naW5lLmRlYWxEYW1hZ2UocGF3biwgMCwgeyBraW5kOiBcImNhcHR1cmVcIiB9KTtcbiAgICBleHBlY3QocmVzdWx0LmRpZWQpLnRvQmUoZmFsc2UpO1xuICAgIGV4cGVjdChleGlzdHMoZW5naW5lLCBwYXduKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJuZWdhdGl2ZSBkYW1hZ2UgaXMgYSBuby1vcCAoc3Vydml2ZWQpXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBjb25zdCBwYXduID0gcGllY2VBdChlbmdpbmUsIFwiZTJcIikhO1xuICAgIGNvbnN0IHJlc3VsdCA9IGVuZ2luZS5kZWFsRGFtYWdlKHBhd24sIC0zLCB7IGtpbmQ6IFwiY2FwdHVyZVwiIH0pO1xuICAgIGV4cGVjdChyZXN1bHQuZGllZCkudG9CZShmYWxzZSk7XG4gICAgZXhwZWN0KGV4aXN0cyhlbmdpbmUsIHBhd24pKS50b0JlKHRydWUpO1xuICB9KTtcbn0pO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIHBpZWNlLWhwLm9uRGFtYWdlXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZGVzY3JpYmUoXCJwaWVjZS1ocC5vbkRhbWFnZSBpbnRlcmNlcHRzXCIsICgpID0+IHtcbiAgaXQoXCJ0YXJnZXQgd2l0aCBIcD0yIHN1cnZpdmVzIDEgZGFtYWdlIHdpdGggSHA9MVwiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgZW5naW5lLnNldEFjdGl2ZVByZXNldHMoW1xuICAgICAgeyBpZDogXCJwaWVjZS1ocFwiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgXSk7XG4gICAgY29uc3QgcGF3biA9IHBpZWNlQXQoZW5naW5lLCBcImUyXCIpITtcbiAgICBjb25zdCByZXN1bHQgPSBlbmdpbmUuZGVhbERhbWFnZShwYXduLCAxLCB7IGtpbmQ6IFwiY2FwdHVyZVwiIH0pO1xuICAgIGV4cGVjdChyZXN1bHQuZGllZCkudG9CZShmYWxzZSk7XG4gICAgZXhwZWN0KGhwT2YoZW5naW5lLCBwYXduKSkudG9CZSgxKTtcbiAgICBleHBlY3QoZXhpc3RzKGVuZ2luZSwgcGF3bikpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwidGFyZ2V0IHdpdGggSHA9MSBkaWVzIGZyb20gMSBkYW1hZ2VcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGVuZ2luZS5zZXRBY3RpdmVQcmVzZXRzKFtcbiAgICAgIHsgaWQ6IFwicGllY2UtaHBcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuICAgIGNvbnN0IHBhd24gPSBwaWVjZUF0KGVuZ2luZSwgXCJlMlwiKSE7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KHBhd24sIFwiSHBcIiwgMSk7XG4gICAgY29uc3QgcmVzdWx0ID0gZW5naW5lLmRlYWxEYW1hZ2UocGF3biwgMSwgeyBraW5kOiBcImNhcHR1cmVcIiB9KTtcbiAgICBleHBlY3QocmVzdWx0LmRpZWQpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KGV4aXN0cyhlbmdpbmUsIHBhd24pKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJhbW91bnQgaXMgcmVzcGVjdGVkOiBIcD0yIGRpZXMgZnJvbSAyIGRhbWFnZSBpbiBvbmUgYmxvd1wiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgZW5naW5lLnNldEFjdGl2ZVByZXNldHMoW1xuICAgICAgeyBpZDogXCJwaWVjZS1ocFwiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgXSk7XG4gICAgY29uc3QgcGF3biA9IHBpZWNlQXQoZW5naW5lLCBcImUyXCIpITtcbiAgICBjb25zdCByZXN1bHQgPSBlbmdpbmUuZGVhbERhbWFnZShwYXduLCAyLCB7IGtpbmQ6IFwiY2FwdHVyZVwiIH0pO1xuICAgIGV4cGVjdChyZXN1bHQuZGllZCkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QoZXhpc3RzKGVuZ2luZSwgcGF3bikpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcImFtb3VudCA+IGN1cnJlbnQgSHAgYWxzbyBraWxscyAob3ZlcmtpbGwpXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiBcInBpZWNlLWhwXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcbiAgICBjb25zdCBwYXduID0gcGllY2VBdChlbmdpbmUsIFwiZTJcIikhO1xuICAgIGNvbnN0IHJlc3VsdCA9IGVuZ2luZS5kZWFsRGFtYWdlKHBhd24sIDk5LCB7IGtpbmQ6IFwiZXhwbG9zaW9uXCIgfSk7XG4gICAgZXhwZWN0KHJlc3VsdC5kaWVkKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChleGlzdHMoZW5naW5lLCBwYXduKSkudG9CZShmYWxzZSk7XG4gIH0pO1xufSk7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gZXhwbG9zaXZlLXJvb2sgKyBwaWVjZS1ocCBjb21wb3NpdGlvblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmRlc2NyaWJlKFwiZXhwbG9zaXZlLXJvb2sgKyBwaWVjZS1ocDogdGhlIGNvbWJpbmF0aW9uIHRoYXQgdXNlZCB0byBiZSBmb3JiaWRkZW5cIiwgKCkgPT4ge1xuICAvKipcbiAgICogQnVpbGQgYSBtaW5pbWFsaXN0IHBvc2l0aW9uOiB0d28gbG9uZSBwaWVjZXMgcGx1cyBhIHdoaXRlIHJvb2tcbiAgICogcG9zaXRpb25lZCB0byBjYXB0dXJlLCB3aXRoIGFuIFwiaW5ub2NlbnQgYnlzdGFuZGVyXCIgYWRqYWNlbnQgdG9cbiAgICogdGhlIHRhcmdldCB0byB0ZXN0IEFvRS4gVGhpcyBhdm9pZHMgbGVnYWxpdHkgaXNzdWVzIHdpdGggbW92ZVxuICAgKiBzY3JpcHRzIGFuZCBsZXRzIHVzIGZvY3VzIG9uIHRoZSBkYW1hZ2UgY29tcG9zaXRpb24uXG4gICAqXG4gICAqIEJvYXJkIHNrZXRjaCAod2hpdGUgdG8gbW92ZTsgb3RoZXIgcGllY2VzIGNsZWFyZWQpOlxuICAgKiAgICAgLiAuIC4gLiAuIC4gLiAuICAgKHJhbmsgOClcbiAgICogICAgIC4gLiAuIC4gLiAuIC4gLiAgIChyYW5rIDcpXG4gICAqICAgICAuIC4gLiAuIC4gLiAuIC4gICAocmFuayA2KVxuICAgKiAgICAgcCAuIC4gLiAuIC4gLiAuICAgYTU6IGJsYWNrIHBhd24gKHRhcmdldClcbiAgICogICAgIHAgLiAuIC4gLiAuIC4gLiAgIGE0OiB3aGl0ZSBwYXduIChmcmllbmRseSBieXN0YW5kZXIpXG4gICAqICAgICAuIC4gLiAuIC4gLiAuIC4gICAocmFuayAzKVxuICAgKiAgICAgLiAuIC4gLiAuIC4gLiAuICAgKHJhbmsgMilcbiAgICogICAgIFIgLiAuIC4gLiAuIC4gLiAgIGExOiB3aGl0ZSByb29rXG4gICAqIFJ4YTUgY2FwdHVyZXMgdGhlIGJsYWNrIHBhd247IGJsYXN0IGhpdHMgYTQgKGRpc3QgMSkgYW5kIGEtZmlsZVxuICAgKiB1cCB0byBhNyAoZGlzdCAyKSDigJQgYTcgaXMgZW1wdHkuIEFsc28gY2FwdHVyZXMgd2l0aGluIDIgb24gdGhlXG4gICAqIDV0aCByYW5rIOKAlCBhbGwgZW1wdHkuXG4gICAqL1xuICBmdW5jdGlvbiBjbGVhckFuZFNldHVwKGVuZ2luZTogQ2hlc3NFbmdpbmUpOiB7XG4gICAgcm9vazogRW50aXR5SWQ7XG4gICAgdGFyZ2V0UGF3bjogRW50aXR5SWQ7XG4gICAgZnJpZW5kbHlQYXduOiBFbnRpdHlJZDtcbiAgfSB7XG4gICAgLy8gQ2xlYXIgZXZlcnkgcGllY2UgZXhjZXB0IGtpbmdzLCB0aGVuIGluamVjdCB0aGUgdHJpby5cbiAgICBjb25zdCBmYWN0cyA9IGVuZ2luZS5zZXNzaW9uLmFsbEZhY3RzKCk7XG4gICAgY29uc3QgdG9DbGVhcjogRW50aXR5SWRbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZiBvZiBmYWN0cykge1xuICAgICAgaWYgKGYuYXR0ciAhPT0gXCJQaWVjZVR5cGVcIikgY29udGludWU7XG4gICAgICBpZiAoKGYuaWQgYXMgbnVtYmVyKSA8PSAwKSBjb250aW51ZTtcbiAgICAgIGlmIChmLnZhbHVlID09PSBcImtpbmdcIikgY29udGludWU7XG4gICAgICB0b0NsZWFyLnB1c2goZi5pZCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaWQgb2YgdG9DbGVhcikge1xuICAgICAgZm9yIChjb25zdCBhdHRyIG9mIFtcIlBpZWNlVHlwZVwiLCBcIkNvbG9yXCIsIFwiUG9zaXRpb25cIiwgXCJIYXNNb3ZlZFwiLCBcIkhwXCJdIGFzIGNvbnN0KSB7XG4gICAgICAgIGlmIChlbmdpbmUuc2Vzc2lvbi5jb250YWlucyhpZCwgYXR0cikpIGVuZ2luZS5zZXNzaW9uLnJldHJhY3QoaWQsIGF0dHIpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBTcGF3biB0aHJlZSBwaWVjZXMgdmlhIGRpcmVjdCBzZXNzaW9uIGluc2VydHMgd2l0aCBmcmVzaCBpZHMuXG4gICAgY29uc3Qgcm9vayA9IGVuZ2luZS5zZXNzaW9uLm5leHRJZCgpO1xuICAgIGVuZ2luZS5zZXNzaW9uLmluc2VydChyb29rLCBcIlBpZWNlVHlwZVwiLCBcInJvb2tcIik7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KHJvb2ssIFwiQ29sb3JcIiwgXCJ3aGl0ZVwiKTtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQocm9vaywgXCJQb3NpdGlvblwiLCBhbGdlYnJhaWNUb1NxdWFyZShcImExXCIpKTtcbiAgICBjb25zdCBmcmllbmRseVBhd24gPSBlbmdpbmUuc2Vzc2lvbi5uZXh0SWQoKTtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQoZnJpZW5kbHlQYXduLCBcIlBpZWNlVHlwZVwiLCBcInBhd25cIik7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KGZyaWVuZGx5UGF3biwgXCJDb2xvclwiLCBcIndoaXRlXCIpO1xuICAgIGVuZ2luZS5zZXNzaW9uLmluc2VydChmcmllbmRseVBhd24sIFwiUG9zaXRpb25cIiwgYWxnZWJyYWljVG9TcXVhcmUoXCJhNFwiKSk7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KGZyaWVuZGx5UGF3biwgXCJIYXNNb3ZlZFwiLCB0cnVlKTtcbiAgICBjb25zdCB0YXJnZXRQYXduID0gZW5naW5lLnNlc3Npb24ubmV4dElkKCk7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KHRhcmdldFBhd24sIFwiUGllY2VUeXBlXCIsIFwicGF3blwiKTtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQodGFyZ2V0UGF3biwgXCJDb2xvclwiLCBcImJsYWNrXCIpO1xuICAgIGVuZ2luZS5zZXNzaW9uLmluc2VydCh0YXJnZXRQYXduLCBcIlBvc2l0aW9uXCIsIGFsZ2VicmFpY1RvU3F1YXJlKFwiYTVcIikpO1xuICAgIGVuZ2luZS5zZXNzaW9uLmluc2VydCh0YXJnZXRQYXduLCBcIkhhc01vdmVkXCIsIHRydWUpO1xuICAgIHJldHVybiB7IHJvb2ssIHRhcmdldFBhd24sIGZyaWVuZGx5UGF3biB9O1xuICB9XG5cbiAgaXQoXCJyb29rIGJsYXN0IGRlYWxzIDEgSFAgdG8gZWFjaCB2aWN0aW07IHBpZWNlcyB3aXRoIEhwPjEgc3Vydml2ZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgY29uc3QgeyByb29rLCB0YXJnZXRQYXduLCBmcmllbmRseVBhd24gfSA9IGNsZWFyQW5kU2V0dXAoZW5naW5lKTtcbiAgICAvLyBBY3RpdmF0ZSBwcmVzZXRzIEFGVEVSIHNldHVwIHNvIHBpZWNlLWhwLm9uQWN0aXZhdGUgc2VlZHMgSHA9MlxuICAgIC8vIG9uIGV2ZXJ5b25lIHByZXNlbnQgKGluY2x1ZGluZyBvdXIgaW5qZWN0ZWQgcGllY2VzKS5cbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiBcInBpZWNlLWhwXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICAgIHsgaWQ6IFwiZXhwbG9zaXZlLXJvb2tcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuICAgIGV4cGVjdChocE9mKGVuZ2luZSwgcm9vaykpLnRvQmUoMik7XG4gICAgZXhwZWN0KGhwT2YoZW5naW5lLCB0YXJnZXRQYXduKSkudG9CZSgyKTtcbiAgICBleHBlY3QoaHBPZihlbmdpbmUsIGZyaWVuZGx5UGF3bikpLnRvQmUoMik7XG5cbiAgICAvLyBSeGE1IOKAlCBsZWdhbCBzaW5jZSBhMi9hMyBhcmUgZW1wdHkgYW5kIGE0IGlzIGEgZnJpZW5kbHlcbiAgICAvLyAoYmxvY2tzLi4uIHdhaXQgbm8sIGE0IGlzIHNhbWUgY29sb3Ig4oCUIHRoYXQgYmxvY2tzIHRoZSByb29rKS5cbiAgICAvL1xuICAgIC8vIFNvIFwiYTQgZnJpZW5kbHlcIiBzdG9wcyB0aGUgcm9vayBmcm9tIGV2ZW4gcmVhY2hpbmcgYTUgb24gYVxuICAgIC8vIG5vcm1hbCBtb3ZlLiBJIG5lZWQgdGhlIGZyaWVuZGx5IGVsc2V3aGVyZSAoZS5nLiBiNCkuXG4gICAgLy9cbiAgICAvLyBEZWxldGUgdGhlIHByZXZpb3VzIHNldHVwIG9uIGZyaWVuZGx5UGF3bjsgcHV0IGl0IG9uIGI0IHdoaWNoXG4gICAgLy8gaXMgc3RpbGwgd2l0aGluIHJhbmsvZmlsZSByYW5nZSB3aGVuIHRoZSByb29rIHJlYWNoZXMgYTUgdmlhXG4gICAgLy8gZGFtYWdlIHJhZGl1cyBvbiB0aGUgNXRoIHJhbmsgb25seSBpZiBvbiA1dGggcmFuayBvciBhLWZpbGUuXG4gICAgLy9cbiAgICAvLyBBY3R1YWxseSBiNCBpcyBOT1Qgb24gdGhlIGEtZmlsZSBub3IgdGhlIDV0aCByYW5rIHdpdGggdGhlXG4gICAgLy8gYmxhc3QgYXQgYTUg4oCUIGRpc3RhbmNlIHRvIGE1IGlzIHNxcnQoMV4yICsgMV4yKSA9IGRpYWdvbmFsIDEsXG4gICAgLy8gd2hpY2ggb3J0aG9nb25hbCBibGFzdCBpZ25vcmVzLlxuICAgIC8vXG4gICAgLy8gUmUtY29uZmlndXJlOiBmcmllbmRseSBvbiBhNyAoYWRqYWNlbnQgdG8gdGFyZ2V0IG9uIGEtZmlsZVxuICAgIC8vIGRpc3RhbmNlIDIpLiBBbHNvIG5lZWQgdG8gbW92ZSBpdCBvZmYgdGhlIHJvb2sncyBwYXRoIOKAlCBhNyBpc1xuICAgIC8vIG5vdCBvbiB0aGUgcGF0aCBhMeKGkmE1IHNvIHNhZmUuXG4gICAgZW5naW5lLnNlc3Npb24ucmV0cmFjdChmcmllbmRseVBhd24sIFwiUG9zaXRpb25cIik7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KGZyaWVuZGx5UGF3biwgXCJQb3NpdGlvblwiLCBhbGdlYnJhaWNUb1NxdWFyZShcImE3XCIpKTtcbiAgICAvLyBBbHNvIG5lZWQgdG8gbWFrZSBzdXJlIGE3IGdldHMgSHAgc2VlZGVkIOKAlCBzZXRBY3RpdmVQcmVzZXRzXG4gICAgLy8gYWxyZWFkeSBkaWQgaXQsIHNvIGhwT2YoZnJpZW5kbHlQYXduKSBzdGlsbCAyLlxuICAgIGV4cGVjdChocE9mKGVuZ2luZSwgZnJpZW5kbHlQYXduKSkudG9CZSgyKTtcblxuICAgIGNvbnN0IGNhcHR1cmUgPSBlbmdpbmUuZmluZE1vdmUoXG4gICAgICBhbGdlYnJhaWNUb1NxdWFyZShcImExXCIpLFxuICAgICAgYWxnZWJyYWljVG9TcXVhcmUoXCJhNVwiKSxcbiAgICApO1xuICAgIGV4cGVjdChjYXB0dXJlKS5ub3QudG9CZU51bGwoKTtcbiAgICBlbmdpbmUuYXBwbHlNb3ZlKGNhcHR1cmUhKTtcblxuICAgIC8vIEV4cGVjdGF0aW9uczpcbiAgICAvLyAgIC0gVGFyZ2V0IG9uIGE1IHN1cnZpdmVkIChIcCAy4oaSMSksIHNvIHRoZSByb29rIFNUQVlFRCBvbiBhMS5cbiAgICAvLyAgIC0gRnJpZW5kbHkgb24gYTcgYWxzbyBjaGlwcGVkIChIcCAy4oaSMSksIGFsaXZlLlxuICAgIC8vICAgLSBSb29rIHVuY2hhbmdlZCBhdCBIcD0yLlxuICAgIGV4cGVjdChwaWVjZUF0KGVuZ2luZSwgXCJhMVwiKSkudG9CZShyb29rKTtcbiAgICBleHBlY3QoaHBPZihlbmdpbmUsIHRhcmdldFBhd24pKS50b0JlKDEpO1xuICAgIGV4cGVjdChocE9mKGVuZ2luZSwgZnJpZW5kbHlQYXduKSkudG9CZSgxKTtcbiAgICBleHBlY3QoaHBPZihlbmdpbmUsIHJvb2spKS50b0JlKDIpO1xuICB9KTtcblxuICBpdChcIndpdGhvdXQgSFAsIHJvb2sgYmxhc3Qgc3RpbGwgbnVrZXMgKGRlZmF1bHQga2lsbHMpXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBjb25zdCB7IHJvb2ssIHRhcmdldFBhd24sIGZyaWVuZGx5UGF3biB9ID0gY2xlYXJBbmRTZXR1cChlbmdpbmUpO1xuICAgIC8vIFNhbWUgbGF5b3V0OyBtb3ZlIGZyaWVuZGx5IHRvIGE3IHNvIHRoZSByb29rIGNhbiBzZWUgYTUuXG4gICAgZW5naW5lLnNlc3Npb24ucmV0cmFjdChmcmllbmRseVBhd24sIFwiUG9zaXRpb25cIik7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KGZyaWVuZGx5UGF3biwgXCJQb3NpdGlvblwiLCBhbGdlYnJhaWNUb1NxdWFyZShcImE3XCIpKTtcbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiBcImV4cGxvc2l2ZS1yb29rXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcblxuICAgIGNvbnN0IGNhcHR1cmUgPSBlbmdpbmUuZmluZE1vdmUoXG4gICAgICBhbGdlYnJhaWNUb1NxdWFyZShcImExXCIpLFxuICAgICAgYWxnZWJyYWljVG9TcXVhcmUoXCJhNVwiKSxcbiAgICApO1xuICAgIGV4cGVjdChjYXB0dXJlKS5ub3QudG9CZU51bGwoKTtcbiAgICBlbmdpbmUuYXBwbHlNb3ZlKGNhcHR1cmUhKTtcblxuICAgIC8vIE5vIEhQIOKAlCBibGFzdCBraWxscyBldmVyeW9uZS4gUm9vayBhZHZhbmNlcyBvbnRvIGE1LlxuICAgIGV4cGVjdChleGlzdHMoZW5naW5lLCB0YXJnZXRQYXduKSkudG9CZShmYWxzZSk7XG4gICAgZXhwZWN0KGV4aXN0cyhlbmdpbmUsIGZyaWVuZGx5UGF3bikpLnRvQmUoZmFsc2UpO1xuICAgIGV4cGVjdChwaWVjZUF0KGVuZ2luZSwgXCJhNVwiKSkudG9CZShyb29rKTtcbiAgfSk7XG59KTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBxdWVlbi1zcGxpdHMgKyBwaWVjZS1ocCBjb21wb3NpdGlvblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmRlc2NyaWJlKFwicXVlZW4tc3BsaXRzICsgcGllY2UtaHA6IGZpc3Npb24gb25seSBvbiBraWxsc1wiLCAoKSA9PiB7XG4gIC8qKiBNaW5pbWFsIHNldHVwOiB3aGl0ZSBxdWVlbiBvbiBkMSwgYmxhY2sgcGF3biBvbiBkNCAoY2xlYXIgZmlsZSkuICovXG4gIGZ1bmN0aW9uIGNsZWFyQW5kU2V0dXAoZW5naW5lOiBDaGVzc0VuZ2luZSk6IHtcbiAgICBxdWVlbjogRW50aXR5SWQ7XG4gICAgdGFyZ2V0OiBFbnRpdHlJZDtcbiAgfSB7XG4gICAgY29uc3QgZmFjdHMgPSBlbmdpbmUuc2Vzc2lvbi5hbGxGYWN0cygpO1xuICAgIGNvbnN0IHRvQ2xlYXI6IEVudGl0eUlkW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGYgb2YgZmFjdHMpIHtcbiAgICAgIGlmIChmLmF0dHIgIT09IFwiUGllY2VUeXBlXCIpIGNvbnRpbnVlO1xuICAgICAgaWYgKChmLmlkIGFzIG51bWJlcikgPD0gMCkgY29udGludWU7XG4gICAgICBpZiAoZi52YWx1ZSA9PT0gXCJraW5nXCIpIGNvbnRpbnVlO1xuICAgICAgdG9DbGVhci5wdXNoKGYuaWQpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGlkIG9mIHRvQ2xlYXIpIHtcbiAgICAgIGZvciAoY29uc3QgYXR0ciBvZiBbXCJQaWVjZVR5cGVcIiwgXCJDb2xvclwiLCBcIlBvc2l0aW9uXCIsIFwiSGFzTW92ZWRcIiwgXCJIcFwiXSBhcyBjb25zdCkge1xuICAgICAgICBpZiAoZW5naW5lLnNlc3Npb24uY29udGFpbnMoaWQsIGF0dHIpKSBlbmdpbmUuc2Vzc2lvbi5yZXRyYWN0KGlkLCBhdHRyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcXVlZW4gPSBlbmdpbmUuc2Vzc2lvbi5uZXh0SWQoKTtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQocXVlZW4sIFwiUGllY2VUeXBlXCIsIFwicXVlZW5cIik7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KHF1ZWVuLCBcIkNvbG9yXCIsIFwid2hpdGVcIik7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KHF1ZWVuLCBcIlBvc2l0aW9uXCIsIGFsZ2VicmFpY1RvU3F1YXJlKFwiZDFcIikpO1xuICAgIGNvbnN0IHRhcmdldCA9IGVuZ2luZS5zZXNzaW9uLm5leHRJZCgpO1xuICAgIGVuZ2luZS5zZXNzaW9uLmluc2VydCh0YXJnZXQsIFwiUGllY2VUeXBlXCIsIFwicGF3blwiKTtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQodGFyZ2V0LCBcIkNvbG9yXCIsIFwiYmxhY2tcIik7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KHRhcmdldCwgXCJQb3NpdGlvblwiLCBhbGdlYnJhaWNUb1NxdWFyZShcImQ0XCIpKTtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQodGFyZ2V0LCBcIkhhc01vdmVkXCIsIHRydWUpO1xuICAgIHJldHVybiB7IHF1ZWVuLCB0YXJnZXQgfTtcbiAgfVxuXG4gIGl0KFwicXVlZW4gcG9rZXMgSHA9MiB0YXJnZXQ6IG5vIGZpc3Npb24sIHF1ZWVuIHN0YXlzLCB0YXJnZXQgSHA9MVwiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgY29uc3QgeyBxdWVlbiwgdGFyZ2V0IH0gPSBjbGVhckFuZFNldHVwKGVuZ2luZSk7XG4gICAgZW5naW5lLnNldEFjdGl2ZVByZXNldHMoW1xuICAgICAgeyBpZDogXCJwaWVjZS1ocFwiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgICB7IGlkOiBcInF1ZWVuLXNwbGl0c1wiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgXSk7XG4gICAgZXhwZWN0KGhwT2YoZW5naW5lLCB0YXJnZXQpKS50b0JlKDIpO1xuXG4gICAgY29uc3QgY2FwdHVyZSA9IGVuZ2luZS5maW5kTW92ZShcbiAgICAgIGFsZ2VicmFpY1RvU3F1YXJlKFwiZDFcIiksXG4gICAgICBhbGdlYnJhaWNUb1NxdWFyZShcImQ0XCIpLFxuICAgICk7XG4gICAgZXhwZWN0KGNhcHR1cmUpLm5vdC50b0JlTnVsbCgpO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoY2FwdHVyZSEpO1xuXG4gICAgLy8gVGFyZ2V0IHN1cnZpdmVkIChIUCBhYnNvcmJlZCkuIFF1ZWVuIHN0YXlzIHB1dCwgZGlkbid0IGZpc3Npb24uXG4gICAgZXhwZWN0KHBpZWNlQXQoZW5naW5lLCBcImQxXCIpKS50b0JlKHF1ZWVuKTtcbiAgICBleHBlY3QocGllY2VBdChlbmdpbmUsIFwiZDRcIikpLnRvQmUodGFyZ2V0KTtcbiAgICBleHBlY3QoaHBPZihlbmdpbmUsIHRhcmdldCkpLnRvQmUoMSk7XG4gICAgZXhwZWN0KGVuZ2luZS5zZXNzaW9uLmdldChxdWVlbiwgXCJQaWVjZVR5cGVcIikpLnRvQmUoXCJxdWVlblwiKTtcbiAgfSk7XG5cbiAgaXQoXCJxdWVlbiBraWxscyBIcD0xIHRhcmdldDogZmlzc2lvbiBmaXJlcyBub3JtYWxseVwiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgY29uc3QgeyBxdWVlbiwgdGFyZ2V0IH0gPSBjbGVhckFuZFNldHVwKGVuZ2luZSk7XG4gICAgZW5naW5lLnNldEFjdGl2ZVByZXNldHMoW1xuICAgICAgeyBpZDogXCJwaWVjZS1ocFwiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgICB7IGlkOiBcInF1ZWVuLXNwbGl0c1wiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgXSk7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KHRhcmdldCwgXCJIcFwiLCAxKTsgLy8gcHJlLXdlYWtlblxuXG4gICAgY29uc3QgY2FwdHVyZSA9IGVuZ2luZS5maW5kTW92ZShcbiAgICAgIGFsZ2VicmFpY1RvU3F1YXJlKFwiZDFcIiksXG4gICAgICBhbGdlYnJhaWNUb1NxdWFyZShcImQ0XCIpLFxuICAgICk7XG4gICAgZXhwZWN0KGNhcHR1cmUpLm5vdC50b0JlTnVsbCgpO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoY2FwdHVyZSEpO1xuXG4gICAgLy8gVGFyZ2V0IGRpZWQsIHF1ZWVuIGZpc3Npb25lZDogcm9vayBvbiBkNCwgcXVlZW4gZW50aXR5IGdvbmUsXG4gICAgLy8gYmlzaG9wIG9uIGZpcnN0IGVtcHR5IGFkamFjZW50IGNsb2Nrd2lzZS1mcm9tLU4uIFdpdGggYVxuICAgIC8vIG1pbmltYWwgYm9hcmQgdGhlIE4gc3F1YXJlIChkNSkgaXMgZW1wdHkg4oaSIGJpc2hvcCBzcGF3bnMgb24gZDUuXG4gICAgZXhwZWN0KGV4aXN0cyhlbmdpbmUsIHF1ZWVuKSkudG9CZShmYWxzZSk7XG4gICAgY29uc3QgZDRBZnRlciA9IHBpZWNlQXQoZW5naW5lLCBcImQ0XCIpITtcbiAgICBleHBlY3QoZW5naW5lLnNlc3Npb24uZ2V0KGQ0QWZ0ZXIsIFwiUGllY2VUeXBlXCIpKS50b0JlKFwicm9va1wiKTtcbiAgICBjb25zdCBkNUFmdGVyID0gcGllY2VBdChlbmdpbmUsIFwiZDVcIik7XG4gICAgZXhwZWN0KGQ1QWZ0ZXIpLm5vdC50b0JlTnVsbCgpO1xuICAgIGV4cGVjdChlbmdpbmUuc2Vzc2lvbi5nZXQoZDVBZnRlciEsIFwiUGllY2VUeXBlXCIpKS50b0JlKFwiYmlzaG9wXCIpO1xuICB9KTtcbn0pO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIHBvaXNvbmVkLXNxdWFyZXM6IGRhbWFnZSBwaXBlbGluZSBpbnRlZ3JhdGlvblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gZW5naW5lLnNwYXduUGllY2UgKyBvblBpZWNlU3Bhd24g4oCUIHByZXNldC1hZ25vc3RpYyBzcGF3biBwaXBlbGluZVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmRlc2NyaWJlKFwiZW5naW5lLnNwYXduUGllY2UgKyBvblBpZWNlU3Bhd246IEhQIGF1dG8tc2VlZHMgb24gZmlzc2lvbi1zcGF3bmVkIHBpZWNlc1wiLCAoKSA9PiB7XG4gIGl0KFwicXVlZW4tc3BsaXRzIHNwYXducyByb29rK2Jpc2hvcDsgcGllY2UtaHAgb25QaWVjZVNwYXduIHNlZWRzIEhwPTIgb24gYm90aFwiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG5cbiAgICAvLyBDbGVhciB0byBhIG1pbmltYWwgYm9hcmQ6IHdoaXRlIHF1ZWVuIG9uIGQxLCB3ZWFrZW5lZCBibGFja1xuICAgIC8vIHBhd24gb24gZDQgKEhwPTEgYWZ0ZXIgd2UgYWN0aXZhdGUgcGllY2UtaHApLlxuICAgIGNvbnN0IGZhY3RzID0gZW5naW5lLnNlc3Npb24uYWxsRmFjdHMoKTtcbiAgICBjb25zdCB0b0NsZWFyOiBFbnRpdHlJZFtdID0gW107XG4gICAgZm9yIChjb25zdCBmIG9mIGZhY3RzKSB7XG4gICAgICBpZiAoZi5hdHRyICE9PSBcIlBpZWNlVHlwZVwiKSBjb250aW51ZTtcbiAgICAgIGlmICgoZi5pZCBhcyBudW1iZXIpIDw9IDApIGNvbnRpbnVlO1xuICAgICAgaWYgKGYudmFsdWUgPT09IFwia2luZ1wiKSBjb250aW51ZTtcbiAgICAgIHRvQ2xlYXIucHVzaChmLmlkKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBpZCBvZiB0b0NsZWFyKSB7XG4gICAgICBmb3IgKGNvbnN0IGF0dHIgb2YgW1wiUGllY2VUeXBlXCIsIFwiQ29sb3JcIiwgXCJQb3NpdGlvblwiLCBcIkhhc01vdmVkXCIsIFwiSHBcIl0gYXMgY29uc3QpIHtcbiAgICAgICAgaWYgKGVuZ2luZS5zZXNzaW9uLmNvbnRhaW5zKGlkLCBhdHRyKSkgZW5naW5lLnNlc3Npb24ucmV0cmFjdChpZCwgYXR0cik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHF1ZWVuSWQgPSBlbmdpbmUuc2Vzc2lvbi5uZXh0SWQoKTtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQocXVlZW5JZCwgXCJQaWVjZVR5cGVcIiwgXCJxdWVlblwiKTtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQocXVlZW5JZCwgXCJDb2xvclwiLCBcIndoaXRlXCIpO1xuICAgIGVuZ2luZS5zZXNzaW9uLmluc2VydChxdWVlbklkLCBcIlBvc2l0aW9uXCIsIGFsZ2VicmFpY1RvU3F1YXJlKFwiZDFcIikpO1xuICAgIGNvbnN0IHBhd25JZCA9IGVuZ2luZS5zZXNzaW9uLm5leHRJZCgpO1xuICAgIGVuZ2luZS5zZXNzaW9uLmluc2VydChwYXduSWQsIFwiUGllY2VUeXBlXCIsIFwicGF3blwiKTtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQocGF3bklkLCBcIkNvbG9yXCIsIFwiYmxhY2tcIik7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KHBhd25JZCwgXCJQb3NpdGlvblwiLCBhbGdlYnJhaWNUb1NxdWFyZShcImQ0XCIpKTtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQocGF3bklkLCBcIkhhc01vdmVkXCIsIHRydWUpO1xuXG4gICAgLy8gQWN0aXZhdGUgcXVlZW4tc3BsaXRzIEZJUlNULCB0aGVuIHBpZWNlLWhwLiBUaGlzIHVzZWQgdG8gYmUgYVxuICAgIC8vIGJyb2tlbiBvcmRlcmluZyDigJQgdGhlIHNwYXduIGhlbHBlciBpbiBxdWVlbi1zcGxpdHMgbmV2ZXIgd2VudFxuICAgIC8vIHRocm91Z2ggSFAncyBvbkFjdGl2YXRlLCBzbyBmaXNzaW9uZWQgcGllY2VzIGhhZCBubyBIcC5cbiAgICAvLyBQb3N0LXJlZmFjdG9yLCBxdWVlbi1zcGxpdHMgdXNlcyBlbmdpbmUuc3Bhd25QaWVjZSB3aGljaCBmaXJlc1xuICAgIC8vIG9uUGllY2VTcGF3biBvbiBldmVyeSBhY3RpdmUgcHJlc2V0IOKGkiBwaWVjZS1ocCBzZWVkcyBIcD0yLlxuICAgIGVuZ2luZS5zZXRBY3RpdmVQcmVzZXRzKFtcbiAgICAgIHsgaWQ6IFwicXVlZW4tc3BsaXRzXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiBcInF1ZWVuLXNwbGl0c1wiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgICB7IGlkOiBcInBpZWNlLWhwXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcbiAgICAvLyBQcmUtd2Vha2VuIHRoZSB0YXJnZXQgc28gcXVlZW4ga2lsbHMgb24gaGVyIGNhcHR1cmUgKGZpc3Npb25cbiAgICAvLyBvbmx5IGZpcmVzIG9uIGtpbGwsIG5vdCBwb2tlKS5cbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQocGF3bklkLCBcIkhwXCIsIDEpO1xuXG4gICAgY29uc3QgY2FwdHVyZSA9IGVuZ2luZS5maW5kTW92ZShcbiAgICAgIGFsZ2VicmFpY1RvU3F1YXJlKFwiZDFcIiksXG4gICAgICBhbGdlYnJhaWNUb1NxdWFyZShcImQ0XCIpLFxuICAgICk7XG4gICAgZXhwZWN0KGNhcHR1cmUpLm5vdC50b0JlTnVsbCgpO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoY2FwdHVyZSEpO1xuXG4gICAgLy8gUm9vayBzcGF3bmVkIG9uIGQ0IChjYXB0dXJlIHNxdWFyZSkg4oCUIGZpbmQgaXQsIGNoZWNrIEhwLlxuICAgIGNvbnN0IGQ0Tm93ID0gcGllY2VBdChlbmdpbmUsIFwiZDRcIikhO1xuICAgIGV4cGVjdChlbmdpbmUuc2Vzc2lvbi5nZXQoZDROb3csIFwiUGllY2VUeXBlXCIpKS50b0JlKFwicm9va1wiKTtcbiAgICBleHBlY3QoaHBPZihlbmdpbmUsIGQ0Tm93KSkudG9CZSgyKTtcblxuICAgIC8vIEJpc2hvcCBzcGF3bmVkIG9uIGZpcnN0IGNsb2Nrd2lzZS1mcm9tLU4gZW1wdHkgc3F1YXJlIGFyb3VuZCBkNFxuICAgIC8vIChkNSBpcyBlbXB0eSBvbiBvdXIgbWluaW1hbCBib2FyZCkuXG4gICAgY29uc3QgZDVOb3cgPSBwaWVjZUF0KGVuZ2luZSwgXCJkNVwiKTtcbiAgICBleHBlY3QoZDVOb3cpLm5vdC50b0JlTnVsbCgpO1xuICAgIGV4cGVjdChlbmdpbmUuc2Vzc2lvbi5nZXQoZDVOb3chLCBcIlBpZWNlVHlwZVwiKSkudG9CZShcImJpc2hvcFwiKTtcbiAgICBleHBlY3QoaHBPZihlbmdpbmUsIGQ1Tm93ISkpLnRvQmUoMik7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwicG9pc29uZWQtc3F1YXJlcyByb3V0ZXMgdGhyb3VnaCB0aGUgZGFtYWdlIHBpcGVsaW5lXCIsICgpID0+IHtcbiAgaXQoXCJlYWNoIHRpY2sgZGVhbHMgMSBIUCBkYW1hZ2UgdmlhIHRoZSBwaXBlbGluZTsgcGllY2UgZGllcyB3aGVuIEhwIGhpdHMgMFwiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgZW5naW5lLnNldEFjdGl2ZVByZXNldHMoW1xuICAgICAgeyBpZDogXCJwaWVjZS1ocFwiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgICB7IGlkOiBcInBvaXNvbmVkLXNxdWFyZXNcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuXG4gICAgLy8gMS4gZTQgbGFuZHMgdGhlIHdoaXRlIGUtcGF3biBvbiBlNCwgYSBwb2lzb25lZCBzcXVhcmUuIEVuZCBvZlxuICAgIC8vIGhhbGYtbW92ZSDihpIgcG9pc29uIHRpY2sg4oaSIGU0IHBhd24gSHAgMi0+MS5cbiAgICBlbmdpbmUuYXBwbHlNb3ZlKFxuICAgICAgZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZTJcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiZTRcIikpISxcbiAgICApO1xuICAgIGNvbnN0IGU0UGF3biA9IHBpZWNlQXQoZW5naW5lLCBcImU0XCIpITtcbiAgICBleHBlY3QoaHBPZihlbmdpbmUsIGU0UGF3bikpLnRvQmUoMSk7XG5cbiAgICAvLyAyLi4uc29tZXdoZXJlIGUuZy4gMS4uLmE2LiBCbGFjayBtb3Zlcywgd2hpdGUncyBwYXduIGRvZXNuJ3RcbiAgICAvLyBtb3ZlLCBidXQgc3RpbGwgc3RhbmRzIG9uIGU0IGF0IHRoZSBlbmQgb2YgdGhpcyBoYWxmLW1vdmUg4oaSXG4gICAgLy8gYW5vdGhlciB0aWNrIOKGkiBIcCAxLT4wIOKGkiBwaWVjZSBkaWVzLlxuICAgIGVuZ2luZS5hcHBseU1vdmUoXG4gICAgICBlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJhN1wiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJhNlwiKSkhLFxuICAgICk7XG4gICAgZXhwZWN0KGV4aXN0cyhlbmdpbmUsIGU0UGF3bikpLnRvQmUoZmFsc2UpO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL2NoZXNzL3NyYy9wcmVzZXRzL2RhbWFnZS1waXBlbGluZS50ZXN0LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/1c3d8bc54c74c954d05023e4d1afbf5b334e002d b/7xOfJqsDU787fe61oSCq1/web/1c3d8bc54c74c954d05023e4d1afbf5b334e002d deleted file mode 100644 index 96efbb2..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/1c3d8bc54c74c954d05023e4d1afbf5b334e002d +++ /dev/null @@ -1,227 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "JoinNode", { enumerable: true, configurable: true, get(){ try { return JoinNode } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/beta.js", {"importedNames":["Token","BetaMemory"]}); -/** - * Beta-network join node. - * - * Left input: an upstream {@link BetaMemory} of partial matches. - * Right input: an {@link AlphaMemory} of facts that passed constant tests. - * Output: zero or more {@link Token}s per `(token, fact)` pair that satisfies - * {@link JoinNode.tests}, delivered to downstream subscribers. - * - * The two "binding slots" — {@link valueBinding} and {@link idBinding} — name - * the variables under which the right fact's value and entity id are recorded - * in the produced token's bindings. Either may be `null` if the rule does not - * need that projection (e.g. an anonymous-value condition `(?id, Dead, _)` - * passes `null` for the value binding). - */ -class JoinNode { - #activateListeners = []; - #deactivateListeners = []; - /** - * Produced tokens indexed by the right fact key `${id}:${attr}`. - * - * Each entry is the list of downstream tokens we emitted the last time the - * fact was right-activated. On {@link JoinNode.rightDeactivate} we use this - * index to retract exactly those tokens in O(matches) without scanning all - * downstream state. - * - * The key intentionally omits `value` because an alpha memory stores at - * most one value per `(id, attr)` pair at any time — reactivation after an - * update produces a fresh entry under the same key. - */ - #producedTokens = new Map(); - #leftMemory; - #rightMemory; - #tests; - #valueBinding; - #idBinding; - /** - * @param leftMemory Upstream beta memory supplying partial matches. - * @param rightMemory Alpha memory supplying facts for this condition. - * @param tests Equality tests evaluated against every `(token, fact)` pair. - * @param valueBinding Variable name under which the right fact's *value* is - * recorded in produced tokens, or `null` to omit. - * @param idBinding Variable name under which the right fact's *entity id* - * is recorded in produced tokens, or `null` to omit. - */ - constructor(leftMemory, rightMemory, tests, valueBinding, idBinding) { - this.#leftMemory = leftMemory; - this.#rightMemory = rightMemory; - this.#tests = tests; - this.#valueBinding = valueBinding; - this.#idBinding = idBinding; - } - /** Subscribe to downstream activations. Listeners fire in registration order. */ - addDownstreamActivate(listener) { - this.#activateListeners.push(listener); - } - /** Subscribe to downstream deactivations. Listeners fire in registration order. */ - addDownstreamDeactivate(listener) { - this.#deactivateListeners.push(listener); - } - /** - * Process a new right-side fact. - * - * Called by the upstream AlphaNode's activate listener. Walks the left - * memory, emits one extended token per token that passes the tests, and - * records the batch under the fact key so retraction can find them. - */ - rightActivate(id, attr, value) { - const factKey = `${id}:${attr}`; - const produced = []; - for (const token of this.#leftMemory.tokens) { - if (this.#testsPass(token, id, value)) { - const newToken = this.#makeToken(token, id, attr, value); - produced.push(newToken); - for (const l of this.#activateListeners) - l(newToken); - } - }; - if (produced.length > 0) { - this.#producedTokens.set(factKey, produced); - } - } - /** - * Withdraw matches derived from a retracted right-side fact. - * - * Looks up the batch recorded by {@link JoinNode.rightActivate} under the - * fact key and fires deactivate listeners for each. If there is no such - * batch (e.g. no tokens matched originally) the call is a no-op. - * - * The `_value` parameter is unused — alpha memories key by `(id, attr)` - * and updates are modelled as retract-then-insert of the same pair, so the - * key alone is sufficient. - */ - rightDeactivate(id, attr, _value) { - const factKey = `${id}:${attr}`; - const produced = this.#producedTokens.get(factKey); - if (!produced) - return; - for (const token of produced) { - for (const l of this.#deactivateListeners) - l(token); - }; - this.#producedTokens.delete(factKey); - } - /** - * Process a new left-side token. - * - * Called when an upstream beta memory admits a new partial match. Walks the - * (sorted) right memory and emits extended tokens for every right fact that - * passes the tests. Each produced token is also recorded in the per-fact - * index so a later retraction of either side retracts consistently. - */ - leftActivate(token) { - for (const { id, attr, value } of this.#rightMemory.facts) { - if (this.#testsPass(token, id, value)) { - const newToken = this.#makeToken(token, id, attr, value); - const factKey = `${id}:${attr}`; - let bucket = this.#producedTokens.get(factKey); - if (!bucket) { - bucket = []; - this.#producedTokens.set(factKey, bucket); - }; - bucket.push(newToken); - for (const l of this.#activateListeners) - l(newToken); - } - } - } - /** - * Withdraw matches derived from a retracted left-side token. - * - * Walks the produced-tokens index and retracts every recorded token whose - * parent chain contains the deactivated token. Entries that become empty - * are removed from the index to bound memory growth over long sessions. - */ - leftDeactivate(token) { - for (const [key, tokens] of this.#producedTokens) { - const remaining = []; - const removed = []; - for (const t of tokens) { - if (this.#hasAncestor(t, token)) { - removed.push(t); - } - else { - remaining.push(t); - } - }; - for (const r of removed) { - for (const l of this.#deactivateListeners) - l(r); - }; - if (remaining.length === 0) { - this.#producedTokens.delete(key); - } - else if (removed.length > 0) { - this.#producedTokens.set(key, remaining); - } - } - } - /** - * Evaluate every join test against `(token, right fact)`. - * - * Short-circuits on the first failing test. `idEquality` compares the right - * entity id; `valueEquality` compares the right value. A test whose - * `leftVar` is missing from the token bindings always fails — this keeps - * the node safe against builder bugs that forget to bind a variable before - * referencing it. - */ - #testsPass(token, rightId, rightValue) { - for (const test of this.#tests) { - const leftVal = token.bindings[test.leftVar]; - if (leftVal === undefined) - return false; - if (test.type === "idEquality") { - if (leftVal !== rightId) - return false; - } - else { - // valueEquality - if (leftVal !== rightValue) - return false; - } - }; - return true; - } - /** - * Allocate the extended token for a successful `(token, fact)` pair. - * - * The new token's bindings are a shallow copy of the parent's bindings - * plus (optionally) the value and id slots configured on this node. Copy - * semantics are deliberate — sibling produced tokens must not share a - * bindings object, otherwise a later filter/handler could mutate one match - * and silently corrupt another. - */ - #makeToken(parent, rightId, rightAttr, rightValue) { - const newBindings = { ...parent.bindings }; - if (this.#valueBinding !== null) { - newBindings[this.#valueBinding] = rightValue; - }; - if (this.#idBinding !== null) { - newBindings[this.#idBinding] = rightId; - }; - const fact = { id: rightId, attr: rightAttr, value: rightValue }; - return new __vite_ssr_import_0__.Token(parent, fact, newBindings); - } - /** - * Walk a token's `parent` chain looking for `ancestor`. - * - * Equality is by object reference — tokens are never duplicated structurally - * within a chain, so reference identity is the correct relation. Returns - * `true` as soon as `ancestor` is seen, including the trivial case where - * `token === ancestor`. - */ - #hasAncestor(token, ancestor) { - let current = token; - while (current !== null) { - if (current === ancestor) - return true; - current = current.parent; - }; - return false; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFXLENBQUM7SUFDN0M7SUFFQTs7Ozs7Ozs7SUFRQSxZQUFZLENBQUMsS0FBWSxFQUFFLFFBQWU7UUFDeEMsSUFBSSxPQUFPLEdBQWlCLEtBQUs7UUFDakMsT0FBTyxPQUFPLEtBQUssSUFBSSxFQUFFO1lBQ3ZCLElBQUksT0FBTyxLQUFLLFFBQVE7Z0JBQUUsT0FBTyxJQUFJO1lBQ3JDLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTTtRQUMxQjtRQUNBLE9BQU8sS0FBSztJQUNkIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyIuLi9zcmMvam9pbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEpvaW5Ob2RlIOKAlCB0aGUgY29yZSBvZiB0aGUgUmV0ZSBiZXRhIG5ldHdvcmsuXG4gKlxuICogUGVyIGBwYWNrYWdlcy9yZXRlL1NQRUMubWQgwqdSZXRlIElJIFJlZmVyZW5jZSBUYXJnZXRgIHRoaXMgbW9kdWxlIGltcGxlbWVudHNcbiAqIHRoZSBKb2luTm9kZSBmcm9tIHRoZSBEb29yZW5ib3MgYmV0YSBuZXR3b3JrLiBBIGpvaW4gY29tYmluZXMgYSBsZWZ0IGlucHV0XG4gKiAoe0BsaW5rIEJldGFNZW1vcnl9IG9mIHBhcnRpYWwgbWF0Y2hlcykgd2l0aCBhIHJpZ2h0IGlucHV0ICh7QGxpbmtcbiAqIEFscGhhTWVtb3J5fSBvZiBmYWN0cyB0aGF0IHBhc3NlZCBjb25zdGFudCB0ZXN0cykgYW5kIGVtaXRzIGEgbmV3IHBhcnRpYWxcbiAqIG1hdGNoIGZvciBldmVyeSBgKHRva2VuLCBmYWN0KWAgcGFpciB0aGF0IHNhdGlzZmllcyB0aGUgbm9kZSdzIGVxdWFsaXR5XG4gKiB0ZXN0cy4gVGhpcyBpcyB0aGUgc3RlcCB0aGF0IG1ha2VzIFJldGUgaW5jcmVtZW50YWw6IHdoZW4gZWl0aGVyIHNpZGVcbiAqIGNoYW5nZXMsIG9ubHkgdGhlIGNyb3NzIHByb2R1Y3QgYWdhaW5zdCB0aGUgKm90aGVyKiBzaWRlIGlzIGNvbnNpZGVyZWQsXG4gKiBuZXZlciB0aGUgZnVsbCB3b3JraW5nIG1lbW9yeS5cbiAqXG4gKiAjIyMgRXF1YWxpdHkgdGVzdHNcbiAqXG4gKiBBIHtAbGluayBKb2luVGVzdH0gZXhwcmVzc2VzIGFuIGVxdWFsaXR5IGNvbnN0cmFpbnQgYmV0d2VlbiBhIHZhcmlhYmxlXG4gKiBhbHJlYWR5IGJvdW5kIGJ5IHRoZSB0b2tlbiBhbmQgc29tZSBmaWVsZCBvZiB0aGUgcmlnaHQgZmFjdC4gVHdvIGtpbmRzIGFyZVxuICogcmVjb2duaXNlZCBpbiBQaGFzZSAxOlxuICpcbiAqIC0gYGlkRXF1YWxpdHlgIOKAlCB0aGUgcmlnaHQgZmFjdCdzICplbnRpdHkgaWQqIG11c3QgZXF1YWwgYHRva2VuLmJpbmRpbmdzW2xlZnRWYXJdYC5cbiAqICAgVGhpcyBpcyBob3cgbXVsdGktY29uZGl0aW9uIHJ1bGVzIGVuZm9yY2UgXCJzYW1lIGVudGl0eSBhY3Jvc3MgY29uZGl0aW9uc1wiLFxuICogICBlLmcuIGAoP2lkLCBIZWFsdGgsID9oKSDiiKcgKD9pZCwgUG9zaXRpb24sID9wKWAgcmV1c2VzIGA/aWRgIGJ5IGVtaXR0aW5nIGFuXG4gKiAgIGBpZEVxdWFsaXR5YCB0ZXN0IGF0IHRoZSBzZWNvbmQgam9pbi5cbiAqIC0gYHZhbHVlRXF1YWxpdHlgIOKAlCB0aGUgcmlnaHQgZmFjdCdzICp2YWx1ZSogbXVzdCBlcXVhbCBgdG9rZW4uYmluZGluZ3NbbGVmdFZhcl1gLlxuICogICBVc2VkIHdoZW4gYSB2YXJpYWJsZSB3YXMgYm91bmQgYXMgdGhlIHZhbHVlIG9mIGFuIGVhcmxpZXIgY29uZGl0aW9uIGFuZFxuICogICBuZWVkcyB0byBsaW5lIHVwIHdpdGggdGhlIHZhbHVlIG9mIHRoaXMgY29uZGl0aW9uIChlLmcuIGNoYWluaW5nIHRocm91Z2hcbiAqICAgYSBwb2ludGVyLXR5cGVkIGF0dHJpYnV0ZSkuXG4gKlxuICogVGVzdHMgYXJlIGNvbmp1bmN0aXZlIOKAlCBhIGAodG9rZW4sIGZhY3QpYCBwYWlyIG11c3Qgc2F0aXNmeSAqZXZlcnkqIHRlc3QgdG9cbiAqIHByb3BhZ2F0ZS4gQW4gZW1wdHkgdGVzdCBsaXN0IHByb2R1Y2VzIHRoZSBmdWxsIGNhcnRlc2lhbiBwcm9kdWN0LCB3aGljaCBpc1xuICogdGhlIGNvcnJlY3QgYmVoYXZpb3VyIGZvciB0aGUgZmlyc3Qgam9pbiBpbiBhIHJ1bGUgKG5vIHByaW9yIHZhcmlhYmxlcyB0b1xuICogY29uc3RyYWluKSBhbmQgZm9yIGdlbnVpbmUgY3Jvc3MtcHJvZHVjdCBqb2lucy5cbiAqXG4gKiBJbmVxdWFsaXR5L2FyaXRobWV0aWMgZmlsdGVycyBhcmUgKm5vdCogaGFuZGxlZCBoZXJlIOKAlCB0aG9zZSBiZWxvbmcgdG8gdGhlXG4gKiBGaWx0ZXJOb2RlIGZyb20gUDEuOS4gS2VlcGluZyBKb2luTm9kZSBmb2N1c2VkIG9uIGVxdWFsaXR5IGxldHMgdXMgaW5kZXhcbiAqIHJpZ2h0LXNpZGUgYWNjZXNzIGluIGxhdGVyIHBoYXNlcyAoaGFzaC1qb2luKSB3aXRob3V0IHB1bGxpbmcgaW4gYXJiaXRyYXJ5XG4gKiBwcmVkaWNhdGVzLlxuICpcbiAqICMjIyBUb2tlbiBwcm9kdWN0aW9uIGFuZCByZXRyYWN0aW9uIGJvb2trZWVwaW5nXG4gKlxuICogT24gYSBzdWNjZXNzZnVsIGpvaW4gdGhpcyBub2RlIGFsbG9jYXRlcyBleGFjdGx5IG9uZSBuZXcge0BsaW5rIFRva2VufVxuICogd2hvc2UgYHBhcmVudGAgaXMgdGhlIGxlZnQgdG9rZW4gYW5kIHdob3NlIGBmYWN0YCAvIGBiaW5kaW5nc2AgZXh0ZW5kIHRoZVxuICogbWF0Y2ggd2l0aCB0aGUgcmlnaHQgZmFjdC4gRG93bnN0cmVhbSBzdWJzY3JpYmVycyByZWdpc3RlcmVkIHZpYVxuICoge0BsaW5rIEpvaW5Ob2RlLmFkZERvd25zdHJlYW1BY3RpdmF0ZX0gZmlyZSBpbiByZWdpc3RyYXRpb24gb3JkZXIuXG4gKlxuICogUmV0cmFjdGlvbiBpcyB0aGUgc3VidGxlIHBhcnQ6XG4gKlxuICogLSAqKlJpZ2h0IGRlYWN0aXZhdGlvbioqIChhIGZhY3QgbGVhdmVzIEFscGhhTWVtb3J5KSBtdXN0IHJldHJhY3QgZXZlcnlcbiAqICAgZG93bnN0cmVhbSB0b2tlbiB0aGF0IHdhcyBwcm9kdWNlZCBmcm9tIHRoYXQgZmFjdC4gV2UgaW5kZXggcHJvZHVjZWRcbiAqICAgdG9rZW5zIGJ5IHRoZSByaWdodC1mYWN0IGtleSBgJHtpZH06JHthdHRyfWAgZHVyaW5nXG4gKiAgIHtAbGluayBKb2luTm9kZS5yaWdodEFjdGl2YXRlfSBzbyB0aGUgbG9va3VwIG9uIHJldHJhY3QgaXMgTygxKSArXG4gKiAgIE8obWF0Y2hlcykuXG4gKiAtICoqTGVmdCBkZWFjdGl2YXRpb24qKiAoYSB0b2tlbiBsZWF2ZXMgdGhlIGxlZnQgQmV0YU1lbW9yeSkgbXVzdCByZXRyYWN0XG4gKiAgIGV2ZXJ5IGRvd25zdHJlYW0gdG9rZW4gd2hvc2UgcGFyZW50IGNoYWluIGNvbnRhaW5zIHRoYXQgdG9rZW4uIFdlIHdhbGtcbiAqICAgdGhlIHByb2R1Y2VkLXRva2VucyBtYXAgYW5kIGZpbHRlciBieSBhbmNlc3RvciBjaGVjay4gVGhpcyBpcyBPKFAgwrcgRClcbiAqICAgd2hlcmUgUCBpcyB0aGUgcHJvZHVjZWQtdG9rZW4gY291bnQgYW5kIEQgaXMgdGhlIGRlcHRoIG9mIHRoZSBtYXRjaFxuICogICBjaGFpbjsgUGhhc2UgMSB0cmFmZmljIGlzIHNtYWxsIGVub3VnaCB0aGF0IHRoZSBzaW1wbGVyIGltcGxlbWVudGF0aW9uXG4gKiAgIHdpbnMgb3ZlciBhIHJldmVyc2UgaW5kZXguXG4gKlxuICogQm90aCByZXRyYWN0aW9uIHBhdGhzIGludm9rZSByZWdpc3RlcmVkIGRlYWN0aXZhdGUgbGlzdGVuZXJzIHNvIGRvd25zdHJlYW1cbiAqIG1lbW9yaWVzIGNhbiBtaXJyb3IgdGhlIGNoYW5nZS5cbiAqL1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBdHRyS2V5LCBGYWN0VmFsdWUgfSBmcm9tIFwiLi93bS5qc1wiO1xuaW1wb3J0IHsgdHlwZSBCaW5kaW5ncywgVG9rZW4sIEJldGFNZW1vcnksIHR5cGUgVG9rZW5GYWN0IH0gZnJvbSBcIi4vYmV0YS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBbHBoYU1lbW9yeSB9IGZyb20gXCIuL2FscGhhLmpzXCI7XG5cbi8qKlxuICogRXF1YWxpdHkgY29uc3RyYWludCBiZXR3ZWVuIGEgdG9rZW4ncyB2YXJpYWJsZSBiaW5kaW5nIGFuZCBhIHJpZ2h0IGZhY3QuXG4gKlxuICogVGhlIGRpc2NyaW1pbmFudCBgdHlwZWAgc2VsZWN0cyAqd2hpY2gqIGZpZWxkIG9mIHRoZSByaWdodCBmYWN0IGlzIGNvbXBhcmVkOlxuICogYFwiaWRFcXVhbGl0eVwiYCBjb21wYXJlcyBhZ2FpbnN0IHRoZSBmYWN0J3MgZW50aXR5IGlkICh1c2VkIGZvciBzYW1lLWVudGl0eVxuICogam9pbnMpLCBgXCJ2YWx1ZUVxdWFsaXR5XCJgIGNvbXBhcmVzIGFnYWluc3QgdGhlIGZhY3QncyB2YWx1ZSAodXNlZCBmb3IgdmFsdWVcbiAqIHRocmVhZGluZykuIEluIGJvdGggY2FzZXMgdGhlIGxlZnQgb3BlcmFuZCBpcyBgdG9rZW4uYmluZGluZ3NbbGVmdFZhcl1gLlxuICpcbiAqIFRoZXJlIGlzIG5vIG1lY2hhbmlzbSBmb3IgY29tcGFyaW5nIHR3byB2YXJpYWJsZXMgZnJvbSB0aGUgKnNhbWUqIHNpZGVcbiAqIGhlcmUg4oCUIHRoZSBidWlsZGVyIGlzIGV4cGVjdGVkIHRvIGhvaXN0IHN1Y2ggY2FzZXMgaW50byBlYXJsaWVyIHRlc3RzIHNvXG4gKiBvbmx5IGNyb3NzLXNpZGUgY29tcGFyaXNvbnMgcmVhY2ggSm9pbk5vZGUuXG4gKi9cbmV4cG9ydCB0eXBlIEpvaW5UZXN0ID1cbiAgfCB7XG4gICAgICAvKiogUmlnaHQgZmFjdCdzIGVudGl0eSBpZCBtdXN0IGVxdWFsIGB0b2tlbi5iaW5kaW5nc1tsZWZ0VmFyXWAuICovXG4gICAgICB0eXBlOiBcImlkRXF1YWxpdHlcIjtcbiAgICAgIGxlZnRWYXI6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgLyoqIFJpZ2h0IGZhY3QncyB2YWx1ZSBtdXN0IGVxdWFsIGB0b2tlbi5iaW5kaW5nc1tsZWZ0VmFyXWAuICovXG4gICAgICB0eXBlOiBcInZhbHVlRXF1YWxpdHlcIjtcbiAgICAgIGxlZnRWYXI6IHN0cmluZztcbiAgICB9O1xuXG4vKiogRG93bnN0cmVhbSBzdWJzY3JpYmVyIGZpcmVkIHdoZW4gdGhpcyBqb2luIGVtaXRzIGEgbmV3IG1hdGNoLiAqL1xudHlwZSBEb3duc3RyZWFtQWN0aXZhdGUgPSAodG9rZW46IFRva2VuKSA9PiB2b2lkO1xuLyoqIERvd25zdHJlYW0gc3Vic2NyaWJlciBmaXJlZCB3aGVuIHRoaXMgam9pbiByZXRyYWN0cyBhIHByZXZpb3VzbHkgZW1pdHRlZCBtYXRjaC4gKi9cbnR5cGUgRG93bnN0cmVhbURlYWN0aXZhdGUgPSAodG9rZW46IFRva2VuKSA9PiB2b2lkO1xuXG4vKipcbiAqIEJldGEtbmV0d29yayBqb2luIG5vZGUuXG4gKlxuICogTGVmdCBpbnB1dDogYW4gdXBzdHJlYW0ge0BsaW5rIEJldGFNZW1vcnl9IG9mIHBhcnRpYWwgbWF0Y2hlcy5cbiAqIFJpZ2h0IGlucHV0OiBhbiB7QGxpbmsgQWxwaGFNZW1vcnl9IG9mIGZhY3RzIHRoYXQgcGFzc2VkIGNvbnN0YW50IHRlc3RzLlxuICogT3V0cHV0OiB6ZXJvIG9yIG1vcmUge0BsaW5rIFRva2VufXMgcGVyIGAodG9rZW4sIGZhY3QpYCBwYWlyIHRoYXQgc2F0aXNmaWVzXG4gKiB7QGxpbmsgSm9pbk5vZGUudGVzdHN9LCBkZWxpdmVyZWQgdG8gZG93bnN0cmVhbSBzdWJzY3JpYmVycy5cbiAqXG4gKiBUaGUgdHdvIFwiYmluZGluZyBzbG90c1wiIOKAlCB7QGxpbmsgdmFsdWVCaW5kaW5nfSBhbmQge0BsaW5rIGlkQmluZGluZ30g4oCUIG5hbWVcbiAqIHRoZSB2YXJpYWJsZXMgdW5kZXIgd2hpY2ggdGhlIHJpZ2h0IGZhY3QncyB2YWx1ZSBhbmQgZW50aXR5IGlkIGFyZSByZWNvcmRlZFxuICogaW4gdGhlIHByb2R1Y2VkIHRva2VuJ3MgYmluZGluZ3MuIEVpdGhlciBtYXkgYmUgYG51bGxgIGlmIHRoZSBydWxlIGRvZXMgbm90XG4gKiBuZWVkIHRoYXQgcHJvamVjdGlvbiAoZS5nLiBhbiBhbm9ueW1vdXMtdmFsdWUgY29uZGl0aW9uIGAoP2lkLCBEZWFkLCBfKWBcbiAqIHBhc3NlcyBgbnVsbGAgZm9yIHRoZSB2YWx1ZSBiaW5kaW5nKS5cbiAqL1xuZXhwb3J0IGNsYXNzIEpvaW5Ob2RlIHtcbiAgcmVhZG9ubHkgI2FjdGl2YXRlTGlzdGVuZXJzOiBEb3duc3RyZWFtQWN0aXZhdGVbXSA9IFtdO1xuICByZWFkb25seSAjZGVhY3RpdmF0ZUxpc3RlbmVyczogRG93bnN0cmVhbURlYWN0aXZhdGVbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBQcm9kdWNlZCB0b2tlbnMgaW5kZXhlZCBieSB0aGUgcmlnaHQgZmFjdCBrZXkgYCR7aWR9OiR7YXR0cn1gLlxuICAgKlxuICAgKiBFYWNoIGVudHJ5IGlzIHRoZSBsaXN0IG9mIGRvd25zdHJlYW0gdG9rZW5zIHdlIGVtaXR0ZWQgdGhlIGxhc3QgdGltZSB0aGVcbiAgICogZmFjdCB3YXMgcmlnaHQtYWN0aXZhdGVkLiBPbiB7QGxpbmsgSm9pbk5vZGUucmlnaHREZWFjdGl2YXRlfSB3ZSB1c2UgdGhpc1xuICAgKiBpbmRleCB0byByZXRyYWN0IGV4YWN0bHkgdGhvc2UgdG9rZW5zIGluIE8obWF0Y2hlcykgd2l0aG91dCBzY2FubmluZyBhbGxcbiAgICogZG93bnN0cmVhbSBzdGF0ZS5cbiAgICpcbiAgICogVGhlIGtleSBpbnRlbnRpb25hbGx5IG9taXRzIGB2YWx1ZWAgYmVjYXVzZSBhbiBhbHBoYSBtZW1vcnkgc3RvcmVzIGF0XG4gICAqIG1vc3Qgb25lIHZhbHVlIHBlciBgKGlkLCBhdHRyKWAgcGFpciBhdCBhbnkgdGltZSDigJQgcmVhY3RpdmF0aW9uIGFmdGVyIGFuXG4gICAqIHVwZGF0ZSBwcm9kdWNlcyBhIGZyZXNoIGVudHJ5IHVuZGVyIHRoZSBzYW1lIGtleS5cbiAgICovXG4gIHJlYWRvbmx5ICNwcm9kdWNlZFRva2VucyA9IG5ldyBNYXA8c3RyaW5nLCBUb2tlbltdPigpO1xuXG4gIHJlYWRvbmx5ICNsZWZ0TWVtb3J5OiBCZXRhTWVtb3J5O1xuICByZWFkb25seSAjcmlnaHRNZW1vcnk6IEFscGhhTWVtb3J5O1xuICByZWFkb25seSAjdGVzdHM6IHJlYWRvbmx5IEpvaW5UZXN0W107XG4gIHJlYWRvbmx5ICN2YWx1ZUJpbmRpbmc6IHN0cmluZyB8IG51bGw7XG4gIHJlYWRvbmx5ICNpZEJpbmRpbmc6IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBsZWZ0TWVtb3J5ICAgVXBzdHJlYW0gYmV0YSBtZW1vcnkgc3VwcGx5aW5nIHBhcnRpYWwgbWF0Y2hlcy5cbiAgICogQHBhcmFtIHJpZ2h0TWVtb3J5ICBBbHBoYSBtZW1vcnkgc3VwcGx5aW5nIGZhY3RzIGZvciB0aGlzIGNvbmRpdGlvbi5cbiAgICogQHBhcmFtIHRlc3RzICAgICAgICBFcXVhbGl0eSB0ZXN0cyBldmFsdWF0ZWQgYWdhaW5zdCBldmVyeSBgKHRva2VuLCBmYWN0KWAgcGFpci5cbiAgICogQHBhcmFtIHZhbHVlQmluZGluZyBWYXJpYWJsZSBuYW1lIHVuZGVyIHdoaWNoIHRoZSByaWdodCBmYWN0J3MgKnZhbHVlKiBpc1xuICAgKiAgICAgICAgICAgICAgICAgICAgIHJlY29yZGVkIGluIHByb2R1Y2VkIHRva2Vucywgb3IgYG51bGxgIHRvIG9taXQuXG4gICAqIEBwYXJhbSBpZEJpbmRpbmcgICAgVmFyaWFibGUgbmFtZSB1bmRlciB3aGljaCB0aGUgcmlnaHQgZmFjdCdzICplbnRpdHkgaWQqXG4gICAqICAgICAgICAgICAgICAgICAgICAgaXMgcmVjb3JkZWQgaW4gcHJvZHVjZWQgdG9rZW5zLCBvciBgbnVsbGAgdG8gb21pdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIGxlZnRNZW1vcnk6IEJldGFNZW1vcnksXG4gICAgcmlnaHRNZW1vcnk6IEFscGhhTWVtb3J5LFxuICAgIHRlc3RzOiByZWFkb25seSBKb2luVGVzdFtdLFxuICAgIHZhbHVlQmluZGluZzogc3RyaW5nIHwgbnVsbCxcbiAgICBpZEJpbmRpbmc6IHN0cmluZyB8IG51bGwsXG4gICkge1xuICAgIHRoaXMuI2xlZnRNZW1vcnkgPSBsZWZ0TWVtb3J5O1xuICAgIHRoaXMuI3JpZ2h0TWVtb3J5ID0gcmlnaHRNZW1vcnk7XG4gICAgdGhpcy4jdGVzdHMgPSB0ZXN0cztcbiAgICB0aGlzLiN2YWx1ZUJpbmRpbmcgPSB2YWx1ZUJpbmRpbmc7XG4gICAgdGhpcy4jaWRCaW5kaW5nID0gaWRCaW5kaW5nO1xuICB9XG5cbiAgLyoqIFN1YnNjcmliZSB0byBkb3duc3RyZWFtIGFjdGl2YXRpb25zLiBMaXN0ZW5lcnMgZmlyZSBpbiByZWdpc3RyYXRpb24gb3JkZXIuICovXG4gIGFkZERvd25zdHJlYW1BY3RpdmF0ZShsaXN0ZW5lcjogRG93bnN0cmVhbUFjdGl2YXRlKTogdm9pZCB7XG4gICAgdGhpcy4jYWN0aXZhdGVMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICAvKiogU3Vic2NyaWJlIHRvIGRvd25zdHJlYW0gZGVhY3RpdmF0aW9ucy4gTGlzdGVuZXJzIGZpcmUgaW4gcmVnaXN0cmF0aW9uIG9yZGVyLiAqL1xuICBhZGREb3duc3RyZWFtRGVhY3RpdmF0ZShsaXN0ZW5lcjogRG93bnN0cmVhbURlYWN0aXZhdGUpOiB2b2lkIHtcbiAgICB0aGlzLiNkZWFjdGl2YXRlTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgYSBuZXcgcmlnaHQtc2lkZSBmYWN0LlxuICAgKlxuICAgKiBDYWxsZWQgYnkgdGhlIHVwc3RyZWFtIEFscGhhTm9kZSdzIGFjdGl2YXRlIGxpc3RlbmVyLiBXYWxrcyB0aGUgbGVmdFxuICAgKiBtZW1vcnksIGVtaXRzIG9uZSBleHRlbmRlZCB0b2tlbiBwZXIgdG9rZW4gdGhhdCBwYXNzZXMgdGhlIHRlc3RzLCBhbmRcbiAgICogcmVjb3JkcyB0aGUgYmF0Y2ggdW5kZXIgdGhlIGZhY3Qga2V5IHNvIHJldHJhY3Rpb24gY2FuIGZpbmQgdGhlbS5cbiAgICovXG4gIHJpZ2h0QWN0aXZhdGUoaWQ6IEVudGl0eUlkLCBhdHRyOiBBdHRyS2V5LCB2YWx1ZTogRmFjdFZhbHVlKTogdm9pZCB7XG4gICAgY29uc3QgZmFjdEtleSA9IGAke2lkfToke2F0dHJ9YDtcbiAgICBjb25zdCBwcm9kdWNlZDogVG9rZW5bXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiB0aGlzLiNsZWZ0TWVtb3J5LnRva2Vucykge1xuICAgICAgaWYgKHRoaXMuI3Rlc3RzUGFzcyh0b2tlbiwgaWQsIHZhbHVlKSkge1xuICAgICAgICBjb25zdCBuZXdUb2tlbiA9IHRoaXMuI21ha2VUb2tlbih0b2tlbiwgaWQsIGF0dHIsIHZhbHVlKTtcbiAgICAgICAgcHJvZHVjZWQucHVzaChuZXdUb2tlbik7XG4gICAgICAgIGZvciAoY29uc3QgbCBvZiB0aGlzLiNhY3RpdmF0ZUxpc3RlbmVycykgbChuZXdUb2tlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb2R1Y2VkLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuI3Byb2R1Y2VkVG9rZW5zLnNldChmYWN0S2V5LCBwcm9kdWNlZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdpdGhkcmF3IG1hdGNoZXMgZGVyaXZlZCBmcm9tIGEgcmV0cmFjdGVkIHJpZ2h0LXNpZGUgZmFjdC5cbiAgICpcbiAgICogTG9va3MgdXAgdGhlIGJhdGNoIHJlY29yZGVkIGJ5IHtAbGluayBKb2luTm9kZS5yaWdodEFjdGl2YXRlfSB1bmRlciB0aGVcbiAgICogZmFjdCBrZXkgYW5kIGZpcmVzIGRlYWN0aXZhdGUgbGlzdGVuZXJzIGZvciBlYWNoLiBJZiB0aGVyZSBpcyBubyBzdWNoXG4gICAqIGJhdGNoIChlLmcuIG5vIHRva2VucyBtYXRjaGVkIG9yaWdpbmFsbHkpIHRoZSBjYWxsIGlzIGEgbm8tb3AuXG4gICAqXG4gICAqIFRoZSBgX3ZhbHVlYCBwYXJhbWV0ZXIgaXMgdW51c2VkIOKAlCBhbHBoYSBtZW1vcmllcyBrZXkgYnkgYChpZCwgYXR0cilgXG4gICAqIGFuZCB1cGRhdGVzIGFyZSBtb2RlbGxlZCBhcyByZXRyYWN0LXRoZW4taW5zZXJ0IG9mIHRoZSBzYW1lIHBhaXIsIHNvIHRoZVxuICAgKiBrZXkgYWxvbmUgaXMgc3VmZmljaWVudC5cbiAgICovXG4gIHJpZ2h0RGVhY3RpdmF0ZShpZDogRW50aXR5SWQsIGF0dHI6IEF0dHJLZXksIF92YWx1ZTogRmFjdFZhbHVlKTogdm9pZCB7XG4gICAgY29uc3QgZmFjdEtleSA9IGAke2lkfToke2F0dHJ9YDtcbiAgICBjb25zdCBwcm9kdWNlZCA9IHRoaXMuI3Byb2R1Y2VkVG9rZW5zLmdldChmYWN0S2V5KTtcbiAgICBpZiAoIXByb2R1Y2VkKSByZXR1cm47XG5cbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHByb2R1Y2VkKSB7XG4gICAgICBmb3IgKGNvbnN0IGwgb2YgdGhpcy4jZGVhY3RpdmF0ZUxpc3RlbmVycykgbCh0b2tlbik7XG4gICAgfVxuICAgIHRoaXMuI3Byb2R1Y2VkVG9rZW5zLmRlbGV0ZShmYWN0S2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGEgbmV3IGxlZnQtc2lkZSB0b2tlbi5cbiAgICpcbiAgICogQ2FsbGVkIHdoZW4gYW4gdXBzdHJlYW0gYmV0YSBtZW1vcnkgYWRtaXRzIGEgbmV3IHBhcnRpYWwgbWF0Y2guIFdhbGtzIHRoZVxuICAgKiAoc29ydGVkKSByaWdodCBtZW1vcnkgYW5kIGVtaXRzIGV4dGVuZGVkIHRva2VucyBmb3IgZXZlcnkgcmlnaHQgZmFjdCB0aGF0XG4gICAqIHBhc3NlcyB0aGUgdGVzdHMuIEVhY2ggcHJvZHVjZWQgdG9rZW4gaXMgYWxzbyByZWNvcmRlZCBpbiB0aGUgcGVyLWZhY3RcbiAgICogaW5kZXggc28gYSBsYXRlciByZXRyYWN0aW9uIG9mIGVpdGhlciBzaWRlIHJldHJhY3RzIGNvbnNpc3RlbnRseS5cbiAgICovXG4gIGxlZnRBY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHsgaWQsIGF0dHIsIHZhbHVlIH0gb2YgdGhpcy4jcmlnaHRNZW1vcnkuZmFjdHMpIHtcbiAgICAgIGlmICh0aGlzLiN0ZXN0c1Bhc3ModG9rZW4sIGlkLCB2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgbmV3VG9rZW4gPSB0aGlzLiNtYWtlVG9rZW4odG9rZW4sIGlkLCBhdHRyLCB2YWx1ZSk7XG4gICAgICAgIGNvbnN0IGZhY3RLZXkgPSBgJHtpZH06JHthdHRyfWA7XG4gICAgICAgIGxldCBidWNrZXQgPSB0aGlzLiNwcm9kdWNlZFRva2Vucy5nZXQoZmFjdEtleSk7XG4gICAgICAgIGlmICghYnVja2V0KSB7XG4gICAgICAgICAgYnVja2V0ID0gW107XG4gICAgICAgICAgdGhpcy4jcHJvZHVjZWRUb2tlbnMuc2V0KGZhY3RLZXksIGJ1Y2tldCk7XG4gICAgICAgIH1cbiAgICAgICAgYnVja2V0LnB1c2gobmV3VG9rZW4pO1xuICAgICAgICBmb3IgKGNvbnN0IGwgb2YgdGhpcy4jYWN0aXZhdGVMaXN0ZW5lcnMpIGwobmV3VG9rZW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaXRoZHJhdyBtYXRjaGVzIGRlcml2ZWQgZnJvbSBhIHJldHJhY3RlZCBsZWZ0LXNpZGUgdG9rZW4uXG4gICAqXG4gICAqIFdhbGtzIHRoZSBwcm9kdWNlZC10b2tlbnMgaW5kZXggYW5kIHJldHJhY3RzIGV2ZXJ5IHJlY29yZGVkIHRva2VuIHdob3NlXG4gICAqIHBhcmVudCBjaGFpbiBjb250YWlucyB0aGUgZGVhY3RpdmF0ZWQgdG9rZW4uIEVudHJpZXMgdGhhdCBiZWNvbWUgZW1wdHlcbiAgICogYXJlIHJlbW92ZWQgZnJvbSB0aGUgaW5kZXggdG8gYm91bmQgbWVtb3J5IGdyb3d0aCBvdmVyIGxvbmcgc2Vzc2lvbnMuXG4gICAqL1xuICBsZWZ0RGVhY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHRva2Vuc10gb2YgdGhpcy4jcHJvZHVjZWRUb2tlbnMpIHtcbiAgICAgIGNvbnN0IHJlbWFpbmluZzogVG9rZW5bXSA9IFtdO1xuICAgICAgY29uc3QgcmVtb3ZlZDogVG9rZW5bXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0IG9mIHRva2Vucykge1xuICAgICAgICBpZiAodGhpcy4jaGFzQW5jZXN0b3IodCwgdG9rZW4pKSB7XG4gICAgICAgICAgcmVtb3ZlZC5wdXNoKHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbWFpbmluZy5wdXNoKHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHIgb2YgcmVtb3ZlZCkge1xuICAgICAgICBmb3IgKGNvbnN0IGwgb2YgdGhpcy4jZGVhY3RpdmF0ZUxpc3RlbmVycykgbChyKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZW1haW5pbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuI3Byb2R1Y2VkVG9rZW5zLmRlbGV0ZShrZXkpO1xuICAgICAgfSBlbHNlIGlmIChyZW1vdmVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy4jcHJvZHVjZWRUb2tlbnMuc2V0KGtleSwgcmVtYWluaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGUgZXZlcnkgam9pbiB0ZXN0IGFnYWluc3QgYCh0b2tlbiwgcmlnaHQgZmFjdClgLlxuICAgKlxuICAgKiBTaG9ydC1jaXJjdWl0cyBvbiB0aGUgZmlyc3QgZmFpbGluZyB0ZXN0LiBgaWRFcXVhbGl0eWAgY29tcGFyZXMgdGhlIHJpZ2h0XG4gICAqIGVudGl0eSBpZDsgYHZhbHVlRXF1YWxpdHlgIGNvbXBhcmVzIHRoZSByaWdodCB2YWx1ZS4gQSB0ZXN0IHdob3NlXG4gICAqIGBsZWZ0VmFyYCBpcyBtaXNzaW5nIGZyb20gdGhlIHRva2VuIGJpbmRpbmdzIGFsd2F5cyBmYWlscyDigJQgdGhpcyBrZWVwc1xuICAgKiB0aGUgbm9kZSBzYWZlIGFnYWluc3QgYnVpbGRlciBidWdzIHRoYXQgZm9yZ2V0IHRvIGJpbmQgYSB2YXJpYWJsZSBiZWZvcmVcbiAgICogcmVmZXJlbmNpbmcgaXQuXG4gICAqL1xuICAjdGVzdHNQYXNzKHRva2VuOiBUb2tlbiwgcmlnaHRJZDogRW50aXR5SWQsIHJpZ2h0VmFsdWU6IEZhY3RWYWx1ZSk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3QgdGVzdCBvZiB0aGlzLiN0ZXN0cykge1xuICAgICAgY29uc3QgbGVmdFZhbCA9IHRva2VuLmJpbmRpbmdzW3Rlc3QubGVmdFZhcl07XG4gICAgICBpZiAobGVmdFZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAodGVzdC50eXBlID09PSBcImlkRXF1YWxpdHlcIikge1xuICAgICAgICBpZiAobGVmdFZhbCAhPT0gcmlnaHRJZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdmFsdWVFcXVhbGl0eVxuICAgICAgICBpZiAobGVmdFZhbCAhPT0gcmlnaHRWYWx1ZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvY2F0ZSB0aGUgZXh0ZW5kZWQgdG9rZW4gZm9yIGEgc3VjY2Vzc2Z1bCBgKHRva2VuLCBmYWN0KWAgcGFpci5cbiAgICpcbiAgICogVGhlIG5ldyB0b2tlbidzIGJpbmRpbmdzIGFyZSBhIHNoYWxsb3cgY29weSBvZiB0aGUgcGFyZW50J3MgYmluZGluZ3NcbiAgICogcGx1cyAob3B0aW9uYWxseSkgdGhlIHZhbHVlIGFuZCBpZCBzbG90cyBjb25maWd1cmVkIG9uIHRoaXMgbm9kZS4gQ29weVxuICAgKiBzZW1hbnRpY3MgYXJlIGRlbGliZXJhdGUg4oCUIHNpYmxpbmcgcHJvZHVjZWQgdG9rZW5zIG11c3Qgbm90IHNoYXJlIGFcbiAgICogYmluZGluZ3Mgb2JqZWN0LCBvdGhlcndpc2UgYSBsYXRlciBmaWx0ZXIvaGFuZGxlciBjb3VsZCBtdXRhdGUgb25lIG1hdGNoXG4gICAqIGFuZCBzaWxlbnRseSBjb3JydXB0IGFub3RoZXIuXG4gICAqL1xuICAjbWFrZVRva2VuKFxuICAgIHBhcmVudDogVG9rZW4sXG4gICAgcmlnaHRJZDogRW50aXR5SWQsXG4gICAgcmlnaHRBdHRyOiBBdHRyS2V5LFxuICAgIHJpZ2h0VmFsdWU6IEZhY3RWYWx1ZSxcbiAgKTogVG9rZW4ge1xuICAgIGNvbnN0IG5ld0JpbmRpbmdzOiBCaW5kaW5ncyA9IHsgLi4ucGFyZW50LmJpbmRpbmdzIH07XG4gICAgaWYgKHRoaXMuI3ZhbHVlQmluZGluZyAhPT0gbnVsbCkge1xuICAgICAgbmV3QmluZGluZ3NbdGhpcy4jdmFsdWVCaW5kaW5nXSA9IHJpZ2h0VmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLiNpZEJpbmRpbmcgIT09IG51bGwpIHtcbiAgICAgIG5ld0JpbmRpbmdzW3RoaXMuI2lkQmluZGluZ10gPSByaWdodElkO1xuICAgIH1cbiAgICBjb25zdCBmYWN0OiBUb2tlbkZhY3QgPSB7IGlkOiByaWdodElkLCBhdHRyOiByaWdodEF0dHIsIHZhbHVlOiByaWdodFZhbHVlIH07XG4gICAgcmV0dXJuIG5ldyBUb2tlbihwYXJlbnQsIGZhY3QsIG5ld0JpbmRpbmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXYWxrIGEgdG9rZW4ncyBgcGFyZW50YCBjaGFpbiBsb29raW5nIGZvciBgYW5jZXN0b3JgLlxuICAgKlxuICAgKiBFcXVhbGl0eSBpcyBieSBvYmplY3QgcmVmZXJlbmNlIOKAlCB0b2tlbnMgYXJlIG5ldmVyIGR1cGxpY2F0ZWQgc3RydWN0dXJhbGx5XG4gICAqIHdpdGhpbiBhIGNoYWluLCBzbyByZWZlcmVuY2UgaWRlbnRpdHkgaXMgdGhlIGNvcnJlY3QgcmVsYXRpb24uIFJldHVybnNcbiAgICogYHRydWVgIGFzIHNvb24gYXMgYGFuY2VzdG9yYCBpcyBzZWVuLCBpbmNsdWRpbmcgdGhlIHRyaXZpYWwgY2FzZSB3aGVyZVxuICAgKiBgdG9rZW4gPT09IGFuY2VzdG9yYC5cbiAgICovXG4gICNoYXNBbmNlc3Rvcih0b2tlbjogVG9rZW4sIGFuY2VzdG9yOiBUb2tlbik6IGJvb2xlYW4ge1xuICAgIGxldCBjdXJyZW50OiBUb2tlbiB8IG51bGwgPSB0b2tlbjtcbiAgICB3aGlsZSAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGN1cnJlbnQgPT09IGFuY2VzdG9yKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvcmV0ZS9kaXN0L2pvaW4uanMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/1e76730402967a9c04a07074ca3920765b14a319 b/7xOfJqsDU787fe61oSCq1/web/1e76730402967a9c04a07074ca3920765b14a319 deleted file mode 100644 index d49cf21..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/1e76730402967a9c04a07074ca3920765b14a319 +++ /dev/null @@ -1,73 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/layouts/registry.ts", {"importedNames":["LAYOUT_REGISTRY"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/layouts/validate.ts", {"importedNames":["validateLayout"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/layouts/empty.ts", {"importedNames":["EMPTY_LAYOUT"]}); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/layouts/index.ts"); -(0,__vite_ssr_import_0__.describe)("LAYOUT_REGISTRY — premade roster", () => { - (0,__vite_ssr_import_0__.it)("includes every expected id", () => { - const ids = __vite_ssr_import_1__.LAYOUT_REGISTRY.list().map((l) => l.id); - (0,__vite_ssr_import_0__.expect)(ids).toContain("classic"); - (0,__vite_ssr_import_0__.expect)(ids).toContain("dunsany"); - (0,__vite_ssr_import_0__.expect)(ids).toContain("monster"); - (0,__vite_ssr_import_0__.expect)(ids).toContain("pawns-only"); - (0,__vite_ssr_import_0__.expect)(ids).toContain("horde"); - (0,__vite_ssr_import_0__.expect)(ids).toContain("knightmate"); - (0,__vite_ssr_import_0__.expect)(ids).toContain("chess960"); - }); - (0,__vite_ssr_import_0__.it)("does NOT include 'empty' — it's an internal test fixture only", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_1__.LAYOUT_REGISTRY.has("empty")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("every premade has source: 'premade'", () => { - for (const layout of __vite_ssr_import_1__.LAYOUT_REGISTRY.list()) { - (0,__vite_ssr_import_0__.expect)(layout.source).toBe("premade"); - } - }); - (0,__vite_ssr_import_0__.it)("every registered premade validates with zero errors", () => { - for (const layout of __vite_ssr_import_1__.LAYOUT_REGISTRY.list()) { - const { errors } = (0,__vite_ssr_import_2__.validateLayout)(layout); - (0,__vite_ssr_import_0__.expect)(errors, `${layout.id}: ${errors.join("; ")}`).toHaveLength(0); - } - }); - (0,__vite_ssr_import_0__.it)("EMPTY_LAYOUT test fixture still fails validation (sanity)", () => { - const { errors } = (0,__vite_ssr_import_2__.validateLayout)((0,__vite_ssr_import_3__.EMPTY_LAYOUT)); - (0,__vite_ssr_import_0__.expect)(errors.length).toBeGreaterThan(0); - }); - (0,__vite_ssr_import_0__.it)("registering a duplicate id throws", () => { - (0,__vite_ssr_import_0__.expect)(() => { - __vite_ssr_import_1__.LAYOUT_REGISTRY.register({ - id: "classic", - name: "Duplicate", - description: "should throw", - pieces: [], - source: "premade" - }); - }).toThrow(/duplicate/i); - }); -}); -(0,__vite_ssr_import_0__.describe)("premade piece counts", () => { - const counts = [ - ["classic", 32], - ["dunsany", 48], - // 31 white pawns + 1 king + 16 black pieces - ["monster", 21], - // 1 king + 4 pawns + 16 black pieces - ["pawns-only", 18], - // 2 kings + 16 pawns - ["horde", 52], - // 31 white pawns (ranks 1-4 minus e1) + 1 king + 4 advanced pawns + 16 black pieces - ["knightmate", 32], - // standard 32 with swapped back rank - ["chess960", 32] - // shim is FIDE by default - ]; - for (const [id, expectedCount] of counts) { - (0,__vite_ssr_import_0__.it)(`${id} has ${expectedCount} pieces`, () => { - const layout = __vite_ssr_import_1__.LAYOUT_REGISTRY.get(id); - (0,__vite_ssr_import_0__.expect)(layout).toBeDefined(); - (0,__vite_ssr_import_0__.expect)(layout.pieces).toHaveLength(expectedCount); - }); - } -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtHQUVBLGdDQUFTLG9DQUFvQyxNQUFNO0FBQ2pELCtCQUFHLDhCQUE4QixNQUFNO0FBQ3JDLFVBQU0sTUFBTSxzQ0FBZ0IsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRTtBQUNsRCxxQ0FBTyxHQUFHLEVBQUUsVUFBVSxTQUFTO0FBQy9CLHFDQUFPLEdBQUcsRUFBRSxVQUFVLFNBQVM7QUFDL0IscUNBQU8sR0FBRyxFQUFFLFVBQVUsU0FBUztBQUMvQixxQ0FBTyxHQUFHLEVBQUUsVUFBVSxZQUFZO0FBQ2xDLHFDQUFPLEdBQUcsRUFBRSxVQUFVLE9BQU87QUFDN0IscUNBQU8sR0FBRyxFQUFFLFVBQVUsWUFBWTtBQUNsQyxxQ0FBTyxHQUFHLEVBQUUsVUFBVSxVQUFVO0FBQUEsRUFDbEMsQ0FBQztBQUVELCtCQUFHLGlFQUFpRSxNQUFNO0FBQ3hFLHFDQUFPLHNDQUFnQixJQUFJLE9BQU8sQ0FBQyxFQUFFLEtBQUssS0FBSztBQUFBLEVBQ2pELENBQUM7QUFFRCwrQkFBRyx1Q0FBdUMsTUFBTTtBQUM5QyxlQUFXLFVBQVUsc0NBQWdCLEtBQUssR0FBRztBQUMzQyx1Q0FBTyxPQUFPLE1BQU0sRUFBRSxLQUFLLFNBQVM7QUFBQSxJQUN0QztBQUFBLEVBQ0YsQ0FBQztBQUVELCtCQUFHLHVEQUF1RCxNQUFNO0FBQzlELGVBQVcsVUFBVSxzQ0FBZ0IsS0FBSyxHQUFHO0FBQzNDLFlBQU0sRUFBRSxPQUFPLE9BQUksc0NBQWUsTUFBTTtBQUN4Qyx1Q0FBTyxRQUFRLEdBQUcsT0FBTyxFQUFFLEtBQUssT0FBTyxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDO0FBQUEsSUFDckU7QUFBQSxFQUNGLENBQUM7QUFFRCwrQkFBRyw2REFBNkQsTUFBTTtBQUNwRSxVQUFNLEVBQUUsT0FBTyxPQUFJLHlDQUFlLG1DQUFZO0FBQzlDLHFDQUFPLE9BQU8sTUFBTSxFQUFFLGdCQUFnQixDQUFDO0FBQUEsRUFDekMsQ0FBQztBQUVELCtCQUFHLHFDQUFxQyxNQUFNO0FBQzVDLHFDQUFPLE1BQU07QUFDWCw0Q0FBZ0IsU0FBUztBQUFBLFFBQ3ZCLElBQUk7QUFBQSxRQUNKLE1BQU07QUFBQSxRQUNOLGFBQWE7QUFBQSxRQUNiLFFBQVEsQ0FBQztBQUFBLFFBQ1QsUUFBUTtBQUFBLE1BQ1YsQ0FBQztBQUFBLElBQ0gsQ0FBQyxFQUFFLFFBQVEsWUFBWTtBQUFBLEVBQ3pCLENBQUM7QUFDSCxDQUFDO0dBRUQsZ0NBQVMsd0JBQXdCLE1BQU07QUFDckMsUUFBTSxTQUFtRDtBQUFBLElBQ3ZELENBQUMsV0FBVyxFQUFFO0FBQUEsSUFDZCxDQUFDLFdBQVcsRUFBRTtBQUFBO0FBQUEsSUFDZCxDQUFDLFdBQVcsRUFBRTtBQUFBO0FBQUEsSUFDZCxDQUFDLGNBQWMsRUFBRTtBQUFBO0FBQUEsSUFDakIsQ0FBQyxTQUFTLEVBQUU7QUFBQTtBQUFBLElBQ1osQ0FBQyxjQUFjLEVBQUU7QUFBQTtBQUFBLElBQ2pCLENBQUMsWUFBWSxFQUFFO0FBQUE7QUFBQSxFQUNqQjtBQUVBLGFBQVcsQ0FBQyxJQUFJLGFBQWEsS0FBSyxRQUFRO0FBQ3hDLGlDQUFHLEdBQUcsRUFBRSxRQUFRLGFBQWEsV0FBVyxNQUFNO0FBQzVDLFlBQU0sU0FBUyxzQ0FBZ0IsSUFBSSxFQUFFO0FBQ3JDLHVDQUFPLE1BQU0sRUFBRSxZQUFZO0FBQzNCLHVDQUFPLE9BQVEsTUFBTSxFQUFFLGFBQWEsYUFBYTtBQUFBLElBQ25ELENBQUM7QUFBQSxFQUNIO0FBQ0YsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsicHJlbWFkZXMudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNhbml0eSB0ZXN0cyBhY3Jvc3MgZXZlcnkgc2hpcHBlZCBwcmVtYWRlIGxheW91dC5cbiAqXG4gKiBUaGVzZSBjb3ZlciBzdHJ1Y3R1cmFsIGludmFyaWFudHMgKHBpZWNlIGNvdW50cywga2luZyBwcmVzZW5jZSxcbiAqIHZhbGlkYXRvciBhZ3JlZW1lbnQpIGZvciBldmVyeSBsYXlvdXQgaW4gdGhlIHJlZ2lzdHJ5LCBzbyBhZGRpbmcgYVxuICogbmV3IHByZW1hZGUgYXV0b21hdGljYWxseSBnZXRzIHRlc3RlZCB3aGVuIGl0J3MgcmVnaXN0ZXJlZC5cbiAqL1xuaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgeyBMQVlPVVRfUkVHSVNUUlkgfSBmcm9tIFwiLi9yZWdpc3RyeS5qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVMYXlvdXQgfSBmcm9tIFwiLi92YWxpZGF0ZS5qc1wiO1xuaW1wb3J0IHsgRU1QVFlfTEFZT1VUIH0gZnJvbSBcIi4vZW1wdHkuanNcIjtcbmltcG9ydCBcIi4vaW5kZXguanNcIjsgLy8gdHJpZ2dlciByZWdpc3RyYXRpb24gb2YgZXZlcnkgcHJlbWFkZVxuXG5kZXNjcmliZShcIkxBWU9VVF9SRUdJU1RSWSDigJQgcHJlbWFkZSByb3N0ZXJcIiwgKCkgPT4ge1xuICBpdChcImluY2x1ZGVzIGV2ZXJ5IGV4cGVjdGVkIGlkXCIsICgpID0+IHtcbiAgICBjb25zdCBpZHMgPSBMQVlPVVRfUkVHSVNUUlkubGlzdCgpLm1hcCgobCkgPT4gbC5pZCk7XG4gICAgZXhwZWN0KGlkcykudG9Db250YWluKFwiY2xhc3NpY1wiKTtcbiAgICBleHBlY3QoaWRzKS50b0NvbnRhaW4oXCJkdW5zYW55XCIpO1xuICAgIGV4cGVjdChpZHMpLnRvQ29udGFpbihcIm1vbnN0ZXJcIik7XG4gICAgZXhwZWN0KGlkcykudG9Db250YWluKFwicGF3bnMtb25seVwiKTtcbiAgICBleHBlY3QoaWRzKS50b0NvbnRhaW4oXCJob3JkZVwiKTtcbiAgICBleHBlY3QoaWRzKS50b0NvbnRhaW4oXCJrbmlnaHRtYXRlXCIpO1xuICAgIGV4cGVjdChpZHMpLnRvQ29udGFpbihcImNoZXNzOTYwXCIpO1xuICB9KTtcblxuICBpdChcImRvZXMgTk9UIGluY2x1ZGUgJ2VtcHR5JyDigJQgaXQncyBhbiBpbnRlcm5hbCB0ZXN0IGZpeHR1cmUgb25seVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KExBWU9VVF9SRUdJU1RSWS5oYXMoXCJlbXB0eVwiKSkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwiZXZlcnkgcHJlbWFkZSBoYXMgc291cmNlOiAncHJlbWFkZSdcIiwgKCkgPT4ge1xuICAgIGZvciAoY29uc3QgbGF5b3V0IG9mIExBWU9VVF9SRUdJU1RSWS5saXN0KCkpIHtcbiAgICAgIGV4cGVjdChsYXlvdXQuc291cmNlKS50b0JlKFwicHJlbWFkZVwiKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwiZXZlcnkgcmVnaXN0ZXJlZCBwcmVtYWRlIHZhbGlkYXRlcyB3aXRoIHplcm8gZXJyb3JzXCIsICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IGxheW91dCBvZiBMQVlPVVRfUkVHSVNUUlkubGlzdCgpKSB7XG4gICAgICBjb25zdCB7IGVycm9ycyB9ID0gdmFsaWRhdGVMYXlvdXQobGF5b3V0KTtcbiAgICAgIGV4cGVjdChlcnJvcnMsIGAke2xheW91dC5pZH06ICR7ZXJyb3JzLmpvaW4oXCI7IFwiKX1gKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgfVxuICB9KTtcblxuICBpdChcIkVNUFRZX0xBWU9VVCB0ZXN0IGZpeHR1cmUgc3RpbGwgZmFpbHMgdmFsaWRhdGlvbiAoc2FuaXR5KVwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBlcnJvcnMgfSA9IHZhbGlkYXRlTGF5b3V0KEVNUFRZX0xBWU9VVCk7XG4gICAgZXhwZWN0KGVycm9ycy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWdpc3RlcmluZyBhIGR1cGxpY2F0ZSBpZCB0aHJvd3NcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBMQVlPVVRfUkVHSVNUUlkucmVnaXN0ZXIoe1xuICAgICAgICBpZDogXCJjbGFzc2ljXCIsXG4gICAgICAgIG5hbWU6IFwiRHVwbGljYXRlXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcInNob3VsZCB0aHJvd1wiLFxuICAgICAgICBwaWVjZXM6IFtdLFxuICAgICAgICBzb3VyY2U6IFwicHJlbWFkZVwiLFxuICAgICAgfSk7XG4gICAgfSkudG9UaHJvdygvZHVwbGljYXRlL2kpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInByZW1hZGUgcGllY2UgY291bnRzXCIsICgpID0+IHtcbiAgY29uc3QgY291bnRzOiBSZWFkb25seUFycmF5PHJlYWRvbmx5IFtzdHJpbmcsIG51bWJlcl0+ID0gW1xuICAgIFtcImNsYXNzaWNcIiwgMzJdLFxuICAgIFtcImR1bnNhbnlcIiwgNDhdLCAvLyAzMSB3aGl0ZSBwYXducyArIDEga2luZyArIDE2IGJsYWNrIHBpZWNlc1xuICAgIFtcIm1vbnN0ZXJcIiwgMjFdLCAvLyAxIGtpbmcgKyA0IHBhd25zICsgMTYgYmxhY2sgcGllY2VzXG4gICAgW1wicGF3bnMtb25seVwiLCAxOF0sIC8vIDIga2luZ3MgKyAxNiBwYXduc1xuICAgIFtcImhvcmRlXCIsIDUyXSwgLy8gMzEgd2hpdGUgcGF3bnMgKHJhbmtzIDEtNCBtaW51cyBlMSkgKyAxIGtpbmcgKyA0IGFkdmFuY2VkIHBhd25zICsgMTYgYmxhY2sgcGllY2VzXG4gICAgW1wia25pZ2h0bWF0ZVwiLCAzMl0sIC8vIHN0YW5kYXJkIDMyIHdpdGggc3dhcHBlZCBiYWNrIHJhbmtcbiAgICBbXCJjaGVzczk2MFwiLCAzMl0sIC8vIHNoaW0gaXMgRklERSBieSBkZWZhdWx0XG4gIF07XG5cbiAgZm9yIChjb25zdCBbaWQsIGV4cGVjdGVkQ291bnRdIG9mIGNvdW50cykge1xuICAgIGl0KGAke2lkfSBoYXMgJHtleHBlY3RlZENvdW50fSBwaWVjZXNgLCAoKSA9PiB7XG4gICAgICBjb25zdCBsYXlvdXQgPSBMQVlPVVRfUkVHSVNUUlkuZ2V0KGlkKTtcbiAgICAgIGV4cGVjdChsYXlvdXQpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QobGF5b3V0IS5waWVjZXMpLnRvSGF2ZUxlbmd0aChleHBlY3RlZENvdW50KTtcbiAgICB9KTtcbiAgfVxufSk7XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvY2hlc3Mvc3JjL2xheW91dHMvcHJlbWFkZXMudGVzdC50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/1f1d1de7a83b574b0b09311fab7b3b978b678f35 b/7xOfJqsDU787fe61oSCq1/web/1f1d1de7a83b574b0b09311fab7b3b978b678f35 deleted file mode 100644 index 2d6fe8d..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/1f1d1de7a83b574b0b09311fab7b3b978b678f35 +++ /dev/null @@ -1,55 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "isStalemate", { enumerable: true, configurable: true, get(){ try { return isStalemate } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/rules/check.ts", {"importedNames":["isInCheck"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/rules/capture.ts", {"importedNames":["isPieceAttr"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/presets/piece-type-registry.ts", {"importedNames":["PIECE_TYPE_REGISTRY"]}); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/presets/core-piece-types.ts"); -function hasAnyLegalMove(session, color) { - const facts = session.allFacts(); - const pieces = []; - for (const f of facts) { - if (f.attr !== "Color" || f.value !== color) continue; - if (f.id <= 0) continue; - const typeFact = facts.find((t) => t.id === f.id && t.attr === "PieceType"); - if (typeFact === void 0) continue; - pieces.push({ id: f.id, type: typeFact.value }); - }; - for (const piece of pieces) { - const getter = __vite_ssr_import_3__.PIECE_TYPE_REGISTRY.get(piece.type)?.moveGenerator; - if (getter === void 0) continue; - for (const move of getter(session, piece.id)) { - const temp = new __vite_ssr_import_0__.Session({ autoFire: false }); - for (const f of facts) { - if (f.id <= 0) continue; - if (!(0,__vite_ssr_import_2__.isPieceAttr)(f.attr)) continue; - if (move.isCapture && f.attr === "Position" && f.value === move.to) { - continue; - }; - temp.insert(f.id, f.attr, f.value); - }; - if (move.isCapture) { - const captured = facts.find( - (g) => g.attr === "Position" && g.value === move.to && g.id !== move.pieceId - ); - if (captured !== void 0) { - const attrs = facts.filter((g) => g.id === captured.id && (0,__vite_ssr_import_2__.isPieceAttr)(g.attr)).map((g) => g.attr); - for (const attr of attrs) { - if (temp.contains(captured.id, attr)) { - temp.retract(captured.id, attr); - } - } - } - }; - temp.insert(move.pieceId, "Position", move.to); - if (!(0,__vite_ssr_import_1__.isInCheck)(temp, color)) return true; - } - }; - return false; -} -function isStalemate(session, color) { - if ((0,__vite_ssr_import_1__.isInCheck)(session, color)) return false; - return !hasAnyLegalMove(session, color); -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQXVCQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBTUEsU0FBUyxnQkFBZ0IsU0FBa0IsT0FBNEI7QUFDckUsUUFBTSxRQUFRLFFBQVEsU0FBUztBQUkvQixRQUFNLFNBQThDLENBQUM7QUFDckQsYUFBVyxLQUFLLE9BQU87QUFDckIsUUFBSSxFQUFFLFNBQVMsV0FBVyxFQUFFLFVBQVUsTUFBTztBQUM3QyxRQUFJLEVBQUUsTUFBTSxFQUFHO0FBQ2YsVUFBTSxXQUFXLE1BQU0sS0FBSyxPQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLFdBQVc7QUFDeEUsUUFBSSxhQUFhLE9BQVc7QUFDNUIsV0FBTyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksTUFBTSxTQUFTLE1BQW1CLENBQUM7QUFBQSxFQUM3RDtBQUVBLGFBQVcsU0FBUyxRQUFRO0FBQzFCLFVBQU0sU0FBUywwQ0FBb0IsSUFBSSxNQUFNLElBQUksR0FBRztBQUNwRCxRQUFJLFdBQVcsT0FBVztBQUUxQixlQUFXLFFBQVEsT0FBTyxTQUFTLE1BQU0sRUFBRSxHQUFHO0FBSzVDLFlBQU0sT0FBTyxJQUFJLDhCQUFZLEVBQUUsVUFBVSxNQUFNLENBQUM7QUFDaEQsaUJBQVcsS0FBSyxPQUFPO0FBQ3JCLFlBQUssRUFBRSxNQUFpQixFQUFHO0FBQzNCLFlBQUksSUFBQyxtQ0FBWSxFQUFFLElBQUksRUFBRztBQUUxQixZQUFJLEtBQUssYUFBYSxFQUFFLFNBQVMsY0FBYyxFQUFFLFVBQVUsS0FBSyxJQUFJO0FBQ2xFO0FBQUEsUUFDRjtBQUNBLGFBQUssT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSztBQUFBLE1BQ25DO0FBSUEsVUFBSSxLQUFLLFdBQVc7QUFDbEIsY0FBTSxXQUFXLE1BQU07QUFBQSxVQUNyQixPQUFLLEVBQUUsU0FBUyxjQUFjLEVBQUUsVUFBVSxLQUFLLE1BQU0sRUFBRSxPQUFPLEtBQUs7QUFBQSxRQUNyRTtBQUNBLFlBQUksYUFBYSxRQUFXO0FBQzFCLGdCQUFNLFFBQVEsTUFDWCxPQUFPLE9BQUssRUFBRSxPQUFPLFNBQVMsU0FBTSxtQ0FBWSxFQUFFLElBQUksQ0FBQyxFQUN2RCxJQUFJLE9BQUssRUFBRSxJQUFJO0FBQ2xCLHFCQUFXLFFBQVEsT0FBTztBQUN4QixnQkFBSSxLQUFLLFNBQVMsU0FBUyxJQUFJLElBQUksR0FBRztBQUNwQyxtQkFBSyxRQUFRLFNBQVMsSUFBSSxJQUFJO0FBQUEsWUFDaEM7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFHQSxXQUFLLE9BQU8sS0FBSyxTQUFTLFlBQVksS0FBSyxFQUFFO0FBRTdDLFVBQUksSUFBQyxpQ0FBVSxNQUFNLEtBQUssRUFBRyxRQUFPO0FBQUEsSUFDdEM7QUFBQSxFQUNGO0FBQ0EsU0FBTztBQUNUO0FBUU8sU0FBUyxZQUFZLFNBQWtCLE9BQTRCO0FBQ3hFLFNBQUksaUNBQVUsU0FBUyxLQUFLLEVBQUcsUUFBTztBQUN0QyxTQUFPLENBQUMsZ0JBQWdCLFNBQVMsS0FBSztBQUN4QyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsic3RhbGVtYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3RhbGVtYXRlIGRldGVjdGlvbiBmb3IgQHBhcmF0eXBlL2NoZXNzIChQMi4yMCkuXG4gKlxuICogQSBzaWRlIGlzIHN0YWxlbWF0ZWQgd2hlbjpcbiAqICAgMS4gSXQgaXMgTk9UIGN1cnJlbnRseSBpbiBjaGVjaywgQU5EXG4gKiAgIDIuIEl0IGhhcyBubyBsZWdhbCBtb3ZlcyBhdmFpbGFibGUgKGV2ZXJ5IGNhbmRpZGF0ZSBtb3ZlIHdvdWxkXG4gKiAgICAgIGVpdGhlciBiZSBpbGxlZ2FsIGZvciBwaWVjZS1tb3ZlbWVudCByZWFzb25zIG9yIHdvdWxkIGxlYXZlXG4gKiAgICAgIGl0cyBvd24ga2luZyBpbiBjaGVjaykuXG4gKlxuICogVGhpcyBpcyB0aGUgaW52ZXJzZSBvZiBjaGVja21hdGUgb24gY29uZGl0aW9uICgxKTogY2hlY2ttYXRlIHJlcXVpcmVzXG4gKiB0aGUgc2lkZSB0byBCRSBpbiBjaGVjaywgc3RhbGVtYXRlIHJlcXVpcmVzIHRoZSBzaWRlIE5PVCB0byBiZSBpblxuICogY2hlY2suIEJvdGggc2hhcmUgdGhlIFwibm8gbGVnYWwgbW92ZXNcIiBsZWcuXG4gKlxuICogSW1wbGVtZW50YXRpb24gbWlycm9ycyB0aGUgd2hhdC1pZiBhcHByb2FjaCB1c2VkIGJ5IGBmaWx0ZXJTZWxmQ2hlY2tNb3Zlc2A6XG4gKiBmb3IgZWFjaCBmcmllbmRseSBwaWVjZSwgZ2VuZXJhdGUgaXRzIHBzZXVkby1sZWdhbCBtb3ZlcywgYXBwbHkgZWFjaFxuICogdG8gYSB0ZW1wb3JhcnkgU2Vzc2lvbiBzbmFwc2hvdCwgYW5kIGNoZWNrIHdoZXRoZXIgdGhlIHJlc3VsdGluZ1xuICogcG9zaXRpb24gbGVhdmVzIG91ciBraW5nIGluIGNoZWNrLiBJZiBBTlkgbW92ZSBzdXJ2aXZlcywgd2UgYXJlIG5vdFxuICogc3RhbGVtYXRlZCAoYW5kIHdlIGNhbiBzaG9ydC1jaXJjdWl0KS5cbiAqXG4gKiBQMi4xOSAoY2hlY2ttYXRlKSBpcyBpbXBsZW1lbnRlZCBpbiBwYXJhbGxlbCBhbmQgbWF5IGV4cG9zZSBhIHNoYXJlZFxuICogYGhhc0FueUVzY2FwZU1vdmVgIGhlbHBlcjsgdG8ga2VlcCB0aGlzIG1vZHVsZSBpbmRlcGVuZGVudCB3ZVxuICogaW1wbGVtZW50IG91ciBvd24gYGhhc0FueUxlZ2FsTW92ZWAgaW5saW5lLlxuICovXG5pbXBvcnQgeyBTZXNzaW9uIGFzIFJldGVTZXNzaW9uIH0gZnJvbSBcIkBwYXJhdHlwZS9yZXRlXCI7XG5pbXBvcnQgdHlwZSB7IFNlc3Npb24sIEVudGl0eUlkIH0gZnJvbSBcIkBwYXJhdHlwZS9yZXRlXCI7XG5pbXBvcnQgdHlwZSB7IFBpZWNlQ29sb3IsIFBpZWNlVHlwZSB9IGZyb20gXCIuLi9zY2hlbWEuanNcIjtcbmltcG9ydCB7IGlzSW5DaGVjayB9IGZyb20gXCIuL2NoZWNrLmpzXCI7XG5pbXBvcnQgeyBpc1BpZWNlQXR0ciB9IGZyb20gXCIuL2NhcHR1cmUuanNcIjtcbmltcG9ydCB7IFBJRUNFX1RZUEVfUkVHSVNUUlkgfSBmcm9tIFwiLi4vcHJlc2V0cy9waWVjZS10eXBlLXJlZ2lzdHJ5LmpzXCI7XG4vLyBTaWRlLWVmZmVjdDogc2VlIGNoZWNrLnRzIGNvbW1lbnQuXG5pbXBvcnQgXCIuLi9wcmVzZXRzL2NvcmUtcGllY2UtdHlwZXMuanNcIjtcblxuLyoqXG4gKiBEb2VzIGBjb2xvcmAgaGF2ZSBhdCBsZWFzdCBvbmUgbW92ZSB0aGF0IGRvZXNuJ3QgbGVhdmUgaXRzIGtpbmcgaW5cbiAqIGNoZWNrPyBTaG9ydC1jaXJjdWl0cyBvbiB0aGUgZmlyc3QgbGVnYWwgbW92ZSBmb3VuZC5cbiAqL1xuZnVuY3Rpb24gaGFzQW55TGVnYWxNb3ZlKHNlc3Npb246IFNlc3Npb24sIGNvbG9yOiBQaWVjZUNvbG9yKTogYm9vbGVhbiB7XG4gIGNvbnN0IGZhY3RzID0gc2Vzc2lvbi5hbGxGYWN0cygpO1xuXG4gIC8vIENvbGxlY3QgKHBpZWNlSWQsIHR5cGUpIGZvciBldmVyeSBwaWVjZSBvZiBgY29sb3JgLiBHYW1lLWxldmVsXG4gIC8vIGZhY3RzIGxpdmUgb24gaWQgMCDigJQgc2tpcCB0aG9zZS5cbiAgY29uc3QgcGllY2VzOiB7IGlkOiBFbnRpdHlJZDsgdHlwZTogUGllY2VUeXBlIH1bXSA9IFtdO1xuICBmb3IgKGNvbnN0IGYgb2YgZmFjdHMpIHtcbiAgICBpZiAoZi5hdHRyICE9PSBcIkNvbG9yXCIgfHwgZi52YWx1ZSAhPT0gY29sb3IpIGNvbnRpbnVlO1xuICAgIGlmIChmLmlkIDw9IDApIGNvbnRpbnVlO1xuICAgIGNvbnN0IHR5cGVGYWN0ID0gZmFjdHMuZmluZCh0ID0+IHQuaWQgPT09IGYuaWQgJiYgdC5hdHRyID09PSBcIlBpZWNlVHlwZVwiKTtcbiAgICBpZiAodHlwZUZhY3QgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgcGllY2VzLnB1c2goeyBpZDogZi5pZCwgdHlwZTogdHlwZUZhY3QudmFsdWUgYXMgUGllY2VUeXBlIH0pO1xuICB9XG5cbiAgZm9yIChjb25zdCBwaWVjZSBvZiBwaWVjZXMpIHtcbiAgICBjb25zdCBnZXR0ZXIgPSBQSUVDRV9UWVBFX1JFR0lTVFJZLmdldChwaWVjZS50eXBlKT8ubW92ZUdlbmVyYXRvcjtcbiAgICBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXG4gICAgZm9yIChjb25zdCBtb3ZlIG9mIGdldHRlcihzZXNzaW9uLCBwaWVjZS5pZCkpIHtcbiAgICAgIC8vIEJ1aWxkIGEgd2hhdC1pZiBzZXNzaW9uIHdpdGggb25seSBwaWVjZS1sZXZlbCBhdHRycyAoZ2FtZS1sZXZlbFxuICAgICAgLy8gZmFjdHMgYXJlIGlycmVsZXZhbnQgZm9yIGxlZ2FsaXR5KS4gQW55IGF0dHIgdGhhdCBpc24ndFxuICAgICAgLy8gZ2FtZS1sZXZlbCDigJQgaW5jbHVkaW5nIHByZXNldC1kZWNsYXJlZCBvbmVzIGxpa2UgSHAgLyBTaGllbGQg4oCUXG4gICAgICAvLyBpcyBjYXJyaWVkIGZvcndhcmQgYXV0b21hdGljYWxseS5cbiAgICAgIGNvbnN0IHRlbXAgPSBuZXcgUmV0ZVNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgICBmb3IgKGNvbnN0IGYgb2YgZmFjdHMpIHtcbiAgICAgICAgaWYgKChmLmlkIGFzIG51bWJlcikgPD0gMCkgY29udGludWU7XG4gICAgICAgIGlmICghaXNQaWVjZUF0dHIoZi5hdHRyKSkgY29udGludWU7XG4gICAgICAgIC8vIEZvciBjYXB0dXJlcywgZHJvcCB3aGF0ZXZlciBzaXRzIG9uIHRoZSBkZXN0aW5hdGlvbiBzcXVhcmUuXG4gICAgICAgIGlmIChtb3ZlLmlzQ2FwdHVyZSAmJiBmLmF0dHIgPT09IFwiUG9zaXRpb25cIiAmJiBmLnZhbHVlID09PSBtb3ZlLnRvKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdGVtcC5pbnNlcnQoZi5pZCwgZi5hdHRyLCBmLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIC8vIEZvciBjYXB0dXJlcyB3ZSBhbHNvIG5lZWQgdG8gY2xlYXIgdGhlIGNhcHR1cmVkIHBpZWNlJ3Mgb3RoZXJcbiAgICAgIC8vIGF0dHJzIChQaWVjZVR5cGUsIENvbG9yLCAuLi4pLiBSZXRyYWN0IGJ5IGlkIOKAlCBlbnVtZXJhdGUgdGhlXG4gICAgICAvLyB0YXJnZXQncyBwaWVjZS1sZXZlbCBmYWN0cyByYXRoZXIgdGhhbiBhIGhhcmRjb2RlZCBsaXN0LlxuICAgICAgaWYgKG1vdmUuaXNDYXB0dXJlKSB7XG4gICAgICAgIGNvbnN0IGNhcHR1cmVkID0gZmFjdHMuZmluZChcbiAgICAgICAgICBnID0+IGcuYXR0ciA9PT0gXCJQb3NpdGlvblwiICYmIGcudmFsdWUgPT09IG1vdmUudG8gJiYgZy5pZCAhPT0gbW92ZS5waWVjZUlkLFxuICAgICAgICApO1xuICAgICAgICBpZiAoY2FwdHVyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IGF0dHJzID0gZmFjdHNcbiAgICAgICAgICAgIC5maWx0ZXIoZyA9PiBnLmlkID09PSBjYXB0dXJlZC5pZCAmJiBpc1BpZWNlQXR0cihnLmF0dHIpKVxuICAgICAgICAgICAgLm1hcChnID0+IGcuYXR0cik7XG4gICAgICAgICAgZm9yIChjb25zdCBhdHRyIG9mIGF0dHJzKSB7XG4gICAgICAgICAgICBpZiAodGVtcC5jb250YWlucyhjYXB0dXJlZC5pZCwgYXR0cikpIHtcbiAgICAgICAgICAgICAgdGVtcC5yZXRyYWN0KGNhcHR1cmVkLmlkLCBhdHRyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgdGhlIG1vdmUgKG92ZXJ3cml0ZSBQb3NpdGlvbiBpbiBwbGFjZSkuXG4gICAgICB0ZW1wLmluc2VydChtb3ZlLnBpZWNlSWQsIFwiUG9zaXRpb25cIiwgbW92ZS50byk7XG5cbiAgICAgIGlmICghaXNJbkNoZWNrKHRlbXAsIGNvbG9yKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBJcyBgY29sb3JgIHN0YWxlbWF0ZWQgaW4gdGhlIGdpdmVuIHNlc3Npb24/XG4gKlxuICogU3RhbGVtYXRlIGlmZiBgY29sb3JgIGlzIE5PVCBpbiBjaGVjayBBTkQgaGFzIG5vIGxlZ2FsIG1vdmVzLlxuICogUmV0dXJucyBmYWxzZSB3aGVuIGluIGNoZWNrICh0aGF0J3MgY2hlY2ttYXRlLCBoYW5kbGVkIGJ5IFAyLjE5KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3RhbGVtYXRlKHNlc3Npb246IFNlc3Npb24sIGNvbG9yOiBQaWVjZUNvbG9yKTogYm9vbGVhbiB7XG4gIGlmIChpc0luQ2hlY2soc2Vzc2lvbiwgY29sb3IpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAhaGFzQW55TGVnYWxNb3ZlKHNlc3Npb24sIGNvbG9yKTtcbn1cbiJdLCJmaWxlIjoiL3NyYy9ydWxlcy9zdGFsZW1hdGUudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/1f67b058354b3349f9e57ea7dbc1e4abbb9fb928 b/7xOfJqsDU787fe61oSCq1/web/1f67b058354b3349f9e57ea7dbc1e4abbb9fb928 deleted file mode 100644 index e935007..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/1f67b058354b3349f9e57ea7dbc1e4abbb9fb928 +++ /dev/null @@ -1,99 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "Token", { enumerable: true, configurable: true, get(){ try { return Token } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "BetaMemory", { enumerable: true, configurable: true, get(){ try { return BetaMemory } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "BetaMemoryNode", { enumerable: true, configurable: true, get(){ try { return BetaMemory } catch {} }}); -/** - * A single node in the partial-match chain. - * - * A root token has `parent === null` and represents the match produced by the - * left-most condition of a rule. Each subsequent successful join appends a - * child token whose `parent` points at the previous token in the chain, its - * `fact` is the newly-joined fact, and its `bindings` are the merged - * variable bindings after applying the new fact. - * - * Tokens are compared by reference everywhere in the network — two tokens - * constructed from structurally-identical arguments are NOT considered equal. - * This lets the beta memory use `Array#indexOf` for O(n) removal without - * worrying about structural-hash collisions. - */ -class Token { - parent; - fact; - bindings; - constructor( - /** Parent token in the match chain, or `null` for a root token. */ - parent, - /** The fact that extended the match at this level. */ - fact, - /** Accumulated variable bindings up to and including this token. */ - bindings) { - this.parent = parent; - this.fact = fact; - this.bindings = bindings; - } -}; -/** - * Beta-network memory node. - * - * Stores the set of partial matches (tokens) that have reached this point in - * the network and forwards left-activations / left-deactivations to - * downstream subscribers in registration order. - * - * The public `tokens` array is declared `readonly` so external code cannot - * reassign it, but its contents are mutated by the memory itself on - * {@link leftActivate} / {@link leftDeactivate}. Tests rely on positional - * access (`tokens[0]`), so the array is intentionally left indexable rather - * than wrapped in a `Set` or hidden behind a method. - */ -class BetaMemory { - /** Currently-active tokens, in insertion order. */ - tokens = []; - #activateListeners = []; - #deactivateListeners = []; - /** - * Accept a new partial match. - * - * The token is appended to {@link tokens} and all downstream activate - * listeners are invoked synchronously in registration order. Listeners see - * a memory view that already contains the new token. - */ - leftActivate(token) { - this.tokens.push(token); - for (const listener of this.#activateListeners) { - listener(token); - } - } - /** - * Withdraw a partial match. - * - * Removes the token by reference (first occurrence) if present. Always - * fires downstream deactivate listeners, even if the token was not found — - * downstream memories may still hold derived tokens that need to be - * withdrawn, and they perform their own presence checks. - */ - leftDeactivate(token) { - const idx = this.tokens.indexOf(token); - if (idx !== -1) { - this.tokens.splice(idx, 1); - }; - for (const listener of this.#deactivateListeners) { - listener(token); - } - } - /** Subscribe to left-activations. Listeners fire in registration order. */ - addDownstreamActivate(listener) { - this.#activateListeners.push(listener); - } - /** Subscribe to left-deactivations. Listeners fire in registration order. */ - addDownstreamDeactivate(listener) { - this.#deactivateListeners.push(listener); - } -}; -/** - * Alias for {@link BetaMemory} used when the memory is a node in the network - * wiring graph (as distinct from the dummy top-node memory that seeds - * every rule). Kept as a separate export so downstream modules can document - * intent without introducing a structural difference. - */ - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7O0FBMENBOzs7Ozs7Ozs7Ozs7OztBQWNNLE1BQU8sS0FBSztJQUdFO0lBRUE7SUFFQTtJQU5sQjtJQUNFO0lBQ2dCLE1BQW9CO0lBQ3BDO0lBQ2dCLElBQWU7SUFDL0I7SUFDZ0IsUUFBa0I7UUFKbEIsV0FBTSxHQUFOLE1BQU07UUFFTixTQUFJLEdBQUosSUFBSTtRQUVKLGFBQVEsR0FBUixRQUFRO0lBQ3ZCOztBQVFMOzs7Ozs7Ozs7Ozs7O0FBYU0sTUFBTyxVQUFVO0lBQ3JCO0lBQ1MsTUFBTSxHQUFZLEVBQUU7SUFFcEIsa0JBQWtCLEdBQTRCLEVBQUU7SUFDaEQsb0JBQW9CLEdBQThCLEVBQUU7SUFFN0Q7Ozs7Ozs7SUFPQSxZQUFZLENBQUMsS0FBWTtRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdkIsS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDOUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUNqQjtJQUNGO0lBRUE7Ozs7Ozs7O0lBUUEsY0FBYyxDQUFDLEtBQVk7UUFDekIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3RDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1QjtRQUNBLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQ2hELFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDakI7SUFDRjtJQUVBO0lBQ0EscUJBQXFCLENBQUMsUUFBK0I7UUFDbkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDeEM7SUFFQTtJQUNBLHVCQUF1QixDQUFDLFFBQWlDO1FBQ3ZELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzFDOztBQUdGIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyIuLi9zcmMvYmV0YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJldGFNZW1vcnkgYW5kIFRva2VuIOKAlCBwYXJ0aWFsIG1hdGNoIHN0b3JhZ2UgZm9yIHRoZSBSZXRlIGJldGEgbmV0d29yay5cbiAqXG4gKiBQZXIgYHBhY2thZ2VzL3JldGUvU1BFQy5tZCDCp1JldGUgSUkgUmVmZXJlbmNlIFRhcmdldGAgdGhpcyBtb2R1bGUgaW1wbGVtZW50c1xuICogdGhlIEJldGFNZW1vcnkgbm9kZSB0eXBlIGZyb20gdGhlIERvb3JlbmJvcyBiZXRhIG5ldHdvcmsuXG4gKlxuICogQSB7QGxpbmsgVG9rZW59IHJlcHJlc2VudHMgYSBwYXJ0aWFsIG1hdGNoOiBhIGZhY3QgcGx1cyBhIHJlZmVyZW5jZSB0byBhXG4gKiBwYXJlbnQgdG9rZW4sIHNvIHRoZSBmdWxsIGNoYWluIG9mIGZhY3RzIHRoYXQgY29udHJpYnV0ZWQgdG8gdGhlIG1hdGNoIGlzXG4gKiByZWNvdmVyZWQgYnkgd2Fsa2luZyBgLnBhcmVudGAgdG8gbnVsbC4gVGhpcyBtaXJyb3JzIERvb3JlbmJvcyDCpzIuMyBhbmRcbiAqIGtlZXBzIHRva2VuIGNvbnN0cnVjdGlvbiBPKDEpIOKAlCBvbmx5IHRoZSBuZXdseS1qb2luZWQgZmFjdCBhbmQgaXRzIG1lcmdlZFxuICogYmluZGluZ3MgYXJlIGFsbG9jYXRlZCBwZXIgbGV2ZWwsIG5ldmVyIHRoZSBmdWxsIGxpc3QuXG4gKlxuICogQSB7QGxpbmsgQmV0YU1lbW9yeX0gc3RvcmVzIHRoZSBzZXQgb2YgY3VycmVudGx5LWFjdGl2ZSB0b2tlbnMgYW5kXG4gKiBwcm9wYWdhdGVzIGxlZnQtYWN0aXZhdGUgLyBsZWZ0LWRlYWN0aXZhdGUgbm90aWZpY2F0aW9ucyB0byBkb3duc3RyZWFtXG4gKiBzdWJzY3JpYmVycy4gRG93bnN0cmVhbSBub2RlcyBhcmUgZXhwZWN0ZWQgdG8gYmUge0BsaW5rIEpvaW5Ob2RlfXNcbiAqIChpbXBsZW1lbnRlZCBpbiBQMS44KSBvciB7QGxpbmsgUHJvZHVjdGlvbk5vZGV9czsgdGhpcyBtb2R1bGUgZG9lcyBub3RcbiAqIGNvbmNlcm4gaXRzZWxmIHdpdGggam9pbiBzZW1hbnRpY3MuXG4gKi9cbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiLi9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgQXR0cktleSwgRmFjdFZhbHVlIH0gZnJvbSBcIi4vd20uanNcIjtcblxuLyoqXG4gKiBWYXJpYWJsZS1iaW5kaW5nIG1hcCBmb3IgYSB0b2tlbi5cbiAqXG4gKiBLZXlzIGFyZSB0aGUgdmFyaWFibGUgbmFtZXMgZGVjbGFyZWQgaW4gYSBydWxlJ3MgY29uZGl0aW9ucyAoZS5nLiBgXCJocFwiYCxcbiAqIGBcImlkXCJgKTsgdmFsdWVzIGFyZSB0aGUgY29uY3JldGUgZW50aXR5IGlkcyBvciBmYWN0IHZhbHVlcyBib3VuZCB0byB0aG9zZVxuICogdmFyaWFibGVzIGF0IHRoaXMgcG9pbnQgaW4gdGhlIHBhcnRpYWwgbWF0Y2guXG4gKi9cbmV4cG9ydCB0eXBlIEJpbmRpbmdzID0gUmVjb3JkPHN0cmluZywgRW50aXR5SWQgfCBGYWN0VmFsdWU+O1xuXG4vKipcbiAqIFRoZSBmYWN0IHRyaXBsZSB0aGF0IG1vc3QgcmVjZW50bHkgZXh0ZW5kZWQgYSB0b2tlbi5cbiAqXG4gKiBUaGlzIG1pcnJvcnMgdGhlIHNoYXBlIHVzZWQgYnkge0BsaW5rIEFscGhhTWVtb3J5fSBhbmQge0BsaW5rIFdvcmtpbmdNZW1vcnl9XG4gKiDigJQgdGhlIGJldGEgbmV0d29yayBuZXZlciByZS13cmFwcyBmYWN0cywgaXQganVzdCByZWZlcmVuY2VzIHRoZW0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5GYWN0IHtcbiAgcmVhZG9ubHkgaWQ6IEVudGl0eUlkO1xuICByZWFkb25seSBhdHRyOiBBdHRyS2V5O1xuICByZWFkb25seSB2YWx1ZTogRmFjdFZhbHVlO1xufVxuXG4vKipcbiAqIEEgc2luZ2xlIG5vZGUgaW4gdGhlIHBhcnRpYWwtbWF0Y2ggY2hhaW4uXG4gKlxuICogQSByb290IHRva2VuIGhhcyBgcGFyZW50ID09PSBudWxsYCBhbmQgcmVwcmVzZW50cyB0aGUgbWF0Y2ggcHJvZHVjZWQgYnkgdGhlXG4gKiBsZWZ0LW1vc3QgY29uZGl0aW9uIG9mIGEgcnVsZS4gRWFjaCBzdWJzZXF1ZW50IHN1Y2Nlc3NmdWwgam9pbiBhcHBlbmRzIGFcbiAqIGNoaWxkIHRva2VuIHdob3NlIGBwYXJlbnRgIHBvaW50cyBhdCB0aGUgcHJldmlvdXMgdG9rZW4gaW4gdGhlIGNoYWluLCBpdHNcbiAqIGBmYWN0YCBpcyB0aGUgbmV3bHktam9pbmVkIGZhY3QsIGFuZCBpdHMgYGJpbmRpbmdzYCBhcmUgdGhlIG1lcmdlZFxuICogdmFyaWFibGUgYmluZGluZ3MgYWZ0ZXIgYXBwbHlpbmcgdGhlIG5ldyBmYWN0LlxuICpcbiAqIFRva2VucyBhcmUgY29tcGFyZWQgYnkgcmVmZXJlbmNlIGV2ZXJ5d2hlcmUgaW4gdGhlIG5ldHdvcmsg4oCUIHR3byB0b2tlbnNcbiAqIGNvbnN0cnVjdGVkIGZyb20gc3RydWN0dXJhbGx5LWlkZW50aWNhbCBhcmd1bWVudHMgYXJlIE5PVCBjb25zaWRlcmVkIGVxdWFsLlxuICogVGhpcyBsZXRzIHRoZSBiZXRhIG1lbW9yeSB1c2UgYEFycmF5I2luZGV4T2ZgIGZvciBPKG4pIHJlbW92YWwgd2l0aG91dFxuICogd29ycnlpbmcgYWJvdXQgc3RydWN0dXJhbC1oYXNoIGNvbGxpc2lvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUb2tlbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIC8qKiBQYXJlbnQgdG9rZW4gaW4gdGhlIG1hdGNoIGNoYWluLCBvciBgbnVsbGAgZm9yIGEgcm9vdCB0b2tlbi4gKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgcGFyZW50OiBUb2tlbiB8IG51bGwsXG4gICAgLyoqIFRoZSBmYWN0IHRoYXQgZXh0ZW5kZWQgdGhlIG1hdGNoIGF0IHRoaXMgbGV2ZWwuICovXG4gICAgcHVibGljIHJlYWRvbmx5IGZhY3Q6IFRva2VuRmFjdCxcbiAgICAvKiogQWNjdW11bGF0ZWQgdmFyaWFibGUgYmluZGluZ3MgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGlzIHRva2VuLiAqL1xuICAgIHB1YmxpYyByZWFkb25seSBiaW5kaW5nczogQmluZGluZ3MsXG4gICkge31cbn1cblxuLyoqIERvd25zdHJlYW0gc3Vic2NyaWJlciBmaXJlZCBhZnRlciBhIHRva2VuIGVudGVycyBiZXRhIG1lbW9yeS4gKi9cbnR5cGUgVG9rZW5BY3RpdmF0ZUxpc3RlbmVyID0gKHRva2VuOiBUb2tlbikgPT4gdm9pZDtcbi8qKiBEb3duc3RyZWFtIHN1YnNjcmliZXIgZmlyZWQgYWZ0ZXIgYSB0b2tlbiBsZWF2ZXMgYmV0YSBtZW1vcnkuICovXG50eXBlIFRva2VuRGVhY3RpdmF0ZUxpc3RlbmVyID0gKHRva2VuOiBUb2tlbikgPT4gdm9pZDtcblxuLyoqXG4gKiBCZXRhLW5ldHdvcmsgbWVtb3J5IG5vZGUuXG4gKlxuICogU3RvcmVzIHRoZSBzZXQgb2YgcGFydGlhbCBtYXRjaGVzICh0b2tlbnMpIHRoYXQgaGF2ZSByZWFjaGVkIHRoaXMgcG9pbnQgaW5cbiAqIHRoZSBuZXR3b3JrIGFuZCBmb3J3YXJkcyBsZWZ0LWFjdGl2YXRpb25zIC8gbGVmdC1kZWFjdGl2YXRpb25zIHRvXG4gKiBkb3duc3RyZWFtIHN1YnNjcmliZXJzIGluIHJlZ2lzdHJhdGlvbiBvcmRlci5cbiAqXG4gKiBUaGUgcHVibGljIGB0b2tlbnNgIGFycmF5IGlzIGRlY2xhcmVkIGByZWFkb25seWAgc28gZXh0ZXJuYWwgY29kZSBjYW5ub3RcbiAqIHJlYXNzaWduIGl0LCBidXQgaXRzIGNvbnRlbnRzIGFyZSBtdXRhdGVkIGJ5IHRoZSBtZW1vcnkgaXRzZWxmIG9uXG4gKiB7QGxpbmsgbGVmdEFjdGl2YXRlfSAvIHtAbGluayBsZWZ0RGVhY3RpdmF0ZX0uIFRlc3RzIHJlbHkgb24gcG9zaXRpb25hbFxuICogYWNjZXNzIChgdG9rZW5zWzBdYCksIHNvIHRoZSBhcnJheSBpcyBpbnRlbnRpb25hbGx5IGxlZnQgaW5kZXhhYmxlIHJhdGhlclxuICogdGhhbiB3cmFwcGVkIGluIGEgYFNldGAgb3IgaGlkZGVuIGJlaGluZCBhIG1ldGhvZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEJldGFNZW1vcnkge1xuICAvKiogQ3VycmVudGx5LWFjdGl2ZSB0b2tlbnMsIGluIGluc2VydGlvbiBvcmRlci4gKi9cbiAgcmVhZG9ubHkgdG9rZW5zOiBUb2tlbltdID0gW107XG5cbiAgcmVhZG9ubHkgI2FjdGl2YXRlTGlzdGVuZXJzOiBUb2tlbkFjdGl2YXRlTGlzdGVuZXJbXSA9IFtdO1xuICByZWFkb25seSAjZGVhY3RpdmF0ZUxpc3RlbmVyczogVG9rZW5EZWFjdGl2YXRlTGlzdGVuZXJbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBBY2NlcHQgYSBuZXcgcGFydGlhbCBtYXRjaC5cbiAgICpcbiAgICogVGhlIHRva2VuIGlzIGFwcGVuZGVkIHRvIHtAbGluayB0b2tlbnN9IGFuZCBhbGwgZG93bnN0cmVhbSBhY3RpdmF0ZVxuICAgKiBsaXN0ZW5lcnMgYXJlIGludm9rZWQgc3luY2hyb25vdXNseSBpbiByZWdpc3RyYXRpb24gb3JkZXIuIExpc3RlbmVycyBzZWVcbiAgICogYSBtZW1vcnkgdmlldyB0aGF0IGFscmVhZHkgY29udGFpbnMgdGhlIG5ldyB0b2tlbi5cbiAgICovXG4gIGxlZnRBY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICB0aGlzLnRva2Vucy5wdXNoKHRva2VuKTtcbiAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMuI2FjdGl2YXRlTGlzdGVuZXJzKSB7XG4gICAgICBsaXN0ZW5lcih0b2tlbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdpdGhkcmF3IGEgcGFydGlhbCBtYXRjaC5cbiAgICpcbiAgICogUmVtb3ZlcyB0aGUgdG9rZW4gYnkgcmVmZXJlbmNlIChmaXJzdCBvY2N1cnJlbmNlKSBpZiBwcmVzZW50LiBBbHdheXNcbiAgICogZmlyZXMgZG93bnN0cmVhbSBkZWFjdGl2YXRlIGxpc3RlbmVycywgZXZlbiBpZiB0aGUgdG9rZW4gd2FzIG5vdCBmb3VuZCDigJRcbiAgICogZG93bnN0cmVhbSBtZW1vcmllcyBtYXkgc3RpbGwgaG9sZCBkZXJpdmVkIHRva2VucyB0aGF0IG5lZWQgdG8gYmVcbiAgICogd2l0aGRyYXduLCBhbmQgdGhleSBwZXJmb3JtIHRoZWlyIG93biBwcmVzZW5jZSBjaGVja3MuXG4gICAqL1xuICBsZWZ0RGVhY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICBjb25zdCBpZHggPSB0aGlzLnRva2Vucy5pbmRleE9mKHRva2VuKTtcbiAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgdGhpcy50b2tlbnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy4jZGVhY3RpdmF0ZUxpc3RlbmVycykge1xuICAgICAgbGlzdGVuZXIodG9rZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTdWJzY3JpYmUgdG8gbGVmdC1hY3RpdmF0aW9ucy4gTGlzdGVuZXJzIGZpcmUgaW4gcmVnaXN0cmF0aW9uIG9yZGVyLiAqL1xuICBhZGREb3duc3RyZWFtQWN0aXZhdGUobGlzdGVuZXI6IFRva2VuQWN0aXZhdGVMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuI2FjdGl2YXRlTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqIFN1YnNjcmliZSB0byBsZWZ0LWRlYWN0aXZhdGlvbnMuIExpc3RlbmVycyBmaXJlIGluIHJlZ2lzdHJhdGlvbiBvcmRlci4gKi9cbiAgYWRkRG93bnN0cmVhbURlYWN0aXZhdGUobGlzdGVuZXI6IFRva2VuRGVhY3RpdmF0ZUxpc3RlbmVyKTogdm9pZCB7XG4gICAgdGhpcy4jZGVhY3RpdmF0ZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxufVxuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgQmV0YU1lbW9yeX0gdXNlZCB3aGVuIHRoZSBtZW1vcnkgaXMgYSBub2RlIGluIHRoZSBuZXR3b3JrXG4gKiB3aXJpbmcgZ3JhcGggKGFzIGRpc3RpbmN0IGZyb20gdGhlIGR1bW15IHRvcC1ub2RlIG1lbW9yeSB0aGF0IHNlZWRzXG4gKiBldmVyeSBydWxlKS4gS2VwdCBhcyBhIHNlcGFyYXRlIGV4cG9ydCBzbyBkb3duc3RyZWFtIG1vZHVsZXMgY2FuIGRvY3VtZW50XG4gKiBpbnRlbnQgd2l0aG91dCBpbnRyb2R1Y2luZyBhIHN0cnVjdHVyYWwgZGlmZmVyZW5jZS5cbiAqL1xuZXhwb3J0IHsgQmV0YU1lbW9yeSBhcyBCZXRhTWVtb3J5Tm9kZSB9O1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvZGlzdC9iZXRhLmpzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/1fcaf8706a95797cce038e8d2c1fdc3bbb19faa5 b/7xOfJqsDU787fe61oSCq1/web/1fcaf8706a95797cce038e8d2c1fdc3bbb19faa5 deleted file mode 100644 index e6e532f..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/1fcaf8706a95797cce038e8d2c1fdc3bbb19faa5 +++ /dev/null @@ -1,18 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "getLegalKnightMoves", { enumerable: true, configurable: true, get(){ try { return getLegalKnightMoves } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/rules/primitives.ts", {"importedNames":["knightCandidates"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/rules/board-queries.ts", {"importedNames":["getPiecePosition","getPieceColor","isAllyAt","isPieceAt"]}); -function getLegalKnightMoves(session, pieceId) { - const from = (0,__vite_ssr_import_1__.getPiecePosition)(session, pieceId); - const color = (0,__vite_ssr_import_1__.getPieceColor)(session, pieceId); - if (from === null || color === null) return []; - const moves = []; - for (const to of (0,__vite_ssr_import_0__.knightCandidates)(from)) { - if ((0,__vite_ssr_import_1__.isAllyAt)(session, to, color)) continue; - const isCapture = (0,__vite_ssr_import_1__.isPieceAt)(session, to); - moves.push({ pieceId, from, to, isCapture }); - }; - return moves; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQVVBO0FBRUE7QUFHTyxTQUFTLG9CQUFvQixTQUFrQixTQUFnQztBQUNwRixRQUFNLFVBQU8sd0NBQWlCLFNBQVMsT0FBTztBQUM5QyxRQUFNLFdBQVEscUNBQWMsU0FBUyxPQUFPO0FBQzVDLE1BQUksU0FBUyxRQUFRLFVBQVUsS0FBTSxRQUFPLENBQUM7QUFFN0MsUUFBTSxRQUFxQixDQUFDO0FBQzVCLGFBQVcsU0FBTSx3Q0FBaUIsSUFBSSxHQUFHO0FBQ3ZDLFdBQUksZ0NBQVMsU0FBUyxJQUFJLEtBQUssRUFBRztBQUNsQyxVQUFNLGVBQVksaUNBQVUsU0FBUyxFQUFFO0FBQ3ZDLFVBQU0sS0FBSyxFQUFFLFNBQVMsTUFBTSxJQUFJLFVBQVUsQ0FBQztBQUFBLEVBQzdDO0FBQ0EsU0FBTztBQUNUIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJrbmlnaHQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBLbmlnaHQgbW92ZW1lbnQgcnVsZXMgZm9yIEBwYXJhdHlwZS9jaGVzcy5cbiAqXG4gKiBLbmlnaHRzIGxlYXAg4oCUIHRoZXkgZG8gTk9UIGNoZWNrIGZvciBpbnRlcnZlbmluZyBwaWVjZXMgb24gdGhlIHBhdGhcbiAqIGJldHdlZW4gYGZyb21gIGFuZCBgdG9gLiBPbmx5IHRoZSB0YXJnZXQgc3F1YXJlIG1hdHRlcnM6XG4gKiAgIC0gZW1wdHkg4oaSIGxlZ2FsIHF1aWV0IG1vdmVcbiAqICAgLSBlbmVteSDihpIgbGVnYWwgY2FwdHVyZVxuICogICAtIGFsbHkgIOKGkiBpbGxlZ2FsXG4gKi9cbmltcG9ydCB0eXBlIHsgU2Vzc2lvbiwgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB7IGtuaWdodENhbmRpZGF0ZXMgfSBmcm9tIFwiLi9wcmltaXRpdmVzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IExlZ2FsTW92ZSB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBnZXRQaWVjZVBvc2l0aW9uLCBnZXRQaWVjZUNvbG9yLCBpc0FsbHlBdCwgaXNQaWVjZUF0IH0gZnJvbSBcIi4vYm9hcmQtcXVlcmllcy5qc1wiO1xuXG4vKiogR2V0IGFsbCBsZWdhbCBrbmlnaHQgbW92ZXMgKGxlYXBzIOKAlCBubyBwYXRoIG9ic3RydWN0aW9uIGNoZWNrKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMZWdhbEtuaWdodE1vdmVzKHNlc3Npb246IFNlc3Npb24sIHBpZWNlSWQ6IEVudGl0eUlkKTogTGVnYWxNb3ZlW10ge1xuICBjb25zdCBmcm9tID0gZ2V0UGllY2VQb3NpdGlvbihzZXNzaW9uLCBwaWVjZUlkKTtcbiAgY29uc3QgY29sb3IgPSBnZXRQaWVjZUNvbG9yKHNlc3Npb24sIHBpZWNlSWQpO1xuICBpZiAoZnJvbSA9PT0gbnVsbCB8fCBjb2xvciA9PT0gbnVsbCkgcmV0dXJuIFtdO1xuXG4gIGNvbnN0IG1vdmVzOiBMZWdhbE1vdmVbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHRvIG9mIGtuaWdodENhbmRpZGF0ZXMoZnJvbSkpIHtcbiAgICBpZiAoaXNBbGx5QXQoc2Vzc2lvbiwgdG8sIGNvbG9yKSkgY29udGludWU7XG4gICAgY29uc3QgaXNDYXB0dXJlID0gaXNQaWVjZUF0KHNlc3Npb24sIHRvKTtcbiAgICBtb3Zlcy5wdXNoKHsgcGllY2VJZCwgZnJvbSwgdG8sIGlzQ2FwdHVyZSB9KTtcbiAgfVxuICByZXR1cm4gbW92ZXM7XG59XG4iXSwiZmlsZSI6Ii9zcmMvcnVsZXMva25pZ2h0LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/2007ff265d248740b3ed27e9b2a3df9c404511d2 b/7xOfJqsDU787fe61oSCq1/web/2007ff265d248740b3ed27e9b2a3df9c404511d2 deleted file mode 100644 index 9df1d6d..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/2007ff265d248740b3ed27e9b2a3df9c404511d2 +++ /dev/null @@ -1,86 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/modifiers/registry.ts", {"importedNames":["MODIFIER_REGISTRY"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/schema.ts", {"importedNames":["CaptureFlag"]}); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/modifiers/descriptors/capture-flags.ts"); -const __vite_ssr_import_5__ = await __vite_ssr_import__("/src/modifiers/descriptors/capture-flags.ts", {"importedNames":["CAPTURE_FLAGS_DESCRIPTOR","hasCaptureFlag"]}); -(0,__vite_ssr_import_0__.describe)("capture-flags descriptor — registry", () => { - (0,__vite_ssr_import_0__.it)("registers in MODIFIER_REGISTRY under key 'capture-flags'", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.MODIFIER_REGISTRY.has("capture-flags")).toBe(true); - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.MODIFIER_REGISTRY.get("capture-flags")).toBe((0,__vite_ssr_import_5__.CAPTURE_FLAGS_DESCRIPTOR)); - }); -}); -(0,__vite_ssr_import_0__.describe)("capture-flags descriptor — apply()", () => { - (0,__vite_ssr_import_0__.it)("seeds CaptureFlags fact on piece entity in session", () => { - const session = new __vite_ssr_import_1__.Session(); - const pieceId = session.nextId(); - session.insert(pieceId, "PieceType", "pawn"); - __vite_ssr_import_5__.CAPTURE_FLAGS_DESCRIPTOR.apply(session, pieceId, __vite_ssr_import_3__.CaptureFlag.CANNOT_BE_CAPTURED); - (0,__vite_ssr_import_0__.expect)(session.contains(pieceId, "CaptureFlags")).toBe(true); - (0,__vite_ssr_import_0__.expect)(session.get(pieceId, "CaptureFlags")).toBe(__vite_ssr_import_3__.CaptureFlag.CANNOT_BE_CAPTURED); - }); -}); -(0,__vite_ssr_import_0__.describe)("capture-flags descriptor — describe()", () => { - (0,__vite_ssr_import_0__.it)("returns 'no flags' for 0", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_5__.CAPTURE_FLAGS_DESCRIPTOR.describe(0)).toBe("no flags"); - }); - (0,__vite_ssr_import_0__.it)("describes combined CAN_CAPTURE_OWN | CANNOT_BE_CAPTURED flags", () => { - const combined = __vite_ssr_import_3__.CaptureFlag.CAN_CAPTURE_OWN | __vite_ssr_import_3__.CaptureFlag.CANNOT_BE_CAPTURED; - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_5__.CAPTURE_FLAGS_DESCRIPTOR.describe(combined)).toBe("can-capture-own, cannot-be-captured"); - }); - (0,__vite_ssr_import_0__.it)("describes all three flags", () => { - const allFlags = __vite_ssr_import_3__.CaptureFlag.CAN_CAPTURE_OWN | __vite_ssr_import_3__.CaptureFlag.CANNOT_BE_CAPTURED | __vite_ssr_import_3__.CaptureFlag.EN_PASSANT; - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_5__.CAPTURE_FLAGS_DESCRIPTOR.describe(allFlags)).toBe( - "can-capture-own, cannot-be-captured, en-passant" - ); - }); - (0,__vite_ssr_import_0__.it)("describes a single flag", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_5__.CAPTURE_FLAGS_DESCRIPTOR.describe(__vite_ssr_import_3__.CaptureFlag.EN_PASSANT)).toBe("en-passant"); - }); -}); -(0,__vite_ssr_import_0__.describe)("capture-flags descriptor — hasCaptureFlag()", () => { - (0,__vite_ssr_import_0__.it)("returns true when the flag is set", () => { - const session = new __vite_ssr_import_1__.Session(); - const pieceId = session.nextId(); - __vite_ssr_import_5__.CAPTURE_FLAGS_DESCRIPTOR.apply( - session, - pieceId, - __vite_ssr_import_3__.CaptureFlag.CAN_CAPTURE_OWN | __vite_ssr_import_3__.CaptureFlag.CANNOT_BE_CAPTURED - ); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_5__.hasCaptureFlag)(session, pieceId, __vite_ssr_import_3__.CaptureFlag.CANNOT_BE_CAPTURED)).toBe(true); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_5__.hasCaptureFlag)(session, pieceId, __vite_ssr_import_3__.CaptureFlag.CAN_CAPTURE_OWN)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("returns false when the flag is not set", () => { - const session = new __vite_ssr_import_1__.Session(); - const pieceId = session.nextId(); - __vite_ssr_import_5__.CAPTURE_FLAGS_DESCRIPTOR.apply(session, pieceId, __vite_ssr_import_3__.CaptureFlag.CAN_CAPTURE_OWN); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_5__.hasCaptureFlag)(session, pieceId, __vite_ssr_import_3__.CaptureFlag.EN_PASSANT)).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("returns false when CaptureFlags fact is absent", () => { - const session = new __vite_ssr_import_1__.Session(); - const pieceId = session.nextId(); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_5__.hasCaptureFlag)(session, pieceId, __vite_ssr_import_3__.CaptureFlag.CANNOT_BE_CAPTURED)).toBe(false); - }); -}); -(0,__vite_ssr_import_0__.describe)("capture-flags descriptor — valueSchema", () => { - const schema = __vite_ssr_import_5__.CAPTURE_FLAGS_DESCRIPTOR.valueSchema; - (0,__vite_ssr_import_0__.it)("accepts 0 (no flags)", () => { - (0,__vite_ssr_import_0__.expect)(() => schema.parse(0)).not.toThrow(); - }); - (0,__vite_ssr_import_0__.it)("accepts MAX_FLAGS (all flags OR'd together = 7)", () => { - const maxFlags = __vite_ssr_import_3__.CaptureFlag.CAN_CAPTURE_OWN | __vite_ssr_import_3__.CaptureFlag.CANNOT_BE_CAPTURED | __vite_ssr_import_3__.CaptureFlag.EN_PASSANT; - (0,__vite_ssr_import_0__.expect)(() => schema.parse(maxFlags)).not.toThrow(); - }); - (0,__vite_ssr_import_0__.it)("rejects -1 (below min)", () => { - (0,__vite_ssr_import_0__.expect)(() => schema.parse(-1)).toThrow(); - }); - (0,__vite_ssr_import_0__.it)("rejects 8 (above MAX_FLAGS = 7)", () => { - (0,__vite_ssr_import_0__.expect)(() => schema.parse(8)).toThrow(); - }); - (0,__vite_ssr_import_0__.it)("rejects non-integer values", () => { - (0,__vite_ssr_import_0__.expect)(() => schema.parse(1.5)).toThrow(); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFJLFFBQVE7QUFBQSxFQUM1QyxDQUFDO0FBRUQsK0JBQUcsbURBQW1ELE1BQU07QUFDMUQsVUFBTSxXQUFXLGtDQUFZLGtCQUFrQixrQ0FBWSxxQkFBcUIsa0NBQVk7QUFDNUYscUNBQU8sTUFBTSxPQUFPLE1BQU0sUUFBUSxDQUFDLEVBQUUsSUFBSSxRQUFRO0FBQUEsRUFDbkQsQ0FBQztBQUVELCtCQUFHLDBCQUEwQixNQUFNO0FBQ2pDLHFDQUFPLE1BQU0sT0FBTyxNQUFNLEVBQUUsQ0FBQyxFQUFFLFFBQVE7QUFBQSxFQUN6QyxDQUFDO0FBRUQsK0JBQUcsbUNBQW1DLE1BQU07QUFDMUMscUNBQU8sTUFBTSxPQUFPLE1BQU0sQ0FBQyxDQUFDLEVBQUUsUUFBUTtBQUFBLEVBQ3hDLENBQUM7QUFFRCwrQkFBRyw4QkFBOEIsTUFBTTtBQUNyQyxxQ0FBTyxNQUFNLE9BQU8sTUFBTSxHQUFHLENBQUMsRUFBRSxRQUFRO0FBQUEsRUFDMUMsQ0FBQztBQUNILENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImNhcHR1cmUtZmxhZ3MudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgaXQsIGV4cGVjdCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB7IFNlc3Npb24gfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB7IE1PRElGSUVSX1JFR0lTVFJZIH0gZnJvbSBcIi4uL3JlZ2lzdHJ5LmpzXCI7XG5pbXBvcnQgeyBDYXB0dXJlRmxhZyB9IGZyb20gXCIuLi8uLi9zY2hlbWEuanNcIjtcbmltcG9ydCBcIi4vY2FwdHVyZS1mbGFncy5qc1wiO1xuaW1wb3J0IHsgQ0FQVFVSRV9GTEFHU19ERVNDUklQVE9SLCBoYXNDYXB0dXJlRmxhZyB9IGZyb20gXCIuL2NhcHR1cmUtZmxhZ3MuanNcIjtcblxuZGVzY3JpYmUoXCJjYXB0dXJlLWZsYWdzIGRlc2NyaXB0b3Ig4oCUIHJlZ2lzdHJ5XCIsICgpID0+IHtcbiAgaXQoXCJyZWdpc3RlcnMgaW4gTU9ESUZJRVJfUkVHSVNUUlkgdW5kZXIga2V5ICdjYXB0dXJlLWZsYWdzJ1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KE1PRElGSUVSX1JFR0lTVFJZLmhhcyhcImNhcHR1cmUtZmxhZ3NcIikpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KE1PRElGSUVSX1JFR0lTVFJZLmdldChcImNhcHR1cmUtZmxhZ3NcIikpLnRvQmUoQ0FQVFVSRV9GTEFHU19ERVNDUklQVE9SKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJjYXB0dXJlLWZsYWdzIGRlc2NyaXB0b3Ig4oCUIGFwcGx5KClcIiwgKCkgPT4ge1xuICBpdChcInNlZWRzIENhcHR1cmVGbGFncyBmYWN0IG9uIHBpZWNlIGVudGl0eSBpbiBzZXNzaW9uXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oKTtcbiAgICBjb25zdCBwaWVjZUlkID0gc2Vzc2lvbi5uZXh0SWQoKTtcbiAgICBzZXNzaW9uLmluc2VydChwaWVjZUlkLCBcIlBpZWNlVHlwZVwiLCBcInBhd25cIik7XG5cbiAgICBDQVBUVVJFX0ZMQUdTX0RFU0NSSVBUT1IuYXBwbHkoc2Vzc2lvbiwgcGllY2VJZCwgQ2FwdHVyZUZsYWcuQ0FOTk9UX0JFX0NBUFRVUkVEKTtcblxuICAgIGV4cGVjdChzZXNzaW9uLmNvbnRhaW5zKHBpZWNlSWQsIFwiQ2FwdHVyZUZsYWdzXCIpKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChzZXNzaW9uLmdldChwaWVjZUlkLCBcIkNhcHR1cmVGbGFnc1wiKSkudG9CZShDYXB0dXJlRmxhZy5DQU5OT1RfQkVfQ0FQVFVSRUQpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImNhcHR1cmUtZmxhZ3MgZGVzY3JpcHRvciDigJQgZGVzY3JpYmUoKVwiLCAoKSA9PiB7XG4gIGl0KFwicmV0dXJucyAnbm8gZmxhZ3MnIGZvciAwXCIsICgpID0+IHtcbiAgICBleHBlY3QoQ0FQVFVSRV9GTEFHU19ERVNDUklQVE9SLmRlc2NyaWJlKDApKS50b0JlKFwibm8gZmxhZ3NcIik7XG4gIH0pO1xuXG4gIGl0KFwiZGVzY3JpYmVzIGNvbWJpbmVkIENBTl9DQVBUVVJFX09XTiB8IENBTk5PVF9CRV9DQVBUVVJFRCBmbGFnc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgY29tYmluZWQgPSBDYXB0dXJlRmxhZy5DQU5fQ0FQVFVSRV9PV04gfCBDYXB0dXJlRmxhZy5DQU5OT1RfQkVfQ0FQVFVSRUQ7XG4gICAgZXhwZWN0KENBUFRVUkVfRkxBR1NfREVTQ1JJUFRPUi5kZXNjcmliZShjb21iaW5lZCkpLnRvQmUoXCJjYW4tY2FwdHVyZS1vd24sIGNhbm5vdC1iZS1jYXB0dXJlZFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJkZXNjcmliZXMgYWxsIHRocmVlIGZsYWdzXCIsICgpID0+IHtcbiAgICBjb25zdCBhbGxGbGFncyA9IENhcHR1cmVGbGFnLkNBTl9DQVBUVVJFX09XTiB8IENhcHR1cmVGbGFnLkNBTk5PVF9CRV9DQVBUVVJFRCB8IENhcHR1cmVGbGFnLkVOX1BBU1NBTlQ7XG4gICAgZXhwZWN0KENBUFRVUkVfRkxBR1NfREVTQ1JJUFRPUi5kZXNjcmliZShhbGxGbGFncykpLnRvQmUoXG4gICAgICBcImNhbi1jYXB0dXJlLW93biwgY2Fubm90LWJlLWNhcHR1cmVkLCBlbi1wYXNzYW50XCIsXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJkZXNjcmliZXMgYSBzaW5nbGUgZmxhZ1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KENBUFRVUkVfRkxBR1NfREVTQ1JJUFRPUi5kZXNjcmliZShDYXB0dXJlRmxhZy5FTl9QQVNTQU5UKSkudG9CZShcImVuLXBhc3NhbnRcIik7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiY2FwdHVyZS1mbGFncyBkZXNjcmlwdG9yIOKAlCBoYXNDYXB0dXJlRmxhZygpXCIsICgpID0+IHtcbiAgaXQoXCJyZXR1cm5zIHRydWUgd2hlbiB0aGUgZmxhZyBpcyBzZXRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbigpO1xuICAgIGNvbnN0IHBpZWNlSWQgPSBzZXNzaW9uLm5leHRJZCgpO1xuICAgIENBUFRVUkVfRkxBR1NfREVTQ1JJUFRPUi5hcHBseShcbiAgICAgIHNlc3Npb24sXG4gICAgICBwaWVjZUlkLFxuICAgICAgQ2FwdHVyZUZsYWcuQ0FOX0NBUFRVUkVfT1dOIHwgQ2FwdHVyZUZsYWcuQ0FOTk9UX0JFX0NBUFRVUkVELFxuICAgICk7XG5cbiAgICBleHBlY3QoaGFzQ2FwdHVyZUZsYWcoc2Vzc2lvbiwgcGllY2VJZCwgQ2FwdHVyZUZsYWcuQ0FOTk9UX0JFX0NBUFRVUkVEKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QoaGFzQ2FwdHVyZUZsYWcoc2Vzc2lvbiwgcGllY2VJZCwgQ2FwdHVyZUZsYWcuQ0FOX0NBUFRVUkVfT1dOKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIGZhbHNlIHdoZW4gdGhlIGZsYWcgaXMgbm90IHNldFwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKCk7XG4gICAgY29uc3QgcGllY2VJZCA9IHNlc3Npb24ubmV4dElkKCk7XG4gICAgQ0FQVFVSRV9GTEFHU19ERVNDUklQVE9SLmFwcGx5KHNlc3Npb24sIHBpZWNlSWQsIENhcHR1cmVGbGFnLkNBTl9DQVBUVVJFX09XTik7XG5cbiAgICBleHBlY3QoaGFzQ2FwdHVyZUZsYWcoc2Vzc2lvbiwgcGllY2VJZCwgQ2FwdHVyZUZsYWcuRU5fUEFTU0FOVCkpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcInJldHVybnMgZmFsc2Ugd2hlbiBDYXB0dXJlRmxhZ3MgZmFjdCBpcyBhYnNlbnRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbigpO1xuICAgIGNvbnN0IHBpZWNlSWQgPSBzZXNzaW9uLm5leHRJZCgpO1xuXG4gICAgZXhwZWN0KGhhc0NhcHR1cmVGbGFnKHNlc3Npb24sIHBpZWNlSWQsIENhcHR1cmVGbGFnLkNBTk5PVF9CRV9DQVBUVVJFRCkpLnRvQmUoZmFsc2UpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImNhcHR1cmUtZmxhZ3MgZGVzY3JpcHRvciDigJQgdmFsdWVTY2hlbWFcIiwgKCkgPT4ge1xuICBjb25zdCBzY2hlbWEgPSBDQVBUVVJFX0ZMQUdTX0RFU0NSSVBUT1IudmFsdWVTY2hlbWE7XG5cbiAgaXQoXCJhY2NlcHRzIDAgKG5vIGZsYWdzKVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IHNjaGVtYS5wYXJzZSgwKSkubm90LnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgaXQoXCJhY2NlcHRzIE1BWF9GTEFHUyAoYWxsIGZsYWdzIE9SJ2QgdG9nZXRoZXIgPSA3KVwiLCAoKSA9PiB7XG4gICAgY29uc3QgbWF4RmxhZ3MgPSBDYXB0dXJlRmxhZy5DQU5fQ0FQVFVSRV9PV04gfCBDYXB0dXJlRmxhZy5DQU5OT1RfQkVfQ0FQVFVSRUQgfCBDYXB0dXJlRmxhZy5FTl9QQVNTQU5UO1xuICAgIGV4cGVjdCgoKSA9PiBzY2hlbWEucGFyc2UobWF4RmxhZ3MpKS5ub3QudG9UaHJvdygpO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgLTEgKGJlbG93IG1pbilcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBzY2hlbWEucGFyc2UoLTEpKS50b1Rocm93KCk7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyA4IChhYm92ZSBNQVhfRkxBR1MgPSA3KVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IHNjaGVtYS5wYXJzZSg4KSkudG9UaHJvdygpO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgbm9uLWludGVnZXIgdmFsdWVzXCIsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gc2NoZW1hLnBhcnNlKDEuNSkpLnRvVGhyb3coKTtcbiAgfSk7XG59KTtcbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9jaGVzcy9zcmMvbW9kaWZpZXJzL2Rlc2NyaXB0b3JzL2NhcHR1cmUtZmxhZ3MudGVzdC50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/213c66f629aabaf99f1a9a79b69beab2c806a16a b/7xOfJqsDU787fe61oSCq1/web/213c66f629aabaf99f1a9a79b69beab2c806a16a deleted file mode 100644 index 248d8f1..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/213c66f629aabaf99f1a9a79b69beab2c806a16a +++ /dev/null @@ -1,32 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "LAYOUT_REGISTRY", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_7__.LAYOUT_REGISTRY } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "CLASSIC_LAYOUT", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_8__.CLASSIC_LAYOUT } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "EMPTY_LAYOUT", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_9__.EMPTY_LAYOUT } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "DUNSANY_LAYOUT", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_10__.DUNSANY_LAYOUT } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "MONSTER_LAYOUT", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_11__.MONSTER_LAYOUT } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "PAWNS_ONLY_LAYOUT", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_12__.PAWNS_ONLY_LAYOUT } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "HORDE_LAYOUT", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_13__.HORDE_LAYOUT } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "KNIGHTMATE_LAYOUT", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_14__.KNIGHTMATE_LAYOUT } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "CHESS960_SHIM", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_15__.CHESS960_SHIM } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "buildChess960Layout", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_15__.buildChess960Layout } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "toFen", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_16__.toFen } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "fromFen", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_16__.fromFen } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/layouts/classic.ts"); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/layouts/dunsany.ts"); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/layouts/monster.ts"); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/layouts/pawns-only.ts"); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/layouts/horde.ts"); -const __vite_ssr_import_5__ = await __vite_ssr_import__("/src/layouts/knightmate.ts"); -const __vite_ssr_import_6__ = await __vite_ssr_import__("/src/layouts/chess960.ts"); -const __vite_ssr_import_7__ = await __vite_ssr_import__("/src/layouts/registry.ts", {"importedNames":["LAYOUT_REGISTRY"]}); -const __vite_ssr_import_8__ = await __vite_ssr_import__("/src/layouts/classic.ts", {"importedNames":["CLASSIC_LAYOUT"]}); -const __vite_ssr_import_9__ = await __vite_ssr_import__("/src/layouts/empty.ts", {"importedNames":["EMPTY_LAYOUT"]}); -const __vite_ssr_import_10__ = await __vite_ssr_import__("/src/layouts/dunsany.ts", {"importedNames":["DUNSANY_LAYOUT"]}); -const __vite_ssr_import_11__ = await __vite_ssr_import__("/src/layouts/monster.ts", {"importedNames":["MONSTER_LAYOUT"]}); -const __vite_ssr_import_12__ = await __vite_ssr_import__("/src/layouts/pawns-only.ts", {"importedNames":["PAWNS_ONLY_LAYOUT"]}); -const __vite_ssr_import_13__ = await __vite_ssr_import__("/src/layouts/horde.ts", {"importedNames":["HORDE_LAYOUT"]}); -const __vite_ssr_import_14__ = await __vite_ssr_import__("/src/layouts/knightmate.ts", {"importedNames":["KNIGHTMATE_LAYOUT"]}); -const __vite_ssr_import_15__ = await __vite_ssr_import__("/src/layouts/chess960.ts", {"importedNames":["CHESS960_SHIM","buildChess960Layout"]}); -const __vite_ssr_import_16__ = await __vite_ssr_import__("/src/layouts/fen.ts", {"importedNames":["toFen","fromFen"]}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3RhcnRpbmcgTGF5b3V0cyBiYXJyZWwgKyByZWdpc3RyYXRpb24gc2lkZS1lZmZlY3RzLlxuICpcbiAqIEltcG9ydGluZyB0aGlzIG1vZHVsZSBndWFyYW50ZWVzIGV2ZXJ5IHByZW1hZGUgbGF5b3V0IGhhcyBiZWVuXG4gKiByZWdpc3RlcmVkIGluIGBMQVlPVVRfUkVHSVNUUllgLiBDb25zdW1lcnMgKGVuZ2luZSwgbG9iYnksXG4gKiBzZXJ2ZXIpIHNob3VsZCBpbXBvcnQgYC4vaW5kZXguanNgIHJhdGhlciB0aGFuIHRoZSByZWdpc3RyeVxuICogZGlyZWN0bHkgc28gdGhlIHNpZGUtZWZmZWN0IGltcG9ydHMgZmlyZSBpbiBhIGtub3duIG9yZGVyLlxuICpcbiAqIFJlZ2lzdHJhdGlvbiBvcmRlciBkZXRlcm1pbmVzIHRoZSBvcmRlciBsYXlvdXRzIGFwcGVhciBpbiB0aGVcbiAqIExheW91dFBpY2tlciBkcm9wZG93bi4gXCJDbGFzc2ljXCIgaXMgZmlyc3Qgc28gdGhlIGRlZmF1bHRcbiAqIHNlbGVjdGlvbiBzaG93cyBhdCB0aGUgdG9wOyBcIkVtcHR5XCIgaXMgbGFzdCBzbyB0aGUgc2FuZGJveFxuICogb3B0aW9uIHNpdHMgYXQgdGhlIGJvdHRvbS5cbiAqL1xuXG4vLyBDb3JlIGxheW91dHMg4oCUIGFsd2F5cyByZWdpc3RlcmVkLlxuLy8gVGhlIG9yZGVyIGhlcmUgZGV0ZXJtaW5lcyBMYXlvdXRQaWNrZXIgZHJvcGRvd24gb3JkZXIuXG5pbXBvcnQgXCIuL2NsYXNzaWMuanNcIjtcbmltcG9ydCBcIi4vZHVuc2FueS5qc1wiO1xuaW1wb3J0IFwiLi9tb25zdGVyLmpzXCI7XG5pbXBvcnQgXCIuL3Bhd25zLW9ubHkuanNcIjtcbmltcG9ydCBcIi4vaG9yZGUuanNcIjtcbmltcG9ydCBcIi4va25pZ2h0bWF0ZS5qc1wiO1xuaW1wb3J0IFwiLi9jaGVzczk2MC5qc1wiO1xuXG5leHBvcnQgeyBMQVlPVVRfUkVHSVNUUlkgfSBmcm9tIFwiLi9yZWdpc3RyeS5qc1wiO1xuZXhwb3J0IHsgQ0xBU1NJQ19MQVlPVVQgfSBmcm9tIFwiLi9jbGFzc2ljLmpzXCI7XG4vLyBFTVBUWV9MQVlPVVQgaXMgTk9UIGF1dG8tcmVnaXN0ZXJlZCDigJQgaXQncyBhbiBpbnRlcm5hbCB0ZXN0XG4vLyBmaXh0dXJlIChzZWUgbGF5b3V0cy9lbXB0eS50cykuIEV4cG9ydGVkIGhlcmUgc28gdGVzdHMgY2FuXG4vLyBjb25zdHJ1Y3QgYW4gZW5naW5lIGFyb3VuZCBpdC5cbmV4cG9ydCB7IEVNUFRZX0xBWU9VVCB9IGZyb20gXCIuL2VtcHR5LmpzXCI7XG5leHBvcnQgeyBEVU5TQU5ZX0xBWU9VVCB9IGZyb20gXCIuL2R1bnNhbnkuanNcIjtcbmV4cG9ydCB7IE1PTlNURVJfTEFZT1VUIH0gZnJvbSBcIi4vbW9uc3Rlci5qc1wiO1xuZXhwb3J0IHsgUEFXTlNfT05MWV9MQVlPVVQgfSBmcm9tIFwiLi9wYXducy1vbmx5LmpzXCI7XG5leHBvcnQgeyBIT1JERV9MQVlPVVQgfSBmcm9tIFwiLi9ob3JkZS5qc1wiO1xuZXhwb3J0IHsgS05JR0hUTUFURV9MQVlPVVQgfSBmcm9tIFwiLi9rbmlnaHRtYXRlLmpzXCI7XG5leHBvcnQgeyBDSEVTUzk2MF9TSElNLCBidWlsZENoZXNzOTYwTGF5b3V0IH0gZnJvbSBcIi4vY2hlc3M5NjAuanNcIjtcbmV4cG9ydCB7IHRvRmVuLCBmcm9tRmVuIH0gZnJvbSBcIi4vZmVuLmpzXCI7XG5leHBvcnQgdHlwZSB7XG4gIFBpZWNlUGxhY2VtZW50LFxuICBTdGFydGluZ0xheW91dCxcbiAgTGF5b3V0VmFsaWRhdGlvblJlc3VsdCxcbn0gZnJvbSBcIi4vdHlwZXMuanNcIjtcbiJdLCJmaWxlIjoiL3NyYy9sYXlvdXRzL2luZGV4LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/24537bf340b088fcdf47c578f3a3786e9380e89f b/7xOfJqsDU787fe61oSCq1/web/24537bf340b088fcdf47c578f3a3786e9380e89f deleted file mode 100644 index 2c8cbc1..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/24537bf340b088fcdf47c578f3a3786e9380e89f +++ /dev/null @@ -1,231 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/zod@4.3.6/node_modules/zod/index.js", {"importedNames":["z"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/modifiers/schema.ts", {"importedNames":["TypeModifierSchema","InstanceModifierSchema","ModifierProfileSchema","parseModifierProfile","serializeModifierProfile"]}); - - - - - - -const VALID_PROFILE = { - id: "profile-001", - name: "Knight Buff", - description: "Gives all white knights +2 HP", - layoutId: "classic", - perType: [ - { kind: "hp-bonus", pieceType: "knight", color: "white", value: 2 }, - { kind: "range-bonus", pieceType: "rook", color: "both", value: 1 } - ], - perInstance: [ - { kind: "hp-bonus", square: "b1", value: 5 } - ], - version: 1, - source: "premade" -}; -const VALID_PROFILE_NO_LAYOUT = { - id: "profile-002", - name: "Custom Pawns", - description: "Custom pawn modifiers", - perType: [], - perInstance: [], - version: 1, - source: "custom" -}; -(0,__vite_ssr_import_0__.describe)("TypeModifierSchema", () => { - (0,__vite_ssr_import_0__.it)("parses a valid hp-bonus TypeModifier", () => { - const result = __vite_ssr_import_2__.TypeModifierSchema.parse({ - kind: "hp-bonus", - pieceType: "knight", - color: "white", - value: 3 - }); - (0,__vite_ssr_import_0__.expect)(result.kind).toBe("hp-bonus"); - (0,__vite_ssr_import_0__.expect)(result.value).toBe(3); - }); - (0,__vite_ssr_import_0__.it)("parses direction-additions with 'both' color", () => { - const result = __vite_ssr_import_2__.TypeModifierSchema.parse({ - kind: "direction-additions", - pieceType: "pawn", - color: "both", - value: ["forward", "backward"] - }); - (0,__vite_ssr_import_0__.expect)(result.color).toBe("both"); - }); - (0,__vite_ssr_import_0__.it)("parses capture-flags TypeModifier", () => { - const result = __vite_ssr_import_2__.TypeModifierSchema.parse({ - kind: "capture-flags", - pieceType: "queen", - color: "black", - value: 3 - }); - (0,__vite_ssr_import_0__.expect)(result.kind).toBe("capture-flags"); - }); - (0,__vite_ssr_import_0__.it)("rejects unknown modifier kind", () => { - (0,__vite_ssr_import_0__.expect)( - () => __vite_ssr_import_2__.TypeModifierSchema.parse({ - kind: "nonexistent", - pieceType: "knight", - color: "white", - value: 1 - }) - ).toThrow(__vite_ssr_import_1__.z.ZodError); - }); - (0,__vite_ssr_import_0__.it)("rejects unknown piece type", () => { - (0,__vite_ssr_import_0__.expect)( - () => __vite_ssr_import_2__.TypeModifierSchema.parse({ - kind: "hp-bonus", - pieceType: "dragon", - color: "white", - value: 1 - }) - ).toThrow(__vite_ssr_import_1__.z.ZodError); - }); -}); -(0,__vite_ssr_import_0__.describe)("InstanceModifierSchema", () => { - (0,__vite_ssr_import_0__.it)("parses a valid instance modifier with square 'b1'", () => { - const result = __vite_ssr_import_2__.InstanceModifierSchema.parse({ - kind: "hp-bonus", - square: "b1", - value: 5 - }); - (0,__vite_ssr_import_0__.expect)(result.square).toBe("b1"); - }); - (0,__vite_ssr_import_0__.it)("parses a valid instance modifier at 'h8'", () => { - const result = __vite_ssr_import_2__.InstanceModifierSchema.parse({ - kind: "range-bonus", - square: "h8", - value: 2 - }); - (0,__vite_ssr_import_0__.expect)(result.square).toBe("h8"); - }); - (0,__vite_ssr_import_0__.it)("rejects invalid square 'z9'", () => { - (0,__vite_ssr_import_0__.expect)( - () => __vite_ssr_import_2__.InstanceModifierSchema.parse({ - kind: "hp-bonus", - square: "z9", - value: 1 - }) - ).toThrow(__vite_ssr_import_1__.z.ZodError); - }); - (0,__vite_ssr_import_0__.it)("rejects invalid square 'a9' (rank out of range)", () => { - (0,__vite_ssr_import_0__.expect)( - () => __vite_ssr_import_2__.InstanceModifierSchema.parse({ - kind: "hp-bonus", - square: "a9", - value: 1 - }) - ).toThrow(__vite_ssr_import_1__.z.ZodError); - }); - (0,__vite_ssr_import_0__.it)("rejects invalid square 'i1' (file out of range)", () => { - (0,__vite_ssr_import_0__.expect)( - () => __vite_ssr_import_2__.InstanceModifierSchema.parse({ - kind: "hp-bonus", - square: "i1", - value: 1 - }) - ).toThrow(__vite_ssr_import_1__.z.ZodError); - }); -}); -(0,__vite_ssr_import_0__.describe)("ModifierProfileSchema — valid", () => { - (0,__vite_ssr_import_0__.it)("parses a full valid profile", () => { - const result = __vite_ssr_import_2__.ModifierProfileSchema.parse(VALID_PROFILE); - (0,__vite_ssr_import_0__.expect)(result.id).toBe("profile-001"); - (0,__vite_ssr_import_0__.expect)(result.version).toBe(1); - (0,__vite_ssr_import_0__.expect)(result.source).toBe("premade"); - (0,__vite_ssr_import_0__.expect)(result.perType).toHaveLength(2); - (0,__vite_ssr_import_0__.expect)(result.perInstance).toHaveLength(1); - }); - (0,__vite_ssr_import_0__.it)("parses a profile without layoutId (optional field)", () => { - const result = __vite_ssr_import_2__.ModifierProfileSchema.parse(VALID_PROFILE_NO_LAYOUT); - (0,__vite_ssr_import_0__.expect)(result.layoutId).toBeUndefined(); - }); - (0,__vite_ssr_import_0__.it)("parses a profile with empty perType and perInstance arrays", () => { - const result = __vite_ssr_import_2__.ModifierProfileSchema.parse({ - id: "empty-profile", - name: "Empty", - description: "", - perType: [], - perInstance: [], - version: 1, - source: "custom" - }); - (0,__vite_ssr_import_0__.expect)(result.perType).toHaveLength(0); - (0,__vite_ssr_import_0__.expect)(result.perInstance).toHaveLength(0); - }); -}); -(0,__vite_ssr_import_0__.describe)("ModifierProfileSchema — invalid", () => { - (0,__vite_ssr_import_0__.it)("rejects profile with version=2", () => { - (0,__vite_ssr_import_0__.expect)( - () => __vite_ssr_import_2__.ModifierProfileSchema.parse({ ...VALID_PROFILE, version: 2 }) - ).toThrow(__vite_ssr_import_1__.z.ZodError); - }); - (0,__vite_ssr_import_0__.it)("rejects profile with missing 'name' field", () => { - const { name: _name, ...rest } = VALID_PROFILE; - (0,__vite_ssr_import_0__.expect)(() => __vite_ssr_import_2__.ModifierProfileSchema.parse(rest)).toThrow(__vite_ssr_import_1__.z.ZodError); - }); - (0,__vite_ssr_import_0__.it)("rejects profile with source='admin'", () => { - (0,__vite_ssr_import_0__.expect)( - () => __vite_ssr_import_2__.ModifierProfileSchema.parse({ ...VALID_PROFILE, source: "admin" }) - ).toThrow(__vite_ssr_import_1__.z.ZodError); - }); - (0,__vite_ssr_import_0__.it)("rejects profile with empty id string", () => { - (0,__vite_ssr_import_0__.expect)( - () => __vite_ssr_import_2__.ModifierProfileSchema.parse({ ...VALID_PROFILE, id: "" }) - ).toThrow(__vite_ssr_import_1__.z.ZodError); - }); - (0,__vite_ssr_import_0__.it)("rejects profile with invalid perInstance square", () => { - (0,__vite_ssr_import_0__.expect)( - () => __vite_ssr_import_2__.ModifierProfileSchema.parse({ - ...VALID_PROFILE, - perInstance: [{ kind: "hp-bonus", square: "z9", value: 1 }] - }) - ).toThrow(__vite_ssr_import_1__.z.ZodError); - }); -}); -(0,__vite_ssr_import_0__.describe)("parseModifierProfile", () => { - (0,__vite_ssr_import_0__.it)("returns a typed ModifierProfile for valid input", () => { - const result = (0,__vite_ssr_import_2__.parseModifierProfile)(VALID_PROFILE); - (0,__vite_ssr_import_0__.expect)(result.id).toBe("profile-001"); - }); - (0,__vite_ssr_import_0__.it)("throws ZodError for invalid input", () => { - (0,__vite_ssr_import_0__.expect)(() => (0,__vite_ssr_import_2__.parseModifierProfile)({ invalid: true })).toThrow(__vite_ssr_import_1__.z.ZodError); - }); -}); -(0,__vite_ssr_import_0__.describe)("roundtrip", () => { - (0,__vite_ssr_import_0__.it)("full profile roundtrips through JSON.parse(JSON.stringify(...))", () => { - const serialized = JSON.parse(JSON.stringify(VALID_PROFILE)); - const result = (0,__vite_ssr_import_2__.parseModifierProfile)(serialized); - (0,__vite_ssr_import_0__.expect)(result).toEqual(VALID_PROFILE); - }); - (0,__vite_ssr_import_0__.it)("profile without layoutId roundtrips losslessly", () => { - const serialized = JSON.parse(JSON.stringify(VALID_PROFILE_NO_LAYOUT)); - const result = (0,__vite_ssr_import_2__.parseModifierProfile)(serialized); - (0,__vite_ssr_import_0__.expect)(result).toEqual(VALID_PROFILE_NO_LAYOUT); - }); - (0,__vite_ssr_import_0__.it)("serializeModifierProfile output can be re-parsed", () => { - const serialized = (0,__vite_ssr_import_2__.serializeModifierProfile)(VALID_PROFILE); - const reparsed = (0,__vite_ssr_import_2__.parseModifierProfile)(JSON.parse(JSON.stringify(serialized))); - (0,__vite_ssr_import_0__.expect)(reparsed).toEqual(VALID_PROFILE); - }); - (0,__vite_ssr_import_0__.it)("profile with complex value types roundtrips", () => { - const profile = { - id: "complex-001", - name: "Complex Profile", - description: "Has various value types", - perType: [ - { kind: "direction-additions", pieceType: "pawn", color: "white", value: ["forward", "diagonal-fl"] }, - { kind: "promotion-override", pieceType: "pawn", color: "black", value: "queen" } - ], - perInstance: [ - { kind: "capture-flags", square: "e4", value: 3 } - ], - version: 1, - source: "custom" - }; - const result = (0,__vite_ssr_import_2__.parseModifierProfile)(JSON.parse(JSON.stringify(profile))); - (0,__vite_ssr_import_0__.expect)(result).toEqual(profile); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBRUQsK0JBQUcsK0NBQStDLE1BQU07QUFDdEQsVUFBTSxVQUEyQjtBQUFBLE1BQy9CLElBQUk7QUFBQSxNQUNKLE1BQU07QUFBQSxNQUNOLGFBQWE7QUFBQSxNQUNiLFNBQVM7QUFBQSxRQUNQLEVBQUUsTUFBTSx1QkFBdUIsV0FBVyxRQUFRLE9BQU8sU0FBUyxPQUFPLENBQUMsV0FBVyxhQUFhLEVBQUU7QUFBQSxRQUNwRyxFQUFFLE1BQU0sc0JBQXNCLFdBQVcsUUFBUSxPQUFPLFNBQVMsT0FBTyxRQUFRO0FBQUEsTUFDbEY7QUFBQSxNQUNBLGFBQWE7QUFBQSxRQUNYLEVBQUUsTUFBTSxpQkFBaUIsUUFBUSxNQUFNLE9BQU8sRUFBRTtBQUFBLE1BQ2xEO0FBQUEsTUFDQSxTQUFTO0FBQUEsTUFDVCxRQUFRO0FBQUEsSUFDVjtBQUNBLFVBQU0sWUFBUyw0Q0FBcUIsS0FBSyxNQUFNLEtBQUssVUFBVSxPQUFPLENBQUMsQ0FBQztBQUN2RSxxQ0FBTyxNQUFNLEVBQUUsUUFBUSxPQUFPO0FBQUEsRUFDaEMsQ0FBQztBQUNILENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInNjaGVtYS50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBpdCwgZXhwZWN0IH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7XG4gIFR5cGVNb2RpZmllclNjaGVtYSxcbiAgSW5zdGFuY2VNb2RpZmllclNjaGVtYSxcbiAgTW9kaWZpZXJQcm9maWxlU2NoZW1hLFxuICBwYXJzZU1vZGlmaWVyUHJvZmlsZSxcbiAgc2VyaWFsaXplTW9kaWZpZXJQcm9maWxlLFxufSBmcm9tIFwiLi9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgTW9kaWZpZXJQcm9maWxlIH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGaXh0dXJlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IFZBTElEX1BST0ZJTEU6IE1vZGlmaWVyUHJvZmlsZSA9IHtcbiAgaWQ6IFwicHJvZmlsZS0wMDFcIixcbiAgbmFtZTogXCJLbmlnaHQgQnVmZlwiLFxuICBkZXNjcmlwdGlvbjogXCJHaXZlcyBhbGwgd2hpdGUga25pZ2h0cyArMiBIUFwiLFxuICBsYXlvdXRJZDogXCJjbGFzc2ljXCIsXG4gIHBlclR5cGU6IFtcbiAgICB7IGtpbmQ6IFwiaHAtYm9udXNcIiwgcGllY2VUeXBlOiBcImtuaWdodFwiLCBjb2xvcjogXCJ3aGl0ZVwiLCB2YWx1ZTogMiB9LFxuICAgIHsga2luZDogXCJyYW5nZS1ib251c1wiLCBwaWVjZVR5cGU6IFwicm9va1wiLCBjb2xvcjogXCJib3RoXCIsIHZhbHVlOiAxIH0sXG4gIF0sXG4gIHBlckluc3RhbmNlOiBbXG4gICAgeyBraW5kOiBcImhwLWJvbnVzXCIsIHNxdWFyZTogXCJiMVwiLCB2YWx1ZTogNSB9LFxuICBdLFxuICB2ZXJzaW9uOiAxLFxuICBzb3VyY2U6IFwicHJlbWFkZVwiLFxufTtcblxuY29uc3QgVkFMSURfUFJPRklMRV9OT19MQVlPVVQ6IE1vZGlmaWVyUHJvZmlsZSA9IHtcbiAgaWQ6IFwicHJvZmlsZS0wMDJcIixcbiAgbmFtZTogXCJDdXN0b20gUGF3bnNcIixcbiAgZGVzY3JpcHRpb246IFwiQ3VzdG9tIHBhd24gbW9kaWZpZXJzXCIsXG4gIHBlclR5cGU6IFtdLFxuICBwZXJJbnN0YW5jZTogW10sXG4gIHZlcnNpb246IDEsXG4gIHNvdXJjZTogXCJjdXN0b21cIixcbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVHlwZU1vZGlmaWVyU2NoZW1hXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZGVzY3JpYmUoXCJUeXBlTW9kaWZpZXJTY2hlbWFcIiwgKCkgPT4ge1xuICBpdChcInBhcnNlcyBhIHZhbGlkIGhwLWJvbnVzIFR5cGVNb2RpZmllclwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gVHlwZU1vZGlmaWVyU2NoZW1hLnBhcnNlKHtcbiAgICAgIGtpbmQ6IFwiaHAtYm9udXNcIixcbiAgICAgIHBpZWNlVHlwZTogXCJrbmlnaHRcIixcbiAgICAgIGNvbG9yOiBcIndoaXRlXCIsXG4gICAgICB2YWx1ZTogMyxcbiAgICB9KTtcbiAgICBleHBlY3QocmVzdWx0LmtpbmQpLnRvQmUoXCJocC1ib251c1wiKTtcbiAgICBleHBlY3QocmVzdWx0LnZhbHVlKS50b0JlKDMpO1xuICB9KTtcblxuICBpdChcInBhcnNlcyBkaXJlY3Rpb24tYWRkaXRpb25zIHdpdGggJ2JvdGgnIGNvbG9yXCIsICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBUeXBlTW9kaWZpZXJTY2hlbWEucGFyc2Uoe1xuICAgICAga2luZDogXCJkaXJlY3Rpb24tYWRkaXRpb25zXCIsXG4gICAgICBwaWVjZVR5cGU6IFwicGF3blwiLFxuICAgICAgY29sb3I6IFwiYm90aFwiLFxuICAgICAgdmFsdWU6IFtcImZvcndhcmRcIiwgXCJiYWNrd2FyZFwiXSxcbiAgICB9KTtcbiAgICBleHBlY3QocmVzdWx0LmNvbG9yKS50b0JlKFwiYm90aFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJwYXJzZXMgY2FwdHVyZS1mbGFncyBUeXBlTW9kaWZpZXJcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFR5cGVNb2RpZmllclNjaGVtYS5wYXJzZSh7XG4gICAgICBraW5kOiBcImNhcHR1cmUtZmxhZ3NcIixcbiAgICAgIHBpZWNlVHlwZTogXCJxdWVlblwiLFxuICAgICAgY29sb3I6IFwiYmxhY2tcIixcbiAgICAgIHZhbHVlOiAzLFxuICAgIH0pO1xuICAgIGV4cGVjdChyZXN1bHQua2luZCkudG9CZShcImNhcHR1cmUtZmxhZ3NcIik7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyB1bmtub3duIG1vZGlmaWVyIGtpbmRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgVHlwZU1vZGlmaWVyU2NoZW1hLnBhcnNlKHtcbiAgICAgICAga2luZDogXCJub25leGlzdGVudFwiLFxuICAgICAgICBwaWVjZVR5cGU6IFwia25pZ2h0XCIsXG4gICAgICAgIGNvbG9yOiBcIndoaXRlXCIsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgfSlcbiAgICApLnRvVGhyb3coei5ab2RFcnJvcik7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyB1bmtub3duIHBpZWNlIHR5cGVcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgVHlwZU1vZGlmaWVyU2NoZW1hLnBhcnNlKHtcbiAgICAgICAga2luZDogXCJocC1ib251c1wiLFxuICAgICAgICBwaWVjZVR5cGU6IFwiZHJhZ29uXCIsXG4gICAgICAgIGNvbG9yOiBcIndoaXRlXCIsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgfSlcbiAgICApLnRvVGhyb3coei5ab2RFcnJvcik7XG4gIH0pO1xufSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSW5zdGFuY2VNb2RpZmllclNjaGVtYVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmRlc2NyaWJlKFwiSW5zdGFuY2VNb2RpZmllclNjaGVtYVwiLCAoKSA9PiB7XG4gIGl0KFwicGFyc2VzIGEgdmFsaWQgaW5zdGFuY2UgbW9kaWZpZXIgd2l0aCBzcXVhcmUgJ2IxJ1wiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gSW5zdGFuY2VNb2RpZmllclNjaGVtYS5wYXJzZSh7XG4gICAgICBraW5kOiBcImhwLWJvbnVzXCIsXG4gICAgICBzcXVhcmU6IFwiYjFcIixcbiAgICAgIHZhbHVlOiA1LFxuICAgIH0pO1xuICAgIGV4cGVjdChyZXN1bHQuc3F1YXJlKS50b0JlKFwiYjFcIik7XG4gIH0pO1xuXG4gIGl0KFwicGFyc2VzIGEgdmFsaWQgaW5zdGFuY2UgbW9kaWZpZXIgYXQgJ2g4J1wiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gSW5zdGFuY2VNb2RpZmllclNjaGVtYS5wYXJzZSh7XG4gICAgICBraW5kOiBcInJhbmdlLWJvbnVzXCIsXG4gICAgICBzcXVhcmU6IFwiaDhcIixcbiAgICAgIHZhbHVlOiAyLFxuICAgIH0pO1xuICAgIGV4cGVjdChyZXN1bHQuc3F1YXJlKS50b0JlKFwiaDhcIik7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyBpbnZhbGlkIHNxdWFyZSAnejknXCIsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT5cbiAgICAgIEluc3RhbmNlTW9kaWZpZXJTY2hlbWEucGFyc2Uoe1xuICAgICAgICBraW5kOiBcImhwLWJvbnVzXCIsXG4gICAgICAgIHNxdWFyZTogXCJ6OVwiLFxuICAgICAgICB2YWx1ZTogMSxcbiAgICAgIH0pXG4gICAgKS50b1Rocm93KHouWm9kRXJyb3IpO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgaW52YWxpZCBzcXVhcmUgJ2E5JyAocmFuayBvdXQgb2YgcmFuZ2UpXCIsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT5cbiAgICAgIEluc3RhbmNlTW9kaWZpZXJTY2hlbWEucGFyc2Uoe1xuICAgICAgICBraW5kOiBcImhwLWJvbnVzXCIsXG4gICAgICAgIHNxdWFyZTogXCJhOVwiLFxuICAgICAgICB2YWx1ZTogMSxcbiAgICAgIH0pXG4gICAgKS50b1Rocm93KHouWm9kRXJyb3IpO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgaW52YWxpZCBzcXVhcmUgJ2kxJyAoZmlsZSBvdXQgb2YgcmFuZ2UpXCIsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT5cbiAgICAgIEluc3RhbmNlTW9kaWZpZXJTY2hlbWEucGFyc2Uoe1xuICAgICAgICBraW5kOiBcImhwLWJvbnVzXCIsXG4gICAgICAgIHNxdWFyZTogXCJpMVwiLFxuICAgICAgICB2YWx1ZTogMSxcbiAgICAgIH0pXG4gICAgKS50b1Rocm93KHouWm9kRXJyb3IpO1xuICB9KTtcbn0pO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1vZGlmaWVyUHJvZmlsZVNjaGVtYSDigJQgdmFsaWQgY2FzZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5kZXNjcmliZShcIk1vZGlmaWVyUHJvZmlsZVNjaGVtYSDigJQgdmFsaWRcIiwgKCkgPT4ge1xuICBpdChcInBhcnNlcyBhIGZ1bGwgdmFsaWQgcHJvZmlsZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gTW9kaWZpZXJQcm9maWxlU2NoZW1hLnBhcnNlKFZBTElEX1BST0ZJTEUpO1xuICAgIGV4cGVjdChyZXN1bHQuaWQpLnRvQmUoXCJwcm9maWxlLTAwMVwiKTtcbiAgICBleHBlY3QocmVzdWx0LnZlcnNpb24pLnRvQmUoMSk7XG4gICAgZXhwZWN0KHJlc3VsdC5zb3VyY2UpLnRvQmUoXCJwcmVtYWRlXCIpO1xuICAgIGV4cGVjdChyZXN1bHQucGVyVHlwZSkudG9IYXZlTGVuZ3RoKDIpO1xuICAgIGV4cGVjdChyZXN1bHQucGVySW5zdGFuY2UpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgfSk7XG5cbiAgaXQoXCJwYXJzZXMgYSBwcm9maWxlIHdpdGhvdXQgbGF5b3V0SWQgKG9wdGlvbmFsIGZpZWxkKVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gTW9kaWZpZXJQcm9maWxlU2NoZW1hLnBhcnNlKFZBTElEX1BST0ZJTEVfTk9fTEFZT1VUKTtcbiAgICBleHBlY3QocmVzdWx0LmxheW91dElkKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xuXG4gIGl0KFwicGFyc2VzIGEgcHJvZmlsZSB3aXRoIGVtcHR5IHBlclR5cGUgYW5kIHBlckluc3RhbmNlIGFycmF5c1wiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gTW9kaWZpZXJQcm9maWxlU2NoZW1hLnBhcnNlKHtcbiAgICAgIGlkOiBcImVtcHR5LXByb2ZpbGVcIixcbiAgICAgIG5hbWU6IFwiRW1wdHlcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxuICAgICAgcGVyVHlwZTogW10sXG4gICAgICBwZXJJbnN0YW5jZTogW10sXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgc291cmNlOiBcImN1c3RvbVwiLFxuICAgIH0pO1xuICAgIGV4cGVjdChyZXN1bHQucGVyVHlwZSkudG9IYXZlTGVuZ3RoKDApO1xuICAgIGV4cGVjdChyZXN1bHQucGVySW5zdGFuY2UpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG59KTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBNb2RpZmllclByb2ZpbGVTY2hlbWEg4oCUIGludmFsaWQgY2FzZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5kZXNjcmliZShcIk1vZGlmaWVyUHJvZmlsZVNjaGVtYSDigJQgaW52YWxpZFwiLCAoKSA9PiB7XG4gIGl0KFwicmVqZWN0cyBwcm9maWxlIHdpdGggdmVyc2lvbj0yXCIsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT5cbiAgICAgIE1vZGlmaWVyUHJvZmlsZVNjaGVtYS5wYXJzZSh7IC4uLlZBTElEX1BST0ZJTEUsIHZlcnNpb246IDIgfSlcbiAgICApLnRvVGhyb3coei5ab2RFcnJvcik7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyBwcm9maWxlIHdpdGggbWlzc2luZyAnbmFtZScgZmllbGRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgbmFtZTogX25hbWUsIC4uLnJlc3QgfSA9IFZBTElEX1BST0ZJTEU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZXhwZWN0KCgpID0+IE1vZGlmaWVyUHJvZmlsZVNjaGVtYS5wYXJzZShyZXN0KSkudG9UaHJvdyh6LlpvZEVycm9yKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzIHByb2ZpbGUgd2l0aCBzb3VyY2U9J2FkbWluJ1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+XG4gICAgICBNb2RpZmllclByb2ZpbGVTY2hlbWEucGFyc2UoeyAuLi5WQUxJRF9QUk9GSUxFLCBzb3VyY2U6IFwiYWRtaW5cIiB9KVxuICAgICkudG9UaHJvdyh6LlpvZEVycm9yKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzIHByb2ZpbGUgd2l0aCBlbXB0eSBpZCBzdHJpbmdcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgTW9kaWZpZXJQcm9maWxlU2NoZW1hLnBhcnNlKHsgLi4uVkFMSURfUFJPRklMRSwgaWQ6IFwiXCIgfSlcbiAgICApLnRvVGhyb3coei5ab2RFcnJvcik7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyBwcm9maWxlIHdpdGggaW52YWxpZCBwZXJJbnN0YW5jZSBzcXVhcmVcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgTW9kaWZpZXJQcm9maWxlU2NoZW1hLnBhcnNlKHtcbiAgICAgICAgLi4uVkFMSURfUFJPRklMRSxcbiAgICAgICAgcGVySW5zdGFuY2U6IFt7IGtpbmQ6IFwiaHAtYm9udXNcIiwgc3F1YXJlOiBcIno5XCIsIHZhbHVlOiAxIH1dLFxuICAgICAgfSlcbiAgICApLnRvVGhyb3coei5ab2RFcnJvcik7XG4gIH0pO1xufSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gcGFyc2VNb2RpZmllclByb2ZpbGUgLyBzZXJpYWxpemVNb2RpZmllclByb2ZpbGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5kZXNjcmliZShcInBhcnNlTW9kaWZpZXJQcm9maWxlXCIsICgpID0+IHtcbiAgaXQoXCJyZXR1cm5zIGEgdHlwZWQgTW9kaWZpZXJQcm9maWxlIGZvciB2YWxpZCBpbnB1dFwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gcGFyc2VNb2RpZmllclByb2ZpbGUoVkFMSURfUFJPRklMRSk7XG4gICAgZXhwZWN0KHJlc3VsdC5pZCkudG9CZShcInByb2ZpbGUtMDAxXCIpO1xuICB9KTtcblxuICBpdChcInRocm93cyBab2RFcnJvciBmb3IgaW52YWxpZCBpbnB1dFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IHBhcnNlTW9kaWZpZXJQcm9maWxlKHsgaW52YWxpZDogdHJ1ZSB9KSkudG9UaHJvdyh6LlpvZEVycm9yKTtcbiAgfSk7XG59KTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSb3VuZHRyaXAgdGVzdHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5kZXNjcmliZShcInJvdW5kdHJpcFwiLCAoKSA9PiB7XG4gIGl0KFwiZnVsbCBwcm9maWxlIHJvdW5kdHJpcHMgdGhyb3VnaCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KC4uLikpXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXJpYWxpemVkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShWQUxJRF9QUk9GSUxFKSk7XG4gICAgY29uc3QgcmVzdWx0ID0gcGFyc2VNb2RpZmllclByb2ZpbGUoc2VyaWFsaXplZCk7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChWQUxJRF9QUk9GSUxFKTtcbiAgfSk7XG5cbiAgaXQoXCJwcm9maWxlIHdpdGhvdXQgbGF5b3V0SWQgcm91bmR0cmlwcyBsb3NzbGVzc2x5XCIsICgpID0+IHtcbiAgICBjb25zdCBzZXJpYWxpemVkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShWQUxJRF9QUk9GSUxFX05PX0xBWU9VVCkpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlTW9kaWZpZXJQcm9maWxlKHNlcmlhbGl6ZWQpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoVkFMSURfUFJPRklMRV9OT19MQVlPVVQpO1xuICB9KTtcblxuICBpdChcInNlcmlhbGl6ZU1vZGlmaWVyUHJvZmlsZSBvdXRwdXQgY2FuIGJlIHJlLXBhcnNlZFwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZU1vZGlmaWVyUHJvZmlsZShWQUxJRF9QUk9GSUxFKTtcbiAgICBjb25zdCByZXBhcnNlZCA9IHBhcnNlTW9kaWZpZXJQcm9maWxlKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZCkpKTtcbiAgICBleHBlY3QocmVwYXJzZWQpLnRvRXF1YWwoVkFMSURfUFJPRklMRSk7XG4gIH0pO1xuXG4gIGl0KFwicHJvZmlsZSB3aXRoIGNvbXBsZXggdmFsdWUgdHlwZXMgcm91bmR0cmlwc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgcHJvZmlsZTogTW9kaWZpZXJQcm9maWxlID0ge1xuICAgICAgaWQ6IFwiY29tcGxleC0wMDFcIixcbiAgICAgIG5hbWU6IFwiQ29tcGxleCBQcm9maWxlXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJIYXMgdmFyaW91cyB2YWx1ZSB0eXBlc1wiLFxuICAgICAgcGVyVHlwZTogW1xuICAgICAgICB7IGtpbmQ6IFwiZGlyZWN0aW9uLWFkZGl0aW9uc1wiLCBwaWVjZVR5cGU6IFwicGF3blwiLCBjb2xvcjogXCJ3aGl0ZVwiLCB2YWx1ZTogW1wiZm9yd2FyZFwiLCBcImRpYWdvbmFsLWZsXCJdIH0sXG4gICAgICAgIHsga2luZDogXCJwcm9tb3Rpb24tb3ZlcnJpZGVcIiwgcGllY2VUeXBlOiBcInBhd25cIiwgY29sb3I6IFwiYmxhY2tcIiwgdmFsdWU6IFwicXVlZW5cIiB9LFxuICAgICAgXSxcbiAgICAgIHBlckluc3RhbmNlOiBbXG4gICAgICAgIHsga2luZDogXCJjYXB0dXJlLWZsYWdzXCIsIHNxdWFyZTogXCJlNFwiLCB2YWx1ZTogMyB9LFxuICAgICAgXSxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgICBzb3VyY2U6IFwiY3VzdG9tXCIsXG4gICAgfTtcbiAgICBjb25zdCByZXN1bHQgPSBwYXJzZU1vZGlmaWVyUHJvZmlsZShKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHByb2ZpbGUpKSk7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChwcm9maWxlKTtcbiAgfSk7XG59KTtcbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9jaGVzcy9zcmMvbW9kaWZpZXJzL3NjaGVtYS50ZXN0LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/253f0b3eee530ac4b1075b53dfcb3c5ede308968 b/7xOfJqsDU787fe61oSCq1/web/253f0b3eee530ac4b1075b53dfcb3c5ede308968 deleted file mode 100644 index 52c71e9..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/253f0b3eee530ac4b1075b53dfcb3c5ede308968 +++ /dev/null @@ -1,118 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "RULE_SCHEMA_V1", { enumerable: true, configurable: true, get(){ try { return RULE_SCHEMA_V1 } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "serialize", { enumerable: true, configurable: true, get(){ try { return serialize } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "deserialize", { enumerable: true, configurable: true, get(){ try { return deserialize } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/zod@3.25.76/node_modules/zod/index.js", {"importedNames":["z"]});const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/registry.js", {"importedNames":["HandlerRegistry"]});const __vite_ssr_import_2__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/builder.js", {"importedNames":["v"]});/** - * JSON serialization for RuleDefinitions. - * - * Per SPEC.md §JSON Rule Schema — handler-registry pattern, no eval, no - * function-to-string conversion, no arbitrary JavaScript embedded in JSON. - * All executable behaviour is referenced by name and resolved against a - * {@link HandlerRegistry} at deserialisation time. - * - * v1 schema (RULE_SCHEMA_V1) covers ordinary positive (alpha) conditions. - * Phase 2 node types (negation, existential, ncc, aggregation) and filter - * predicates are intentionally omitted from v1 and will be added in a - * future schema version without back-compat to v0. - */ - - - -/** - * Zod schema for a single serialized condition. - * - * - `id`: either a literal entity id (number — EntityId's brand exists only in - * the type system) or `null` for wildcard. - * - `attr`: the attribute key string. - * - `binding`: the variable name to bind the value to, or `null` if no binding. - * - `idBinding`: optional variable name to bind the entity id to. - */ -const ConditionSchema = __vite_ssr_import_0__.z.object({ - id: __vite_ssr_import_0__.z.union([__vite_ssr_import_0__.z.number(), __vite_ssr_import_0__.z.null()]), - attr: __vite_ssr_import_0__.z.string(), - binding: __vite_ssr_import_0__.z.string().nullable(), - idBinding: __vite_ssr_import_0__.z.string().optional(), -}); -/** - * Zod schema for the full serialized rule — v1. - * - * Exported for external validation pipelines (e.g. network ingestion before - * deserialisation, admin tooling) per SPEC.md §JSON Rule Schema. - */ -const RULE_SCHEMA_V1 = __vite_ssr_import_0__.z.object({ - name: __vite_ssr_import_0__.z.string().min(1), - salience: __vite_ssr_import_0__.z.number().default(0), - conditions: __vite_ssr_import_0__.z.array(ConditionSchema).default([]), - handler: __vite_ssr_import_0__.z.string().min(1), - handlerArgs: __vite_ssr_import_0__.z.array(__vite_ssr_import_0__.z.unknown()).optional(), -}); -/** - * Serialize a RuleDefinition to a plain, JSON-compatible object. - * - * The result contains only strings, numbers, booleans, null, arrays, and - * plain objects — no function references. Passing the return value to - * `JSON.stringify` is guaranteed safe and lossless for the v1 schema. - */ -function serialize(rule) { - const conditions = (rule.conditions ?? []).map((c) => { - const base = { - id: c.id, - attr: c.attr, - binding: c.binding?.name ?? null, - }; - // Under exactOptionalPropertyTypes, only include idBinding when defined. - return c.idBinding !== undefined - ? { ...base, idBinding: c.idBinding.name } - : base; - }); - const out = { - name: rule.name, - salience: rule.salience ?? 0, - conditions, - handler: rule.handler, - }; - if (rule.handlerArgs !== undefined) { - out.handlerArgs = [...rule.handlerArgs]; - }; - return out; -}; -/** - * Deserialize a JSON object back into a RuleDefinition. - * - * Validates the input against {@link RULE_SCHEMA_V1} and then resolves the - * handler name against `registry`. Throws: - * - `z.ZodError` on malformed input (missing fields, wrong types). - * - `UnknownHandlerError` when `handler` is not registered. - * - * The resulting RuleDefinition is structurally identical to one produced by - * {@link defineRule} — round-tripping via `serialize(deserialize(x))` yields a - * value byte-identical to the original JSON under `JSON.stringify`. - */ -function deserialize(json, registry) { - const parsed = RULE_SCHEMA_V1.parse(json); - // Registry resolution — per SPEC.md §JSON Rule Schema, handler names MUST - // resolve or we throw UnknownHandlerError. - registry.verify([parsed.handler]); - const conditions = parsed.conditions.map((c) => { - const base = { - id: c.id, - attr: c.attr, - binding: c.binding !== null ? (0,__vite_ssr_import_2__.v)(c.binding) : null, - }; - return c.idBinding !== undefined - ? { ...base, idBinding: (0,__vite_ssr_import_2__.v)(c.idBinding) } - : base; - }); - const out = { - name: parsed.name, - salience: parsed.salience, - conditions, - handler: parsed.handler, - }; - if (parsed.handlerArgs !== undefined) { - return { ...out, handlerArgs: parsed.handlerArgs }; - }; - return out; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUssSUFBSSxDQUFDLENBQUMsSUFBQyx3QkFBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtTQUNsRDtRQUNELE9BQU8sQ0FBQyxDQUFDLFNBQVMsS0FBSztZQUNyQixDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxTQUFTLEtBQUUsd0JBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxJQUFJO0lBQ1YsQ0FBQyxDQUFDO0lBRUYsTUFBTSxHQUFHLEdBQW1CO1FBQzFCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtRQUNqQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7UUFDekIsVUFBVTtRQUNWLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztLQUN4QjtJQUNELElBQUksTUFBTSxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUU7UUFDcEMsT0FBTyxFQUFFLEdBQUcsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBaUMsRUFBRTtJQUMxRTtJQUNBLE9BQU8sR0FBRztBQUNaIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyIuLi9zcmMvc2VyaWFsaXplLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSlNPTiBzZXJpYWxpemF0aW9uIGZvciBSdWxlRGVmaW5pdGlvbnMuXG4gKlxuICogUGVyIFNQRUMubWQgwqdKU09OIFJ1bGUgU2NoZW1hIOKAlCBoYW5kbGVyLXJlZ2lzdHJ5IHBhdHRlcm4sIG5vIGV2YWwsIG5vXG4gKiBmdW5jdGlvbi10by1zdHJpbmcgY29udmVyc2lvbiwgbm8gYXJiaXRyYXJ5IEphdmFTY3JpcHQgZW1iZWRkZWQgaW4gSlNPTi5cbiAqIEFsbCBleGVjdXRhYmxlIGJlaGF2aW91ciBpcyByZWZlcmVuY2VkIGJ5IG5hbWUgYW5kIHJlc29sdmVkIGFnYWluc3QgYVxuICoge0BsaW5rIEhhbmRsZXJSZWdpc3RyeX0gYXQgZGVzZXJpYWxpc2F0aW9uIHRpbWUuXG4gKlxuICogdjEgc2NoZW1hIChSVUxFX1NDSEVNQV9WMSkgY292ZXJzIG9yZGluYXJ5IHBvc2l0aXZlIChhbHBoYSkgY29uZGl0aW9ucy5cbiAqIFBoYXNlIDIgbm9kZSB0eXBlcyAobmVnYXRpb24sIGV4aXN0ZW50aWFsLCBuY2MsIGFnZ3JlZ2F0aW9uKSBhbmQgZmlsdGVyXG4gKiBwcmVkaWNhdGVzIGFyZSBpbnRlbnRpb25hbGx5IG9taXR0ZWQgZnJvbSB2MSBhbmQgd2lsbCBiZSBhZGRlZCBpbiBhXG4gKiBmdXR1cmUgc2NoZW1hIHZlcnNpb24gd2l0aG91dCBiYWNrLWNvbXBhdCB0byB2MC5cbiAqL1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IEhhbmRsZXJSZWdpc3RyeSB9IGZyb20gXCIuL3JlZ2lzdHJ5LmpzXCI7XG5pbXBvcnQge1xuICB2LFxuICB0eXBlIFJ1bGVDb25kaXRpb24sXG4gIHR5cGUgUnVsZURlZmluaXRpb24sXG59IGZyb20gXCIuL2J1aWxkZXIuanNcIjtcblxuLyoqXG4gKiBab2Qgc2NoZW1hIGZvciBhIHNpbmdsZSBzZXJpYWxpemVkIGNvbmRpdGlvbi5cbiAqXG4gKiAtIGBpZGA6IGVpdGhlciBhIGxpdGVyYWwgZW50aXR5IGlkIChudW1iZXIg4oCUIEVudGl0eUlkJ3MgYnJhbmQgZXhpc3RzIG9ubHkgaW5cbiAqICAgdGhlIHR5cGUgc3lzdGVtKSBvciBgbnVsbGAgZm9yIHdpbGRjYXJkLlxuICogLSBgYXR0cmA6IHRoZSBhdHRyaWJ1dGUga2V5IHN0cmluZy5cbiAqIC0gYGJpbmRpbmdgOiB0aGUgdmFyaWFibGUgbmFtZSB0byBiaW5kIHRoZSB2YWx1ZSB0bywgb3IgYG51bGxgIGlmIG5vIGJpbmRpbmcuXG4gKiAtIGBpZEJpbmRpbmdgOiBvcHRpb25hbCB2YXJpYWJsZSBuYW1lIHRvIGJpbmQgdGhlIGVudGl0eSBpZCB0by5cbiAqL1xuY29uc3QgQ29uZGl0aW9uU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogei51bmlvbihbei5udW1iZXIoKSwgei5udWxsKCldKSxcbiAgYXR0cjogei5zdHJpbmcoKSxcbiAgYmluZGluZzogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBpZEJpbmRpbmc6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuXG4vKipcbiAqIFpvZCBzY2hlbWEgZm9yIHRoZSBmdWxsIHNlcmlhbGl6ZWQgcnVsZSDigJQgdjEuXG4gKlxuICogRXhwb3J0ZWQgZm9yIGV4dGVybmFsIHZhbGlkYXRpb24gcGlwZWxpbmVzIChlLmcuIG5ldHdvcmsgaW5nZXN0aW9uIGJlZm9yZVxuICogZGVzZXJpYWxpc2F0aW9uLCBhZG1pbiB0b29saW5nKSBwZXIgU1BFQy5tZCDCp0pTT04gUnVsZSBTY2hlbWEuXG4gKi9cbmV4cG9ydCBjb25zdCBSVUxFX1NDSEVNQV9WMSA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKS5taW4oMSksXG4gIHNhbGllbmNlOiB6Lm51bWJlcigpLmRlZmF1bHQoMCksXG4gIGNvbmRpdGlvbnM6IHouYXJyYXkoQ29uZGl0aW9uU2NoZW1hKS5kZWZhdWx0KFtdKSxcbiAgaGFuZGxlcjogei5zdHJpbmcoKS5taW4oMSksXG4gIGhhbmRsZXJBcmdzOiB6LmFycmF5KHoudW5rbm93bigpKS5vcHRpb25hbCgpLFxufSk7XG5cbi8qKiBJbmZlcnJlZCBzdGF0aWMgdHlwZSBvZiBhIHNlcmlhbGl6ZWQgcnVsZS4gKi9cbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWRSdWxlID0gei5pbmZlcjx0eXBlb2YgUlVMRV9TQ0hFTUFfVjE+O1xuXG4vKipcbiAqIExvb3NlIGlucHV0IHNoYXBlIGFjY2VwdGVkIGJ5IHtAbGluayBzZXJpYWxpemV9LlxuICpcbiAqIEFsbG93cyBgdW5kZWZpbmVkYCBvbiBvcHRpb25hbCBmaWVsZHMgdG8gZWFzZSBjYWxsLXNpdGUgZXJnb25vbWljcyB1bmRlclxuICogYGV4YWN0T3B0aW9uYWxQcm9wZXJ0eVR5cGVzOiB0cnVlYC4gQXQgcnVudGltZSwgZmllbGRzIHRoYXQgYXJlIGFic2VudCBvclxuICogZXhwbGljaXRseSBgdW5kZWZpbmVkYCBhcmUgbm9ybWFsaXNlZCB0byBzY2hlbWEgZGVmYXVsdHMgb3Igb21pdHRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemFibGVSdWxlIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBoYW5kbGVyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNhbGllbmNlPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBjb25kaXRpb25zPzpcbiAgICB8IFJlYWRvbmx5QXJyYXk8e1xuICAgICAgICByZWFkb25seSBpZDogUnVsZUNvbmRpdGlvbltcImlkXCJdO1xuICAgICAgICByZWFkb25seSBhdHRyOiBzdHJpbmc7XG4gICAgICAgIHJlYWRvbmx5IGJpbmRpbmc6IFJ1bGVDb25kaXRpb25bXCJiaW5kaW5nXCJdO1xuICAgICAgICByZWFkb25seSBpZEJpbmRpbmc/OiBSdWxlQ29uZGl0aW9uW1wiaWRCaW5kaW5nXCJdIHwgdW5kZWZpbmVkO1xuICAgICAgfT5cbiAgICB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgaGFuZGxlckFyZ3M/OiByZWFkb25seSB1bmtub3duW10gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogU2VyaWFsaXplIGEgUnVsZURlZmluaXRpb24gdG8gYSBwbGFpbiwgSlNPTi1jb21wYXRpYmxlIG9iamVjdC5cbiAqXG4gKiBUaGUgcmVzdWx0IGNvbnRhaW5zIG9ubHkgc3RyaW5ncywgbnVtYmVycywgYm9vbGVhbnMsIG51bGwsIGFycmF5cywgYW5kXG4gKiBwbGFpbiBvYmplY3RzIOKAlCBubyBmdW5jdGlvbiByZWZlcmVuY2VzLiBQYXNzaW5nIHRoZSByZXR1cm4gdmFsdWUgdG9cbiAqIGBKU09OLnN0cmluZ2lmeWAgaXMgZ3VhcmFudGVlZCBzYWZlIGFuZCBsb3NzbGVzcyBmb3IgdGhlIHYxIHNjaGVtYS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZShydWxlOiBTZXJpYWxpemFibGVSdWxlKTogU2VyaWFsaXplZFJ1bGUge1xuICBjb25zdCBjb25kaXRpb25zID0gKHJ1bGUuY29uZGl0aW9ucyA/PyBbXSkubWFwKChjKSA9PiB7XG4gICAgY29uc3QgYmFzZTogU2VyaWFsaXplZFJ1bGVbXCJjb25kaXRpb25zXCJdW251bWJlcl0gPSB7XG4gICAgICBpZDogYy5pZCxcbiAgICAgIGF0dHI6IGMuYXR0cixcbiAgICAgIGJpbmRpbmc6IGMuYmluZGluZz8ubmFtZSA/PyBudWxsLFxuICAgIH07XG4gICAgLy8gVW5kZXIgZXhhY3RPcHRpb25hbFByb3BlcnR5VHlwZXMsIG9ubHkgaW5jbHVkZSBpZEJpbmRpbmcgd2hlbiBkZWZpbmVkLlxuICAgIHJldHVybiBjLmlkQmluZGluZyAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHsgLi4uYmFzZSwgaWRCaW5kaW5nOiBjLmlkQmluZGluZy5uYW1lIH1cbiAgICAgIDogYmFzZTtcbiAgfSk7XG5cbiAgY29uc3Qgb3V0OiBTZXJpYWxpemVkUnVsZSA9IHtcbiAgICBuYW1lOiBydWxlLm5hbWUsXG4gICAgc2FsaWVuY2U6IHJ1bGUuc2FsaWVuY2UgPz8gMCxcbiAgICBjb25kaXRpb25zLFxuICAgIGhhbmRsZXI6IHJ1bGUuaGFuZGxlcixcbiAgfTtcbiAgaWYgKHJ1bGUuaGFuZGxlckFyZ3MgIT09IHVuZGVmaW5lZCkge1xuICAgIG91dC5oYW5kbGVyQXJncyA9IFsuLi5ydWxlLmhhbmRsZXJBcmdzXTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIERlc2VyaWFsaXplIGEgSlNPTiBvYmplY3QgYmFjayBpbnRvIGEgUnVsZURlZmluaXRpb24uXG4gKlxuICogVmFsaWRhdGVzIHRoZSBpbnB1dCBhZ2FpbnN0IHtAbGluayBSVUxFX1NDSEVNQV9WMX0gYW5kIHRoZW4gcmVzb2x2ZXMgdGhlXG4gKiBoYW5kbGVyIG5hbWUgYWdhaW5zdCBgcmVnaXN0cnlgLiBUaHJvd3M6XG4gKiAgIC0gYHouWm9kRXJyb3JgIG9uIG1hbGZvcm1lZCBpbnB1dCAobWlzc2luZyBmaWVsZHMsIHdyb25nIHR5cGVzKS5cbiAqICAgLSBgVW5rbm93bkhhbmRsZXJFcnJvcmAgd2hlbiBgaGFuZGxlcmAgaXMgbm90IHJlZ2lzdGVyZWQuXG4gKlxuICogVGhlIHJlc3VsdGluZyBSdWxlRGVmaW5pdGlvbiBpcyBzdHJ1Y3R1cmFsbHkgaWRlbnRpY2FsIHRvIG9uZSBwcm9kdWNlZCBieVxuICoge0BsaW5rIGRlZmluZVJ1bGV9IOKAlCByb3VuZC10cmlwcGluZyB2aWEgYHNlcmlhbGl6ZShkZXNlcmlhbGl6ZSh4KSlgIHlpZWxkcyBhXG4gKiB2YWx1ZSBieXRlLWlkZW50aWNhbCB0byB0aGUgb3JpZ2luYWwgSlNPTiB1bmRlciBgSlNPTi5zdHJpbmdpZnlgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzZXJpYWxpemUoXG4gIGpzb246IHVua25vd24sXG4gIHJlZ2lzdHJ5OiBIYW5kbGVyUmVnaXN0cnlcbik6IFJ1bGVEZWZpbml0aW9uIHtcbiAgY29uc3QgcGFyc2VkID0gUlVMRV9TQ0hFTUFfVjEucGFyc2UoanNvbik7XG5cbiAgLy8gUmVnaXN0cnkgcmVzb2x1dGlvbiDigJQgcGVyIFNQRUMubWQgwqdKU09OIFJ1bGUgU2NoZW1hLCBoYW5kbGVyIG5hbWVzIE1VU1RcbiAgLy8gcmVzb2x2ZSBvciB3ZSB0aHJvdyBVbmtub3duSGFuZGxlckVycm9yLlxuICByZWdpc3RyeS52ZXJpZnkoW3BhcnNlZC5oYW5kbGVyXSk7XG5cbiAgY29uc3QgY29uZGl0aW9uczogUnVsZUNvbmRpdGlvbltdID0gcGFyc2VkLmNvbmRpdGlvbnMubWFwKChjKSA9PiB7XG4gICAgY29uc3QgYmFzZTogUnVsZUNvbmRpdGlvbiA9IHtcbiAgICAgIGlkOiBjLmlkIGFzIFJ1bGVDb25kaXRpb25bXCJpZFwiXSxcbiAgICAgIGF0dHI6IGMuYXR0cixcbiAgICAgIGJpbmRpbmc6IGMuYmluZGluZyAhPT0gbnVsbCA/IHYoYy5iaW5kaW5nKSA6IG51bGwsXG4gICAgfTtcbiAgICByZXR1cm4gYy5pZEJpbmRpbmcgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7IC4uLmJhc2UsIGlkQmluZGluZzogdihjLmlkQmluZGluZykgfVxuICAgICAgOiBiYXNlO1xuICB9KTtcblxuICBjb25zdCBvdXQ6IFJ1bGVEZWZpbml0aW9uID0ge1xuICAgIG5hbWU6IHBhcnNlZC5uYW1lLFxuICAgIHNhbGllbmNlOiBwYXJzZWQuc2FsaWVuY2UsXG4gICAgY29uZGl0aW9ucyxcbiAgICBoYW5kbGVyOiBwYXJzZWQuaGFuZGxlcixcbiAgfTtcbiAgaWYgKHBhcnNlZC5oYW5kbGVyQXJncyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHsgLi4ub3V0LCBoYW5kbGVyQXJnczogcGFyc2VkLmhhbmRsZXJBcmdzIGFzIHJlYWRvbmx5IHVua25vd25bXSB9O1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvcmV0ZS9kaXN0L3NlcmlhbGl6ZS5qcyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/26861562d32f5b3ccb4eee454f01812af38cd8cb b/7xOfJqsDU787fe61oSCq1/web/26861562d32f5b3ccb4eee454f01812af38cd8cb deleted file mode 100644 index 9e68ca7..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/26861562d32f5b3ccb4eee454f01812af38cd8cb +++ /dev/null @@ -1,22 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "PROMOTION_OVERRIDE_DESCRIPTOR", { enumerable: true, configurable: true, get(){ try { return PROMOTION_OVERRIDE_DESCRIPTOR } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/zod@4.3.6/node_modules/zod/index.js", {"importedNames":["z"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/modifiers/registry.ts", {"importedNames":["MODIFIER_REGISTRY"]}); -const promotionTargetSchema = __vite_ssr_import_0__.z.enum(["queen", "rook", "bishop", "knight", "disabled"]); -const PROMOTION_OVERRIDE_DESCRIPTOR = { - id: "promotion-override", - attrName: "PromotionOverride", - label: "Promotion Override", - valueSchema: promotionTargetSchema, - stackingRule: "priority-wins", - uiForm: "promotion-target", - apply(session, pieceId, effectiveValue) { - session.insert(pieceId, "PromotionOverride", effectiveValue); - }, - describe(value) { - return value === "disabled" ? "Cannot promote" : `Promotes to ${value}`; - } -}; -__vite_ssr_import_1__.MODIFIER_REGISTRY.register(PROMOTION_OVERRIDE_DESCRIPTOR); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQUFBO0FBRUE7QUFNQSxNQUFNLHdCQUF3Qix3QkFBRSxLQUFLLENBQUMsU0FBUyxRQUFRLFVBQVUsVUFBVSxVQUFVLENBQUM7QUFHL0UsTUFBTSxnQ0FBMkQ7QUFBQSxFQUN0RSxJQUFJO0FBQUEsRUFDSixVQUFVO0FBQUEsRUFDVixPQUFPO0FBQUEsRUFDUCxhQUFhO0FBQUEsRUFDYixjQUFjO0FBQUEsRUFDZCxRQUFRO0FBQUEsRUFDUixNQUFNLFNBQWtCLFNBQW1CLGdCQUE2QjtBQUN0RSxZQUFRLE9BQU8sU0FBUyxxQkFBcUIsY0FBYztBQUFBLEVBQzdEO0FBQUEsRUFDQSxTQUFTLE9BQXNCO0FBQzdCLFdBQU8sVUFBVSxhQUFhLG1CQUFtQixlQUFlLEtBQUs7QUFBQSxFQUN2RTtBQUNGO0FBRUEsd0NBQWtCLFNBQVMsNkJBQTZCIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJwcm9tb3Rpb24tb3ZlcnJpZGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgU2Vzc2lvbiwgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB7IE1PRElGSUVSX1JFR0lTVFJZIH0gZnJvbSBcIi4uL3JlZ2lzdHJ5LmpzXCI7XG5pbXBvcnQgdHlwZSB7IE1vZGlmaWVyRGVzY3JpcHRvciB9IGZyb20gXCIuLi90eXBlcy5qc1wiO1xuXG4vLyBWYWxpZCBvdmVycmlkZTogYW55IHN0YW5kYXJkIHByb21vdGlvbiB0YXJnZXQsIG9yIFwiZGlzYWJsZWRcIiAobm8gcHJvbW90aW9uKS5cbi8vIFwia2luZ1wiIGFuZCBcInBhd25cIiBhcmUgaW50ZW50aW9uYWxseSBleGNsdWRlZCDigJQga2luZyBpcyBub3QgYSB2YWxpZCBwcm9tb3Rpb25cbi8vIHRhcmdldCBhbmQgcGF3biB3b3VsZCBiZSBhIG5vLW9wIC8gbm9uLXNlbnNpY2FsIHByb21vdGlvbi5cbmNvbnN0IHByb21vdGlvblRhcmdldFNjaGVtYSA9IHouZW51bShbXCJxdWVlblwiLCBcInJvb2tcIiwgXCJiaXNob3BcIiwgXCJrbmlnaHRcIiwgXCJkaXNhYmxlZFwiXSk7XG50eXBlIFZhbHVlID0gei5pbmZlcjx0eXBlb2YgcHJvbW90aW9uVGFyZ2V0U2NoZW1hPjtcblxuZXhwb3J0IGNvbnN0IFBST01PVElPTl9PVkVSUklERV9ERVNDUklQVE9SOiBNb2RpZmllckRlc2NyaXB0b3I8VmFsdWU+ID0ge1xuICBpZDogXCJwcm9tb3Rpb24tb3ZlcnJpZGVcIixcbiAgYXR0ck5hbWU6IFwiUHJvbW90aW9uT3ZlcnJpZGVcIixcbiAgbGFiZWw6IFwiUHJvbW90aW9uIE92ZXJyaWRlXCIsXG4gIHZhbHVlU2NoZW1hOiBwcm9tb3Rpb25UYXJnZXRTY2hlbWEsXG4gIHN0YWNraW5nUnVsZTogXCJwcmlvcml0eS13aW5zXCIsXG4gIHVpRm9ybTogXCJwcm9tb3Rpb24tdGFyZ2V0XCIsXG4gIGFwcGx5KHNlc3Npb246IFNlc3Npb24sIHBpZWNlSWQ6IEVudGl0eUlkLCBlZmZlY3RpdmVWYWx1ZTogVmFsdWUpOiB2b2lkIHtcbiAgICBzZXNzaW9uLmluc2VydChwaWVjZUlkLCBcIlByb21vdGlvbk92ZXJyaWRlXCIsIGVmZmVjdGl2ZVZhbHVlKTtcbiAgfSxcbiAgZGVzY3JpYmUodmFsdWU6IFZhbHVlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IFwiZGlzYWJsZWRcIiA/IFwiQ2Fubm90IHByb21vdGVcIiA6IGBQcm9tb3RlcyB0byAke3ZhbHVlfWA7XG4gIH0sXG59O1xuXG5NT0RJRklFUl9SRUdJU1RSWS5yZWdpc3RlcihQUk9NT1RJT05fT1ZFUlJJREVfREVTQ1JJUFRPUik7XG4iXSwiZmlsZSI6Ii9zcmMvbW9kaWZpZXJzL2Rlc2NyaXB0b3JzL3Byb21vdGlvbi1vdmVycmlkZS50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/2a7f7e59a149ed5f24a2dcb7bcd631c240ed6c5d b/7xOfJqsDU787fe61oSCq1/web/2a7f7e59a149ed5f24a2dcb7bcd631c240ed6c5d deleted file mode 100644 index 4c30e55..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/2a7f7e59a149ed5f24a2dcb7bcd631c240ed6c5d +++ /dev/null @@ -1,191 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect","beforeAll"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/presets/index.ts"); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/engine.ts", {"importedNames":["ChessEngine"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/presets/registry.ts", {"importedNames":["PRESET_REGISTRY"]}); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["rankOf"]}); -const __vite_ssr_import_5__ = await __vite_ssr_import__("/src/layouts/empty.ts", {"importedNames":["EMPTY_LAYOUT"]}); -function pieceAt(engine, sq) { - for (const f of engine.session.allFacts()) { - if (f.attr === "Position" && f.value === sq) return f.id; - }; - return null; -} -const NOOP_ID = "__test__/transform-noop"; -const PAWN_BACKWARD_ID = "__test__/transform-pawn-backward"; -const SECOND_WRAP_ID = "__test__/transform-pawn-sideways"; -const EXTRA_MOVES_ID = "__test__/transform-extra-moves"; -(0,__vite_ssr_import_0__.beforeAll)(() => { - if (!__vite_ssr_import_3__.PRESET_REGISTRY.get(NOOP_ID)) { - __vite_ssr_import_3__.PRESET_REGISTRY.register({ - id: NOOP_ID, - name: "Test: noop transform", - description: "Calls prev and returns output unchanged.", - incompatibleWith: [], - requires: [], - transformMoveGenerator: (_engine, _pieceId, prev) => (session, id) => prev(session, id) - }); - }; - if (!__vite_ssr_import_3__.PRESET_REGISTRY.get(PAWN_BACKWARD_ID)) { - __vite_ssr_import_3__.PRESET_REGISTRY.register({ - id: PAWN_BACKWARD_ID, - name: "Test: transform adds pawn backward move", - description: "Wraps the pawn generator to add a backward-1 non-capture move.", - incompatibleWith: [], - requires: [], - transformMoveGenerator: (engine, pieceId, prev) => (session, id) => { - const base = prev(session, id); - const type = session.get(pieceId, "PieceType"); - if (type !== "pawn") return base; - const from = session.get(pieceId, "Position"); - const color = session.get(pieceId, "Color"); - if (from === null || color === null) return base; - const dir = color === "white" ? -8 : 8; - const targetRank = (0,__vite_ssr_import_4__.rankOf)(from) + (color === "white" ? -1 : 1); - if (targetRank < 0 || targetRank > 7) return base; - const to = from + dir; - const occupied = engine.session.allFacts().some((f) => f.attr === "Position" && f.value === to); - if (occupied) return base; - return [ - ...base, - { pieceId: id, from, to, isCapture: false } - ]; - } - }); - }; - if (!__vite_ssr_import_3__.PRESET_REGISTRY.get(SECOND_WRAP_ID)) { - __vite_ssr_import_3__.PRESET_REGISTRY.register({ - id: SECOND_WRAP_ID, - name: "Test: transform adds pawn sideways move", - description: "Wraps the pawn generator (or whatever the previous wrap produced) to add a sideways-right pseudo move.", - incompatibleWith: [], - requires: [], - transformMoveGenerator: (_engine, pieceId, prev) => (session, id) => { - const base = prev(session, id); - const type = session.get(pieceId, "PieceType"); - if (type !== "pawn") return base; - const from = session.get(pieceId, "Position"); - if (from === null) return base; - if (from % 8 >= 7) return base; - const to = from + 1; - return [ - ...base, - { pieceId: id, from, to, isCapture: false } - ]; - } - }); - }; - if (!__vite_ssr_import_3__.PRESET_REGISTRY.get(EXTRA_MOVES_ID)) { - __vite_ssr_import_3__.PRESET_REGISTRY.register({ - id: EXTRA_MOVES_ID, - name: "Test: transform adds a self-check move", - description: "Wraps the generator for a specific piece to add a move that would leave the mover's king in check. The engine's self-check filter MUST prune it.", - incompatibleWith: [], - requires: [], - transformMoveGenerator: (_engine, pieceId, prev) => (session, id) => { - const base = prev(session, id); - if (pieceId !== id) return base; - const from = session.get(pieceId, "Position"); - if (from === null) return base; - const to = from + 8; - if (to > 63) return base; - return [ - ...base, - { pieceId: id, from, to, isCapture: false } - ]; - } - }); - } -}); -(0,__vite_ssr_import_0__.describe)("transformMoveGenerator — noop preset", () => { - (0,__vite_ssr_import_0__.it)("legal moves are identical to without the preset", () => { - const without = new __vite_ssr_import_2__.ChessEngine(); - const withNoop = new __vite_ssr_import_2__.ChessEngine(); - withNoop.setActivePresets([ - { id: NOOP_ID, scope: "both", turnsRemaining: null } - ]); - const proj = (ms) => ms.map((m) => `${m.from}->${m.to}:${m.isCapture ? 1 : 0}:${m.promoteTo ?? ""}`).sort(); - (0,__vite_ssr_import_0__.expect)(proj(withNoop.getAllLegalMoves())).toEqual( - proj(without.getAllLegalMoves()) - ); - }); -}); -(0,__vite_ssr_import_0__.describe)("transformMoveGenerator — pawn backward wrapper", () => { - (0,__vite_ssr_import_0__.it)("adds backward move, preserves base forward moves", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: PAWN_BACKWARD_ID, scope: "both", turnsRemaining: null } - ]); - const whiteAPawn = pieceAt(engine, 8); - (0,__vite_ssr_import_0__.expect)(whiteAPawn).not.toBeNull(); - engine.session.insert(whiteAPawn, "Position", 24); - const moves = engine.getAllLegalMoves().filter((m) => m.pieceId === whiteAPawn); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.from === 24 && m.to === 32 && !m.isCapture)).toBe( - true - ); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.from === 24 && m.to === 16 && !m.isCapture)).toBe( - true - ); - }); - (0,__vite_ssr_import_0__.it)("does not add backward move when target square is occupied", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: PAWN_BACKWARD_ID, scope: "both", turnsRemaining: null } - ]); - const whiteAPawn = pieceAt(engine, 8); - const moves = engine.getAllLegalMoves().filter((m) => m.pieceId === whiteAPawn); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.to === 0)).toBe(false); - }); -}); -(0,__vite_ssr_import_0__.describe)("transformMoveGenerator — composition", () => { - (0,__vite_ssr_import_0__.it)("second preset receives first preset's output; both contributions land", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: PAWN_BACKWARD_ID, scope: "both", turnsRemaining: null }, - { id: SECOND_WRAP_ID, scope: "both", turnsRemaining: null } - ]); - const whiteAPawn = pieceAt(engine, 8); - engine.session.insert(whiteAPawn, "Position", 24); - const moves = engine.getAllLegalMoves().filter((m) => m.pieceId === whiteAPawn); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.to === 16)).toBe(true); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.to === 25)).toBe(true); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.to === 32)).toBe(true); - }); -}); -(0,__vite_ssr_import_0__.describe)("transformMoveGenerator — self-check filter runs downstream", () => { - (0,__vite_ssr_import_0__.it)("transform cannot bypass self-check filter", () => { - const engine = new __vite_ssr_import_2__.ChessEngine({ layout: __vite_ssr_import_5__.EMPTY_LAYOUT }); - const whiteKingId = engine.session.nextId(); - engine.session.insert(whiteKingId, "PieceType", "king"); - engine.session.insert(whiteKingId, "Color", "white"); - engine.session.insert(whiteKingId, "Position", 0); - engine.session.insert(whiteKingId, "HasMoved", false); - const whiteKnightId = engine.session.nextId(); - engine.session.insert(whiteKnightId, "PieceType", "knight"); - engine.session.insert(whiteKnightId, "Color", "white"); - engine.session.insert(whiteKnightId, "Position", 3); - engine.session.insert(whiteKnightId, "HasMoved", false); - const blackRookId = engine.session.nextId(); - engine.session.insert(blackRookId, "PieceType", "rook"); - engine.session.insert(blackRookId, "Color", "black"); - engine.session.insert(blackRookId, "Position", 7); - engine.session.insert(blackRookId, "HasMoved", false); - const blackKingId = engine.session.nextId(); - engine.session.insert(blackKingId, "PieceType", "king"); - engine.session.insert(blackKingId, "Color", "black"); - engine.session.insert(blackKingId, "Position", 63); - engine.session.insert(blackKingId, "HasMoved", false); - engine.setActivePresets([ - { id: EXTRA_MOVES_ID, scope: "both", turnsRemaining: null } - ]); - const legal = engine.getAllLegalMoves(); - const knightOffRank = legal.find( - (m) => m.pieceId === whiteKnightId && m.to === 11 - ); - (0,__vite_ssr_import_0__.expect)(knightOffRank).toBeUndefined(); - const knightMoves = legal.filter((m) => m.pieceId === whiteKnightId); - (0,__vite_ssr_import_0__.expect)(knightMoves).toEqual([]); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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UUFBUTtBQUMxRCxXQUFPLFFBQVEsT0FBTyxlQUFlLFNBQVMsT0FBTztBQUNyRCxXQUFPLFFBQVEsT0FBTyxlQUFlLFlBQVksQ0FBVztBQUM1RCxXQUFPLFFBQVEsT0FBTyxlQUFlLFlBQVksS0FBSztBQUd0RCxVQUFNLGNBQWMsT0FBTyxRQUFRLE9BQU87QUFDMUMsV0FBTyxRQUFRLE9BQU8sYUFBYSxhQUFhLE1BQU07QUFDdEQsV0FBTyxRQUFRLE9BQU8sYUFBYSxTQUFTLE9BQU87QUFDbkQsV0FBTyxRQUFRLE9BQU8sYUFBYSxZQUFZLENBQVc7QUFDMUQsV0FBTyxRQUFRLE9BQU8sYUFBYSxZQUFZLEtBQUs7QUFHcEQsVUFBTSxjQUFjLE9BQU8sUUFBUSxPQUFPO0FBQzFDLFdBQU8sUUFBUSxPQUFPLGFBQWEsYUFBYSxNQUFNO0FBQ3RELFdBQU8sUUFBUSxPQUFPLGFBQWEsU0FBUyxPQUFPO0FBQ25ELFdBQU8sUUFBUSxPQUFPLGFBQWEsWUFBWSxFQUFZO0FBQzNELFdBQU8sUUFBUSxPQUFPLGFBQWEsWUFBWSxLQUFLO0FBU3BELFdBQU8saUJBQWlCO0FBQUEsTUFDdEIsRUFBRSxJQUFJLGdCQUFnQixPQUFPLFFBQVEsZ0JBQWdCLEtBQUs7QUFBQSxJQUM1RCxDQUFDO0FBRUQsVUFBTSxRQUFRLE9BQU8saUJBQWlCO0FBTXRDLFVBQU0sZ0JBQWdCLE1BQU07QUFBQSxNQUMxQixDQUFDLE1BQU0sRUFBRSxZQUFZLGlCQUFpQixFQUFFLE9BQU87QUFBQSxJQUNqRDtBQUNBLHFDQUFPLGFBQWEsRUFBRSxjQUFjO0FBS3BDLFVBQU0sY0FBYyxNQUFNLE9BQU8sQ0FBQyxNQUFNLEVBQUUsWUFBWSxhQUFhO0FBQ25FLHFDQUFPLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUFBLEVBQ2hDLENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJ0cmFuc2Zvcm0taG9vay50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGVzdHMgZm9yIHRoZSBgdHJhbnNmb3JtTW92ZUdlbmVyYXRvcmAgcHJlc2V0IGhvb2suXG4gKlxuICogYHRyYW5zZm9ybU1vdmVHZW5lcmF0b3JgIFdSQVBTIHRoZSB0eXBlLXJlZ2lzdHJ5IG1vdmUgZ2VuZXJhdG9yIGZvciBhXG4gKiBnaXZlbiBwaWVjZS4gRWFjaCBwcmVzZXQgdGhhdCBpbXBsZW1lbnRzIGl0IHJlY2VpdmVzIHRoZSBvdXRwdXQgb2YgdGhlXG4gKiBwcmV2aW91cyBwcmVzZXQncyB3cmFwcGVyLCBjb21wb3NpbmcgY2xlYW5seS4gU2VsZi1jaGVjayBmaWx0ZXJpbmdcbiAqIHJ1bnMgZG93bnN0cmVhbSBhbmQgY2Fubm90IGJlIGJ5cGFzc2VkLlxuICpcbiAqIFRoZXNlIHRlc3RzIGV4ZXJjaXNlOlxuICogICAxLiBBIG5vLW9wIHdyYXBwZXIgKGNhbGxzIHByZXYgdW5jaGFuZ2VkKSBwcm9kdWNlcyBpZGVudGljYWwgbW92ZXMuXG4gKiAgIDIuIEEgd3JhcHBlciBjYW4gQUREIG1vdmVzIChwYXduIGJhY2t3YXJkLTEpIHdpdGhvdXQgZGlzY2FyZGluZ1xuICogICAgICB0aGUgYmFzZSBmb3J3YXJkIG1vdmVzLlxuICogICAzLiBUd28gd3JhcHBpbmcgcHJlc2V0cyBjb21wb3NlIOKAlCBlYWNoIHNlZXMgdGhlIG90aGVyJ3Mgb3V0cHV0IGFuZFxuICogICAgICBib3RoIG9mIHRoZWlyIGNvbnRyaWJ1dGlvbnMgbGFuZCBpbiB0aGUgZmluYWwgbW92ZSBzZXQuXG4gKiAgIDQuIFRoZSBlbmdpbmUncyBzZWxmLWNoZWNrIGZpbHRlciBzdGlsbCBydW5zIEFGVEVSIHRoZSB0cmFuc2Zvcm0g4oCUXG4gKiAgICAgIGEgdHJhbnNmb3JtIGNhbid0IGxlZ2FsaXplIGEgbW92ZSB0aGF0IGxlYXZlcyB0aGUga2luZyBpbiBjaGVjay5cbiAqL1xuaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QsIGJlZm9yZUFsbCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCBcIi4vaW5kZXguanNcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5SWQsIFNlc3Npb24gfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB7IENoZXNzRW5naW5lIH0gZnJvbSBcIi4uL2VuZ2luZS5qc1wiO1xuaW1wb3J0IHsgUFJFU0VUX1JFR0lTVFJZIH0gZnJvbSBcIi4vcmVnaXN0cnkuanNcIjtcbmltcG9ydCB0eXBlIHsgTGVnYWxNb3ZlIH0gZnJvbSBcIi4uL3J1bGVzL3R5cGVzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBpZWNlQ29sb3IsIFNxdWFyZSB9IGZyb20gXCIuLi9zY2hlbWEuanNcIjtcbmltcG9ydCB7IHJhbmtPZiB9IGZyb20gXCIuLi9jb29yZC5qc1wiO1xuaW1wb3J0IHsgRU1QVFlfTEFZT1VUIH0gZnJvbSBcIi4uL2xheW91dHMvZW1wdHkuanNcIjtcblxuLyoqIEZpbmQgdGhlIHBpZWNlIGN1cnJlbnRseSBvbiBhIGdpdmVuIHJhdyBzcXVhcmU7IG51bGwgaWYgZW1wdHkuICovXG5mdW5jdGlvbiBwaWVjZUF0KGVuZ2luZTogQ2hlc3NFbmdpbmUsIHNxOiBudW1iZXIpOiBFbnRpdHlJZCB8IG51bGwge1xuICBmb3IgKGNvbnN0IGYgb2YgZW5naW5lLnNlc3Npb24uYWxsRmFjdHMoKSkge1xuICAgIGlmIChmLmF0dHIgPT09IFwiUG9zaXRpb25cIiAmJiBmLnZhbHVlID09PSBzcSkgcmV0dXJuIGYuaWQ7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIOKUgOKUgOKUgCBSZWdpc3RlciB0ZXN0LW9ubHkgcHJlc2V0cyAoaWRlbXBvdGVudCBhY3Jvc3MgdGVzdCBydW5zKSDilIDilIDilIDilIDilIDilIDilIDilIBcblxuY29uc3QgTk9PUF9JRCA9IFwiX190ZXN0X18vdHJhbnNmb3JtLW5vb3BcIjtcbmNvbnN0IFBBV05fQkFDS1dBUkRfSUQgPSBcIl9fdGVzdF9fL3RyYW5zZm9ybS1wYXduLWJhY2t3YXJkXCI7XG5jb25zdCBTRUNPTkRfV1JBUF9JRCA9IFwiX190ZXN0X18vdHJhbnNmb3JtLXBhd24tc2lkZXdheXNcIjtcbmNvbnN0IEVYVFJBX01PVkVTX0lEID0gXCJfX3Rlc3RfXy90cmFuc2Zvcm0tZXh0cmEtbW92ZXNcIjtcblxuYmVmb3JlQWxsKCgpID0+IHtcbiAgLy8gQSBwcmVzZXQgdGhhdCB3cmFwcyB0aGUgZ2VuZXJhdG9yIGJ1dCBjYWxscyBwcmV2KHNlc3Npb24sIHBpZWNlSWQpXG4gIC8vIGFuZCByZXR1cm5zIGl0cyByZXN1bHQgdW5tb2RpZmllZC4gVGhlIHdob2xlIHBvaW50IGlzIHRvIHByb3ZlIHRoYXRcbiAgLy8gd3JhcHBpbmcgZG9lc24ndCBpdHNlbGYgY2hhbmdlIGJlaGF2aW91ciDigJQgY29tcG9zaXRpb24gaXMgc2FmZS5cbiAgaWYgKCFQUkVTRVRfUkVHSVNUUlkuZ2V0KE5PT1BfSUQpKSB7XG4gICAgUFJFU0VUX1JFR0lTVFJZLnJlZ2lzdGVyKHtcbiAgICAgIGlkOiBOT09QX0lELFxuICAgICAgbmFtZTogXCJUZXN0OiBub29wIHRyYW5zZm9ybVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiQ2FsbHMgcHJldiBhbmQgcmV0dXJucyBvdXRwdXQgdW5jaGFuZ2VkLlwiLFxuICAgICAgaW5jb21wYXRpYmxlV2l0aDogW10sXG4gICAgICByZXF1aXJlczogW10sXG4gICAgICB0cmFuc2Zvcm1Nb3ZlR2VuZXJhdG9yOiAoXG4gICAgICAgIF9lbmdpbmUsXG4gICAgICAgIF9waWVjZUlkLFxuICAgICAgICBwcmV2LFxuICAgICAgKSA9PiAoc2Vzc2lvbjogU2Vzc2lvbiwgaWQ6IEVudGl0eUlkKSA9PiBwcmV2KHNlc3Npb24sIGlkKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEEgcHJlc2V0IHRoYXQgd3JhcHMgdGhlIHBhd24gZ2VuZXJhdG9yIHNwZWNpZmljYWxseSBhbmQgYWRkcyBhXG4gIC8vIGJhY2t3YXJkLTEgbm9uLWNhcHR1cmUgbW92ZS4gV2UgZG9uJ3QgdG91Y2ggbm9uLXBhd24gcGllY2VzOiBmb3JcbiAgLy8gdGhvc2Ugd2UgcmV0dXJuIHByZXYgdW5jaGFuZ2VkLlxuICBpZiAoIVBSRVNFVF9SRUdJU1RSWS5nZXQoUEFXTl9CQUNLV0FSRF9JRCkpIHtcbiAgICBQUkVTRVRfUkVHSVNUUlkucmVnaXN0ZXIoe1xuICAgICAgaWQ6IFBBV05fQkFDS1dBUkRfSUQsXG4gICAgICBuYW1lOiBcIlRlc3Q6IHRyYW5zZm9ybSBhZGRzIHBhd24gYmFja3dhcmQgbW92ZVwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiV3JhcHMgdGhlIHBhd24gZ2VuZXJhdG9yIHRvIGFkZCBhIGJhY2t3YXJkLTEgbm9uLWNhcHR1cmUgbW92ZS5cIixcbiAgICAgIGluY29tcGF0aWJsZVdpdGg6IFtdLFxuICAgICAgcmVxdWlyZXM6IFtdLFxuICAgICAgdHJhbnNmb3JtTW92ZUdlbmVyYXRvcjogKFxuICAgICAgICBlbmdpbmUsXG4gICAgICAgIHBpZWNlSWQsXG4gICAgICAgIHByZXYsXG4gICAgICApID0+IChzZXNzaW9uOiBTZXNzaW9uLCBpZDogRW50aXR5SWQpID0+IHtcbiAgICAgICAgY29uc3QgYmFzZSA9IHByZXYoc2Vzc2lvbiwgaWQpO1xuICAgICAgICBjb25zdCB0eXBlID0gc2Vzc2lvbi5nZXQocGllY2VJZCwgXCJQaWVjZVR5cGVcIik7XG4gICAgICAgIGlmICh0eXBlICE9PSBcInBhd25cIikgcmV0dXJuIGJhc2U7XG4gICAgICAgIGNvbnN0IGZyb20gPSBzZXNzaW9uLmdldChwaWVjZUlkLCBcIlBvc2l0aW9uXCIpIGFzIG51bWJlciB8IG51bGw7XG4gICAgICAgIGNvbnN0IGNvbG9yID0gc2Vzc2lvbi5nZXQocGllY2VJZCwgXCJDb2xvclwiKSBhcyBQaWVjZUNvbG9yIHwgbnVsbDtcbiAgICAgICAgaWYgKGZyb20gPT09IG51bGwgfHwgY29sb3IgPT09IG51bGwpIHJldHVybiBiYXNlO1xuICAgICAgICBjb25zdCBkaXIgPSBjb2xvciA9PT0gXCJ3aGl0ZVwiID8gLTggOiA4O1xuICAgICAgICBjb25zdCB0YXJnZXRSYW5rID0gcmFua09mKGZyb20gYXMgU3F1YXJlKSArIChjb2xvciA9PT0gXCJ3aGl0ZVwiID8gLTEgOiAxKTtcbiAgICAgICAgaWYgKHRhcmdldFJhbmsgPCAwIHx8IHRhcmdldFJhbmsgPiA3KSByZXR1cm4gYmFzZTtcbiAgICAgICAgY29uc3QgdG8gPSAoZnJvbSArIGRpcikgYXMgU3F1YXJlO1xuICAgICAgICAvLyBPbmx5IGFkZCBpZiB0aGUgc3F1YXJlIGlzIGVtcHR5LlxuICAgICAgICBjb25zdCBvY2N1cGllZCA9IGVuZ2luZS5zZXNzaW9uXG4gICAgICAgICAgLmFsbEZhY3RzKClcbiAgICAgICAgICAuc29tZSgoZikgPT4gZi5hdHRyID09PSBcIlBvc2l0aW9uXCIgJiYgZi52YWx1ZSA9PT0gdG8pO1xuICAgICAgICBpZiAob2NjdXBpZWQpIHJldHVybiBiYXNlO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIC4uLmJhc2UsXG4gICAgICAgICAgeyBwaWVjZUlkOiBpZCwgZnJvbTogZnJvbSBhcyBTcXVhcmUsIHRvLCBpc0NhcHR1cmU6IGZhbHNlIH0sXG4gICAgICAgIF07XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQSBzZWNvbmQgd3JhcHBpbmcgcHJlc2V0IHRoYXQgQUxTTyB0YXJnZXRzIHBhd25zIGJ1dCBhZGRzIGFcbiAgLy8gc2lkZXdheXMtcmlnaHQgbW92ZSB0byBhbiBhcmJpdHJhcnkgc3F1YXJlIChmb3IgY29tcG9zaXRpb25cbiAgLy8gdGVzdGluZyDigJQgZG9lc24ndCBuZWVkIHRvIGJlIGEgc2Vuc2libGUgY2hlc3MgbW92ZSkuXG4gIGlmICghUFJFU0VUX1JFR0lTVFJZLmdldChTRUNPTkRfV1JBUF9JRCkpIHtcbiAgICBQUkVTRVRfUkVHSVNUUlkucmVnaXN0ZXIoe1xuICAgICAgaWQ6IFNFQ09ORF9XUkFQX0lELFxuICAgICAgbmFtZTogXCJUZXN0OiB0cmFuc2Zvcm0gYWRkcyBwYXduIHNpZGV3YXlzIG1vdmVcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIldyYXBzIHRoZSBwYXduIGdlbmVyYXRvciAob3Igd2hhdGV2ZXIgdGhlIHByZXZpb3VzIHdyYXAgcHJvZHVjZWQpIFwiICtcbiAgICAgICAgXCJ0byBhZGQgYSBzaWRld2F5cy1yaWdodCBwc2V1ZG8gbW92ZS5cIixcbiAgICAgIGluY29tcGF0aWJsZVdpdGg6IFtdLFxuICAgICAgcmVxdWlyZXM6IFtdLFxuICAgICAgdHJhbnNmb3JtTW92ZUdlbmVyYXRvcjogKFxuICAgICAgICBfZW5naW5lLFxuICAgICAgICBwaWVjZUlkLFxuICAgICAgICBwcmV2LFxuICAgICAgKSA9PiAoc2Vzc2lvbjogU2Vzc2lvbiwgaWQ6IEVudGl0eUlkKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhc2UgPSBwcmV2KHNlc3Npb24sIGlkKTtcbiAgICAgICAgY29uc3QgdHlwZSA9IHNlc3Npb24uZ2V0KHBpZWNlSWQsIFwiUGllY2VUeXBlXCIpO1xuICAgICAgICBpZiAodHlwZSAhPT0gXCJwYXduXCIpIHJldHVybiBiYXNlO1xuICAgICAgICBjb25zdCBmcm9tID0gc2Vzc2lvbi5nZXQocGllY2VJZCwgXCJQb3NpdGlvblwiKSBhcyBudW1iZXIgfCBudWxsO1xuICAgICAgICBpZiAoZnJvbSA9PT0gbnVsbCkgcmV0dXJuIGJhc2U7XG4gICAgICAgIC8vIEF2b2lkIGdvaW5nIG9mZi1ib2FyZC5cbiAgICAgICAgaWYgKChmcm9tICUgOCkgPj0gNykgcmV0dXJuIGJhc2U7XG4gICAgICAgIGNvbnN0IHRvID0gKGZyb20gKyAxKSBhcyBTcXVhcmU7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgICB7IHBpZWNlSWQ6IGlkLCBmcm9tOiBmcm9tIGFzIFNxdWFyZSwgdG8sIGlzQ2FwdHVyZTogZmFsc2UgfSxcbiAgICAgICAgXTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyBBIGhlbHBlciBwcmVzZXQgZm9yIHRoZSBzZWxmLWNoZWNrIHRlc3Q6IGEgdHJhbnNmb3JtIHRoYXQgYWRkcyBhXG4gIC8vIG1vdmUgdGhhdCBMRUFWRVMgVEhFIEtJTkcgSU4gQ0hFQ0suIFdlIG5lZWQgdGhpcyB0byBwcm92ZSB0aGVcbiAgLy8gc2VsZi1jaGVjayBmaWx0ZXIgc3RpbGwgcnVucyBBRlRFUiB0aGUgdHJhbnNmb3JtZWQgZ2VuZXJhdG9yLlxuICBpZiAoIVBSRVNFVF9SRUdJU1RSWS5nZXQoRVhUUkFfTU9WRVNfSUQpKSB7XG4gICAgUFJFU0VUX1JFR0lTVFJZLnJlZ2lzdGVyKHtcbiAgICAgIGlkOiBFWFRSQV9NT1ZFU19JRCxcbiAgICAgIG5hbWU6IFwiVGVzdDogdHJhbnNmb3JtIGFkZHMgYSBzZWxmLWNoZWNrIG1vdmVcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIldyYXBzIHRoZSBnZW5lcmF0b3IgZm9yIGEgc3BlY2lmaWMgcGllY2UgdG8gYWRkIGEgbW92ZSB0aGF0IFwiICtcbiAgICAgICAgXCJ3b3VsZCBsZWF2ZSB0aGUgbW92ZXIncyBraW5nIGluIGNoZWNrLiBUaGUgZW5naW5lJ3Mgc2VsZi1jaGVjayBcIiArXG4gICAgICAgIFwiZmlsdGVyIE1VU1QgcHJ1bmUgaXQuXCIsXG4gICAgICBpbmNvbXBhdGlibGVXaXRoOiBbXSxcbiAgICAgIHJlcXVpcmVzOiBbXSxcbiAgICAgIHRyYW5zZm9ybU1vdmVHZW5lcmF0b3I6IChcbiAgICAgICAgX2VuZ2luZSxcbiAgICAgICAgcGllY2VJZCxcbiAgICAgICAgcHJldixcbiAgICAgICkgPT4gKHNlc3Npb246IFNlc3Npb24sIGlkOiBFbnRpdHlJZCkgPT4ge1xuICAgICAgICBjb25zdCBiYXNlID0gcHJldihzZXNzaW9uLCBpZCk7XG4gICAgICAgIC8vIFdlIHRhcmdldCBhIHNwZWNpZmljIHBpZWNlIHZpYSBpdHMgZW50aXR5IGlkIOKAlCB0aGUgdGVzdCBzZXRzXG4gICAgICAgIC8vIHVwIGEgcGlubmVkIGJpc2hvcCBhbmQgd2Ugb25seSBhdWdtZW50IElUIChvdGhlciBwaWVjZXMgcGFzc1xuICAgICAgICAvLyB0aHJvdWdoIHVuY2hhbmdlZCkuXG4gICAgICAgIGlmIChwaWVjZUlkICE9PSBpZCkgcmV0dXJuIGJhc2U7XG4gICAgICAgIGNvbnN0IGZyb20gPSBzZXNzaW9uLmdldChwaWVjZUlkLCBcIlBvc2l0aW9uXCIpIGFzIG51bWJlciB8IG51bGw7XG4gICAgICAgIGlmIChmcm9tID09PSBudWxsKSByZXR1cm4gYmFzZTtcbiAgICAgICAgLy8gR2VuZXJhdGUgXCJtb3ZlIDEgc3F1YXJlIHVwXCI7IGluIHRoZSBwaW4tcG9zIGJlbG93IHRoaXNcbiAgICAgICAgLy8gYWJhbmRvbnMgdGhlIHBpbiBhbmQgZXhwb3NlcyB0aGUga2luZy5cbiAgICAgICAgY29uc3QgdG8gPSAoZnJvbSArIDgpIGFzIFNxdWFyZTtcbiAgICAgICAgaWYgKHRvID4gNjMpIHJldHVybiBiYXNlO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIC4uLmJhc2UsXG4gICAgICAgICAgeyBwaWVjZUlkOiBpZCwgZnJvbTogZnJvbSBhcyBTcXVhcmUsIHRvLCBpc0NhcHR1cmU6IGZhbHNlIH0sXG4gICAgICAgIF07XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59KTtcblxuLy8g4pSA4pSA4pSAIDEuIE5vb3AgdHJhbnNmb3JtIHByZXNlcnZlcyBsZWdhbCBtb3ZlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZGVzY3JpYmUoXCJ0cmFuc2Zvcm1Nb3ZlR2VuZXJhdG9yIOKAlCBub29wIHByZXNldFwiLCAoKSA9PiB7XG4gIGl0KFwibGVnYWwgbW92ZXMgYXJlIGlkZW50aWNhbCB0byB3aXRob3V0IHRoZSBwcmVzZXRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHdpdGhvdXQgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBjb25zdCB3aXRoTm9vcCA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIHdpdGhOb29wLnNldEFjdGl2ZVByZXNldHMoW1xuICAgICAgeyBpZDogTk9PUF9JRCwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuXG4gICAgLy8gTm9ybWFsaXplIGZvciBkZXRlcm1pbmlzdGljIGNvbXBhcmlzb246IHByb2plY3QgZWFjaCBtb3ZlIHRvIGFcbiAgICAvLyBjb21wYXJhYmxlIHR1cGxlIGFuZCBzb3J0LlxuICAgIGNvbnN0IHByb2ogPSAobXM6IExlZ2FsTW92ZVtdKSA9PlxuICAgICAgbXNcbiAgICAgICAgLm1hcCgobSkgPT4gYCR7bS5mcm9tfS0+JHttLnRvfToke20uaXNDYXB0dXJlID8gMSA6IDB9OiR7bS5wcm9tb3RlVG8gPz8gXCJcIn1gKVxuICAgICAgICAuc29ydCgpO1xuXG4gICAgZXhwZWN0KHByb2ood2l0aE5vb3AuZ2V0QWxsTGVnYWxNb3ZlcygpKSkudG9FcXVhbChcbiAgICAgIHByb2ood2l0aG91dC5nZXRBbGxMZWdhbE1vdmVzKCkpLFxuICAgICk7XG4gIH0pO1xufSk7XG5cbi8vIOKUgOKUgOKUgCAyLiBXcmFwcGluZyBwcmVzZXQgYWRkcyBiYWNrd2FyZCBtb3ZlIHRvIHBhd24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmRlc2NyaWJlKFwidHJhbnNmb3JtTW92ZUdlbmVyYXRvciDigJQgcGF3biBiYWNrd2FyZCB3cmFwcGVyXCIsICgpID0+IHtcbiAgaXQoXCJhZGRzIGJhY2t3YXJkIG1vdmUsIHByZXNlcnZlcyBiYXNlIGZvcndhcmQgbW92ZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGVuZ2luZS5zZXRBY3RpdmVQcmVzZXRzKFtcbiAgICAgIHsgaWQ6IFBBV05fQkFDS1dBUkRfSUQsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcblxuICAgIC8vIE1vdmUgdGhlIHdoaXRlIGEtcGF3biB0byBhNCAoc3F1YXJlIDI0KSwgbGVhdmUgYTMgKHNxdWFyZSAxNilcbiAgICAvLyBlbXB0eSBieSByZXRyYWN0aW5nIHRoZSByb29rIG9uIGExIHNvIHRoZSBzcXVhcmUgaW4gZnJvbnQgb2ZcbiAgICAvLyB0aGUgcm9vayBkb2Vzbid0IGFjdHVhbGx5IG1hdHRlciDigJQgd2Ugb25seSBjYXJlIHRoYXQgYTMgaXNcbiAgICAvLyBlbXB0eSB3aGljaCBpdCBpcyB3aGVuIHRoZSBwYXduIGlzIG9uIGE0LlxuICAgIGNvbnN0IHdoaXRlQVBhd24gPSBwaWVjZUF0KGVuZ2luZSwgOCkhO1xuICAgIGV4cGVjdCh3aGl0ZUFQYXduKS5ub3QudG9CZU51bGwoKTtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQod2hpdGVBUGF3biwgXCJQb3NpdGlvblwiLCAyNCBhcyBTcXVhcmUpO1xuXG4gICAgY29uc3QgbW92ZXMgPSBlbmdpbmVcbiAgICAgIC5nZXRBbGxMZWdhbE1vdmVzKClcbiAgICAgIC5maWx0ZXIoKG0pID0+IG0ucGllY2VJZCA9PT0gd2hpdGVBUGF3bik7XG5cbiAgICAvLyBCYXNlIGZvcndhcmQgbW92ZTogYTQgLT4gYTUgKDI0IC0+IDMyKSwgbm9uLWNhcHR1cmUsIHN0aWxsIHByZXNlbnQuXG4gICAgZXhwZWN0KG1vdmVzLnNvbWUoKG0pID0+IG0uZnJvbSA9PT0gMjQgJiYgbS50byA9PT0gMzIgJiYgIW0uaXNDYXB0dXJlKSkudG9CZShcbiAgICAgIHRydWUsXG4gICAgKTtcbiAgICAvLyBPdXIgd3JhcHBlcidzIGFkZGl0aW9uOiBhNCAtPiBhMyAoMjQgLT4gMTYpLCBub24tY2FwdHVyZSwgcHJlc2VudC5cbiAgICBleHBlY3QobW92ZXMuc29tZSgobSkgPT4gbS5mcm9tID09PSAyNCAmJiBtLnRvID09PSAxNiAmJiAhbS5pc0NhcHR1cmUpKS50b0JlKFxuICAgICAgdHJ1ZSxcbiAgICApO1xuICB9KTtcblxuICBpdChcImRvZXMgbm90IGFkZCBiYWNrd2FyZCBtb3ZlIHdoZW4gdGFyZ2V0IHNxdWFyZSBpcyBvY2N1cGllZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgZW5naW5lLnNldEFjdGl2ZVByZXNldHMoW1xuICAgICAgeyBpZDogUEFXTl9CQUNLV0FSRF9JRCwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuXG4gICAgLy8gQS1wYXduIHN0YXlzIG9uIGEyIChzcXVhcmUgOCk7IGExIChzcXVhcmUgMCkgaG9sZHMgdGhlIHJvb2suXG4gICAgLy8gQmFja3dhcmQgdGFyZ2V0IGExIGlzIG9jY3VwaWVkIC0+IG5vdCBhZGRlZC5cbiAgICBjb25zdCB3aGl0ZUFQYXduID0gcGllY2VBdChlbmdpbmUsIDgpITtcbiAgICBjb25zdCBtb3ZlcyA9IGVuZ2luZVxuICAgICAgLmdldEFsbExlZ2FsTW92ZXMoKVxuICAgICAgLmZpbHRlcigobSkgPT4gbS5waWVjZUlkID09PSB3aGl0ZUFQYXduKTtcbiAgICBleHBlY3QobW92ZXMuc29tZSgobSkgPT4gbS50byA9PT0gMCkpLnRvQmUoZmFsc2UpO1xuICB9KTtcbn0pO1xuXG4vLyDilIDilIDilIAgMy4gVHdvIHdyYXBwaW5nIHByZXNldHMgY29tcG9zZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZGVzY3JpYmUoXCJ0cmFuc2Zvcm1Nb3ZlR2VuZXJhdG9yIOKAlCBjb21wb3NpdGlvblwiLCAoKSA9PiB7XG4gIGl0KFwic2Vjb25kIHByZXNldCByZWNlaXZlcyBmaXJzdCBwcmVzZXQncyBvdXRwdXQ7IGJvdGggY29udHJpYnV0aW9ucyBsYW5kXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiBQQVdOX0JBQ0tXQVJEX0lELCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgICB7IGlkOiBTRUNPTkRfV1JBUF9JRCwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuXG4gICAgLy8gTW92ZSB3aGl0ZSBhLXBhd24gdG8gYTQgKDI0KS4gQmFja3dhcmQgdGFyZ2V0IGEzICgxNikgaXMgZW1wdHkuXG4gICAgLy8gU2lkZXdheXMgdGFyZ2V0IGI0ICgyNSkgaXMgZW1wdHkgKGItcGF3biBpcyBvbiBiMj05KS5cbiAgICBjb25zdCB3aGl0ZUFQYXduID0gcGllY2VBdChlbmdpbmUsIDgpITtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQod2hpdGVBUGF3biwgXCJQb3NpdGlvblwiLCAyNCBhcyBTcXVhcmUpO1xuXG4gICAgY29uc3QgbW92ZXMgPSBlbmdpbmVcbiAgICAgIC5nZXRBbGxMZWdhbE1vdmVzKClcbiAgICAgIC5maWx0ZXIoKG0pID0+IG0ucGllY2VJZCA9PT0gd2hpdGVBUGF3bik7XG5cbiAgICAvLyBDb250cmlidXRpb24gZnJvbSBQQVdOX0JBQ0tXQVJEX0lEOiBhNCAtPiBhMy5cbiAgICBleHBlY3QobW92ZXMuc29tZSgobSkgPT4gbS50byA9PT0gMTYpKS50b0JlKHRydWUpO1xuICAgIC8vIENvbnRyaWJ1dGlvbiBmcm9tIFNFQ09ORF9XUkFQX0lEOiBhNCAtPiBiNCAoMjQgLT4gMjUpLlxuICAgIGV4cGVjdChtb3Zlcy5zb21lKChtKSA9PiBtLnRvID09PSAyNSkpLnRvQmUodHJ1ZSk7XG4gICAgLy8gQmFzZSBmb3J3YXJkIG1vdmUgc3RpbGwgcHJlc2VudC5cbiAgICBleHBlY3QobW92ZXMuc29tZSgobSkgPT4gbS50byA9PT0gMzIpKS50b0JlKHRydWUpO1xuICB9KTtcbn0pO1xuXG4vLyDilIDilIDilIAgNC4gU2VsZi1jaGVjayBmaWx0ZXIgc3RpbGwgYXBwbGllcyBhZnRlciB0cmFuc2Zvcm0g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmRlc2NyaWJlKFwidHJhbnNmb3JtTW92ZUdlbmVyYXRvciDigJQgc2VsZi1jaGVjayBmaWx0ZXIgcnVucyBkb3duc3RyZWFtXCIsICgpID0+IHtcbiAgaXQoXCJ0cmFuc2Zvcm0gY2Fubm90IGJ5cGFzcyBzZWxmLWNoZWNrIGZpbHRlclwiLCAoKSA9PiB7XG4gICAgLy8gU2V0IHVwIGEgY3VzdG9tIHBvc2l0aW9uIHdoZXJlIHRoZSB3aGl0ZSBiaXNob3AgaXMgYWJzb2x1dGVseVxuICAgIC8vIHBpbm5lZCBieSB0aGUgYmxhY2sgcm9vazogVyBraW5nIG9uIGUxLCB3aGl0ZSBiaXNob3Agb24gZTIsXG4gICAgLy8gYmxhY2sgcm9vayBvbiBlOC4gTW92aW5nIHRoZSBiaXNob3Agb2ZmIHRoZSBlLWZpbGUgd291bGQgZXhwb3NlXG4gICAgLy8gdGhlIGtpbmcuIFRoZSBFWFRSQV9NT1ZFU19JRCB0cmFuc2Zvcm0gYWRkcyBhIGJpc2hvcCBtb3ZlIDFcbiAgICAvLyBzcXVhcmUgdXAgKGUyIC0+IGUzKSB3aGljaCBzdGF5cyBvbiB0aGUgZS1maWxlIChzbyB0aGF0J3NcbiAgICAvLyBhY3R1YWxseSBsZWdhbCBpbiB0aGlzIHNldHVwKSDigJQgc28gd2UgdGFyZ2V0IGEgRElGRkVSRU5UXG4gICAgLy8gcG9zaXRpb246IHdlIHBsYWNlIHRoZSBiaXNob3AgT0ZGIHRoZSBlLWZpbGUgYW5kIGhhdmUgaXQgYWRkXG4gICAgLy8gYSBtb3ZlIHRoYXQgbGVhdmVzIHRoZSBlLWZpbGUuIEVhc2llcjogcHV0IHRoZSBraW5nIGFuZFxuICAgIC8vIGF0dGFja2VyIG9uIGEgcmFuaywgYmlzaG9wIGFzIHRoZSBwaW5uZWQgcGllY2UsIGFuZCBoYXZlIHRoZVxuICAgIC8vIHRyYW5zZm9ybSBhZGQgYSBtb3ZlIHRoYXQgc3RlcHMgb2ZmIHRoZSByYW5rLlxuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSh7IGxheW91dDogRU1QVFlfTEFZT1VUIH0pO1xuXG4gICAgLy8gV2hpdGUga2luZyBvbiBhMSAoMCk7IHdoaXRlIGJpc2hvcCBvbiBhMiAoOCk7IGJsYWNrIHJvb2sgb24gYTggKDU2KS5cbiAgICAvLyBCaXNob3AgaXMgcGlubmVkIGFsb25nIHRoZSBhLWZpbGUuIEFkZGluZyBhIG1vdmUgXCJ1cCAxXCIgPSBhM1xuICAgIC8vIChhOC1hMSBpcyB0aGUgcGluIGxpbmUpOyBhMyBpcyBzdGlsbCBvbiB0aGUgYS1maWxlLCBzbyB0aGUgcGluXG4gICAgLy8gcmVtYWlucyBpbnRhY3QuIE5PIOKAlCBcInVwIDFcIiBpbiBvdXIgaGVscGVyIGlzICs4ID0gZnJvbSs4IHNvXG4gICAgLy8gYTIoOCkgKyA4ID0gYTMoMTYpLCBzdGlsbCBvbiBmaWxlIGEsIHBpbiBpbnRhY3QuXG4gICAgLy9cbiAgICAvLyBCZXR0ZXI6IHB1dCB0aGUgYmlzaG9wIG9uIGIyICg5KSwga2luZyBvbiBhMSAoMCksIHJvb2sgb24gaDEgKDcpXG4gICAgLy8gYWxvbmcgcmFuayAxLiBUaGUgYmlzaG9wIGlzIE5PVCBwaW5uZWQg4oCUIGtpbmcgaXMgb24gYTEsIG5vdFxuICAgIC8vIGFsb25nIGIyJ3MgbGluZXMuIFdlIG5lZWQgYSByZWFsIHBpbi5cbiAgICAvL1xuICAgIC8vIENsZWFuZXN0IHBpbjoga2luZyBvbiBhMSAoMCksIHdoaXRlIHBpZWNlIG9uIGQxICgzKSwgYmxhY2sgcm9va1xuICAgIC8vIG9uIGgxICg3KSDigJQgdGhhdCdzIGEgcGluIGFsb25nIHJhbmsgMS4gVGhlIHRyYW5zZm9ybSBhZGRzXG4gICAgLy8gXCIrOFwiID0gdXAgb25lIHJhbmsuIFRoZSB3aGl0ZSBwaWVjZSBtb3ZpbmcgdXAgb25lIHJhbmsgc3RlcHNcbiAgICAvLyBvZmYgcmFuayAxIGFuZCBleHBvc2VzIHRoZSBraW5nIHRvIHRoZSByb29rLiBUaGUgc2VsZi1jaGVja1xuICAgIC8vIGZpbHRlciBNVVNUIHBydW5lIGl0LlxuICAgIGNvbnN0IHdoaXRlS2luZ0lkID0gZW5naW5lLnNlc3Npb24ubmV4dElkKCk7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KHdoaXRlS2luZ0lkLCBcIlBpZWNlVHlwZVwiLCBcImtpbmdcIik7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KHdoaXRlS2luZ0lkLCBcIkNvbG9yXCIsIFwid2hpdGVcIik7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KHdoaXRlS2luZ0lkLCBcIlBvc2l0aW9uXCIsIDAgYXMgU3F1YXJlKTtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQod2hpdGVLaW5nSWQsIFwiSGFzTW92ZWRcIiwgZmFsc2UpO1xuXG4gICAgLy8gUGlubmVkIHdoaXRlIHBpZWNlOiB1c2UgYSBrbmlnaHQgYmVjYXVzZSBpdHMgYmFzZSBtb3ZlcyBpbmNsdWRlXG4gICAgLy8gbmF0dXJhbCBvZmYtcmFuayBtb3ZlcyBhbnl3YXkg4oCUIHRob3NlIHdpbGwgYWxsIGJlIHBydW5lZCBieSB0aGVcbiAgICAvLyBmaWx0ZXIuIFRoZSB0cmFuc2Zvcm0gYWRkcyBvbmUgbW9yZSBvZmYtcmFuayBtb3ZlOyBpdCBtdXN0IEFMU09cbiAgICAvLyBiZSBwcnVuZWQuXG4gICAgY29uc3Qgd2hpdGVLbmlnaHRJZCA9IGVuZ2luZS5zZXNzaW9uLm5leHRJZCgpO1xuICAgIGVuZ2luZS5zZXNzaW9uLmluc2VydCh3aGl0ZUtuaWdodElkLCBcIlBpZWNlVHlwZVwiLCBcImtuaWdodFwiKTtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQod2hpdGVLbmlnaHRJZCwgXCJDb2xvclwiLCBcIndoaXRlXCIpO1xuICAgIGVuZ2luZS5zZXNzaW9uLmluc2VydCh3aGl0ZUtuaWdodElkLCBcIlBvc2l0aW9uXCIsIDMgYXMgU3F1YXJlKTsgLy8gZDFcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQod2hpdGVLbmlnaHRJZCwgXCJIYXNNb3ZlZFwiLCBmYWxzZSk7XG5cbiAgICAvLyBCbGFjayByb29rIG9uIGgxIOKAlCBwaW5uaW5nIHRoZSBrbmlnaHQgYWxvbmcgcmFuayAxLlxuICAgIGNvbnN0IGJsYWNrUm9va0lkID0gZW5naW5lLnNlc3Npb24ubmV4dElkKCk7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KGJsYWNrUm9va0lkLCBcIlBpZWNlVHlwZVwiLCBcInJvb2tcIik7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KGJsYWNrUm9va0lkLCBcIkNvbG9yXCIsIFwiYmxhY2tcIik7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KGJsYWNrUm9va0lkLCBcIlBvc2l0aW9uXCIsIDcgYXMgU3F1YXJlKTsgLy8gaDFcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQoYmxhY2tSb29rSWQsIFwiSGFzTW92ZWRcIiwgZmFsc2UpO1xuXG4gICAgLy8gQmxhY2sga2luZyBzb21ld2hlcmUgc2FmZSBzbyB0aGUgYm9hcmQgaXMgd2VsbC1mb3JtZWQuXG4gICAgY29uc3QgYmxhY2tLaW5nSWQgPSBlbmdpbmUuc2Vzc2lvbi5uZXh0SWQoKTtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQoYmxhY2tLaW5nSWQsIFwiUGllY2VUeXBlXCIsIFwia2luZ1wiKTtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQoYmxhY2tLaW5nSWQsIFwiQ29sb3JcIiwgXCJibGFja1wiKTtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQoYmxhY2tLaW5nSWQsIFwiUG9zaXRpb25cIiwgNjMgYXMgU3F1YXJlKTsgLy8gaDhcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQoYmxhY2tLaW5nSWQsIFwiSGFzTW92ZWRcIiwgZmFsc2UpO1xuXG4gICAgLy8gQWN0aXZhdGUgdGhlIHRyYW5zZm9ybSBwcmVzZXQuIEl0IGFkZHMgYSBcIis4IHNxdWFyZXNcIiBtb3ZlIGZvclxuICAgIC8vIHRoZSBlbnRpdHkgd2hvc2UgaWQgaXQgdGFyZ2V0cyDigJQgd2UgbmVlZCB0byB0YXJnZXQgdGhlIGtuaWdodC5cbiAgICAvLyBCdXQgRVhUUkFfTU9WRVNfSUQgZmlyZXMgZm9yIGV2ZXJ5IHBpZWNlIGl0cyB3cmFwcGVyIHNlZXMuIFRoYXQnc1xuICAgIC8vIGZpbmU6IHRoZSBlZmZlY3Qgb24gYW55IE5PTi1rbmlnaHQgcGllY2UgaXMgYWxzbyBhbiBvZmYtcmFua1xuICAgIC8vIG1vdmUgdGhhdCBlaXRoZXIgc3RheXMgbGVnYWwgb24gaXRzIG93biBtZXJpdHMgb3IgaXMgcHJ1bmVkLiBUaGVcbiAgICAvLyBhc3NlcnRpb24gd2UgY2FyZSBhYm91dCBpcyB0aGF0IHRoZSBtb3ZlIGQxLT5kMiAoa25pZ2h0IG9mZiB0aGVcbiAgICAvLyBwaW4pIGRvZXMgTk9UIGFwcGVhciBpbiBsZWdhbCBtb3Zlcy5cbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiBFWFRSQV9NT1ZFU19JRCwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuXG4gICAgY29uc3QgbGVnYWwgPSBlbmdpbmUuZ2V0QWxsTGVnYWxNb3ZlcygpO1xuXG4gICAgLy8gVGhlIHRyYW5zZm9ybSBhZGRlZCBhIHBzZXVkby1sZWdhbCBtb3ZlIGQxIC0+IGQyICgzIC0+IDExKSBmb3JcbiAgICAvLyB0aGUga25pZ2h0LiBUaGUgc2VsZi1jaGVjayBmaWx0ZXIgTVVTVCBwcnVuZSBpdCBiZWNhdXNlIHRoZVxuICAgIC8vIGtuaWdodCBpcyBhYnNvbHV0ZWx5IHBpbm5lZC4gSWYgdGhlIHNlbGYtY2hlY2sgZmlsdGVyIHdlcmVcbiAgICAvLyBieXBhc3NlZCwgdGhpcyBhc3NlcnRpb24gd291bGQgZmFpbC5cbiAgICBjb25zdCBrbmlnaHRPZmZSYW5rID0gbGVnYWwuZmluZChcbiAgICAgIChtKSA9PiBtLnBpZWNlSWQgPT09IHdoaXRlS25pZ2h0SWQgJiYgbS50byA9PT0gMTEsXG4gICAgKTtcbiAgICBleHBlY3Qoa25pZ2h0T2ZmUmFuaykudG9CZVVuZGVmaW5lZCgpO1xuXG4gICAgLy8gU2FuaXR5OiB0aGUga25pZ2h0IGhhcyBOTyBsZWdhbCBtb3ZlcyBhdCBhbGwgKGV2ZXJ5IGtuaWdodCBqdW1wXG4gICAgLy8gb2ZmIHJhbmsgMSB3b3VsZCBleHBvc2UgdGhlIGtpbmcpLiBJZiB0aGUgc2VsZi1jaGVjayBmaWx0ZXIgd2VyZVxuICAgIC8vIGJ5cGFzc2VkIHdlJ2Qgc2VlIG1vdmVzIGhlcmUuXG4gICAgY29uc3Qga25pZ2h0TW92ZXMgPSBsZWdhbC5maWx0ZXIoKG0pID0+IG0ucGllY2VJZCA9PT0gd2hpdGVLbmlnaHRJZCk7XG4gICAgZXhwZWN0KGtuaWdodE1vdmVzKS50b0VxdWFsKFtdKTtcbiAgfSk7XG59KTtcbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9jaGVzcy9zcmMvcHJlc2V0cy90cmFuc2Zvcm0taG9vay50ZXN0LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/2ac6444d3315f9938e27f0ba0b4b4fd273d3b93e b/7xOfJqsDU787fe61oSCq1/web/2ac6444d3315f9938e27f0ba0b4b4fd273d3b93e deleted file mode 100644 index fab0a2b..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/2ac6444d3315f9938e27f0ba0b4b4fd273d3b93e +++ /dev/null @@ -1,5 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "default", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_export_default__ } catch {} }}); -const __vite_ssr_export_default__ = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%20width='45'%20height='45'%3e%3cg%20style='opacity:1;%20fill:none;%20fill-rule:evenodd;%20fill-opacity:1;%20stroke:%23000000;%20stroke-width:1.5;%20stroke-linecap:round;%20stroke-linejoin:round;%20stroke-miterlimit:4;%20stroke-dasharray:none;%20stroke-opacity:1;'%20transform='translate(0,0.6)'%3e%3cg%20style='fill:%23000000;%20stroke:%23000000;%20stroke-linecap:butt;'%3e%3cpath%20d='M%209,36%20C%2012.39,35.03%2019.11,36.43%2022.5,34%20C%2025.89,36.43%2032.61,35.03%2036,36%20C%2036,36%2037.65,36.54%2039,38%20C%2038.32,38.97%2037.35,38.99%2036,38.5%20C%2032.61,37.53%2025.89,38.96%2022.5,37.5%20C%2019.11,38.96%2012.39,37.53%209,38.5%20C%207.65,38.99%206.68,38.97%206,38%20C%207.35,36.54%209,36%209,36%20z'/%3e%3cpath%20d='M%2015,32%20C%2017.5,34.5%2027.5,34.5%2030,32%20C%2030.5,30.5%2030,30%2030,30%20C%2030,27.5%2027.5,26%2027.5,26%20C%2033,24.5%2033.5,14.5%2022.5,10.5%20C%2011.5,14.5%2012,24.5%2017.5,26%20C%2017.5,26%2015,27.5%2015,30%20C%2015,30%2014.5,30.5%2015,32%20z'/%3e%3cpath%20d='M%2025%208%20A%202.5%202.5%200%201%201%2020,8%20A%202.5%202.5%200%201%201%2025%208%20z'/%3e%3c/g%3e%3cpath%20d='M%2017.5,26%20L%2027.5,26%20M%2015,30%20L%2030,30%20M%2022.5,15.5%20L%2022.5,20.5%20M%2020,18%20L%2025,18'%20style='fill:none;%20stroke:%23ffffff;%20stroke-linejoin:miter;'/%3e%3c/g%3e%3c/svg%3e" - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJsYWNrLWJpc2hvcC5zdmciXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjP3htbCUyMHZlcnNpb249JzEuMCclMjBlbmNvZGluZz0nVVRGLTgnJTIwc3RhbmRhbG9uZT0nbm8nPyUzZSUzYyFET0NUWVBFJTIwc3ZnJTIwUFVCTElDJTIwJy0vL1czQy8vRFREJTIwU1ZHJTIwMS4xLy9FTiclMjAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJyUzZSUzY3N2ZyUyMHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclMjB2ZXJzaW9uPScxLjEnJTIwd2lkdGg9JzQ1JyUyMGhlaWdodD0nNDUnJTNlJTNjZyUyMHN0eWxlPSdvcGFjaXR5OjE7JTIwZmlsbDpub25lOyUyMGZpbGwtcnVsZTpldmVub2RkOyUyMGZpbGwtb3BhY2l0eToxOyUyMHN0cm9rZTolMjMwMDAwMDA7JTIwc3Ryb2tlLXdpZHRoOjEuNTslMjBzdHJva2UtbGluZWNhcDpyb3VuZDslMjBzdHJva2UtbGluZWpvaW46cm91bmQ7JTIwc3Ryb2tlLW1pdGVybGltaXQ6NDslMjBzdHJva2UtZGFzaGFycmF5Om5vbmU7JTIwc3Ryb2tlLW9wYWNpdHk6MTsnJTIwdHJhbnNmb3JtPSd0cmFuc2xhdGUoMCwwLjYpJyUzZSUzY2clMjBzdHlsZT0nZmlsbDolMjMwMDAwMDA7JTIwc3Ryb2tlOiUyMzAwMDAwMDslMjBzdHJva2UtbGluZWNhcDpidXR0OyclM2UlM2NwYXRoJTIwZD0nTSUyMDksMzYlMjBDJTIwMTIuMzksMzUuMDMlMjAxOS4xMSwzNi40MyUyMDIyLjUsMzQlMjBDJTIwMjUuODksMzYuNDMlMjAzMi42MSwzNS4wMyUyMDM2LDM2JTIwQyUyMDM2LDM2JTIwMzcuNjUsMzYuNTQlMjAzOSwzOCUyMEMlMjAzOC4zMiwzOC45NyUyMDM3LjM1LDM4Ljk5JTIwMzYsMzguNSUyMEMlMjAzMi42MSwzNy41MyUyMDI1Ljg5LDM4Ljk2JTIwMjIuNSwzNy41JTIwQyUyMDE5LjExLDM4Ljk2JTIwMTIuMzksMzcuNTMlMjA5LDM4LjUlMjBDJTIwNy42NSwzOC45OSUyMDYuNjgsMzguOTclMjA2LDM4JTIwQyUyMDcuMzUsMzYuNTQlMjA5LDM2JTIwOSwzNiUyMHonLyUzZSUzY3BhdGglMjBkPSdNJTIwMTUsMzIlMjBDJTIwMTcuNSwzNC41JTIwMjcuNSwzNC41JTIwMzAsMzIlMjBDJTIwMzAuNSwzMC41JTIwMzAsMzAlMjAzMCwzMCUyMEMlMjAzMCwyNy41JTIwMjcuNSwyNiUyMDI3LjUsMjYlMjBDJTIwMzMsMjQuNSUyMDMzLjUsMTQuNSUyMDIyLjUsMTAuNSUyMEMlMjAxMS41LDE0LjUlMjAxMiwyNC41JTIwMTcuNSwyNiUyMEMlMjAxNy41LDI2JTIwMTUsMjcuNSUyMDE1LDMwJTIwQyUyMDE1LDMwJTIwMTQuNSwzMC41JTIwMTUsMzIlMjB6Jy8lM2UlM2NwYXRoJTIwZD0nTSUyMDI1JTIwOCUyMEElMjAyLjUlMjAyLjUlMjAwJTIwMSUyMDElMjAyMCw4JTIwQSUyMDIuNSUyMDIuNSUyMDAlMjAxJTIwMSUyMDI1JTIwOCUyMHonLyUzZSUzYy9nJTNlJTNjcGF0aCUyMGQ9J00lMjAxNy41LDI2JTIwTCUyMDI3LjUsMjYlMjBNJTIwMTUsMzAlMjBMJTIwMzAsMzAlMjBNJTIwMjIuNSwxNS41JTIwTCUyMDIyLjUsMjAuNSUyME0lMjAyMCwxOCUyMEwlMjAyNSwxOCclMjBzdHlsZT0nZmlsbDpub25lOyUyMHN0cm9rZTolMjNmZmZmZmY7JTIwc3Ryb2tlLWxpbmVqb2luOm1pdGVyOycvJTNlJTNjL2clM2UlM2Mvc3ZnJTNlXCIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLG1DQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/2c559355ba6fe30981ae7230cd0760a8e8550068 b/7xOfJqsDU787fe61oSCq1/web/2c559355ba6fe30981ae7230cd0760a8e8550068 deleted file mode 100644 index d2b0123..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/2c559355ba6fe30981ae7230cd0760a8e8550068 +++ /dev/null @@ -1,54 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "TypeModifierSchema", { enumerable: true, configurable: true, get(){ try { return TypeModifierSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "InstanceModifierSchema", { enumerable: true, configurable: true, get(){ try { return InstanceModifierSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "ModifierProfileSchema", { enumerable: true, configurable: true, get(){ try { return ModifierProfileSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "parseModifierProfile", { enumerable: true, configurable: true, get(){ try { return parseModifierProfile } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "serializeModifierProfile", { enumerable: true, configurable: true, get(){ try { return serializeModifierProfile } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/zod@4.3.6/node_modules/zod/index.js", {"importedNames":["z"]}); -const ModifierKindIdSchema = __vite_ssr_import_0__.z.enum([ - "hp-bonus", - "range-bonus", - "direction-additions", - "capture-flags", - "promotion-override", - "damage-resistance" -]); -const PieceTypeSchema = __vite_ssr_import_0__.z.enum([ - "pawn", - "knight", - "bishop", - "rook", - "queen", - "king" -]); -const PieceColorExtSchema = __vite_ssr_import_0__.z.enum(["white", "black", "both"]); -const SquareStringSchema = __vite_ssr_import_0__.z.string().regex(/^[a-h][1-8]$/, "Must be algebraic notation (a1-h8)"); -const TypeModifierSchema = __vite_ssr_import_0__.z.object({ - kind: ModifierKindIdSchema, - pieceType: PieceTypeSchema, - color: PieceColorExtSchema, - value: __vite_ssr_import_0__.z.unknown() -}); -const InstanceModifierSchema = __vite_ssr_import_0__.z.object({ - kind: ModifierKindIdSchema, - square: SquareStringSchema, - value: __vite_ssr_import_0__.z.unknown() -}); -const ModifierProfileSchema = __vite_ssr_import_0__.z.object({ - id: __vite_ssr_import_0__.z.string().min(1), - name: __vite_ssr_import_0__.z.string().min(1), - description: __vite_ssr_import_0__.z.string(), - layoutId: __vite_ssr_import_0__.z.string().optional(), - perType: __vite_ssr_import_0__.z.array(TypeModifierSchema), - perInstance: __vite_ssr_import_0__.z.array(InstanceModifierSchema), - version: __vite_ssr_import_0__.z.literal(1), - source: __vite_ssr_import_0__.z.enum(["premade", "custom"]) -}); -function parseModifierProfile(raw) { - return ModifierProfileSchema.parse(raw); -}; -function serializeModifierProfile(profile) { - return ModifierProfileSchema.parse(profile); -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7QUFRQTtBQU9BLE1BQU0sdUJBQXVCLHdCQUFFLEtBQUs7QUFBQSxFQUNsQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0YsQ0FBQztBQUVELE1BQU0sa0JBQWtCLHdCQUFFLEtBQUs7QUFBQSxFQUM3QjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0YsQ0FBQztBQUdELE1BQU0sc0JBQXNCLHdCQUFFLEtBQUssQ0FBQyxTQUFTLFNBQVMsTUFBTSxDQUFDO0FBRzdELE1BQU0scUJBQXFCLHdCQUN4QixPQUFPLEVBQ1AsTUFBTSxnQkFBZ0Isb0NBQW9DO0FBTXRELE1BQU0scUJBQXFCLHdCQUFFLE9BQU87QUFBQSxFQUN6QyxNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxPQUFPO0FBQUEsRUFDUCxPQUFPLHdCQUFFLFFBQVE7QUFDbkIsQ0FBQztBQU1NLE1BQU0seUJBQXlCLHdCQUFFLE9BQU87QUFBQSxFQUM3QyxNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixPQUFPLHdCQUFFLFFBQVE7QUFDbkIsQ0FBQztBQU1NLE1BQU0sd0JBQXdCLHdCQUFFLE9BQU87QUFBQSxFQUM1QyxJQUFJLHdCQUFFLE9BQU8sRUFBRSxJQUFJLENBQUM7QUFBQSxFQUNwQixNQUFNLHdCQUFFLE9BQU8sRUFBRSxJQUFJLENBQUM7QUFBQSxFQUN0QixhQUFhLHdCQUFFLE9BQU87QUFBQSxFQUN0QixVQUFVLHdCQUFFLE9BQU8sRUFBRSxTQUFTO0FBQUEsRUFDOUIsU0FBUyx3QkFBRSxNQUFNLGtCQUFrQjtBQUFBLEVBQ25DLGFBQWEsd0JBQUUsTUFBTSxzQkFBc0I7QUFBQSxFQUMzQyxTQUFTLHdCQUFFLFFBQVEsQ0FBQztBQUFBLEVBQ3BCLFFBQVEsd0JBQUUsS0FBSyxDQUFDLFdBQVcsUUFBUSxDQUFDO0FBQ3RDLENBQUM7QUFPTSxTQUFTLHFCQUFxQixLQUErQjtBQUNsRSxTQUFPLHNCQUFzQixNQUFNLEdBQUc7QUFDeEM7QUFHTyxTQUFTLHlCQUF5QixTQUFtQztBQUMxRSxTQUFPLHNCQUFzQixNQUFNLE9BQU87QUFDNUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInNjaGVtYS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFpvZCBzY2hlbWFzIGZvciBNb2RpZmllclByb2ZpbGUgc2VyaWFsaXphdGlvbiBhbmQgdmFsaWRhdGlvbi5cbiAqXG4gKiBUaGUgYHZhbHVlYCBmaWVsZCBvbiBUeXBlTW9kaWZpZXIgYW5kIEluc3RhbmNlTW9kaWZpZXIgaXMgaW50ZW50aW9uYWxseVxuICogYHoudW5rbm93bigpYCDigJQgcGVyLWtpbmQgdmFsdWUgdmFsaWRhdGlvbiBoYXBwZW5zIGF0IGRlc2NyaXB0b3JcbiAqIHJlZ2lzdHJhdGlvbiB0aW1lLCBub3QgYXQgcHJvZmlsZS1wYXJzZSB0aW1lLiBUaGlzIGtlZXBzIHRoZSBzY2hlbWFcbiAqIGZvcndhcmRzLWNvbXBhdGlibGUgd2l0aCBmdXR1cmUgbW9kaWZpZXIga2luZHMuXG4gKi9cbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgdHlwZSB7IE1vZGlmaWVyUHJvZmlsZSB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHJpbWl0aXZlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IE1vZGlmaWVyS2luZElkU2NoZW1hID0gei5lbnVtKFtcbiAgXCJocC1ib251c1wiLFxuICBcInJhbmdlLWJvbnVzXCIsXG4gIFwiZGlyZWN0aW9uLWFkZGl0aW9uc1wiLFxuICBcImNhcHR1cmUtZmxhZ3NcIixcbiAgXCJwcm9tb3Rpb24tb3ZlcnJpZGVcIixcbiAgXCJkYW1hZ2UtcmVzaXN0YW5jZVwiLFxuXSk7XG5cbmNvbnN0IFBpZWNlVHlwZVNjaGVtYSA9IHouZW51bShbXG4gIFwicGF3blwiLFxuICBcImtuaWdodFwiLFxuICBcImJpc2hvcFwiLFxuICBcInJvb2tcIixcbiAgXCJxdWVlblwiLFxuICBcImtpbmdcIixcbl0pO1xuXG4vLyBQaWVjZUNvbG9yIGV4dGVuZGVkIHdpdGggXCJib3RoXCIgZm9yIFR5cGVNb2RpZmllci5jb2xvclxuY29uc3QgUGllY2VDb2xvckV4dFNjaGVtYSA9IHouZW51bShbXCJ3aGl0ZVwiLCBcImJsYWNrXCIsIFwiYm90aFwiXSk7XG5cbi8qKiBBbGdlYnJhaWMgbm90YXRpb24gc3F1YXJlOiBcImExXCIuLlwiaDhcIiAqL1xuY29uc3QgU3F1YXJlU3RyaW5nU2NoZW1hID0gelxuICAuc3RyaW5nKClcbiAgLnJlZ2V4KC9eW2EtaF1bMS04XSQvLCBcIk11c3QgYmUgYWxnZWJyYWljIG5vdGF0aW9uIChhMS1oOClcIik7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVHlwZU1vZGlmaWVyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGNvbnN0IFR5cGVNb2RpZmllclNjaGVtYSA9IHoub2JqZWN0KHtcbiAga2luZDogTW9kaWZpZXJLaW5kSWRTY2hlbWEsXG4gIHBpZWNlVHlwZTogUGllY2VUeXBlU2NoZW1hLFxuICBjb2xvcjogUGllY2VDb2xvckV4dFNjaGVtYSxcbiAgdmFsdWU6IHoudW5rbm93bigpLFxufSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSW5zdGFuY2VNb2RpZmllclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBJbnN0YW5jZU1vZGlmaWVyU2NoZW1hID0gei5vYmplY3Qoe1xuICBraW5kOiBNb2RpZmllcktpbmRJZFNjaGVtYSxcbiAgc3F1YXJlOiBTcXVhcmVTdHJpbmdTY2hlbWEsXG4gIHZhbHVlOiB6LnVua25vd24oKSxcbn0pO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1vZGlmaWVyUHJvZmlsZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBNb2RpZmllclByb2ZpbGVTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLm1pbigxKSxcbiAgbmFtZTogei5zdHJpbmcoKS5taW4oMSksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLFxuICBsYXlvdXRJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwZXJUeXBlOiB6LmFycmF5KFR5cGVNb2RpZmllclNjaGVtYSksXG4gIHBlckluc3RhbmNlOiB6LmFycmF5KEluc3RhbmNlTW9kaWZpZXJTY2hlbWEpLFxuICB2ZXJzaW9uOiB6LmxpdGVyYWwoMSksXG4gIHNvdXJjZTogei5lbnVtKFtcInByZW1hZGVcIiwgXCJjdXN0b21cIl0pLFxufSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljIEFQSVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBQYXJzZSBhbiB1bmtub3duIHZhbHVlIGFzIGEgTW9kaWZpZXJQcm9maWxlLiBUaHJvd3MgWm9kRXJyb3Igb24gZmFpbHVyZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU1vZGlmaWVyUHJvZmlsZShyYXc6IHVua25vd24pOiBNb2RpZmllclByb2ZpbGUge1xuICByZXR1cm4gTW9kaWZpZXJQcm9maWxlU2NoZW1hLnBhcnNlKHJhdykgYXMgdW5rbm93biBhcyBNb2RpZmllclByb2ZpbGU7XG59XG5cbi8qKiBTZXJpYWxpemUgYSBNb2RpZmllclByb2ZpbGUgdG8gYSBKU09OLXNhZmUgcGxhaW4gb2JqZWN0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZU1vZGlmaWVyUHJvZmlsZShwcm9maWxlOiBNb2RpZmllclByb2ZpbGUpOiB1bmtub3duIHtcbiAgcmV0dXJuIE1vZGlmaWVyUHJvZmlsZVNjaGVtYS5wYXJzZShwcm9maWxlKTtcbn1cbiJdLCJmaWxlIjoiL3NyYy9tb2RpZmllcnMvc2NoZW1hLnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/2c9c612179fe3efe81a782d67ce825dfdbc39e24 b/7xOfJqsDU787fe61oSCq1/web/2c9c612179fe3efe81a782d67ce825dfdbc39e24 deleted file mode 100644 index aa4d25b..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/2c9c612179fe3efe81a782d67ce825dfdbc39e24 +++ /dev/null @@ -1,54 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "pieceAt", { enumerable: true, configurable: true, get(){ try { return pieceAt } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "hpOf", { enumerable: true, configurable: true, get(){ try { return hpOf } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "typeOf", { enumerable: true, configurable: true, get(){ try { return typeOf } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "exists", { enumerable: true, configurable: true, get(){ try { return exists } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "clearBoard", { enumerable: true, configurable: true, get(){ try { return clearBoard } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "placePiece", { enumerable: true, configurable: true, get(){ try { return placePiece } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/engine.ts", {"importedNames":["ChessEngine"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["algebraicToSquare"]}); -function pieceAt(engine, square) { - const target = (0,__vite_ssr_import_1__.algebraicToSquare)(square); - for (const f of engine.session.allFacts()) { - if (f.attr === "Position" && f.value === target) return f.id; - }; - return null; -}; -function hpOf(engine, id) { - if (!engine.session.contains(id, "Hp")) return null; - return engine.session.get(id, "Hp"); -}; -function typeOf(engine, id) { - if (!engine.session.contains(id, "PieceType")) return null; - return engine.session.get(id, "PieceType"); -}; -function exists(engine, id) { - return engine.session.contains(id, "PieceType"); -}; -function clearBoard(engine, opts = {}) { - const preserveKings = opts.preserveKings ?? true; - const facts = engine.session.allFacts(); - const toClear = []; - for (const f of facts) { - if (f.attr !== "PieceType") continue; - if (f.id <= 0) continue; - if (preserveKings && f.value === "king") continue; - toClear.push(f.id); - }; - for (const id of toClear) { - for (const attr of engine.effectivePieceAttrs) { - if (engine.session.contains(id, attr)) engine.session.retract(id, attr); - } - } -}; -function placePiece(engine, type, color, square, opts = {}) { - const id = engine.session.nextId(); - const sq = typeof square === "string" ? (0,__vite_ssr_import_1__.algebraicToSquare)(square) : square; - engine.session.insert(id, "PieceType", type); - engine.session.insert(id, "Color", color); - engine.session.insert(id, "Position", sq); - engine.session.insert(id, "HasMoved", opts.hasMoved ?? false); - return id; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBV0E7QUFFQTtBQUdPLFNBQVMsUUFDZCxRQUNBLFFBQ2lCO0FBQ2pCLFFBQU0sWUFBUyx5Q0FBa0IsTUFBTTtBQUN2QyxhQUFXLEtBQUssT0FBTyxRQUFRLFNBQVMsR0FBRztBQUN6QyxRQUFJLEVBQUUsU0FBUyxjQUFjLEVBQUUsVUFBVSxPQUFRLFFBQU8sRUFBRTtBQUFBLEVBQzVEO0FBQ0EsU0FBTztBQUNUO0FBR08sU0FBUyxLQUFLLFFBQXFCLElBQTZCO0FBQ3JFLE1BQUksQ0FBQyxPQUFPLFFBQVEsU0FBUyxJQUFJLElBQUksRUFBRyxRQUFPO0FBQy9DLFNBQU8sT0FBTyxRQUFRLElBQUksSUFBSSxJQUFJO0FBQ3BDO0FBR08sU0FBUyxPQUFPLFFBQXFCLElBQTZCO0FBQ3ZFLE1BQUksQ0FBQyxPQUFPLFFBQVEsU0FBUyxJQUFJLFdBQVcsRUFBRyxRQUFPO0FBQ3RELFNBQU8sT0FBTyxRQUFRLElBQUksSUFBSSxXQUFXO0FBQzNDO0FBR08sU0FBUyxPQUFPLFFBQXFCLElBQXVCO0FBQ2pFLFNBQU8sT0FBTyxRQUFRLFNBQVMsSUFBSSxXQUFXO0FBQ2hEO0FBWU8sU0FBUyxXQUNkLFFBQ0EsT0FBNkMsQ0FBQyxHQUN4QztBQUNOLFFBQU0sZ0JBQWdCLEtBQUssaUJBQWlCO0FBQzVDLFFBQU0sUUFBUSxPQUFPLFFBQVEsU0FBUztBQUN0QyxRQUFNLFVBQXNCLENBQUM7QUFDN0IsYUFBVyxLQUFLLE9BQU87QUFDckIsUUFBSSxFQUFFLFNBQVMsWUFBYTtBQUM1QixRQUFLLEVBQUUsTUFBaUIsRUFBRztBQUMzQixRQUFJLGlCQUFpQixFQUFFLFVBQVUsT0FBUTtBQUN6QyxZQUFRLEtBQUssRUFBRSxFQUFFO0FBQUEsRUFDbkI7QUFDQSxhQUFXLE1BQU0sU0FBUztBQUN4QixlQUFXLFFBQVEsT0FBTyxxQkFBcUI7QUFDN0MsVUFBSSxPQUFPLFFBQVEsU0FBUyxJQUFJLElBQUksRUFBRyxRQUFPLFFBQVEsUUFBUSxJQUFJLElBQUk7QUFBQSxJQUN4RTtBQUFBLEVBQ0Y7QUFDRjtBQVVPLFNBQVMsV0FDZCxRQUNBLE1BQ0EsT0FDQSxRQUNBLE9BQXdDLENBQUMsR0FDL0I7QUFDVixRQUFNLEtBQUssT0FBTyxRQUFRLE9BQU87QUFDakMsUUFBTSxLQUFLLE9BQU8sV0FBVyxjQUFXLHlDQUFrQixNQUFNLElBQUk7QUFDcEUsU0FBTyxRQUFRLE9BQU8sSUFBSSxhQUFhLElBQUk7QUFDM0MsU0FBTyxRQUFRLE9BQU8sSUFBSSxTQUFTLEtBQUs7QUFDeEMsU0FBTyxRQUFRLE9BQU8sSUFBSSxZQUFZLEVBQUU7QUFDeEMsU0FBTyxRQUFRLE9BQU8sSUFBSSxZQUFZLEtBQUssWUFBWSxLQUFLO0FBQzVELFNBQU87QUFDVCIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsidGVzdC11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNoYXJlZCBoZWxwZXJzIGZvciBwcmVzZXQgdGVzdHMuXG4gKlxuICogRm91ciBwcmVzZXQgdGVzdCBmaWxlcyB1c2VkIHRvIGVhY2ggZGVmaW5lIHRoZWlyIG93biBjb3BpZXMgb2ZcbiAqIGBwaWVjZUF0YCwgYGhwT2ZgLCBgdHlwZU9mYCwgYW5kIGBjbGVhckJvYXJkYC4gVGhpcyBtb2R1bGVcbiAqIGNlbnRyYWxpemVzIHRoZW0gc28gbmV3IHByZXNldCB0ZXN0cyBjYW4gaW1wb3J0IHJhdGhlciB0aGFuXG4gKiBjb3B5LXBhc3RlLlxuICpcbiAqIEludGVudGlvbmFsbHkgbmFtZWQgYHRlc3QtdXRpbHMudHNgIChub3QgYC50ZXN0LnRzYCkgc28gdml0ZXN0XG4gKiBkb2Vzbid0IG1pc3Rha2UgaXQgZm9yIGEgdGVzdCBmaWxlLlxuICovXG5pbXBvcnQgeyBDaGVzc0VuZ2luZSB9IGZyb20gXCIuLi9lbmdpbmUuanNcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB7IGFsZ2VicmFpY1RvU3F1YXJlIH0gZnJvbSBcIi4uL2Nvb3JkLmpzXCI7XG5cbi8qKiBMb29rIHVwIHRoZSBwaWVjZSBlbnRpdHkgb24gYSBnaXZlbiBhbGdlYnJhaWMgc3F1YXJlLCBpZiBhbnkuICovXG5leHBvcnQgZnVuY3Rpb24gcGllY2VBdChcbiAgZW5naW5lOiBDaGVzc0VuZ2luZSxcbiAgc3F1YXJlOiBzdHJpbmcsXG4pOiBFbnRpdHlJZCB8IG51bGwge1xuICBjb25zdCB0YXJnZXQgPSBhbGdlYnJhaWNUb1NxdWFyZShzcXVhcmUpO1xuICBmb3IgKGNvbnN0IGYgb2YgZW5naW5lLnNlc3Npb24uYWxsRmFjdHMoKSkge1xuICAgIGlmIChmLmF0dHIgPT09IFwiUG9zaXRpb25cIiAmJiBmLnZhbHVlID09PSB0YXJnZXQpIHJldHVybiBmLmlkO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKiogUmVhZCB0aGUgSHAgYXR0cmlidXRlIG9mIGEgcGllY2UuIE51bGwgd2hlbiBIcCBpc24ndCBzZXQuICovXG5leHBvcnQgZnVuY3Rpb24gaHBPZihlbmdpbmU6IENoZXNzRW5naW5lLCBpZDogRW50aXR5SWQpOiBudW1iZXIgfCBudWxsIHtcbiAgaWYgKCFlbmdpbmUuc2Vzc2lvbi5jb250YWlucyhpZCwgXCJIcFwiKSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBlbmdpbmUuc2Vzc2lvbi5nZXQoaWQsIFwiSHBcIikgYXMgbnVtYmVyO1xufVxuXG4vKiogUmVhZCB0aGUgUGllY2VUeXBlIG9mIGFuIGVudGl0eS4gTnVsbCBpZiByZXRyYWN0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gdHlwZU9mKGVuZ2luZTogQ2hlc3NFbmdpbmUsIGlkOiBFbnRpdHlJZCk6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIWVuZ2luZS5zZXNzaW9uLmNvbnRhaW5zKGlkLCBcIlBpZWNlVHlwZVwiKSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBlbmdpbmUuc2Vzc2lvbi5nZXQoaWQsIFwiUGllY2VUeXBlXCIpIGFzIHN0cmluZztcbn1cblxuLyoqIFRydWUgaWYgdGhlIGVudGl0eSBzdGlsbCBoYXMgYSBQaWVjZVR5cGUgZmFjdCAobm90IHJldHJhY3RlZCkuICovXG5leHBvcnQgZnVuY3Rpb24gZXhpc3RzKGVuZ2luZTogQ2hlc3NFbmdpbmUsIGlkOiBFbnRpdHlJZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZW5naW5lLnNlc3Npb24uY29udGFpbnMoaWQsIFwiUGllY2VUeXBlXCIpO1xufVxuXG4vKipcbiAqIFJldHJhY3QgZXZlcnkgbm9uLWtpbmcgcGllY2Ugb24gdGhlIGJvYXJkIHNvIHRlc3RzIGNhbiBidWlsZFxuICogbWluaW1hbCBwb3NpdGlvbnMgZnJvbSBzY3JhdGNoIHdpdGhvdXQgRklERSBzdGFydGluZy1wb3NpdGlvblxuICogbm9pc2UuIEtpbmdzIGFyZSBwcmVzZXJ2ZWQgYnkgZGVmYXVsdCBiZWNhdXNlIGNoZWNrLWRldGVjdGlvblxuICogYXNzdW1lcyB0aGVpciBwcmVzZW5jZTsgcGFzcyBgcHJlc2VydmVLaW5nczogZmFsc2VgIHRvIHdpcGUgdGhlbVxuICogdG9vICh1c2VmdWwgZm9yIHRlc3RpbmcgY3VzdG9tLXBpZWNlLXR5cGUgdmFyaWFudHMpLlxuICpcbiAqIFVzZXMgYGVuZ2luZS5lZmZlY3RpdmVQaWVjZUF0dHJzYCBzbyBwcmVzZXQtZGVjbGFyZWQgYXR0cmlidXRlc1xuICogKEhwLCBTaGllbGQsIOKApikgYXJlIGNsZWFuZWQgdXAgdG9vIOKAlCBubyB6b21iaWUgZmFjdHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckJvYXJkKFxuICBlbmdpbmU6IENoZXNzRW5naW5lLFxuICBvcHRzOiB7IHJlYWRvbmx5IHByZXNlcnZlS2luZ3M/OiBib29sZWFuIH0gPSB7fSxcbik6IHZvaWQge1xuICBjb25zdCBwcmVzZXJ2ZUtpbmdzID0gb3B0cy5wcmVzZXJ2ZUtpbmdzID8/IHRydWU7XG4gIGNvbnN0IGZhY3RzID0gZW5naW5lLnNlc3Npb24uYWxsRmFjdHMoKTtcbiAgY29uc3QgdG9DbGVhcjogRW50aXR5SWRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGYgb2YgZmFjdHMpIHtcbiAgICBpZiAoZi5hdHRyICE9PSBcIlBpZWNlVHlwZVwiKSBjb250aW51ZTtcbiAgICBpZiAoKGYuaWQgYXMgbnVtYmVyKSA8PSAwKSBjb250aW51ZTtcbiAgICBpZiAocHJlc2VydmVLaW5ncyAmJiBmLnZhbHVlID09PSBcImtpbmdcIikgY29udGludWU7XG4gICAgdG9DbGVhci5wdXNoKGYuaWQpO1xuICB9XG4gIGZvciAoY29uc3QgaWQgb2YgdG9DbGVhcikge1xuICAgIGZvciAoY29uc3QgYXR0ciBvZiBlbmdpbmUuZWZmZWN0aXZlUGllY2VBdHRycykge1xuICAgICAgaWYgKGVuZ2luZS5zZXNzaW9uLmNvbnRhaW5zKGlkLCBhdHRyKSkgZW5naW5lLnNlc3Npb24ucmV0cmFjdChpZCwgYXR0cik7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUGxhY2UgYSBwaWVjZSBvbiBgc3F1YXJlYCBkaXJlY3RseSB2aWEgc2Vzc2lvbiBpbnNlcnRzLiBCeXBhc3Nlc1xuICogYGVuZ2luZS5zcGF3blBpZWNlYCBpbnRlbnRpb25hbGx5IOKAlCB0ZXN0cyB0aGF0IHdhbnQgdG8gdmVyaWZ5XG4gKiBzcGF3bi1ob29rIGJlaGF2aW9yIHNob3VsZCBjYWxsIGBlbmdpbmUuc3Bhd25QaWVjZWAgZXhwbGljaXRseS5cbiAqIFRoaXMgaGVscGVyIGlzIGZvciBzY2FmZm9sZGluZyBib2FyZCBwb3NpdGlvbnMgd2hlcmUgc3Bhd24gaG9va3NcbiAqIGFyZSBpcnJlbGV2YW50IChvciBuZWVkIHRvIGJlIGF2b2lkZWQsIGFzIGluIFwibm8tSFAtc2VlZGVkIHRlc3RcbiAqIHBpZWNlXCIpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGxhY2VQaWVjZShcbiAgZW5naW5lOiBDaGVzc0VuZ2luZSxcbiAgdHlwZTogc3RyaW5nLFxuICBjb2xvcjogXCJ3aGl0ZVwiIHwgXCJibGFja1wiLFxuICBzcXVhcmU6IHN0cmluZyB8IG51bWJlcixcbiAgb3B0czogeyByZWFkb25seSBoYXNNb3ZlZD86IGJvb2xlYW4gfSA9IHt9LFxuKTogRW50aXR5SWQge1xuICBjb25zdCBpZCA9IGVuZ2luZS5zZXNzaW9uLm5leHRJZCgpO1xuICBjb25zdCBzcSA9IHR5cGVvZiBzcXVhcmUgPT09IFwic3RyaW5nXCIgPyBhbGdlYnJhaWNUb1NxdWFyZShzcXVhcmUpIDogc3F1YXJlO1xuICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQoaWQsIFwiUGllY2VUeXBlXCIsIHR5cGUpO1xuICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQoaWQsIFwiQ29sb3JcIiwgY29sb3IpO1xuICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQoaWQsIFwiUG9zaXRpb25cIiwgc3EpO1xuICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQoaWQsIFwiSGFzTW92ZWRcIiwgb3B0cy5oYXNNb3ZlZCA/PyBmYWxzZSk7XG4gIHJldHVybiBpZDtcbn1cbiJdLCJmaWxlIjoiL3NyYy9wcmVzZXRzL3Rlc3QtdXRpbHMudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/2de3dd191927de7c69694b1da7bb4bfe2f119a3e b/7xOfJqsDU787fe61oSCq1/web/2de3dd191927de7c69694b1da7bb4bfe2f119a3e deleted file mode 100644 index 79166dc..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/2de3dd191927de7c69694b1da7bb4bfe2f119a3e +++ /dev/null @@ -1,159 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "ExistentialNode", { enumerable: true, configurable: true, get(){ try { return ExistentialNode } catch {} }}); -class ExistentialNode { - #activateListeners = []; - #deactivateListeners = []; - /** Support count per left token — # of right facts currently matching it. */ - #supportCount = new Map(); - /** Tokens currently passing downstream (count >= 1). */ - #activeTokens = new Set(); - /** All left tokens seen and not yet left-deactivated. */ - #leftTokens = []; - #rightMemory; - #tests; - /** - * @param rightMemory Alpha memory supplying the support facts for this EXISTS. - * @param tests Equality tests evaluated against every `(token, right fact)` - * pair. An empty list accepts every right fact as support, - * which degenerates EXISTS to "any fact of this shape exists". - */ - constructor(rightMemory, tests) { - this.#rightMemory = rightMemory; - this.#tests = tests; - } - /** Subscribe to downstream activations. Listeners fire in registration order. */ - addDownstreamActivate(listener) { - this.#activateListeners.push(listener); - } - /** Subscribe to downstream deactivations. Listeners fire in registration order. */ - addDownstreamDeactivate(listener) { - this.#deactivateListeners.push(listener); - } - /** - * Process a new left-side token. - * - * Counts matching right facts already in {@link AlphaMemory} and, if at - * least one is present, records the token as active and fires downstream - * activate listeners exactly once. - */ - leftActivate(token) { - this.#leftTokens.push(token); - const count = this.#countMatchingFacts(token); - this.#supportCount.set(token, count); - if (count >= 1) { - this.#activeTokens.add(token); - for (const l of this.#activateListeners) - l(token); - } - } - /** - * Withdraw a left-side token. - * - * If the token was currently active (count >= 1 at the time of deactivation) - * the downstream deactivate listeners fire once. Always cleans up the - * per-token state regardless of whether the token was active. Unknown - * tokens (never seen on the left) are silently ignored so that upstream - * retractions never throw because of a missed book-keeping entry. - */ - leftDeactivate(token) { - const idx = this.#leftTokens.indexOf(token); - if (idx === -1) - return; - this.#leftTokens.splice(idx, 1); - if (this.#activeTokens.has(token)) { - this.#activeTokens.delete(token); - for (const l of this.#deactivateListeners) - l(token); - }; - this.#supportCount.delete(token); - } - /** - * Process a newly-matching right-side fact. - * - * For every left token that this fact supports, increment the support - * count. On the 0 → 1 transition (and *only* that transition) the token - * becomes active and downstream activate listeners fire. Subsequent - * increments (1 → 2, 2 → 3, …) leave the active set unchanged, which is - * what gives EXISTS its single-activation-per-token guarantee. - */ - rightActivate(id, _attr, value) { - for (const token of this.#leftTokens) { - if (!this.#factMatchesToken(token, id, value)) - continue; - const prev = this.#supportCount.get(token) ?? 0; - this.#supportCount.set(token, prev + 1); - // Transition 0 → 1: activate. All higher transitions are no-ops. - if (prev === 0) { - this.#activeTokens.add(token); - for (const l of this.#activateListeners) - l(token); - } - } - } - /** - * Process a retracted right-side fact. - * - * For every left token this fact was supporting, decrement the support - * count. On the 1 → 0 transition the token leaves the active set and - * downstream deactivate listeners fire. Transitions that remain >= 1 - * (e.g. 2 → 1) leave the active set unchanged. - * - * The count is floored at 0 as a defensive measure — an upstream retraction - * for a fact that was never counted should be a no-op rather than a - * crash, matching the tolerance expressed in {@link BetaMemory.leftDeactivate}. - */ - rightDeactivate(id, _attr, value) { - for (const token of this.#leftTokens) { - if (!this.#factMatchesToken(token, id, value)) - continue; - const prev = this.#supportCount.get(token) ?? 0; - if (prev === 0) - continue; // nothing to decrement; stay at 0. - const next = prev - 1; - this.#supportCount.set(token, next); - // Transition 1 → 0: deactivate. - if (next === 0 && this.#activeTokens.has(token)) { - this.#activeTokens.delete(token); - for (const l of this.#deactivateListeners) - l(token); - } - } - } - /** Count right-memory facts currently matching `token`. */ - #countMatchingFacts(token) { - let count = 0; - for (const fact of this.#rightMemory.facts) { - if (this.#factMatchesToken(token, fact.id, fact.value)) - count++; - }; - return count; - } - /** - * Evaluate every join test against `(token, right fact)`. - * - * Semantics match {@link JoinNode}'s internal test predicate: - * `idEquality` compares the right entity id against `token.bindings[leftVar]`; - * `valueEquality` compares the right value. A test whose `leftVar` is not - * bound on the token always fails — the same defensive behaviour as - * JoinNode, for the same reason (guards against builder bugs). - */ - #factMatchesToken(token, rightId, rightValue) { - for (const test of this.#tests) { - const leftVal = token.bindings[test.leftVar]; - if (leftVal === undefined) - return false; - if (test.type === "idEquality") { - if (leftVal !== rightId) - return false; - } - else { - // valueEquality - if (leftVal !== rightValue) - return false; - } - }; - return true; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QU8sQ0FBQztZQUM1QyxJQUFJLE9BQU8sS0FBSyxTQUFTO2dCQUFFLE9BQU8sS0FBSztZQUN2QyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFO2dCQUM5QixJQUFJLE9BQU8sS0FBSyxPQUFPO29CQUFFLE9BQU8sS0FBSztZQUN2QztpQkFBTztnQkFDTDtnQkFDQSxJQUFJLE9BQU8sS0FBSyxVQUFVO29CQUFFLE9BQU8sS0FBSztZQUMxQztRQUNGO1FBQ0EsT0FBTyxJQUFJO0lBQ2IiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9leGlzdGVudGlhbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEV4aXN0ZW50aWFsTm9kZSDigJQgRVhJU1RTIHBhdHRlcm4uXG4gKlxuICogUGVyIERvb3JlbmJvcyAxOTk1IMKnMi42LjIuIFBhc3NlcyBhIHRva2VuIGRvd25zdHJlYW0gd2hlbiAqKmF0IGxlYXN0IG9uZSoqXG4gKiByaWdodC1zaWRlIGZhY3Qgc2F0aXNmaWVzIHRoaXMgbm9kZSdzIGVxdWFsaXR5IHRlc3RzIGFnYWluc3QgdGhlIHRva2VuLlxuICpcbiAqIFN0cnVjdHVyYWxseSwgRXhpc3RlbnRpYWxOb2RlIGlzIHRoZSBkdWFsIG9mIE5lZ2F0aW9uTm9kZSAoUDIuMSk6IGJvdGhcbiAqIG1haW50YWluIGEgcGVyLXRva2VuICpzdXBwb3J0IGNvdW50KiBvZiBtYXRjaGluZyByaWdodCBmYWN0cywgYnV0IHRoZVxuICogYWN0aXZhdGlvbiBwcmVkaWNhdGUgaXMgaW52ZXJ0ZWQuXG4gKlxuICogICBOZWdhdGlvbk5vZGU6ICAgIGRvd25zdHJlYW0gYWN0aXZlIGlmZiBjb3VudCA9PT0gMCAgKE5PVClcbiAqICAgRXhpc3RlbnRpYWxOb2RlOiBkb3duc3RyZWFtIGFjdGl2ZSBpZmYgY291bnQgID49IDEgIChFWElTVFMpXG4gKlxuICogIyMjIEZpcmluZyBzZW1hbnRpY3NcbiAqXG4gKiBEb3duc3RyZWFtIGFjdGl2YXRlIGxpc3RlbmVycyBmaXJlICoqZXhhY3RseSBvbmNlKiogd2hlbiB0aGUgY291bnRcbiAqIHRyYW5zaXRpb25zIDAg4oaSIDEgZm9yIGEgdG9rZW4uIFN1YnNlcXVlbnQgcmlnaHQtYWN0aXZhdGVzIHRoYXQgdGFrZSB0aGVcbiAqIGNvdW50IDEg4oaSIDIsIDIg4oaSIDMsIGV0Yy4gZG8gKipub3QqKiByZS1maXJlIHRoZSBkb3duc3RyZWFtIOKAlCB0aGlzIGlzIHRoZVxuICogZGVkdXBsaWNhdGlvbiBndWFyYW50ZWUgcmVxdWlyZWQgYnkgRVhJU1RTOiB0aGUgcnVsZSBzaG91bGQgbWF0Y2ggYVxuICogc2luZ2xlIHRpbWUgcmVnYXJkbGVzcyBvZiBob3cgbWFueSBzdXBwb3J0aW5nIGZhY3RzIGV4aXN0LlxuICpcbiAqIERvd25zdHJlYW0gZGVhY3RpdmF0ZSBsaXN0ZW5lcnMgZmlyZSAqKmV4YWN0bHkgb25jZSoqIHdoZW4gdGhlIGNvdW50XG4gKiB0cmFuc2l0aW9ucyAxIOKGkiAwIChvciB3aGVuIHRoZSBsZWZ0IHRva2VuIGl0c2VsZiBpcyByZXRyYWN0ZWQgd2hpbGVcbiAqIGN1cnJlbnRseSBhY3RpdmUpLlxuICpcbiAqICMjIyBXaHkgbm90IHNoYXJlIGNvZGUgd2l0aCBOZWdhdGlvbk5vZGVcbiAqXG4gKiBEZXNwaXRlIHRoZSBzdHJ1Y3R1cmFsIHNpbWlsYXJpdHksIHRoZSB0d28gbm9kZXMgYXJlIGtlcHQgc2VwYXJhdGU6XG4gKlxuICogLSBUaGUgYWN0aXZhdGlvbiBwcmVkaWNhdGUgZGl2ZXJnZXMgYXQgc2V2ZXJhbCBicmFuY2hlcyAoaW5pdGlhbCBjb3VudCxcbiAqICAgcmlnaHRBY3RpdmF0ZSB0cmFuc2l0aW9uLCByaWdodERlYWN0aXZhdGUgdHJhbnNpdGlvbiksIG5vdCBqdXN0IGFcbiAqICAgc2luZ2xlIGNvbXBhcmlzb24sIHNvIGEgc2hhcmVkIGJhc2UgY2xhc3Mgd291bGQgYmUgdW5pZm9ybWx5IGd1YXJkZWRcbiAqICAgb24gYSBtb2RlIGZsYWcg4oCUIGxlc3MgcmVhZGFibGUgdGhhbiB0d28gZm9jdXNlZCBpbXBsZW1lbnRhdGlvbnMuXG4gKiAtIEVhY2ggbm9kZSBpcyBzbWFsbCAofjEwMCBMT0MpLiBUaGUgZHVwbGljYXRpb24gY29zdCBpcyBsb3c7IHRoZVxuICogICBjb3VwbGluZyBjb3N0IG9mIGEgc2hhcmVkIGFic3RyYWN0aW9uIHdvdWxkIGJlIGhpZ2hlci5cbiAqXG4gKiAjIyMgSW52YXJpYW50c1xuICpcbiAqIC0gYHN1cHBvcnRDb3VudC5nZXQodG9rZW4pYCBpcyBkZWZpbmVkIGZvciBldmVyeSB0b2tlbiBjdXJyZW50bHkgaW5cbiAqICAgYGxlZnRUb2tlbnNgLCBhbmQgZXF1YWxzIHRoZSBudW1iZXIgb2YgcmlnaHQtbWVtb3J5IGZhY3RzIHRoYXQgcGFzc1xuICogICB7QGxpbmsgRXhpc3RlbnRpYWxOb2RlLmZhY3RNYXRjaGVzVG9rZW59IGZvciB0aGF0IHRva2VuLlxuICogLSBgYWN0aXZlVG9rZW5zLmhhcyh0b2tlbilgIGlmZiBgKHN1cHBvcnRDb3VudC5nZXQodG9rZW4pID8/IDApID49IDFgLlxuICogLSBBIHRva2VuIGluIGBhY3RpdmVUb2tlbnNgIGhhcyBoYWQgZXhhY3RseSBvbmUgdW5iYWxhbmNlZCBhY3RpdmF0ZVxuICogICBsaXN0ZW5lciBjYWxsICh0aGUgZGVhY3RpdmF0ZSBoYXMgbm90IHlldCBmaXJlZCkuXG4gKi9cbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiLi9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgQXR0cktleSwgRmFjdFZhbHVlIH0gZnJvbSBcIi4vd20uanNcIjtcbmltcG9ydCB0eXBlIHsgVG9rZW4gfSBmcm9tIFwiLi9iZXRhLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEFscGhhTWVtb3J5IH0gZnJvbSBcIi4vYWxwaGEuanNcIjtcbmltcG9ydCB0eXBlIHsgSm9pblRlc3QgfSBmcm9tIFwiLi9qb2luLmpzXCI7XG5cbnR5cGUgQWN0aXZhdGVMaXN0ZW5lciA9ICh0b2tlbjogVG9rZW4pID0+IHZvaWQ7XG50eXBlIERlYWN0aXZhdGVMaXN0ZW5lciA9ICh0b2tlbjogVG9rZW4pID0+IHZvaWQ7XG5cbmV4cG9ydCBjbGFzcyBFeGlzdGVudGlhbE5vZGUge1xuICByZWFkb25seSAjYWN0aXZhdGVMaXN0ZW5lcnM6IEFjdGl2YXRlTGlzdGVuZXJbXSA9IFtdO1xuICByZWFkb25seSAjZGVhY3RpdmF0ZUxpc3RlbmVyczogRGVhY3RpdmF0ZUxpc3RlbmVyW10gPSBbXTtcblxuICAvKiogU3VwcG9ydCBjb3VudCBwZXIgbGVmdCB0b2tlbiDigJQgIyBvZiByaWdodCBmYWN0cyBjdXJyZW50bHkgbWF0Y2hpbmcgaXQuICovXG4gIHJlYWRvbmx5ICNzdXBwb3J0Q291bnQgPSBuZXcgTWFwPFRva2VuLCBudW1iZXI+KCk7XG4gIC8qKiBUb2tlbnMgY3VycmVudGx5IHBhc3NpbmcgZG93bnN0cmVhbSAoY291bnQgPj0gMSkuICovXG4gIHJlYWRvbmx5ICNhY3RpdmVUb2tlbnMgPSBuZXcgU2V0PFRva2VuPigpO1xuICAvKiogQWxsIGxlZnQgdG9rZW5zIHNlZW4gYW5kIG5vdCB5ZXQgbGVmdC1kZWFjdGl2YXRlZC4gKi9cbiAgcmVhZG9ubHkgI2xlZnRUb2tlbnM6IFRva2VuW10gPSBbXTtcblxuICByZWFkb25seSAjcmlnaHRNZW1vcnk6IEFscGhhTWVtb3J5O1xuICByZWFkb25seSAjdGVzdHM6IHJlYWRvbmx5IEpvaW5UZXN0W107XG5cbiAgLyoqXG4gICAqIEBwYXJhbSByaWdodE1lbW9yeSBBbHBoYSBtZW1vcnkgc3VwcGx5aW5nIHRoZSBzdXBwb3J0IGZhY3RzIGZvciB0aGlzIEVYSVNUUy5cbiAgICogQHBhcmFtIHRlc3RzICAgICAgIEVxdWFsaXR5IHRlc3RzIGV2YWx1YXRlZCBhZ2FpbnN0IGV2ZXJ5IGAodG9rZW4sIHJpZ2h0IGZhY3QpYFxuICAgKiAgICAgICAgICAgICAgICAgICAgcGFpci4gQW4gZW1wdHkgbGlzdCBhY2NlcHRzIGV2ZXJ5IHJpZ2h0IGZhY3QgYXMgc3VwcG9ydCxcbiAgICogICAgICAgICAgICAgICAgICAgIHdoaWNoIGRlZ2VuZXJhdGVzIEVYSVNUUyB0byBcImFueSBmYWN0IG9mIHRoaXMgc2hhcGUgZXhpc3RzXCIuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihyaWdodE1lbW9yeTogQWxwaGFNZW1vcnksIHRlc3RzOiByZWFkb25seSBKb2luVGVzdFtdKSB7XG4gICAgdGhpcy4jcmlnaHRNZW1vcnkgPSByaWdodE1lbW9yeTtcbiAgICB0aGlzLiN0ZXN0cyA9IHRlc3RzO1xuICB9XG5cbiAgLyoqIFN1YnNjcmliZSB0byBkb3duc3RyZWFtIGFjdGl2YXRpb25zLiBMaXN0ZW5lcnMgZmlyZSBpbiByZWdpc3RyYXRpb24gb3JkZXIuICovXG4gIGFkZERvd25zdHJlYW1BY3RpdmF0ZShsaXN0ZW5lcjogQWN0aXZhdGVMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuI2FjdGl2YXRlTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqIFN1YnNjcmliZSB0byBkb3duc3RyZWFtIGRlYWN0aXZhdGlvbnMuIExpc3RlbmVycyBmaXJlIGluIHJlZ2lzdHJhdGlvbiBvcmRlci4gKi9cbiAgYWRkRG93bnN0cmVhbURlYWN0aXZhdGUobGlzdGVuZXI6IERlYWN0aXZhdGVMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuI2RlYWN0aXZhdGVMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBhIG5ldyBsZWZ0LXNpZGUgdG9rZW4uXG4gICAqXG4gICAqIENvdW50cyBtYXRjaGluZyByaWdodCBmYWN0cyBhbHJlYWR5IGluIHtAbGluayBBbHBoYU1lbW9yeX0gYW5kLCBpZiBhdFxuICAgKiBsZWFzdCBvbmUgaXMgcHJlc2VudCwgcmVjb3JkcyB0aGUgdG9rZW4gYXMgYWN0aXZlIGFuZCBmaXJlcyBkb3duc3RyZWFtXG4gICAqIGFjdGl2YXRlIGxpc3RlbmVycyBleGFjdGx5IG9uY2UuXG4gICAqL1xuICBsZWZ0QWN0aXZhdGUodG9rZW46IFRva2VuKTogdm9pZCB7XG4gICAgdGhpcy4jbGVmdFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICBjb25zdCBjb3VudCA9IHRoaXMuI2NvdW50TWF0Y2hpbmdGYWN0cyh0b2tlbik7XG4gICAgdGhpcy4jc3VwcG9ydENvdW50LnNldCh0b2tlbiwgY291bnQpO1xuXG4gICAgaWYgKGNvdW50ID49IDEpIHtcbiAgICAgIHRoaXMuI2FjdGl2ZVRva2Vucy5hZGQodG9rZW4pO1xuICAgICAgZm9yIChjb25zdCBsIG9mIHRoaXMuI2FjdGl2YXRlTGlzdGVuZXJzKSBsKHRva2VuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2l0aGRyYXcgYSBsZWZ0LXNpZGUgdG9rZW4uXG4gICAqXG4gICAqIElmIHRoZSB0b2tlbiB3YXMgY3VycmVudGx5IGFjdGl2ZSAoY291bnQgPj0gMSBhdCB0aGUgdGltZSBvZiBkZWFjdGl2YXRpb24pXG4gICAqIHRoZSBkb3duc3RyZWFtIGRlYWN0aXZhdGUgbGlzdGVuZXJzIGZpcmUgb25jZS4gQWx3YXlzIGNsZWFucyB1cCB0aGVcbiAgICogcGVyLXRva2VuIHN0YXRlIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgdG9rZW4gd2FzIGFjdGl2ZS4gVW5rbm93blxuICAgKiB0b2tlbnMgKG5ldmVyIHNlZW4gb24gdGhlIGxlZnQpIGFyZSBzaWxlbnRseSBpZ25vcmVkIHNvIHRoYXQgdXBzdHJlYW1cbiAgICogcmV0cmFjdGlvbnMgbmV2ZXIgdGhyb3cgYmVjYXVzZSBvZiBhIG1pc3NlZCBib29rLWtlZXBpbmcgZW50cnkuXG4gICAqL1xuICBsZWZ0RGVhY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICBjb25zdCBpZHggPSB0aGlzLiNsZWZ0VG9rZW5zLmluZGV4T2YodG9rZW4pO1xuICAgIGlmIChpZHggPT09IC0xKSByZXR1cm47XG4gICAgdGhpcy4jbGVmdFRva2Vucy5zcGxpY2UoaWR4LCAxKTtcblxuICAgIGlmICh0aGlzLiNhY3RpdmVUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgdGhpcy4jYWN0aXZlVG9rZW5zLmRlbGV0ZSh0b2tlbik7XG4gICAgICBmb3IgKGNvbnN0IGwgb2YgdGhpcy4jZGVhY3RpdmF0ZUxpc3RlbmVycykgbCh0b2tlbik7XG4gICAgfVxuICAgIHRoaXMuI3N1cHBvcnRDb3VudC5kZWxldGUodG9rZW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgYSBuZXdseS1tYXRjaGluZyByaWdodC1zaWRlIGZhY3QuXG4gICAqXG4gICAqIEZvciBldmVyeSBsZWZ0IHRva2VuIHRoYXQgdGhpcyBmYWN0IHN1cHBvcnRzLCBpbmNyZW1lbnQgdGhlIHN1cHBvcnRcbiAgICogY291bnQuIE9uIHRoZSAwIOKGkiAxIHRyYW5zaXRpb24gKGFuZCAqb25seSogdGhhdCB0cmFuc2l0aW9uKSB0aGUgdG9rZW5cbiAgICogYmVjb21lcyBhY3RpdmUgYW5kIGRvd25zdHJlYW0gYWN0aXZhdGUgbGlzdGVuZXJzIGZpcmUuIFN1YnNlcXVlbnRcbiAgICogaW5jcmVtZW50cyAoMSDihpIgMiwgMiDihpIgMywg4oCmKSBsZWF2ZSB0aGUgYWN0aXZlIHNldCB1bmNoYW5nZWQsIHdoaWNoIGlzXG4gICAqIHdoYXQgZ2l2ZXMgRVhJU1RTIGl0cyBzaW5nbGUtYWN0aXZhdGlvbi1wZXItdG9rZW4gZ3VhcmFudGVlLlxuICAgKi9cbiAgcmlnaHRBY3RpdmF0ZShpZDogRW50aXR5SWQsIF9hdHRyOiBBdHRyS2V5LCB2YWx1ZTogRmFjdFZhbHVlKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiB0aGlzLiNsZWZ0VG9rZW5zKSB7XG4gICAgICBpZiAoIXRoaXMuI2ZhY3RNYXRjaGVzVG9rZW4odG9rZW4sIGlkLCB2YWx1ZSkpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBwcmV2ID0gdGhpcy4jc3VwcG9ydENvdW50LmdldCh0b2tlbikgPz8gMDtcbiAgICAgIHRoaXMuI3N1cHBvcnRDb3VudC5zZXQodG9rZW4sIHByZXYgKyAxKTtcblxuICAgICAgLy8gVHJhbnNpdGlvbiAwIOKGkiAxOiBhY3RpdmF0ZS4gQWxsIGhpZ2hlciB0cmFuc2l0aW9ucyBhcmUgbm8tb3BzLlxuICAgICAgaWYgKHByZXYgPT09IDApIHtcbiAgICAgICAgdGhpcy4jYWN0aXZlVG9rZW5zLmFkZCh0b2tlbik7XG4gICAgICAgIGZvciAoY29uc3QgbCBvZiB0aGlzLiNhY3RpdmF0ZUxpc3RlbmVycykgbCh0b2tlbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgYSByZXRyYWN0ZWQgcmlnaHQtc2lkZSBmYWN0LlxuICAgKlxuICAgKiBGb3IgZXZlcnkgbGVmdCB0b2tlbiB0aGlzIGZhY3Qgd2FzIHN1cHBvcnRpbmcsIGRlY3JlbWVudCB0aGUgc3VwcG9ydFxuICAgKiBjb3VudC4gT24gdGhlIDEg4oaSIDAgdHJhbnNpdGlvbiB0aGUgdG9rZW4gbGVhdmVzIHRoZSBhY3RpdmUgc2V0IGFuZFxuICAgKiBkb3duc3RyZWFtIGRlYWN0aXZhdGUgbGlzdGVuZXJzIGZpcmUuIFRyYW5zaXRpb25zIHRoYXQgcmVtYWluID49IDFcbiAgICogKGUuZy4gMiDihpIgMSkgbGVhdmUgdGhlIGFjdGl2ZSBzZXQgdW5jaGFuZ2VkLlxuICAgKlxuICAgKiBUaGUgY291bnQgaXMgZmxvb3JlZCBhdCAwIGFzIGEgZGVmZW5zaXZlIG1lYXN1cmUg4oCUIGFuIHVwc3RyZWFtIHJldHJhY3Rpb25cbiAgICogZm9yIGEgZmFjdCB0aGF0IHdhcyBuZXZlciBjb3VudGVkIHNob3VsZCBiZSBhIG5vLW9wIHJhdGhlciB0aGFuIGFcbiAgICogY3Jhc2gsIG1hdGNoaW5nIHRoZSB0b2xlcmFuY2UgZXhwcmVzc2VkIGluIHtAbGluayBCZXRhTWVtb3J5LmxlZnREZWFjdGl2YXRlfS5cbiAgICovXG4gIHJpZ2h0RGVhY3RpdmF0ZShpZDogRW50aXR5SWQsIF9hdHRyOiBBdHRyS2V5LCB2YWx1ZTogRmFjdFZhbHVlKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiB0aGlzLiNsZWZ0VG9rZW5zKSB7XG4gICAgICBpZiAoIXRoaXMuI2ZhY3RNYXRjaGVzVG9rZW4odG9rZW4sIGlkLCB2YWx1ZSkpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBwcmV2ID0gdGhpcy4jc3VwcG9ydENvdW50LmdldCh0b2tlbikgPz8gMDtcbiAgICAgIGlmIChwcmV2ID09PSAwKSBjb250aW51ZTsgLy8gbm90aGluZyB0byBkZWNyZW1lbnQ7IHN0YXkgYXQgMC5cbiAgICAgIGNvbnN0IG5leHQgPSBwcmV2IC0gMTtcbiAgICAgIHRoaXMuI3N1cHBvcnRDb3VudC5zZXQodG9rZW4sIG5leHQpO1xuXG4gICAgICAvLyBUcmFuc2l0aW9uIDEg4oaSIDA6IGRlYWN0aXZhdGUuXG4gICAgICBpZiAobmV4dCA9PT0gMCAmJiB0aGlzLiNhY3RpdmVUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgICB0aGlzLiNhY3RpdmVUb2tlbnMuZGVsZXRlKHRva2VuKTtcbiAgICAgICAgZm9yIChjb25zdCBsIG9mIHRoaXMuI2RlYWN0aXZhdGVMaXN0ZW5lcnMpIGwodG9rZW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBDb3VudCByaWdodC1tZW1vcnkgZmFjdHMgY3VycmVudGx5IG1hdGNoaW5nIGB0b2tlbmAuICovXG4gICNjb3VudE1hdGNoaW5nRmFjdHModG9rZW46IFRva2VuKTogbnVtYmVyIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGZvciAoY29uc3QgZmFjdCBvZiB0aGlzLiNyaWdodE1lbW9yeS5mYWN0cykge1xuICAgICAgaWYgKHRoaXMuI2ZhY3RNYXRjaGVzVG9rZW4odG9rZW4sIGZhY3QuaWQsIGZhY3QudmFsdWUpKSBjb3VudCsrO1xuICAgIH1cbiAgICByZXR1cm4gY291bnQ7XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGUgZXZlcnkgam9pbiB0ZXN0IGFnYWluc3QgYCh0b2tlbiwgcmlnaHQgZmFjdClgLlxuICAgKlxuICAgKiBTZW1hbnRpY3MgbWF0Y2gge0BsaW5rIEpvaW5Ob2RlfSdzIGludGVybmFsIHRlc3QgcHJlZGljYXRlOlxuICAgKiBgaWRFcXVhbGl0eWAgY29tcGFyZXMgdGhlIHJpZ2h0IGVudGl0eSBpZCBhZ2FpbnN0IGB0b2tlbi5iaW5kaW5nc1tsZWZ0VmFyXWA7XG4gICAqIGB2YWx1ZUVxdWFsaXR5YCBjb21wYXJlcyB0aGUgcmlnaHQgdmFsdWUuIEEgdGVzdCB3aG9zZSBgbGVmdFZhcmAgaXMgbm90XG4gICAqIGJvdW5kIG9uIHRoZSB0b2tlbiBhbHdheXMgZmFpbHMg4oCUIHRoZSBzYW1lIGRlZmVuc2l2ZSBiZWhhdmlvdXIgYXNcbiAgICogSm9pbk5vZGUsIGZvciB0aGUgc2FtZSByZWFzb24gKGd1YXJkcyBhZ2FpbnN0IGJ1aWxkZXIgYnVncykuXG4gICAqL1xuICAjZmFjdE1hdGNoZXNUb2tlbihcbiAgICB0b2tlbjogVG9rZW4sXG4gICAgcmlnaHRJZDogRW50aXR5SWQsXG4gICAgcmlnaHRWYWx1ZTogRmFjdFZhbHVlLFxuICApOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IHRlc3Qgb2YgdGhpcy4jdGVzdHMpIHtcbiAgICAgIGNvbnN0IGxlZnRWYWwgPSB0b2tlbi5iaW5kaW5nc1t0ZXN0LmxlZnRWYXJdO1xuICAgICAgaWYgKGxlZnRWYWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKHRlc3QudHlwZSA9PT0gXCJpZEVxdWFsaXR5XCIpIHtcbiAgICAgICAgaWYgKGxlZnRWYWwgIT09IHJpZ2h0SWQpIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHZhbHVlRXF1YWxpdHlcbiAgICAgICAgaWYgKGxlZnRWYWwgIT09IHJpZ2h0VmFsdWUpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9yZXRlL2Rpc3QvZXhpc3RlbnRpYWwuanMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/3070fbfe3da1caa3aa8617048dad75a970e157f2 b/7xOfJqsDU787fe61oSCq1/web/3070fbfe3da1caa3aa8617048dad75a970e157f2 deleted file mode 100644 index e96844f..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/3070fbfe3da1caa3aa8617048dad75a970e157f2 +++ /dev/null @@ -1,86 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/engine.ts", {"importedNames":["ChessEngine"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/presets/index.ts", {"importedNames":["PRESET_REGISTRY"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/presets/active-set.ts", {"importedNames":["ActivePresetSet"]}); -(0,__vite_ssr_import_0__.describe)("Preset registry (catalog)", () => { - (0,__vite_ssr_import_0__.it)("pawns-move-backward preset is registered", () => { - const all = __vite_ssr_import_2__.PRESET_REGISTRY.getAll(); - (0,__vite_ssr_import_0__.expect)(all.some((p) => p.id === "pawns-move-backward")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("registry has at least 3 presets registered after P3.4", () => { - const ids = __vite_ssr_import_2__.PRESET_REGISTRY.getAll().map((p) => p.id); - (0,__vite_ssr_import_0__.expect)(ids).toContain("pawns-move-backward"); - (0,__vite_ssr_import_0__.expect)(ids).toContain("double-pawn-sprint"); - (0,__vite_ssr_import_0__.expect)(ids).toContain("pawn-diagonal-no-capture"); - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.PRESET_REGISTRY.getAll().length).toBeGreaterThanOrEqual(3); - }); - (0,__vite_ssr_import_0__.it)("activating an unknown preset throws via ActivePresetSet", () => { - const set = new __vite_ssr_import_3__.ActivePresetSet(); - (0,__vite_ssr_import_0__.expect)( - () => set.replaceAll([ - { id: "nonexistent-rule", scope: "both", turnsRemaining: null } - ]) - ).toThrow(/not registered/); - }); - (0,__vite_ssr_import_0__.it)("mutually-incompatible presets throw under overlapping scope", () => { - const set = new __vite_ssr_import_3__.ActivePresetSet(); - (0,__vite_ssr_import_0__.expect)( - () => set.replaceAll([ - { id: "rook-warp", scope: "both", turnsRemaining: null }, - { id: "wrap-board", scope: "both", turnsRemaining: null } - ]) - ).toThrow(/incompatible/); - }); -}); -(0,__vite_ssr_import_0__.describe)("Preset: pawns-move-backward", () => { - const preset = () => __vite_ssr_import_2__.PRESET_REGISTRY.getAll().find((p) => p.id === "pawns-move-backward"); - function findPawnAt(engine, square) { - const facts = engine.session.allFacts(); - const pos = facts.find( - (f) => f.attr === "Position" && f.value === square - ); - return pos ? pos.id : null; - } - (0,__vite_ssr_import_0__.it)("is compatible with double-pawn-sprint (mechanically disjoint move sets)", () => { - (0,__vite_ssr_import_0__.expect)(preset().incompatibleWith).not.toContain("double-pawn-sprint"); - }); - (0,__vite_ssr_import_0__.it)("has no hard requirements", () => { - (0,__vite_ssr_import_0__.expect)(preset().requires).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("adds a backward move when the square behind the pawn is empty", () => { - const engine = new __vite_ssr_import_1__.ChessEngine(); - const whitePawn = findPawnAt(engine, 8); - (0,__vite_ssr_import_0__.expect)(whitePawn).not.toBeNull(); - engine.session.insert(whitePawn, "Position", 24); - const extra = preset().getExtraMoves(engine, whitePawn); - (0,__vite_ssr_import_0__.expect)(extra).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(extra[0].to).toBe(16); - (0,__vite_ssr_import_0__.expect)(extra[0].isCapture).toBe(false); - (0,__vite_ssr_import_0__.expect)(extra[0].from).toBe(24); - }); - (0,__vite_ssr_import_0__.it)("returns no backward move when the destination is occupied", () => { - const engine = new __vite_ssr_import_1__.ChessEngine(); - const whitePawn = findPawnAt(engine, 8); - const extra = preset().getExtraMoves(engine, whitePawn); - (0,__vite_ssr_import_0__.expect)(extra).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("black pawn moves backward toward rank 8 (higher index)", () => { - const engine = new __vite_ssr_import_1__.ChessEngine(); - const blackPawn = findPawnAt(engine, 48); - (0,__vite_ssr_import_0__.expect)(blackPawn).not.toBeNull(); - engine.session.insert(blackPawn, "Position", 32); - const extra = preset().getExtraMoves(engine, blackPawn); - (0,__vite_ssr_import_0__.expect)(extra).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(extra[0].to).toBe(40); - (0,__vite_ssr_import_0__.expect)(extra[0].isCapture).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("returns no moves when given a non-pawn piece", () => { - const engine = new __vite_ssr_import_1__.ChessEngine(); - const rook = findPawnAt(engine, 0); - const extra = preset().getExtraMoves(engine, rook); - (0,__vite_ssr_import_0__.expect)(extra).toEqual([]); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QU0sUUFBUSxPQUFPLEVBQUUsY0FBZSxRQUFRLFNBQVM7QUFDdkQscUNBQU8sS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQUEsRUFDMUIsQ0FBQztBQUVELCtCQUFHLDBEQUEwRCxNQUFNO0FBQ2pFLFVBQU0sU0FBUyxJQUFJLGtDQUFZO0FBRy9CLFVBQU0sWUFBWSxXQUFXLFFBQVEsRUFBRTtBQUN2QyxxQ0FBTyxTQUFTLEVBQUUsSUFBSSxTQUFTO0FBQy9CLFdBQU8sUUFBUSxPQUFPLFdBQVcsWUFBWSxFQUFZO0FBRXpELFVBQU0sUUFBUSxPQUFPLEVBQUUsY0FBZSxRQUFRLFNBQVM7QUFDdkQscUNBQU8sS0FBSyxFQUFFLGFBQWEsQ0FBQztBQUM1QixxQ0FBTyxNQUFNLENBQUMsRUFBRyxFQUFFLEVBQUUsS0FBSyxFQUFFO0FBQzVCLHFDQUFPLE1BQU0sQ0FBQyxFQUFHLFNBQVMsRUFBRSxLQUFLLEtBQUs7QUFBQSxFQUN4QyxDQUFDO0FBRUQsK0JBQUcsZ0RBQWdELE1BQU07QUFDdkQsVUFBTSxTQUFTLElBQUksa0NBQVk7QUFFL0IsVUFBTSxPQUFPLFdBQVcsUUFBUSxDQUFDO0FBQ2pDLFVBQU0sUUFBUSxPQUFPLEVBQUUsY0FBZSxRQUFRLElBQUk7QUFDbEQscUNBQU8sS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQUEsRUFDMUIsQ0FBQztBQUNILENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInBhd25zLW1vdmUtYmFja3dhcmQudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRlc3RzIGZvciBwcmVzZXQgcnVsZSAxIChwYXducy1tb3ZlLWJhY2t3YXJkKSBhbmQgcmVnaXN0cnkgaW52YXJpYW50c1xuICogcmVxdWlyZWQgYnkgUDMuNC5cbiAqL1xuaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eUlkIH0gZnJvbSBcIkBwYXJhdHlwZS9yZXRlXCI7XG5pbXBvcnQgeyBDaGVzc0VuZ2luZSB9IGZyb20gXCIuLi9lbmdpbmUuanNcIjtcbmltcG9ydCB7IFBSRVNFVF9SRUdJU1RSWSB9IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBBY3RpdmVQcmVzZXRTZXQgfSBmcm9tIFwiLi9hY3RpdmUtc2V0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNxdWFyZSB9IGZyb20gXCIuLi9zY2hlbWEuanNcIjtcblxuZGVzY3JpYmUoXCJQcmVzZXQgcmVnaXN0cnkgKGNhdGFsb2cpXCIsICgpID0+IHtcbiAgaXQoXCJwYXducy1tb3ZlLWJhY2t3YXJkIHByZXNldCBpcyByZWdpc3RlcmVkXCIsICgpID0+IHtcbiAgICBjb25zdCBhbGwgPSBQUkVTRVRfUkVHSVNUUlkuZ2V0QWxsKCk7XG4gICAgZXhwZWN0KGFsbC5zb21lKChwKSA9PiBwLmlkID09PSBcInBhd25zLW1vdmUtYmFja3dhcmRcIikpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwicmVnaXN0cnkgaGFzIGF0IGxlYXN0IDMgcHJlc2V0cyByZWdpc3RlcmVkIGFmdGVyIFAzLjRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGlkcyA9IFBSRVNFVF9SRUdJU1RSWS5nZXRBbGwoKS5tYXAoKHApID0+IHAuaWQpO1xuICAgIGV4cGVjdChpZHMpLnRvQ29udGFpbihcInBhd25zLW1vdmUtYmFja3dhcmRcIik7XG4gICAgZXhwZWN0KGlkcykudG9Db250YWluKFwiZG91YmxlLXBhd24tc3ByaW50XCIpO1xuICAgIGV4cGVjdChpZHMpLnRvQ29udGFpbihcInBhd24tZGlhZ29uYWwtbm8tY2FwdHVyZVwiKTtcbiAgICBleHBlY3QoUFJFU0VUX1JFR0lTVFJZLmdldEFsbCgpLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuT3JFcXVhbCgzKTtcbiAgfSk7XG5cbiAgaXQoXCJhY3RpdmF0aW5nIGFuIHVua25vd24gcHJlc2V0IHRocm93cyB2aWEgQWN0aXZlUHJlc2V0U2V0XCIsICgpID0+IHtcbiAgICBjb25zdCBzZXQgPSBuZXcgQWN0aXZlUHJlc2V0U2V0KCk7XG4gICAgZXhwZWN0KCgpID0+XG4gICAgICBzZXQucmVwbGFjZUFsbChbXG4gICAgICAgIHsgaWQ6IFwibm9uZXhpc3RlbnQtcnVsZVwiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgICBdKSxcbiAgICApLnRvVGhyb3coL25vdCByZWdpc3RlcmVkLyk7XG4gIH0pO1xuXG4gIGl0KFwibXV0dWFsbHktaW5jb21wYXRpYmxlIHByZXNldHMgdGhyb3cgdW5kZXIgb3ZlcmxhcHBpbmcgc2NvcGVcIiwgKCkgPT4ge1xuICAgIC8vIHJvb2std2FycCArIHdyYXAtYm9hcmQgaXMgdGhlIGNhbm9uaWNhbCBoYXJkLWluY29tcGF0aWJsZSBwYWlyXG4gICAgLy8gKHNlZSBSVUxFUy5tZCk6IHRoZXkgZGVmaW5lIGNvbmZsaWN0aW5nIGJvYXJkIHRvcG9sb2d5IHNlbWFudGljcy5cbiAgICBjb25zdCBzZXQgPSBuZXcgQWN0aXZlUHJlc2V0U2V0KCk7XG4gICAgZXhwZWN0KCgpID0+XG4gICAgICBzZXQucmVwbGFjZUFsbChbXG4gICAgICAgIHsgaWQ6IFwicm9vay13YXJwXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICAgICAgeyBpZDogXCJ3cmFwLWJvYXJkXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICAgIF0pLFxuICAgICkudG9UaHJvdygvaW5jb21wYXRpYmxlLyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiUHJlc2V0OiBwYXducy1tb3ZlLWJhY2t3YXJkXCIsICgpID0+IHtcbiAgY29uc3QgcHJlc2V0ID0gKCkgPT5cbiAgICBQUkVTRVRfUkVHSVNUUlkuZ2V0QWxsKCkuZmluZCgocCkgPT4gcC5pZCA9PT0gXCJwYXducy1tb3ZlLWJhY2t3YXJkXCIpITtcblxuICAvKiogRmluZCB0aGUgd2hpdGUgYS1wYXduIChzdGFydHMgb24gYTIgPSBzcXVhcmUgOCkuICovXG4gIGZ1bmN0aW9uIGZpbmRQYXduQXQoZW5naW5lOiBDaGVzc0VuZ2luZSwgc3F1YXJlOiBTcXVhcmUpOiBFbnRpdHlJZCB8IG51bGwge1xuICAgIGNvbnN0IGZhY3RzID0gZW5naW5lLnNlc3Npb24uYWxsRmFjdHMoKTtcbiAgICBjb25zdCBwb3MgPSBmYWN0cy5maW5kKFxuICAgICAgKGYpID0+IGYuYXR0ciA9PT0gXCJQb3NpdGlvblwiICYmIGYudmFsdWUgPT09IHNxdWFyZSxcbiAgICApO1xuICAgIHJldHVybiBwb3MgPyAocG9zLmlkIGFzIEVudGl0eUlkKSA6IG51bGw7XG4gIH1cblxuICBpdChcImlzIGNvbXBhdGlibGUgd2l0aCBkb3VibGUtcGF3bi1zcHJpbnQgKG1lY2hhbmljYWxseSBkaXNqb2ludCBtb3ZlIHNldHMpXCIsICgpID0+IHtcbiAgICBleHBlY3QocHJlc2V0KCkuaW5jb21wYXRpYmxlV2l0aCkubm90LnRvQ29udGFpbihcImRvdWJsZS1wYXduLXNwcmludFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJoYXMgbm8gaGFyZCByZXF1aXJlbWVudHNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChwcmVzZXQoKS5yZXF1aXJlcykudG9FcXVhbChbXSk7XG4gIH0pO1xuXG4gIGl0KFwiYWRkcyBhIGJhY2t3YXJkIG1vdmUgd2hlbiB0aGUgc3F1YXJlIGJlaGluZCB0aGUgcGF3biBpcyBlbXB0eVwiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgLy8gTW92ZSB0aGUgd2hpdGUgYS1wYXduIGZvcndhcmQgZnJvbSBhMiAoOCkgdG8gYTQgKDI0KSwgdGhlbiBtb3ZlIHRoZVxuICAgIC8vIHdoaXRlIHJvb2sgZnJvbSBhMSAoMCkgb3V0IG9mIHRoZSB3YXkgc28gYTMgKDE2KSDigJQgdGhlIFwiYmFja3dhcmRcIlxuICAgIC8vIHRhcmdldCBmcm9tIGE0IOKAlCBpcyBhbiBlbXB0eSBzcXVhcmUuXG4gICAgY29uc3Qgd2hpdGVQYXduID0gZmluZFBhd25BdChlbmdpbmUsIDgpITtcbiAgICBleHBlY3Qod2hpdGVQYXduKS5ub3QudG9CZU51bGwoKTtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQod2hpdGVQYXduLCBcIlBvc2l0aW9uXCIsIDI0IGFzIFNxdWFyZSk7IC8vIGEyIC0+IGE0XG5cbiAgICBjb25zdCBleHRyYSA9IHByZXNldCgpLmdldEV4dHJhTW92ZXMhKGVuZ2luZSwgd2hpdGVQYXduKTtcbiAgICBleHBlY3QoZXh0cmEpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICBleHBlY3QoZXh0cmFbMF0hLnRvKS50b0JlKDE2KTsgLy8gYTNcbiAgICBleHBlY3QoZXh0cmFbMF0hLmlzQ2FwdHVyZSkudG9CZShmYWxzZSk7XG4gICAgZXhwZWN0KGV4dHJhWzBdIS5mcm9tKS50b0JlKDI0KTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIG5vIGJhY2t3YXJkIG1vdmUgd2hlbiB0aGUgZGVzdGluYXRpb24gaXMgb2NjdXBpZWRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIC8vIFdoaXRlIGEtcGF3biBpcyBvbiBhMiAoOCkuIE9uZSBzcXVhcmUgYmFja3dhcmQgPSBhMSAoMCksIG9jY3VwaWVkIGJ5XG4gICAgLy8gdGhlIHdoaXRlIHJvb2sgaW4gdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIOKGkiBwcmVzZXQgbXVzdCByZXR1cm4gW10uXG4gICAgY29uc3Qgd2hpdGVQYXduID0gZmluZFBhd25BdChlbmdpbmUsIDgpITtcbiAgICBjb25zdCBleHRyYSA9IHByZXNldCgpLmdldEV4dHJhTW92ZXMhKGVuZ2luZSwgd2hpdGVQYXduKTtcbiAgICBleHBlY3QoZXh0cmEpLnRvRXF1YWwoW10pO1xuICB9KTtcblxuICBpdChcImJsYWNrIHBhd24gbW92ZXMgYmFja3dhcmQgdG93YXJkIHJhbmsgOCAoaGlnaGVyIGluZGV4KVwiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgLy8gQmxhY2sgYS1wYXduIHN0YXJ0cyBvbiBhNyA9IHNxdWFyZSA0OC4gTW92ZSBpdCBmb3J3YXJkIHRvIGE1ICgzMik7XG4gICAgLy8gdGhlbiB0aGUgc3F1YXJlIFwiYmVoaW5kXCIgaXQgZnJvbSBCbGFjaydzIFBPViBpcyBhNiAoNDApLlxuICAgIGNvbnN0IGJsYWNrUGF3biA9IGZpbmRQYXduQXQoZW5naW5lLCA0OCkhO1xuICAgIGV4cGVjdChibGFja1Bhd24pLm5vdC50b0JlTnVsbCgpO1xuICAgIGVuZ2luZS5zZXNzaW9uLmluc2VydChibGFja1Bhd24sIFwiUG9zaXRpb25cIiwgMzIgYXMgU3F1YXJlKTtcblxuICAgIGNvbnN0IGV4dHJhID0gcHJlc2V0KCkuZ2V0RXh0cmFNb3ZlcyEoZW5naW5lLCBibGFja1Bhd24pO1xuICAgIGV4cGVjdChleHRyYSkudG9IYXZlTGVuZ3RoKDEpO1xuICAgIGV4cGVjdChleHRyYVswXSEudG8pLnRvQmUoNDApOyAvLyBhNlxuICAgIGV4cGVjdChleHRyYVswXSEuaXNDYXB0dXJlKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIG5vIG1vdmVzIHdoZW4gZ2l2ZW4gYSBub24tcGF3biBwaWVjZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgLy8gVGhlIHdoaXRlIHJvb2sgb24gYTEgKHNxdWFyZSAwKS5cbiAgICBjb25zdCByb29rID0gZmluZFBhd25BdChlbmdpbmUsIDApITtcbiAgICBjb25zdCBleHRyYSA9IHByZXNldCgpLmdldEV4dHJhTW92ZXMhKGVuZ2luZSwgcm9vayk7XG4gICAgZXhwZWN0KGV4dHJhKS50b0VxdWFsKFtdKTtcbiAgfSk7XG59KTtcbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9jaGVzcy9zcmMvcHJlc2V0cy9wYXducy1tb3ZlLWJhY2t3YXJkLnRlc3QudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/30e57b5431b2510d8f0015905b5749d40fb050c7 b/7xOfJqsDU787fe61oSCq1/web/30e57b5431b2510d8f0015905b5749d40fb050c7 deleted file mode 100644 index 9693431..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/30e57b5431b2510d8f0015905b5749d40fb050c7 +++ /dev/null @@ -1,222 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/engine.ts", {"importedNames":["ChessEngine"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/presets/index.ts"); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/layouts/index.ts"); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["algebraicToSquare"]}); -const __vite_ssr_import_5__ = await __vite_ssr_import__("/src/layouts/empty.ts", {"importedNames":["EMPTY_LAYOUT"]}); -const __vite_ssr_import_6__ = await __vite_ssr_import__("/src/layouts/classic.ts", {"importedNames":["CLASSIC_LAYOUT"]}); -const __vite_ssr_import_7__ = await __vite_ssr_import__("/src/presets/active-set.ts", {"importedNames":["ActivePresetSet"]}); -const __vite_ssr_import_8__ = await __vite_ssr_import__("/src/schema.ts", {"importedNames":["GAME_ENTITY"]}); -(0,__vite_ssr_import_0__.describe)("ActivePresetSet ↔ ChessEngine.getAllLegalMoves integration", () => { - (0,__vite_ssr_import_0__.it)("standard chess: no preset lets a pawn move backward (sanity baseline)", () => { - const engine = new __vite_ssr_import_1__.ChessEngine(); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_4__.algebraicToSquare)("e2"), (0,__vite_ssr_import_4__.algebraicToSquare)("e4")) - ); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_4__.algebraicToSquare)("e7"), (0,__vite_ssr_import_4__.algebraicToSquare)("e5")) - ); - const backward = engine.findMove( - (0,__vite_ssr_import_4__.algebraicToSquare)("e4"), - (0,__vite_ssr_import_4__.algebraicToSquare)("e3") - ); - (0,__vite_ssr_import_0__.expect)(backward).toBeNull(); - }); - (0,__vite_ssr_import_0__.it)("pawns-move-backward (scope=both): e4 pawn CAN move back to e3", () => { - const engine = new __vite_ssr_import_1__.ChessEngine(); - engine.activePresets.replaceAll([ - { id: "pawns-move-backward", scope: "both", turnsRemaining: null } - ]); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_4__.algebraicToSquare)("e2"), (0,__vite_ssr_import_4__.algebraicToSquare)("e4")) - ); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_4__.algebraicToSquare)("e7"), (0,__vite_ssr_import_4__.algebraicToSquare)("e5")) - ); - const backward = engine.findMove( - (0,__vite_ssr_import_4__.algebraicToSquare)("e4"), - (0,__vite_ssr_import_4__.algebraicToSquare)("e3") - ); - (0,__vite_ssr_import_0__.expect)(backward).not.toBeNull(); - (0,__vite_ssr_import_0__.expect)(backward.isCapture).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("deactivating a preset mid-session removes its extra moves immediately", () => { - const engine = new __vite_ssr_import_1__.ChessEngine(); - engine.activePresets.replaceAll([ - { id: "pawns-move-backward", scope: "both", turnsRemaining: null } - ]); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_4__.algebraicToSquare)("e2"), (0,__vite_ssr_import_4__.algebraicToSquare)("e4")) - ); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_4__.algebraicToSquare)("e7"), (0,__vite_ssr_import_4__.algebraicToSquare)("e5")) - ); - (0,__vite_ssr_import_0__.expect)( - engine.findMove((0,__vite_ssr_import_4__.algebraicToSquare)("e4"), (0,__vite_ssr_import_4__.algebraicToSquare)("e3")) - ).not.toBeNull(); - engine.activePresets.replaceAll([]); - (0,__vite_ssr_import_0__.expect)( - engine.findMove((0,__vite_ssr_import_4__.algebraicToSquare)("e4"), (0,__vite_ssr_import_4__.algebraicToSquare)("e3")) - ).toBeNull(); - }); - (0,__vite_ssr_import_0__.it)("pawn-diagonal-no-capture (scope=both): adds diagonal quiet moves", () => { - const engine = new __vite_ssr_import_1__.ChessEngine(); - (0,__vite_ssr_import_0__.expect)( - engine.findMove((0,__vite_ssr_import_4__.algebraicToSquare)("e2"), (0,__vite_ssr_import_4__.algebraicToSquare)("f3")) - ).toBeNull(); - engine.activePresets.replaceAll([ - { id: "pawn-diagonal-no-capture", scope: "both", turnsRemaining: null } - ]); - const diag = engine.findMove( - (0,__vite_ssr_import_4__.algebraicToSquare)("e2"), - (0,__vite_ssr_import_4__.algebraicToSquare)("f3") - ); - (0,__vite_ssr_import_0__.expect)(diag).not.toBeNull(); - (0,__vite_ssr_import_0__.expect)(diag.isCapture).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("mid-game toggle: activating a preset affects the very next move calc", () => { - const engine = new __vite_ssr_import_1__.ChessEngine(); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_4__.algebraicToSquare)("e2"), (0,__vite_ssr_import_4__.algebraicToSquare)("e4")) - ); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_4__.algebraicToSquare)("e7"), (0,__vite_ssr_import_4__.algebraicToSquare)("e5")) - ); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_4__.algebraicToSquare)("d2"), (0,__vite_ssr_import_4__.algebraicToSquare)("d4")) - ); - (0,__vite_ssr_import_0__.expect)( - engine.findMove((0,__vite_ssr_import_4__.algebraicToSquare)("e5"), (0,__vite_ssr_import_4__.algebraicToSquare)("e6")) - ).toBeNull(); - engine.activePresets.replaceAll([ - { id: "pawns-move-backward", scope: "both", turnsRemaining: null } - ]); - const retreat = engine.findMove( - (0,__vite_ssr_import_4__.algebraicToSquare)("e5"), - (0,__vite_ssr_import_4__.algebraicToSquare)("e6") - ); - (0,__vite_ssr_import_0__.expect)(retreat).not.toBeNull(); - engine.applyMove(retreat); - engine.activePresets.replaceAll([]); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_4__.algebraicToSquare)("a2"), (0,__vite_ssr_import_4__.algebraicToSquare)("a3")) - ); - (0,__vite_ssr_import_0__.expect)( - engine.findMove((0,__vite_ssr_import_4__.algebraicToSquare)("e6"), (0,__vite_ssr_import_4__.algebraicToSquare)("e7")) - ).toBeNull(); - }); - (0,__vite_ssr_import_0__.it)("multiple presets compose: backward + diagonal-no-capture both apply", () => { - const engine = new __vite_ssr_import_1__.ChessEngine(); - engine.activePresets.replaceAll([ - { id: "pawns-move-backward", scope: "both", turnsRemaining: null }, - { id: "pawn-diagonal-no-capture", scope: "both", turnsRemaining: null } - ]); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_4__.algebraicToSquare)("e2"), (0,__vite_ssr_import_4__.algebraicToSquare)("e4")) - ); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_4__.algebraicToSquare)("a7"), (0,__vite_ssr_import_4__.algebraicToSquare)("a6")) - ); - (0,__vite_ssr_import_0__.expect)( - engine.findMove((0,__vite_ssr_import_4__.algebraicToSquare)("e4"), (0,__vite_ssr_import_4__.algebraicToSquare)("e3")) - ).not.toBeNull(); - }); - (0,__vite_ssr_import_0__.describe)("per-color scope", () => { - (0,__vite_ssr_import_0__.it)("white-only preset does NOT apply to black's moves", () => { - const engine = new __vite_ssr_import_1__.ChessEngine(); - engine.activePresets.replaceAll([ - { id: "knights-leap-twice", scope: "white", turnsRemaining: null } - ]); - const whiteMoves = engine.getAllLegalMoves(); - const whiteKnightDoubleLeaps = whiteMoves.filter( - (m) => m.from === (0,__vite_ssr_import_4__.algebraicToSquare)("g1") - ); - (0,__vite_ssr_import_0__.expect)(whiteKnightDoubleLeaps.length).toBeGreaterThan(2); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_4__.algebraicToSquare)("a2"), (0,__vite_ssr_import_4__.algebraicToSquare)("a3")) - ); - const blackMoves = engine.getAllLegalMoves(); - const blackKnightMoves = blackMoves.filter( - (m) => m.from === (0,__vite_ssr_import_4__.algebraicToSquare)("g8") - ); - (0,__vite_ssr_import_0__.expect)(blackKnightMoves).toHaveLength(2); - }); - (0,__vite_ssr_import_0__.it)("black-only preset does NOT apply to white's moves", () => { - const engine = new __vite_ssr_import_1__.ChessEngine(); - engine.activePresets.replaceAll([ - { id: "knights-leap-twice", scope: "black", turnsRemaining: null } - ]); - const whiteKnightMoves = engine.getAllLegalMoves().filter((m) => m.from === (0,__vite_ssr_import_4__.algebraicToSquare)("g1")); - (0,__vite_ssr_import_0__.expect)(whiteKnightMoves).toHaveLength(2); - }); - }); - (0,__vite_ssr_import_0__.describe)("turn-limited duration", () => { - (0,__vite_ssr_import_0__.it)("preset expires after its duration elapses", () => { - const engine = new __vite_ssr_import_1__.ChessEngine(); - engine.activePresets.replaceAll([ - { id: "pawns-move-backward", scope: "both", turnsRemaining: 2 } - ]); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_4__.algebraicToSquare)("e2"), (0,__vite_ssr_import_4__.algebraicToSquare)("e4")) - ); - (0,__vite_ssr_import_0__.expect)( - engine.activePresets.list()[0]?.turnsRemaining - ).toBe(1); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_4__.algebraicToSquare)("e7"), (0,__vite_ssr_import_4__.algebraicToSquare)("e5")) - ); - (0,__vite_ssr_import_0__.expect)(engine.activePresets.list()).toHaveLength(0); - (0,__vite_ssr_import_0__.expect)( - engine.findMove((0,__vite_ssr_import_4__.algebraicToSquare)("e4"), (0,__vite_ssr_import_4__.algebraicToSquare)("e3")) - ).toBeNull(); - }); - (0,__vite_ssr_import_0__.it)("scope=white duration ticks only on white's turns", () => { - const engine = new __vite_ssr_import_1__.ChessEngine(); - engine.activePresets.replaceAll([ - { id: "pawns-move-backward", scope: "white", turnsRemaining: 1 } - ]); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_4__.algebraicToSquare)("e2"), (0,__vite_ssr_import_4__.algebraicToSquare)("e4")) - ); - (0,__vite_ssr_import_0__.expect)(engine.activePresets.list()).toHaveLength(0); - }); - }); -}); -(0,__vite_ssr_import_0__.describe)("ChessEngine({ layout, activePresets }) — options-bag constructor", () => { - (0,__vite_ssr_import_0__.it)("{ layout: EMPTY_LAYOUT } produces an engine with zero piece facts", () => { - const engine = new __vite_ssr_import_1__.ChessEngine({ layout: __vite_ssr_import_5__.EMPTY_LAYOUT }); - const pieceTypeFacts = engine.session.allFacts().filter((f) => f.attr === "PieceType" && f.id !== __vite_ssr_import_8__.GAME_ENTITY); - (0,__vite_ssr_import_0__.expect)(pieceTypeFacts).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("{ layout: EMPTY_LAYOUT } still seeds game-level facts (Turn=white, etc.)", () => { - const engine = new __vite_ssr_import_1__.ChessEngine({ layout: __vite_ssr_import_5__.EMPTY_LAYOUT }); - (0,__vite_ssr_import_0__.expect)(engine.session.get((0,__vite_ssr_import_8__.GAME_ENTITY), "Turn")).toBe("white"); - (0,__vite_ssr_import_0__.expect)(engine.session.get((0,__vite_ssr_import_8__.GAME_ENTITY), "GameStatus")).toBe("active"); - }); - (0,__vite_ssr_import_0__.it)("{ layout: CLASSIC_LAYOUT } matches the legacy new ChessEngine() output", () => { - const legacy = new __vite_ssr_import_1__.ChessEngine(); - const viaOpts = new __vite_ssr_import_1__.ChessEngine({ layout: __vite_ssr_import_6__.CLASSIC_LAYOUT }); - const factKey = (f) => `${f.id}|${f.attr}|${String(f.value)}`; - const a = new Set(legacy.session.allFacts().map(factKey)); - const b = new Set(viaOpts.session.allFacts().map(factKey)); - (0,__vite_ssr_import_0__.expect)(a).toEqual(b); - }); - (0,__vite_ssr_import_0__.it)("{} (empty options bag) defaults to CLASSIC_LAYOUT + empty preset set", () => { - const engine = new __vite_ssr_import_1__.ChessEngine({}); - (0,__vite_ssr_import_0__.expect)(engine.activePresets.list()).toHaveLength(0); - const pieces = engine.session.allFacts().filter((f) => f.attr === "PieceType" && f.id !== __vite_ssr_import_8__.GAME_ENTITY); - (0,__vite_ssr_import_0__.expect)(pieces).toHaveLength(32); - }); - (0,__vite_ssr_import_0__.it)("{ activePresets } via options bag works identically to positional form", () => { - const presets = new __vite_ssr_import_7__.ActivePresetSet(); - presets.replaceAll([ - { id: "pawns-move-backward", scope: "both", turnsRemaining: null } - ]); - const engine = new __vite_ssr_import_1__.ChessEngine({ activePresets: presets }); - (0,__vite_ssr_import_0__.expect)(engine.activePresets.list()).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(engine.activePresets.list()[0]?.id).toBe("pawns-move-backward"); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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U0FBUyxJQUFJLGtDQUFZLENBQUMsQ0FBQztBQUNqQyxxQ0FBTyxPQUFPLGNBQWMsS0FBSyxDQUFDLEVBQUUsYUFBYSxDQUFDO0FBQ2xELFVBQU0sU0FBUyxPQUFPLFFBQ25CLFNBQVMsRUFDVCxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsZUFBZSxFQUFFLE9BQU8saUNBQVc7QUFDL0QscUNBQU8sTUFBTSxFQUFFLGFBQWEsRUFBRTtBQUFBLEVBQ2hDLENBQUM7QUFFRCwrQkFBRywwRUFBMEUsTUFBTTtBQUNqRixVQUFNLFVBQVUsSUFBSSxzQ0FBZ0I7QUFDcEMsWUFBUSxXQUFXO0FBQUEsTUFDakIsRUFBRSxJQUFJLHVCQUF1QixPQUFPLFFBQVEsZ0JBQWdCLEtBQUs7QUFBQSxJQUNuRSxDQUFDO0FBQ0QsVUFBTSxTQUFTLElBQUksa0NBQVksRUFBRSxlQUFlLFFBQVEsQ0FBQztBQUN6RCxxQ0FBTyxPQUFPLGNBQWMsS0FBSyxDQUFDLEVBQUUsYUFBYSxDQUFDO0FBQ2xELHFDQUFPLE9BQU8sY0FBYyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxLQUFLLHFCQUFxQjtBQUFBLEVBQ3ZFLENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJlbmdpbmUtcHJlc2V0cy50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW50ZWdyYXRpb24gdGVzdHMgcHJvdmluZyB0aGF0IG11dGF0aW5nIGEgQ2hlc3NFbmdpbmUnc1xuICogYGFjdGl2ZVByZXNldHNgIHNldCBhY3R1YWxseSBjaGFuZ2VzIHdoYXQgYGdldEFsbExlZ2FsTW92ZXMoKWBcbiAqIHJldHVybnMg4oCUIGJvdGggZm9yIGFkZGluZyBtb3ZlcyAoZ2V0RXh0cmFNb3ZlcykgYW5kIHJlbW92aW5nIHRoZW1cbiAqIChmaWx0ZXJNb3ZlcykuXG4gKlxuICogVGhlc2UgdGVzdHMgY3Jvc3MgdGhlIHByZXNldCDihpIgZW5naW5lIGJvdW5kYXJ5LCBzbyB0aGV5IGxpdmUgYXQgdGhlXG4gKiBwYWNrYWdlIHJvb3QgcmF0aGVyIHRoYW4gdW5kZXIgcHJlc2V0cy8uXG4gKi9cbmltcG9ydCB7IGRlc2NyaWJlLCBpdCwgZXhwZWN0IH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IHsgQ2hlc3NFbmdpbmUgfSBmcm9tIFwiLi9lbmdpbmUuanNcIjtcbmltcG9ydCBcIi4vcHJlc2V0cy9pbmRleC5qc1wiO1xuaW1wb3J0IFwiLi9sYXlvdXRzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBhbGdlYnJhaWNUb1NxdWFyZSB9IGZyb20gXCIuL2Nvb3JkLmpzXCI7XG5pbXBvcnQgeyBFTVBUWV9MQVlPVVQgfSBmcm9tIFwiLi9sYXlvdXRzL2VtcHR5LmpzXCI7XG5pbXBvcnQgeyBDTEFTU0lDX0xBWU9VVCB9IGZyb20gXCIuL2xheW91dHMvY2xhc3NpYy5qc1wiO1xuaW1wb3J0IHsgQWN0aXZlUHJlc2V0U2V0IH0gZnJvbSBcIi4vcHJlc2V0cy9hY3RpdmUtc2V0LmpzXCI7XG5pbXBvcnQgeyBHQU1FX0VOVElUWSB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuXG5kZXNjcmliZShcIkFjdGl2ZVByZXNldFNldCDihpQgQ2hlc3NFbmdpbmUuZ2V0QWxsTGVnYWxNb3ZlcyBpbnRlZ3JhdGlvblwiLCAoKSA9PiB7XG4gIGl0KFwic3RhbmRhcmQgY2hlc3M6IG5vIHByZXNldCBsZXRzIGEgcGF3biBtb3ZlIGJhY2t3YXJkIChzYW5pdHkgYmFzZWxpbmUpXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBlbmdpbmUuYXBwbHlNb3ZlKFxuICAgICAgZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZTJcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiZTRcIikpISxcbiAgICApO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoXG4gICAgICBlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJlN1wiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJlNVwiKSkhLFxuICAgICk7XG5cbiAgICBjb25zdCBiYWNrd2FyZCA9IGVuZ2luZS5maW5kTW92ZShcbiAgICAgIGFsZ2VicmFpY1RvU3F1YXJlKFwiZTRcIiksXG4gICAgICBhbGdlYnJhaWNUb1NxdWFyZShcImUzXCIpLFxuICAgICk7XG4gICAgZXhwZWN0KGJhY2t3YXJkKS50b0JlTnVsbCgpO1xuICB9KTtcblxuICBpdChcInBhd25zLW1vdmUtYmFja3dhcmQgKHNjb3BlPWJvdGgpOiBlNCBwYXduIENBTiBtb3ZlIGJhY2sgdG8gZTNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGVuZ2luZS5hY3RpdmVQcmVzZXRzLnJlcGxhY2VBbGwoW1xuICAgICAgeyBpZDogXCJwYXducy1tb3ZlLWJhY2t3YXJkXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcblxuICAgIGVuZ2luZS5hcHBseU1vdmUoXG4gICAgICBlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJlMlwiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJlNFwiKSkhLFxuICAgICk7XG4gICAgZW5naW5lLmFwcGx5TW92ZShcbiAgICAgIGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImU3XCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImU1XCIpKSEsXG4gICAgKTtcblxuICAgIGNvbnN0IGJhY2t3YXJkID0gZW5naW5lLmZpbmRNb3ZlKFxuICAgICAgYWxnZWJyYWljVG9TcXVhcmUoXCJlNFwiKSxcbiAgICAgIGFsZ2VicmFpY1RvU3F1YXJlKFwiZTNcIiksXG4gICAgKTtcbiAgICBleHBlY3QoYmFja3dhcmQpLm5vdC50b0JlTnVsbCgpO1xuICAgIGV4cGVjdChiYWNrd2FyZCEuaXNDYXB0dXJlKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJkZWFjdGl2YXRpbmcgYSBwcmVzZXQgbWlkLXNlc3Npb24gcmVtb3ZlcyBpdHMgZXh0cmEgbW92ZXMgaW1tZWRpYXRlbHlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGVuZ2luZS5hY3RpdmVQcmVzZXRzLnJlcGxhY2VBbGwoW1xuICAgICAgeyBpZDogXCJwYXducy1tb3ZlLWJhY2t3YXJkXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcblxuICAgIGVuZ2luZS5hcHBseU1vdmUoXG4gICAgICBlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJlMlwiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJlNFwiKSkhLFxuICAgICk7XG4gICAgZW5naW5lLmFwcGx5TW92ZShcbiAgICAgIGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImU3XCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImU1XCIpKSEsXG4gICAgKTtcbiAgICBleHBlY3QoXG4gICAgICBlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJlNFwiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJlM1wiKSksXG4gICAgKS5ub3QudG9CZU51bGwoKTtcblxuICAgIGVuZ2luZS5hY3RpdmVQcmVzZXRzLnJlcGxhY2VBbGwoW10pO1xuICAgIGV4cGVjdChcbiAgICAgIGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImU0XCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImUzXCIpKSxcbiAgICApLnRvQmVOdWxsKCk7XG4gIH0pO1xuXG4gIGl0KFwicGF3bi1kaWFnb25hbC1uby1jYXB0dXJlIChzY29wZT1ib3RoKTogYWRkcyBkaWFnb25hbCBxdWlldCBtb3Zlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgZXhwZWN0KFxuICAgICAgZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZTJcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiZjNcIikpLFxuICAgICkudG9CZU51bGwoKTtcblxuICAgIGVuZ2luZS5hY3RpdmVQcmVzZXRzLnJlcGxhY2VBbGwoW1xuICAgICAgeyBpZDogXCJwYXduLWRpYWdvbmFsLW5vLWNhcHR1cmVcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuICAgIGNvbnN0IGRpYWcgPSBlbmdpbmUuZmluZE1vdmUoXG4gICAgICBhbGdlYnJhaWNUb1NxdWFyZShcImUyXCIpLFxuICAgICAgYWxnZWJyYWljVG9TcXVhcmUoXCJmM1wiKSxcbiAgICApO1xuICAgIGV4cGVjdChkaWFnKS5ub3QudG9CZU51bGwoKTtcbiAgICBleHBlY3QoZGlhZyEuaXNDYXB0dXJlKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJtaWQtZ2FtZSB0b2dnbGU6IGFjdGl2YXRpbmcgYSBwcmVzZXQgYWZmZWN0cyB0aGUgdmVyeSBuZXh0IG1vdmUgY2FsY1wiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgZW5naW5lLmFwcGx5TW92ZShcbiAgICAgIGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImUyXCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImU0XCIpKSEsXG4gICAgKTtcbiAgICBlbmdpbmUuYXBwbHlNb3ZlKFxuICAgICAgZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZTdcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiZTVcIikpISxcbiAgICApO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoXG4gICAgICBlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJkMlwiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJkNFwiKSkhLFxuICAgICk7XG5cbiAgICBleHBlY3QoXG4gICAgICBlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJlNVwiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJlNlwiKSksXG4gICAgKS50b0JlTnVsbCgpO1xuXG4gICAgZW5naW5lLmFjdGl2ZVByZXNldHMucmVwbGFjZUFsbChbXG4gICAgICB7IGlkOiBcInBhd25zLW1vdmUtYmFja3dhcmRcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuICAgIGNvbnN0IHJldHJlYXQgPSBlbmdpbmUuZmluZE1vdmUoXG4gICAgICBhbGdlYnJhaWNUb1NxdWFyZShcImU1XCIpLFxuICAgICAgYWxnZWJyYWljVG9TcXVhcmUoXCJlNlwiKSxcbiAgICApO1xuICAgIGV4cGVjdChyZXRyZWF0KS5ub3QudG9CZU51bGwoKTtcblxuICAgIGVuZ2luZS5hcHBseU1vdmUocmV0cmVhdCEpO1xuICAgIGVuZ2luZS5hY3RpdmVQcmVzZXRzLnJlcGxhY2VBbGwoW10pO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoXG4gICAgICBlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJhMlwiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJhM1wiKSkhLFxuICAgICk7XG4gICAgZXhwZWN0KFxuICAgICAgZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZTZcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiZTdcIikpLFxuICAgICkudG9CZU51bGwoKTtcbiAgfSk7XG5cbiAgaXQoXCJtdWx0aXBsZSBwcmVzZXRzIGNvbXBvc2U6IGJhY2t3YXJkICsgZGlhZ29uYWwtbm8tY2FwdHVyZSBib3RoIGFwcGx5XCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBlbmdpbmUuYWN0aXZlUHJlc2V0cy5yZXBsYWNlQWxsKFtcbiAgICAgIHsgaWQ6IFwicGF3bnMtbW92ZS1iYWNrd2FyZFwiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgICB7IGlkOiBcInBhd24tZGlhZ29uYWwtbm8tY2FwdHVyZVwiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgXSk7XG5cbiAgICBlbmdpbmUuYXBwbHlNb3ZlKFxuICAgICAgZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZTJcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiZTRcIikpISxcbiAgICApO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoXG4gICAgICBlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJhN1wiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJhNlwiKSkhLFxuICAgICk7XG5cbiAgICBleHBlY3QoXG4gICAgICBlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJlNFwiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJlM1wiKSksXG4gICAgKS5ub3QudG9CZU51bGwoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJwZXItY29sb3Igc2NvcGVcIiwgKCkgPT4ge1xuICAgIGl0KFwid2hpdGUtb25seSBwcmVzZXQgZG9lcyBOT1QgYXBwbHkgdG8gYmxhY2sncyBtb3Zlc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICAgIGVuZ2luZS5hY3RpdmVQcmVzZXRzLnJlcGxhY2VBbGwoW1xuICAgICAgICB7IGlkOiBcImtuaWdodHMtbGVhcC10d2ljZVwiLCBzY29wZTogXCJ3aGl0ZVwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgICAgXSk7XG5cbiAgICAgIC8vIFdoaXRlIHRvIG1vdmUg4oCUIGRvdWJsZS1sZWFwIHNob3VsZCBiZSBhbW9uZyB0aGUgbGVnYWwgbW92ZXMgZm9yXG4gICAgICAvLyB0aGUgd2hpdGUgZzEga25pZ2h0IChnMSDihpIgZTMgdmlhIGYzIGludGVybWVkaWF0ZSBmb3IgaW5zdGFuY2UpLlxuICAgICAgY29uc3Qgd2hpdGVNb3ZlcyA9IGVuZ2luZS5nZXRBbGxMZWdhbE1vdmVzKCk7XG4gICAgICBjb25zdCB3aGl0ZUtuaWdodERvdWJsZUxlYXBzID0gd2hpdGVNb3Zlcy5maWx0ZXIoXG4gICAgICAgIChtKSA9PiBtLmZyb20gPT09IGFsZ2VicmFpY1RvU3F1YXJlKFwiZzFcIiksXG4gICAgICApO1xuICAgICAgLy8gU3RhbmRhcmQgc2luZ2xlIGxlYXBzOiBmMywgaDMuIERvdWJsZS1sZWFwIGFkZHMgZXh0cmFzLlxuICAgICAgZXhwZWN0KHdoaXRlS25pZ2h0RG91YmxlTGVhcHMubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMik7XG5cbiAgICAgIC8vIEFwcGx5IGEgbmV1dHJhbCB3aGl0ZSBtb3ZlIHNvIGl0J3MgYmxhY2sncyB0dXJuLlxuICAgICAgZW5naW5lLmFwcGx5TW92ZShcbiAgICAgICAgZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiYTJcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiYTNcIikpISxcbiAgICAgICk7XG5cbiAgICAgIC8vIE5vdyBibGFjayB0byBtb3ZlIOKAlCB0aGUgcHJlc2V0IGlzIHdoaXRlLXNjb3BlLCBzbyBibGFjaydzXG4gICAgICAvLyBrbmlnaHRzIHNob3VsZCBvbmx5IGhhdmUgdGhlIDIgc3RhbmRhcmQgc2luZ2xlIGxlYXBzLlxuICAgICAgY29uc3QgYmxhY2tNb3ZlcyA9IGVuZ2luZS5nZXRBbGxMZWdhbE1vdmVzKCk7XG4gICAgICBjb25zdCBibGFja0tuaWdodE1vdmVzID0gYmxhY2tNb3Zlcy5maWx0ZXIoXG4gICAgICAgIChtKSA9PiBtLmZyb20gPT09IGFsZ2VicmFpY1RvU3F1YXJlKFwiZzhcIiksXG4gICAgICApO1xuICAgICAgZXhwZWN0KGJsYWNrS25pZ2h0TW92ZXMpLnRvSGF2ZUxlbmd0aCgyKTtcbiAgICB9KTtcblxuICAgIGl0KFwiYmxhY2stb25seSBwcmVzZXQgZG9lcyBOT1QgYXBwbHkgdG8gd2hpdGUncyBtb3Zlc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICAgIGVuZ2luZS5hY3RpdmVQcmVzZXRzLnJlcGxhY2VBbGwoW1xuICAgICAgICB7IGlkOiBcImtuaWdodHMtbGVhcC10d2ljZVwiLCBzY29wZTogXCJibGFja1wiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgICAgXSk7XG5cbiAgICAgIGNvbnN0IHdoaXRlS25pZ2h0TW92ZXMgPSBlbmdpbmVcbiAgICAgICAgLmdldEFsbExlZ2FsTW92ZXMoKVxuICAgICAgICAuZmlsdGVyKChtKSA9PiBtLmZyb20gPT09IGFsZ2VicmFpY1RvU3F1YXJlKFwiZzFcIikpO1xuICAgICAgLy8gU3RhbmRhcmQga25pZ2h0IGhhcyBvbmx5IDIgbGVnYWwgbGVhcHMgZnJvbSBnMS5cbiAgICAgIGV4cGVjdCh3aGl0ZUtuaWdodE1vdmVzKS50b0hhdmVMZW5ndGgoMik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwidHVybi1saW1pdGVkIGR1cmF0aW9uXCIsICgpID0+IHtcbiAgICBpdChcInByZXNldCBleHBpcmVzIGFmdGVyIGl0cyBkdXJhdGlvbiBlbGFwc2VzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgICAgZW5naW5lLmFjdGl2ZVByZXNldHMucmVwbGFjZUFsbChbXG4gICAgICAgIHsgaWQ6IFwicGF3bnMtbW92ZS1iYWNrd2FyZFwiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiAyIH0sXG4gICAgICBdKTtcblxuICAgICAgZW5naW5lLmFwcGx5TW92ZShcbiAgICAgICAgZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZTJcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiZTRcIikpISxcbiAgICAgICk7XG4gICAgICAvLyBBZnRlciB3aGl0ZSdzIG1vdmUsIHNjb3BlPWJvdGggdGlja3Mg4oaSIDEgcmVtYWluaW5nLlxuICAgICAgZXhwZWN0KFxuICAgICAgICBlbmdpbmUuYWN0aXZlUHJlc2V0cy5saXN0KClbMF0/LnR1cm5zUmVtYWluaW5nLFxuICAgICAgKS50b0JlKDEpO1xuXG4gICAgICBlbmdpbmUuYXBwbHlNb3ZlKFxuICAgICAgICBlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJlN1wiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJlNVwiKSkhLFxuICAgICAgKTtcbiAgICAgIC8vIEFmdGVyIGJsYWNrJ3MgbW92ZSwgMCDihpIgcmVtb3ZlZC5cbiAgICAgIGV4cGVjdChlbmdpbmUuYWN0aXZlUHJlc2V0cy5saXN0KCkpLnRvSGF2ZUxlbmd0aCgwKTtcblxuICAgICAgLy8gRnVydGhlciBiYWNrd2FyZCBtb3ZlIGF0dGVtcHRzIHNob3VsZCBmYWlsLlxuICAgICAgZXhwZWN0KFxuICAgICAgICBlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJlNFwiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJlM1wiKSksXG4gICAgICApLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNjb3BlPXdoaXRlIGR1cmF0aW9uIHRpY2tzIG9ubHkgb24gd2hpdGUncyB0dXJuc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICAgIGVuZ2luZS5hY3RpdmVQcmVzZXRzLnJlcGxhY2VBbGwoW1xuICAgICAgICB7IGlkOiBcInBhd25zLW1vdmUtYmFja3dhcmRcIiwgc2NvcGU6IFwid2hpdGVcIiwgdHVybnNSZW1haW5pbmc6IDEgfSxcbiAgICAgIF0pO1xuXG4gICAgICAvLyBCbGFjayBtb3ZlcyBmaXJzdD8gTm8g4oCUIHdoaXRlIGFsd2F5cyBtb3ZlcyBmaXJzdC4gUGxheSBhIHdoaXRlXG4gICAgICAvLyBtb3ZlIOKAlCB0aGF0IHRpY2tzIHRoZSB3aGl0ZSBjb3VudGVyIGZyb20gMSDihpIgZXhwaXJlZC5cbiAgICAgIGVuZ2luZS5hcHBseU1vdmUoXG4gICAgICAgIGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImUyXCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImU0XCIpKSEsXG4gICAgICApO1xuICAgICAgZXhwZWN0KGVuZ2luZS5hY3RpdmVQcmVzZXRzLmxpc3QoKSkudG9IYXZlTGVuZ3RoKDApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEVuZ2luZU9wdGlvbnM6IGxheW91dCArIGFjdGl2ZVByZXNldHMgdmlhIG9wdGlvbnMtYmFnIGNvbnN0cnVjdG9yXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZGVzY3JpYmUoXCJDaGVzc0VuZ2luZSh7IGxheW91dCwgYWN0aXZlUHJlc2V0cyB9KSDigJQgb3B0aW9ucy1iYWcgY29uc3RydWN0b3JcIiwgKCkgPT4ge1xuICBpdChcInsgbGF5b3V0OiBFTVBUWV9MQVlPVVQgfSBwcm9kdWNlcyBhbiBlbmdpbmUgd2l0aCB6ZXJvIHBpZWNlIGZhY3RzXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoeyBsYXlvdXQ6IEVNUFRZX0xBWU9VVCB9KTtcbiAgICBjb25zdCBwaWVjZVR5cGVGYWN0cyA9IGVuZ2luZS5zZXNzaW9uXG4gICAgICAuYWxsRmFjdHMoKVxuICAgICAgLmZpbHRlcigoZikgPT4gZi5hdHRyID09PSBcIlBpZWNlVHlwZVwiICYmIGYuaWQgIT09IEdBTUVfRU5USVRZKTtcbiAgICBleHBlY3QocGllY2VUeXBlRmFjdHMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG5cbiAgaXQoXCJ7IGxheW91dDogRU1QVFlfTEFZT1VUIH0gc3RpbGwgc2VlZHMgZ2FtZS1sZXZlbCBmYWN0cyAoVHVybj13aGl0ZSwgZXRjLilcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSh7IGxheW91dDogRU1QVFlfTEFZT1VUIH0pO1xuICAgIGV4cGVjdChlbmdpbmUuc2Vzc2lvbi5nZXQoR0FNRV9FTlRJVFksIFwiVHVyblwiKSkudG9CZShcIndoaXRlXCIpO1xuICAgIGV4cGVjdChlbmdpbmUuc2Vzc2lvbi5nZXQoR0FNRV9FTlRJVFksIFwiR2FtZVN0YXR1c1wiKSkudG9CZShcImFjdGl2ZVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJ7IGxheW91dDogQ0xBU1NJQ19MQVlPVVQgfSBtYXRjaGVzIHRoZSBsZWdhY3kgbmV3IENoZXNzRW5naW5lKCkgb3V0cHV0XCIsICgpID0+IHtcbiAgICBjb25zdCBsZWdhY3kgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBjb25zdCB2aWFPcHRzID0gbmV3IENoZXNzRW5naW5lKHsgbGF5b3V0OiBDTEFTU0lDX0xBWU9VVCB9KTtcbiAgICAvLyBDb21wYXJlIHBpZWNlLWZhY3Qgc2V0czsgZW50aXR5IGlkcyBzaG91bGQgbWF0Y2ggc2luY2UgYm90aFxuICAgIC8vIHNlc3Npb25zIHN0YXJ0IGZyb20gMCBhbmQgYXBwbHkgaWRlbnRpY2FsIGxheW91dHMgaW4gaWRlbnRpY2FsXG4gICAgLy8gb3JkZXIuXG4gICAgY29uc3QgZmFjdEtleSA9IChmOiB7IGlkOiBudW1iZXI7IGF0dHI6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfSkgPT5cbiAgICAgIGAke2YuaWR9fCR7Zi5hdHRyfXwke1N0cmluZyhmLnZhbHVlKX1gO1xuICAgIGNvbnN0IGEgPSBuZXcgU2V0KGxlZ2FjeS5zZXNzaW9uLmFsbEZhY3RzKCkubWFwKGZhY3RLZXkpKTtcbiAgICBjb25zdCBiID0gbmV3IFNldCh2aWFPcHRzLnNlc3Npb24uYWxsRmFjdHMoKS5tYXAoZmFjdEtleSkpO1xuICAgIGV4cGVjdChhKS50b0VxdWFsKGIpO1xuICB9KTtcblxuICBpdChcInt9IChlbXB0eSBvcHRpb25zIGJhZykgZGVmYXVsdHMgdG8gQ0xBU1NJQ19MQVlPVVQgKyBlbXB0eSBwcmVzZXQgc2V0XCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoe30pO1xuICAgIGV4cGVjdChlbmdpbmUuYWN0aXZlUHJlc2V0cy5saXN0KCkpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgICBjb25zdCBwaWVjZXMgPSBlbmdpbmUuc2Vzc2lvblxuICAgICAgLmFsbEZhY3RzKClcbiAgICAgIC5maWx0ZXIoKGYpID0+IGYuYXR0ciA9PT0gXCJQaWVjZVR5cGVcIiAmJiBmLmlkICE9PSBHQU1FX0VOVElUWSk7XG4gICAgZXhwZWN0KHBpZWNlcykudG9IYXZlTGVuZ3RoKDMyKTsgLy8gc3RhbmRhcmQgRklERVxuICB9KTtcblxuICBpdChcInsgYWN0aXZlUHJlc2V0cyB9IHZpYSBvcHRpb25zIGJhZyB3b3JrcyBpZGVudGljYWxseSB0byBwb3NpdGlvbmFsIGZvcm1cIiwgKCkgPT4ge1xuICAgIGNvbnN0IHByZXNldHMgPSBuZXcgQWN0aXZlUHJlc2V0U2V0KCk7XG4gICAgcHJlc2V0cy5yZXBsYWNlQWxsKFtcbiAgICAgIHsgaWQ6IFwicGF3bnMtbW92ZS1iYWNrd2FyZFwiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgXSk7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKHsgYWN0aXZlUHJlc2V0czogcHJlc2V0cyB9KTtcbiAgICBleHBlY3QoZW5naW5lLmFjdGl2ZVByZXNldHMubGlzdCgpKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgZXhwZWN0KGVuZ2luZS5hY3RpdmVQcmVzZXRzLmxpc3QoKVswXT8uaWQpLnRvQmUoXCJwYXducy1tb3ZlLWJhY2t3YXJkXCIpO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL2NoZXNzL3NyYy9lbmdpbmUtcHJlc2V0cy50ZXN0LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/30ebd793fe734fae4420662fadde274ae2ba2cd3 b/7xOfJqsDU787fe61oSCq1/web/30ebd793fe734fae4420662fadde274ae2ba2cd3 deleted file mode 100644 index a3fa27d..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/30ebd793fe734fae4420662fadde274ae2ba2cd3 +++ /dev/null @@ -1,38 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["rankOf"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/rules/board-queries.ts", {"importedNames":["getPiecePosition","getPieceColor","isPieceAt"]}); - - - - -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/presets/registry.ts", {"importedNames":["PRESET_REGISTRY"]}); -function getDoubleSprintMove(engine, pieceId) { - const pieceType = engine.session.get(pieceId, "PieceType"); - if (pieceType !== "pawn") return []; - const from = (0,__vite_ssr_import_1__.getPiecePosition)(engine.session, pieceId); - const color = (0,__vite_ssr_import_1__.getPieceColor)(engine.session, pieceId); - if (from === null || color === null) return []; - const rank = (0,__vite_ssr_import_0__.rankOf)(from); - const homeRank = color === "white" ? 1 : 6; - if (rank === homeRank) return []; - const step = color === "white" ? 8 : -8; - const single = from + step; - const dbl = from + step * 2; - const singleRank = color === "white" ? rank + 1 : rank - 1; - const dblRank = color === "white" ? rank + 2 : rank - 2; - if (singleRank < 0 || singleRank > 7) return []; - if (dblRank < 0 || dblRank > 7) return []; - if ((0,__vite_ssr_import_1__.isPieceAt)(engine.session, single)) return []; - if ((0,__vite_ssr_import_1__.isPieceAt)(engine.session, dbl)) return []; - return [{ pieceId, from, to: dbl, isCapture: false }]; -} -__vite_ssr_import_2__.PRESET_REGISTRY.register({ - id: "double-pawn-sprint", - name: "Perpetual Sprint", - description: "Pawns may advance 2 squares straight forward from ANY rank (not only the home rank).", - incompatibleWith: [], - requires: [], - getExtraMoves: getDoubleSprintMove -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBa0JBO0FBQ0E7Ozs7O0FBS0E7QUFFQSxTQUFTLG9CQUFvQixRQUFxQixTQUFnQztBQUNoRixRQUFNLFlBQVksT0FBTyxRQUFRLElBQUksU0FBUyxXQUFXO0FBQ3pELE1BQUksY0FBYyxPQUFRLFFBQU8sQ0FBQztBQUVsQyxRQUFNLFVBQU8sd0NBQWlCLE9BQU8sU0FBUyxPQUFPO0FBQ3JELFFBQU0sV0FBUSxxQ0FBYyxPQUFPLFNBQVMsT0FBTztBQUNuRCxNQUFJLFNBQVMsUUFBUSxVQUFVLEtBQU0sUUFBTyxDQUFDO0FBRzdDLFFBQU0sVUFBTyw4QkFBTyxJQUFJO0FBQ3hCLFFBQU0sV0FBVyxVQUFVLFVBQVUsSUFBSTtBQUN6QyxNQUFJLFNBQVMsU0FBVSxRQUFPLENBQUM7QUFFL0IsUUFBTSxPQUFPLFVBQVUsVUFBVSxJQUFJO0FBQ3JDLFFBQU0sU0FBUyxPQUFPO0FBQ3RCLFFBQU0sTUFBTSxPQUFPLE9BQU87QUFHMUIsUUFBTSxhQUFhLFVBQVUsVUFBVSxPQUFPLElBQUksT0FBTztBQUN6RCxRQUFNLFVBQVUsVUFBVSxVQUFVLE9BQU8sSUFBSSxPQUFPO0FBQ3RELE1BQUksYUFBYSxLQUFLLGFBQWEsRUFBRyxRQUFPLENBQUM7QUFDOUMsTUFBSSxVQUFVLEtBQUssVUFBVSxFQUFHLFFBQU8sQ0FBQztBQUV4QyxTQUFJLGlDQUFVLE9BQU8sU0FBUyxNQUFnQixFQUFHLFFBQU8sQ0FBQztBQUN6RCxTQUFJLGlDQUFVLE9BQU8sU0FBUyxHQUFhLEVBQUcsUUFBTyxDQUFDO0FBRXRELFNBQU8sQ0FBQyxFQUFFLFNBQVMsTUFBTSxJQUFJLEtBQWUsV0FBVyxNQUFNLENBQUM7QUFDaEU7QUFFQSxzQ0FBZ0IsU0FBUztBQUFBLEVBQ3ZCLElBQUk7QUFBQSxFQUNKLE1BQU07QUFBQSxFQUNOLGFBQ0U7QUFBQSxFQUNGLGtCQUFrQixDQUFDO0FBQUEsRUFDbkIsVUFBVSxDQUFDO0FBQUEsRUFDWCxlQUFlO0FBQ2pCLENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImRvdWJsZS1wYXduLXNwcmludC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByZXNldDogUGVycGV0dWFsIFNwcmludCAvIERvdWJsZS1QYXduIFNwcmludCAoUlVMRVMubWQgcnVsZSAyKS5cbiAqXG4gKiBBIHBhd24gbWF5IGFkdmFuY2UgdHdvIHNxdWFyZXMgc3RyYWlnaHQgZm9yd2FyZCBmcm9tIEFOWSByYW5rIChub3Qgb25seVxuICogaXRzIGhvbWUgcmFuayksIHByb3ZpZGVkIGJvdGggaW50ZXJ2ZW5pbmcgc3F1YXJlcyBhcmUgZW1wdHkuXG4gKlxuICogTm9ybWFsIHBhd24gcnVsZXMgYWxyZWFkeSBnZW5lcmF0ZSB0aGUgaG9tZS1yYW5rIGRvdWJsZSBhZHZhbmNlLCBzbyB0aGlzXG4gKiBwcmVzZXQgb25seSBhZGRzIHRoZSBkb3VibGUgYWR2YW5jZSB3aGVuIHRoZSBwYXduIGlzIE9GRiBpdHMgaG9tZSByYW5rLlxuICpcbiAqIE1vZGU6IG92ZXJyaWRlIChjb25jZXB0dWFsbHkgcmVtb3ZlcyB0aGUgYEhhc01vdmVkID0gZmFsc2VgIGd1YXJkKS5cbiAqIENvbWJpbmVzIGNsZWFubHkgd2l0aCBgcGF3bnMtbW92ZS1iYWNrd2FyZGAg4oCUIHRoZSB0d28gcHJlc2V0cyBhZGRcbiAqIG1vdmVzIGluIGRpc2pvaW50IGRpcmVjdGlvbnMgYW5kIHRoZSBiYXNlIHBhd24gcnVsZSBzdGlsbCBydW5zLFxuICogc28gbm8gbW92ZSBjb250cmFkaWN0cyBhbm90aGVyLlxuICovXG5pbXBvcnQgdHlwZSB7IEVudGl0eUlkIH0gZnJvbSBcIkBwYXJhdHlwZS9yZXRlXCI7XG5pbXBvcnQgdHlwZSB7IENoZXNzRW5naW5lIH0gZnJvbSBcIi4uL2VuZ2luZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBMZWdhbE1vdmUgfSBmcm9tIFwiLi4vcnVsZXMvdHlwZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgUGllY2VDb2xvciwgU3F1YXJlIH0gZnJvbSBcIi4uL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHsgcmFua09mIH0gZnJvbSBcIi4uL2Nvb3JkLmpzXCI7XG5pbXBvcnQge1xuICBnZXRQaWVjZVBvc2l0aW9uLFxuICBnZXRQaWVjZUNvbG9yLFxuICBpc1BpZWNlQXQsXG59IGZyb20gXCIuLi9ydWxlcy9ib2FyZC1xdWVyaWVzLmpzXCI7XG5pbXBvcnQgeyBQUkVTRVRfUkVHSVNUUlkgfSBmcm9tIFwiLi9yZWdpc3RyeS5qc1wiO1xuXG5mdW5jdGlvbiBnZXREb3VibGVTcHJpbnRNb3ZlKGVuZ2luZTogQ2hlc3NFbmdpbmUsIHBpZWNlSWQ6IEVudGl0eUlkKTogTGVnYWxNb3ZlW10ge1xuICBjb25zdCBwaWVjZVR5cGUgPSBlbmdpbmUuc2Vzc2lvbi5nZXQocGllY2VJZCwgXCJQaWVjZVR5cGVcIik7XG4gIGlmIChwaWVjZVR5cGUgIT09IFwicGF3blwiKSByZXR1cm4gW107XG5cbiAgY29uc3QgZnJvbSA9IGdldFBpZWNlUG9zaXRpb24oZW5naW5lLnNlc3Npb24sIHBpZWNlSWQpO1xuICBjb25zdCBjb2xvciA9IGdldFBpZWNlQ29sb3IoZW5naW5lLnNlc3Npb24sIHBpZWNlSWQpIGFzIFBpZWNlQ29sb3IgfCBudWxsO1xuICBpZiAoZnJvbSA9PT0gbnVsbCB8fCBjb2xvciA9PT0gbnVsbCkgcmV0dXJuIFtdO1xuXG4gIC8vIFNraXAgaWYgb24gaG9tZSByYW5rIOKAlCB0aGUgbm9ybWFsIGRvdWJsZS1wdXNoIHJ1bGUgYWxyZWFkeSBnZW5lcmF0ZXMgaXQuXG4gIGNvbnN0IHJhbmsgPSByYW5rT2YoZnJvbSk7XG4gIGNvbnN0IGhvbWVSYW5rID0gY29sb3IgPT09IFwid2hpdGVcIiA/IDEgOiA2O1xuICBpZiAocmFuayA9PT0gaG9tZVJhbmspIHJldHVybiBbXTtcblxuICBjb25zdCBzdGVwID0gY29sb3IgPT09IFwid2hpdGVcIiA/IDggOiAtODtcbiAgY29uc3Qgc2luZ2xlID0gZnJvbSArIHN0ZXA7XG4gIGNvbnN0IGRibCA9IGZyb20gKyBzdGVwICogMjtcblxuICAvLyBTdGF5IG9uLWJvYXJkIChjYW5ub3Qgd3JhcCBwYXN0IHJhbmsgNyAvIDApLlxuICBjb25zdCBzaW5nbGVSYW5rID0gY29sb3IgPT09IFwid2hpdGVcIiA/IHJhbmsgKyAxIDogcmFuayAtIDE7XG4gIGNvbnN0IGRibFJhbmsgPSBjb2xvciA9PT0gXCJ3aGl0ZVwiID8gcmFuayArIDIgOiByYW5rIC0gMjtcbiAgaWYgKHNpbmdsZVJhbmsgPCAwIHx8IHNpbmdsZVJhbmsgPiA3KSByZXR1cm4gW107XG4gIGlmIChkYmxSYW5rIDwgMCB8fCBkYmxSYW5rID4gNykgcmV0dXJuIFtdO1xuXG4gIGlmIChpc1BpZWNlQXQoZW5naW5lLnNlc3Npb24sIHNpbmdsZSBhcyBTcXVhcmUpKSByZXR1cm4gW107XG4gIGlmIChpc1BpZWNlQXQoZW5naW5lLnNlc3Npb24sIGRibCBhcyBTcXVhcmUpKSByZXR1cm4gW107XG5cbiAgcmV0dXJuIFt7IHBpZWNlSWQsIGZyb20sIHRvOiBkYmwgYXMgU3F1YXJlLCBpc0NhcHR1cmU6IGZhbHNlIH1dO1xufVxuXG5QUkVTRVRfUkVHSVNUUlkucmVnaXN0ZXIoe1xuICBpZDogXCJkb3VibGUtcGF3bi1zcHJpbnRcIixcbiAgbmFtZTogXCJQZXJwZXR1YWwgU3ByaW50XCIsXG4gIGRlc2NyaXB0aW9uOlxuICAgIFwiUGF3bnMgbWF5IGFkdmFuY2UgMiBzcXVhcmVzIHN0cmFpZ2h0IGZvcndhcmQgZnJvbSBBTlkgcmFuayAobm90IG9ubHkgdGhlIGhvbWUgcmFuaykuXCIsXG4gIGluY29tcGF0aWJsZVdpdGg6IFtdLFxuICByZXF1aXJlczogW10sXG4gIGdldEV4dHJhTW92ZXM6IGdldERvdWJsZVNwcmludE1vdmUsXG59KTtcbiJdLCJmaWxlIjoiL3NyYy9wcmVzZXRzL2RvdWJsZS1wYXduLXNwcmludC50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/30f8abd88eaad257d5243923a60e7c0cc438eaf5 b/7xOfJqsDU787fe61oSCq1/web/30f8abd88eaad257d5243923a60e7c0cc438eaf5 deleted file mode 100644 index a4dad6b..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/30f8abd88eaad257d5243923a60e7c0cc438eaf5 +++ /dev/null @@ -1,21 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "RecursionLimitExceededError", { enumerable: true, configurable: true, get(){ try { return RecursionLimitExceededError } catch {} }}); -/** - * RecursionLimitExceededError — thrown when fireRules() recursion depth exceeds the limit. - * Per SPEC.md §Cycle Detection. - */ -class RecursionLimitExceededError extends Error { - depth; - activationTrace; - constructor(depth, activationTrace) { - const traceStr = activationTrace.length > 0 - ? ` Last activations: [${activationTrace.join(" → ")}]` - : ""; - super(`RecursionLimitExceededError: recursion depth ${depth} exceeded.${traceStr}`); - this.depth = depth; - this.activationTrace = activationTrace; - this.name = "RecursionLimitExceededError"; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0FBSU0sTUFBTywyQkFBNEIsU0FBUSxLQUFLO0lBRXpDO0lBQ0E7SUFGWCxZQUNXLEtBQWEsRUFDYixlQUFrQztRQUUzQyxNQUFNLFFBQVEsR0FDWixlQUFlLENBQUMsTUFBTSxHQUFHO1lBQ3ZCLENBQUMsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDcEQsQ0FBQyxDQUFDLEVBQUU7UUFDUixLQUFLLENBQ0gsZ0RBQWdELEtBQUssYUFBYSxRQUFRLEVBQUUsQ0FDN0U7UUFUUSxVQUFLLEdBQUwsS0FBSztRQUNMLG9CQUFlLEdBQWYsZUFBZTtRQVN4QixJQUFJLENBQUMsSUFBSSxHQUFHLDZCQUE2QjtJQUMzQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2N5Y2xlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVjdXJzaW9uTGltaXRFeGNlZWRlZEVycm9yIOKAlCB0aHJvd24gd2hlbiBmaXJlUnVsZXMoKSByZWN1cnNpb24gZGVwdGggZXhjZWVkcyB0aGUgbGltaXQuXG4gKiBQZXIgU1BFQy5tZCDCp0N5Y2xlIERldGVjdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlY3Vyc2lvbkxpbWl0RXhjZWVkZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgZGVwdGg6IG51bWJlcixcbiAgICByZWFkb25seSBhY3RpdmF0aW9uVHJhY2U6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICApIHtcbiAgICBjb25zdCB0cmFjZVN0ciA9XG4gICAgICBhY3RpdmF0aW9uVHJhY2UubGVuZ3RoID4gMFxuICAgICAgICA/IGAgTGFzdCBhY3RpdmF0aW9uczogWyR7YWN0aXZhdGlvblRyYWNlLmpvaW4oXCIg4oaSIFwiKX1dYFxuICAgICAgICA6IFwiXCI7XG4gICAgc3VwZXIoXG4gICAgICBgUmVjdXJzaW9uTGltaXRFeGNlZWRlZEVycm9yOiByZWN1cnNpb24gZGVwdGggJHtkZXB0aH0gZXhjZWVkZWQuJHt0cmFjZVN0cn1gLFxuICAgICk7XG4gICAgdGhpcy5uYW1lID0gXCJSZWN1cnNpb25MaW1pdEV4Y2VlZGVkRXJyb3JcIjtcbiAgfVxufVxuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvZGlzdC9jeWNsZS5qcyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/3281e36502f2da1d1e777c063dc6be5dd791beca b/7xOfJqsDU787fe61oSCq1/web/3281e36502f2da1d1e777c063dc6be5dd791beca deleted file mode 100644 index 62c18e5..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/3281e36502f2da1d1e777c063dc6be5dd791beca +++ /dev/null @@ -1,81 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/presets/registry.ts", {"importedNames":["PRESET_REGISTRY"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["fileOf","rankOf","squareOf"]}); -const CLOCKWISE_NEIGHBOURS = [ - [0, 1], - // N - [1, 1], - // NE - [1, 0], - // E - [1, -1], - // SE - [0, -1], - // S - [-1, -1], - // SW - [-1, 0], - // W - [-1, 1] - // NW -]; -function retractEntity(engine, id) { - for (const attr of engine.effectivePieceAttrs) { - if (engine.session.contains(id, attr)) engine.session.retract(id, attr); - } -} -function pieceAtSquare(session, sq) { - const facts = session.allFacts(); - for (const f of facts) { - if (f.attr === "Position" && f.value === sq && f.id > 0) { - return f.id; - } - }; - return null; -} -__vite_ssr_import_0__.PRESET_REGISTRY.register({ - id: "queen-splits", - name: "Queen Fission", - description: "When a Queen captures, she splits: a Rook takes her place on the capture square and a Bishop is placed on the first empty adjacent square (clockwise from north).", - incompatibleWith: [], - requires: [], - onBeforeCapture({ engine, attacker, target }) { - const session = engine.session; - const attackerTypeFact = session.allFacts().find((f) => f.id === attacker && f.attr === "PieceType"); - if (attackerTypeFact?.value !== "queen") return; - const attackerColorFact = session.allFacts().find((f) => f.id === attacker && f.attr === "Color"); - if (attackerColorFact === void 0) return; - const attackerColor = attackerColorFact.value; - const targetPos = session.get(target, "Position"); - if (targetPos === void 0) return; - const { died: targetDied } = engine.dealDamage(target, 1, { - kind: "capture", - attacker - }); - if (!targetDied) { - return { consume: true }; - }; - retractEntity(engine, attacker); - engine.spawnPiece("rook", attackerColor, targetPos, { - reason: "fission", - hasMoved: true - }); - const tFile = (0,__vite_ssr_import_1__.fileOf)(targetPos); - const tRank = (0,__vite_ssr_import_1__.rankOf)(targetPos); - for (const [df, dr] of CLOCKWISE_NEIGHBOURS) { - const f = tFile + df; - const r = tRank + dr; - if (f < 0 || f > 7 || r < 0 || r > 7) continue; - const sq = (0,__vite_ssr_import_1__.squareOf)(f, r); - if (pieceAtSquare(session, sq) !== null) continue; - engine.spawnPiece("bishop", attackerColor, sq, { - reason: "fission", - hasMoved: true - }); - break; - }; - return { consume: true }; - } -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBd0NBO0FBR0E7QUFLQSxNQUFNLHVCQUFpRTtBQUFBLEVBQ3JFLENBQUMsR0FBRyxDQUFDO0FBQUE7QUFBQSxFQUNMLENBQUMsR0FBRyxDQUFDO0FBQUE7QUFBQSxFQUNMLENBQUMsR0FBRyxDQUFDO0FBQUE7QUFBQSxFQUNMLENBQUMsR0FBRyxFQUFFO0FBQUE7QUFBQSxFQUNOLENBQUMsR0FBRyxFQUFFO0FBQUE7QUFBQSxFQUNOLENBQUMsSUFBSSxFQUFFO0FBQUE7QUFBQSxFQUNQLENBQUMsSUFBSSxDQUFDO0FBQUE7QUFBQSxFQUNOLENBQUMsSUFBSSxDQUFDO0FBQUE7QUFDUjtBQUtBLFNBQVMsY0FBYyxRQUFxQixJQUFvQjtBQUM5RCxhQUFXLFFBQVEsT0FBTyxxQkFBcUI7QUFDN0MsUUFBSSxPQUFPLFFBQVEsU0FBUyxJQUFJLElBQUksRUFBRyxRQUFPLFFBQVEsUUFBUSxJQUFJLElBQUk7QUFBQSxFQUN4RTtBQUNGO0FBRUEsU0FBUyxjQUFjLFNBQWtCLElBQTZCO0FBQ3BFLFFBQU0sUUFBUSxRQUFRLFNBQVM7QUFDL0IsYUFBVyxLQUFLLE9BQU87QUFDckIsUUFBSSxFQUFFLFNBQVMsY0FBYyxFQUFFLFVBQVUsTUFBTyxFQUFFLEtBQWdCLEdBQUc7QUFDbkUsYUFBTyxFQUFFO0FBQUEsSUFDWDtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFPQSxzQ0FBZ0IsU0FBUztBQUFBLEVBQ3ZCLElBQUk7QUFBQSxFQUNKLE1BQU07QUFBQSxFQUNOLGFBQ0U7QUFBQSxFQUNGLGtCQUFrQixDQUFDO0FBQUEsRUFDbkIsVUFBVSxDQUFDO0FBQUEsRUFFWCxnQkFBZ0IsRUFBRSxRQUFRLFVBQVUsT0FBTyxHQUFHO0FBQzVDLFVBQU0sVUFBVSxPQUFPO0FBQ3ZCLFVBQU0sbUJBQW1CLFFBQ3RCLFNBQVMsRUFDVCxLQUFLLE9BQUssRUFBRSxPQUFPLFlBQVksRUFBRSxTQUFTLFdBQVc7QUFDeEQsUUFBSSxrQkFBa0IsVUFBVSxRQUFTO0FBRXpDLFVBQU0sb0JBQW9CLFFBQ3ZCLFNBQVMsRUFDVCxLQUFLLE9BQUssRUFBRSxPQUFPLFlBQVksRUFBRSxTQUFTLE9BQU87QUFDcEQsUUFBSSxzQkFBc0IsT0FBVztBQUNyQyxVQUFNLGdCQUFnQixrQkFBa0I7QUFFeEMsVUFBTSxZQUFZLFFBQVEsSUFBSSxRQUFRLFVBQVU7QUFDaEQsUUFBSSxjQUFjLE9BQVc7QUFRN0IsVUFBTSxFQUFFLE1BQU0sV0FBVyxJQUFJLE9BQU8sV0FBVyxRQUFRLEdBQUc7QUFBQSxNQUN4RCxNQUFNO0FBQUEsTUFDTjtBQUFBLElBQ0YsQ0FBQztBQUNELFFBQUksQ0FBQyxZQUFZO0FBR2YsYUFBTyxFQUFFLFNBQVMsS0FBSztBQUFBLElBQ3pCO0FBV0Esa0JBQWMsUUFBUSxRQUFRO0FBQzlCLFdBQU8sV0FBVyxRQUFRLGVBQWUsV0FBVztBQUFBLE1BQ2xELFFBQVE7QUFBQSxNQUNSLFVBQVU7QUFBQSxJQUNaLENBQUM7QUFLRCxVQUFNLFdBQVEsOEJBQU8sU0FBUztBQUM5QixVQUFNLFdBQVEsOEJBQU8sU0FBUztBQUM5QixlQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssc0JBQXNCO0FBQzNDLFlBQU0sSUFBSSxRQUFRO0FBQ2xCLFlBQU0sSUFBSSxRQUFRO0FBQ2xCLFVBQUksSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxFQUFHO0FBQ3RDLFlBQU0sUUFBSyxnQ0FBUyxHQUFHLENBQUM7QUFDeEIsVUFBSSxjQUFjLFNBQVMsRUFBRSxNQUFNLEtBQU07QUFDekMsYUFBTyxXQUFXLFVBQVUsZUFBZSxJQUFJO0FBQUEsUUFDN0MsUUFBUTtBQUFBLFFBQ1IsVUFBVTtBQUFBLE1BQ1osQ0FBQztBQUNEO0FBQUEsSUFDRjtBQUVBLFdBQU8sRUFBRSxTQUFTLEtBQUs7QUFBQSxFQUN6QjtBQUNGLENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInF1ZWVuLXNwbGl0cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByZXNldDogYHF1ZWVuLXNwbGl0c2AgKFF1ZWVuIEZpc3Npb24sIFJVTEVTLm1kIHJ1bGUgIzgpXG4gKlxuICogV2hlbiBhIHF1ZWVuIGNhcHR1cmVzLCBpdCBGSVNTSU9OUyBpbnRvIGEgcm9vayAocGxhY2VkIG9uIHRoZVxuICogY2FwdHVyZSBzcXVhcmUpIGFuZCBhIGJpc2hvcCAocGxhY2VkIG9uIHRoZSBmaXJzdCBlbXB0eSBhZGphY2VudFxuICogc3F1YXJlLCBjbG9ja3dpc2UgZnJvbSBub3J0aCkuIFRoZSBxdWVlbiBlbnRpdHkgaXMgcmV0cmFjdGVkLCB0aGVcbiAqIHRhcmdldCBlbmVteSBwaWVjZSBpcyByZXRyYWN0ZWQsIHR3byBuZXcgcGllY2UgZW50aXRpZXMgYXJlXG4gKiBzcGF3bmVkLiBJZiBubyBhZGphY2VudCBzcXVhcmUgaXMgZW1wdHkgdGhlIGJpc2hvcCBpcyBmb3JmZWl0IGFuZFxuICogb25seSB0aGUgcm9vayBzcGF3bnMuXG4gKlxuICogSW1wbGVtZW50YXRpb24gdmlhIGBvbkJlZm9yZUNhcHR1cmVgOlxuICogIC0gSWYgdGhlIGF0dGFja2VyIGlzbid0IGEgcXVlZW4sIGRvIG5vdGhpbmcgKGRlZmF1bHQgY2FwdHVyZSBydW5zKS5cbiAqICAtIE90aGVyd2lzZSBjb25zdW1lIHRoZSBob29rIGFuZDpcbiAqICAgICAxLiBSZXRyYWN0IHRoZSBlbmVteSB0YXJnZXQncyBmYWN0cyAobm9ybWFsIGNhcHR1cmUpLlxuICogICAgIDIuIFJldHJhY3QgdGhlIHF1ZWVuJ3MgZmFjdHMgKHNoZSBmaXNzaW9uZWQpLlxuICogICAgIDMuIFNwYXduIGEgbmV3IHJvb2sgb24gdGhlIHRhcmdldCBzcXVhcmUgKGZyZXNoIGVudGl0eSBpZCkuXG4gKiAgICAgNC4gRmluZCB0aGUgZmlyc3QgZW1wdHkgYWRqYWNlbnQgc3F1YXJlIHNjYW5uaW5nIGNsb2Nrd2lzZVxuICogICAgICAgIGZyb20gTiAoMCwrMSksIE5FICgrMSwrMSksIEUgKCsxLDApLCBTRSAoKzEsLTEpLFxuICogICAgICAgIFMgKDAsLTEpLCBTVyAoLTEsLTEpLCBXICgtMSwwKSwgTlcgKC0xLCsxKS5cbiAqICAgICAgICBJZiBmb3VuZCwgc3Bhd24gYSBiaXNob3AgdGhlcmUuIElmIGFsbCA4IG5laWdoYm91cnMgYXJlXG4gKiAgICAgICAgb2NjdXBpZWQsIG5vIGJpc2hvcCBzcGF3bnMuXG4gKlxuICogRmlzc2lvbmVkIHBpZWNlcyByZWNlaXZlIGBIYXNNb3ZlZCA9IHRydWVgIHNvIHRoZXkgY2Fubm90IGNhc3RsZVxuICogKGV2ZW4gaWYgdGhlIG9yaWdpbmFsIHF1ZWVuIHdhcyBvbiBhIGNhc3RsZS1yZWxhdGVkIHNxdWFyZSDigJQgYVxuICogd2VpcmQgZWRnZSBjYXNlLCBidXQgdGhlIGludmFyaWFudCBpcyBzaW1wbGVyIHRoaXMgd2F5KS5cbiAqXG4gKiBJbnRlcmFjdGlvbiB3aXRoIGBwaWVjZS1ocGA6IGlmIHBpZWNlLWhwIGlzIGFsc28gYWN0aXZlIChjdXJyZW50bHlcbiAqIGFsbG93ZWQg4oCUIG5vIGhhcmQgaW5jb21wYXRpYmlsaXR5KSwgdGhlIHNwYXduZWQgcGllY2VzIGdldCBIcD0yXG4gKiB2aWEgdGhlIG9uQWN0aXZhdGUgaWRlbXBvdGVuY2UgZ3VhcmFudGVlLiBTdHJpY3RseSBzcGVha2luZyBhIG1vcmVcbiAqIHByaW5jaXBsZWQgZGVzaWduIHdvdWxkIGhhdmUgYSBkZWRpY2F0ZWQgYG9uUGllY2VTcGF3bmAgaG9va1xuICogY2hhaW47IGZvciB2MSB3ZSByZWx5IG9uIHRoZSBjb252ZW50aW9uIHRoYXQgcGllY2UtaHAnc1xuICogYG9uQWN0aXZhdGVgIG9ubHkgaW5zdGFsbHMgSHAgb24gcGllY2VzIHRoYXQgZG9uJ3QgYWxyZWFkeSBoYXZlXG4gKiBpdCwgc28gY2FsbGluZyBpdCByZS1pZGVtcG90ZW50bHkgY292ZXJzIG5ld2x5LXNwYXduZWQgcGllY2VzIHRvby5cbiAqXG4gKiBJTVBPUlRBTlQ6IHNwYXduaW5nIG5ldyBlbnRpdGllcyBtaWQtY2FwdHVyZSBtZWFucyB0aGlzIHByZXNldFxuICogd3JpdGVzIG5ldyBmYWN0cyB0byB0aGUgc2Vzc2lvbiB0aGF0IGRpZG4ndCBleGlzdCB3aGVuIHRoZSBtb3ZlXG4gKiB3YXMgbGVnYWxseSB2YWxpZGF0ZWQuIFRoYXQncyBmaW5lIOKAlCBxdWVlbiBjYXB0dXJlcyBhcmUgdmFsaWRhdGVkXG4gKiBhZ2FpbnN0IHRoZSBwcmUtZmlzc2lvbiBzdGF0ZTsgZmlzc2lvbiBpcyBhIHBvc3QtY2FwdHVyZVxuICogY29uc2VxdWVuY2UsIG5vdCBhIG1vdmUgZ2VuZXJhdG9yLlxuICovXG5pbXBvcnQgeyBQUkVTRVRfUkVHSVNUUlkgfSBmcm9tIFwiLi9yZWdpc3RyeS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBDaGVzc0VuZ2luZSB9IGZyb20gXCIuLi9lbmdpbmUuanNcIjtcbmltcG9ydCB0eXBlIHsgU2Vzc2lvbiwgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB7IGZpbGVPZiwgcmFua09mLCBzcXVhcmVPZiB9IGZyb20gXCIuLi9jb29yZC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTcXVhcmUsIFBpZWNlQ29sb3IgfSBmcm9tIFwiLi4vc2NoZW1hLmpzXCI7XG5cbi8qKiBDbG9ja3dpc2UtZnJvbS1ub3J0aCBuZWlnaGJvdXIgb2Zmc2V0cy4gT3JkZXIgbWF0dGVyczogYmlzaG9wIGlzXG4gKiAgcGxhY2VkIG9uIHRoZSBGSVJTVCBlbXB0eSBzcXVhcmUgZm91bmQgYnkgd2Fsa2luZyB0aGlzIGxpc3QuICovXG5jb25zdCBDTE9DS1dJU0VfTkVJR0hCT1VSUzogUmVhZG9ubHlBcnJheTxyZWFkb25seSBbbnVtYmVyLCBudW1iZXJdPiA9IFtcbiAgWzAsIDFdLCAgIC8vIE5cbiAgWzEsIDFdLCAgIC8vIE5FXG4gIFsxLCAwXSwgICAvLyBFXG4gIFsxLCAtMV0sICAvLyBTRVxuICBbMCwgLTFdLCAgLy8gU1xuICBbLTEsIC0xXSwgLy8gU1dcbiAgWy0xLCAwXSwgIC8vIFdcbiAgWy0xLCAxXSwgIC8vIE5XXG5dO1xuXG4vKiogUmV0cmFjdCBldmVyeSBlZmZlY3RpdmUgcGllY2UgYXR0ciAoY29yZSArIHByZXNldC1kZWNsYXJlZCkgZm9yXG4gKiAgYW4gZW50aXR5LiBDYWxsZWQgd2hlbiB0aGUgcXVlZW4gaXMgcmVtb3ZlZCBhcyBwYXJ0IG9mIGZpc3Npb24g4oCUXG4gKiAgd2UgbmVlZCB0byBudWtlIGhlciBjb21wbGV0ZWx5IHNvIG5vIGxlZnRvdmVyIGZhY3RzIGxpbmdlci4gKi9cbmZ1bmN0aW9uIHJldHJhY3RFbnRpdHkoZW5naW5lOiBDaGVzc0VuZ2luZSwgaWQ6IEVudGl0eUlkKTogdm9pZCB7XG4gIGZvciAoY29uc3QgYXR0ciBvZiBlbmdpbmUuZWZmZWN0aXZlUGllY2VBdHRycykge1xuICAgIGlmIChlbmdpbmUuc2Vzc2lvbi5jb250YWlucyhpZCwgYXR0cikpIGVuZ2luZS5zZXNzaW9uLnJldHJhY3QoaWQsIGF0dHIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBpZWNlQXRTcXVhcmUoc2Vzc2lvbjogU2Vzc2lvbiwgc3E6IFNxdWFyZSk6IEVudGl0eUlkIHwgbnVsbCB7XG4gIGNvbnN0IGZhY3RzID0gc2Vzc2lvbi5hbGxGYWN0cygpO1xuICBmb3IgKGNvbnN0IGYgb2YgZmFjdHMpIHtcbiAgICBpZiAoZi5hdHRyID09PSBcIlBvc2l0aW9uXCIgJiYgZi52YWx1ZSA9PT0gc3EgJiYgKGYuaWQgYXMgbnVtYmVyKSA+IDApIHtcbiAgICAgIHJldHVybiBmLmlkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gc3Bhd25QaWVjZSBoZWxwZXIgbGl2ZWQgaGVyZSBoaXN0b3JpY2FsbHkuIEl0J3Mgbm93XG4vLyBgZW5naW5lLnNwYXduUGllY2UoLi4uKWAg4oCUIGdvZXMgdGhyb3VnaCB0aGUgc3RhbmRhcmQgb25QaWVjZVNwYXduXG4vLyBwaXBlbGluZSBzbyBwcmVzZXQtZGVjbGFyZWQgYXR0cmlidXRlcyAoSHAsIFNoaWVsZCwg4oCmKSBnZXQgc2VlZGVkXG4vLyBvbiBmaXNzaW9uLXNwYXduZWQgcGllY2VzIGF1dG9tYXRpY2FsbHkuXG5cblBSRVNFVF9SRUdJU1RSWS5yZWdpc3Rlcih7XG4gIGlkOiBcInF1ZWVuLXNwbGl0c1wiLFxuICBuYW1lOiBcIlF1ZWVuIEZpc3Npb25cIixcbiAgZGVzY3JpcHRpb246XG4gICAgXCJXaGVuIGEgUXVlZW4gY2FwdHVyZXMsIHNoZSBzcGxpdHM6IGEgUm9vayB0YWtlcyBoZXIgcGxhY2Ugb24gdGhlIGNhcHR1cmUgc3F1YXJlIGFuZCBhIEJpc2hvcCBpcyBwbGFjZWQgb24gdGhlIGZpcnN0IGVtcHR5IGFkamFjZW50IHNxdWFyZSAoY2xvY2t3aXNlIGZyb20gbm9ydGgpLlwiLFxuICBpbmNvbXBhdGlibGVXaXRoOiBbXSxcbiAgcmVxdWlyZXM6IFtdLFxuXG4gIG9uQmVmb3JlQ2FwdHVyZSh7IGVuZ2luZSwgYXR0YWNrZXIsIHRhcmdldCB9KSB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGVuZ2luZS5zZXNzaW9uO1xuICAgIGNvbnN0IGF0dGFja2VyVHlwZUZhY3QgPSBzZXNzaW9uXG4gICAgICAuYWxsRmFjdHMoKVxuICAgICAgLmZpbmQoZiA9PiBmLmlkID09PSBhdHRhY2tlciAmJiBmLmF0dHIgPT09IFwiUGllY2VUeXBlXCIpO1xuICAgIGlmIChhdHRhY2tlclR5cGVGYWN0Py52YWx1ZSAhPT0gXCJxdWVlblwiKSByZXR1cm47IC8vIGRlZmF1bHQgY2FwdHVyZSBydW5zXG5cbiAgICBjb25zdCBhdHRhY2tlckNvbG9yRmFjdCA9IHNlc3Npb25cbiAgICAgIC5hbGxGYWN0cygpXG4gICAgICAuZmluZChmID0+IGYuaWQgPT09IGF0dGFja2VyICYmIGYuYXR0ciA9PT0gXCJDb2xvclwiKTtcbiAgICBpZiAoYXR0YWNrZXJDb2xvckZhY3QgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIGNvbnN0IGF0dGFja2VyQ29sb3IgPSBhdHRhY2tlckNvbG9yRmFjdC52YWx1ZSBhcyBQaWVjZUNvbG9yO1xuXG4gICAgY29uc3QgdGFyZ2V0UG9zID0gc2Vzc2lvbi5nZXQodGFyZ2V0LCBcIlBvc2l0aW9uXCIpIGFzIFNxdWFyZSB8IHVuZGVmaW5lZDtcbiAgICBpZiAodGFyZ2V0UG9zID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuICAgIC8vIERhbWFnZSB0aGUgdGFyZ2V0IHRocm91Z2ggdGhlIHBpcGVsaW5lLiBXaXRob3V0IEhQLCB0aGlzIGtpbGxzXG4gICAgLy8gaW5zdGFudGx5IChlbmdpbmUgZGVmYXVsdCkuIFdpdGggSFAsIGl0IGRlY3JlbWVudHMg4oCUIGFuZCB3ZVxuICAgIC8vIG9ubHkgZmlzc2lvbiBpZiB0aGUgdGFyZ2V0IGFjdHVhbGx5IGRpZWQuIEEgcXVlZW4gdGhhdCBcInBva2VzXCJcbiAgICAvLyBhIDItSFAgcGllY2UgZG9lc24ndCBzcGxpdDsgc2hlIHN0YXlzIGEgcXVlZW4sIHRoZSB0YXJnZXQgbG9zZXNcbiAgICAvLyAxIEhQLCBhbmQgdGhlIHR1cm4gcGFzc2VzIOKAlCBjb25zaXN0ZW50IHdpdGggSFAncyBnZW5lcmFsXG4gICAgLy8gbm9uLWxldGhhbC1jYXB0dXJlIHJ1bGUuXG4gICAgY29uc3QgeyBkaWVkOiB0YXJnZXREaWVkIH0gPSBlbmdpbmUuZGVhbERhbWFnZSh0YXJnZXQsIDEsIHtcbiAgICAgIGtpbmQ6IFwiY2FwdHVyZVwiLFxuICAgICAgYXR0YWNrZXIsXG4gICAgfSk7XG4gICAgaWYgKCF0YXJnZXREaWVkKSB7XG4gICAgICAvLyBQb2tlOiBxdWVlbiBzdGF5cywgbm8gZmlzc2lvbi4gV2UgY29uc3VtZWQgdGhlIGNhcHR1cmUgc28gdGhlXG4gICAgICAvLyBlbmdpbmUgc2hvdWxkbid0IHJ1biBpdHMgZGVmYXVsdCByZXRyYWN0K2FkdmFuY2Ugb24gYXR0YWNrZXIuXG4gICAgICByZXR1cm4geyBjb25zdW1lOiB0cnVlIH07XG4gICAgfVxuXG4gICAgLy8gVGFyZ2V0IGRpZWQgKHN0YW5kYXJkIHBhdGgpLiBSZXRyYWN0IHRoZSBxdWVlbiAoc2hlIGZpc3Npb25zKVxuICAgIC8vIGFuZCBzcGF3biBhIHJvb2sgb24gdGhlIGNhcHR1cmUgc3F1YXJlICsgYSBiaXNob3AgbmVhcmJ5LlxuICAgIC8vXG4gICAgLy8gVXNpbmcgZW5naW5lLnNwYXduUGllY2Ug4oCUIE5PVCBhIGxvY2FsIGhlbHBlciDigJQgc28gZXZlcnkgYWN0aXZlXG4gICAgLy8gcHJlc2V0J3Mgb25QaWVjZVNwYXduIHJ1bnMgb24gdGhlIG5ldyBwaWVjZXMuIFRoaXMgaXMgd2hhdFxuICAgIC8vIGZpeGVzIHRoZSBsYXRlbnQgXCJxdWVlbi1zcGxpdHMgc3Bhd25zIHBpZWNlcyB3aXRob3V0IEhQXCIgYnVnXG4gICAgLy8gd2UgdXNlZCB0byBoYXZlOiBwaWVjZS1ocCBub3cgc2VlZHMgSHA9MiBvbiB0aGUgZmlzc2lvbmVkXG4gICAgLy8gcm9vayBhbmQgYmlzaG9wIHZpYSBvblBpZWNlU3Bhd24sIHdpdGhvdXQgcXVlZW4tc3BsaXRzIG5lZWRpbmdcbiAgICAvLyB0byBrbm93IEhQIGV4aXN0cy5cbiAgICByZXRyYWN0RW50aXR5KGVuZ2luZSwgYXR0YWNrZXIpO1xuICAgIGVuZ2luZS5zcGF3blBpZWNlKFwicm9va1wiLCBhdHRhY2tlckNvbG9yLCB0YXJnZXRQb3MsIHtcbiAgICAgIHJlYXNvbjogXCJmaXNzaW9uXCIsXG4gICAgICBoYXNNb3ZlZDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIEZpbmQgdGhlIGZpcnN0IGVtcHR5IGFkamFjZW50IHNxdWFyZSBjbG9ja3dpc2UgZnJvbSBOIGFuZCBzcGF3blxuICAgIC8vIHRoZSBiaXNob3AgdGhlcmUuIElmIGFsbCA4IGFyZSBvY2N1cGllZCAocmFyZSDigJQgdXN1YWxseSBoYXBwZW5zXG4gICAgLy8gaW4gZGVuc2UgbWlkZ2FtZSBhcm91bmQgYSBraW5nKSwgdGhlIGJpc2hvcCBpcyBmb3JmZWl0LlxuICAgIGNvbnN0IHRGaWxlID0gZmlsZU9mKHRhcmdldFBvcyk7XG4gICAgY29uc3QgdFJhbmsgPSByYW5rT2YodGFyZ2V0UG9zKTtcbiAgICBmb3IgKGNvbnN0IFtkZiwgZHJdIG9mIENMT0NLV0lTRV9ORUlHSEJPVVJTKSB7XG4gICAgICBjb25zdCBmID0gdEZpbGUgKyBkZjtcbiAgICAgIGNvbnN0IHIgPSB0UmFuayArIGRyO1xuICAgICAgaWYgKGYgPCAwIHx8IGYgPiA3IHx8IHIgPCAwIHx8IHIgPiA3KSBjb250aW51ZTtcbiAgICAgIGNvbnN0IHNxID0gc3F1YXJlT2YoZiwgcikgYXMgU3F1YXJlO1xuICAgICAgaWYgKHBpZWNlQXRTcXVhcmUoc2Vzc2lvbiwgc3EpICE9PSBudWxsKSBjb250aW51ZTtcbiAgICAgIGVuZ2luZS5zcGF3blBpZWNlKFwiYmlzaG9wXCIsIGF0dGFja2VyQ29sb3IsIHNxLCB7XG4gICAgICAgIHJlYXNvbjogXCJmaXNzaW9uXCIsXG4gICAgICAgIGhhc01vdmVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4geyBjb25zdW1lOiB0cnVlIH07XG4gIH0sXG59KTtcbiJdLCJmaWxlIjoiL3NyYy9wcmVzZXRzL3F1ZWVuLXNwbGl0cy50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/3402929c146499ba5f5cc64032055249c09ec972 b/7xOfJqsDU787fe61oSCq1/web/3402929c146499ba5f5cc64032055249c09ec972 deleted file mode 100644 index 1cbd003..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/3402929c146499ba5f5cc64032055249c09ec972 +++ /dev/null @@ -1,227 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/rules/draws.ts", {"importedNames":["isFiftyMoveDraw","updateHalfmoveClock","resetHalfmoveClock","recordPosition","isThreefoldRepetition","computePositionHash"]}); - - - - - - - -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/schema.ts", {"importedNames":["GAME_ENTITY"]}); -function mkSession() { - return new __vite_ssr_import_1__.Session({ autoFire: false }); -} -function insertPiece(session, id, type, color, square) { - const eid = id; - session.insert(eid, "PieceType", type); - session.insert(eid, "Color", color); - session.insert(eid, "Position", square); - return eid; -} -const noCapNonPawn = { - pieceId: 2, - from: 0, - to: 1, - isCapture: false -}; -const captureMove = { - pieceId: 2, - from: 0, - to: 1, - isCapture: true -}; -(0,__vite_ssr_import_0__.describe)("isFiftyMoveDraw", () => { - (0,__vite_ssr_import_0__.it)("false when clock is unset", () => { - const session = mkSession(); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isFiftyMoveDraw)(session)).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("false when clock < 100", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "HalfmoveClock", 50); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isFiftyMoveDraw)(session)).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("false at 99 (boundary)", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "HalfmoveClock", 99); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isFiftyMoveDraw)(session)).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("true when clock = 100", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "HalfmoveClock", 100); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isFiftyMoveDraw)(session)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("true when clock > 100", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "HalfmoveClock", 105); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isFiftyMoveDraw)(session)).toBe(true); - }); -}); -(0,__vite_ssr_import_0__.describe)("updateHalfmoveClock", () => { - (0,__vite_ssr_import_0__.it)("increments for non-pawn non-capture moves", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "HalfmoveClock", 10); - (0,__vite_ssr_import_2__.updateHalfmoveClock)(session, noCapNonPawn, false); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_3__.GAME_ENTITY), "HalfmoveClock")).toBe(11); - }); - (0,__vite_ssr_import_0__.it)("starts from 0 when clock is unset and move is non-reset", () => { - const session = mkSession(); - (0,__vite_ssr_import_2__.updateHalfmoveClock)(session, noCapNonPawn, false); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_3__.GAME_ENTITY), "HalfmoveClock")).toBe(1); - }); - (0,__vite_ssr_import_0__.it)("resets on capture", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "HalfmoveClock", 50); - (0,__vite_ssr_import_2__.updateHalfmoveClock)(session, captureMove, false); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_3__.GAME_ENTITY), "HalfmoveClock")).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("resets on pawn move", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "HalfmoveClock", 30); - (0,__vite_ssr_import_2__.updateHalfmoveClock)(session, noCapNonPawn, true); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_3__.GAME_ENTITY), "HalfmoveClock")).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("resets on pawn capture (both conditions true)", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "HalfmoveClock", 42); - (0,__vite_ssr_import_2__.updateHalfmoveClock)(session, captureMove, true); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_3__.GAME_ENTITY), "HalfmoveClock")).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("reaches 100 after 100 non-reset increments → triggers 50-move draw", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "HalfmoveClock", 0); - for (let i = 0; i < 100; i++) { - (0,__vite_ssr_import_2__.updateHalfmoveClock)(session, noCapNonPawn, false); - }; - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_3__.GAME_ENTITY), "HalfmoveClock")).toBe(100); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isFiftyMoveDraw)(session)).toBe(true); - }); -}); -(0,__vite_ssr_import_0__.describe)("resetHalfmoveClock", () => { - (0,__vite_ssr_import_0__.it)("sets the clock to 0", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "HalfmoveClock", 73); - (0,__vite_ssr_import_2__.resetHalfmoveClock)(session); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_3__.GAME_ENTITY), "HalfmoveClock")).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("works when the clock was unset", () => { - const session = mkSession(); - (0,__vite_ssr_import_2__.resetHalfmoveClock)(session); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_3__.GAME_ENTITY), "HalfmoveClock")).toBe(0); - }); -}); -(0,__vite_ssr_import_0__.describe)("computePositionHash", () => { - (0,__vite_ssr_import_0__.it)("is deterministic for identical positions", () => { - const s1 = mkSession(); - s1.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "Turn", "white"); - insertPiece(s1, 1, "king", "white", 4); - const s2 = mkSession(); - s2.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "Turn", "white"); - insertPiece(s2, 1, "king", "white", 4); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.computePositionHash)(s1)).toBe((0,__vite_ssr_import_2__.computePositionHash)(s2)); - }); - (0,__vite_ssr_import_0__.it)("differs when side-to-move changes", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "Turn", "white"); - insertPiece(session, 1, "king", "white", 4); - const a = (0,__vite_ssr_import_2__.computePositionHash)(session); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "Turn", "black"); - const b = (0,__vite_ssr_import_2__.computePositionHash)(session); - (0,__vite_ssr_import_0__.expect)(a).not.toBe(b); - }); - (0,__vite_ssr_import_0__.it)("differs when en passant target changes", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "Turn", "white"); - insertPiece(session, 1, "king", "white", 4); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget", null); - const a = (0,__vite_ssr_import_2__.computePositionHash)(session); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget", 20); - const b = (0,__vite_ssr_import_2__.computePositionHash)(session); - (0,__vite_ssr_import_0__.expect)(a).not.toBe(b); - }); - (0,__vite_ssr_import_0__.it)("excludes the GAME_ENTITY from piece facts", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "Turn", "white"); - const hashBefore = (0,__vite_ssr_import_2__.computePositionHash)(session); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "HalfmoveClock", 5); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.computePositionHash)(session)).toBe(hashBefore); - }); -}); -(0,__vite_ssr_import_0__.describe)("threefold repetition", () => { - (0,__vite_ssr_import_0__.it)("not a repetition after 1 occurrence", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "Turn", "white"); - insertPiece(session, 1, "king", "white", 4); - (0,__vite_ssr_import_2__.recordPosition)(session); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isThreefoldRepetition)(session)).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("not a repetition after 2 occurrences", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "Turn", "white"); - insertPiece(session, 1, "king", "white", 4); - (0,__vite_ssr_import_2__.recordPosition)(session); - (0,__vite_ssr_import_2__.recordPosition)(session); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isThreefoldRepetition)(session)).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("detected after 3 occurrences", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "Turn", "white"); - insertPiece(session, 1, "king", "white", 4); - (0,__vite_ssr_import_2__.recordPosition)(session); - (0,__vite_ssr_import_2__.recordPosition)(session); - (0,__vite_ssr_import_2__.recordPosition)(session); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isThreefoldRepetition)(session)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("still detected after 4+ occurrences", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "Turn", "white"); - insertPiece(session, 1, "king", "white", 4); - (0,__vite_ssr_import_2__.recordPosition)(session); - (0,__vite_ssr_import_2__.recordPosition)(session); - (0,__vite_ssr_import_2__.recordPosition)(session); - (0,__vite_ssr_import_2__.recordPosition)(session); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isThreefoldRepetition)(session)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("different positions don't trigger repetition", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "Turn", "white"); - insertPiece(session, 1, "king", "white", 4); - (0,__vite_ssr_import_2__.recordPosition)(session); - session.insert(1, "Position", 5); - (0,__vite_ssr_import_2__.recordPosition)(session); - session.insert(1, "Position", 4); - (0,__vite_ssr_import_2__.recordPosition)(session); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isThreefoldRepetition)(session)).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("tracks each distinct position separately", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "Turn", "white"); - insertPiece(session, 1, "king", "white", 4); - (0,__vite_ssr_import_2__.recordPosition)(session); - session.insert(1, "Position", 5); - (0,__vite_ssr_import_2__.recordPosition)(session); - session.insert(1, "Position", 4); - (0,__vite_ssr_import_2__.recordPosition)(session); - session.insert(1, "Position", 5); - (0,__vite_ssr_import_2__.recordPosition)(session); - session.insert(1, "Position", 4); - (0,__vite_ssr_import_2__.recordPosition)(session); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isThreefoldRepetition)(session)).toBe(true); - session.insert(1, "Position", 5); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isThreefoldRepetition)(session)).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("turn change produces a different hash (so same board with different side to move counts separately)", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "Turn", "white"); - insertPiece(session, 1, "king", "white", 4); - (0,__vite_ssr_import_2__.recordPosition)(session); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "Turn", "black"); - (0,__vite_ssr_import_2__.recordPosition)(session); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "Turn", "white"); - (0,__vite_ssr_import_2__.recordPosition)(session); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isThreefoldRepetition)(session)).toBe(false); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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MUMsNkNBQWUsT0FBTztBQUN0QixZQUFRLFVBQU8sb0NBQWEsUUFBUSxPQUFPO0FBQzNDLDZDQUFlLE9BQU87QUFDdEIsWUFBUSxVQUFPLG9DQUFhLFFBQVEsT0FBTztBQUMzQyw2Q0FBZSxPQUFPO0FBQ3RCLHdDQUFPLDZDQUFzQixPQUFPLENBQUMsRUFBRSxLQUFLLEtBQUs7QUFBQSxFQUNuRCxDQUFDO0FBQ0gsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiZHJhd3MudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgaXQsIGV4cGVjdCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB7IFNlc3Npb24sIHR5cGUgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB7XG4gIGlzRmlmdHlNb3ZlRHJhdyxcbiAgdXBkYXRlSGFsZm1vdmVDbG9jayxcbiAgcmVzZXRIYWxmbW92ZUNsb2NrLFxuICByZWNvcmRQb3NpdGlvbixcbiAgaXNUaHJlZWZvbGRSZXBldGl0aW9uLFxuICBjb21wdXRlUG9zaXRpb25IYXNoLFxufSBmcm9tIFwiLi9kcmF3cy5qc1wiO1xuaW1wb3J0IHsgR0FNRV9FTlRJVFkgfSBmcm9tIFwiLi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBpZWNlQ29sb3IsIFBpZWNlVHlwZSwgU3F1YXJlIH0gZnJvbSBcIi4uL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBMZWdhbE1vdmUgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuXG5mdW5jdGlvbiBta1Nlc3Npb24oKTogU2Vzc2lvbiB7XG4gIHJldHVybiBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbn1cblxuZnVuY3Rpb24gaW5zZXJ0UGllY2UoXG4gIHNlc3Npb246IFNlc3Npb24sXG4gIGlkOiBudW1iZXIsXG4gIHR5cGU6IFBpZWNlVHlwZSxcbiAgY29sb3I6IFBpZWNlQ29sb3IsXG4gIHNxdWFyZTogU3F1YXJlLFxuKTogRW50aXR5SWQge1xuICBjb25zdCBlaWQgPSBpZCBhcyBFbnRpdHlJZDtcbiAgc2Vzc2lvbi5pbnNlcnQoZWlkLCBcIlBpZWNlVHlwZVwiLCB0eXBlKTtcbiAgc2Vzc2lvbi5pbnNlcnQoZWlkLCBcIkNvbG9yXCIsIGNvbG9yKTtcbiAgc2Vzc2lvbi5pbnNlcnQoZWlkLCBcIlBvc2l0aW9uXCIsIHNxdWFyZSk7XG4gIHJldHVybiBlaWQ7XG59XG5cbmNvbnN0IG5vQ2FwTm9uUGF3bjogTGVnYWxNb3ZlID0ge1xuICBwaWVjZUlkOiAyIGFzIEVudGl0eUlkLFxuICBmcm9tOiAwLFxuICB0bzogMSxcbiAgaXNDYXB0dXJlOiBmYWxzZSxcbn07XG5jb25zdCBjYXB0dXJlTW92ZTogTGVnYWxNb3ZlID0ge1xuICBwaWVjZUlkOiAyIGFzIEVudGl0eUlkLFxuICBmcm9tOiAwLFxuICB0bzogMSxcbiAgaXNDYXB0dXJlOiB0cnVlLFxufTtcblxuLy8g4pSA4pSA4pSAIGlzRmlmdHlNb3ZlRHJhdyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZGVzY3JpYmUoXCJpc0ZpZnR5TW92ZURyYXdcIiwgKCkgPT4ge1xuICBpdChcImZhbHNlIHdoZW4gY2xvY2sgaXMgdW5zZXRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBta1Nlc3Npb24oKTtcbiAgICBleHBlY3QoaXNGaWZ0eU1vdmVEcmF3KHNlc3Npb24pKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJmYWxzZSB3aGVuIGNsb2NrIDwgMTAwXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbWtTZXNzaW9uKCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiSGFsZm1vdmVDbG9ja1wiLCA1MCk7XG4gICAgZXhwZWN0KGlzRmlmdHlNb3ZlRHJhdyhzZXNzaW9uKSkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwiZmFsc2UgYXQgOTkgKGJvdW5kYXJ5KVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG1rU2Vzc2lvbigpO1xuICAgIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIkhhbGZtb3ZlQ2xvY2tcIiwgOTkpO1xuICAgIGV4cGVjdChpc0ZpZnR5TW92ZURyYXcoc2Vzc2lvbikpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcInRydWUgd2hlbiBjbG9jayA9IDEwMFwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG1rU2Vzc2lvbigpO1xuICAgIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIkhhbGZtb3ZlQ2xvY2tcIiwgMTAwKTtcbiAgICBleHBlY3QoaXNGaWZ0eU1vdmVEcmF3KHNlc3Npb24pKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcInRydWUgd2hlbiBjbG9jayA+IDEwMFwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG1rU2Vzc2lvbigpO1xuICAgIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIkhhbGZtb3ZlQ2xvY2tcIiwgMTA1KTtcbiAgICBleHBlY3QoaXNGaWZ0eU1vdmVEcmF3KHNlc3Npb24pKS50b0JlKHRydWUpO1xuICB9KTtcbn0pO1xuXG4vLyDilIDilIDilIAgdXBkYXRlSGFsZm1vdmVDbG9jayDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZGVzY3JpYmUoXCJ1cGRhdGVIYWxmbW92ZUNsb2NrXCIsICgpID0+IHtcbiAgaXQoXCJpbmNyZW1lbnRzIGZvciBub24tcGF3biBub24tY2FwdHVyZSBtb3Zlc1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG1rU2Vzc2lvbigpO1xuICAgIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIkhhbGZtb3ZlQ2xvY2tcIiwgMTApO1xuICAgIHVwZGF0ZUhhbGZtb3ZlQ2xvY2soc2Vzc2lvbiwgbm9DYXBOb25QYXduLCBmYWxzZSk7XG4gICAgZXhwZWN0KHNlc3Npb24uZ2V0KEdBTUVfRU5USVRZLCBcIkhhbGZtb3ZlQ2xvY2tcIikpLnRvQmUoMTEpO1xuICB9KTtcblxuICBpdChcInN0YXJ0cyBmcm9tIDAgd2hlbiBjbG9jayBpcyB1bnNldCBhbmQgbW92ZSBpcyBub24tcmVzZXRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBta1Nlc3Npb24oKTtcbiAgICB1cGRhdGVIYWxmbW92ZUNsb2NrKHNlc3Npb24sIG5vQ2FwTm9uUGF3biwgZmFsc2UpO1xuICAgIGV4cGVjdChzZXNzaW9uLmdldChHQU1FX0VOVElUWSwgXCJIYWxmbW92ZUNsb2NrXCIpKS50b0JlKDEpO1xuICB9KTtcblxuICBpdChcInJlc2V0cyBvbiBjYXB0dXJlXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbWtTZXNzaW9uKCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiSGFsZm1vdmVDbG9ja1wiLCA1MCk7XG4gICAgdXBkYXRlSGFsZm1vdmVDbG9jayhzZXNzaW9uLCBjYXB0dXJlTW92ZSwgZmFsc2UpO1xuICAgIGV4cGVjdChzZXNzaW9uLmdldChHQU1FX0VOVElUWSwgXCJIYWxmbW92ZUNsb2NrXCIpKS50b0JlKDApO1xuICB9KTtcblxuICBpdChcInJlc2V0cyBvbiBwYXduIG1vdmVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBta1Nlc3Npb24oKTtcbiAgICBzZXNzaW9uLmluc2VydChHQU1FX0VOVElUWSwgXCJIYWxmbW92ZUNsb2NrXCIsIDMwKTtcbiAgICB1cGRhdGVIYWxmbW92ZUNsb2NrKHNlc3Npb24sIG5vQ2FwTm9uUGF3biwgdHJ1ZSk7XG4gICAgZXhwZWN0KHNlc3Npb24uZ2V0KEdBTUVfRU5USVRZLCBcIkhhbGZtb3ZlQ2xvY2tcIikpLnRvQmUoMCk7XG4gIH0pO1xuXG4gIGl0KFwicmVzZXRzIG9uIHBhd24gY2FwdHVyZSAoYm90aCBjb25kaXRpb25zIHRydWUpXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbWtTZXNzaW9uKCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiSGFsZm1vdmVDbG9ja1wiLCA0Mik7XG4gICAgdXBkYXRlSGFsZm1vdmVDbG9jayhzZXNzaW9uLCBjYXB0dXJlTW92ZSwgdHJ1ZSk7XG4gICAgZXhwZWN0KHNlc3Npb24uZ2V0KEdBTUVfRU5USVRZLCBcIkhhbGZtb3ZlQ2xvY2tcIikpLnRvQmUoMCk7XG4gIH0pO1xuXG4gIGl0KFwicmVhY2hlcyAxMDAgYWZ0ZXIgMTAwIG5vbi1yZXNldCBpbmNyZW1lbnRzIOKGkiB0cmlnZ2VycyA1MC1tb3ZlIGRyYXdcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBta1Nlc3Npb24oKTtcbiAgICBzZXNzaW9uLmluc2VydChHQU1FX0VOVElUWSwgXCJIYWxmbW92ZUNsb2NrXCIsIDApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspIHtcbiAgICAgIHVwZGF0ZUhhbGZtb3ZlQ2xvY2soc2Vzc2lvbiwgbm9DYXBOb25QYXduLCBmYWxzZSk7XG4gICAgfVxuICAgIGV4cGVjdChzZXNzaW9uLmdldChHQU1FX0VOVElUWSwgXCJIYWxmbW92ZUNsb2NrXCIpKS50b0JlKDEwMCk7XG4gICAgZXhwZWN0KGlzRmlmdHlNb3ZlRHJhdyhzZXNzaW9uKSkudG9CZSh0cnVlKTtcbiAgfSk7XG59KTtcblxuLy8g4pSA4pSA4pSAIHJlc2V0SGFsZm1vdmVDbG9jayDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZGVzY3JpYmUoXCJyZXNldEhhbGZtb3ZlQ2xvY2tcIiwgKCkgPT4ge1xuICBpdChcInNldHMgdGhlIGNsb2NrIHRvIDBcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBta1Nlc3Npb24oKTtcbiAgICBzZXNzaW9uLmluc2VydChHQU1FX0VOVElUWSwgXCJIYWxmbW92ZUNsb2NrXCIsIDczKTtcbiAgICByZXNldEhhbGZtb3ZlQ2xvY2soc2Vzc2lvbik7XG4gICAgZXhwZWN0KHNlc3Npb24uZ2V0KEdBTUVfRU5USVRZLCBcIkhhbGZtb3ZlQ2xvY2tcIikpLnRvQmUoMCk7XG4gIH0pO1xuXG4gIGl0KFwid29ya3Mgd2hlbiB0aGUgY2xvY2sgd2FzIHVuc2V0XCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbWtTZXNzaW9uKCk7XG4gICAgcmVzZXRIYWxmbW92ZUNsb2NrKHNlc3Npb24pO1xuICAgIGV4cGVjdChzZXNzaW9uLmdldChHQU1FX0VOVElUWSwgXCJIYWxmbW92ZUNsb2NrXCIpKS50b0JlKDApO1xuICB9KTtcbn0pO1xuXG4vLyDilIDilIDilIAgY29tcHV0ZVBvc2l0aW9uSGFzaCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZGVzY3JpYmUoXCJjb21wdXRlUG9zaXRpb25IYXNoXCIsICgpID0+IHtcbiAgaXQoXCJpcyBkZXRlcm1pbmlzdGljIGZvciBpZGVudGljYWwgcG9zaXRpb25zXCIsICgpID0+IHtcbiAgICBjb25zdCBzMSA9IG1rU2Vzc2lvbigpO1xuICAgIHMxLmluc2VydChHQU1FX0VOVElUWSwgXCJUdXJuXCIsIFwid2hpdGVcIik7XG4gICAgaW5zZXJ0UGllY2UoczEsIDEsIFwia2luZ1wiLCBcIndoaXRlXCIsIDQpO1xuXG4gICAgY29uc3QgczIgPSBta1Nlc3Npb24oKTtcbiAgICBzMi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiVHVyblwiLCBcIndoaXRlXCIpO1xuICAgIGluc2VydFBpZWNlKHMyLCAxLCBcImtpbmdcIiwgXCJ3aGl0ZVwiLCA0KTtcblxuICAgIGV4cGVjdChjb21wdXRlUG9zaXRpb25IYXNoKHMxKSkudG9CZShjb21wdXRlUG9zaXRpb25IYXNoKHMyKSk7XG4gIH0pO1xuXG4gIGl0KFwiZGlmZmVycyB3aGVuIHNpZGUtdG8tbW92ZSBjaGFuZ2VzXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbWtTZXNzaW9uKCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiVHVyblwiLCBcIndoaXRlXCIpO1xuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwia2luZ1wiLCBcIndoaXRlXCIsIDQpO1xuICAgIGNvbnN0IGEgPSBjb21wdXRlUG9zaXRpb25IYXNoKHNlc3Npb24pO1xuICAgIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIlR1cm5cIiwgXCJibGFja1wiKTtcbiAgICBjb25zdCBiID0gY29tcHV0ZVBvc2l0aW9uSGFzaChzZXNzaW9uKTtcbiAgICBleHBlY3QoYSkubm90LnRvQmUoYik7XG4gIH0pO1xuXG4gIGl0KFwiZGlmZmVycyB3aGVuIGVuIHBhc3NhbnQgdGFyZ2V0IGNoYW5nZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBta1Nlc3Npb24oKTtcbiAgICBzZXNzaW9uLmluc2VydChHQU1FX0VOVElUWSwgXCJUdXJuXCIsIFwid2hpdGVcIik7XG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJraW5nXCIsIFwid2hpdGVcIiwgNCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiRW5QYXNzYW50VGFyZ2V0XCIsIG51bGwpO1xuICAgIGNvbnN0IGEgPSBjb21wdXRlUG9zaXRpb25IYXNoKHNlc3Npb24pO1xuICAgIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIkVuUGFzc2FudFRhcmdldFwiLCAyMCk7XG4gICAgY29uc3QgYiA9IGNvbXB1dGVQb3NpdGlvbkhhc2goc2Vzc2lvbik7XG4gICAgZXhwZWN0KGEpLm5vdC50b0JlKGIpO1xuICB9KTtcblxuICBpdChcImV4Y2x1ZGVzIHRoZSBHQU1FX0VOVElUWSBmcm9tIHBpZWNlIGZhY3RzXCIsICgpID0+IHtcbiAgICAvLyBHQU1FX0VOVElUWSBpcyBpZD0wOyBwaWVjZSBmYWN0IGZpbHRlciByZXF1aXJlcyBpZCA+IDAuXG4gICAgY29uc3Qgc2Vzc2lvbiA9IG1rU2Vzc2lvbigpO1xuICAgIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIlR1cm5cIiwgXCJ3aGl0ZVwiKTtcbiAgICAvLyBJbnNlcnRpbmcgcGllY2Utc2hhcGVkIGZhY3RzIG9uIEdBTUVfRU5USVRZIG11c3QgTk9UIGFmZmVjdCB0aGUgaGFzaCdzXG4gICAgLy8gcGllY2UtZmFjdHMgc2xpY2UgKHRoZXkgd291bGQgcG9sbHV0ZSBjcm9zcy1nYW1lIGNvbXBhcmlzb25zKS5cbiAgICBjb25zdCBoYXNoQmVmb3JlID0gY29tcHV0ZVBvc2l0aW9uSGFzaChzZXNzaW9uKTtcbiAgICBzZXNzaW9uLmluc2VydChHQU1FX0VOVElUWSwgXCJIYWxmbW92ZUNsb2NrXCIsIDUpO1xuICAgIGV4cGVjdChjb21wdXRlUG9zaXRpb25IYXNoKHNlc3Npb24pKS50b0JlKGhhc2hCZWZvcmUpO1xuICB9KTtcbn0pO1xuXG4vLyDilIDilIDilIAgdGhyZWVmb2xkIHJlcGV0aXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmRlc2NyaWJlKFwidGhyZWVmb2xkIHJlcGV0aXRpb25cIiwgKCkgPT4ge1xuICBpdChcIm5vdCBhIHJlcGV0aXRpb24gYWZ0ZXIgMSBvY2N1cnJlbmNlXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbWtTZXNzaW9uKCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiVHVyblwiLCBcIndoaXRlXCIpO1xuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwia2luZ1wiLCBcIndoaXRlXCIsIDQpO1xuICAgIHJlY29yZFBvc2l0aW9uKHNlc3Npb24pO1xuICAgIGV4cGVjdChpc1RocmVlZm9sZFJlcGV0aXRpb24oc2Vzc2lvbikpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcIm5vdCBhIHJlcGV0aXRpb24gYWZ0ZXIgMiBvY2N1cnJlbmNlc1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG1rU2Vzc2lvbigpO1xuICAgIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIlR1cm5cIiwgXCJ3aGl0ZVwiKTtcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcImtpbmdcIiwgXCJ3aGl0ZVwiLCA0KTtcbiAgICByZWNvcmRQb3NpdGlvbihzZXNzaW9uKTtcbiAgICByZWNvcmRQb3NpdGlvbihzZXNzaW9uKTtcbiAgICBleHBlY3QoaXNUaHJlZWZvbGRSZXBldGl0aW9uKHNlc3Npb24pKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJkZXRlY3RlZCBhZnRlciAzIG9jY3VycmVuY2VzXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbWtTZXNzaW9uKCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiVHVyblwiLCBcIndoaXRlXCIpO1xuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwia2luZ1wiLCBcIndoaXRlXCIsIDQpO1xuICAgIHJlY29yZFBvc2l0aW9uKHNlc3Npb24pO1xuICAgIHJlY29yZFBvc2l0aW9uKHNlc3Npb24pO1xuICAgIHJlY29yZFBvc2l0aW9uKHNlc3Npb24pO1xuICAgIGV4cGVjdChpc1RocmVlZm9sZFJlcGV0aXRpb24oc2Vzc2lvbikpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwic3RpbGwgZGV0ZWN0ZWQgYWZ0ZXIgNCsgb2NjdXJyZW5jZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBta1Nlc3Npb24oKTtcbiAgICBzZXNzaW9uLmluc2VydChHQU1FX0VOVElUWSwgXCJUdXJuXCIsIFwid2hpdGVcIik7XG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJraW5nXCIsIFwid2hpdGVcIiwgNCk7XG4gICAgcmVjb3JkUG9zaXRpb24oc2Vzc2lvbik7XG4gICAgcmVjb3JkUG9zaXRpb24oc2Vzc2lvbik7XG4gICAgcmVjb3JkUG9zaXRpb24oc2Vzc2lvbik7XG4gICAgcmVjb3JkUG9zaXRpb24oc2Vzc2lvbik7XG4gICAgZXhwZWN0KGlzVGhyZWVmb2xkUmVwZXRpdGlvbihzZXNzaW9uKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJkaWZmZXJlbnQgcG9zaXRpb25zIGRvbid0IHRyaWdnZXIgcmVwZXRpdGlvblwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG1rU2Vzc2lvbigpO1xuICAgIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIlR1cm5cIiwgXCJ3aGl0ZVwiKTtcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcImtpbmdcIiwgXCJ3aGl0ZVwiLCA0KTtcbiAgICByZWNvcmRQb3NpdGlvbihzZXNzaW9uKTsgLy8gcG9zaXRpb24gQSwgY291bnQgMVxuXG4gICAgLy8gQ2hhbmdlIHBvc2l0aW9uIOKGkiBuZXcgaGFzaFxuICAgIHNlc3Npb24uaW5zZXJ0KDEgYXMgRW50aXR5SWQsIFwiUG9zaXRpb25cIiwgNSk7XG4gICAgcmVjb3JkUG9zaXRpb24oc2Vzc2lvbik7IC8vIHBvc2l0aW9uIEIsIGNvdW50IDFcblxuICAgIC8vIENoYW5nZSBiYWNrIOKGkiBiYWNrIHRvIHBvc2l0aW9uIEFcbiAgICBzZXNzaW9uLmluc2VydCgxIGFzIEVudGl0eUlkLCBcIlBvc2l0aW9uXCIsIDQpO1xuICAgIHJlY29yZFBvc2l0aW9uKHNlc3Npb24pOyAvLyBwb3NpdGlvbiBBLCBjb3VudCAyXG5cbiAgICBleHBlY3QoaXNUaHJlZWZvbGRSZXBldGl0aW9uKHNlc3Npb24pKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJ0cmFja3MgZWFjaCBkaXN0aW5jdCBwb3NpdGlvbiBzZXBhcmF0ZWx5XCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbWtTZXNzaW9uKCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiVHVyblwiLCBcIndoaXRlXCIpO1xuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwia2luZ1wiLCBcIndoaXRlXCIsIDQpO1xuICAgIHJlY29yZFBvc2l0aW9uKHNlc3Npb24pOyAvLyBBOjFcbiAgICBzZXNzaW9uLmluc2VydCgxIGFzIEVudGl0eUlkLCBcIlBvc2l0aW9uXCIsIDUpO1xuICAgIHJlY29yZFBvc2l0aW9uKHNlc3Npb24pOyAvLyBCOjFcbiAgICBzZXNzaW9uLmluc2VydCgxIGFzIEVudGl0eUlkLCBcIlBvc2l0aW9uXCIsIDQpO1xuICAgIHJlY29yZFBvc2l0aW9uKHNlc3Npb24pOyAvLyBBOjJcbiAgICBzZXNzaW9uLmluc2VydCgxIGFzIEVudGl0eUlkLCBcIlBvc2l0aW9uXCIsIDUpO1xuICAgIHJlY29yZFBvc2l0aW9uKHNlc3Npb24pOyAvLyBCOjJcbiAgICBzZXNzaW9uLmluc2VydCgxIGFzIEVudGl0eUlkLCBcIlBvc2l0aW9uXCIsIDQpO1xuICAgIHJlY29yZFBvc2l0aW9uKHNlc3Npb24pOyAvLyBBOjMg4oaSIHJlcGV0aXRpb24hXG5cbiAgICBleHBlY3QoaXNUaHJlZWZvbGRSZXBldGl0aW9uKHNlc3Npb24pKS50b0JlKHRydWUpO1xuXG4gICAgLy8gQiBpcyBub3QgeWV0IHRocmVlZm9sZFxuICAgIHNlc3Npb24uaW5zZXJ0KDEgYXMgRW50aXR5SWQsIFwiUG9zaXRpb25cIiwgNSk7XG4gICAgZXhwZWN0KGlzVGhyZWVmb2xkUmVwZXRpdGlvbihzZXNzaW9uKSkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwidHVybiBjaGFuZ2UgcHJvZHVjZXMgYSBkaWZmZXJlbnQgaGFzaCAoc28gc2FtZSBib2FyZCB3aXRoIGRpZmZlcmVudCBzaWRlIHRvIG1vdmUgY291bnRzIHNlcGFyYXRlbHkpXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbWtTZXNzaW9uKCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiVHVyblwiLCBcIndoaXRlXCIpO1xuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwia2luZ1wiLCBcIndoaXRlXCIsIDQpO1xuICAgIHJlY29yZFBvc2l0aW9uKHNlc3Npb24pOyAvLyB3aGl0ZS10by1tb3ZlOiBjb3VudCAxXG4gICAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiVHVyblwiLCBcImJsYWNrXCIpO1xuICAgIHJlY29yZFBvc2l0aW9uKHNlc3Npb24pOyAvLyBibGFjay10by1tb3ZlOiBjb3VudCAxXG4gICAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiVHVyblwiLCBcIndoaXRlXCIpO1xuICAgIHJlY29yZFBvc2l0aW9uKHNlc3Npb24pOyAvLyB3aGl0ZS10by1tb3ZlOiBjb3VudCAyXG4gICAgZXhwZWN0KGlzVGhyZWVmb2xkUmVwZXRpdGlvbihzZXNzaW9uKSkudG9CZShmYWxzZSk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvY2hlc3Mvc3JjL3J1bGVzL2RyYXdzLnRlc3QudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/39f74eb78736761cc01be8d5c3ac562a6d70b419 b/7xOfJqsDU787fe61oSCq1/web/39f74eb78736761cc01be8d5c3ac562a6d70b419 deleted file mode 100644 index 535c938..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/39f74eb78736761cc01be8d5c3ac562a6d70b419 +++ /dev/null @@ -1,126 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/rules/check.ts", {"importedNames":["isInCheck","isSquareAttacked","filterSelfCheckMoves"]}); - - - - -const mkId = (n) => n; -function insertPiece(s, id, type, color, sq) { - const eid = mkId(id); - s.insert(eid, "PieceType", type); - s.insert(eid, "Color", color); - s.insert(eid, "Position", sq); - return eid; -} -(0,__vite_ssr_import_0__.describe)("isSquareAttacked", () => { - (0,__vite_ssr_import_0__.it)("rook attacks along its file", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "rook", "black", 60); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isSquareAttacked)(session, 4, "black")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("rook does not attack through a blocker", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "rook", "black", 60); - insertPiece(session, 2, "pawn", "white", 20); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isSquareAttacked)(session, 4, "black")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("knight attacks L-shaped squares", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "knight", "black", 28); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isSquareAttacked)(session, 38, "black")).toBe(true); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isSquareAttacked)(session, 27, "black")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("unoccupied square not attacked on empty board", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isSquareAttacked)(session, 28, "black")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("pawn attack geometry is respected (diagonal, not straight)", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "pawn", "white", 28); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isSquareAttacked)(session, 35, "white")).toBe(true); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isSquareAttacked)(session, 37, "white")).toBe(true); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isSquareAttacked)(session, 36, "white")).toBe(false); - }); -}); -(0,__vite_ssr_import_0__.describe)("isInCheck", () => { - (0,__vite_ssr_import_0__.it)("white king in check from black rook on same file", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "king", "white", 4); - insertPiece(session, 2, "rook", "black", 60); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isInCheck)(session, "white")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("white king not in check when rook is blocked", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "king", "white", 4); - insertPiece(session, 2, "rook", "black", 60); - insertPiece(session, 3, "pawn", "white", 20); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isInCheck)(session, "white")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("no king of requested color returns false (no crash)", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isInCheck)(session, "white")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("opposite-color king in check doesn't affect our color", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "king", "black", 60); - insertPiece(session, 2, "rook", "white", 4); - insertPiece(session, 3, "king", "white", 0); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isInCheck)(session, "black")).toBe(true); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isInCheck)(session, "white")).toBe(false); - }); -}); -(0,__vite_ssr_import_0__.describe)("filterSelfCheckMoves", () => { - (0,__vite_ssr_import_0__.it)("move that exposes own king to a rook is filtered out (absolute pin)", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "king", "white", 4); - insertPiece(session, 2, "rook", "white", 20); - insertPiece(session, 3, "rook", "black", 60); - const moves = [ - { pieceId: mkId(2), from: 20, to: 21, isCapture: false } - ]; - const filtered = (0,__vite_ssr_import_2__.filterSelfCheckMoves)(session, moves, "white"); - (0,__vite_ssr_import_0__.expect)(filtered).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("move that keeps the king safe is kept", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "king", "white", 4); - insertPiece(session, 2, "rook", "white", 28); - insertPiece(session, 3, "rook", "black", 63); - const moves = [ - { pieceId: mkId(2), from: 28, to: 29, isCapture: false } - ]; - const filtered = (0,__vite_ssr_import_2__.filterSelfCheckMoves)(session, moves, "white"); - (0,__vite_ssr_import_0__.expect)(filtered).toHaveLength(1); - }); - (0,__vite_ssr_import_0__.it)("sliding along the pin line stays legal (rook stays on e-file)", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "king", "white", 4); - insertPiece(session, 2, "rook", "white", 20); - insertPiece(session, 3, "rook", "black", 60); - const moves = [ - { pieceId: mkId(2), from: 20, to: 28, isCapture: false } - ]; - const filtered = (0,__vite_ssr_import_2__.filterSelfCheckMoves)(session, moves, "white"); - (0,__vite_ssr_import_0__.expect)(filtered).toHaveLength(1); - }); - (0,__vite_ssr_import_0__.it)("capturing the checking piece is allowed (removes check)", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "king", "white", 4); - insertPiece(session, 2, "rook", "white", 56); - insertPiece(session, 3, "rook", "black", 60); - const moves = [ - { pieceId: mkId(2), from: 56, to: 60, isCapture: true } - ]; - const filtered = (0,__vite_ssr_import_2__.filterSelfCheckMoves)(session, moves, "white"); - (0,__vite_ssr_import_0__.expect)(filtered).toHaveLength(1); - }); - (0,__vite_ssr_import_0__.it)("empty move list returns empty", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "king", "white", 4); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.filterSelfCheckMoves)(session, [], "white")).toEqual([]); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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S0FBSztBQUFBLElBQ3hEO0FBQ0EsVUFBTSxjQUFXLDRDQUFxQixTQUFTLE9BQU8sT0FBTztBQUM3RCxxQ0FBTyxRQUFRLEVBQUUsYUFBYSxDQUFDO0FBQUEsRUFDakMsQ0FBQztBQUVELCtCQUFHLGlDQUFpQyxNQUFNO0FBQ3hDLFVBQU0sVUFBVSxJQUFJLDhCQUFRLEVBQUUsVUFBVSxNQUFNLENBQUM7QUFDL0MsZ0JBQVksU0FBUyxHQUFHLFFBQVEsU0FBUyxDQUFDO0FBQzFDLHdDQUFPLDRDQUFxQixTQUFTLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUFBLEVBQy9ELENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJjaGVjay50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGVzdHMgZm9yIGNoZWNrIGRldGVjdGlvbiArIHNlbGYtY2hlY2sgZmlsdGVyIChQMi4xOCkuXG4gKlxuICogU3F1YXJlIGluZGV4aW5nIGNvbnZlbnRpb24gKHBlciBzY2hlbWEudHMpOlxuICogICBzcXVhcmUgPSByYW5rICogOCArIGZpbGUsICBmaWxlIDA9YSwgcmFuayAwPXJhbmsxXG4gKiAgIGExPTAsIGUxPTQsIGUzPTIwLCBlND0yOCwgZTg9NjAsIGg4PTYzXG4gKi9cbmltcG9ydCB7IGRlc2NyaWJlLCBpdCwgZXhwZWN0IH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuaW1wb3J0IHtcbiAgaXNJbkNoZWNrLFxuICBpc1NxdWFyZUF0dGFja2VkLFxuICBmaWx0ZXJTZWxmQ2hlY2tNb3Zlcyxcbn0gZnJvbSBcIi4vY2hlY2suanNcIjtcbmltcG9ydCB0eXBlIHsgTGVnYWxNb3ZlIH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcblxuY29uc3QgbWtJZCA9IChuOiBudW1iZXIpID0+IG4gYXMgRW50aXR5SWQ7XG5cbmZ1bmN0aW9uIGluc2VydFBpZWNlKFxuICBzOiBTZXNzaW9uLFxuICBpZDogbnVtYmVyLFxuICB0eXBlOiBzdHJpbmcsXG4gIGNvbG9yOiBzdHJpbmcsXG4gIHNxOiBudW1iZXIsXG4pOiBFbnRpdHlJZCB7XG4gIGNvbnN0IGVpZCA9IG1rSWQoaWQpO1xuICBzLmluc2VydChlaWQsIFwiUGllY2VUeXBlXCIsIHR5cGUpO1xuICBzLmluc2VydChlaWQsIFwiQ29sb3JcIiwgY29sb3IpO1xuICBzLmluc2VydChlaWQsIFwiUG9zaXRpb25cIiwgc3EpO1xuICByZXR1cm4gZWlkO1xufVxuXG5kZXNjcmliZShcImlzU3F1YXJlQXR0YWNrZWRcIiwgKCkgPT4ge1xuICBpdChcInJvb2sgYXR0YWNrcyBhbG9uZyBpdHMgZmlsZVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwicm9va1wiLCBcImJsYWNrXCIsIDYwKTsgLy8gZThcbiAgICAvLyBlMSAoNCkgaXMgb24gdGhlIHNhbWUgZmlsZSBhcyBlOCBhbmQgdW5vYnN0cnVjdGVkLlxuICAgIGV4cGVjdChpc1NxdWFyZUF0dGFja2VkKHNlc3Npb24sIDQsIFwiYmxhY2tcIikpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwicm9vayBkb2VzIG5vdCBhdHRhY2sgdGhyb3VnaCBhIGJsb2NrZXJcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInJvb2tcIiwgXCJibGFja1wiLCA2MCk7IC8vIGU4XG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMiwgXCJwYXduXCIsIFwid2hpdGVcIiwgMjApOyAvLyBlMyBibG9ja3MgdGhlIGZpbGVcbiAgICAvLyBlMSBpcyBiZXlvbmQgdGhlIGJsb2NrZXIsIHNvIG5vdCBhdHRhY2tlZC5cbiAgICBleHBlY3QoaXNTcXVhcmVBdHRhY2tlZChzZXNzaW9uLCA0LCBcImJsYWNrXCIpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJrbmlnaHQgYXR0YWNrcyBMLXNoYXBlZCBzcXVhcmVzXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJrbmlnaHRcIiwgXCJibGFja1wiLCAyOCk7IC8vIGU0XG4gICAgLy8gMjggKyAxMCA9IDM4IOKGkiBnNSwgYSB2YWxpZCBrbmlnaHQgdGFyZ2V0LlxuICAgIGV4cGVjdChpc1NxdWFyZUF0dGFja2VkKHNlc3Npb24sIDM4LCBcImJsYWNrXCIpKS50b0JlKHRydWUpO1xuICAgIC8vIDI3IChkNCkgaXMgYWRqYWNlbnQsIG5vdCBhIGtuaWdodCBtb3ZlLlxuICAgIGV4cGVjdChpc1NxdWFyZUF0dGFja2VkKHNlc3Npb24sIDI3LCBcImJsYWNrXCIpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJ1bm9jY3VwaWVkIHNxdWFyZSBub3QgYXR0YWNrZWQgb24gZW1wdHkgYm9hcmRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBleHBlY3QoaXNTcXVhcmVBdHRhY2tlZChzZXNzaW9uLCAyOCwgXCJibGFja1wiKSkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwicGF3biBhdHRhY2sgZ2VvbWV0cnkgaXMgcmVzcGVjdGVkIChkaWFnb25hbCwgbm90IHN0cmFpZ2h0KVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIC8vIFdoaXRlIHBhd24gYXQgZTQgKDI4KSBhdHRhY2tzIGQ1ICgzNSkgYW5kIGY1ICgzNyksIG5vdCBlNSAoMzYpLlxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwicGF3blwiLCBcIndoaXRlXCIsIDI4KTtcbiAgICBleHBlY3QoaXNTcXVhcmVBdHRhY2tlZChzZXNzaW9uLCAzNSwgXCJ3aGl0ZVwiKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QoaXNTcXVhcmVBdHRhY2tlZChzZXNzaW9uLCAzNywgXCJ3aGl0ZVwiKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QoaXNTcXVhcmVBdHRhY2tlZChzZXNzaW9uLCAzNiwgXCJ3aGl0ZVwiKSkudG9CZShmYWxzZSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiaXNJbkNoZWNrXCIsICgpID0+IHtcbiAgaXQoXCJ3aGl0ZSBraW5nIGluIGNoZWNrIGZyb20gYmxhY2sgcm9vayBvbiBzYW1lIGZpbGVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcImtpbmdcIiwgXCJ3aGl0ZVwiLCA0KTsgICAvLyBlMVxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDIsIFwicm9va1wiLCBcImJsYWNrXCIsIDYwKTsgIC8vIGU4XG4gICAgZXhwZWN0KGlzSW5DaGVjayhzZXNzaW9uLCBcIndoaXRlXCIpKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcIndoaXRlIGtpbmcgbm90IGluIGNoZWNrIHdoZW4gcm9vayBpcyBibG9ja2VkXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJraW5nXCIsIFwid2hpdGVcIiwgNCk7ICAgLy8gZTFcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAyLCBcInJvb2tcIiwgXCJibGFja1wiLCA2MCk7ICAvLyBlOFxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDMsIFwicGF3blwiLCBcIndoaXRlXCIsIDIwKTsgIC8vIGUzIGJsb2Nrc1xuICAgIGV4cGVjdChpc0luQ2hlY2soc2Vzc2lvbiwgXCJ3aGl0ZVwiKSkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwibm8ga2luZyBvZiByZXF1ZXN0ZWQgY29sb3IgcmV0dXJucyBmYWxzZSAobm8gY3Jhc2gpXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgZXhwZWN0KGlzSW5DaGVjayhzZXNzaW9uLCBcIndoaXRlXCIpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJvcHBvc2l0ZS1jb2xvciBraW5nIGluIGNoZWNrIGRvZXNuJ3QgYWZmZWN0IG91ciBjb2xvclwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwia2luZ1wiLCBcImJsYWNrXCIsIDYwKTsgIC8vIGU4XG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMiwgXCJyb29rXCIsIFwid2hpdGVcIiwgNCk7ICAgLy8gZTEgYXR0YWNrcyBlOFxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDMsIFwia2luZ1wiLCBcIndoaXRlXCIsIDApOyAgIC8vIGExLCBzYWZlXG4gICAgZXhwZWN0KGlzSW5DaGVjayhzZXNzaW9uLCBcImJsYWNrXCIpKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChpc0luQ2hlY2soc2Vzc2lvbiwgXCJ3aGl0ZVwiKSkudG9CZShmYWxzZSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiZmlsdGVyU2VsZkNoZWNrTW92ZXNcIiwgKCkgPT4ge1xuICBpdChcIm1vdmUgdGhhdCBleHBvc2VzIG93biBraW5nIHRvIGEgcm9vayBpcyBmaWx0ZXJlZCBvdXQgKGFic29sdXRlIHBpbilcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcImtpbmdcIiwgXCJ3aGl0ZVwiLCA0KTsgICAvLyBlMVxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDIsIFwicm9va1wiLCBcIndoaXRlXCIsIDIwKTsgIC8vIGUzIOKAlCBwaW5uZWQgb24gdGhlIGUtZmlsZVxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDMsIFwicm9va1wiLCBcImJsYWNrXCIsIDYwKTsgIC8vIGU4IOKAlCB3b3VsZCBnaXZlIGNoZWNrXG5cbiAgICAvLyBNb3ZpbmcgdGhlIGUzIHJvb2sgc2lkZXdheXMgKGUzIOKGkiBmMyA9IDIxKSBleHBvc2VzIHRoZSBraW5nLlxuICAgIGNvbnN0IG1vdmVzOiBMZWdhbE1vdmVbXSA9IFtcbiAgICAgIHsgcGllY2VJZDogbWtJZCgyKSwgZnJvbTogMjAsIHRvOiAyMSwgaXNDYXB0dXJlOiBmYWxzZSB9LFxuICAgIF07XG4gICAgY29uc3QgZmlsdGVyZWQgPSBmaWx0ZXJTZWxmQ2hlY2tNb3ZlcyhzZXNzaW9uLCBtb3ZlcywgXCJ3aGl0ZVwiKTtcbiAgICBleHBlY3QoZmlsdGVyZWQpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG5cbiAgaXQoXCJtb3ZlIHRoYXQga2VlcHMgdGhlIGtpbmcgc2FmZSBpcyBrZXB0XCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJraW5nXCIsIFwid2hpdGVcIiwgNCk7ICAgLy8gZTFcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAyLCBcInJvb2tcIiwgXCJ3aGl0ZVwiLCAyOCk7ICAvLyBlNCDigJQgbm90IG9uIGEgY2hlY2sgbGluZVxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDMsIFwicm9va1wiLCBcImJsYWNrXCIsIDYzKTsgIC8vIGg4IOKAlCBkb2Vzbid0IHRocmVhdGVuIGUxXG5cbiAgICBjb25zdCBtb3ZlczogTGVnYWxNb3ZlW10gPSBbXG4gICAgICB7IHBpZWNlSWQ6IG1rSWQoMiksIGZyb206IDI4LCB0bzogMjksIGlzQ2FwdHVyZTogZmFsc2UgfSxcbiAgICBdO1xuICAgIGNvbnN0IGZpbHRlcmVkID0gZmlsdGVyU2VsZkNoZWNrTW92ZXMoc2Vzc2lvbiwgbW92ZXMsIFwid2hpdGVcIik7XG4gICAgZXhwZWN0KGZpbHRlcmVkKS50b0hhdmVMZW5ndGgoMSk7XG4gIH0pO1xuXG4gIGl0KFwic2xpZGluZyBhbG9uZyB0aGUgcGluIGxpbmUgc3RheXMgbGVnYWwgKHJvb2sgc3RheXMgb24gZS1maWxlKVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwia2luZ1wiLCBcIndoaXRlXCIsIDQpOyAgIC8vIGUxXG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMiwgXCJyb29rXCIsIFwid2hpdGVcIiwgMjApOyAgLy8gZTMg4oCUIHBpbm5lZCBvbiBlLWZpbGVcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAzLCBcInJvb2tcIiwgXCJibGFja1wiLCA2MCk7ICAvLyBlOFxuXG4gICAgLy8gZTMg4oaSIGU0IHN0YXlzIG9uIHRoZSBlLWZpbGUsIHNvIHRoZSBraW5nIHJlbWFpbnMgc2hpZWxkZWQuXG4gICAgY29uc3QgbW92ZXM6IExlZ2FsTW92ZVtdID0gW1xuICAgICAgeyBwaWVjZUlkOiBta0lkKDIpLCBmcm9tOiAyMCwgdG86IDI4LCBpc0NhcHR1cmU6IGZhbHNlIH0sXG4gICAgXTtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IGZpbHRlclNlbGZDaGVja01vdmVzKHNlc3Npb24sIG1vdmVzLCBcIndoaXRlXCIpO1xuICAgIGV4cGVjdChmaWx0ZXJlZCkudG9IYXZlTGVuZ3RoKDEpO1xuICB9KTtcblxuICBpdChcImNhcHR1cmluZyB0aGUgY2hlY2tpbmcgcGllY2UgaXMgYWxsb3dlZCAocmVtb3ZlcyBjaGVjaylcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcImtpbmdcIiwgXCJ3aGl0ZVwiLCA0KTsgICAgLy8gZTEg4oCUIGluIGNoZWNrIGZyb20gZThcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAyLCBcInJvb2tcIiwgXCJ3aGl0ZVwiLCA1Nik7ICAgLy8gYTgg4oCUIGNhbiBzbGlkZSB0byBlOCBhbmQgY2FwdHVyZVxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDMsIFwicm9va1wiLCBcImJsYWNrXCIsIDYwKTsgICAvLyBlOFxuXG4gICAgY29uc3QgbW92ZXM6IExlZ2FsTW92ZVtdID0gW1xuICAgICAgeyBwaWVjZUlkOiBta0lkKDIpLCBmcm9tOiA1NiwgdG86IDYwLCBpc0NhcHR1cmU6IHRydWUgfSxcbiAgICBdO1xuICAgIGNvbnN0IGZpbHRlcmVkID0gZmlsdGVyU2VsZkNoZWNrTW92ZXMoc2Vzc2lvbiwgbW92ZXMsIFwid2hpdGVcIik7XG4gICAgZXhwZWN0KGZpbHRlcmVkKS50b0hhdmVMZW5ndGgoMSk7XG4gIH0pO1xuXG4gIGl0KFwiZW1wdHkgbW92ZSBsaXN0IHJldHVybnMgZW1wdHlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcImtpbmdcIiwgXCJ3aGl0ZVwiLCA0KTtcbiAgICBleHBlY3QoZmlsdGVyU2VsZkNoZWNrTW92ZXMoc2Vzc2lvbiwgW10sIFwid2hpdGVcIikpLnRvRXF1YWwoW10pO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL2NoZXNzL3NyYy9ydWxlcy9jaGVjay50ZXN0LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/3b926c4c77a074502e39dd7b69dd7ed3a80e457b b/7xOfJqsDU787fe61oSCq1/web/3b926c4c77a074502e39dd7b69dd7ed3a80e457b deleted file mode 100644 index 16754e3..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/3b926c4c77a074502e39dd7b69dd7ed3a80e457b +++ /dev/null @@ -1,28 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "PAWNS_ONLY_LAYOUT", { enumerable: true, configurable: true, get(){ try { return PAWNS_ONLY_LAYOUT } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/layouts/registry.ts", {"importedNames":["LAYOUT_REGISTRY"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["algebraicToSquare"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["squareOf"]}); -function pawnsOnRank(color, rank) { - const pieces = []; - for (let file = 0; file < 8; file++) { - pieces.push({ type: "pawn", color, square: (0,__vite_ssr_import_2__.squareOf)(file, rank) }); - }; - return pieces; -} -const PAWNS_ONLY_LAYOUT = { - id: "pawns-only", - name: "Pawns-Only Chess", - description: "Each side has only a king and eight pawns. Pairs with 'first-promotion-wins' for the canonical 'first pawn to queen' objective.", - pieces: [ - { type: "king", color: "white", square: (0,__vite_ssr_import_1__.algebraicToSquare)("e1") }, - ...pawnsOnRank("white", 1), - { type: "king", color: "black", square: (0,__vite_ssr_import_1__.algebraicToSquare)("e8") }, - ...pawnsOnRank("black", 6) - ], - suggestedPresets: ["first-promotion-wins"], - source: "premade" -}; -__vite_ssr_import_0__.LAYOUT_REGISTRY.register(PAWNS_ONLY_LAYOUT); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQW1CQTtBQUNBO0FBRUE7QUFFQSxTQUFTLFlBQVksT0FBMEIsTUFBZ0M7QUFDN0UsUUFBTSxTQUEyQixDQUFDO0FBQ2xDLFdBQVMsT0FBTyxHQUFHLE9BQU8sR0FBRyxRQUFRO0FBQ25DLFdBQU8sS0FBSyxFQUFFLE1BQU0sUUFBUSxPQUFPLFdBQVEsZ0NBQVMsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUFBLEVBQ25FO0FBQ0EsU0FBTztBQUNUO0FBRU8sTUFBTSxvQkFBb0M7QUFBQSxFQUMvQyxJQUFJO0FBQUEsRUFDSixNQUFNO0FBQUEsRUFDTixhQUNFO0FBQUEsRUFDRixRQUFRO0FBQUEsSUFDTixFQUFFLE1BQU0sUUFBUSxPQUFPLFNBQVMsV0FBUSx5Q0FBa0IsSUFBSSxFQUFFO0FBQUEsSUFDaEUsR0FBRyxZQUFZLFNBQVMsQ0FBQztBQUFBLElBQ3pCLEVBQUUsTUFBTSxRQUFRLE9BQU8sU0FBUyxXQUFRLHlDQUFrQixJQUFJLEVBQUU7QUFBQSxJQUNoRSxHQUFHLFlBQVksU0FBUyxDQUFDO0FBQUEsRUFDM0I7QUFBQSxFQUNBLGtCQUFrQixDQUFDLHNCQUFzQjtBQUFBLEVBQ3pDLFFBQVE7QUFDVjtBQUVBLHNDQUFnQixTQUFTLGlCQUFpQiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsicGF3bnMtb25seS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExheW91dDogUGF3bnMtT25seSBDaGVzcy5cbiAqXG4gKiAgIC0gRWFjaCBzaWRlOiBraW5nIG9uIGhvbWUgc3F1YXJlICsgOCBwYXducyBvbiBob21lIHJhbmsuXG4gKiAgIC0gTm8gb3RoZXIgcGllY2VzLlxuICpcbiAqIFRoZSBjYW5vbmljYWwgZ3JlZW5jaGVzcyBcIlBhd25zLU9ubHlcIiB2YXJpYW50IGhhcyBOTyBraW5ncyBhbmQgYVxuICogXCJmaXJzdC10by1wcm9tb3RlIHdpbnNcIiBvYmplY3RpdmUuIFNpbmNlIG91ciB2YWxpZGF0b3IgcmVxdWlyZXNcbiAqIGV4YWN0bHkgb25lIGtpbmcgcGVyIHNpZGUsIHdlIHNoaXAgdGhlIGtpbmctZnVsIHZhcmlhbnQgYW5kXG4gKiByZWNvbW1lbmQgcGFpcmluZyB3aXRoIGBmaXJzdC1wcm9tb3Rpb24td2luc2AgKHNoaXBzIGluIHRoZVxuICogcnVsZS12YXJpYW50cyBwbGFuKSDigJQgdGhhdCBwcmVzZXQgbWFrZXMgdGhlIGdhbWUgZW5kIG9uIGZpcnN0XG4gKiBwcm9tb3Rpb24sIG1hdGNoaW5nIHRoZSBjYW5vbmljYWwgZmxhdm9yLlxuICpcbiAqIFdpdGhvdXQgdGhlIHByZXNldCwgdGhlIGdhbWUgcGxheXMgYXMgXCJraW5ncyArIHBhd25zIG9ubHlcIiDigJQgYVxuICogdmFsaWQgYW5kIGludGVyZXN0aW5nIGVuZGdhbWUgc3R1ZHkuXG4gKlxuICogUmVmZXJlbmNlOiBodHRwczovL2dyZWVuY2hlc3MubmV0L3J1bGVzLnBocD92PXBhd25zLW9ubHlcbiAqL1xuaW1wb3J0IHR5cGUgeyBTdGFydGluZ0xheW91dCB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBMQVlPVVRfUkVHSVNUUlkgfSBmcm9tIFwiLi9yZWdpc3RyeS5qc1wiO1xuaW1wb3J0IHsgYWxnZWJyYWljVG9TcXVhcmUgfSBmcm9tIFwiLi4vY29vcmQuanNcIjtcbmltcG9ydCB0eXBlIHsgUGllY2VQbGFjZW1lbnQgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgc3F1YXJlT2YgfSBmcm9tIFwiLi4vY29vcmQuanNcIjtcblxuZnVuY3Rpb24gcGF3bnNPblJhbmsoY29sb3I6IFwid2hpdGVcIiB8IFwiYmxhY2tcIiwgcmFuazogbnVtYmVyKTogUGllY2VQbGFjZW1lbnRbXSB7XG4gIGNvbnN0IHBpZWNlczogUGllY2VQbGFjZW1lbnRbXSA9IFtdO1xuICBmb3IgKGxldCBmaWxlID0gMDsgZmlsZSA8IDg7IGZpbGUrKykge1xuICAgIHBpZWNlcy5wdXNoKHsgdHlwZTogXCJwYXduXCIsIGNvbG9yLCBzcXVhcmU6IHNxdWFyZU9mKGZpbGUsIHJhbmspIH0pO1xuICB9XG4gIHJldHVybiBwaWVjZXM7XG59XG5cbmV4cG9ydCBjb25zdCBQQVdOU19PTkxZX0xBWU9VVDogU3RhcnRpbmdMYXlvdXQgPSB7XG4gIGlkOiBcInBhd25zLW9ubHlcIixcbiAgbmFtZTogXCJQYXducy1Pbmx5IENoZXNzXCIsXG4gIGRlc2NyaXB0aW9uOlxuICAgIFwiRWFjaCBzaWRlIGhhcyBvbmx5IGEga2luZyBhbmQgZWlnaHQgcGF3bnMuIFBhaXJzIHdpdGggJ2ZpcnN0LXByb21vdGlvbi13aW5zJyBmb3IgdGhlIGNhbm9uaWNhbCAnZmlyc3QgcGF3biB0byBxdWVlbicgb2JqZWN0aXZlLlwiLFxuICBwaWVjZXM6IFtcbiAgICB7IHR5cGU6IFwia2luZ1wiLCBjb2xvcjogXCJ3aGl0ZVwiLCBzcXVhcmU6IGFsZ2VicmFpY1RvU3F1YXJlKFwiZTFcIikgfSxcbiAgICAuLi5wYXduc09uUmFuayhcIndoaXRlXCIsIDEpLFxuICAgIHsgdHlwZTogXCJraW5nXCIsIGNvbG9yOiBcImJsYWNrXCIsIHNxdWFyZTogYWxnZWJyYWljVG9TcXVhcmUoXCJlOFwiKSB9LFxuICAgIC4uLnBhd25zT25SYW5rKFwiYmxhY2tcIiwgNiksXG4gIF0sXG4gIHN1Z2dlc3RlZFByZXNldHM6IFtcImZpcnN0LXByb21vdGlvbi13aW5zXCJdLFxuICBzb3VyY2U6IFwicHJlbWFkZVwiLFxufTtcblxuTEFZT1VUX1JFR0lTVFJZLnJlZ2lzdGVyKFBBV05TX09OTFlfTEFZT1VUKTtcbiJdLCJmaWxlIjoiL3NyYy9sYXlvdXRzL3Bhd25zLW9ubHkudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/3ca2520b03679ac850c19af3fa9473e0dac3ce3b b/7xOfJqsDU787fe61oSCq1/web/3ca2520b03679ac850c19af3fa9473e0dac3ce3b deleted file mode 100644 index 0cf2413..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/3ca2520b03679ac850c19af3fa9473e0dac3ce3b +++ /dev/null @@ -1,96 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/rules/insufficient.ts", {"importedNames":["isInsufficientMaterial"]}); -const mkId = (n) => n; -function ins(s, id, type, color, sq) { - const eid = mkId(id); - s.insert(eid, "PieceType", type); - s.insert(eid, "Color", color); - s.insert(eid, "Position", sq); - return eid; -} -(0,__vite_ssr_import_0__.describe)("isInsufficientMaterial", () => { - (0,__vite_ssr_import_0__.it)("K vs K: draw", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - ins(session, 1, "king", "white", 4); - ins(session, 2, "king", "black", 60); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isInsufficientMaterial)(session)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("K + N vs K: draw", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - ins(session, 1, "king", "white", 4); - ins(session, 2, "knight", "white", 12); - ins(session, 3, "king", "black", 60); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isInsufficientMaterial)(session)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("K vs K + N (black has the minor): draw", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - ins(session, 1, "king", "white", 4); - ins(session, 2, "king", "black", 60); - ins(session, 3, "knight", "black", 52); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isInsufficientMaterial)(session)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("K + B vs K: draw", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - ins(session, 1, "king", "white", 4); - ins(session, 2, "bishop", "white", 9); - ins(session, 3, "king", "black", 60); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isInsufficientMaterial)(session)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("K + B vs K + B same color (both dark): draw", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - ins(session, 1, "king", "white", 4); - ins(session, 2, "bishop", "white", 0); - ins(session, 3, "king", "black", 60); - ins(session, 4, "bishop", "black", 2); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isInsufficientMaterial)(session)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("K + B vs K + B opposite color: NOT draw", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - ins(session, 1, "king", "white", 4); - ins(session, 2, "bishop", "white", 0); - ins(session, 3, "king", "black", 60); - ins(session, 4, "bishop", "black", 1); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isInsufficientMaterial)(session)).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("K + Q vs K: NOT draw", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - ins(session, 1, "king", "white", 4); - ins(session, 2, "queen", "white", 3); - ins(session, 3, "king", "black", 60); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isInsufficientMaterial)(session)).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("K + R vs K: NOT draw", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - ins(session, 1, "king", "white", 4); - ins(session, 2, "rook", "white", 0); - ins(session, 3, "king", "black", 60); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isInsufficientMaterial)(session)).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("K + P vs K: NOT draw (pawn can promote)", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - ins(session, 1, "king", "white", 4); - ins(session, 2, "pawn", "white", 12); - ins(session, 3, "king", "black", 60); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isInsufficientMaterial)(session)).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("K + N + N vs K: NOT draw (outside plan scope)", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - ins(session, 1, "king", "white", 4); - ins(session, 2, "knight", "white", 12); - ins(session, 3, "knight", "white", 14); - ins(session, 4, "king", "black", 60); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isInsufficientMaterial)(session)).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("K + B + N vs K: NOT draw (forced mate exists)", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - ins(session, 1, "king", "white", 4); - ins(session, 2, "bishop", "white", 9); - ins(session, 3, "knight", "white", 12); - ins(session, 4, "king", "black", 60); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isInsufficientMaterial)(session)).toBe(false); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFBQSxFQUNwRCxDQUFDO0FBRUQsK0JBQUcsaURBQWlELE1BQU07QUFDeEQsVUFBTSxVQUFVLElBQUksOEJBQVEsRUFBRSxVQUFVLE1BQU0sQ0FBQztBQUMvQyxRQUFJLFNBQVMsR0FBRyxRQUFRLFNBQVMsQ0FBQztBQUNsQyxRQUFJLFNBQVMsR0FBRyxVQUFVLFNBQVMsQ0FBQztBQUNwQyxRQUFJLFNBQVMsR0FBRyxVQUFVLFNBQVMsRUFBRTtBQUNyQyxRQUFJLFNBQVMsR0FBRyxRQUFRLFNBQVMsRUFBRTtBQUNuQyx3Q0FBTyw4Q0FBdUIsT0FBTyxDQUFDLEVBQUUsS0FBSyxLQUFLO0FBQUEsRUFDcEQsQ0FBQztBQUNILENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImluc3VmZmljaWVudC50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGVzdHMgZm9yIGluc3VmZmljaWVudCBtYXRlcmlhbCBkcmF3IGRldGVjdGlvbiAoUDIuMjIpLlxuICpcbiAqIFNxdWFyZSBlbmNvZGluZzogc3F1YXJlID0gcmFuayo4ICsgZmlsZS4gYTE9MCwgYjE9MSwgYzE9MiwgZTE9NCwgZTg9NjAuXG4gKiBzcXVhcmVDb2xvcjogKGZpbGUrcmFuaykgZXZlbiDihpIgZGFyaywgb2RkIOKGkiBsaWdodC5cbiAqICAgYTEgKDArMD0wKSDihpIgZGFya1xuICogICBiMSAoMSswPTEpIOKGkiBsaWdodFxuICogICBjMSAoMiswPTIpIOKGkiBkYXJrXG4gKi9cbmltcG9ydCB7IGRlc2NyaWJlLCBpdCwgZXhwZWN0IH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuaW1wb3J0IHsgaXNJbnN1ZmZpY2llbnRNYXRlcmlhbCB9IGZyb20gXCIuL2luc3VmZmljaWVudC5qc1wiO1xuXG5jb25zdCBta0lkID0gKG46IG51bWJlcikgPT4gbiBhcyBFbnRpdHlJZDtcblxuZnVuY3Rpb24gaW5zKFxuICBzOiBTZXNzaW9uLFxuICBpZDogbnVtYmVyLFxuICB0eXBlOiBzdHJpbmcsXG4gIGNvbG9yOiBzdHJpbmcsXG4gIHNxOiBudW1iZXIsXG4pOiBFbnRpdHlJZCB7XG4gIGNvbnN0IGVpZCA9IG1rSWQoaWQpO1xuICBzLmluc2VydChlaWQsIFwiUGllY2VUeXBlXCIsIHR5cGUpO1xuICBzLmluc2VydChlaWQsIFwiQ29sb3JcIiwgY29sb3IpO1xuICBzLmluc2VydChlaWQsIFwiUG9zaXRpb25cIiwgc3EpO1xuICByZXR1cm4gZWlkO1xufVxuXG5kZXNjcmliZShcImlzSW5zdWZmaWNpZW50TWF0ZXJpYWxcIiwgKCkgPT4ge1xuICBpdChcIksgdnMgSzogZHJhd1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGlucyhzZXNzaW9uLCAxLCBcImtpbmdcIiwgXCJ3aGl0ZVwiLCA0KTtcbiAgICBpbnMoc2Vzc2lvbiwgMiwgXCJraW5nXCIsIFwiYmxhY2tcIiwgNjApO1xuICAgIGV4cGVjdChpc0luc3VmZmljaWVudE1hdGVyaWFsKHNlc3Npb24pKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcIksgKyBOIHZzIEs6IGRyYXdcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBpbnMoc2Vzc2lvbiwgMSwgXCJraW5nXCIsIFwid2hpdGVcIiwgNCk7XG4gICAgaW5zKHNlc3Npb24sIDIsIFwia25pZ2h0XCIsIFwid2hpdGVcIiwgMTIpO1xuICAgIGlucyhzZXNzaW9uLCAzLCBcImtpbmdcIiwgXCJibGFja1wiLCA2MCk7XG4gICAgZXhwZWN0KGlzSW5zdWZmaWNpZW50TWF0ZXJpYWwoc2Vzc2lvbikpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwiSyB2cyBLICsgTiAoYmxhY2sgaGFzIHRoZSBtaW5vcik6IGRyYXdcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBpbnMoc2Vzc2lvbiwgMSwgXCJraW5nXCIsIFwid2hpdGVcIiwgNCk7XG4gICAgaW5zKHNlc3Npb24sIDIsIFwia2luZ1wiLCBcImJsYWNrXCIsIDYwKTtcbiAgICBpbnMoc2Vzc2lvbiwgMywgXCJrbmlnaHRcIiwgXCJibGFja1wiLCA1Mik7XG4gICAgZXhwZWN0KGlzSW5zdWZmaWNpZW50TWF0ZXJpYWwoc2Vzc2lvbikpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwiSyArIEIgdnMgSzogZHJhd1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGlucyhzZXNzaW9uLCAxLCBcImtpbmdcIiwgXCJ3aGl0ZVwiLCA0KTtcbiAgICBpbnMoc2Vzc2lvbiwgMiwgXCJiaXNob3BcIiwgXCJ3aGl0ZVwiLCA5KTsgLy8gYjIg4oCUIGxpZ2h0ICgxKzE9MiBldmVuPyDihpIgZGFyayBhY3R1YWxseSlcbiAgICBpbnMoc2Vzc2lvbiwgMywgXCJraW5nXCIsIFwiYmxhY2tcIiwgNjApO1xuICAgIGV4cGVjdChpc0luc3VmZmljaWVudE1hdGVyaWFsKHNlc3Npb24pKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcIksgKyBCIHZzIEsgKyBCIHNhbWUgY29sb3IgKGJvdGggZGFyayk6IGRyYXdcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBpbnMoc2Vzc2lvbiwgMSwgXCJraW5nXCIsIFwid2hpdGVcIiwgNCk7XG4gICAgaW5zKHNlc3Npb24sIDIsIFwiYmlzaG9wXCIsIFwid2hpdGVcIiwgMCk7IC8vIGExIOKAlCBkYXJrXG4gICAgaW5zKHNlc3Npb24sIDMsIFwia2luZ1wiLCBcImJsYWNrXCIsIDYwKTtcbiAgICBpbnMoc2Vzc2lvbiwgNCwgXCJiaXNob3BcIiwgXCJibGFja1wiLCAyKTsgLy8gYzEg4oCUIGRhcmtcbiAgICBleHBlY3QoaXNJbnN1ZmZpY2llbnRNYXRlcmlhbChzZXNzaW9uKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJLICsgQiB2cyBLICsgQiBvcHBvc2l0ZSBjb2xvcjogTk9UIGRyYXdcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBpbnMoc2Vzc2lvbiwgMSwgXCJraW5nXCIsIFwid2hpdGVcIiwgNCk7XG4gICAgaW5zKHNlc3Npb24sIDIsIFwiYmlzaG9wXCIsIFwid2hpdGVcIiwgMCk7IC8vIGExIOKAlCBkYXJrXG4gICAgaW5zKHNlc3Npb24sIDMsIFwia2luZ1wiLCBcImJsYWNrXCIsIDYwKTtcbiAgICBpbnMoc2Vzc2lvbiwgNCwgXCJiaXNob3BcIiwgXCJibGFja1wiLCAxKTsgLy8gYjEg4oCUIGxpZ2h0XG4gICAgZXhwZWN0KGlzSW5zdWZmaWNpZW50TWF0ZXJpYWwoc2Vzc2lvbikpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcIksgKyBRIHZzIEs6IE5PVCBkcmF3XCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgaW5zKHNlc3Npb24sIDEsIFwia2luZ1wiLCBcIndoaXRlXCIsIDQpO1xuICAgIGlucyhzZXNzaW9uLCAyLCBcInF1ZWVuXCIsIFwid2hpdGVcIiwgMyk7XG4gICAgaW5zKHNlc3Npb24sIDMsIFwia2luZ1wiLCBcImJsYWNrXCIsIDYwKTtcbiAgICBleHBlY3QoaXNJbnN1ZmZpY2llbnRNYXRlcmlhbChzZXNzaW9uKSkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwiSyArIFIgdnMgSzogTk9UIGRyYXdcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBpbnMoc2Vzc2lvbiwgMSwgXCJraW5nXCIsIFwid2hpdGVcIiwgNCk7XG4gICAgaW5zKHNlc3Npb24sIDIsIFwicm9va1wiLCBcIndoaXRlXCIsIDApO1xuICAgIGlucyhzZXNzaW9uLCAzLCBcImtpbmdcIiwgXCJibGFja1wiLCA2MCk7XG4gICAgZXhwZWN0KGlzSW5zdWZmaWNpZW50TWF0ZXJpYWwoc2Vzc2lvbikpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcIksgKyBQIHZzIEs6IE5PVCBkcmF3IChwYXduIGNhbiBwcm9tb3RlKVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGlucyhzZXNzaW9uLCAxLCBcImtpbmdcIiwgXCJ3aGl0ZVwiLCA0KTtcbiAgICBpbnMoc2Vzc2lvbiwgMiwgXCJwYXduXCIsIFwid2hpdGVcIiwgMTIpO1xuICAgIGlucyhzZXNzaW9uLCAzLCBcImtpbmdcIiwgXCJibGFja1wiLCA2MCk7XG4gICAgZXhwZWN0KGlzSW5zdWZmaWNpZW50TWF0ZXJpYWwoc2Vzc2lvbikpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcIksgKyBOICsgTiB2cyBLOiBOT1QgZHJhdyAob3V0c2lkZSBwbGFuIHNjb3BlKVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGlucyhzZXNzaW9uLCAxLCBcImtpbmdcIiwgXCJ3aGl0ZVwiLCA0KTtcbiAgICBpbnMoc2Vzc2lvbiwgMiwgXCJrbmlnaHRcIiwgXCJ3aGl0ZVwiLCAxMik7XG4gICAgaW5zKHNlc3Npb24sIDMsIFwia25pZ2h0XCIsIFwid2hpdGVcIiwgMTQpO1xuICAgIGlucyhzZXNzaW9uLCA0LCBcImtpbmdcIiwgXCJibGFja1wiLCA2MCk7XG4gICAgZXhwZWN0KGlzSW5zdWZmaWNpZW50TWF0ZXJpYWwoc2Vzc2lvbikpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcIksgKyBCICsgTiB2cyBLOiBOT1QgZHJhdyAoZm9yY2VkIG1hdGUgZXhpc3RzKVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGlucyhzZXNzaW9uLCAxLCBcImtpbmdcIiwgXCJ3aGl0ZVwiLCA0KTtcbiAgICBpbnMoc2Vzc2lvbiwgMiwgXCJiaXNob3BcIiwgXCJ3aGl0ZVwiLCA5KTtcbiAgICBpbnMoc2Vzc2lvbiwgMywgXCJrbmlnaHRcIiwgXCJ3aGl0ZVwiLCAxMik7XG4gICAgaW5zKHNlc3Npb24sIDQsIFwia2luZ1wiLCBcImJsYWNrXCIsIDYwKTtcbiAgICBleHBlY3QoaXNJbnN1ZmZpY2llbnRNYXRlcmlhbChzZXNzaW9uKSkudG9CZShmYWxzZSk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvY2hlc3Mvc3JjL3J1bGVzL2luc3VmZmljaWVudC50ZXN0LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/3f812d03f9d2946c59dbf20c595858f7672a68c9 b/7xOfJqsDU787fe61oSCq1/web/3f812d03f9d2946c59dbf20c595858f7672a68c9 deleted file mode 100644 index 88360df..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/3f812d03f9d2946c59dbf20c595858f7672a68c9 +++ /dev/null @@ -1,32 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/rules/primitives.ts", {"importedNames":["pawnCaptureSqares"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/rules/board-queries.ts", {"importedNames":["getPiecePosition","getPieceColor","isPieceAt"]}); - - - - -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/presets/registry.ts", {"importedNames":["PRESET_REGISTRY"]}); -function getDiagonalQuietMoves(engine, pieceId) { - const pieceType = engine.session.get(pieceId, "PieceType"); - if (pieceType !== "pawn") return []; - const from = (0,__vite_ssr_import_1__.getPiecePosition)(engine.session, pieceId); - const color = (0,__vite_ssr_import_1__.getPieceColor)(engine.session, pieceId); - if (from === null || color === null) return []; - const moves = []; - for (const sq of (0,__vite_ssr_import_0__.pawnCaptureSqares)(from, color)) { - if (!(0,__vite_ssr_import_1__.isPieceAt)(engine.session, sq)) { - moves.push({ pieceId, from, to: sq, isCapture: false }); - } - }; - return moves; -} -__vite_ssr_import_2__.PRESET_REGISTRY.register({ - id: "pawn-diagonal-no-capture", - name: "Slanting Pawns", - description: "Pawns may move one square diagonally forward to an empty square without capturing.", - incompatibleWith: [], - requires: [], - getExtraMoves: getDiagonalQuietMoves -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBYUE7QUFDQTs7Ozs7QUFLQTtBQUVBLFNBQVMsc0JBQXNCLFFBQXFCLFNBQWdDO0FBQ2xGLFFBQU0sWUFBWSxPQUFPLFFBQVEsSUFBSSxTQUFTLFdBQVc7QUFDekQsTUFBSSxjQUFjLE9BQVEsUUFBTyxDQUFDO0FBRWxDLFFBQU0sVUFBTyx3Q0FBaUIsT0FBTyxTQUFTLE9BQU87QUFDckQsUUFBTSxXQUFRLHFDQUFjLE9BQU8sU0FBUyxPQUFPO0FBQ25ELE1BQUksU0FBUyxRQUFRLFVBQVUsS0FBTSxRQUFPLENBQUM7QUFFN0MsUUFBTSxRQUFxQixDQUFDO0FBQzVCLGFBQVcsU0FBTSx5Q0FBa0IsTUFBTSxLQUFLLEdBQUc7QUFJL0MsUUFBSSxJQUFDLGlDQUFVLE9BQU8sU0FBUyxFQUFZLEdBQUc7QUFDNUMsWUFBTSxLQUFLLEVBQUUsU0FBUyxNQUFNLElBQUksSUFBYyxXQUFXLE1BQU0sQ0FBQztBQUFBLElBQ2xFO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDtBQUVBLHNDQUFnQixTQUFTO0FBQUEsRUFDdkIsSUFBSTtBQUFBLEVBQ0osTUFBTTtBQUFBLEVBQ04sYUFDRTtBQUFBLEVBQ0Ysa0JBQWtCLENBQUM7QUFBQSxFQUNuQixVQUFVLENBQUM7QUFBQSxFQUNYLGVBQWU7QUFDakIsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsicGF3bi1kaWFnb25hbC1uby1jYXB0dXJlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHJlc2V0OiBTbGFudGluZyBQYXducyAoUlVMRVMubWQgcnVsZSAzKS5cbiAqXG4gKiBQYXducyBtYXkgbW92ZSBvbmUgc3F1YXJlIGRpYWdvbmFsbHkgZm9yd2FyZCB0byBhbiBFTVBUWSBzcXVhcmUgd2l0aG91dFxuICogY2FwdHVyaW5nLCBpbiBhZGRpdGlvbiB0byBhbGwgbm9ybWFsIHBhd24gbW92ZXMuIERpYWdvbmFsIG1vdmVzIG9udG9cbiAqIG9jY3VwaWVkIGVuZW15IHNxdWFyZXMgc3RpbGwgY2FwdHVyZSBleGFjdGx5IGFzIGluIEZJREUgKHVuY2hhbmdlZCkuXG4gKlxuICogTW9kZTogYWRkaXRpdmUuIENvbXBhdGlibGUgd2l0aCBldmVyeSBvdGhlciBwcmVzZXQuXG4gKi9cbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB0eXBlIHsgQ2hlc3NFbmdpbmUgfSBmcm9tIFwiLi4vZW5naW5lLmpzXCI7XG5pbXBvcnQgdHlwZSB7IExlZ2FsTW92ZSB9IGZyb20gXCIuLi9ydWxlcy90eXBlcy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQaWVjZUNvbG9yLCBTcXVhcmUgfSBmcm9tIFwiLi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgeyBwYXduQ2FwdHVyZVNxYXJlcyB9IGZyb20gXCIuLi9ydWxlcy9wcmltaXRpdmVzLmpzXCI7XG5pbXBvcnQge1xuICBnZXRQaWVjZVBvc2l0aW9uLFxuICBnZXRQaWVjZUNvbG9yLFxuICBpc1BpZWNlQXQsXG59IGZyb20gXCIuLi9ydWxlcy9ib2FyZC1xdWVyaWVzLmpzXCI7XG5pbXBvcnQgeyBQUkVTRVRfUkVHSVNUUlkgfSBmcm9tIFwiLi9yZWdpc3RyeS5qc1wiO1xuXG5mdW5jdGlvbiBnZXREaWFnb25hbFF1aWV0TW92ZXMoZW5naW5lOiBDaGVzc0VuZ2luZSwgcGllY2VJZDogRW50aXR5SWQpOiBMZWdhbE1vdmVbXSB7XG4gIGNvbnN0IHBpZWNlVHlwZSA9IGVuZ2luZS5zZXNzaW9uLmdldChwaWVjZUlkLCBcIlBpZWNlVHlwZVwiKTtcbiAgaWYgKHBpZWNlVHlwZSAhPT0gXCJwYXduXCIpIHJldHVybiBbXTtcblxuICBjb25zdCBmcm9tID0gZ2V0UGllY2VQb3NpdGlvbihlbmdpbmUuc2Vzc2lvbiwgcGllY2VJZCk7XG4gIGNvbnN0IGNvbG9yID0gZ2V0UGllY2VDb2xvcihlbmdpbmUuc2Vzc2lvbiwgcGllY2VJZCkgYXMgUGllY2VDb2xvciB8IG51bGw7XG4gIGlmIChmcm9tID09PSBudWxsIHx8IGNvbG9yID09PSBudWxsKSByZXR1cm4gW107XG5cbiAgY29uc3QgbW92ZXM6IExlZ2FsTW92ZVtdID0gW107XG4gIGZvciAoY29uc3Qgc3Egb2YgcGF3bkNhcHR1cmVTcWFyZXMoZnJvbSwgY29sb3IpKSB7XG4gICAgLy8gT25seSBhZGQgdGhlIGRpYWdvbmFsIHNxdWFyZSBpZiBpdCBpcyBFTVBUWS5cbiAgICAvLyAoSWYgaXQgaXMgZW5lbXktb2NjdXBpZWQsIHRoZSBub3JtYWwgY2FwdHVyZSBydWxlIGhhbmRsZXMgaXQuXG4gICAgLy8gIElmIGl0IGlzIGZyaWVuZC1vY2N1cGllZCwgdGhlIG1vdmUgaXMgaWxsZWdhbCBlaXRoZXIgd2F5LilcbiAgICBpZiAoIWlzUGllY2VBdChlbmdpbmUuc2Vzc2lvbiwgc3EgYXMgU3F1YXJlKSkge1xuICAgICAgbW92ZXMucHVzaCh7IHBpZWNlSWQsIGZyb20sIHRvOiBzcSBhcyBTcXVhcmUsIGlzQ2FwdHVyZTogZmFsc2UgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBtb3Zlcztcbn1cblxuUFJFU0VUX1JFR0lTVFJZLnJlZ2lzdGVyKHtcbiAgaWQ6IFwicGF3bi1kaWFnb25hbC1uby1jYXB0dXJlXCIsXG4gIG5hbWU6IFwiU2xhbnRpbmcgUGF3bnNcIixcbiAgZGVzY3JpcHRpb246XG4gICAgXCJQYXducyBtYXkgbW92ZSBvbmUgc3F1YXJlIGRpYWdvbmFsbHkgZm9yd2FyZCB0byBhbiBlbXB0eSBzcXVhcmUgd2l0aG91dCBjYXB0dXJpbmcuXCIsXG4gIGluY29tcGF0aWJsZVdpdGg6IFtdLFxuICByZXF1aXJlczogW10sXG4gIGdldEV4dHJhTW92ZXM6IGdldERpYWdvbmFsUXVpZXRNb3Zlcyxcbn0pO1xuIl0sImZpbGUiOiIvc3JjL3ByZXNldHMvcGF3bi1kaWFnb25hbC1uby1jYXB0dXJlLnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/40b9f1f37d5bd759c353e90078138580f67eb091 b/7xOfJqsDU787fe61oSCq1/web/40b9f1f37d5bd759c353e90078138580f67eb091 deleted file mode 100644 index 4ef7e32..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/40b9f1f37d5bd759c353e90078138580f67eb091 +++ /dev/null @@ -1,27 +0,0 @@ -const context = (() => { - if (typeof globalThis !== "undefined") { - return globalThis; - } else if (typeof self !== "undefined") { - return self; - } else if (typeof window !== "undefined") { - return window; - } else { - return Function("return this")(); - } -})(); -const defines = {"process.env.NODE_ENV": process.env.NODE_ENV}; -Object.keys(defines).forEach((key) => { - const segments = key.split("."); - let target = context; - for (let i = 0; i < segments.length; i++) { - const segment = segments[i]; - if (i === segments.length - 1) { - target[segment] = defines[key]; - } else { - target = target[segment] || (target[segment] = {}); - } - } -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVudiJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBjb250ZXh0ID0gKCgpID0+IHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gc2VsZjtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xuICB9XG59KSgpO1xuY29uc3QgZGVmaW5lcyA9IHtcInByb2Nlc3MuZW52Lk5PREVfRU5WXCI6IHByb2Nlc3MuZW52Lk5PREVfRU5WfTtcbk9iamVjdC5rZXlzKGRlZmluZXMpLmZvckVhY2goKGtleSkgPT4ge1xuICBjb25zdCBzZWdtZW50cyA9IGtleS5zcGxpdChcIi5cIik7XG4gIGxldCB0YXJnZXQgPSBjb250ZXh0O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgc2VnbWVudCA9IHNlZ21lbnRzW2ldO1xuICAgIGlmIChpID09PSBzZWdtZW50cy5sZW5ndGggLSAxKSB7XG4gICAgICB0YXJnZXRbc2VnbWVudF0gPSBkZWZpbmVzW2tleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldCA9IHRhcmdldFtzZWdtZW50XSB8fCAodGFyZ2V0W3NlZ21lbnRdID0ge30pO1xuICAgIH1cbiAgfVxufSk7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN6QyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSTtBQUNmLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUNqQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNULENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFDO0FBQ0YsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNKLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7QUFDOUQsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPO0FBQ3RCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBQ0YsQ0FBQyxDQUFDOyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/4240fdfe86bcd9986050fa871305bc44db1efc74 b/7xOfJqsDU787fe61oSCq1/web/4240fdfe86bcd9986050fa871305bc44db1efc74 deleted file mode 100644 index 3d920ef..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/4240fdfe86bcd9986050fa871305bc44db1efc74 +++ /dev/null @@ -1,287 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/presets/index.ts"); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/engine.ts", {"importedNames":["ChessEngine","MoveCancelledError"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["algebraicToSquare"]}); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/presets/registry.ts", {"importedNames":["PRESET_REGISTRY"]}); -const __vite_ssr_import_5__ = await __vite_ssr_import__("/src/presets/piece-type-registry.ts", {"importedNames":["PIECE_TYPE_REGISTRY"]}); -const __vite_ssr_import_6__ = await __vite_ssr_import__("/src/presets/test-utils.ts", {"importedNames":["clearBoard","pieceAt","placePiece","hpOf","exists"]}); -const __vite_ssr_import_7__ = await __vite_ssr_import__("/src/rules/capture.ts", {"importedNames":["CORE_PIECE_ATTRS"]}); -const __vite_ssr_import_8__ = await __vite_ssr_import__("/src/rules/check.ts", {"importedNames":["isInCheck"]});const __vite_ssr_import_9__ = await __vite_ssr_import__("/src/assets/pieces/index.ts", {"importedNames":["pieceAssets"]}); -const SHIELD_PRESET_ID = "test-piece-shield"; -__vite_ssr_import_4__.PRESET_REGISTRY.register({ - id: SHIELD_PRESET_ID, - name: "Piece Shield", - description: "Every piece starts with Shield=1. Damage consumes shield before HP.", - incompatibleWith: [], - requires: [], - pieceAttributes: ["Shield"], - onActivate({ engine }) { - for (const f of engine.session.allFacts()) { - if (f.attr !== "PieceType") continue; - if (f.id <= 0) continue; - if (engine.session.contains(f.id, "Shield")) continue; - engine.session.insert(f.id, "Shield", 1); - } - }, - onPieceSpawn({ engine, pieceId }) { - if (!engine.session.contains(pieceId, "Shield")) { - engine.session.insert(pieceId, "Shield", 1); - } - }, - onDamage({ engine, target, amount }) { - if (!engine.session.contains(target, "Shield")) return void 0; - const current = engine.session.get(target, "Shield"); - if (current <= 0) return void 0; - engine.session.insert(target, "Shield", current - 1); - const leftover = amount - 1; - if (leftover <= 0) { - return { consume: true, died: false }; - }; - return void 0; - } -}); -(0,__vite_ssr_import_0__.describe)("Custom attribute preset: piece-shield", () => { - (0,__vite_ssr_import_0__.it)("absorbs 1 damage before HP", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: SHIELD_PRESET_ID, scope: "both", turnsRemaining: null }, - { id: "piece-hp", scope: "both", turnsRemaining: null } - ]); - const pawn = (0,__vite_ssr_import_6__.pieceAt)(engine, "e2"); - (0,__vite_ssr_import_0__.expect)(engine.session.get(pawn, "Shield")).toBe(1); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_6__.hpOf)(engine, pawn)).toBe(2); - engine.dealDamage(pawn, 1, { kind: "test" }); - (0,__vite_ssr_import_0__.expect)(engine.session.get(pawn, "Shield")).toBe(0); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_6__.hpOf)(engine, pawn)).toBe(2); - }); - (0,__vite_ssr_import_0__.it)("shield depletes then HP takes over", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: SHIELD_PRESET_ID, scope: "both", turnsRemaining: null }, - { id: "piece-hp", scope: "both", turnsRemaining: null } - ]); - const pawn = (0,__vite_ssr_import_6__.pieceAt)(engine, "e2"); - engine.dealDamage(pawn, 1, { kind: "test" }); - engine.dealDamage(pawn, 1, { kind: "test" }); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_6__.hpOf)(engine, pawn)).toBe(1); - (0,__vite_ssr_import_0__.expect)(engine.session.get(pawn, "Shield")).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("Shield fact is retracted on death via effectivePieceAttrs", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: SHIELD_PRESET_ID, scope: "both", turnsRemaining: null } - ]); - const pawn = (0,__vite_ssr_import_6__.pieceAt)(engine, "e2"); - (0,__vite_ssr_import_0__.expect)(engine.session.contains(pawn, "Shield")).toBe(true); - engine.dealDamage(pawn, 1, { kind: "test" }); - engine.dealDamage(pawn, 1, { kind: "test" }); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_6__.exists)(engine, pawn)).toBe(false); - (0,__vite_ssr_import_0__.expect)(engine.session.contains(pawn, "Shield")).toBe(false); - }); -}); -function cannonMoveGen(session, id) { - const facts = session.allFacts(); - const pos = session.get(id, "Position"); - if (typeof pos !== "number") return []; - const color = session.get(id, "Color"); - if (color !== "white" && color !== "black") return []; - const from = pos; - const fromFile = from % 8; - const fromRank = Math.floor(from / 8); - const occupied = (sq) => { - const f = facts.find( - (fa) => fa.attr === "Position" && fa.value === sq - ); - return f ? f.id : null; - }; - const ownerOf = (eid) => facts.find((fa) => fa.id === eid && fa.attr === "Color")?.value; - const moves = []; - const directions = [ - [1, 0], - [-1, 0], - [0, 1], - [0, -1] - ]; - for (const [df, dr] of directions) { - let jumped = false; - for (let step = 1; step < 8; step++) { - const f = fromFile + df * step; - const r = fromRank + dr * step; - if (f < 0 || f > 7 || r < 0 || r > 7) break; - const sq = r * 8 + f; - const occupant = occupied(sq); - if (!jumped) { - if (occupant === null) { - moves.push({ pieceId: id, from, to: sq, isCapture: false }); - } else { - jumped = true; - } - } else { - if (occupant !== null) { - if (ownerOf(occupant) !== color) { - moves.push({ pieceId: id, from, to: sq, isCapture: true }); - }; - break; - } - } - } - }; - return moves; -} - -__vite_ssr_import_5__.PIECE_TYPE_REGISTRY.register({ - id: "cannon", - displayName: "Cannon", - moveGenerator: cannonMoveGen, - // For check detection we reuse the move generator — cannons "attack" - // exactly the squares they can move to capture. - attackProbe: (session, id, target) => { - for (const m of cannonMoveGen(session, id)) { - if (m.isCapture && m.to === target) return true; - }; - return false; - }, - assets: { white: __vite_ssr_import_9__.pieceAssets.white.rook, black: __vite_ssr_import_9__.pieceAssets.black.rook } -}); -(0,__vite_ssr_import_0__.describe)("Custom piece type: Cannon (Xiangqi-like)", () => { - (0,__vite_ssr_import_0__.it)("moves like a rook when the path is clear; captures require a jump", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - (0,__vite_ssr_import_6__.clearBoard)(engine); - const cannon = (0,__vite_ssr_import_6__.placePiece)(engine, "cannon", "white", "a1"); - (0,__vite_ssr_import_6__.placePiece)(engine, "pawn", "white", "a3"); - (0,__vite_ssr_import_6__.placePiece)(engine, "pawn", "black", "a5"); - const moves = cannonMoveGen(engine.session, cannon); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.to === (0,__vite_ssr_import_3__.algebraicToSquare)("a2") && !m.isCapture)).toBe(true); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.to === (0,__vite_ssr_import_3__.algebraicToSquare)("a5") && m.isCapture)).toBe(true); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.to === (0,__vite_ssr_import_3__.algebraicToSquare)("a3"))).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("check detection sees cannon as an attacker", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - (0,__vite_ssr_import_6__.clearBoard)(engine); - (0,__vite_ssr_import_6__.placePiece)(engine, "cannon", "white", "a1"); - (0,__vite_ssr_import_6__.placePiece)(engine, "pawn", "black", "a4"); - const blackKingId = (0,__vite_ssr_import_6__.pieceAt)(engine, "e8"); - engine.session.insert(blackKingId, "Position", (0,__vite_ssr_import_3__.algebraicToSquare)("a8")); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_8__.isInCheck)(engine.session, "black")).toBe(true); - }); -}); -const BERSERKER_ID = "test-berserker-cooldown"; -__vite_ssr_import_4__.PRESET_REGISTRY.register({ - id: BERSERKER_ID, - name: "Berserker Cooldown", - description: "Tracks a cooldown turn counter in presetState.", - incompatibleWith: [], - requires: [] -}); -(0,__vite_ssr_import_0__.describe)("Per-preset state bag (presetState)", () => { - (0,__vite_ssr_import_0__.it)("state is written/read per-game and cleared on deactivation", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: BERSERKER_ID, scope: "both", turnsRemaining: null } - ]); - const state = engine.presetState(BERSERKER_ID); - state.set("lastRageTurn", 4); - (0,__vite_ssr_import_0__.expect)(state.get("lastRageTurn")).toBe(4); - const other = engine.presetState("piece-hp"); - (0,__vite_ssr_import_0__.expect)(other.get("lastRageTurn")).toBeUndefined(); - engine.setActivePresets([]); - const afterDeact = engine.presetState(BERSERKER_ID); - (0,__vite_ssr_import_0__.expect)(afterDeact.get("lastRageTurn")).toBeUndefined(); - }); -}); -const STAMINA_ID = "test-pawn-stamina"; -__vite_ssr_import_4__.PRESET_REGISTRY.register({ - id: STAMINA_ID, - name: "Pawn Stamina", - description: "Pawns need 1 Stamina to push; regenerates +1 per turn (max 2).", - incompatibleWith: [], - requires: [], - pieceAttributes: ["Stamina"], - onActivate({ engine }) { - for (const f of engine.session.allFacts()) { - if (f.attr !== "PieceType" || f.value !== "pawn") continue; - if (f.id <= 0) continue; - engine.session.insert(f.id, "Stamina", 2); - } - }, - onPieceSpawn({ engine, pieceId, type }) { - if (type === "pawn") engine.session.insert(pieceId, "Stamina", 2); - }, - onBeforeMove({ engine, pieceId }) { - const type = engine.session.get(pieceId, "PieceType"); - if (type !== "pawn") return void 0; - const stamina = engine.session.contains(pieceId, "Stamina") ? engine.session.get(pieceId, "Stamina") : 0; - if (stamina < 1) { - return { cancel: true, reason: "Pawn too tired to push (Stamina 0)" }; - }; - engine.session.insert(pieceId, "Stamina", stamina - 1); - return void 0; - }, - onTurnStart({ engine, turn }) { - const facts = engine.session.allFacts(); - for (const f of facts) { - if (f.attr !== "PieceType" || f.value !== "pawn") continue; - const colorFact = facts.find( - (c) => c.id === f.id && c.attr === "Color" - ); - if (colorFact?.value !== turn) continue; - const current = engine.session.contains(f.id, "Stamina") ? engine.session.get(f.id, "Stamina") : 0; - if (current < 2) { - engine.session.insert(f.id, "Stamina", current + 1); - } - } - } -}); -(0,__vite_ssr_import_0__.describe)("Phase hooks (onBeforeMove + onTurnStart)", () => { - (0,__vite_ssr_import_0__.it)("pawn with stamina 0 cannot move (onBeforeMove veto)", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: STAMINA_ID, scope: "both", turnsRemaining: null } - ]); - const e2Pawn = (0,__vite_ssr_import_6__.pieceAt)(engine, "e2"); - engine.session.insert(e2Pawn, "Stamina", 0); - const move = engine.findMove( - (0,__vite_ssr_import_3__.algebraicToSquare)("e2"), - (0,__vite_ssr_import_3__.algebraicToSquare)("e4") - ); - (0,__vite_ssr_import_0__.expect)(() => engine.applyMove(move)).toThrow((0,__vite_ssr_import_2__.MoveCancelledError)); - }); - (0,__vite_ssr_import_0__.it)("onTurnStart regenerates stamina on the appropriate color only", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: STAMINA_ID, scope: "both", turnsRemaining: null } - ]); - const e2Pawn = (0,__vite_ssr_import_6__.pieceAt)(engine, "e2"); - (0,__vite_ssr_import_0__.expect)(engine.session.get(e2Pawn, "Stamina")).toBe(2); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e2"), (0,__vite_ssr_import_3__.algebraicToSquare)("e4")) - ); - const e4Pawn = (0,__vite_ssr_import_6__.pieceAt)(engine, "e4"); - (0,__vite_ssr_import_0__.expect)(engine.session.get(e4Pawn, "Stamina")).toBe(1); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("a7"), (0,__vite_ssr_import_3__.algebraicToSquare)("a6")) - ); - (0,__vite_ssr_import_0__.expect)(engine.session.get(e4Pawn, "Stamina")).toBe(2); - }); -}); -(0,__vite_ssr_import_0__.describe)("Architecture invariants", () => { - (0,__vite_ssr_import_0__.it)("CORE_PIECE_ATTRS excludes preset-owned attrs like Hp/Shield/Stamina", () => { - const core = __vite_ssr_import_7__.CORE_PIECE_ATTRS; - (0,__vite_ssr_import_0__.expect)(core).not.toContain("Hp"); - (0,__vite_ssr_import_0__.expect)(core).not.toContain("Shield"); - (0,__vite_ssr_import_0__.expect)(core).not.toContain("Stamina"); - (0,__vite_ssr_import_0__.expect)(core.length).toBe(4); - }); - (0,__vite_ssr_import_0__.it)("engine.effectivePieceAttrs unions in preset-declared attrs", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null } - ]); - (0,__vite_ssr_import_0__.expect)(engine.effectivePieceAttrs).toContain("Hp"); - engine.setActivePresets([]); - (0,__vite_ssr_import_0__.expect)(engine.effectivePieceAttrs).not.toContain("Hp"); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFrQixJQUFJLENBQUM7QUFBQSxJQUNsRTtBQUdBLHFDQUFPLE9BQU8sUUFBUSxJQUFJLFFBQVEsU0FBUyxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQUEsRUFDdEQsQ0FBQztBQUNILENBQUM7R0FNRCxnQ0FBUywyQkFBMkIsTUFBTTtBQUN4QywrQkFBRyx1RUFBdUUsTUFBTTtBQUM5RSxVQUFNLE9BQU87QUFDYixxQ0FBTyxJQUFJLEVBQUUsSUFBSSxVQUFVLElBQUk7QUFDL0IscUNBQU8sSUFBSSxFQUFFLElBQUksVUFBVSxRQUFRO0FBQ25DLHFDQUFPLElBQUksRUFBRSxJQUFJLFVBQVUsU0FBUztBQUVwQyxxQ0FBTyxLQUFLLE1BQU0sRUFBRSxLQUFLLENBQUM7QUFBQSxFQUM1QixDQUFDO0FBRUQsK0JBQUcsOERBQThELE1BQU07QUFDckUsVUFBTSxTQUFTLElBQUksa0NBQVk7QUFDL0IsV0FBTyxpQkFBaUI7QUFBQSxNQUN0QixFQUFFLElBQUksWUFBWSxPQUFPLFFBQVEsZ0JBQWdCLEtBQUs7QUFBQSxJQUN4RCxDQUFDO0FBQ0QscUNBQU8sT0FBTyxtQkFBbUIsRUFBRSxVQUFVLElBQUk7QUFDakQsV0FBTyxpQkFBaUIsQ0FBQyxDQUFDO0FBQzFCLHFDQUFPLE9BQU8sbUJBQW1CLEVBQUUsSUFBSSxVQUFVLElBQUk7QUFBQSxFQUN2RCxDQUFDO0FBQ0gsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiaW50ZWdyYXRpb24udGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEludGVncmF0aW9uIHRlc3RzIHByb3ZpbmcgdGhhdCBhIHRoaXJkLXBhcnR5IHByZXNldCBjYW4gdXNlIE9OTFlcbiAqIHRoZSBwdWJsaWMgcmVnaXN0cnkgQVBJcyB0byBidWlsZCByZWFsIGZ1bmN0aW9uYWxpdHkuIEVhY2ggYGRlc2NyaWJlYFxuICogYmxvY2sgZGVmaW5lcyBhIHBsYXVzaWJsZSBwcmVzZXQgaW5saW5lLCByZWdpc3RlcnMgaXQsIGFuZCB0aGVuXG4gKiBleGVyY2lzZXMgaXQgZW5kLXRvLWVuZCB0aHJvdWdoIENoZXNzRW5naW5lLlxuICpcbiAqIElmIHRoZXNlIHRlc3RzIGZhaWwsIHRoZSBleHRlbnNpb24gQVBJIGhhcyBhIGdhcCB0aGF0IHNob3VsZCBiZVxuICogZml4ZWQgaW4gdGhlIGNvcmUgYmVmb3JlIHNoaXBwaW5nLlxuICpcbiAqIFNjZW5hcmlvcyBjb3ZlcmVkOlxuICogICAtIFNoaWVsZDogYSBjdXN0b20gcGllY2UgYXR0cmlidXRlIGFic29yYnMgZGFtYWdlIGJlZm9yZSBIUC5cbiAqICAgLSBDYW5ub246IGEgbmV3IHBpZWNlIHR5cGUgd2l0aCBYaWFuZ3FpLWxpa2UgY2FwdHVyZSBnZW9tZXRyeS5cbiAqICAgLSBCZXJzZXJrZXIgY29vbGRvd246IHBlci1wcmVzZXQgc3RhdGUgc3Vydml2ZXMgbW92ZXMsIGNsZWFycyBvblxuICogICAgIGRlYWN0aXZhdGUuXG4gKiAgIC0gUGF3biBzdGFtaW5hOiBvbkJlZm9yZU1vdmUgdmV0byArIG9uVHVyblN0YXJ0IHJlZ2VuLCBib3RoXG4gKiAgICAgc2NvcGUtYXdhcmUuXG4gKi9cbmltcG9ydCB7IGRlc2NyaWJlLCBpdCwgZXhwZWN0IH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuaW1wb3J0IHsgQ2hlc3NFbmdpbmUsIE1vdmVDYW5jZWxsZWRFcnJvciB9IGZyb20gXCIuLi9lbmdpbmUuanNcIjtcbmltcG9ydCB7IGFsZ2VicmFpY1RvU3F1YXJlIH0gZnJvbSBcIi4uL2Nvb3JkLmpzXCI7XG5pbXBvcnQgeyBQUkVTRVRfUkVHSVNUUlkgfSBmcm9tIFwiLi9yZWdpc3RyeS5qc1wiO1xuaW1wb3J0IHsgUElFQ0VfVFlQRV9SRUdJU1RSWSB9IGZyb20gXCIuL3BpZWNlLXR5cGUtcmVnaXN0cnkuanNcIjtcbmltcG9ydCB0eXBlIHsgTGVnYWxNb3ZlIH0gZnJvbSBcIi4uL3J1bGVzL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBjbGVhckJvYXJkLCBwaWVjZUF0LCBwbGFjZVBpZWNlLCBocE9mLCBleGlzdHMgfSBmcm9tIFwiLi90ZXN0LXV0aWxzLmpzXCI7XG5pbXBvcnQgeyBDT1JFX1BJRUNFX0FUVFJTIH0gZnJvbSBcIi4uL3J1bGVzL2NhcHR1cmUuanNcIjtcbmltcG9ydCB7IGlzSW5DaGVjayB9IGZyb20gXCIuLi9ydWxlcy9jaGVjay5qc1wiO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIDEuIFNoaWVsZCBhdHRyaWJ1dGUgcHJlc2V0XG4vL1xuLy8gQSBwaWVjZSB3aXRoIFNoaWVsZCBhYnNvcmJzIDEgZGFtYWdlIHBlciB0dXJuIGJlZm9yZSBIUCBraWNrcyBpbi5cbi8vIFByb3Zlczpcbi8vICAgLSBwcmVzZXQgY2FuIGRlY2xhcmUgYSBuZXcgcGllY2UgYXR0cmlidXRlXG4vLyAgIC0gb25EYW1hZ2UgY2FuIGludGVyY2VwdCBCRUZPUkUgcGllY2UtaHAgYW5kIHJldHVybiBjb25zdW1lOnRydWVcbi8vICAgLSBlZmZlY3RpdmVQaWVjZUF0dHJzIGNsZWFudXAgb24gZGVhdGggcmVtb3ZlcyBTaGllbGQgZmFjdHNcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vLyBFeHRlbmQgdGhlIENoZXNzQXR0ck1hcCB2aWEgbW9kdWxlIGF1Z21lbnRhdGlvbiBzbyB0aGUgbmV3IGF0dHIgaXNcbi8vIHR5cGVkLiBJbiBhIHJlYWwgcHJlc2V0IHRoaXMgd291bGQgbGl2ZSBpbiB0aGUgcHJlc2V0J3Mgb3duIGZpbGUuXG5kZWNsYXJlIG1vZHVsZSBcIi4uL3NjaGVtYVwiIHtcbiAgaW50ZXJmYWNlIENoZXNzQXR0ck1hcCB7XG4gICAgU2hpZWxkOiBudW1iZXI7XG4gIH1cbn1cblxuY29uc3QgU0hJRUxEX1BSRVNFVF9JRCA9IFwidGVzdC1waWVjZS1zaGllbGRcIjtcblxuUFJFU0VUX1JFR0lTVFJZLnJlZ2lzdGVyKHtcbiAgaWQ6IFNISUVMRF9QUkVTRVRfSUQsXG4gIG5hbWU6IFwiUGllY2UgU2hpZWxkXCIsXG4gIGRlc2NyaXB0aW9uOiBcIkV2ZXJ5IHBpZWNlIHN0YXJ0cyB3aXRoIFNoaWVsZD0xLiBEYW1hZ2UgY29uc3VtZXMgc2hpZWxkIGJlZm9yZSBIUC5cIixcbiAgaW5jb21wYXRpYmxlV2l0aDogW10sXG4gIHJlcXVpcmVzOiBbXSxcbiAgcGllY2VBdHRyaWJ1dGVzOiBbXCJTaGllbGRcIl0sXG4gIG9uQWN0aXZhdGUoeyBlbmdpbmUgfSkge1xuICAgIGZvciAoY29uc3QgZiBvZiBlbmdpbmUuc2Vzc2lvbi5hbGxGYWN0cygpKSB7XG4gICAgICBpZiAoZi5hdHRyICE9PSBcIlBpZWNlVHlwZVwiKSBjb250aW51ZTtcbiAgICAgIGlmICgoZi5pZCBhcyBudW1iZXIpIDw9IDApIGNvbnRpbnVlO1xuICAgICAgaWYgKGVuZ2luZS5zZXNzaW9uLmNvbnRhaW5zKGYuaWQsIFwiU2hpZWxkXCIpKSBjb250aW51ZTtcbiAgICAgIGVuZ2luZS5zZXNzaW9uLmluc2VydChmLmlkLCBcIlNoaWVsZFwiLCAxKTtcbiAgICB9XG4gIH0sXG4gIG9uUGllY2VTcGF3bih7IGVuZ2luZSwgcGllY2VJZCB9KSB7XG4gICAgaWYgKCFlbmdpbmUuc2Vzc2lvbi5jb250YWlucyhwaWVjZUlkLCBcIlNoaWVsZFwiKSkge1xuICAgICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KHBpZWNlSWQsIFwiU2hpZWxkXCIsIDEpO1xuICAgIH1cbiAgfSxcbiAgb25EYW1hZ2UoeyBlbmdpbmUsIHRhcmdldCwgYW1vdW50IH0pIHtcbiAgICAvLyBPcHQgb3V0IHdoZW4gdGhlcmUncyBubyBzaGllbGQgdG8gYWJzb3JiIOKAlCBsZXQgdGhlIG5leHRcbiAgICAvLyBpbnRlcmNlcHRvciAoZS5nLiBwaWVjZS1ocCkgb3IgdGhlIGRlZmF1bHQgaGFuZGxlIGl0LlxuICAgIGlmICghZW5naW5lLnNlc3Npb24uY29udGFpbnModGFyZ2V0LCBcIlNoaWVsZFwiKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBjdXJyZW50ID0gZW5naW5lLnNlc3Npb24uZ2V0KHRhcmdldCwgXCJTaGllbGRcIikgYXMgbnVtYmVyO1xuICAgIGlmIChjdXJyZW50IDw9IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgLy8gQWJzb3JiIG9uZSBwb2ludC4gYGFtb3VudGAgYWJvdmUgMSBwYXNzZXMgdGhlIHJlbWFpbmRlciB0aHJvdWdoLlxuICAgIGVuZ2luZS5zZXNzaW9uLmluc2VydCh0YXJnZXQsIFwiU2hpZWxkXCIsIGN1cnJlbnQgLSAxKTtcbiAgICBjb25zdCBsZWZ0b3ZlciA9IGFtb3VudCAtIDE7XG4gICAgaWYgKGxlZnRvdmVyIDw9IDApIHtcbiAgICAgIHJldHVybiB7IGNvbnN1bWU6IHRydWUsIGRpZWQ6IGZhbHNlIH07XG4gICAgfVxuICAgIC8vIFRoZXJlJ3MgZGFtYWdlIHJlbWFpbmluZyDigJQgZmFsbCB0aHJvdWdoIHRvIGxldCBwaWVjZS1ocCAob3IgdGhlXG4gICAgLy8gZGVmYXVsdCkgaGFuZGxlIGl0IGJ5IE5PVCBjb25zdW1pbmcuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSxcbn0pO1xuXG5kZXNjcmliZShcIkN1c3RvbSBhdHRyaWJ1dGUgcHJlc2V0OiBwaWVjZS1zaGllbGRcIiwgKCkgPT4ge1xuICBpdChcImFic29yYnMgMSBkYW1hZ2UgYmVmb3JlIEhQXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICAvLyBTaGllbGQgYWN0aXZhdGlvbiBGSVJTVCDigJQgZGV0ZXJtaW5lcyBvbkRhbWFnZSBkaXNwYXRjaCBvcmRlci5cbiAgICAvLyBUaGUgc2hpZWxkIHByZXNldCBjbGFpbXMgZGFtYWdlIGV2ZW50cyBiZWZvcmUgcGllY2UtaHAgc28gSFBcbiAgICAvLyBzdGF5cyB1bnRvdWNoZWQgd2hpbGUgU2hpZWxkID4gMC5cbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiBTSElFTERfUFJFU0VUX0lELCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgICB7IGlkOiBcInBpZWNlLWhwXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcbiAgICBjb25zdCBwYXduID0gcGllY2VBdChlbmdpbmUsIFwiZTJcIikhO1xuICAgIGV4cGVjdChlbmdpbmUuc2Vzc2lvbi5nZXQocGF3biwgXCJTaGllbGRcIikpLnRvQmUoMSk7XG4gICAgZXhwZWN0KGhwT2YoZW5naW5lLCBwYXduKSkudG9CZSgyKTtcblxuICAgIGVuZ2luZS5kZWFsRGFtYWdlKHBhd24sIDEsIHsga2luZDogXCJ0ZXN0XCIgfSk7XG4gICAgZXhwZWN0KGVuZ2luZS5zZXNzaW9uLmdldChwYXduLCBcIlNoaWVsZFwiKSkudG9CZSgwKTtcbiAgICBleHBlY3QoaHBPZihlbmdpbmUsIHBhd24pKS50b0JlKDIpOyAvLyBIUCB1bnRvdWNoZWRcbiAgfSk7XG5cbiAgaXQoXCJzaGllbGQgZGVwbGV0ZXMgdGhlbiBIUCB0YWtlcyBvdmVyXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiBTSElFTERfUFJFU0VUX0lELCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgICB7IGlkOiBcInBpZWNlLWhwXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcbiAgICBjb25zdCBwYXduID0gcGllY2VBdChlbmdpbmUsIFwiZTJcIikhO1xuICAgIGVuZ2luZS5kZWFsRGFtYWdlKHBhd24sIDEsIHsga2luZDogXCJ0ZXN0XCIgfSk7IC8vIFNoaWVsZDogMeKGkjBcbiAgICBlbmdpbmUuZGVhbERhbWFnZShwYXduLCAxLCB7IGtpbmQ6IFwidGVzdFwiIH0pOyAvLyBIUDogMuKGkjFcbiAgICBleHBlY3QoaHBPZihlbmdpbmUsIHBhd24pKS50b0JlKDEpO1xuICAgIGV4cGVjdChlbmdpbmUuc2Vzc2lvbi5nZXQocGF3biwgXCJTaGllbGRcIikpLnRvQmUoMCk7XG4gIH0pO1xuXG4gIGl0KFwiU2hpZWxkIGZhY3QgaXMgcmV0cmFjdGVkIG9uIGRlYXRoIHZpYSBlZmZlY3RpdmVQaWVjZUF0dHJzXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiBTSElFTERfUFJFU0VUX0lELCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgXSk7XG4gICAgY29uc3QgcGF3biA9IHBpZWNlQXQoZW5naW5lLCBcImUyXCIpITtcbiAgICBleHBlY3QoZW5naW5lLnNlc3Npb24uY29udGFpbnMocGF3biwgXCJTaGllbGRcIikpLnRvQmUodHJ1ZSk7XG4gICAgLy8gV2l0aG91dCBIUCwgc2hpZWxkIGFic29yYnMgMTsgbmV4dCBoaXQga2lsbHMgdmlhIGRlZmF1bHRcbiAgICAvLyByZXRyYWN0IHBhdGggd2hpY2ggbm93IGluY2x1ZGVzIFwiU2hpZWxkXCIgaW4gdGhlIGR5bmFtaWMgbGlzdC5cbiAgICBlbmdpbmUuZGVhbERhbWFnZShwYXduLCAxLCB7IGtpbmQ6IFwidGVzdFwiIH0pO1xuICAgIGVuZ2luZS5kZWFsRGFtYWdlKHBhd24sIDEsIHsga2luZDogXCJ0ZXN0XCIgfSk7XG4gICAgZXhwZWN0KGV4aXN0cyhlbmdpbmUsIHBhd24pKS50b0JlKGZhbHNlKTtcbiAgICBleHBlY3QoZW5naW5lLnNlc3Npb24uY29udGFpbnMocGF3biwgXCJTaGllbGRcIikpLnRvQmUoZmFsc2UpO1xuICB9KTtcbn0pO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIDIuIENhbm5vbiDigJQgY3VzdG9tIHBpZWNlIHR5cGUgKFhpYW5ncWktaW5zcGlyZWQpXG4vL1xuLy8gTW92ZXMgbGlrZSBhIHJvb2suIENhcHR1cmVzIE9OTFkgYnkganVtcGluZyBvdmVyIGV4YWN0bHkgb25lXG4vLyBpbnRlcnZlbmluZyBwaWVjZSBvbiB0aGUgc2FtZSByYW5rL2ZpbGUuIFByb3Zlczpcbi8vICAgLSBjdXN0b20gcGllY2UgdHlwZXMgcmVnaXN0ZXIgKyBkaXNwYXRjaCB0aHJvdWdoIGVuZ2luZS5cbi8vICAgLSBjaGVjayBkZXRlY3Rpb24gc2VlcyB0aGVtIGFzIGF0dGFja2Vycy5cbi8vICAgLSBVSSBhc3NldCBsb29rdXAgdmlhIHJlZ2lzdHJ5IHdvcmtzICh2aXNpYmxlIHZpYSB0aGUgcmVnaXN0ZXJlZFxuLy8gICAgIGBhc3NldHNgIG9iamVjdCBiZWxvdywgYWx0aG91Z2ggd2UgZG9uJ3QgcmVuZGVyIGl0IGluIHRoaXMgdGVzdCkuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuaW1wb3J0IHR5cGUgeyBTZXNzaW9uIH0gZnJvbSBcIkBwYXJhdHlwZS9yZXRlXCI7XG5cbi8qKiBHZW5lcmF0ZSBwc2V1ZG8tbGVnYWwgY2Fubm9uIG1vdmVzLiAqL1xuZnVuY3Rpb24gY2Fubm9uTW92ZUdlbihzZXNzaW9uOiBTZXNzaW9uLCBpZDogRW50aXR5SWQpOiBMZWdhbE1vdmVbXSB7XG4gIGNvbnN0IGZhY3RzID0gc2Vzc2lvbi5hbGxGYWN0cygpO1xuICBjb25zdCBwb3MgPSBzZXNzaW9uLmdldChpZCwgXCJQb3NpdGlvblwiKTtcbiAgaWYgKHR5cGVvZiBwb3MgIT09IFwibnVtYmVyXCIpIHJldHVybiBbXTtcbiAgY29uc3QgY29sb3IgPSBzZXNzaW9uLmdldChpZCwgXCJDb2xvclwiKTtcbiAgaWYgKGNvbG9yICE9PSBcIndoaXRlXCIgJiYgY29sb3IgIT09IFwiYmxhY2tcIikgcmV0dXJuIFtdO1xuICBjb25zdCBmcm9tID0gcG9zO1xuICBjb25zdCBmcm9tRmlsZSA9IGZyb20gJSA4O1xuICBjb25zdCBmcm9tUmFuayA9IE1hdGguZmxvb3IoZnJvbSAvIDgpO1xuICBjb25zdCBvY2N1cGllZCA9IChzcTogbnVtYmVyKTogRW50aXR5SWQgfCBudWxsID0+IHtcbiAgICBjb25zdCBmID0gZmFjdHMuZmluZChcbiAgICAgIChmYSkgPT4gZmEuYXR0ciA9PT0gXCJQb3NpdGlvblwiICYmIGZhLnZhbHVlID09PSBzcSxcbiAgICApO1xuICAgIHJldHVybiBmID8gKGYuaWQgYXMgRW50aXR5SWQpIDogbnVsbDtcbiAgfTtcbiAgY29uc3Qgb3duZXJPZiA9IChlaWQ6IEVudGl0eUlkKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+XG4gICAgZmFjdHMuZmluZCgoZmEpID0+IGZhLmlkID09PSBlaWQgJiYgZmEuYXR0ciA9PT0gXCJDb2xvclwiKT8udmFsdWUgYXNcbiAgICAgIHwgc3RyaW5nXG4gICAgICB8IHVuZGVmaW5lZDtcblxuICBjb25zdCBtb3ZlczogTGVnYWxNb3ZlW10gPSBbXTtcbiAgY29uc3QgZGlyZWN0aW9uczogUmVhZG9ubHlBcnJheTxyZWFkb25seSBbbnVtYmVyLCBudW1iZXJdPiA9IFtcbiAgICBbMSwgMF0sIFstMSwgMF0sIFswLCAxXSwgWzAsIC0xXSxcbiAgXTtcbiAgZm9yIChjb25zdCBbZGYsIGRyXSBvZiBkaXJlY3Rpb25zKSB7XG4gICAgbGV0IGp1bXBlZCA9IGZhbHNlO1xuICAgIGZvciAobGV0IHN0ZXAgPSAxOyBzdGVwIDwgODsgc3RlcCsrKSB7XG4gICAgICBjb25zdCBmID0gZnJvbUZpbGUgKyBkZiAqIHN0ZXA7XG4gICAgICBjb25zdCByID0gZnJvbVJhbmsgKyBkciAqIHN0ZXA7XG4gICAgICBpZiAoZiA8IDAgfHwgZiA+IDcgfHwgciA8IDAgfHwgciA+IDcpIGJyZWFrO1xuICAgICAgY29uc3Qgc3EgPSByICogOCArIGY7XG4gICAgICBjb25zdCBvY2N1cGFudCA9IG9jY3VwaWVkKHNxKTtcbiAgICAgIGlmICghanVtcGVkKSB7XG4gICAgICAgIGlmIChvY2N1cGFudCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIEVtcHR5IOKAlCByZWd1bGFyIHJvb2stbGlrZSBxdWlldCBtb3ZlLlxuICAgICAgICAgIG1vdmVzLnB1c2goeyBwaWVjZUlkOiBpZCwgZnJvbSwgdG86IHNxLCBpc0NhcHR1cmU6IGZhbHNlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGp1bXBlZCA9IHRydWU7IC8vIG5leHQgaXRlcmF0aW9uIGNoZWNrcyBmb3IgZW5lbXktY2FwdHVyZVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBZnRlciBqdW1waW5nLCBBTlkgb2NjdXBpZWQgc3F1YXJlIGVuZHMgdGhlIHJheSDigJQgaWYgaXQnc1xuICAgICAgICAvLyBlbmVteSwgdGhhdCdzIGEgY2FwdHVyZTsgb3RoZXJ3aXNlIG5vdGhpbmcuXG4gICAgICAgIGlmIChvY2N1cGFudCAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChvd25lck9mKG9jY3VwYW50KSAhPT0gY29sb3IpIHtcbiAgICAgICAgICAgIG1vdmVzLnB1c2goeyBwaWVjZUlkOiBpZCwgZnJvbSwgdG86IHNxLCBpc0NhcHR1cmU6IHRydWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtb3Zlcztcbn1cblxuLy8gVXNlIHRoZSBwYXduIFNWRyBhcyBhIHN0YW5kLWluIGFzc2V0IGZvciB0aGUgdGVzdC5cbmltcG9ydCB7IHBpZWNlQXNzZXRzIH0gZnJvbSBcIi4uL2Fzc2V0cy9waWVjZXMvaW5kZXguanNcIjtcblxuUElFQ0VfVFlQRV9SRUdJU1RSWS5yZWdpc3Rlcih7XG4gIGlkOiBcImNhbm5vblwiLFxuICBkaXNwbGF5TmFtZTogXCJDYW5ub25cIixcbiAgbW92ZUdlbmVyYXRvcjogY2Fubm9uTW92ZUdlbixcbiAgLy8gRm9yIGNoZWNrIGRldGVjdGlvbiB3ZSByZXVzZSB0aGUgbW92ZSBnZW5lcmF0b3Ig4oCUIGNhbm5vbnMgXCJhdHRhY2tcIlxuICAvLyBleGFjdGx5IHRoZSBzcXVhcmVzIHRoZXkgY2FuIG1vdmUgdG8gY2FwdHVyZS5cbiAgYXR0YWNrUHJvYmU6IChzZXNzaW9uLCBpZCwgdGFyZ2V0KSA9PiB7XG4gICAgZm9yIChjb25zdCBtIG9mIGNhbm5vbk1vdmVHZW4oc2Vzc2lvbiwgaWQpKSB7XG4gICAgICBpZiAobS5pc0NhcHR1cmUgJiYgbS50byA9PT0gdGFyZ2V0KSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBhc3NldHM6IHsgd2hpdGU6IHBpZWNlQXNzZXRzLndoaXRlLnJvb2ssIGJsYWNrOiBwaWVjZUFzc2V0cy5ibGFjay5yb29rIH0sXG59KTtcblxuZGVzY3JpYmUoXCJDdXN0b20gcGllY2UgdHlwZTogQ2Fubm9uIChYaWFuZ3FpLWxpa2UpXCIsICgpID0+IHtcbiAgaXQoXCJtb3ZlcyBsaWtlIGEgcm9vayB3aGVuIHRoZSBwYXRoIGlzIGNsZWFyOyBjYXB0dXJlcyByZXF1aXJlIGEganVtcFwiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgY2xlYXJCb2FyZChlbmdpbmUpO1xuICAgIGNvbnN0IGNhbm5vbiA9IHBsYWNlUGllY2UoZW5naW5lLCBcImNhbm5vblwiLCBcIndoaXRlXCIsIFwiYTFcIik7XG4gICAgLy8gUGxhY2UgYSB3aGl0ZSBwYXduIG9uIGEzIGFzIGEgXCJqdW1wIHBsYXRmb3JtXCIgYW5kIGEgYmxhY2sgcGF3blxuICAgIC8vIG9uIGE1IGFzIHRoZSB0YXJnZXQuXG4gICAgcGxhY2VQaWVjZShlbmdpbmUsIFwicGF3blwiLCBcIndoaXRlXCIsIFwiYTNcIik7XG4gICAgcGxhY2VQaWVjZShlbmdpbmUsIFwicGF3blwiLCBcImJsYWNrXCIsIFwiYTVcIik7XG5cbiAgICBjb25zdCBtb3ZlcyA9IGNhbm5vbk1vdmVHZW4oZW5naW5lLnNlc3Npb24sIGNhbm5vbik7XG4gICAgLy8gUXVpZXQgbW92ZXMgdXAgdG8gYTIgKGEzIGlzIGJsb2NrZWQg4oCUIGNhbid0IG1vdmUgVEhST1VHSFxuICAgIC8vIHdpdGhvdXQganVtcGluZykuXG4gICAgZXhwZWN0KG1vdmVzLnNvbWUoKG0pID0+IG0udG8gPT09IGFsZ2VicmFpY1RvU3F1YXJlKFwiYTJcIikgJiYgIW0uaXNDYXB0dXJlKSkudG9CZSh0cnVlKTtcbiAgICAvLyBDYXB0dXJlIG9uIGE1IHZpYSBqdW1wIG92ZXIgYTMuXG4gICAgZXhwZWN0KG1vdmVzLnNvbWUoKG0pID0+IG0udG8gPT09IGFsZ2VicmFpY1RvU3F1YXJlKFwiYTVcIikgJiYgbS5pc0NhcHR1cmUpKS50b0JlKHRydWUpO1xuICAgIC8vIENBTk5PVCBjYXB0dXJlIGEzIGRpcmVjdGx5IChubyBqdW1wIOKAlCBtdXN0IGxlYXBmcm9nKS5cbiAgICBleHBlY3QobW92ZXMuc29tZSgobSkgPT4gbS50byA9PT0gYWxnZWJyYWljVG9TcXVhcmUoXCJhM1wiKSkpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcImNoZWNrIGRldGVjdGlvbiBzZWVzIGNhbm5vbiBhcyBhbiBhdHRhY2tlclwiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgY2xlYXJCb2FyZChlbmdpbmUpO1xuICAgIC8vIFdoaXRlIGNhbm5vbiBvbiBhMS4gQmxhY2sgcGF3biBvbiBhNCBhcyBqdW1wIHBsYXRmb3JtLiBCbGFjayBraW5nXG4gICAgLy8gb24gYTguXG4gICAgcGxhY2VQaWVjZShlbmdpbmUsIFwiY2Fubm9uXCIsIFwid2hpdGVcIiwgXCJhMVwiKTtcbiAgICBwbGFjZVBpZWNlKGVuZ2luZSwgXCJwYXduXCIsIFwiYmxhY2tcIiwgXCJhNFwiKTtcbiAgICBjb25zdCBibGFja0tpbmdJZCA9IHBpZWNlQXQoZW5naW5lLCBcImU4XCIpITtcbiAgICAvLyBNb3ZlIGJsYWNrIGtpbmcgdG8gYTggZm9yIGEgZGlyZWN0IGxpbmUuXG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KGJsYWNrS2luZ0lkLCBcIlBvc2l0aW9uXCIsIGFsZ2VicmFpY1RvU3F1YXJlKFwiYThcIikpO1xuICAgIC8vIGlzU3F1YXJlQXR0YWNrZWQgc2hvdWxkIHNlZSB0aGUgY2Fubm9uIGF0dGFja2luZyBhOCB2aWEganVtcC5cbiAgICBleHBlY3QoaXNJbkNoZWNrKGVuZ2luZS5zZXNzaW9uLCBcImJsYWNrXCIpKS50b0JlKHRydWUpO1xuICB9KTtcbn0pO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIDMuIEJlcnNlcmtlciBjb29sZG93biDigJQgdXNlcyBwcmVzZXRTdGF0ZVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmNvbnN0IEJFUlNFUktFUl9JRCA9IFwidGVzdC1iZXJzZXJrZXItY29vbGRvd25cIjtcbmludGVyZmFjZSBCZXJzZXJrZXJTdGF0ZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgbGFzdFJhZ2VUdXJuOiBudW1iZXI7XG59XG5cblBSRVNFVF9SRUdJU1RSWS5yZWdpc3Rlcih7XG4gIGlkOiBCRVJTRVJLRVJfSUQsXG4gIG5hbWU6IFwiQmVyc2Vya2VyIENvb2xkb3duXCIsXG4gIGRlc2NyaXB0aW9uOiBcIlRyYWNrcyBhIGNvb2xkb3duIHR1cm4gY291bnRlciBpbiBwcmVzZXRTdGF0ZS5cIixcbiAgaW5jb21wYXRpYmxlV2l0aDogW10sXG4gIHJlcXVpcmVzOiBbXSxcbn0pO1xuXG5kZXNjcmliZShcIlBlci1wcmVzZXQgc3RhdGUgYmFnIChwcmVzZXRTdGF0ZSlcIiwgKCkgPT4ge1xuICBpdChcInN0YXRlIGlzIHdyaXR0ZW4vcmVhZCBwZXItZ2FtZSBhbmQgY2xlYXJlZCBvbiBkZWFjdGl2YXRpb25cIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGVuZ2luZS5zZXRBY3RpdmVQcmVzZXRzKFtcbiAgICAgIHsgaWQ6IEJFUlNFUktFUl9JRCwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuICAgIGNvbnN0IHN0YXRlID0gZW5naW5lLnByZXNldFN0YXRlPEJlcnNlcmtlclN0YXRlPihCRVJTRVJLRVJfSUQpO1xuICAgIHN0YXRlLnNldChcImxhc3RSYWdlVHVyblwiLCA0KTtcbiAgICBleHBlY3Qoc3RhdGUuZ2V0KFwibGFzdFJhZ2VUdXJuXCIpKS50b0JlKDQpO1xuXG4gICAgLy8gRGlmZmVyZW50IHByZXNldCBpZCDigJQgbm8gY29sbGlzaW9uLlxuICAgIGNvbnN0IG90aGVyID0gZW5naW5lLnByZXNldFN0YXRlPEJlcnNlcmtlclN0YXRlPihcInBpZWNlLWhwXCIpO1xuICAgIGV4cGVjdChvdGhlci5nZXQoXCJsYXN0UmFnZVR1cm5cIikpLnRvQmVVbmRlZmluZWQoKTtcblxuICAgIC8vIERlYWN0aXZhdGUg4oaSIHN0YXRlIGNsZWFyZWQgYXV0b21hdGljYWxseS5cbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXSk7XG4gICAgY29uc3QgYWZ0ZXJEZWFjdCA9IGVuZ2luZS5wcmVzZXRTdGF0ZTxCZXJzZXJrZXJTdGF0ZT4oQkVSU0VSS0VSX0lEKTtcbiAgICBleHBlY3QoYWZ0ZXJEZWFjdC5nZXQoXCJsYXN0UmFnZVR1cm5cIikpLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG59KTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyA0LiBQYXduIHN0YW1pbmEg4oCUIHBoYXNlIGhvb2tzIChvbkJlZm9yZU1vdmUgKyBvblR1cm5TdGFydClcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5jb25zdCBTVEFNSU5BX0lEID0gXCJ0ZXN0LXBhd24tc3RhbWluYVwiO1xuXG5kZWNsYXJlIG1vZHVsZSBcIi4uL3NjaGVtYVwiIHtcbiAgaW50ZXJmYWNlIENoZXNzQXR0ck1hcCB7XG4gICAgU3RhbWluYTogbnVtYmVyO1xuICB9XG59XG5cblBSRVNFVF9SRUdJU1RSWS5yZWdpc3Rlcih7XG4gIGlkOiBTVEFNSU5BX0lELFxuICBuYW1lOiBcIlBhd24gU3RhbWluYVwiLFxuICBkZXNjcmlwdGlvbjogXCJQYXducyBuZWVkIDEgU3RhbWluYSB0byBwdXNoOyByZWdlbmVyYXRlcyArMSBwZXIgdHVybiAobWF4IDIpLlwiLFxuICBpbmNvbXBhdGlibGVXaXRoOiBbXSxcbiAgcmVxdWlyZXM6IFtdLFxuICBwaWVjZUF0dHJpYnV0ZXM6IFtcIlN0YW1pbmFcIl0sXG4gIG9uQWN0aXZhdGUoeyBlbmdpbmUgfSkge1xuICAgIGZvciAoY29uc3QgZiBvZiBlbmdpbmUuc2Vzc2lvbi5hbGxGYWN0cygpKSB7XG4gICAgICBpZiAoZi5hdHRyICE9PSBcIlBpZWNlVHlwZVwiIHx8IGYudmFsdWUgIT09IFwicGF3blwiKSBjb250aW51ZTtcbiAgICAgIGlmICgoZi5pZCBhcyBudW1iZXIpIDw9IDApIGNvbnRpbnVlO1xuICAgICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KGYuaWQsIFwiU3RhbWluYVwiLCAyKTtcbiAgICB9XG4gIH0sXG4gIG9uUGllY2VTcGF3bih7IGVuZ2luZSwgcGllY2VJZCwgdHlwZSB9KSB7XG4gICAgaWYgKHR5cGUgPT09IFwicGF3blwiKSBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQocGllY2VJZCwgXCJTdGFtaW5hXCIsIDIpO1xuICB9LFxuICBvbkJlZm9yZU1vdmUoeyBlbmdpbmUsIHBpZWNlSWQgfSkge1xuICAgIGNvbnN0IHR5cGUgPSBlbmdpbmUuc2Vzc2lvbi5nZXQocGllY2VJZCwgXCJQaWVjZVR5cGVcIik7XG4gICAgaWYgKHR5cGUgIT09IFwicGF3blwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHN0YW1pbmEgPSBlbmdpbmUuc2Vzc2lvbi5jb250YWlucyhwaWVjZUlkLCBcIlN0YW1pbmFcIilcbiAgICAgID8gKGVuZ2luZS5zZXNzaW9uLmdldChwaWVjZUlkLCBcIlN0YW1pbmFcIikgYXMgbnVtYmVyKVxuICAgICAgOiAwO1xuICAgIGlmIChzdGFtaW5hIDwgMSkge1xuICAgICAgcmV0dXJuIHsgY2FuY2VsOiB0cnVlLCByZWFzb246IFwiUGF3biB0b28gdGlyZWQgdG8gcHVzaCAoU3RhbWluYSAwKVwiIH07XG4gICAgfVxuICAgIC8vIENvbnN1bWUgMSBzdGFtaW5hLiBEbyBpdCBpbiBvbkJlZm9yZU1vdmUgYmVjYXVzZSBvbkFmdGVyTW92ZVxuICAgIC8vIGNhbid0IHZldG8sIGFuZCB0aGUgZW5naW5lIG5lZWRzIHRvIGtub3cgTk9XIHdoZXRoZXIgdGhlIG1vdmVcbiAgICAvLyBpcyBldmVuIGFsbG93ZWQuIChDb25zdW1pbmcgaGVyZSA9IGNoYXJnZWQgcmVnYXJkbGVzcyBvZlxuICAgIC8vIHN1Y2Nlc3M7IHRlc3RzIGFja25vd2xlZGdlIHRoaXMuKVxuICAgIGVuZ2luZS5zZXNzaW9uLmluc2VydChwaWVjZUlkLCBcIlN0YW1pbmFcIiwgc3RhbWluYSAtIDEpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sXG4gIG9uVHVyblN0YXJ0KHsgZW5naW5lLCB0dXJuIH0pIHtcbiAgICAvLyBSZWdlbmVyYXRlIGVhY2ggcGF3biBvZiB0aGlzIGNvbG9yICsxIHN0YW1pbmEgdXAgdG8gbWF4IDIuXG4gICAgY29uc3QgZmFjdHMgPSBlbmdpbmUuc2Vzc2lvbi5hbGxGYWN0cygpO1xuICAgIGZvciAoY29uc3QgZiBvZiBmYWN0cykge1xuICAgICAgaWYgKGYuYXR0ciAhPT0gXCJQaWVjZVR5cGVcIiB8fCBmLnZhbHVlICE9PSBcInBhd25cIikgY29udGludWU7XG4gICAgICBjb25zdCBjb2xvckZhY3QgPSBmYWN0cy5maW5kKFxuICAgICAgICAoYykgPT4gYy5pZCA9PT0gZi5pZCAmJiBjLmF0dHIgPT09IFwiQ29sb3JcIixcbiAgICAgICk7XG4gICAgICBpZiAoY29sb3JGYWN0Py52YWx1ZSAhPT0gdHVybikgY29udGludWU7XG4gICAgICBjb25zdCBjdXJyZW50ID0gZW5naW5lLnNlc3Npb24uY29udGFpbnMoZi5pZCwgXCJTdGFtaW5hXCIpXG4gICAgICAgID8gKGVuZ2luZS5zZXNzaW9uLmdldChmLmlkLCBcIlN0YW1pbmFcIikgYXMgbnVtYmVyKVxuICAgICAgICA6IDA7XG4gICAgICBpZiAoY3VycmVudCA8IDIpIHtcbiAgICAgICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KGYuaWQsIFwiU3RhbWluYVwiLCBjdXJyZW50ICsgMSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufSk7XG5cbmRlc2NyaWJlKFwiUGhhc2UgaG9va3MgKG9uQmVmb3JlTW92ZSArIG9uVHVyblN0YXJ0KVwiLCAoKSA9PiB7XG4gIGl0KFwicGF3biB3aXRoIHN0YW1pbmEgMCBjYW5ub3QgbW92ZSAob25CZWZvcmVNb3ZlIHZldG8pXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiBTVEFNSU5BX0lELCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgXSk7XG4gICAgY29uc3QgZTJQYXduID0gcGllY2VBdChlbmdpbmUsIFwiZTJcIikhO1xuICAgIC8vIERyYWluIHN0YW1pbmEgdG8gMC5cbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQoZTJQYXduLCBcIlN0YW1pbmFcIiwgMCk7XG5cbiAgICBjb25zdCBtb3ZlID0gZW5naW5lLmZpbmRNb3ZlKFxuICAgICAgYWxnZWJyYWljVG9TcXVhcmUoXCJlMlwiKSxcbiAgICAgIGFsZ2VicmFpY1RvU3F1YXJlKFwiZTRcIiksXG4gICAgKSE7XG4gICAgZXhwZWN0KCgpID0+IGVuZ2luZS5hcHBseU1vdmUobW92ZSkpLnRvVGhyb3coTW92ZUNhbmNlbGxlZEVycm9yKTtcbiAgfSk7XG5cbiAgaXQoXCJvblR1cm5TdGFydCByZWdlbmVyYXRlcyBzdGFtaW5hIG9uIHRoZSBhcHByb3ByaWF0ZSBjb2xvciBvbmx5XCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiBTVEFNSU5BX0lELCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgXSk7XG4gICAgLy8gV2hpdGUgZTIgcGF3biBzdGFydHMgd2l0aCAyIHN0YW1pbmEuIENvbnN1bWUgMSB2aWEgYSBwdXNoLlxuICAgIGNvbnN0IGUyUGF3biA9IHBpZWNlQXQoZW5naW5lLCBcImUyXCIpITtcbiAgICBleHBlY3QoZW5naW5lLnNlc3Npb24uZ2V0KGUyUGF3biwgXCJTdGFtaW5hXCIpKS50b0JlKDIpO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoXG4gICAgICBlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJlMlwiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJlNFwiKSkhLFxuICAgICk7XG4gICAgLy8gQWZ0ZXIgbW92ZTogc3RhbWluYSAyIC0gMSA9IDEgZm9yIHdoaXRlIGUyLXBhd24gKG5vdyBlNCkuIEJVVFxuICAgIC8vIG9uVHVyblN0YXJ0IGZpcmVkIGZvciBCTEFDSyBuZXh0LCBub3Qgd2hpdGUg4oCUIHNvIHdoaXRlJ3NcbiAgICAvLyBzdGFtaW5hIHN0YXlzIGF0IDEuXG4gICAgY29uc3QgZTRQYXduID0gcGllY2VBdChlbmdpbmUsIFwiZTRcIikhO1xuICAgIGV4cGVjdChlbmdpbmUuc2Vzc2lvbi5nZXQoZTRQYXduLCBcIlN0YW1pbmFcIikpLnRvQmUoMSk7XG5cbiAgICAvLyBCbGFjaydzIG1vdmUg4oCUIGRvZXNuJ3QgY2hhbmdlIHdoaXRlJ3Mgc3RhbWluYS5cbiAgICBlbmdpbmUuYXBwbHlNb3ZlKFxuICAgICAgZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiYTdcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiYTZcIikpISxcbiAgICApO1xuICAgIC8vIE5vdyBpdCdzIHdoaXRlJ3MgdHVybiBhZ2Fpbi4gb25UdXJuU3RhcnQgZmlyZWQgZm9yIHdoaXRlIOKGklxuICAgIC8vIGU0IHBhd24ncyBzdGFtaW5hIHJlZ2VucyBmcm9tIDEgYmFjayB0byAyLlxuICAgIGV4cGVjdChlbmdpbmUuc2Vzc2lvbi5nZXQoZTRQYXduLCBcIlN0YW1pbmFcIikpLnRvQmUoMik7XG4gIH0pO1xufSk7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gNS4gTWV0YS1hc3NlcnRpb246IG5vIGhhcmRjb2RlZCBQSUVDRV9BVFRSUyBsaXRlcmFscyBvdXRzaWRlIGNvcmVcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5kZXNjcmliZShcIkFyY2hpdGVjdHVyZSBpbnZhcmlhbnRzXCIsICgpID0+IHtcbiAgaXQoXCJDT1JFX1BJRUNFX0FUVFJTIGV4Y2x1ZGVzIHByZXNldC1vd25lZCBhdHRycyBsaWtlIEhwL1NoaWVsZC9TdGFtaW5hXCIsICgpID0+IHtcbiAgICBjb25zdCBjb3JlID0gQ09SRV9QSUVDRV9BVFRSUyBhcyByZWFkb25seSBzdHJpbmdbXTtcbiAgICBleHBlY3QoY29yZSkubm90LnRvQ29udGFpbihcIkhwXCIpO1xuICAgIGV4cGVjdChjb3JlKS5ub3QudG9Db250YWluKFwiU2hpZWxkXCIpO1xuICAgIGV4cGVjdChjb3JlKS5ub3QudG9Db250YWluKFwiU3RhbWluYVwiKTtcbiAgICAvLyBPbmx5IHRoZSBGSURFLW1pbmltdW0gZm91ciBhcmUgY29yZS5cbiAgICBleHBlY3QoY29yZS5sZW5ndGgpLnRvQmUoNCk7XG4gIH0pO1xuXG4gIGl0KFwiZW5naW5lLmVmZmVjdGl2ZVBpZWNlQXR0cnMgdW5pb25zIGluIHByZXNldC1kZWNsYXJlZCBhdHRyc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgZW5naW5lLnNldEFjdGl2ZVByZXNldHMoW1xuICAgICAgeyBpZDogXCJwaWVjZS1ocFwiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgXSk7XG4gICAgZXhwZWN0KGVuZ2luZS5lZmZlY3RpdmVQaWVjZUF0dHJzKS50b0NvbnRhaW4oXCJIcFwiKTtcbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXSk7XG4gICAgZXhwZWN0KGVuZ2luZS5lZmZlY3RpdmVQaWVjZUF0dHJzKS5ub3QudG9Db250YWluKFwiSHBcIik7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvY2hlc3Mvc3JjL3ByZXNldHMvaW50ZWdyYXRpb24udGVzdC50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/442ebf3ac79f68fe86487d3ffcebc61824a2540d b/7xOfJqsDU787fe61oSCq1/web/442ebf3ac79f68fe86487d3ffcebc61824a2540d deleted file mode 100644 index b765833..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/442ebf3ac79f68fe86487d3ffcebc61824a2540d +++ /dev/null @@ -1,23 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "MONSTER_LAYOUT", { enumerable: true, configurable: true, get(){ try { return MONSTER_LAYOUT } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/layouts/registry.ts", {"importedNames":["LAYOUT_REGISTRY"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/layouts/_helpers.ts", {"importedNames":["fideSideOf"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["algebraicToSquare"]}); -const MONSTER_LAYOUT = { - id: "monster", - name: "Monster Chess", - description: "White has only a king and four central pawns; black has a full army. Pairs with the 'monster-rules' preset (white moves twice).", - pieces: [ - { type: "king", color: "white", square: (0,__vite_ssr_import_2__.algebraicToSquare)("e1") }, - { type: "pawn", color: "white", square: (0,__vite_ssr_import_2__.algebraicToSquare)("c2") }, - { type: "pawn", color: "white", square: (0,__vite_ssr_import_2__.algebraicToSquare)("d2") }, - { type: "pawn", color: "white", square: (0,__vite_ssr_import_2__.algebraicToSquare)("e2") }, - { type: "pawn", color: "white", square: (0,__vite_ssr_import_2__.algebraicToSquare)("f2") }, - ...(0,__vite_ssr_import_1__.fideSideOf)("black") - ], - suggestedPresets: ["monster-rules"], - source: "premade" -}; -__vite_ssr_import_0__.LAYOUT_REGISTRY.register(MONSTER_LAYOUT); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQWVBO0FBQ0E7QUFDQTtBQUVPLE1BQU0saUJBQWlDO0FBQUEsRUFDNUMsSUFBSTtBQUFBLEVBQ0osTUFBTTtBQUFBLEVBQ04sYUFDRTtBQUFBLEVBQ0YsUUFBUTtBQUFBLElBQ04sRUFBRSxNQUFNLFFBQVEsT0FBTyxTQUFTLFdBQVEseUNBQWtCLElBQUksRUFBRTtBQUFBLElBQ2hFLEVBQUUsTUFBTSxRQUFRLE9BQU8sU0FBUyxXQUFRLHlDQUFrQixJQUFJLEVBQUU7QUFBQSxJQUNoRSxFQUFFLE1BQU0sUUFBUSxPQUFPLFNBQVMsV0FBUSx5Q0FBa0IsSUFBSSxFQUFFO0FBQUEsSUFDaEUsRUFBRSxNQUFNLFFBQVEsT0FBTyxTQUFTLFdBQVEseUNBQWtCLElBQUksRUFBRTtBQUFBLElBQ2hFLEVBQUUsTUFBTSxRQUFRLE9BQU8sU0FBUyxXQUFRLHlDQUFrQixJQUFJLEVBQUU7QUFBQSxJQUNoRSxNQUFHLGtDQUFXLE9BQU87QUFBQSxFQUN2QjtBQUFBLEVBQ0Esa0JBQWtCLENBQUMsZUFBZTtBQUFBLEVBQ2xDLFFBQVE7QUFDVjtBQUVBLHNDQUFnQixTQUFTLGNBQWMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIm1vbnN0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMYXlvdXQ6IE1vbnN0ZXIgQ2hlc3MgKHBpZWNlIHBsYWNlbWVudCBvbmx5KS5cbiAqXG4gKiAgIC0gV2hpdGU6IGtpbmcgb24gZTEgYW5kIGZvdXIgcGF3bnMgb24gYzIvZDIvZTIvZjIuXG4gKiAgIC0gQmxhY2s6IHN0YW5kYXJkIEZJREUgc2V0dXAuXG4gKlxuICogVGhlIGNhbm9uaWNhbCBNb25zdGVyIENoZXNzIHJ1bGVzIGluY2x1ZGUgXCJ3aGl0ZSBtb3ZlcyB0d2ljZSBwZXJcbiAqIHR1cm5cIiDigJQgdGhhdCBydWxlIHdpbGwgc2hpcCBhcyB0aGUgYG1vbnN0ZXItcnVsZXNgIHByZXNldCAoc2VlXG4gKiBydWxlLXZhcmlhbnRzIHBsYW4pLiBUaGlzIGxheW91dCBhbG9uZSBwbGF5cyBhcyBcIndoaXRlIHdpdGggYVxuICoga2luZyArIDQgcGF3bnMgdnMgYSBmdWxsIGJsYWNrIGFybXlcIjsgd2l0aG91dCB0aGUgdHdpbi1tb3ZlIHJ1bGVcbiAqIGl0J3MgbWFzc2l2ZWx5IHVuYmFsYW5jZWQgaW4gYmxhY2sncyBmYXZvciwgYnV0IGZ1bmN0aW9uYWwuXG4gKlxuICogUmVmZXJlbmNlOiBodHRwczovL2dyZWVuY2hlc3MubmV0L3J1bGVzLnBocD92PW1vbnN0ZXJcbiAqL1xuaW1wb3J0IHR5cGUgeyBTdGFydGluZ0xheW91dCB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBMQVlPVVRfUkVHSVNUUlkgfSBmcm9tIFwiLi9yZWdpc3RyeS5qc1wiO1xuaW1wb3J0IHsgZmlkZVNpZGVPZiB9IGZyb20gXCIuL19oZWxwZXJzLmpzXCI7XG5pbXBvcnQgeyBhbGdlYnJhaWNUb1NxdWFyZSB9IGZyb20gXCIuLi9jb29yZC5qc1wiO1xuXG5leHBvcnQgY29uc3QgTU9OU1RFUl9MQVlPVVQ6IFN0YXJ0aW5nTGF5b3V0ID0ge1xuICBpZDogXCJtb25zdGVyXCIsXG4gIG5hbWU6IFwiTW9uc3RlciBDaGVzc1wiLFxuICBkZXNjcmlwdGlvbjpcbiAgICBcIldoaXRlIGhhcyBvbmx5IGEga2luZyBhbmQgZm91ciBjZW50cmFsIHBhd25zOyBibGFjayBoYXMgYSBmdWxsIGFybXkuIFBhaXJzIHdpdGggdGhlICdtb25zdGVyLXJ1bGVzJyBwcmVzZXQgKHdoaXRlIG1vdmVzIHR3aWNlKS5cIixcbiAgcGllY2VzOiBbXG4gICAgeyB0eXBlOiBcImtpbmdcIiwgY29sb3I6IFwid2hpdGVcIiwgc3F1YXJlOiBhbGdlYnJhaWNUb1NxdWFyZShcImUxXCIpIH0sXG4gICAgeyB0eXBlOiBcInBhd25cIiwgY29sb3I6IFwid2hpdGVcIiwgc3F1YXJlOiBhbGdlYnJhaWNUb1NxdWFyZShcImMyXCIpIH0sXG4gICAgeyB0eXBlOiBcInBhd25cIiwgY29sb3I6IFwid2hpdGVcIiwgc3F1YXJlOiBhbGdlYnJhaWNUb1NxdWFyZShcImQyXCIpIH0sXG4gICAgeyB0eXBlOiBcInBhd25cIiwgY29sb3I6IFwid2hpdGVcIiwgc3F1YXJlOiBhbGdlYnJhaWNUb1NxdWFyZShcImUyXCIpIH0sXG4gICAgeyB0eXBlOiBcInBhd25cIiwgY29sb3I6IFwid2hpdGVcIiwgc3F1YXJlOiBhbGdlYnJhaWNUb1NxdWFyZShcImYyXCIpIH0sXG4gICAgLi4uZmlkZVNpZGVPZihcImJsYWNrXCIpLFxuICBdLFxuICBzdWdnZXN0ZWRQcmVzZXRzOiBbXCJtb25zdGVyLXJ1bGVzXCJdLFxuICBzb3VyY2U6IFwicHJlbWFkZVwiLFxufTtcblxuTEFZT1VUX1JFR0lTVFJZLnJlZ2lzdGVyKE1PTlNURVJfTEFZT1VUKTtcbiJdLCJmaWxlIjoiL3NyYy9sYXlvdXRzL21vbnN0ZXIudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/457014b126b3c023dcf81bd144f236f39702cbb0 b/7xOfJqsDU787fe61oSCq1/web/457014b126b3c023dcf81bd144f236f39702cbb0 deleted file mode 100644 index 2cff8d1..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/457014b126b3c023dcf81bd144f236f39702cbb0 +++ /dev/null @@ -1,163 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "Session", { enumerable: true, configurable: true, get(){ try { return Session } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/wm.js", {"importedNames":["WorkingMemory"]});const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/alpha.js", {"importedNames":["AlphaNetwork"]});const __vite_ssr_import_2__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/cycle.js", {"importedNames":["RecursionLimitExceededError"]});/** - * Session — main entry point for the @paratype/rete engine. - * Owns WorkingMemory, AlphaNetwork, and the production agenda. - * Per SPEC.md §ID Authority, §Conflict Resolution, §RHS Purity Contract. - */ - - - -class Session { - #wm; - #alpha; - #rules = []; - #opts; - #eventLog; - #idCounter = 0; - /** - * Internal recursion depth counter for fireRules(). - * Underscore prefix signals package-internal use; not exported from index. - * Per SPEC.md §Cycle Detection. - */ - _fireDepth = 0; - constructor(opts = {}) { - this.#opts = { - autoFire: opts.autoFire ?? true, - recursionLimit: opts.recursionLimit ?? 64, - }; - this.#eventLog = opts.eventLog; - this.#wm = new __vite_ssr_import_0__.WorkingMemory(); - this.#alpha = new __vite_ssr_import_1__.AlphaNetwork(); - // Wire WorkingMemory events to AlphaNetwork - this.#wm.onInsert((id, attr, value) => { - this.#alpha.notifyInsert(id, attr, value); - }); - this.#wm.onRetract((id, attr, value) => { - this.#alpha.notifyRetract(id, attr, value); - }); - } - /** Mint a new unique EntityId (server-authoritative per SPEC.md §ID Authority). */ - nextId() { - return ++this.#idCounter; - } - /** - * Insert (or update) a fact. If autoFire, triggers fireRules(). - * - * When an {@link EventLog} is attached, records the mutation — - * updates are recorded as a retract-of-old-value followed by an - * insert-of-new-value, mirroring the WM's internal update semantics - * (see wm.ts). Derived facts (negative ids) are never logged. - */ - insert(id, attr, value) { - const log = this.#eventLog; - const shouldLog = log !== undefined && id >= 0; - if (shouldLog) { - const oldValue = this.#wm.get(id, attr); - if (oldValue !== undefined || this.#wm.contains(id, attr)) { - log.appendRetract(id, attr, oldValue); - } - }; - this.#wm.insert(id, attr, value); - if (shouldLog) - log.appendInsert(id, attr, value); - if (this.#opts.autoFire) - this.fireRules(); - } - /** - * Retract a fact. If autoFire, triggers fireRules(). - * - * When an {@link EventLog} is attached, the previous value is read - * from WM before the retraction and recorded on the event so replay - * can reconstruct the missing fact. Retracting a non-existent fact - * is a no-op and is not logged. - */ - retract(id, attr) { - const log = this.#eventLog; - const shouldLog = log !== undefined && id >= 0; - let oldValue; - let existed = false; - if (shouldLog) { - existed = this.#wm.contains(id, attr); - if (existed) - oldValue = this.#wm.get(id, attr); - }; - this.#wm.retract(id, attr); - if (shouldLog && existed) - log.appendRetract(id, attr, oldValue); - if (this.#opts.autoFire) - this.fireRules(); - } - /** Get fact value. */ - get(id, attr) { - return this.#wm.get(id, attr); - } - /** Check fact existence. */ - contains(id, attr) { - return this.#wm.contains(id, attr); - } - /** Return all facts sorted [id asc, attr asc]. */ - allFacts() { - return this.#wm.allFacts(); - } - /** - * Register a rule with the session. - * Accepts a RuleDefinition produced by defineRule() (see builder.ts). - * - * Each registration is assigned a zero-based `addedAt` index, exposed - * via {@link _getOrderableRules} for the conflict-resolution sort - * (see conflict.ts, SPEC.md §Conflict Resolution). - */ - add(rule) { - this.#rules.push({ rule, addedAt: this.#rules.length }); - } - /** - * Package-internal accessor returning registered rules in a shape - * compatible with {@link OrderableRule} (i.e. with `addedAt` attached). - * - * Used by the agenda/beta network to build {@link Activation} values - * that can be passed to {@link orderActivations}. Not exported from - * the package index — consumers should go through `fireRules()`. - */ - _getOrderableRules() { - return this.#rules.map(({ rule, addedAt }) => ({ - name: rule.name, - salience: rule.salience, - conditions: rule.conditions, - handler: rule.handler, - addedAt, - })); - } - /** - * Fire all pending rule activations in deterministic order. - * Returns the count of rule firings. - * Per SPEC.md §Conflict Resolution: salience desc → specificity desc → insertion order asc. - * Per SPEC.md §Cycle Detection: throws RecursionLimitExceededError when depth exceeds limit. - * A limit of 0 disables the check. - */ - fireRules(opts) { - const limit = opts?.recursionLimit ?? this.#opts.recursionLimit; - if (limit > 0 && this._fireDepth >= limit) { - throw new __vite_ssr_import_2__.RecursionLimitExceededError(this._fireDepth, []); - }; - this._fireDepth++; - try { - // Stub: no production nodes wired yet (Phase 1.7+) - // Returns 0 until beta network + production nodes are integrated. - return 0; - } - finally { - this._fireDepth--; - } - } - /** Expose AlphaNetwork for wiring by beta/join nodes (package-internal). */ - _getAlpha() { - return this.#alpha; - } - /** Expose WorkingMemory for wiring by production nodes (package-internal). */ - _getWM() { - return this.#wm; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QWMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWM7UUFDL0QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksS0FBSyxFQUFFO1lBQ3pDLE1BQU0sSUFBSSxpREFBMkIsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztRQUM1RDtRQUNBLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDakIsSUFBSTtZQUNGO1lBQ0E7WUFDQSxPQUFPLENBQUM7UUFDVjtnQkFBVTtZQUNSLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDbkI7SUFDRjtJQUVBO0lBQ0EsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU07SUFDcEI7SUFFQTtJQUNBLE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxHQUFHO0lBQ2pCIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyIuLi9zcmMvc2Vzc2lvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlc3Npb24g4oCUIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBAcGFyYXR5cGUvcmV0ZSBlbmdpbmUuXG4gKiBPd25zIFdvcmtpbmdNZW1vcnksIEFscGhhTmV0d29yaywgYW5kIHRoZSBwcm9kdWN0aW9uIGFnZW5kYS5cbiAqIFBlciBTUEVDLm1kIMKnSUQgQXV0aG9yaXR5LCDCp0NvbmZsaWN0IFJlc29sdXRpb24sIMKnUkhTIFB1cml0eSBDb250cmFjdC5cbiAqL1xuaW1wb3J0IHsgV29ya2luZ01lbW9yeSwgdHlwZSBBdHRyS2V5LCB0eXBlIEZhY3RWYWx1ZSB9IGZyb20gXCIuL3dtLmpzXCI7XG5pbXBvcnQgeyBBbHBoYU5ldHdvcmsgfSBmcm9tIFwiLi9hbHBoYS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBSdWxlRGVmaW5pdGlvbiB9IGZyb20gXCIuL2J1aWxkZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgT3JkZXJhYmxlUnVsZSB9IGZyb20gXCIuL2NvbmZsaWN0LmpzXCI7XG5pbXBvcnQgeyBSZWN1cnNpb25MaW1pdEV4Y2VlZGVkRXJyb3IgfSBmcm9tIFwiLi9jeWNsZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFdmVudExvZyB9IGZyb20gXCIuL2V2ZW50bG9nLmpzXCI7XG5cbi8qKlxuICogSW50ZXJuYWwgcmVjb3JkIHBhaXJpbmcgYSByZWdpc3RlcmVkIHtAbGluayBSdWxlRGVmaW5pdGlvbn0gd2l0aCBpdHNcbiAqIHplcm8tYmFzZWQgaW5zZXJ0aW9uIGluZGV4LiBUaGUgaW5kZXggaXMgdGhlIHRoaXJkIHRpZWJyZWFrZXIgdXNlZCBieVxuICoge0BsaW5rIG9yZGVyQWN0aXZhdGlvbnN9IChzZWUgY29uZmxpY3QudHMpLlxuICovXG5pbnRlcmZhY2UgUmVnaXN0ZXJlZFJ1bGUge1xuICByZWFkb25seSBydWxlOiBSdWxlRGVmaW5pdGlvbjtcbiAgcmVhZG9ubHkgYWRkZWRBdDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25PcHRpb25zIHtcbiAgLyoqIElmIHRydWUsIGZpcmVSdWxlcygpIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIGVhY2ggaW5zZXJ0L3JldHJhY3QuIERlZmF1bHQ6IHRydWUuICovXG4gIGF1dG9GaXJlPzogYm9vbGVhbjtcbiAgLyoqIE1heGltdW0gcmVjdXJzaW9uIGRlcHRoIGZvciBmaXJlUnVsZXMoKS4gRGVmYXVsdDogNjQuICovXG4gIHJlY3Vyc2lvbkxpbWl0PzogbnVtYmVyO1xuICAvKipcbiAgICogT3B0aW9uYWwgYXBwZW5kLW9ubHkge0BsaW5rIEV2ZW50TG9nfS4gV2hlbiBwcm92aWRlZCwgdXNlci1pbml0aWF0ZWRcbiAgICoge0BsaW5rIFNlc3Npb24uaW5zZXJ0fSBhbmQge0BsaW5rIFNlc3Npb24ucmV0cmFjdH0gY2FsbHMgYXBwZW5kIGFcbiAgICogY29ycmVzcG9uZGluZyBldmVudC4gRGVyaXZlZCBmYWN0cyAobmVnYXRpdmUge0BsaW5rIEVudGl0eUlkfXMpIGFyZVxuICAgKiBleGNsdWRlZCDigJQgcGVyIFNQRUMubWQgwqdUcnV0aCBNYWludGVuYW5jZSB0aGV5IGFyZSByZS1kZXJpdmVkIG9uXG4gICAqIHJlcGxheSByYXRoZXIgdGhhbiByZWNvcmRlZCBkaXJlY3RseS5cbiAgICovXG4gIGV2ZW50TG9nPzogRXZlbnRMb2c7XG59XG5cbmV4cG9ydCBjbGFzcyBTZXNzaW9uIHtcbiAgcmVhZG9ubHkgI3dtOiBXb3JraW5nTWVtb3J5O1xuICByZWFkb25seSAjYWxwaGE6IEFscGhhTmV0d29yaztcbiAgcmVhZG9ubHkgI3J1bGVzOiBSZWdpc3RlcmVkUnVsZVtdID0gW107XG4gIHJlYWRvbmx5ICNvcHRzOiBSZXF1aXJlZDxQaWNrPFNlc3Npb25PcHRpb25zLCBcImF1dG9GaXJlXCIgfCBcInJlY3Vyc2lvbkxpbWl0XCI+PjtcbiAgcmVhZG9ubHkgI2V2ZW50TG9nOiBFdmVudExvZyB8IHVuZGVmaW5lZDtcbiAgI2lkQ291bnRlciA9IDA7XG5cbiAgLyoqXG4gICAqIEludGVybmFsIHJlY3Vyc2lvbiBkZXB0aCBjb3VudGVyIGZvciBmaXJlUnVsZXMoKS5cbiAgICogVW5kZXJzY29yZSBwcmVmaXggc2lnbmFscyBwYWNrYWdlLWludGVybmFsIHVzZTsgbm90IGV4cG9ydGVkIGZyb20gaW5kZXguXG4gICAqIFBlciBTUEVDLm1kIMKnQ3ljbGUgRGV0ZWN0aW9uLlxuICAgKi9cbiAgX2ZpcmVEZXB0aCA9IDA7XG5cbiAgY29uc3RydWN0b3Iob3B0czogU2Vzc2lvbk9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuI29wdHMgPSB7XG4gICAgICBhdXRvRmlyZTogb3B0cy5hdXRvRmlyZSA/PyB0cnVlLFxuICAgICAgcmVjdXJzaW9uTGltaXQ6IG9wdHMucmVjdXJzaW9uTGltaXQgPz8gNjQsXG4gICAgfTtcbiAgICB0aGlzLiNldmVudExvZyA9IG9wdHMuZXZlbnRMb2c7XG4gICAgdGhpcy4jd20gPSBuZXcgV29ya2luZ01lbW9yeSgpO1xuICAgIHRoaXMuI2FscGhhID0gbmV3IEFscGhhTmV0d29yaygpO1xuXG4gICAgLy8gV2lyZSBXb3JraW5nTWVtb3J5IGV2ZW50cyB0byBBbHBoYU5ldHdvcmtcbiAgICB0aGlzLiN3bS5vbkluc2VydCgoaWQsIGF0dHIsIHZhbHVlKSA9PiB7XG4gICAgICB0aGlzLiNhbHBoYS5ub3RpZnlJbnNlcnQoaWQsIGF0dHIsIHZhbHVlKTtcbiAgICB9KTtcbiAgICB0aGlzLiN3bS5vblJldHJhY3QoKGlkLCBhdHRyLCB2YWx1ZSkgPT4ge1xuICAgICAgdGhpcy4jYWxwaGEubm90aWZ5UmV0cmFjdChpZCwgYXR0ciwgdmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIE1pbnQgYSBuZXcgdW5pcXVlIEVudGl0eUlkIChzZXJ2ZXItYXV0aG9yaXRhdGl2ZSBwZXIgU1BFQy5tZCDCp0lEIEF1dGhvcml0eSkuICovXG4gIG5leHRJZCgpOiBFbnRpdHlJZCB7XG4gICAgcmV0dXJuICsrdGhpcy4jaWRDb3VudGVyIGFzIEVudGl0eUlkO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc2VydCAob3IgdXBkYXRlKSBhIGZhY3QuIElmIGF1dG9GaXJlLCB0cmlnZ2VycyBmaXJlUnVsZXMoKS5cbiAgICpcbiAgICogV2hlbiBhbiB7QGxpbmsgRXZlbnRMb2d9IGlzIGF0dGFjaGVkLCByZWNvcmRzIHRoZSBtdXRhdGlvbiDigJRcbiAgICogdXBkYXRlcyBhcmUgcmVjb3JkZWQgYXMgYSByZXRyYWN0LW9mLW9sZC12YWx1ZSBmb2xsb3dlZCBieSBhblxuICAgKiBpbnNlcnQtb2YtbmV3LXZhbHVlLCBtaXJyb3JpbmcgdGhlIFdNJ3MgaW50ZXJuYWwgdXBkYXRlIHNlbWFudGljc1xuICAgKiAoc2VlIHdtLnRzKS4gRGVyaXZlZCBmYWN0cyAobmVnYXRpdmUgaWRzKSBhcmUgbmV2ZXIgbG9nZ2VkLlxuICAgKi9cbiAgaW5zZXJ0KGlkOiBFbnRpdHlJZCwgYXR0cjogQXR0cktleSwgdmFsdWU6IEZhY3RWYWx1ZSk6IHZvaWQge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMuI2V2ZW50TG9nO1xuICAgIGNvbnN0IHNob3VsZExvZyA9IGxvZyAhPT0gdW5kZWZpbmVkICYmIChpZCBhcyBudW1iZXIpID49IDA7XG4gICAgaWYgKHNob3VsZExvZykge1xuICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLiN3bS5nZXQoaWQsIGF0dHIpO1xuICAgICAgaWYgKG9sZFZhbHVlICE9PSB1bmRlZmluZWQgfHwgdGhpcy4jd20uY29udGFpbnMoaWQsIGF0dHIpKSB7XG4gICAgICAgIGxvZy5hcHBlbmRSZXRyYWN0KGlkLCBhdHRyLCBvbGRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuI3dtLmluc2VydChpZCwgYXR0ciwgdmFsdWUpO1xuICAgIGlmIChzaG91bGRMb2cpIGxvZy5hcHBlbmRJbnNlcnQoaWQsIGF0dHIsIHZhbHVlKTtcbiAgICBpZiAodGhpcy4jb3B0cy5hdXRvRmlyZSkgdGhpcy5maXJlUnVsZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyYWN0IGEgZmFjdC4gSWYgYXV0b0ZpcmUsIHRyaWdnZXJzIGZpcmVSdWxlcygpLlxuICAgKlxuICAgKiBXaGVuIGFuIHtAbGluayBFdmVudExvZ30gaXMgYXR0YWNoZWQsIHRoZSBwcmV2aW91cyB2YWx1ZSBpcyByZWFkXG4gICAqIGZyb20gV00gYmVmb3JlIHRoZSByZXRyYWN0aW9uIGFuZCByZWNvcmRlZCBvbiB0aGUgZXZlbnQgc28gcmVwbGF5XG4gICAqIGNhbiByZWNvbnN0cnVjdCB0aGUgbWlzc2luZyBmYWN0LiBSZXRyYWN0aW5nIGEgbm9uLWV4aXN0ZW50IGZhY3RcbiAgICogaXMgYSBuby1vcCBhbmQgaXMgbm90IGxvZ2dlZC5cbiAgICovXG4gIHJldHJhY3QoaWQ6IEVudGl0eUlkLCBhdHRyOiBBdHRyS2V5KTogdm9pZCB7XG4gICAgY29uc3QgbG9nID0gdGhpcy4jZXZlbnRMb2c7XG4gICAgY29uc3Qgc2hvdWxkTG9nID0gbG9nICE9PSB1bmRlZmluZWQgJiYgKGlkIGFzIG51bWJlcikgPj0gMDtcbiAgICBsZXQgb2xkVmFsdWU6IEZhY3RWYWx1ZSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZXhpc3RlZCA9IGZhbHNlO1xuICAgIGlmIChzaG91bGRMb2cpIHtcbiAgICAgIGV4aXN0ZWQgPSB0aGlzLiN3bS5jb250YWlucyhpZCwgYXR0cik7XG4gICAgICBpZiAoZXhpc3RlZCkgb2xkVmFsdWUgPSB0aGlzLiN3bS5nZXQoaWQsIGF0dHIpO1xuICAgIH1cbiAgICB0aGlzLiN3bS5yZXRyYWN0KGlkLCBhdHRyKTtcbiAgICBpZiAoc2hvdWxkTG9nICYmIGV4aXN0ZWQpIGxvZy5hcHBlbmRSZXRyYWN0KGlkLCBhdHRyLCBvbGRWYWx1ZSk7XG4gICAgaWYgKHRoaXMuI29wdHMuYXV0b0ZpcmUpIHRoaXMuZmlyZVJ1bGVzKCk7XG4gIH1cblxuICAvKiogR2V0IGZhY3QgdmFsdWUuICovXG4gIGdldChpZDogRW50aXR5SWQsIGF0dHI6IEF0dHJLZXkpOiBGYWN0VmFsdWUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiN3bS5nZXQoaWQsIGF0dHIpO1xuICB9XG5cbiAgLyoqIENoZWNrIGZhY3QgZXhpc3RlbmNlLiAqL1xuICBjb250YWlucyhpZDogRW50aXR5SWQsIGF0dHI6IEF0dHJLZXkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jd20uY29udGFpbnMoaWQsIGF0dHIpO1xuICB9XG5cbiAgLyoqIFJldHVybiBhbGwgZmFjdHMgc29ydGVkIFtpZCBhc2MsIGF0dHIgYXNjXS4gKi9cbiAgYWxsRmFjdHMoKTogUmV0dXJuVHlwZTxXb3JraW5nTWVtb3J5W1wiYWxsRmFjdHNcIl0+IHtcbiAgICByZXR1cm4gdGhpcy4jd20uYWxsRmFjdHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIHJ1bGUgd2l0aCB0aGUgc2Vzc2lvbi5cbiAgICogQWNjZXB0cyBhIFJ1bGVEZWZpbml0aW9uIHByb2R1Y2VkIGJ5IGRlZmluZVJ1bGUoKSAoc2VlIGJ1aWxkZXIudHMpLlxuICAgKlxuICAgKiBFYWNoIHJlZ2lzdHJhdGlvbiBpcyBhc3NpZ25lZCBhIHplcm8tYmFzZWQgYGFkZGVkQXRgIGluZGV4LCBleHBvc2VkXG4gICAqIHZpYSB7QGxpbmsgX2dldE9yZGVyYWJsZVJ1bGVzfSBmb3IgdGhlIGNvbmZsaWN0LXJlc29sdXRpb24gc29ydFxuICAgKiAoc2VlIGNvbmZsaWN0LnRzLCBTUEVDLm1kIMKnQ29uZmxpY3QgUmVzb2x1dGlvbikuXG4gICAqL1xuICBhZGQocnVsZTogUnVsZURlZmluaXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLiNydWxlcy5wdXNoKHsgcnVsZSwgYWRkZWRBdDogdGhpcy4jcnVsZXMubGVuZ3RoIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhY2thZ2UtaW50ZXJuYWwgYWNjZXNzb3IgcmV0dXJuaW5nIHJlZ2lzdGVyZWQgcnVsZXMgaW4gYSBzaGFwZVxuICAgKiBjb21wYXRpYmxlIHdpdGgge0BsaW5rIE9yZGVyYWJsZVJ1bGV9IChpLmUuIHdpdGggYGFkZGVkQXRgIGF0dGFjaGVkKS5cbiAgICpcbiAgICogVXNlZCBieSB0aGUgYWdlbmRhL2JldGEgbmV0d29yayB0byBidWlsZCB7QGxpbmsgQWN0aXZhdGlvbn0gdmFsdWVzXG4gICAqIHRoYXQgY2FuIGJlIHBhc3NlZCB0byB7QGxpbmsgb3JkZXJBY3RpdmF0aW9uc30uIE5vdCBleHBvcnRlZCBmcm9tXG4gICAqIHRoZSBwYWNrYWdlIGluZGV4IOKAlCBjb25zdW1lcnMgc2hvdWxkIGdvIHRocm91Z2ggYGZpcmVSdWxlcygpYC5cbiAgICovXG4gIF9nZXRPcmRlcmFibGVSdWxlcygpOiByZWFkb25seSBPcmRlcmFibGVSdWxlW10ge1xuICAgIHJldHVybiB0aGlzLiNydWxlcy5tYXAoKHsgcnVsZSwgYWRkZWRBdCB9KSA9PiAoe1xuICAgICAgbmFtZTogcnVsZS5uYW1lLFxuICAgICAgc2FsaWVuY2U6IHJ1bGUuc2FsaWVuY2UsXG4gICAgICBjb25kaXRpb25zOiBydWxlLmNvbmRpdGlvbnMsXG4gICAgICBoYW5kbGVyOiBydWxlLmhhbmRsZXIsXG4gICAgICBhZGRlZEF0LFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlIGFsbCBwZW5kaW5nIHJ1bGUgYWN0aXZhdGlvbnMgaW4gZGV0ZXJtaW5pc3RpYyBvcmRlci5cbiAgICogUmV0dXJucyB0aGUgY291bnQgb2YgcnVsZSBmaXJpbmdzLlxuICAgKiBQZXIgU1BFQy5tZCDCp0NvbmZsaWN0IFJlc29sdXRpb246IHNhbGllbmNlIGRlc2Mg4oaSIHNwZWNpZmljaXR5IGRlc2Mg4oaSIGluc2VydGlvbiBvcmRlciBhc2MuXG4gICAqIFBlciBTUEVDLm1kIMKnQ3ljbGUgRGV0ZWN0aW9uOiB0aHJvd3MgUmVjdXJzaW9uTGltaXRFeGNlZWRlZEVycm9yIHdoZW4gZGVwdGggZXhjZWVkcyBsaW1pdC5cbiAgICogQSBsaW1pdCBvZiAwIGRpc2FibGVzIHRoZSBjaGVjay5cbiAgICovXG4gIGZpcmVSdWxlcyhvcHRzPzogeyByZWN1cnNpb25MaW1pdD86IG51bWJlciB9KTogbnVtYmVyIHtcbiAgICBjb25zdCBsaW1pdCA9IG9wdHM/LnJlY3Vyc2lvbkxpbWl0ID8/IHRoaXMuI29wdHMucmVjdXJzaW9uTGltaXQ7XG4gICAgaWYgKGxpbWl0ID4gMCAmJiB0aGlzLl9maXJlRGVwdGggPj0gbGltaXQpIHtcbiAgICAgIHRocm93IG5ldyBSZWN1cnNpb25MaW1pdEV4Y2VlZGVkRXJyb3IodGhpcy5fZmlyZURlcHRoLCBbXSk7XG4gICAgfVxuICAgIHRoaXMuX2ZpcmVEZXB0aCsrO1xuICAgIHRyeSB7XG4gICAgICAvLyBTdHViOiBubyBwcm9kdWN0aW9uIG5vZGVzIHdpcmVkIHlldCAoUGhhc2UgMS43KylcbiAgICAgIC8vIFJldHVybnMgMCB1bnRpbCBiZXRhIG5ldHdvcmsgKyBwcm9kdWN0aW9uIG5vZGVzIGFyZSBpbnRlZ3JhdGVkLlxuICAgICAgcmV0dXJuIDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX2ZpcmVEZXB0aC0tO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBFeHBvc2UgQWxwaGFOZXR3b3JrIGZvciB3aXJpbmcgYnkgYmV0YS9qb2luIG5vZGVzIChwYWNrYWdlLWludGVybmFsKS4gKi9cbiAgX2dldEFscGhhKCk6IEFscGhhTmV0d29yayB7XG4gICAgcmV0dXJuIHRoaXMuI2FscGhhO1xuICB9XG5cbiAgLyoqIEV4cG9zZSBXb3JraW5nTWVtb3J5IGZvciB3aXJpbmcgYnkgcHJvZHVjdGlvbiBub2RlcyAocGFja2FnZS1pbnRlcm5hbCkuICovXG4gIF9nZXRXTSgpOiBXb3JraW5nTWVtb3J5IHtcbiAgICByZXR1cm4gdGhpcy4jd207XG4gIH1cbn1cbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9yZXRlL2Rpc3Qvc2Vzc2lvbi5qcyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/4bb62efd20e3dc4ba3eddfb4cfac81a49cf1054c b/7xOfJqsDU787fe61oSCq1/web/4bb62efd20e3dc4ba3eddfb4cfac81a49cf1054c deleted file mode 100644 index f4ce017..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/4bb62efd20e3dc4ba3eddfb4cfac81a49cf1054c +++ /dev/null @@ -1,94 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/rules/primitives.ts", {"importedNames":["rookCandidates","bishopCandidates","queenCandidates","knightCandidates","kingCandidates","pawnSingleAdvance","pawnDoubleAdvance","pawnCaptureSqares"]}); - - - - - - - - - -(0,__vite_ssr_import_0__.describe)("rookCandidates", () => { - (0,__vite_ssr_import_0__.it)("rook at a1 (0): right ray has 7 squares, others are bounded", () => { - const rays = (0,__vite_ssr_import_1__.rookCandidates)(0); - (0,__vite_ssr_import_0__.expect)(rays).toHaveLength(4); - (0,__vite_ssr_import_0__.expect)(rays[0]).toHaveLength(7); - (0,__vite_ssr_import_0__.expect)(rays[1]).toHaveLength(0); - (0,__vite_ssr_import_0__.expect)(rays[2]).toHaveLength(7); - (0,__vite_ssr_import_0__.expect)(rays[3]).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("rook at e4 (28): all 4 rays non-empty", () => { - const rays = (0,__vite_ssr_import_1__.rookCandidates)(28); - (0,__vite_ssr_import_0__.expect)(rays.every((r) => r.length > 0)).toBe(true); - }); -}); -(0,__vite_ssr_import_0__.describe)("bishopCandidates", () => { - (0,__vite_ssr_import_0__.it)("bishop at a1 (0): only one diagonal (up-right)", () => { - const rays = (0,__vite_ssr_import_1__.bishopCandidates)(0); - (0,__vite_ssr_import_0__.expect)(rays[0]).toHaveLength(7); - (0,__vite_ssr_import_0__.expect)(rays[1]).toHaveLength(0); - (0,__vite_ssr_import_0__.expect)(rays[2]).toHaveLength(0); - (0,__vite_ssr_import_0__.expect)(rays[3]).toHaveLength(0); - }); -}); -(0,__vite_ssr_import_0__.describe)("queenCandidates", () => { - (0,__vite_ssr_import_0__.it)("queen at e4 (28): 8 rays total", () => { - const rays = (0,__vite_ssr_import_1__.queenCandidates)(28); - (0,__vite_ssr_import_0__.expect)(rays).toHaveLength(8); - }); -}); -(0,__vite_ssr_import_0__.describe)("knightCandidates", () => { - (0,__vite_ssr_import_0__.it)("knight at e4 (28) has 8 moves", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.knightCandidates)(28)).toHaveLength(8); - }); - (0,__vite_ssr_import_0__.it)("knight at a1 (0) has 2 moves", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.knightCandidates)(0)).toHaveLength(2); - }); -}); -(0,__vite_ssr_import_0__.describe)("kingCandidates", () => { - (0,__vite_ssr_import_0__.it)("king at e4 (28) has 8 moves", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.kingCandidates)(28)).toHaveLength(8); - }); - (0,__vite_ssr_import_0__.it)("king at a1 (0) has 3 moves", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.kingCandidates)(0)).toHaveLength(3); - }); -}); -(0,__vite_ssr_import_0__.describe)("pawnSingleAdvance", () => { - (0,__vite_ssr_import_0__.it)("white pawn at e2 (12) advances to e3 (20)", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.pawnSingleAdvance)(12, "white")).toBe(20); - }); - (0,__vite_ssr_import_0__.it)("black pawn at e7 (52) advances to e6 (44)", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.pawnSingleAdvance)(52, "black")).toBe(44); - }); - (0,__vite_ssr_import_0__.it)("white pawn at rank8 returns null", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.pawnSingleAdvance)(60, "white")).toBeNull(); - }); -}); -(0,__vite_ssr_import_0__.describe)("pawnDoubleAdvance", () => { - (0,__vite_ssr_import_0__.it)("white pawn at e2 (12) can double-advance to e4 (28)", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.pawnDoubleAdvance)(12, "white")).toBe(28); - }); - (0,__vite_ssr_import_0__.it)("white pawn at e3 (20) cannot double-advance", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.pawnDoubleAdvance)(20, "white")).toBeNull(); - }); - (0,__vite_ssr_import_0__.it)("black pawn at e7 (52) can double-advance to e5 (36)", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.pawnDoubleAdvance)(52, "black")).toBe(36); - }); -}); -(0,__vite_ssr_import_0__.describe)("pawnCaptureSquares", () => { - (0,__vite_ssr_import_0__.it)("white pawn at e4 (28) can capture on d5 (35) and f5 (37)", () => { - const sq = (0,__vite_ssr_import_1__.pawnCaptureSqares)(28, "white"); - (0,__vite_ssr_import_0__.expect)(sq).toContain(35); - (0,__vite_ssr_import_0__.expect)(sq).toContain(37); - (0,__vite_ssr_import_0__.expect)(sq).toHaveLength(2); - }); - (0,__vite_ssr_import_0__.it)("white pawn at a4 (24) can only capture right (b5=33)", () => { - const sq = (0,__vite_ssr_import_1__.pawnCaptureSqares)(24, "white"); - (0,__vite_ssr_import_0__.expect)(sq).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(sq[0]).toBe(33); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QixJQUFJLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUFBLEVBQ2hELENBQUM7QUFDSCxDQUFDO0dBRUQsZ0NBQVMsc0JBQXNCLE1BQU07QUFDbkMsK0JBQUcsNERBQTRELE1BQU07QUFDbkUsVUFBTSxRQUFLLHlDQUFrQixJQUFJLE9BQU87QUFDeEMscUNBQU8sRUFBRSxFQUFFLFVBQVUsRUFBRTtBQUN2QixxQ0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFO0FBQ3ZCLHFDQUFPLEVBQUUsRUFBRSxhQUFhLENBQUM7QUFBQSxFQUMzQixDQUFDO0FBQ0QsK0JBQUcsd0RBQXdELE1BQU07QUFDL0QsVUFBTSxRQUFLLHlDQUFrQixJQUFJLE9BQU87QUFDeEMscUNBQU8sRUFBRSxFQUFFLGFBQWEsQ0FBQztBQUN6QixxQ0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUFBLEVBQ3ZCLENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJwcmltaXRpdmVzLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQge1xuICByb29rQ2FuZGlkYXRlcywgYmlzaG9wQ2FuZGlkYXRlcywgcXVlZW5DYW5kaWRhdGVzLFxuICBrbmlnaHRDYW5kaWRhdGVzLCBraW5nQ2FuZGlkYXRlcyxcbiAgcGF3blNpbmdsZUFkdmFuY2UsIHBhd25Eb3VibGVBZHZhbmNlLCBwYXduQ2FwdHVyZVNxYXJlcyxcbn0gZnJvbSBcIi4vcHJpbWl0aXZlcy5qc1wiO1xuXG5kZXNjcmliZShcInJvb2tDYW5kaWRhdGVzXCIsICgpID0+IHtcbiAgaXQoXCJyb29rIGF0IGExICgwKTogcmlnaHQgcmF5IGhhcyA3IHNxdWFyZXMsIG90aGVycyBhcmUgYm91bmRlZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmF5cyA9IHJvb2tDYW5kaWRhdGVzKDApO1xuICAgIGV4cGVjdChyYXlzKS50b0hhdmVMZW5ndGgoNCk7XG4gICAgZXhwZWN0KHJheXNbMF0pLnRvSGF2ZUxlbmd0aCg3KTsgLy8gcmlnaHQ6IGIxLWgxXG4gICAgZXhwZWN0KHJheXNbMV0pLnRvSGF2ZUxlbmd0aCgwKTsgLy8gbGVmdDogbm90aGluZyAoYS1maWxlKVxuICAgIGV4cGVjdChyYXlzWzJdKS50b0hhdmVMZW5ndGgoNyk7IC8vIHVwOiBhMi1hOFxuICAgIGV4cGVjdChyYXlzWzNdKS50b0hhdmVMZW5ndGgoMCk7IC8vIGRvd246IG5vdGhpbmcgKHJhbmsxKVxuICB9KTtcbiAgaXQoXCJyb29rIGF0IGU0ICgyOCk6IGFsbCA0IHJheXMgbm9uLWVtcHR5XCIsICgpID0+IHtcbiAgICBjb25zdCByYXlzID0gcm9va0NhbmRpZGF0ZXMoMjgpO1xuICAgIGV4cGVjdChyYXlzLmV2ZXJ5KHIgPT4gci5sZW5ndGggPiAwKSkudG9CZSh0cnVlKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJiaXNob3BDYW5kaWRhdGVzXCIsICgpID0+IHtcbiAgaXQoXCJiaXNob3AgYXQgYTEgKDApOiBvbmx5IG9uZSBkaWFnb25hbCAodXAtcmlnaHQpXCIsICgpID0+IHtcbiAgICBjb25zdCByYXlzID0gYmlzaG9wQ2FuZGlkYXRlcygwKTtcbiAgICBleHBlY3QocmF5c1swXSkudG9IYXZlTGVuZ3RoKDcpOyAvLyB1cC1yaWdodCBkaWFnb25hbDogYjItaDhcbiAgICBleHBlY3QocmF5c1sxXSkudG9IYXZlTGVuZ3RoKDApOyAvLyBkb3duLXJpZ2h0OiBub3RoaW5nXG4gICAgZXhwZWN0KHJheXNbMl0pLnRvSGF2ZUxlbmd0aCgwKTsgLy8gdXAtbGVmdDogbm90aGluZ1xuICAgIGV4cGVjdChyYXlzWzNdKS50b0hhdmVMZW5ndGgoMCk7IC8vIGRvd24tbGVmdDogbm90aGluZ1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInF1ZWVuQ2FuZGlkYXRlc1wiLCAoKSA9PiB7XG4gIGl0KFwicXVlZW4gYXQgZTQgKDI4KTogOCByYXlzIHRvdGFsXCIsICgpID0+IHtcbiAgICBjb25zdCByYXlzID0gcXVlZW5DYW5kaWRhdGVzKDI4KTtcbiAgICBleHBlY3QocmF5cykudG9IYXZlTGVuZ3RoKDgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImtuaWdodENhbmRpZGF0ZXNcIiwgKCkgPT4ge1xuICBpdChcImtuaWdodCBhdCBlNCAoMjgpIGhhcyA4IG1vdmVzXCIsICgpID0+IHtcbiAgICBleHBlY3Qoa25pZ2h0Q2FuZGlkYXRlcygyOCkpLnRvSGF2ZUxlbmd0aCg4KTtcbiAgfSk7XG4gIGl0KFwia25pZ2h0IGF0IGExICgwKSBoYXMgMiBtb3Zlc1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KGtuaWdodENhbmRpZGF0ZXMoMCkpLnRvSGF2ZUxlbmd0aCgyKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJraW5nQ2FuZGlkYXRlc1wiLCAoKSA9PiB7XG4gIGl0KFwia2luZyBhdCBlNCAoMjgpIGhhcyA4IG1vdmVzXCIsICgpID0+IHtcbiAgICBleHBlY3Qoa2luZ0NhbmRpZGF0ZXMoMjgpKS50b0hhdmVMZW5ndGgoOCk7XG4gIH0pO1xuICBpdChcImtpbmcgYXQgYTEgKDApIGhhcyAzIG1vdmVzXCIsICgpID0+IHtcbiAgICBleHBlY3Qoa2luZ0NhbmRpZGF0ZXMoMCkpLnRvSGF2ZUxlbmd0aCgzKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJwYXduU2luZ2xlQWR2YW5jZVwiLCAoKSA9PiB7XG4gIGl0KFwid2hpdGUgcGF3biBhdCBlMiAoMTIpIGFkdmFuY2VzIHRvIGUzICgyMClcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChwYXduU2luZ2xlQWR2YW5jZSgxMiwgXCJ3aGl0ZVwiKSkudG9CZSgyMCk7XG4gIH0pO1xuICBpdChcImJsYWNrIHBhd24gYXQgZTcgKDUyKSBhZHZhbmNlcyB0byBlNiAoNDQpXCIsICgpID0+IHtcbiAgICBleHBlY3QocGF3blNpbmdsZUFkdmFuY2UoNTIsIFwiYmxhY2tcIikpLnRvQmUoNDQpO1xuICB9KTtcbiAgaXQoXCJ3aGl0ZSBwYXduIGF0IHJhbms4IHJldHVybnMgbnVsbFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHBhd25TaW5nbGVBZHZhbmNlKDYwLCBcIndoaXRlXCIpKS50b0JlTnVsbCgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInBhd25Eb3VibGVBZHZhbmNlXCIsICgpID0+IHtcbiAgaXQoXCJ3aGl0ZSBwYXduIGF0IGUyICgxMikgY2FuIGRvdWJsZS1hZHZhbmNlIHRvIGU0ICgyOClcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChwYXduRG91YmxlQWR2YW5jZSgxMiwgXCJ3aGl0ZVwiKSkudG9CZSgyOCk7XG4gIH0pO1xuICBpdChcIndoaXRlIHBhd24gYXQgZTMgKDIwKSBjYW5ub3QgZG91YmxlLWFkdmFuY2VcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChwYXduRG91YmxlQWR2YW5jZSgyMCwgXCJ3aGl0ZVwiKSkudG9CZU51bGwoKTtcbiAgfSk7XG4gIGl0KFwiYmxhY2sgcGF3biBhdCBlNyAoNTIpIGNhbiBkb3VibGUtYWR2YW5jZSB0byBlNSAoMzYpXCIsICgpID0+IHtcbiAgICBleHBlY3QocGF3bkRvdWJsZUFkdmFuY2UoNTIsIFwiYmxhY2tcIikpLnRvQmUoMzYpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInBhd25DYXB0dXJlU3F1YXJlc1wiLCAoKSA9PiB7XG4gIGl0KFwid2hpdGUgcGF3biBhdCBlNCAoMjgpIGNhbiBjYXB0dXJlIG9uIGQ1ICgzNSkgYW5kIGY1ICgzNylcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNxID0gcGF3bkNhcHR1cmVTcWFyZXMoMjgsIFwid2hpdGVcIik7XG4gICAgZXhwZWN0KHNxKS50b0NvbnRhaW4oMzUpOyAvLyBkNVxuICAgIGV4cGVjdChzcSkudG9Db250YWluKDM3KTsgLy8gZjVcbiAgICBleHBlY3Qoc3EpLnRvSGF2ZUxlbmd0aCgyKTtcbiAgfSk7XG4gIGl0KFwid2hpdGUgcGF3biBhdCBhNCAoMjQpIGNhbiBvbmx5IGNhcHR1cmUgcmlnaHQgKGI1PTMzKVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc3EgPSBwYXduQ2FwdHVyZVNxYXJlcygyNCwgXCJ3aGl0ZVwiKTtcbiAgICBleHBlY3Qoc3EpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICBleHBlY3Qoc3FbMF0pLnRvQmUoMzMpO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL2NoZXNzL3NyYy9ydWxlcy9wcmltaXRpdmVzLnRlc3QudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/4c002fffaadee63137d687cb8330b59aa34002e2 b/7xOfJqsDU787fe61oSCq1/web/4c002fffaadee63137d687cb8330b59aa34002e2 deleted file mode 100644 index 93e8986..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/4c002fffaadee63137d687cb8330b59aa34002e2 +++ /dev/null @@ -1,70 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "registerMoveGenerator", { enumerable: true, configurable: true, get(){ try { return registerMoveGenerator } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "clearMoveGeneratorRegistry", { enumerable: true, configurable: true, get(){ try { return clearMoveGeneratorRegistry } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "getLegalMovesForColor", { enumerable: true, configurable: true, get(){ try { return getLegalMovesForColor } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "getLegalMovesForCurrentTurn", { enumerable: true, configurable: true, get(){ try { return getLegalMovesForCurrentTurn } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "isLegalMove", { enumerable: true, configurable: true, get(){ try { return isLegalMove } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "applyMove", { enumerable: true, configurable: true, get(){ try { return applyMove } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/schema.ts", {"importedNames":["GAME_ENTITY"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/rules/board-queries.ts", {"importedNames":["getPieceColor","getPieceAt"]});const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/rules/capture.ts", {"importedNames":["isPieceAttr"]}); -const moveGeneratorRegistry = /* @__PURE__ */ new Map(); -function registerMoveGenerator(type, fn) { - moveGeneratorRegistry.set(type, fn); -}; -function clearMoveGeneratorRegistry() { - moveGeneratorRegistry.clear(); -}; - -function getLegalMovesForColor(session, color) { - const facts = session.allFacts(); - const moves = []; - for (const f of facts) { - if (f.attr !== "PieceType" || f.id <= 0) continue; - const pieceId = f.id; - const pieceColor = session.get(pieceId, "Color"); - if (pieceColor !== color) continue; - const generator = moveGeneratorRegistry.get(f.value); - if (generator === void 0) continue; - moves.push(...generator(session, pieceId)); - }; - return moves; -}; -function getLegalMovesForCurrentTurn(session) { - const turn = session.get((0,__vite_ssr_import_0__.GAME_ENTITY), "Turn"); - const color = turn ?? "white"; - return getLegalMovesForColor(session, color); -}; -function isLegalMove(session, move) { - const color = (0,__vite_ssr_import_1__.getPieceColor)(session, move.pieceId); - if (color === null) return false; - const legal = getLegalMovesForColor(session, color); - return legal.some( - (m) => m.pieceId === move.pieceId && m.from === move.from && m.to === move.to - ); -}; -function applyMove(session, move) { - if (move.isCapture) { - const capturedId = (0,__vite_ssr_import_1__.getPieceAt)(session, move.to); - if (capturedId !== null && capturedId !== move.pieceId) { - const attrs = session.allFacts().filter((f) => f.id === capturedId && (0,__vite_ssr_import_2__.isPieceAttr)(f.attr)).map((f) => f.attr); - for (const attr of attrs) { - if (session.contains(capturedId, attr)) { - session.retract(capturedId, attr); - } - } - } - }; - session.insert(move.pieceId, "Position", move.to); - session.insert(move.pieceId, "HasMoved", true); - const currentTurn = session.get((0,__vite_ssr_import_0__.GAME_ENTITY), "Turn") ?? "white"; - const nextTurn = currentTurn === "white" ? "black" : "white"; - session.insert((0,__vite_ssr_import_0__.GAME_ENTITY), "Turn", nextTurn); - const halfmove = (session.get((0,__vite_ssr_import_0__.GAME_ENTITY), "HalfmoveClock") ?? 0) + 1; - session.insert((0,__vite_ssr_import_0__.GAME_ENTITY), "HalfmoveClock", halfmove); - if (currentTurn === "black") { - const fullmove = (session.get((0,__vite_ssr_import_0__.GAME_ENTITY), "FullmoveNumber") ?? 1) + 1; - session.insert((0,__vite_ssr_import_0__.GAME_ENTITY), "FullmoveNumber", fullmove); - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBbUNBO0FBRUEseUlBaUNBO0FBakJBLE1BQU0sd0JBQXdCLG9CQUFJLElBQXNDO0FBR2pFLFNBQVMsc0JBQ2QsTUFDQSxJQUNNO0FBQ04sd0JBQXNCLElBQUksTUFBTSxFQUFFO0FBQ3BDO0FBR08sU0FBUyw2QkFBbUM7QUFDakQsd0JBQXNCLE1BQU07QUFDOUI7O0FBV08sU0FBUyxzQkFDZCxTQUNBLE9BQ2E7QUFDYixRQUFNLFFBQVEsUUFBUSxTQUFTO0FBQy9CLFFBQU0sUUFBcUIsQ0FBQztBQUU1QixhQUFXLEtBQUssT0FBTztBQUVyQixRQUFJLEVBQUUsU0FBUyxlQUFnQixFQUFFLE1BQWlCLEVBQUc7QUFFckQsVUFBTSxVQUFVLEVBQUU7QUFHbEIsVUFBTSxhQUFhLFFBQVEsSUFBSSxTQUFTLE9BQU87QUFDL0MsUUFBSSxlQUFlLE1BQU87QUFFMUIsVUFBTSxZQUFZLHNCQUFzQixJQUFJLEVBQUUsS0FBa0I7QUFDaEUsUUFBSSxjQUFjLE9BQVc7QUFFN0IsVUFBTSxLQUFLLEdBQUcsVUFBVSxTQUFTLE9BQU8sQ0FBQztBQUFBLEVBQzNDO0FBRUEsU0FBTztBQUNUO0FBR08sU0FBUyw0QkFBNEIsU0FBK0I7QUFDekUsUUFBTSxPQUFPLFFBQVEsT0FBSSxvQ0FBYSxNQUFNO0FBQzVDLFFBQU0sUUFBcUIsUUFBUTtBQUNuQyxTQUFPLHNCQUFzQixTQUFTLEtBQUs7QUFDN0M7QUFTTyxTQUFTLFlBQVksU0FBa0IsTUFBMEI7QUFDdEUsUUFBTSxXQUFRLHFDQUFjLFNBQVMsS0FBSyxPQUFPO0FBQ2pELE1BQUksVUFBVSxLQUFNLFFBQU87QUFDM0IsUUFBTSxRQUFRLHNCQUFzQixTQUFTLEtBQUs7QUFDbEQsU0FBTyxNQUFNO0FBQUEsSUFDWCxDQUFDLE1BQ0MsRUFBRSxZQUFZLEtBQUssV0FBVyxFQUFFLFNBQVMsS0FBSyxRQUFRLEVBQUUsT0FBTyxLQUFLO0FBQUEsRUFDeEU7QUFDRjtBQWVPLFNBQVMsVUFBVSxTQUFrQixNQUF1QjtBQUVqRSxNQUFJLEtBQUssV0FBVztBQUNsQixVQUFNLGdCQUFhLGtDQUFXLFNBQVMsS0FBSyxFQUFFO0FBQzlDLFFBQUksZUFBZSxRQUFRLGVBQWUsS0FBSyxTQUFTO0FBS3RELFlBQU0sUUFBUSxRQUNYLFNBQVMsRUFDVCxPQUFPLE9BQUssRUFBRSxPQUFPLGlCQUFjLG1DQUFZLEVBQUUsSUFBSSxDQUFDLEVBQ3RELElBQUksT0FBSyxFQUFFLElBQUk7QUFDbEIsaUJBQVcsUUFBUSxPQUFPO0FBQ3hCLFlBQUksUUFBUSxTQUFTLFlBQVksSUFBSSxHQUFHO0FBQ3RDLGtCQUFRLFFBQVEsWUFBWSxJQUFJO0FBQUEsUUFDbEM7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFHQSxVQUFRLE9BQU8sS0FBSyxTQUFTLFlBQVksS0FBSyxFQUFFO0FBQ2hELFVBQVEsT0FBTyxLQUFLLFNBQVMsWUFBWSxJQUFJO0FBRzdDLFFBQU0sY0FBZSxRQUFRLE9BQUksb0NBQWEsTUFBTSxLQUFLO0FBQ3pELFFBQU0sV0FBdUIsZ0JBQWdCLFVBQVUsVUFBVTtBQUNqRSxVQUFRLFVBQU8sb0NBQWEsUUFBUSxRQUFRO0FBRTVDLFFBQU0sWUFDRixRQUFRLE9BQUksb0NBQWEsZUFBZSxLQUE0QixLQUFLO0FBQzdFLFVBQVEsVUFBTyxvQ0FBYSxpQkFBaUIsUUFBUTtBQUVyRCxNQUFJLGdCQUFnQixTQUFTO0FBQzNCLFVBQU0sWUFDRixRQUFRLE9BQUksb0NBQWEsZ0JBQWdCLEtBQTRCLEtBQUs7QUFDOUUsWUFBUSxVQUFPLG9DQUFhLGtCQUFrQixRQUFRO0FBQUEsRUFDeEQ7QUFDRiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsidHVybi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFR1cm4gb3JkZXIgKyBtb3ZlIGxlZ2FsaXR5IGludGVncmF0aW9uIChQMi4xMykuXG4gKlxuICogV2lyZXMgcGVyLXBpZWNlIG1vdmUgZ2VuZXJhdG9ycyAocGF3bi50cywga25pZ2h0LnRzLCBzbGlkaW5nLnRzLCBraW5nLnRzKVxuICogaW50byBhIHNpbmdsZSBlbnRyeSBwb2ludCB2aWEgYSByZWdpc3RyeSwgYW5kIGltcGxlbWVudHMgdGhlIG1vdmUtXG4gKiBhcHBsaWNhdGlvbiBzaWRlLWVmZmVjdCAoUG9zaXRpb24gdXBkYXRlLCBUdXJuIGZsaXAsIGNsb2NrIGJvb2trZWVwaW5nLFxuICogY2FwdHVyZSBoYW5kbGluZykuXG4gKlxuICogRGVzaWduIG5vdGVzXG4gKiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAqICAtIFdlIHVzZSBhICpyZWdpc3RyeSogb2YgR2V0TGVnYWxNb3Zlc0ZvclBpZWNlIGZ1bmN0aW9ucyByYXRoZXIgdGhhblxuICogICAgZGlyZWN0IGltcG9ydHMgc28gdGhhdDpcbiAqICAgICAgKGEpIHR1cm4udHMgaGFzIHplcm8gY29tcGlsZS10aW1lIGRlcGVuZGVuY3kgb24gaW5kaXZpZHVhbCBwaWVjZVxuICogICAgICAgICAgbW9kdWxlcyAodGhleSBtYXkgbm90IHlldCBleGlzdCBkdXJpbmcgcGFyYWxsZWwgdGFzayBleGVjdXRpb24pO1xuICogICAgICAoYikgY3VzdG9tIHJ1bGUgcHJlc2V0cyAoUlVMRVMubWQpIGNhbiBzd2FwIGEgZ2VuZXJhdG9yIGluIOKAlCBlLmcuIGFcbiAqICAgICAgICAgIFwia25pZ2h0LXJpZGVyXCIgcnVsZXNldCByZXBsYWNlcyB0aGUga25pZ2h0IGVudHJ5O1xuICogICAgICAoYykgdGVzdHMgY2FuIHJlZ2lzdGVyIG1pbmltYWwgc3R1YnMgKHNlZSB0dXJuLnRlc3QudHMpLlxuICpcbiAqICAtIGBhcHBseU1vdmVgIHRyZWF0cyBgc2Vzc2lvbi5pbnNlcnRgIGFzICp1cHNlcnQqIChzZWUgd20udHMpOiBpbnNlcnRpbmdcbiAqICAgIGBQb3NpdGlvbmAgYWdhaW4gb3ZlcndyaXRlcyB0aGUgcHJldmlvdXMgdmFsdWUgYW5kIGZpcmVzIHJldHJhY3TihpJpbnNlcnRcbiAqICAgIGxpc3RlbmVycywgc28gcnVsZXMgZG93bnN0cmVhbSBjYW4gb2JzZXJ2ZSB0aGUgdHJhbnNpdGlvbi5cbiAqXG4gKiAgLSBDYXB0dXJlIHNlbWFudGljczogd2UgcmV0cmFjdCBBTEwga25vd24gcGllY2UtbGV2ZWwgYXR0cnMgb2YgdGhlXG4gKiAgICBjYXB0dXJlZCBlbnRpdHkgKFBpZWNlVHlwZSwgQ29sb3IsIFBvc2l0aW9uLCBIYXNNb3ZlZCwgSHApLiBXZSBkbyBOT1RcbiAqICAgIHRvdWNoIHRoZSBFbnRpdHlJZCBpdHNlbGYg4oCUIG9uY2UgbWludGVkLCBpZHMgYXJlIG5ldmVyIHJldXNlZFxuICogICAgKFNQRUMubWQgwqdJRCBBdXRob3JpdHkpLlxuICpcbiAqIEV4cGxpY2l0bHkgTk9UIGhhbmRsZWQgaGVyZSAoZGVmZXJyZWQpOlxuICogICAtIGNhc3RsaW5nICAgICAgICAg4oaSIFAyLjE1XG4gKiAgIC0gZW4gcGFzc2FudCAgICAgICDihpIgUDIuMTZcbiAqICAgLSBwcm9tb3Rpb24gY2hvaWNlIOKGkiBQMi4xN1xuICogICAtIGNoZWNrIGZpbHRlcmluZyAg4oaSIFAyLjE4XG4gKi9cbmltcG9ydCB0eXBlIHsgU2Vzc2lvbiwgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB0eXBlIHsgUGllY2VDb2xvciwgUGllY2VUeXBlIH0gZnJvbSBcIi4uL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHsgR0FNRV9FTlRJVFkgfSBmcm9tIFwiLi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgdHlwZSB7IExlZ2FsTW92ZSB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBnZXRQaWVjZUNvbG9yLCBnZXRQaWVjZUF0IH0gZnJvbSBcIi4vYm9hcmQtcXVlcmllcy5qc1wiO1xuXG4vKiogU2lnbmF0dXJlIGZvciBhIHBlci1waWVjZS10eXBlIGxlZ2FsLW1vdmUgZ2VuZXJhdG9yLiAqL1xuZXhwb3J0IHR5cGUgR2V0TGVnYWxNb3Zlc0ZvclBpZWNlID0gKFxuICBzZXNzaW9uOiBTZXNzaW9uLFxuICBwaWVjZUlkOiBFbnRpdHlJZCxcbikgPT4gTGVnYWxNb3ZlW107XG5cbi8qKlxuICogUmVnaXN0cnkgb2YgbW92ZSBnZW5lcmF0b3JzIGtleWVkIGJ5IFBpZWNlVHlwZS5cbiAqXG4gKiBQb3B1bGF0ZWQgdmlhIHtAbGluayByZWdpc3Rlck1vdmVHZW5lcmF0b3J9LiBNaXNzaW5nIGVudHJpZXMgY2F1c2UgdGhlXG4gKiBjb3JyZXNwb25kaW5nIHBpZWNlcyB0byBjb250cmlidXRlIHplcm8gbW92ZXMgKHNpbGVudGx5KSDigJQgdGhpcyBpc1xuICogaW50ZW50aW9uYWwgc28gdGhhdCB0dXJuLnRzIHJlbWFpbnMgdXNhYmxlIHdoaWxlIHBlZXIgcGllY2UgbW9kdWxlcyBhcmVcbiAqIHN0aWxsIGJlaW5nIHdyaXR0ZW4gaW4gcGFyYWxsZWwuXG4gKi9cbmNvbnN0IG1vdmVHZW5lcmF0b3JSZWdpc3RyeSA9IG5ldyBNYXA8UGllY2VUeXBlLCBHZXRMZWdhbE1vdmVzRm9yUGllY2U+KCk7XG5cbi8qKiBSZWdpc3RlciAob3IgcmVwbGFjZSkgdGhlIG1vdmUgZ2VuZXJhdG9yIGZvciBhIGdpdmVuIFBpZWNlVHlwZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlck1vdmVHZW5lcmF0b3IoXG4gIHR5cGU6IFBpZWNlVHlwZSxcbiAgZm46IEdldExlZ2FsTW92ZXNGb3JQaWVjZSxcbik6IHZvaWQge1xuICBtb3ZlR2VuZXJhdG9yUmVnaXN0cnkuc2V0KHR5cGUsIGZuKTtcbn1cblxuLyoqIFJlbW92ZSBhbGwgcmVnaXN0ZXJlZCBnZW5lcmF0b3JzLiBQcmltYXJpbHkgZm9yIHRlc3QgaXNvbGF0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyTW92ZUdlbmVyYXRvclJlZ2lzdHJ5KCk6IHZvaWQge1xuICBtb3ZlR2VuZXJhdG9yUmVnaXN0cnkuY2xlYXIoKTtcbn1cblxuLy8gU25hcHNob3QtY29weSBwcmVkaWNhdGUgc2hhcmVkIHdpdGggY2hlY2sudHMgLyBzdGFsZW1hdGUudHMuXG4vLyBTZWUgY2FwdHVyZS50cyBmb3IgdGhlIFwibm90IGdhbWUtbGV2ZWxcIiByYXRpb25hbGUuXG5pbXBvcnQgeyBpc1BpZWNlQXR0ciB9IGZyb20gXCIuL2NhcHR1cmUuanNcIjtcblxuLyoqXG4gKiBHZXQgZXZlcnkgbGVnYWwgbW92ZSBhdmFpbGFibGUgdG8gcGllY2VzIG9mIGBjb2xvcmAgZ2l2ZW4gdGhlIGN1cnJlbnRcbiAqIGJvYXJkIHN0YXRlLiBQaWVjZXMgd2hvc2UgdHlwZSBoYXMgbm8gcmVnaXN0ZXJlZCBnZW5lcmF0b3IgY29udHJpYnV0ZVxuICogbm90aGluZyAoc2VlIG1vZHVsZSBkb2NzdHJpbmcpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGVnYWxNb3Zlc0ZvckNvbG9yKFxuICBzZXNzaW9uOiBTZXNzaW9uLFxuICBjb2xvcjogUGllY2VDb2xvcixcbik6IExlZ2FsTW92ZVtdIHtcbiAgY29uc3QgZmFjdHMgPSBzZXNzaW9uLmFsbEZhY3RzKCk7XG4gIGNvbnN0IG1vdmVzOiBMZWdhbE1vdmVbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgZiBvZiBmYWN0cykge1xuICAgIC8vIFNraXAgZ2FtZS1sZXZlbCBmYWN0cyAoR0FNRV9FTlRJVFkgPSAwKSBhbmQgbm9uLXR5cGUgZmFjdHMuXG4gICAgaWYgKGYuYXR0ciAhPT0gXCJQaWVjZVR5cGVcIiB8fCAoZi5pZCBhcyBudW1iZXIpIDw9IDApIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgcGllY2VJZCA9IGYuaWQ7XG4gICAgLy8gQ29sb3IgbG9va3VwOiBkaXJlY3Qgc2Vzc2lvbi5nZXQgaXMgTygxKSDigJQgY2hlYXBlciB0aGFuIGFub3RoZXJcbiAgICAvLyBmYWN0cy5maW5kKCkgc2NhbiBpbnNpZGUgdGhlIG91dGVyIGxvb3AuXG4gICAgY29uc3QgcGllY2VDb2xvciA9IHNlc3Npb24uZ2V0KHBpZWNlSWQsIFwiQ29sb3JcIik7XG4gICAgaWYgKHBpZWNlQ29sb3IgIT09IGNvbG9yKSBjb250aW51ZTtcblxuICAgIGNvbnN0IGdlbmVyYXRvciA9IG1vdmVHZW5lcmF0b3JSZWdpc3RyeS5nZXQoZi52YWx1ZSBhcyBQaWVjZVR5cGUpO1xuICAgIGlmIChnZW5lcmF0b3IgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG5cbiAgICBtb3Zlcy5wdXNoKC4uLmdlbmVyYXRvcihzZXNzaW9uLCBwaWVjZUlkKSk7XG4gIH1cblxuICByZXR1cm4gbW92ZXM7XG59XG5cbi8qKiBHZXQgYWxsIGxlZ2FsIG1vdmVzIGZvciB0aGUgY29sb3Igd2hvc2UgdHVybiBpdCBjdXJyZW50bHkgaXMuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGVnYWxNb3Zlc0ZvckN1cnJlbnRUdXJuKHNlc3Npb246IFNlc3Npb24pOiBMZWdhbE1vdmVbXSB7XG4gIGNvbnN0IHR1cm4gPSBzZXNzaW9uLmdldChHQU1FX0VOVElUWSwgXCJUdXJuXCIpO1xuICBjb25zdCBjb2xvcjogUGllY2VDb2xvciA9ICh0dXJuID8/IFwid2hpdGVcIikgYXMgUGllY2VDb2xvcjtcbiAgcmV0dXJuIGdldExlZ2FsTW92ZXNGb3JDb2xvcihzZXNzaW9uLCBjb2xvcik7XG59XG5cbi8qKlxuICogSXMgYG1vdmVgIGEgY3VycmVudGx5LWxlZ2FsIG1vdmU/XG4gKlxuICogQSBtb3ZlIGlzIGxlZ2FsIGlmZiBpdCBhcHBlYXJzIGluIHRoZSBsZWdhbC1tb3ZlIGxpc3QgZm9yIHRoZSBtb3ZlcidzXG4gKiBjb2xvci4gV2UgbG9vayB1cCB0aGUgbW92ZXIncyBjb2xvciBmcm9tIFdNIHJhdGhlciB0aGFuIHRydXN0aW5nIHRoZVxuICogY2FsbGVyIOKAlCB0aGlzIHByZXZlbnRzIGNyb3NzLWNvbG9yIFwidHVybiBqdW1waW5nXCIgdmlhIGZvcmdlZCBtb3Zlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGVnYWxNb3ZlKHNlc3Npb246IFNlc3Npb24sIG1vdmU6IExlZ2FsTW92ZSk6IGJvb2xlYW4ge1xuICBjb25zdCBjb2xvciA9IGdldFBpZWNlQ29sb3Ioc2Vzc2lvbiwgbW92ZS5waWVjZUlkKTtcbiAgaWYgKGNvbG9yID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGxlZ2FsID0gZ2V0TGVnYWxNb3Zlc0ZvckNvbG9yKHNlc3Npb24sIGNvbG9yKTtcbiAgcmV0dXJuIGxlZ2FsLnNvbWUoXG4gICAgKG0pID0+XG4gICAgICBtLnBpZWNlSWQgPT09IG1vdmUucGllY2VJZCAmJiBtLmZyb20gPT09IG1vdmUuZnJvbSAmJiBtLnRvID09PSBtb3ZlLnRvLFxuICApO1xufVxuXG4vKipcbiAqIEFwcGx5IGBtb3ZlYCB0byBgc2Vzc2lvbmAgaW4tcGxhY2UuXG4gKlxuICogICAxLiBJZiBgaXNDYXB0dXJlYCwgcmV0cmFjdCBhbGwgcGllY2UtbGV2ZWwgYXR0cnMgb2YgdGhlIHZpY3RpbSBhdCBgdG9gLlxuICogICAyLiBVcGRhdGUgdGhlIG1vdmVyJ3MgUG9zaXRpb24gKHVwc2VydCkgYW5kIHNldCBIYXNNb3ZlZD10cnVlLlxuICogICAzLiBGbGlwIFR1cm4uXG4gKiAgIDQuIEluY3JlbWVudCBIYWxmbW92ZUNsb2NrIChzaW1wbGlmaWVkIOKAlCBwYXduLW1vdmUgLyBjYXB0dXJlIHJlc2V0IGlzXG4gKiAgICAgIGhhbmRsZWQgYXQgdGhlIHJ1bGUgbGF5ZXIgaW4gYSBsYXRlciBwaGFzZSkuXG4gKiAgIDUuIEluY3JlbWVudCBGdWxsbW92ZU51bWJlciBhZnRlciBibGFjaydzIG1vdmUgKEZJREUgY29udmVudGlvbikuXG4gKlxuICogRG9lcyBOT1QgdmFsaWRhdGUgbGVnYWxpdHkg4oCUIHBhaXIgd2l0aCB7QGxpbmsgaXNMZWdhbE1vdmV9IGF0IHRoZVxuICogYm91bmRhcnkgKGUuZy4gbmV0d29yayBoYW5kbGVyKSBiZWZvcmUgY2FsbGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TW92ZShzZXNzaW9uOiBTZXNzaW9uLCBtb3ZlOiBMZWdhbE1vdmUpOiB2b2lkIHtcbiAgLy8g4pSA4pSA4pSAIDEuIENhcHR1cmUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGlmIChtb3ZlLmlzQ2FwdHVyZSkge1xuICAgIGNvbnN0IGNhcHR1cmVkSWQgPSBnZXRQaWVjZUF0KHNlc3Npb24sIG1vdmUudG8pO1xuICAgIGlmIChjYXB0dXJlZElkICE9PSBudWxsICYmIGNhcHR1cmVkSWQgIT09IG1vdmUucGllY2VJZCkge1xuICAgICAgLy8gRW51bWVyYXRlIHRoZSBjYXB0dXJlZCBwaWVjZSdzIGF0dHJzIGZyb20gdGhlIHNlc3Npb24gcmF0aGVyXG4gICAgICAvLyB0aGFuIGZyb20gYSBoYXJkY29kZWQgbGlzdCDigJQgcHJlc2V0LWRlY2xhcmVkIGF0dHJzIChIcCxcbiAgICAgIC8vIFNoaWVsZCwg4oCmKSBnZXQgY2xlYW5lZCB1cCB0b28gd2l0aG91dCB0aGlzIGZ1bmN0aW9uIG5lZWRpbmdcbiAgICAgIC8vIHRvIGtub3cgYWJvdXQgcHJlc2V0cy5cbiAgICAgIGNvbnN0IGF0dHJzID0gc2Vzc2lvblxuICAgICAgICAuYWxsRmFjdHMoKVxuICAgICAgICAuZmlsdGVyKGYgPT4gZi5pZCA9PT0gY2FwdHVyZWRJZCAmJiBpc1BpZWNlQXR0cihmLmF0dHIpKVxuICAgICAgICAubWFwKGYgPT4gZi5hdHRyKTtcbiAgICAgIGZvciAoY29uc3QgYXR0ciBvZiBhdHRycykge1xuICAgICAgICBpZiAoc2Vzc2lvbi5jb250YWlucyhjYXB0dXJlZElkLCBhdHRyKSkge1xuICAgICAgICAgIHNlc3Npb24ucmV0cmFjdChjYXB0dXJlZElkLCBhdHRyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgOKUgCAyLiBNb3ZlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBzZXNzaW9uLmluc2VydChtb3ZlLnBpZWNlSWQsIFwiUG9zaXRpb25cIiwgbW92ZS50byk7XG4gIHNlc3Npb24uaW5zZXJ0KG1vdmUucGllY2VJZCwgXCJIYXNNb3ZlZFwiLCB0cnVlKTtcblxuICAvLyDilIDilIDilIAgMy80LzUuIEdhbWUtbGV2ZWwgYm9va2tlZXBpbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGNvbnN0IGN1cnJlbnRUdXJuID0gKHNlc3Npb24uZ2V0KEdBTUVfRU5USVRZLCBcIlR1cm5cIikgPz8gXCJ3aGl0ZVwiKSBhcyBQaWVjZUNvbG9yO1xuICBjb25zdCBuZXh0VHVybjogUGllY2VDb2xvciA9IGN1cnJlbnRUdXJuID09PSBcIndoaXRlXCIgPyBcImJsYWNrXCIgOiBcIndoaXRlXCI7XG4gIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIlR1cm5cIiwgbmV4dFR1cm4pO1xuXG4gIGNvbnN0IGhhbGZtb3ZlID1cbiAgICAoKHNlc3Npb24uZ2V0KEdBTUVfRU5USVRZLCBcIkhhbGZtb3ZlQ2xvY2tcIikgYXMgbnVtYmVyIHwgdW5kZWZpbmVkKSA/PyAwKSArIDE7XG4gIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIkhhbGZtb3ZlQ2xvY2tcIiwgaGFsZm1vdmUpO1xuXG4gIGlmIChjdXJyZW50VHVybiA9PT0gXCJibGFja1wiKSB7XG4gICAgY29uc3QgZnVsbG1vdmUgPVxuICAgICAgKChzZXNzaW9uLmdldChHQU1FX0VOVElUWSwgXCJGdWxsbW92ZU51bWJlclwiKSBhcyBudW1iZXIgfCB1bmRlZmluZWQpID8/IDEpICsgMTtcbiAgICBzZXNzaW9uLmluc2VydChHQU1FX0VOVElUWSwgXCJGdWxsbW92ZU51bWJlclwiLCBmdWxsbW92ZSk7XG4gIH1cbn1cbiJdLCJmaWxlIjoiL3NyYy9ydWxlcy90dXJuLnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/4e23f6d68ad38ee1ad15ac975e901a9a700998fc b/7xOfJqsDU787fe61oSCq1/web/4e23f6d68ad38ee1ad15ac975e901a9a700998fc deleted file mode 100644 index 1f18741..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/4e23f6d68ad38ee1ad15ac975e901a9a700998fc +++ /dev/null @@ -1,7 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "CLASSIC_LAYOUT", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_0__.CLASSIC_LAYOUT } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/starting-position.ts", {"importedNames":["CLASSIC_LAYOUT"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/layouts/registry.ts", {"importedNames":["LAYOUT_REGISTRY"]}); -__vite_ssr_import_1__.LAYOUT_REGISTRY.register((0,__vite_ssr_import_0__.CLASSIC_LAYOUT)); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQVVBO0FBQ0E7QUFFQSxzQ0FBZ0IsWUFBUyxxQ0FBYyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiY2xhc3NpYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExheW91dDogQ2xhc3NpYyBDaGVzcyAoRklERSkuXG4gKlxuICogUmVnaXN0ZXJzIHRoZSBzdGFuZGFyZCBGSURFIHN0YXJ0aW5nIHBvc2l0aW9uLiBUaGUgYWN0dWFsIGxheW91dFxuICogZGF0YSBsaXZlcyBpbiBgc3RhcnRpbmctcG9zaXRpb24udHNgIGFzIGBDTEFTU0lDX0xBWU9VVGAg4oCUIHRoYXRcbiAqIG1vZHVsZSBpcyB0aGUgY2Fub25pY2FsIHNvdXJjZSBvZiB0cnV0aCBmb3IgRklERSBwaWVjZSBwbGFjZW1lbnQsXG4gKiBzaGFyZWQgd2l0aCB0aGUgYmFjay1jb21wYXQgYGdlbmVyYXRlU3RhcnRpbmdQb3NpdGlvbihzZXNzaW9uKWBcbiAqIGhlbHBlci4gVGhpcyBmaWxlIGlzIGEgb25lLWxpbmUgcmVnaXN0cmF0aW9uIHNvIHRoZSBwaWNrZXJcbiAqIGluY2x1ZGVzIFwiQ2xhc3NpY1wiIGluIGl0cyBkcm9wZG93biB3aXRob3V0IGFueSBkdXBsaWNhdGlvbi5cbiAqL1xuaW1wb3J0IHsgQ0xBU1NJQ19MQVlPVVQgfSBmcm9tIFwiLi4vc3RhcnRpbmctcG9zaXRpb24uanNcIjtcbmltcG9ydCB7IExBWU9VVF9SRUdJU1RSWSB9IGZyb20gXCIuL3JlZ2lzdHJ5LmpzXCI7XG5cbkxBWU9VVF9SRUdJU1RSWS5yZWdpc3RlcihDTEFTU0lDX0xBWU9VVCk7XG5cbmV4cG9ydCB7IENMQVNTSUNfTEFZT1VUIH07XG4iXSwiZmlsZSI6Ii9zcmMvbGF5b3V0cy9jbGFzc2ljLnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/4ec78e20c470365845f2c37f1e6c496206fbd67a b/7xOfJqsDU787fe61oSCq1/web/4ec78e20c470365845f2c37f1e6c496206fbd67a deleted file mode 100644 index 38e5d42..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/4ec78e20c470365845f2c37f1e6c496206fbd67a +++ /dev/null @@ -1,70 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/rules/knight.ts", {"importedNames":["getLegalKnightMoves"]}); -const mkId = (n) => n; -function insertPiece(session, id, type, color, square) { - const eid = mkId(id); - session.insert(eid, "PieceType", type); - session.insert(eid, "Color", color); - session.insert(eid, "Position", square); - return eid; -} -(0,__vite_ssr_import_0__.describe)("getLegalKnightMoves", () => { - (0,__vite_ssr_import_0__.it)("knight at e4 (28) has 8 moves when board is empty", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const knight = insertPiece(session, 1, "knight", "white", 28); - const moves = (0,__vite_ssr_import_2__.getLegalKnightMoves)(session, knight); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(8); - const targets = moves.map((m) => m.to).sort((a, b) => a - b); - (0,__vite_ssr_import_0__.expect)(targets).toEqual([11, 13, 18, 22, 34, 38, 43, 45]); - }); - (0,__vite_ssr_import_0__.it)("knight at a1 (0) has 2 moves only (board edge)", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const knight = insertPiece(session, 1, "knight", "white", 0); - const moves = (0,__vite_ssr_import_2__.getLegalKnightMoves)(session, knight); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(2); - const targets = moves.map((m) => m.to).sort((a, b) => a - b); - (0,__vite_ssr_import_0__.expect)(targets).toEqual([10, 17]); - }); - (0,__vite_ssr_import_0__.it)("knight ignores intervening pieces (leaps)", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const knight = insertPiece(session, 1, "knight", "white", 28); - insertPiece(session, 2, "pawn", "white", 27); - insertPiece(session, 3, "pawn", "white", 29); - insertPiece(session, 4, "pawn", "white", 20); - insertPiece(session, 5, "pawn", "white", 36); - const moves = (0,__vite_ssr_import_2__.getLegalKnightMoves)(session, knight); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(8); - }); - (0,__vite_ssr_import_0__.it)("cannot capture ally piece", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const knight = insertPiece(session, 1, "knight", "white", 28); - insertPiece(session, 2, "rook", "white", 38); - const moves = (0,__vite_ssr_import_2__.getLegalKnightMoves)(session, knight); - (0,__vite_ssr_import_0__.expect)(moves.find((m) => m.to === 38)).toBeUndefined(); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(7); - }); - (0,__vite_ssr_import_0__.it)("can capture enemy piece", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const knight = insertPiece(session, 1, "knight", "white", 28); - insertPiece(session, 2, "rook", "black", 38); - const move = (0,__vite_ssr_import_2__.getLegalKnightMoves)(session, knight).find((m) => m.to === 38); - (0,__vite_ssr_import_0__.expect)(move).toBeDefined(); - (0,__vite_ssr_import_0__.expect)(move?.isCapture).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("quiet moves are marked isCapture=false", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const knight = insertPiece(session, 1, "knight", "white", 28); - const moves = (0,__vite_ssr_import_2__.getLegalKnightMoves)(session, knight); - for (const m of moves) { - (0,__vite_ssr_import_0__.expect)(m.isCapture).toBe(false); - } - }); - (0,__vite_ssr_import_0__.it)("returns empty list when pieceId has no Position/Color", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.getLegalKnightMoves)(session, mkId(999))).toEqual([]); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUVBO0FBRUEsTUFBTSxPQUFPLENBQUMsTUFBYztBQUU1QixTQUFTLFlBQ1AsU0FDQSxJQUNBLE1BQ0EsT0FDQSxRQUNVO0FBQ1YsUUFBTSxNQUFNLEtBQUssRUFBRTtBQUNuQixVQUFRLE9BQU8sS0FBSyxhQUFhLElBQUk7QUFDckMsVUFBUSxPQUFPLEtBQUssU0FBUyxLQUFLO0FBQ2xDLFVBQVEsT0FBTyxLQUFLLFlBQVksTUFBTTtBQUN0QyxTQUFPO0FBQ1Q7R0FFQSxnQ0FBUyx1QkFBdUIsTUFBTTtBQUNwQywrQkFBRyxxREFBcUQsTUFBTTtBQUM1RCxVQUFNLFVBQVUsSUFBSSw4QkFBUSxFQUFFLFVBQVUsTUFBTSxDQUFDO0FBQy9DLFVBQU0sU0FBUyxZQUFZLFNBQVMsR0FBRyxVQUFVLFNBQVMsRUFBRTtBQUM1RCxVQUFNLFdBQVEsMkNBQW9CLFNBQVMsTUFBTTtBQUNqRCxxQ0FBTyxLQUFLLEVBQUUsYUFBYSxDQUFDO0FBRTVCLFVBQU0sVUFBVSxNQUFNLElBQUksT0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQztBQUN6RCxxQ0FBTyxPQUFPLEVBQUUsUUFBUSxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO0FBQUEsRUFDMUQsQ0FBQztBQUVELCtCQUFHLGtEQUFrRCxNQUFNO0FBQ3pELFVBQU0sVUFBVSxJQUFJLDhCQUFRLEVBQUUsVUFBVSxNQUFNLENBQUM7QUFDL0MsVUFBTSxTQUFTLFlBQVksU0FBUyxHQUFHLFVBQVUsU0FBUyxDQUFDO0FBQzNELFVBQU0sV0FBUSwyQ0FBb0IsU0FBUyxNQUFNO0FBQ2pELHFDQUFPLEtBQUssRUFBRSxhQUFhLENBQUM7QUFFNUIsVUFBTSxVQUFVLE1BQU0sSUFBSSxPQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDO0FBQ3pELHFDQUFPLE9BQU8sRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7QUFBQSxFQUNsQyxDQUFDO0FBRUQsK0JBQUcsNkNBQTZDLE1BQU07QUFDcEQsVUFBTSxVQUFVLElBQUksOEJBQVEsRUFBRSxVQUFVLE1BQU0sQ0FBQztBQUMvQyxVQUFNLFNBQVMsWUFBWSxTQUFTLEdBQUcsVUFBVSxTQUFTLEVBQUU7QUFFNUQsZ0JBQVksU0FBUyxHQUFHLFFBQVEsU0FBUyxFQUFFO0FBQzNDLGdCQUFZLFNBQVMsR0FBRyxRQUFRLFNBQVMsRUFBRTtBQUMzQyxnQkFBWSxTQUFTLEdBQUcsUUFBUSxTQUFTLEVBQUU7QUFDM0MsZ0JBQVksU0FBUyxHQUFHLFFBQVEsU0FBUyxFQUFFO0FBQzNDLFVBQU0sV0FBUSwyQ0FBb0IsU0FBUyxNQUFNO0FBRWpELHFDQUFPLEtBQUssRUFBRSxhQUFhLENBQUM7QUFBQSxFQUM5QixDQUFDO0FBRUQsK0JBQUcsNkJBQTZCLE1BQU07QUFDcEMsVUFBTSxVQUFVLElBQUksOEJBQVEsRUFBRSxVQUFVLE1BQU0sQ0FBQztBQUMvQyxVQUFNLFNBQVMsWUFBWSxTQUFTLEdBQUcsVUFBVSxTQUFTLEVBQUU7QUFDNUQsZ0JBQVksU0FBUyxHQUFHLFFBQVEsU0FBUyxFQUFFO0FBQzNDLFVBQU0sV0FBUSwyQ0FBb0IsU0FBUyxNQUFNO0FBQ2pELHFDQUFPLE1BQU0sS0FBSyxPQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxjQUFjO0FBQ25ELHFDQUFPLEtBQUssRUFBRSxhQUFhLENBQUM7QUFBQSxFQUM5QixDQUFDO0FBRUQsK0JBQUcsMkJBQTJCLE1BQU07QUFDbEMsVUFBTSxVQUFVLElBQUksOEJBQVEsRUFBRSxVQUFVLE1BQU0sQ0FBQztBQUMvQyxVQUFNLFNBQVMsWUFBWSxTQUFTLEdBQUcsVUFBVSxTQUFTLEVBQUU7QUFDNUQsZ0JBQVksU0FBUyxHQUFHLFFBQVEsU0FBUyxFQUFFO0FBQzNDLFVBQU0sVUFBTywyQ0FBb0IsU0FBUyxNQUFNLEVBQUUsS0FBSyxPQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLHFDQUFPLElBQUksRUFBRSxZQUFZO0FBQ3pCLHFDQUFPLE1BQU0sU0FBUyxFQUFFLEtBQUssSUFBSTtBQUFBLEVBQ25DLENBQUM7QUFFRCwrQkFBRywwQ0FBMEMsTUFBTTtBQUNqRCxVQUFNLFVBQVUsSUFBSSw4QkFBUSxFQUFFLFVBQVUsTUFBTSxDQUFDO0FBQy9DLFVBQU0sU0FBUyxZQUFZLFNBQVMsR0FBRyxVQUFVLFNBQVMsRUFBRTtBQUM1RCxVQUFNLFdBQVEsMkNBQW9CLFNBQVMsTUFBTTtBQUNqRCxlQUFXLEtBQUssT0FBTztBQUNyQix1Q0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEtBQUs7QUFBQSxJQUNoQztBQUFBLEVBQ0YsQ0FBQztBQUVELCtCQUFHLHlEQUF5RCxNQUFNO0FBQ2hFLFVBQU0sVUFBVSxJQUFJLDhCQUFRLEVBQUUsVUFBVSxNQUFNLENBQUM7QUFDL0Msd0NBQU8sMkNBQW9CLFNBQVMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQUEsRUFDNUQsQ0FBQztBQUNILENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImtuaWdodC50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBpdCwgZXhwZWN0IH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuaW1wb3J0IHsgZ2V0TGVnYWxLbmlnaHRNb3ZlcyB9IGZyb20gXCIuL2tuaWdodC5qc1wiO1xuXG5jb25zdCBta0lkID0gKG46IG51bWJlcikgPT4gbiBhcyBFbnRpdHlJZDtcblxuZnVuY3Rpb24gaW5zZXJ0UGllY2UoXG4gIHNlc3Npb246IFNlc3Npb24sXG4gIGlkOiBudW1iZXIsXG4gIHR5cGU6IHN0cmluZyxcbiAgY29sb3I6IHN0cmluZyxcbiAgc3F1YXJlOiBudW1iZXIsXG4pOiBFbnRpdHlJZCB7XG4gIGNvbnN0IGVpZCA9IG1rSWQoaWQpO1xuICBzZXNzaW9uLmluc2VydChlaWQsIFwiUGllY2VUeXBlXCIsIHR5cGUpO1xuICBzZXNzaW9uLmluc2VydChlaWQsIFwiQ29sb3JcIiwgY29sb3IpO1xuICBzZXNzaW9uLmluc2VydChlaWQsIFwiUG9zaXRpb25cIiwgc3F1YXJlKTtcbiAgcmV0dXJuIGVpZDtcbn1cblxuZGVzY3JpYmUoXCJnZXRMZWdhbEtuaWdodE1vdmVzXCIsICgpID0+IHtcbiAgaXQoXCJrbmlnaHQgYXQgZTQgKDI4KSBoYXMgOCBtb3ZlcyB3aGVuIGJvYXJkIGlzIGVtcHR5XCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgY29uc3Qga25pZ2h0ID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJrbmlnaHRcIiwgXCJ3aGl0ZVwiLCAyOCk7XG4gICAgY29uc3QgbW92ZXMgPSBnZXRMZWdhbEtuaWdodE1vdmVzKHNlc3Npb24sIGtuaWdodCk7XG4gICAgZXhwZWN0KG1vdmVzKS50b0hhdmVMZW5ndGgoOCk7XG4gICAgLy8gQWxsIDggTC1zaGFwZXMgZnJvbSBlNDogZjY9NDUsIGc1PTM4LCBnMz0yMiwgZjI9MTMsIGQyPTExLCBjMz0xOCwgYzU9MzQsIGQ2PTQzXG4gICAgY29uc3QgdGFyZ2V0cyA9IG1vdmVzLm1hcChtID0+IG0udG8pLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICBleHBlY3QodGFyZ2V0cykudG9FcXVhbChbMTEsIDEzLCAxOCwgMjIsIDM0LCAzOCwgNDMsIDQ1XSk7XG4gIH0pO1xuXG4gIGl0KFwia25pZ2h0IGF0IGExICgwKSBoYXMgMiBtb3ZlcyBvbmx5IChib2FyZCBlZGdlKVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGNvbnN0IGtuaWdodCA9IGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwia25pZ2h0XCIsIFwid2hpdGVcIiwgMCk7XG4gICAgY29uc3QgbW92ZXMgPSBnZXRMZWdhbEtuaWdodE1vdmVzKHNlc3Npb24sIGtuaWdodCk7XG4gICAgZXhwZWN0KG1vdmVzKS50b0hhdmVMZW5ndGgoMik7XG4gICAgLy8gRnJvbSBhMTogYjM9MTcsIGMyPTEwXG4gICAgY29uc3QgdGFyZ2V0cyA9IG1vdmVzLm1hcChtID0+IG0udG8pLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICBleHBlY3QodGFyZ2V0cykudG9FcXVhbChbMTAsIDE3XSk7XG4gIH0pO1xuXG4gIGl0KFwia25pZ2h0IGlnbm9yZXMgaW50ZXJ2ZW5pbmcgcGllY2VzIChsZWFwcylcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBjb25zdCBrbmlnaHQgPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcImtuaWdodFwiLCBcIndoaXRlXCIsIDI4KTsgLy8gZTRcbiAgICAvLyBCbG9jayBhbGwgb3J0aG9nb25hbGx5IGFkamFjZW50IHNxdWFyZXMg4oCUIGtuaWdodCBzaG91bGQgc3RpbGwgbGVhcCBvdmVyIHRoZW0uXG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMiwgXCJwYXduXCIsIFwid2hpdGVcIiwgMjcpOyAvLyBkNFxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDMsIFwicGF3blwiLCBcIndoaXRlXCIsIDI5KTsgLy8gZjRcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCA0LCBcInBhd25cIiwgXCJ3aGl0ZVwiLCAyMCk7IC8vIGUzXG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgNSwgXCJwYXduXCIsIFwid2hpdGVcIiwgMzYpOyAvLyBlNVxuICAgIGNvbnN0IG1vdmVzID0gZ2V0TGVnYWxLbmlnaHRNb3ZlcyhzZXNzaW9uLCBrbmlnaHQpO1xuICAgIC8vIE5vbmUgb2YgdGhlIGJsb2NrZXJzIHNpdHMgb24gYSBrbmlnaHQtdGFyZ2V0IHNxdWFyZSwgc28gYWxsIDggcmVhY2hhYmxlLlxuICAgIGV4cGVjdChtb3ZlcykudG9IYXZlTGVuZ3RoKDgpO1xuICB9KTtcblxuICBpdChcImNhbm5vdCBjYXB0dXJlIGFsbHkgcGllY2VcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBjb25zdCBrbmlnaHQgPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcImtuaWdodFwiLCBcIndoaXRlXCIsIDI4KTsgLy8gZTRcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAyLCBcInJvb2tcIiwgXCJ3aGl0ZVwiLCAzOCk7IC8vIGc1IOKAlCBrbmlnaHQgdGFyZ2V0XG4gICAgY29uc3QgbW92ZXMgPSBnZXRMZWdhbEtuaWdodE1vdmVzKHNlc3Npb24sIGtuaWdodCk7XG4gICAgZXhwZWN0KG1vdmVzLmZpbmQobSA9PiBtLnRvID09PSAzOCkpLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3QobW92ZXMpLnRvSGF2ZUxlbmd0aCg3KTtcbiAgfSk7XG5cbiAgaXQoXCJjYW4gY2FwdHVyZSBlbmVteSBwaWVjZVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGNvbnN0IGtuaWdodCA9IGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwia25pZ2h0XCIsIFwid2hpdGVcIiwgMjgpOyAvLyBlNFxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDIsIFwicm9va1wiLCBcImJsYWNrXCIsIDM4KTsgLy8gZzUg4oCUIGtuaWdodCB0YXJnZXRcbiAgICBjb25zdCBtb3ZlID0gZ2V0TGVnYWxLbmlnaHRNb3ZlcyhzZXNzaW9uLCBrbmlnaHQpLmZpbmQobSA9PiBtLnRvID09PSAzOCk7XG4gICAgZXhwZWN0KG1vdmUpLnRvQmVEZWZpbmVkKCk7XG4gICAgZXhwZWN0KG1vdmU/LmlzQ2FwdHVyZSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJxdWlldCBtb3ZlcyBhcmUgbWFya2VkIGlzQ2FwdHVyZT1mYWxzZVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGNvbnN0IGtuaWdodCA9IGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwia25pZ2h0XCIsIFwid2hpdGVcIiwgMjgpO1xuICAgIGNvbnN0IG1vdmVzID0gZ2V0TGVnYWxLbmlnaHRNb3ZlcyhzZXNzaW9uLCBrbmlnaHQpO1xuICAgIGZvciAoY29uc3QgbSBvZiBtb3Zlcykge1xuICAgICAgZXhwZWN0KG0uaXNDYXB0dXJlKS50b0JlKGZhbHNlKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyBlbXB0eSBsaXN0IHdoZW4gcGllY2VJZCBoYXMgbm8gUG9zaXRpb24vQ29sb3JcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBleHBlY3QoZ2V0TGVnYWxLbmlnaHRNb3ZlcyhzZXNzaW9uLCBta0lkKDk5OSkpKS50b0VxdWFsKFtdKTtcbiAgfSk7XG59KTtcbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9jaGVzcy9zcmMvcnVsZXMva25pZ2h0LnRlc3QudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/4f08dc3aae6b824416553b7b206e34c857a7d0ec b/7xOfJqsDU787fe61oSCq1/web/4f08dc3aae6b824416553b7b206e34c857a7d0ec deleted file mode 100644 index 2eec1bf..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/4f08dc3aae6b824416553b7b206e34c857a7d0ec +++ /dev/null @@ -1,5 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "default", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_export_default__ } catch {} }}); -const __vite_ssr_export_default__ = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%20width='45'%20height='45'%3e%3cpath%20d='m%2022.5,9%20c%20-2.21,0%20-4,1.79%20-4,4%200,0.89%200.29,1.71%200.78,2.38%20C%2017.33,16.5%2016,18.59%2016,21%20c%200,2.03%200.94,3.84%202.41,5.03%20C%2015.41,27.09%2011,31.58%2011,39.5%20H%2034%20C%2034,31.58%2029.59,27.09%2026.59,26.03%2028.06,24.84%2029,23.03%2029,21%2029,18.59%2027.67,16.5%2025.72,15.38%2026.21,14.71%2026.5,13.89%2026.5,13%20c%200,-2.21%20-1.79,-4%20-4,-4%20z'%20style='opacity:1;%20fill:%23ffffff;%20fill-opacity:1;%20fill-rule:nonzero;%20stroke:%23000000;%20stroke-width:1.5;%20stroke-linecap:round;%20stroke-linejoin:miter;%20stroke-miterlimit:4;%20stroke-dasharray:none;%20stroke-opacity:1;'/%3e%3c/svg%3e" - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndoaXRlLXBhd24uc3ZnIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzYz94bWwlMjB2ZXJzaW9uPScxLjAnJTIwZW5jb2Rpbmc9J1VURi04JyUyMHN0YW5kYWxvbmU9J25vJz8lM2UlM2MhRE9DVFlQRSUyMHN2ZyUyMFBVQkxJQyUyMCctLy9XM0MvL0RURCUyMFNWRyUyMDEuMS8vRU4nJTIwJ2h0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCclM2UlM2NzdmclMjB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTIwdmVyc2lvbj0nMS4xJyUyMHdpZHRoPSc0NSclMjBoZWlnaHQ9JzQ1JyUzZSUzY3BhdGglMjBkPSdtJTIwMjIuNSw5JTIwYyUyMC0yLjIxLDAlMjAtNCwxLjc5JTIwLTQsNCUyMDAsMC44OSUyMDAuMjksMS43MSUyMDAuNzgsMi4zOCUyMEMlMjAxNy4zMywxNi41JTIwMTYsMTguNTklMjAxNiwyMSUyMGMlMjAwLDIuMDMlMjAwLjk0LDMuODQlMjAyLjQxLDUuMDMlMjBDJTIwMTUuNDEsMjcuMDklMjAxMSwzMS41OCUyMDExLDM5LjUlMjBIJTIwMzQlMjBDJTIwMzQsMzEuNTglMjAyOS41OSwyNy4wOSUyMDI2LjU5LDI2LjAzJTIwMjguMDYsMjQuODQlMjAyOSwyMy4wMyUyMDI5LDIxJTIwMjksMTguNTklMjAyNy42NywxNi41JTIwMjUuNzIsMTUuMzglMjAyNi4yMSwxNC43MSUyMDI2LjUsMTMuODklMjAyNi41LDEzJTIwYyUyMDAsLTIuMjElMjAtMS43OSwtNCUyMC00LC00JTIweiclMjBzdHlsZT0nb3BhY2l0eToxOyUyMGZpbGw6JTIzZmZmZmZmOyUyMGZpbGwtb3BhY2l0eToxOyUyMGZpbGwtcnVsZTpub256ZXJvOyUyMHN0cm9rZTolMjMwMDAwMDA7JTIwc3Ryb2tlLXdpZHRoOjEuNTslMjBzdHJva2UtbGluZWNhcDpyb3VuZDslMjBzdHJva2UtbGluZWpvaW46bWl0ZXI7JTIwc3Ryb2tlLW1pdGVybGltaXQ6NDslMjBzdHJva2UtZGFzaGFycmF5Om5vbmU7JTIwc3Ryb2tlLW9wYWNpdHk6MTsnLyUzZSUzYy9zdmclM2VcIiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsbUNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/50aee9b9326f39216380efe05b630e763742813c b/7xOfJqsDU787fe61oSCq1/web/50aee9b9326f39216380efe05b630e763742813c deleted file mode 100644 index eec8c9c..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/50aee9b9326f39216380efe05b630e763742813c +++ /dev/null @@ -1,330 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect","beforeEach","vi"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/engine.ts", {"importedNames":["ChessEngine"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["squareToAlgebraic","algebraicToSquare"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/schema.ts", {"importedNames":["GAME_ENTITY"]}); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/net/prediction.ts", {"importedNames":["PredictionManager"]}); -class MockGameClient { - listeners = /* @__PURE__ */ new Map(); - sentMoves = []; - on(type, listener) { - const arr = this.listeners.get(type); - const cast = listener; - if (arr) arr.push(cast); - else this.listeners.set(type, [cast]); - } - sendMove(from, to, promoteTo) { - this.sentMoves.push( - promoteTo !== void 0 ? { from, to, promoteTo } : { from, to } - ); - } - emitState(payload) { - this.dispatch({ type: "game.state", payload }); - } - emitDelta(payload) { - this.dispatch({ type: "game.delta", payload }); - } - emitError(payload) { - this.dispatch({ type: "error", payload }); - } - dispatch(event) { - const arr = this.listeners.get(event.type); - if (!arr) return; - for (const l of arr.slice()) l(event); - } - /** Coerce to the `GameClient` type the PredictionManager constructor expects. */ - asClient() { - return this; - } -} -function startingStatePayload() { - const engine = new __vite_ssr_import_1__.ChessEngine(); - const facts = engine.session.allFacts().map((f) => ({ - id: f.id, - attr: f.attr, - value: f.value - })); - return { - facts, - turn: "white", - lastSeq: 1, - moveHistory: [], - activeRules: [], - fen: "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1" - }; -} -function computeDelta(fromFacts, to, moveNotation) { - const toFacts = to.session.allFacts().map((f) => ({ - id: f.id, - attr: f.attr, - value: f.value - })); - const key = (f) => `${f.id}:${f.attr}`; - const beforeMap = new Map(fromFacts.map((f) => [key(f), f])); - const afterMap = new Map(toFacts.map((f) => [key(f), f])); - const retracted = []; - const inserted = []; - for (const [k, f] of beforeMap) { - const a = afterMap.get(k); - if (a === void 0) { - retracted.push(f); - } else if (!Object.is(a.value, f.value)) { - retracted.push(f); - inserted.push(a); - } - }; - for (const [k, f] of afterMap) { - if (!beforeMap.has(k)) inserted.push(f); - }; - return { - inserted, - retracted, - moveNotation, - turn: to.getCurrentTurn(), - gameOver: null - }; -} -function engineFromFacts(facts) { - const engine = new __vite_ssr_import_1__.ChessEngine(); - const existing = engine.session.allFacts().slice(); - for (const f of existing) { - engine.session.retract(f.id, f.attr); - }; - for (const f of facts) { - engine.session.insert( - f.id, - f.attr, - f.value - ); - }; - return engine; -} -function findPositionFact(facts, square) { - return facts.find((f) => f.attr === "Position" && f.value === square); -} -(0,__vite_ssr_import_0__.describe)("PredictionManager", () => { - let client; - let listener; - let pm; - (0,__vite_ssr_import_0__.beforeEach)(() => { - client = new MockGameClient(); - listener = __vite_ssr_import_0__.vi.fn(); - pm = new __vite_ssr_import_4__.PredictionManager(client.asClient(), listener); - client.emitState(startingStatePayload()); - listener.mockClear(); - }); - (0,__vite_ssr_import_0__.it)("applies a legal optimistic move, updates engine, and sends it", () => { - const from = (0,__vite_ssr_import_2__.algebraicToSquare)("e2"); - const to = (0,__vite_ssr_import_2__.algebraicToSquare)("e4"); - const ok = pm.applyPrediction(from, to); - (0,__vite_ssr_import_0__.expect)(ok).toBe(true); - (0,__vite_ssr_import_0__.expect)(listener).toHaveBeenCalledTimes(1); - (0,__vite_ssr_import_0__.expect)(client.sentMoves).toEqual([{ from: "e2", to: "e4" }]); - const predicted = pm.getCurrentEngine(); - (0,__vite_ssr_import_0__.expect)(predicted.getCurrentTurn()).toBe("black"); - const e4Fact = findPositionFact(predicted.session.allFacts(), to); - (0,__vite_ssr_import_0__.expect)(e4Fact).toBeDefined(); - const base = pm.getBaseEngine(); - (0,__vite_ssr_import_0__.expect)(base.getCurrentTurn()).toBe("white"); - (0,__vite_ssr_import_0__.expect)(findPositionFact(base.session.allFacts(), from)).toBeDefined(); - (0,__vite_ssr_import_0__.expect)(findPositionFact(base.session.allFacts(), to)).toBeUndefined(); - (0,__vite_ssr_import_0__.expect)(pm.getPendingMoves()).toEqual([{ from, to }]); - }); - (0,__vite_ssr_import_0__.it)("drops an illegal optimistic move without mutating state or sending", () => { - const from = (0,__vite_ssr_import_2__.algebraicToSquare)("e2"); - const to = (0,__vite_ssr_import_2__.algebraicToSquare)("e5"); - const ok = pm.applyPrediction(from, to); - (0,__vite_ssr_import_0__.expect)(ok).toBe(false); - (0,__vite_ssr_import_0__.expect)(listener).not.toHaveBeenCalled(); - (0,__vite_ssr_import_0__.expect)(client.sentMoves).toEqual([]); - (0,__vite_ssr_import_0__.expect)(pm.getPendingMoves()).toEqual([]); - (0,__vite_ssr_import_0__.expect)(pm.getCurrentEngine().getCurrentTurn()).toBe("white"); - }); - (0,__vite_ssr_import_0__.it)("reconciles via game.delta: applies authoritative state, clears prediction", () => { - const from = (0,__vite_ssr_import_2__.algebraicToSquare)("e2"); - const to = (0,__vite_ssr_import_2__.algebraicToSquare)("e4"); - pm.applyPrediction(from, to); - listener.mockClear(); - const beforeFacts = pm.getBaseEngine().session.allFacts().map((f) => ({ - id: f.id, - attr: f.attr, - value: f.value - })); - const authoritative = engineFromFacts(beforeFacts); - const move = authoritative.findMove(from, to); - (0,__vite_ssr_import_0__.expect)(move).not.toBeNull(); - authoritative.applyMove(move); - const delta = computeDelta(beforeFacts, authoritative, "e4"); - client.emitDelta(delta); - (0,__vite_ssr_import_0__.expect)(pm.getPendingMoves()).toEqual([]); - const current = pm.getCurrentEngine(); - (0,__vite_ssr_import_0__.expect)(current).toBe(pm.getBaseEngine()); - (0,__vite_ssr_import_0__.expect)(current.getCurrentTurn()).toBe("black"); - (0,__vite_ssr_import_0__.expect)( - findPositionFact(current.session.allFacts(), to) - ).toBeDefined(); - (0,__vite_ssr_import_0__.expect)(listener).toHaveBeenCalledTimes(1); - (0,__vite_ssr_import_0__.expect)(listener).toHaveBeenLastCalledWith(pm.getBaseEngine()); - }); - (0,__vite_ssr_import_0__.it)("rolls back on non-fatal server error (move rejected)", () => { - const from = (0,__vite_ssr_import_2__.algebraicToSquare)("e2"); - const to = (0,__vite_ssr_import_2__.algebraicToSquare)("e4"); - pm.applyPrediction(from, to); - listener.mockClear(); - client.emitError({ code: "NOT_YOUR_TURN", message: "nope", fatal: false }); - (0,__vite_ssr_import_0__.expect)(pm.getPendingMoves()).toEqual([]); - const current = pm.getCurrentEngine(); - (0,__vite_ssr_import_0__.expect)(current).toBe(pm.getBaseEngine()); - (0,__vite_ssr_import_0__.expect)(current.getCurrentTurn()).toBe("white"); - (0,__vite_ssr_import_0__.expect)(findPositionFact(current.session.allFacts(), from)).toBeDefined(); - (0,__vite_ssr_import_0__.expect)(findPositionFact(current.session.allFacts(), to)).toBeUndefined(); - (0,__vite_ssr_import_0__.expect)(listener).toHaveBeenCalledTimes(1); - }); - (0,__vite_ssr_import_0__.it)("ignores fatal errors (session teardown handled elsewhere)", () => { - const from = (0,__vite_ssr_import_2__.algebraicToSquare)("e2"); - const to = (0,__vite_ssr_import_2__.algebraicToSquare)("e4"); - pm.applyPrediction(from, to); - listener.mockClear(); - client.emitError({ code: "BAD_TOKEN", message: "expired", fatal: true }); - (0,__vite_ssr_import_0__.expect)(pm.getPendingMoves()).toEqual([{ from, to }]); - (0,__vite_ssr_import_0__.expect)(listener).not.toHaveBeenCalled(); - }); - (0,__vite_ssr_import_0__.it)("applyFullState replaces base engine with server facts, clears pending", () => { - pm.applyPrediction((0,__vite_ssr_import_2__.algebraicToSquare)("e2"), (0,__vite_ssr_import_2__.algebraicToSquare)("e4")); - listener.mockClear(); - const alt = new __vite_ssr_import_1__.ChessEngine(); - alt.session.retract((0,__vite_ssr_import_3__.GAME_ENTITY), "Turn"); - alt.session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "Turn", "black"); - const facts = alt.session.allFacts().map((f) => ({ - id: f.id, - attr: f.attr, - value: f.value - })); - client.emitState({ - facts, - turn: "black", - lastSeq: 42, - moveHistory: [], - activeRules: [], - fen: "" - }); - (0,__vite_ssr_import_0__.expect)(pm.getPendingMoves()).toEqual([]); - (0,__vite_ssr_import_0__.expect)(pm.getCurrentEngine().getCurrentTurn()).toBe("black"); - (0,__vite_ssr_import_0__.expect)(pm.getCurrentEngine()).toBe(pm.getBaseEngine()); - (0,__vite_ssr_import_0__.expect)(listener).toHaveBeenCalledTimes(1); - }); - (0,__vite_ssr_import_0__.it)("sends promotion moves with algebraic notation and promoteTo intact", () => { - const engine = new __vite_ssr_import_1__.ChessEngine(); - const existing = engine.session.allFacts().slice(); - for (const f of existing) { - engine.session.retract(f.id, f.attr); - }; - let id = 1; - const insertPiece = (type, color, square) => { - const eid = id++; - engine.session.insert(eid, "PieceType", type); - engine.session.insert(eid, "Color", color); - engine.session.insert(eid, "Position", square); - engine.session.insert(eid, "HasMoved", true); - }; - insertPiece("pawn", "white", (0,__vite_ssr_import_2__.algebraicToSquare)("a7")); - insertPiece("king", "white", (0,__vite_ssr_import_2__.algebraicToSquare)("e1")); - insertPiece("king", "black", (0,__vite_ssr_import_2__.algebraicToSquare)("e8")); - engine.session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "Turn", "white"); - engine.session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "HalfmoveClock", 0); - engine.session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "FullmoveNumber", 1); - engine.session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget", null); - engine.session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "GameStatus", "active"); - engine.session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "Winner", null); - const facts = engine.session.allFacts().map((f) => ({ - id: f.id, - attr: f.attr, - value: f.value - })); - client.emitState({ - facts, - turn: "white", - lastSeq: 10, - moveHistory: [], - activeRules: [], - fen: "" - }); - listener.mockClear(); - const from = (0,__vite_ssr_import_2__.algebraicToSquare)("a7"); - const to = (0,__vite_ssr_import_2__.algebraicToSquare)("a8"); - const ok = pm.applyPrediction(from, to, "knight"); - (0,__vite_ssr_import_0__.expect)(ok).toBe(true); - (0,__vite_ssr_import_0__.expect)(client.sentMoves).toEqual([ - { from: "a7", to: "a8", promoteTo: "knight" } - ]); - const predicted = pm.getCurrentEngine(); - const a8 = predicted.session.allFacts().find((f) => f.attr === "Position" && f.value === to); - (0,__vite_ssr_import_0__.expect)(a8).toBeDefined(); - const typeOfPromoted = predicted.session.allFacts().find((f) => f.id === a8.id && f.attr === "PieceType")?.value; - (0,__vite_ssr_import_0__.expect)(typeOfPromoted).toBe("knight"); - }); - (0,__vite_ssr_import_0__.it)("simulated 100ms latency: prediction then delta converges to server state", async () => { - __vite_ssr_import_0__.vi.useFakeTimers(); - try { - const from = (0,__vite_ssr_import_2__.algebraicToSquare)("e2"); - const to = (0,__vite_ssr_import_2__.algebraicToSquare)("e4"); - const serverViewBefore = pm.getBaseEngine().session.allFacts().map((f) => ({ - id: f.id, - attr: f.attr, - value: f.value - })); - const predictOk = pm.applyPrediction(from, to); - (0,__vite_ssr_import_0__.expect)(predictOk).toBe(true); - (0,__vite_ssr_import_0__.expect)(pm.getCurrentEngine().getCurrentTurn()).toBe("black"); - const authoritative = engineFromFacts(serverViewBefore); - const serverMove = authoritative.findMove(from, to); - (0,__vite_ssr_import_0__.expect)(serverMove).not.toBeNull(); - authoritative.applyMove(serverMove); - const delta = computeDelta(serverViewBefore, authoritative, "e4"); - setTimeout(() => client.emitDelta(delta), 100); - await __vite_ssr_import_0__.vi.advanceTimersByTimeAsync(100); - const finalFacts = pm.getCurrentEngine().session.allFacts(); - const authFacts = authoritative.session.allFacts(); - const toKey = (fs) => fs.map((f) => `${f.id}|${f.attr}|${JSON.stringify(f.value)}`).sort(); - (0,__vite_ssr_import_0__.expect)(toKey(finalFacts)).toEqual(toKey(authFacts)); - (0,__vite_ssr_import_0__.expect)(pm.getCurrentEngine().getCurrentTurn()).toBe("black"); - (0,__vite_ssr_import_0__.expect)(pm.getPendingMoves()).toEqual([]); - (0,__vite_ssr_import_0__.expect)(pm.getCurrentEngine()).toBe(pm.getBaseEngine()); - } finally { - __vite_ssr_import_0__.vi.useRealTimers(); - } - }); - (0,__vite_ssr_import_0__.it)("multiple predictions are all cleared on reconcile", () => { - const from1 = (0,__vite_ssr_import_2__.algebraicToSquare)("e2"); - const to1 = (0,__vite_ssr_import_2__.algebraicToSquare)("e4"); - pm.applyPrediction(from1, to1); - const from2 = (0,__vite_ssr_import_2__.algebraicToSquare)("d7"); - const to2 = (0,__vite_ssr_import_2__.algebraicToSquare)("d5"); - pm.applyPrediction(from2, to2); - (0,__vite_ssr_import_0__.expect)(pm.getPendingMoves()).toHaveLength(2); - const beforeFacts = pm.getBaseEngine().session.allFacts().map((f) => ({ - id: f.id, - attr: f.attr, - value: f.value - })); - const authoritative = engineFromFacts(beforeFacts); - authoritative.applyMove(authoritative.findMove(from1, to1)); - const delta = computeDelta(beforeFacts, authoritative, "e4"); - client.emitDelta(delta); - (0,__vite_ssr_import_0__.expect)(pm.getPendingMoves()).toEqual([]); - (0,__vite_ssr_import_0__.expect)(pm.getCurrentEngine()).toBe(pm.getBaseEngine()); - (0,__vite_ssr_import_0__.expect)(pm.getCurrentEngine().getCurrentTurn()).toBe("black"); - }); - (0,__vite_ssr_import_0__.it)("squareToAlgebraic is the exact wire format sent to the server", () => { - const from = (0,__vite_ssr_import_2__.algebraicToSquare)("g1"); - const to = (0,__vite_ssr_import_2__.algebraicToSquare)("f3"); - pm.applyPrediction(from, to); - (0,__vite_ssr_import_0__.expect)(client.sentMoves).toEqual([ - { from: (0,__vite_ssr_import_2__.squareToAlgebraic)(from), to: (0,__vite_ssr_import_2__.squareToAlgebraic)(to) } - ]); - (0,__vite_ssr_import_0__.expect)(client.sentMoves[0]?.from).toBe("g1"); - (0,__vite_ssr_import_0__.expect)(client.sentMoves[0]?.to).toBe("f3"); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RUFBaUUsTUFBTTtBQUV4RSxVQUFNLFVBQU8seUNBQWtCLElBQUk7QUFDbkMsVUFBTSxRQUFLLHlDQUFrQixJQUFJO0FBQ2pDLE9BQUcsZ0JBQWdCLE1BQU0sRUFBRTtBQUMzQixxQ0FBTyxPQUFPLFNBQVMsRUFBRSxRQUFRO0FBQUEsTUFDL0IsRUFBRSxTQUFNLHlDQUFrQixJQUFJLEdBQUcsT0FBSSx5Q0FBa0IsRUFBRSxFQUFFO0FBQUEsSUFDN0QsQ0FBQztBQUNELHFDQUFPLE9BQU8sVUFBVSxDQUFDLEdBQUcsSUFBSSxFQUFFLEtBQUssSUFBSTtBQUMzQyxxQ0FBTyxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxLQUFLLElBQUk7QUFBQSxFQUMzQyxDQUFDO0FBQ0gsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsicHJlZGljdGlvbi50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRlc3RzIGZvciBQcmVkaWN0aW9uTWFuYWdlci4gV2Ugc3R1YiBHYW1lQ2xpZW50IHdpdGggYSBtaW5pbWFsIGV2ZW50LWNhcGFibGVcbi8vIGRvdWJsZSBzbyBldmVyeSBhc3NlcnRpb24gaXMgZGV0ZXJtaW5pc3RpYyDigJQgbm8gc29ja2V0cywgbm8gdGltZXJzLlxuXG5pbXBvcnQgeyBkZXNjcmliZSwgaXQsIGV4cGVjdCwgYmVmb3JlRWFjaCwgdmkgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgdHlwZSB7IEF0dHJLZXksIEVudGl0eUlkLCBGYWN0VmFsdWUgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB7IENoZXNzRW5naW5lIH0gZnJvbSBcIi4uL2VuZ2luZS5qc1wiO1xuaW1wb3J0IHsgc3F1YXJlVG9BbGdlYnJhaWMsIGFsZ2VicmFpY1RvU3F1YXJlIH0gZnJvbSBcIi4uL2Nvb3JkLmpzXCI7XG5pbXBvcnQgeyBHQU1FX0VOVElUWSB9IGZyb20gXCIuLi9zY2hlbWEuanNcIjtcbmltcG9ydCB7IFByZWRpY3Rpb25NYW5hZ2VyIH0gZnJvbSBcIi4vcHJlZGljdGlvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBHYW1lQ2xpZW50LCBHYW1lQ2xpZW50RXZlbnQsIEdhbWVDbGllbnRFdmVudFR5cGUgfSBmcm9tIFwiLi9jbGllbnQuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgRmFjdCxcbiAgR2FtZURlbHRhUGF5bG9hZCxcbiAgR2FtZVN0YXRlUGF5bG9hZCxcbiAgUHJvbW90aW9uUGllY2UsXG59IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTW9jayBHYW1lQ2xpZW50XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vXG4vLyBPbmx5IHRoZSBzdXJmYWNlIFByZWRpY3Rpb25NYW5hZ2VyIHRvdWNoZXM6IGBvbih0eXBlLCBsaXN0ZW5lcilgIGFuZFxuLy8gYHNlbmRNb3ZlKGZyb20sIHRvLCBwcm9tb3RlVG8/KWAuIEVhY2ggYGVtaXQqYCBoZWxwZXIgc2hvdmVzIGFuIGV2ZW50IGludG9cbi8vIHRoZSBzdG9yZWQgbGlzdGVuZXJzIHN5bmNocm9ub3VzbHkgc28gd2UgY2FuIHRlc3QgcmVjb25jaWxpYXRpb24gaW5saW5lLFxuLy8gb3IgdmlhIGBzZXRUaW1lb3V0YCB0byBzaW11bGF0ZSBzZXJ2ZXIgcm91bmQtdHJpcCBsYXRlbmN5LlxuXG5pbnRlcmZhY2UgU2VudE1vdmUge1xuICBmcm9tOiBzdHJpbmc7XG4gIHRvOiBzdHJpbmc7XG4gIHByb21vdGVUbz86IFByb21vdGlvblBpZWNlO1xufVxuXG50eXBlIExpc3RlbmVyID0gKGV2ZW50OiBHYW1lQ2xpZW50RXZlbnQpID0+IHZvaWQ7XG5cbmNsYXNzIE1vY2tHYW1lQ2xpZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBsaXN0ZW5lcnMgPSBuZXcgTWFwPEdhbWVDbGllbnRFdmVudFR5cGUsIExpc3RlbmVyW10+KCk7XG4gIHJlYWRvbmx5IHNlbnRNb3ZlczogU2VudE1vdmVbXSA9IFtdO1xuXG4gIG9uPFQgZXh0ZW5kcyBHYW1lQ2xpZW50RXZlbnRUeXBlPihcbiAgICB0eXBlOiBULFxuICAgIGxpc3RlbmVyOiAoZXZlbnQ6IEV4dHJhY3Q8R2FtZUNsaWVudEV2ZW50LCB7IHR5cGU6IFQgfT4pID0+IHZvaWQsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGFyciA9IHRoaXMubGlzdGVuZXJzLmdldCh0eXBlKTtcbiAgICBjb25zdCBjYXN0ID0gbGlzdGVuZXIgYXMgdW5rbm93biBhcyBMaXN0ZW5lcjtcbiAgICBpZiAoYXJyKSBhcnIucHVzaChjYXN0KTtcbiAgICBlbHNlIHRoaXMubGlzdGVuZXJzLnNldCh0eXBlLCBbY2FzdF0pO1xuICB9XG5cbiAgc2VuZE1vdmUoZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nLCBwcm9tb3RlVG8/OiBQcm9tb3Rpb25QaWVjZSk6IHZvaWQge1xuICAgIHRoaXMuc2VudE1vdmVzLnB1c2goXG4gICAgICBwcm9tb3RlVG8gIT09IHVuZGVmaW5lZCA/IHsgZnJvbSwgdG8sIHByb21vdGVUbyB9IDogeyBmcm9tLCB0byB9LFxuICAgICk7XG4gIH1cblxuICBlbWl0U3RhdGUocGF5bG9hZDogR2FtZVN0YXRlUGF5bG9hZCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGF0Y2goeyB0eXBlOiBcImdhbWUuc3RhdGVcIiwgcGF5bG9hZCB9KTtcbiAgfVxuICBlbWl0RGVsdGEocGF5bG9hZDogR2FtZURlbHRhUGF5bG9hZCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGF0Y2goeyB0eXBlOiBcImdhbWUuZGVsdGFcIiwgcGF5bG9hZCB9KTtcbiAgfVxuICBlbWl0RXJyb3IocGF5bG9hZDogeyBjb2RlOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZzsgZmF0YWw6IGJvb2xlYW4gfSk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGF0Y2goeyB0eXBlOiBcImVycm9yXCIsIHBheWxvYWQgfSk7XG4gIH1cblxuICBwcml2YXRlIGRpc3BhdGNoKGV2ZW50OiBHYW1lQ2xpZW50RXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBhcnIgPSB0aGlzLmxpc3RlbmVycy5nZXQoZXZlbnQudHlwZSk7XG4gICAgaWYgKCFhcnIpIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IGwgb2YgYXJyLnNsaWNlKCkpIGwoZXZlbnQpO1xuICB9XG5cbiAgLyoqIENvZXJjZSB0byB0aGUgYEdhbWVDbGllbnRgIHR5cGUgdGhlIFByZWRpY3Rpb25NYW5hZ2VyIGNvbnN0cnVjdG9yIGV4cGVjdHMuICovXG4gIGFzQ2xpZW50KCk6IEdhbWVDbGllbnQge1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgR2FtZUNsaWVudDtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEhlbHBlcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogU25hcHNob3QgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGFzIGEgYEdhbWVTdGF0ZVBheWxvYWRgLiAqL1xuZnVuY3Rpb24gc3RhcnRpbmdTdGF0ZVBheWxvYWQoKTogR2FtZVN0YXRlUGF5bG9hZCB7XG4gIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICBjb25zdCBmYWN0cyA9IGVuZ2luZS5zZXNzaW9uLmFsbEZhY3RzKCkubWFwKChmKSA9PiAoe1xuICAgIGlkOiBmLmlkIGFzIG51bWJlcixcbiAgICBhdHRyOiBmLmF0dHIgYXMgc3RyaW5nLFxuICAgIHZhbHVlOiBmLnZhbHVlLFxuICB9KSkgc2F0aXNmaWVzIEZhY3RbXTtcbiAgcmV0dXJuIHtcbiAgICBmYWN0cyxcbiAgICB0dXJuOiBcIndoaXRlXCIsXG4gICAgbGFzdFNlcTogMSxcbiAgICBtb3ZlSGlzdG9yeTogW10sXG4gICAgYWN0aXZlUnVsZXM6IFtdLFxuICAgIGZlbjogXCJybmJxa2Juci9wcHBwcHBwcC84LzgvOC84L1BQUFBQUFBQL1JOQlFLQk5SIHcgS1FrcSAtIDAgMVwiLFxuICB9O1xufVxuXG4vKipcbiAqIENvbXB1dGUgdGhlIGF1dGhvcml0YXRpdmUgZGVsdGEgZm9yIHBsYXlpbmcgYSBtb3ZlIG9uIGBmcm9tYCAoYSBzbmFwc2hvdCBvZlxuICogc3RhdGUgYmVmb3JlIHRoZSBtb3ZlKS4gUmV0dXJucyB0aGUgaW5zZXJ0ZWQvcmV0cmFjdGVkIGZhY3QgbGlzdHMgdGhlIHNlcnZlclxuICogd291bGQgYnJvYWRjYXN0LiBXZSBjb21wdXRlIGl0IGJ5IGRpZmZpbmcgc2Vzc2lvbi5hbGxGYWN0cygpIGJlZm9yZS9hZnRlci5cbiAqL1xuZnVuY3Rpb24gY29tcHV0ZURlbHRhKFxuICBmcm9tRmFjdHM6IEZhY3RbXSxcbiAgdG86IENoZXNzRW5naW5lLFxuICBtb3ZlTm90YXRpb246IHN0cmluZyxcbik6IEdhbWVEZWx0YVBheWxvYWQge1xuICBjb25zdCB0b0ZhY3RzID0gdG8uc2Vzc2lvbi5hbGxGYWN0cygpLm1hcCgoZikgPT4gKHtcbiAgICBpZDogZi5pZCBhcyBudW1iZXIsXG4gICAgYXR0cjogZi5hdHRyIGFzIHN0cmluZyxcbiAgICB2YWx1ZTogZi52YWx1ZSxcbiAgfSkpIHNhdGlzZmllcyBGYWN0W107XG5cbiAgY29uc3Qga2V5ID0gKGY6IEZhY3QpID0+IGAke2YuaWR9OiR7Zi5hdHRyfWA7XG4gIGNvbnN0IGJlZm9yZU1hcCA9IG5ldyBNYXAoZnJvbUZhY3RzLm1hcCgoZikgPT4gW2tleShmKSwgZl0pKTtcbiAgY29uc3QgYWZ0ZXJNYXAgPSBuZXcgTWFwKHRvRmFjdHMubWFwKChmKSA9PiBba2V5KGYpLCBmXSkpO1xuXG4gIGNvbnN0IHJldHJhY3RlZDogRmFjdFtdID0gW107XG4gIGNvbnN0IGluc2VydGVkOiBGYWN0W10gPSBbXTtcblxuICBmb3IgKGNvbnN0IFtrLCBmXSBvZiBiZWZvcmVNYXApIHtcbiAgICBjb25zdCBhID0gYWZ0ZXJNYXAuZ2V0KGspO1xuICAgIGlmIChhID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHJhY3RlZC5wdXNoKGYpO1xuICAgIH0gZWxzZSBpZiAoIU9iamVjdC5pcyhhLnZhbHVlLCBmLnZhbHVlKSkge1xuICAgICAgLy8gVmFsdWUgY2hhbmdlZCDihpIgcmV0cmFjdCArIGluc2VydC5cbiAgICAgIHJldHJhY3RlZC5wdXNoKGYpO1xuICAgICAgaW5zZXJ0ZWQucHVzaChhKTtcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBbaywgZl0gb2YgYWZ0ZXJNYXApIHtcbiAgICBpZiAoIWJlZm9yZU1hcC5oYXMoaykpIGluc2VydGVkLnB1c2goZik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGluc2VydGVkLFxuICAgIHJldHJhY3RlZCxcbiAgICBtb3ZlTm90YXRpb24sXG4gICAgdHVybjogdG8uZ2V0Q3VycmVudFR1cm4oKSxcbiAgICBnYW1lT3ZlcjogbnVsbCxcbiAgfTtcbn1cblxuLyoqIEJ1aWxkIGEgZnJlc2ggZW5naW5lIGxvYWRlZCBmcm9tIHRoZSBnaXZlbiBmYWN0cyAobWlycm9ycyBzZXJ2ZXIgc3RhdGUpLiAqL1xuZnVuY3Rpb24gZW5naW5lRnJvbUZhY3RzKGZhY3RzOiBGYWN0W10pOiBDaGVzc0VuZ2luZSB7XG4gIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICBjb25zdCBleGlzdGluZyA9IGVuZ2luZS5zZXNzaW9uLmFsbEZhY3RzKCkuc2xpY2UoKTtcbiAgZm9yIChjb25zdCBmIG9mIGV4aXN0aW5nKSB7XG4gICAgZW5naW5lLnNlc3Npb24ucmV0cmFjdChmLmlkLCBmLmF0dHIgYXMgQXR0cktleSk7XG4gIH1cbiAgZm9yIChjb25zdCBmIG9mIGZhY3RzKSB7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KFxuICAgICAgZi5pZCBhcyBFbnRpdHlJZCxcbiAgICAgIGYuYXR0ciBhcyBBdHRyS2V5LFxuICAgICAgZi52YWx1ZSBhcyBGYWN0VmFsdWUsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gZW5naW5lO1xufVxuXG4vKiogRmluZCB0aGUgc3F1YXJlIG9mIHRoZSB3aGl0ZSBwaWVjZSBhdCBgYWxnZWJyYWljYCBpbiBhIGZhY3QgbGlzdC4gKi9cbmZ1bmN0aW9uIGZpbmRQb3NpdGlvbkZhY3QoXG4gIGZhY3RzOiBGYWN0W10sXG4gIHNxdWFyZTogbnVtYmVyLFxuKTogRmFjdCB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBmYWN0cy5maW5kKChmKSA9PiBmLmF0dHIgPT09IFwiUG9zaXRpb25cIiAmJiBmLnZhbHVlID09PSBzcXVhcmUpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRlc3RzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZGVzY3JpYmUoXCJQcmVkaWN0aW9uTWFuYWdlclwiLCAoKSA9PiB7XG4gIGxldCBjbGllbnQ6IE1vY2tHYW1lQ2xpZW50O1xuICBsZXQgbGlzdGVuZXI6IFJldHVyblR5cGU8dHlwZW9mIHZpLmZuPjtcbiAgbGV0IHBtOiBQcmVkaWN0aW9uTWFuYWdlcjtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBjbGllbnQgPSBuZXcgTW9ja0dhbWVDbGllbnQoKTtcbiAgICBsaXN0ZW5lciA9IHZpLmZuKCk7XG4gICAgcG0gPSBuZXcgUHJlZGljdGlvbk1hbmFnZXIoY2xpZW50LmFzQ2xpZW50KCksIGxpc3RlbmVyKTtcbiAgICAvLyBTZWVkIGF1dGhvcml0YXRpdmUgc3RhdGUgd2l0aCB0aGUgRklERSBzdGFydGluZyBwb3NpdGlvbi5cbiAgICBjbGllbnQuZW1pdFN0YXRlKHN0YXJ0aW5nU3RhdGVQYXlsb2FkKCkpO1xuICAgIGxpc3RlbmVyLm1vY2tDbGVhcigpOyAvLyBpZ25vcmUgdGhlIGluaXRpYWwgc3RhdGUgbm90aWZpY2F0aW9uXG4gIH0pO1xuXG4gIGl0KFwiYXBwbGllcyBhIGxlZ2FsIG9wdGltaXN0aWMgbW92ZSwgdXBkYXRlcyBlbmdpbmUsIGFuZCBzZW5kcyBpdFwiLCAoKSA9PiB7XG4gICAgLy8gZTIgLT4gZTRcbiAgICBjb25zdCBmcm9tID0gYWxnZWJyYWljVG9TcXVhcmUoXCJlMlwiKTtcbiAgICBjb25zdCB0byA9IGFsZ2VicmFpY1RvU3F1YXJlKFwiZTRcIik7XG5cbiAgICBjb25zdCBvayA9IHBtLmFwcGx5UHJlZGljdGlvbihmcm9tLCB0byk7XG5cbiAgICBleHBlY3Qob2spLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KGxpc3RlbmVyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgZXhwZWN0KGNsaWVudC5zZW50TW92ZXMpLnRvRXF1YWwoW3sgZnJvbTogXCJlMlwiLCB0bzogXCJlNFwiIH1dKTtcblxuICAgIC8vIFByZWRpY3RlZCBlbmdpbmUgc2hvdWxkIHNob3cgdGhlIHBhd24gb24gZTQgYW5kIGJsYWNrIHRvIG1vdmUuXG4gICAgY29uc3QgcHJlZGljdGVkID0gcG0uZ2V0Q3VycmVudEVuZ2luZSgpO1xuICAgIGV4cGVjdChwcmVkaWN0ZWQuZ2V0Q3VycmVudFR1cm4oKSkudG9CZShcImJsYWNrXCIpO1xuICAgIGNvbnN0IGU0RmFjdCA9IGZpbmRQb3NpdGlvbkZhY3QocHJlZGljdGVkLnNlc3Npb24uYWxsRmFjdHMoKSwgdG8pO1xuICAgIGV4cGVjdChlNEZhY3QpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICAvLyBCYXNlIGVuZ2luZSBtdXN0IE5PVCBoYXZlIG1vdmVkIChzdGlsbCBzaG93cyBwYXduIG9uIGUyLCB3aGl0ZSB0byBtb3ZlKS5cbiAgICBjb25zdCBiYXNlID0gcG0uZ2V0QmFzZUVuZ2luZSgpO1xuICAgIGV4cGVjdChiYXNlLmdldEN1cnJlbnRUdXJuKCkpLnRvQmUoXCJ3aGl0ZVwiKTtcbiAgICBleHBlY3QoZmluZFBvc2l0aW9uRmFjdChiYXNlLnNlc3Npb24uYWxsRmFjdHMoKSwgZnJvbSkpLnRvQmVEZWZpbmVkKCk7XG4gICAgZXhwZWN0KGZpbmRQb3NpdGlvbkZhY3QoYmFzZS5zZXNzaW9uLmFsbEZhY3RzKCksIHRvKSkudG9CZVVuZGVmaW5lZCgpO1xuXG4gICAgLy8gQSBwZW5kaW5nIG1vdmUgaXMgcmVjb3JkZWQuXG4gICAgZXhwZWN0KHBtLmdldFBlbmRpbmdNb3ZlcygpKS50b0VxdWFsKFt7IGZyb20sIHRvIH1dKTtcbiAgfSk7XG5cbiAgaXQoXCJkcm9wcyBhbiBpbGxlZ2FsIG9wdGltaXN0aWMgbW92ZSB3aXRob3V0IG11dGF0aW5nIHN0YXRlIG9yIHNlbmRpbmdcIiwgKCkgPT4ge1xuICAgIC8vIGUyIC0+IGU1IGlzIG5vdCBhIGxlZ2FsIG9wZW5pbmcgbW92ZSAodHdvLXNxdWFyZSBhZHZhbmNlIGxhbmRzIG9uIGU0KS5cbiAgICBjb25zdCBmcm9tID0gYWxnZWJyYWljVG9TcXVhcmUoXCJlMlwiKTtcbiAgICBjb25zdCB0byA9IGFsZ2VicmFpY1RvU3F1YXJlKFwiZTVcIik7XG5cbiAgICBjb25zdCBvayA9IHBtLmFwcGx5UHJlZGljdGlvbihmcm9tLCB0byk7XG5cbiAgICBleHBlY3Qob2spLnRvQmUoZmFsc2UpO1xuICAgIGV4cGVjdChsaXN0ZW5lcikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICBleHBlY3QoY2xpZW50LnNlbnRNb3ZlcykudG9FcXVhbChbXSk7XG4gICAgZXhwZWN0KHBtLmdldFBlbmRpbmdNb3ZlcygpKS50b0VxdWFsKFtdKTtcbiAgICAvLyBQcmVkaWN0ZWQgYW5kIGJhc2UgZW5naW5lcyBib3RoIHN0aWxsIHNob3cgdGhlIG9yaWdpbmFsIHBvc2l0aW9uLlxuICAgIGV4cGVjdChwbS5nZXRDdXJyZW50RW5naW5lKCkuZ2V0Q3VycmVudFR1cm4oKSkudG9CZShcIndoaXRlXCIpO1xuICB9KTtcblxuICBpdChcInJlY29uY2lsZXMgdmlhIGdhbWUuZGVsdGE6IGFwcGxpZXMgYXV0aG9yaXRhdGl2ZSBzdGF0ZSwgY2xlYXJzIHByZWRpY3Rpb25cIiwgKCkgPT4ge1xuICAgIGNvbnN0IGZyb20gPSBhbGdlYnJhaWNUb1NxdWFyZShcImUyXCIpO1xuICAgIGNvbnN0IHRvID0gYWxnZWJyYWljVG9TcXVhcmUoXCJlNFwiKTtcbiAgICBwbS5hcHBseVByZWRpY3Rpb24oZnJvbSwgdG8pO1xuICAgIGxpc3RlbmVyLm1vY2tDbGVhcigpO1xuXG4gICAgLy8gQ29tcHV0ZSB0aGUgc2VydmVyLWF1dGhvcml0YXRpdmUgZGVsdGEgdGhlIHNlcnZlciB3b3VsZCBicm9hZGNhc3QuXG4gICAgY29uc3QgYmVmb3JlRmFjdHMgPSBwbS5nZXRCYXNlRW5naW5lKCkuc2Vzc2lvbi5hbGxGYWN0cygpLm1hcCgoZikgPT4gKHtcbiAgICAgIGlkOiBmLmlkIGFzIG51bWJlcixcbiAgICAgIGF0dHI6IGYuYXR0ciBhcyBzdHJpbmcsXG4gICAgICB2YWx1ZTogZi52YWx1ZSxcbiAgICB9KSk7XG4gICAgY29uc3QgYXV0aG9yaXRhdGl2ZSA9IGVuZ2luZUZyb21GYWN0cyhiZWZvcmVGYWN0cyk7XG4gICAgY29uc3QgbW92ZSA9IGF1dGhvcml0YXRpdmUuZmluZE1vdmUoZnJvbSwgdG8pO1xuICAgIGV4cGVjdChtb3ZlKS5ub3QudG9CZU51bGwoKTtcbiAgICBhdXRob3JpdGF0aXZlLmFwcGx5TW92ZShtb3ZlISk7XG4gICAgY29uc3QgZGVsdGEgPSBjb21wdXRlRGVsdGEoYmVmb3JlRmFjdHMsIGF1dGhvcml0YXRpdmUsIFwiZTRcIik7XG5cbiAgICBjbGllbnQuZW1pdERlbHRhKGRlbHRhKTtcblxuICAgIC8vIFByZWRpY3Rpb24gY2xlYXJlZDsgYmFzZSBlbmdpbmUgbm93IHJlZmxlY3RzIHRoZSBzZXJ2ZXIncyBlNC5cbiAgICBleHBlY3QocG0uZ2V0UGVuZGluZ01vdmVzKCkpLnRvRXF1YWwoW10pO1xuICAgIGNvbnN0IGN1cnJlbnQgPSBwbS5nZXRDdXJyZW50RW5naW5lKCk7XG4gICAgZXhwZWN0KGN1cnJlbnQpLnRvQmUocG0uZ2V0QmFzZUVuZ2luZSgpKTsgLy8gbm8gcHJlZGljdGVkIGVuZ2luZSBhbnltb3JlXG4gICAgZXhwZWN0KGN1cnJlbnQuZ2V0Q3VycmVudFR1cm4oKSkudG9CZShcImJsYWNrXCIpO1xuICAgIGV4cGVjdChcbiAgICAgIGZpbmRQb3NpdGlvbkZhY3QoY3VycmVudC5zZXNzaW9uLmFsbEZhY3RzKCksIHRvKSxcbiAgICApLnRvQmVEZWZpbmVkKCk7XG4gICAgZXhwZWN0KGxpc3RlbmVyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgZXhwZWN0KGxpc3RlbmVyKS50b0hhdmVCZWVuTGFzdENhbGxlZFdpdGgocG0uZ2V0QmFzZUVuZ2luZSgpKTtcbiAgfSk7XG5cbiAgaXQoXCJyb2xscyBiYWNrIG9uIG5vbi1mYXRhbCBzZXJ2ZXIgZXJyb3IgKG1vdmUgcmVqZWN0ZWQpXCIsICgpID0+IHtcbiAgICBjb25zdCBmcm9tID0gYWxnZWJyYWljVG9TcXVhcmUoXCJlMlwiKTtcbiAgICBjb25zdCB0byA9IGFsZ2VicmFpY1RvU3F1YXJlKFwiZTRcIik7XG4gICAgcG0uYXBwbHlQcmVkaWN0aW9uKGZyb20sIHRvKTtcbiAgICBsaXN0ZW5lci5tb2NrQ2xlYXIoKTtcblxuICAgIGNsaWVudC5lbWl0RXJyb3IoeyBjb2RlOiBcIk5PVF9ZT1VSX1RVUk5cIiwgbWVzc2FnZTogXCJub3BlXCIsIGZhdGFsOiBmYWxzZSB9KTtcblxuICAgIC8vIFByZWRpY3RlZCBlbmdpbmUgY2xlYXJlZDsgVUkgc25hcHMgYmFjayB0byB0aGUgYmFzZSAocHJlLW1vdmUpIHN0YXRlLlxuICAgIGV4cGVjdChwbS5nZXRQZW5kaW5nTW92ZXMoKSkudG9FcXVhbChbXSk7XG4gICAgY29uc3QgY3VycmVudCA9IHBtLmdldEN1cnJlbnRFbmdpbmUoKTtcbiAgICBleHBlY3QoY3VycmVudCkudG9CZShwbS5nZXRCYXNlRW5naW5lKCkpO1xuICAgIGV4cGVjdChjdXJyZW50LmdldEN1cnJlbnRUdXJuKCkpLnRvQmUoXCJ3aGl0ZVwiKTtcbiAgICBleHBlY3QoZmluZFBvc2l0aW9uRmFjdChjdXJyZW50LnNlc3Npb24uYWxsRmFjdHMoKSwgZnJvbSkpLnRvQmVEZWZpbmVkKCk7XG4gICAgZXhwZWN0KGZpbmRQb3NpdGlvbkZhY3QoY3VycmVudC5zZXNzaW9uLmFsbEZhY3RzKCksIHRvKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChsaXN0ZW5lcikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICB9KTtcblxuICBpdChcImlnbm9yZXMgZmF0YWwgZXJyb3JzIChzZXNzaW9uIHRlYXJkb3duIGhhbmRsZWQgZWxzZXdoZXJlKVwiLCAoKSA9PiB7XG4gICAgY29uc3QgZnJvbSA9IGFsZ2VicmFpY1RvU3F1YXJlKFwiZTJcIik7XG4gICAgY29uc3QgdG8gPSBhbGdlYnJhaWNUb1NxdWFyZShcImU0XCIpO1xuICAgIHBtLmFwcGx5UHJlZGljdGlvbihmcm9tLCB0byk7XG4gICAgbGlzdGVuZXIubW9ja0NsZWFyKCk7XG5cbiAgICAvLyBGYXRhbCBlcnJvcnMgZG9uJ3QgdHJpZ2dlciBhIHJvbGxiYWNrIOKAlCB0aGUgYXBwIGxheWVyIHdpbGwgdGVhciB0aGVcbiAgICAvLyBzZXNzaW9uIGRvd24gYW5kIHJlLWJvb3RzdHJhcCB2aWEgYSBmcmVzaCBgZ2FtZS5zdGF0ZWAuXG4gICAgY2xpZW50LmVtaXRFcnJvcih7IGNvZGU6IFwiQkFEX1RPS0VOXCIsIG1lc3NhZ2U6IFwiZXhwaXJlZFwiLCBmYXRhbDogdHJ1ZSB9KTtcblxuICAgIGV4cGVjdChwbS5nZXRQZW5kaW5nTW92ZXMoKSkudG9FcXVhbChbeyBmcm9tLCB0byB9XSk7XG4gICAgZXhwZWN0KGxpc3RlbmVyKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcblxuICBpdChcImFwcGx5RnVsbFN0YXRlIHJlcGxhY2VzIGJhc2UgZW5naW5lIHdpdGggc2VydmVyIGZhY3RzLCBjbGVhcnMgcGVuZGluZ1wiLCAoKSA9PiB7XG4gICAgLy8gUHJlLXBvcHVsYXRlIGEgcGVuZGluZyBwcmVkaWN0aW9uIHdlIGV4cGVjdCB0byBiZSB3aXBlZC5cbiAgICBwbS5hcHBseVByZWRpY3Rpb24oYWxnZWJyYWljVG9TcXVhcmUoXCJlMlwiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJlNFwiKSk7XG4gICAgbGlzdGVuZXIubW9ja0NsZWFyKCk7XG5cbiAgICAvLyBFbWl0IGEgZGlmZmVyZW50IGF1dGhvcml0YXRpdmUgcG9zaXRpb246IHN0YXJ0aW5nIHBvc2l0aW9uIGJ1dCBibGFjayB0byBtb3ZlLlxuICAgIGNvbnN0IGFsdCA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIC8vIEVtdWxhdGUgc2VydmVyLWRlY2lkZWQgdHVybiBvdmVycmlkZTogcmVwbGFjZSBUdXJuIGZhY3QuXG4gICAgYWx0LnNlc3Npb24ucmV0cmFjdChHQU1FX0VOVElUWSwgXCJUdXJuXCIpO1xuICAgIGFsdC5zZXNzaW9uLmluc2VydChHQU1FX0VOVElUWSwgXCJUdXJuXCIsIFwiYmxhY2tcIik7XG4gICAgY29uc3QgZmFjdHMgPSBhbHQuc2Vzc2lvbi5hbGxGYWN0cygpLm1hcCgoZikgPT4gKHtcbiAgICAgIGlkOiBmLmlkIGFzIG51bWJlcixcbiAgICAgIGF0dHI6IGYuYXR0ciBhcyBzdHJpbmcsXG4gICAgICB2YWx1ZTogZi52YWx1ZSxcbiAgICB9KSkgc2F0aXNmaWVzIEZhY3RbXTtcbiAgICBjbGllbnQuZW1pdFN0YXRlKHtcbiAgICAgIGZhY3RzLFxuICAgICAgdHVybjogXCJibGFja1wiLFxuICAgICAgbGFzdFNlcTogNDIsXG4gICAgICBtb3ZlSGlzdG9yeTogW10sXG4gICAgICBhY3RpdmVSdWxlczogW10sXG4gICAgICBmZW46IFwiXCIsXG4gICAgfSk7XG5cbiAgICBleHBlY3QocG0uZ2V0UGVuZGluZ01vdmVzKCkpLnRvRXF1YWwoW10pO1xuICAgIGV4cGVjdChwbS5nZXRDdXJyZW50RW5naW5lKCkuZ2V0Q3VycmVudFR1cm4oKSkudG9CZShcImJsYWNrXCIpO1xuICAgIC8vIEJhc2UgYW5kIGN1cnJlbnQgZW5naW5lcyBtYXRjaCAobm8gcHJlZGljdGlvbiBvdXRzdGFuZGluZykuXG4gICAgZXhwZWN0KHBtLmdldEN1cnJlbnRFbmdpbmUoKSkudG9CZShwbS5nZXRCYXNlRW5naW5lKCkpO1xuICAgIGV4cGVjdChsaXN0ZW5lcikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICB9KTtcblxuICBpdChcInNlbmRzIHByb21vdGlvbiBtb3ZlcyB3aXRoIGFsZ2VicmFpYyBub3RhdGlvbiBhbmQgcHJvbW90ZVRvIGludGFjdFwiLCAoKSA9PiB7XG4gICAgLy8gQnVpbGQgYSBwb3NpdGlvbiB3aGVyZSB3aGl0ZSBjYW4gcHJvbW90ZTogcGF3biBvbiBhNywga2luZ3Mgb25seS5cbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICAvLyBXaXBlIHN0YXJ0aW5nIHBvc2l0aW9uIGZpcnN0LlxuICAgIGNvbnN0IGV4aXN0aW5nID0gZW5naW5lLnNlc3Npb24uYWxsRmFjdHMoKS5zbGljZSgpO1xuICAgIGZvciAoY29uc3QgZiBvZiBleGlzdGluZykge1xuICAgICAgZW5naW5lLnNlc3Npb24ucmV0cmFjdChmLmlkLCBmLmF0dHIgYXMgQXR0cktleSk7XG4gICAgfVxuICAgIC8vIEluc2VydCBtaW5pbWFsIHByb21vdGlvbiBwb3NpdGlvbjogd2hpdGUgcGF3biBhNywgd2hpdGUga2luZyBlMSwgYmxhY2sga2luZyBlOC5cbiAgICBsZXQgaWQgPSAxO1xuICAgIGNvbnN0IGluc2VydFBpZWNlID0gKFxuICAgICAgdHlwZTogc3RyaW5nLFxuICAgICAgY29sb3I6IHN0cmluZyxcbiAgICAgIHNxdWFyZTogbnVtYmVyLFxuICAgICk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgZWlkID0gaWQrKyBhcyBFbnRpdHlJZDtcbiAgICAgIGVuZ2luZS5zZXNzaW9uLmluc2VydChlaWQsIFwiUGllY2VUeXBlXCIsIHR5cGUpO1xuICAgICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KGVpZCwgXCJDb2xvclwiLCBjb2xvcik7XG4gICAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQoZWlkLCBcIlBvc2l0aW9uXCIsIHNxdWFyZSk7XG4gICAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQoZWlkLCBcIkhhc01vdmVkXCIsIHRydWUpO1xuICAgIH07XG4gICAgaW5zZXJ0UGllY2UoXCJwYXduXCIsIFwid2hpdGVcIiwgYWxnZWJyYWljVG9TcXVhcmUoXCJhN1wiKSk7XG4gICAgaW5zZXJ0UGllY2UoXCJraW5nXCIsIFwid2hpdGVcIiwgYWxnZWJyYWljVG9TcXVhcmUoXCJlMVwiKSk7XG4gICAgaW5zZXJ0UGllY2UoXCJraW5nXCIsIFwiYmxhY2tcIiwgYWxnZWJyYWljVG9TcXVhcmUoXCJlOFwiKSk7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIlR1cm5cIiwgXCJ3aGl0ZVwiKTtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiSGFsZm1vdmVDbG9ja1wiLCAwKTtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiRnVsbG1vdmVOdW1iZXJcIiwgMSk7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIkVuUGFzc2FudFRhcmdldFwiLCBudWxsKTtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiR2FtZVN0YXR1c1wiLCBcImFjdGl2ZVwiKTtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiV2lubmVyXCIsIG51bGwpO1xuXG4gICAgY29uc3QgZmFjdHMgPSBlbmdpbmUuc2Vzc2lvbi5hbGxGYWN0cygpLm1hcCgoZikgPT4gKHtcbiAgICAgIGlkOiBmLmlkIGFzIG51bWJlcixcbiAgICAgIGF0dHI6IGYuYXR0ciBhcyBzdHJpbmcsXG4gICAgICB2YWx1ZTogZi52YWx1ZSxcbiAgICB9KSkgc2F0aXNmaWVzIEZhY3RbXTtcblxuICAgIGNsaWVudC5lbWl0U3RhdGUoe1xuICAgICAgZmFjdHMsXG4gICAgICB0dXJuOiBcIndoaXRlXCIsXG4gICAgICBsYXN0U2VxOiAxMCxcbiAgICAgIG1vdmVIaXN0b3J5OiBbXSxcbiAgICAgIGFjdGl2ZVJ1bGVzOiBbXSxcbiAgICAgIGZlbjogXCJcIixcbiAgICB9KTtcbiAgICBsaXN0ZW5lci5tb2NrQ2xlYXIoKTtcblxuICAgIGNvbnN0IGZyb20gPSBhbGdlYnJhaWNUb1NxdWFyZShcImE3XCIpO1xuICAgIGNvbnN0IHRvID0gYWxnZWJyYWljVG9TcXVhcmUoXCJhOFwiKTtcbiAgICBjb25zdCBvayA9IHBtLmFwcGx5UHJlZGljdGlvbihmcm9tLCB0bywgXCJrbmlnaHRcIik7XG5cbiAgICBleHBlY3Qob2spLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KGNsaWVudC5zZW50TW92ZXMpLnRvRXF1YWwoW1xuICAgICAgeyBmcm9tOiBcImE3XCIsIHRvOiBcImE4XCIsIHByb21vdGVUbzogXCJrbmlnaHRcIiB9LFxuICAgIF0pO1xuICAgIC8vIFByZWRpY3RlZCBlbmdpbmUgc2hvdWxkIHNob3cgYSB3aGl0ZSBrbmlnaHQgb24gYTguXG4gICAgY29uc3QgcHJlZGljdGVkID0gcG0uZ2V0Q3VycmVudEVuZ2luZSgpO1xuICAgIGNvbnN0IGE4ID0gcHJlZGljdGVkLnNlc3Npb25cbiAgICAgIC5hbGxGYWN0cygpXG4gICAgICAuZmluZCgoZikgPT4gZi5hdHRyID09PSBcIlBvc2l0aW9uXCIgJiYgZi52YWx1ZSA9PT0gdG8pO1xuICAgIGV4cGVjdChhOCkudG9CZURlZmluZWQoKTtcbiAgICBjb25zdCB0eXBlT2ZQcm9tb3RlZCA9IHByZWRpY3RlZC5zZXNzaW9uXG4gICAgICAuYWxsRmFjdHMoKVxuICAgICAgLmZpbmQoKGYpID0+IGYuaWQgPT09IGE4IS5pZCAmJiBmLmF0dHIgPT09IFwiUGllY2VUeXBlXCIpPy52YWx1ZTtcbiAgICBleHBlY3QodHlwZU9mUHJvbW90ZWQpLnRvQmUoXCJrbmlnaHRcIik7XG4gIH0pO1xuXG4gIGl0KFwic2ltdWxhdGVkIDEwMG1zIGxhdGVuY3k6IHByZWRpY3Rpb24gdGhlbiBkZWx0YSBjb252ZXJnZXMgdG8gc2VydmVyIHN0YXRlXCIsIGFzeW5jICgpID0+IHtcbiAgICB2aS51c2VGYWtlVGltZXJzKCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZyb20gPSBhbGdlYnJhaWNUb1NxdWFyZShcImUyXCIpO1xuICAgICAgY29uc3QgdG8gPSBhbGdlYnJhaWNUb1NxdWFyZShcImU0XCIpO1xuXG4gICAgICAvLyB0PTA6IGNhcHR1cmUgdGhlIGZhY3RzIHRoZSBzZXJ2ZXIgd2lsbCBzZWUgQkVGT1JFIHByb2Nlc3NpbmcuXG4gICAgICBjb25zdCBzZXJ2ZXJWaWV3QmVmb3JlID0gcG0uZ2V0QmFzZUVuZ2luZSgpLnNlc3Npb24uYWxsRmFjdHMoKS5tYXAoKGYpID0+ICh7XG4gICAgICAgIGlkOiBmLmlkIGFzIG51bWJlcixcbiAgICAgICAgYXR0cjogZi5hdHRyIGFzIHN0cmluZyxcbiAgICAgICAgdmFsdWU6IGYudmFsdWUsXG4gICAgICB9KSk7XG5cbiAgICAgIGNvbnN0IHByZWRpY3RPayA9IHBtLmFwcGx5UHJlZGljdGlvbihmcm9tLCB0byk7XG4gICAgICBleHBlY3QocHJlZGljdE9rKS50b0JlKHRydWUpO1xuXG4gICAgICAvLyBJbW1lZGlhdGVseSB0aGUgVUkgc2VlcyB0aGUgb3B0aW1pc3RpYyBzdGF0ZTogYmxhY2sgdG8gbW92ZS5cbiAgICAgIGV4cGVjdChwbS5nZXRDdXJyZW50RW5naW5lKCkuZ2V0Q3VycmVudFR1cm4oKSkudG9CZShcImJsYWNrXCIpO1xuXG4gICAgICAvLyBTY2hlZHVsZSB0aGUgc2VydmVyJ3MgYXV0aG9yaXRhdGl2ZSBkZWx0YSAxMDBtcyBmcm9tIG5vdy5cbiAgICAgIGNvbnN0IGF1dGhvcml0YXRpdmUgPSBlbmdpbmVGcm9tRmFjdHMoc2VydmVyVmlld0JlZm9yZSk7XG4gICAgICBjb25zdCBzZXJ2ZXJNb3ZlID0gYXV0aG9yaXRhdGl2ZS5maW5kTW92ZShmcm9tLCB0byk7XG4gICAgICBleHBlY3Qoc2VydmVyTW92ZSkubm90LnRvQmVOdWxsKCk7XG4gICAgICBhdXRob3JpdGF0aXZlLmFwcGx5TW92ZShzZXJ2ZXJNb3ZlISk7XG4gICAgICBjb25zdCBkZWx0YSA9IGNvbXB1dGVEZWx0YShzZXJ2ZXJWaWV3QmVmb3JlLCBhdXRob3JpdGF0aXZlLCBcImU0XCIpO1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IGNsaWVudC5lbWl0RGVsdGEoZGVsdGEpLCAxMDApO1xuXG4gICAgICAvLyBBZHZhbmNlIHZpcnR1YWwgdGltZS4gQWZ0ZXIgMTAwbXMgdGhlIGxpc3RlbmVyIGRlbGl2ZXJzIHRoZSBkZWx0YS5cbiAgICAgIGF3YWl0IHZpLmFkdmFuY2VUaW1lcnNCeVRpbWVBc3luYygxMDApO1xuXG4gICAgICAvLyBGaW5hbCBzdGF0ZSBtdXN0IG1hdGNoIHRoZSBhdXRob3JpdGF0aXZlIHNlcnZlciBlbmdpbmUuXG4gICAgICBjb25zdCBmaW5hbEZhY3RzID0gcG0uZ2V0Q3VycmVudEVuZ2luZSgpLnNlc3Npb24uYWxsRmFjdHMoKTtcbiAgICAgIGNvbnN0IGF1dGhGYWN0cyA9IGF1dGhvcml0YXRpdmUuc2Vzc2lvbi5hbGxGYWN0cygpO1xuXG4gICAgICAvLyBDb21wYXJlIGFzIHNvcnRlZCBzdHJpbmcgdHJpcGxlcyBmb3Igc3RydWN0dXJhbCBlcXVhbGl0eS5cbiAgICAgIGNvbnN0IHRvS2V5ID0gKGZzOiB0eXBlb2YgZmluYWxGYWN0cykgPT5cbiAgICAgICAgZnNcbiAgICAgICAgICAubWFwKChmKSA9PiBgJHtmLmlkfXwke2YuYXR0cn18JHtKU09OLnN0cmluZ2lmeShmLnZhbHVlKX1gKVxuICAgICAgICAgIC5zb3J0KCk7XG4gICAgICBleHBlY3QodG9LZXkoZmluYWxGYWN0cykpLnRvRXF1YWwodG9LZXkoYXV0aEZhY3RzKSk7XG4gICAgICBleHBlY3QocG0uZ2V0Q3VycmVudEVuZ2luZSgpLmdldEN1cnJlbnRUdXJuKCkpLnRvQmUoXCJibGFja1wiKTtcbiAgICAgIGV4cGVjdChwbS5nZXRQZW5kaW5nTW92ZXMoKSkudG9FcXVhbChbXSk7XG4gICAgICBleHBlY3QocG0uZ2V0Q3VycmVudEVuZ2luZSgpKS50b0JlKHBtLmdldEJhc2VFbmdpbmUoKSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHZpLnVzZVJlYWxUaW1lcnMoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwibXVsdGlwbGUgcHJlZGljdGlvbnMgYXJlIGFsbCBjbGVhcmVkIG9uIHJlY29uY2lsZVwiLCAoKSA9PiB7XG4gICAgLy8gV2hpdGUgcGxheXMgZTItPmU0LCB0aGVuIChoeXBvdGhldGljYWxseSkgc3RhY2tzIGEgc2Vjb25kIHByZWRpY3Rpb24uXG4gICAgLy8gSW4gY2hlc3MgdGhpcyBjYW4ndCBoYXBwZW4gKHR1cm4gZmxpcCksIGJ1dCB0aGUgbWFuYWdlciBtdXN0IGhhbmRsZVxuICAgIC8vIHRoZSBjYXNlIGNsZWFubHk6IGJvdGggcHJlZGljdGlvbnMgd2lwZWQgb24gdGhlIGZpcnN0IHNlcnZlciBkZWx0YS5cbiAgICBjb25zdCBmcm9tMSA9IGFsZ2VicmFpY1RvU3F1YXJlKFwiZTJcIik7XG4gICAgY29uc3QgdG8xID0gYWxnZWJyYWljVG9TcXVhcmUoXCJlNFwiKTtcbiAgICBwbS5hcHBseVByZWRpY3Rpb24oZnJvbTEsIHRvMSk7XG5cbiAgICBjb25zdCBmcm9tMiA9IGFsZ2VicmFpY1RvU3F1YXJlKFwiZDdcIik7XG4gICAgY29uc3QgdG8yID0gYWxnZWJyYWljVG9TcXVhcmUoXCJkNVwiKTtcbiAgICBwbS5hcHBseVByZWRpY3Rpb24oZnJvbTIsIHRvMik7XG5cbiAgICBleHBlY3QocG0uZ2V0UGVuZGluZ01vdmVzKCkpLnRvSGF2ZUxlbmd0aCgyKTtcblxuICAgIC8vIFNlcnZlciBhY2tub3dsZWRnZXMgb25seSBlMi0+ZTQ7IHBlbmRpbmcgcXVldWUgbXVzdCByZXNldC5cbiAgICBjb25zdCBiZWZvcmVGYWN0cyA9IHBtLmdldEJhc2VFbmdpbmUoKS5zZXNzaW9uLmFsbEZhY3RzKCkubWFwKChmKSA9PiAoe1xuICAgICAgaWQ6IGYuaWQgYXMgbnVtYmVyLFxuICAgICAgYXR0cjogZi5hdHRyIGFzIHN0cmluZyxcbiAgICAgIHZhbHVlOiBmLnZhbHVlLFxuICAgIH0pKTtcbiAgICBjb25zdCBhdXRob3JpdGF0aXZlID0gZW5naW5lRnJvbUZhY3RzKGJlZm9yZUZhY3RzKTtcbiAgICBhdXRob3JpdGF0aXZlLmFwcGx5TW92ZShhdXRob3JpdGF0aXZlLmZpbmRNb3ZlKGZyb20xLCB0bzEpISk7XG4gICAgY29uc3QgZGVsdGEgPSBjb21wdXRlRGVsdGEoYmVmb3JlRmFjdHMsIGF1dGhvcml0YXRpdmUsIFwiZTRcIik7XG4gICAgY2xpZW50LmVtaXREZWx0YShkZWx0YSk7XG5cbiAgICBleHBlY3QocG0uZ2V0UGVuZGluZ01vdmVzKCkpLnRvRXF1YWwoW10pO1xuICAgIGV4cGVjdChwbS5nZXRDdXJyZW50RW5naW5lKCkpLnRvQmUocG0uZ2V0QmFzZUVuZ2luZSgpKTtcbiAgICBleHBlY3QocG0uZ2V0Q3VycmVudEVuZ2luZSgpLmdldEN1cnJlbnRUdXJuKCkpLnRvQmUoXCJibGFja1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJzcXVhcmVUb0FsZ2VicmFpYyBpcyB0aGUgZXhhY3Qgd2lyZSBmb3JtYXQgc2VudCB0byB0aGUgc2VydmVyXCIsICgpID0+IHtcbiAgICAvLyBDb250cmFjdCB0ZXN0OiBzZW5kTW92ZSB1c2VzIHR3by1jaGFyIGFsZ2VicmFpYyBjb29yZHMsIG5vdCBudW1iZXJzLlxuICAgIGNvbnN0IGZyb20gPSBhbGdlYnJhaWNUb1NxdWFyZShcImcxXCIpO1xuICAgIGNvbnN0IHRvID0gYWxnZWJyYWljVG9TcXVhcmUoXCJmM1wiKTtcbiAgICBwbS5hcHBseVByZWRpY3Rpb24oZnJvbSwgdG8pO1xuICAgIGV4cGVjdChjbGllbnQuc2VudE1vdmVzKS50b0VxdWFsKFtcbiAgICAgIHsgZnJvbTogc3F1YXJlVG9BbGdlYnJhaWMoZnJvbSksIHRvOiBzcXVhcmVUb0FsZ2VicmFpYyh0bykgfSxcbiAgICBdKTtcbiAgICBleHBlY3QoY2xpZW50LnNlbnRNb3Zlc1swXT8uZnJvbSkudG9CZShcImcxXCIpO1xuICAgIGV4cGVjdChjbGllbnQuc2VudE1vdmVzWzBdPy50bykudG9CZShcImYzXCIpO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL2NoZXNzL3NyYy9uZXQvcHJlZGljdGlvbi50ZXN0LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/51ba6fc6a114b61bdc4cfd71e2a38ae6ac37dd81 b/7xOfJqsDU787fe61oSCq1/web/51ba6fc6a114b61bdc4cfd71e2a38ae6ac37dd81 deleted file mode 100644 index 0bbd4b6..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/51ba6fc6a114b61bdc4cfd71e2a38ae6ac37dd81 +++ /dev/null @@ -1,21 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "PRESET_REGISTRY", { enumerable: true, configurable: true, get(){ try { return PRESET_REGISTRY } catch {} }}); -class PresetRegistryClass { - presets = /* @__PURE__ */ new Map(); - register(preset) { - this.presets.set(preset.id, preset); - } - getAll() { - return [...this.presets.values()]; - } - /** - * Look up a preset definition by id. Used by ActivePresetSet to resolve - * entries into callable hooks. Returns undefined for unknown ids. - */ - get(id) { - return this.presets.get(id); - } -} -const PRESET_REGISTRY = new PresetRegistryClass(); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQTJlQSxNQUFNLG9CQUFvQjtBQUFBLEVBQ1AsVUFBVSxvQkFBSSxJQUF1QjtBQUFBLEVBRXRELFNBQVMsUUFBeUI7QUFDaEMsU0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLE1BQU07QUFBQSxFQUNwQztBQUFBLEVBRUEsU0FBc0I7QUFDcEIsV0FBTyxDQUFDLEdBQUcsS0FBSyxRQUFRLE9BQU8sQ0FBQztBQUFBLEVBQ2xDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1BLElBQUksSUFBbUM7QUFDckMsV0FBTyxLQUFLLFFBQVEsSUFBSSxFQUFFO0FBQUEsRUFDNUI7QUFDRjtBQUVPLE1BQU0sa0JBQWtCLElBQUksb0JBQW9CIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJyZWdpc3RyeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByZXNldCBydWxlIHJlZ2lzdHJ5IChQMy40KS5cbiAqXG4gKiBBIHByZXNldCBpcyBhIG1vZGlmaWVyIHRvIGNoZXNzIHJ1bGVzLiBQcmVzZXRzIGV4cG9zZSBvcHRpb25hbCBob29rc1xuICogdGhhdCB0aGUgQ2hlc3NFbmdpbmUgaW52b2tlcyBhdCB3ZWxsLWRlZmluZWQgcG9pbnRzLiBUaGUgZnVsbCBtZW51OlxuICpcbiAqICBNb3ZlLWdlbmVyYXRpb24gaG9va3MgKHBlci1waWVjZSwgb24gZXZlcnkgZ2V0QWxsTGVnYWxNb3ZlcyBjYWxsKTpcbiAqICAgIC0gZ2V0RXh0cmFNb3ZlcyhlbmdpbmUsIHBpZWNlSWQpIC0+IExlZ2FsTW92ZVtdXG4gKiAgICAgICAgQ29udHJpYnV0ZSBleHRyYSBsZWdhbCBtb3ZlcyAoZS5nLiB3cmFwLWJvYXJkLCBrbmlnaHRzLWxlYXAtdHdpY2UpLlxuICogICAgLSBmaWx0ZXJNb3Zlcyhtb3ZlcywgZW5naW5lLCBwaWVjZUlkKSAtPiBMZWdhbE1vdmVbXVxuICogICAgICAgIFJlbW92ZS9tb2RpZnkgbW92ZXMgZnJvbSB0aGUgYWdncmVnYXRlZCBsaXN0IChlLmcuIGtuaWdodC1pbW11bml0eSkuXG4gKlxuICogIExpZmVjeWNsZSBob29rcyAoZmlyZSBvbmNlIHBlciBzdGF0ZSB0cmFuc2l0aW9uKTpcbiAqICAgIC0gb25BY3RpdmF0ZShlbmdpbmUpXG4gKiAgICAgICAgQ2FsbGVkIHdoZW4gdGhlIHByZXNldCB0cmFuc2l0aW9ucyBmcm9tIGluYWN0aXZlIC0+IGFjdGl2ZS4gVXNlIHRoaXNcbiAqICAgICAgICB0byBzZWVkIHBlci1waWVjZSBzdGF0ZSwgZS5nLiBgcGllY2UtaHBgIGluc2VydHMgYEhwID0gMmAgb24gZXZlcnlcbiAqICAgICAgICBleGlzdGluZyBlbnRpdHkgaGVyZS5cbiAqICAgIC0gb25EZWFjdGl2YXRlKGVuZ2luZSlcbiAqICAgICAgICBDYWxsZWQgd2hlbiB0aGUgcHJlc2V0IHRyYW5zaXRpb25zIGZyb20gYWN0aXZlIC0+IGluYWN0aXZlLCBlaXRoZXJcbiAqICAgICAgICBiZWNhdXNlIHRoZSB1c2VyIHRvZ2dsZWQgaXQgb2ZmIG9yIGJlY2F1c2UgaXRzIHR1cm4tdGltZXIgZXhwaXJlZC5cbiAqICAgICAgICBTeW1tZXRyaWMgY2xlYW51cCBwb2ludCAocmV0cmFjdCBjdXN0b20gYXR0cmlidXRlcywgZXRjLikuXG4gKlxuICogIENhcHR1cmUtaW50ZXJjZXB0aW9uIGhvb2sgKHBlci1jYXB0dXJlLCBtYWluLXNlc3Npb24gb25seSk6XG4gKiAgICAtIG9uQmVmb3JlQ2FwdHVyZShlbmdpbmUsIGF0dGFja2VyLCB0YXJnZXQpIC0+IHsgY29uc3VtZT86IGJvb2xlYW4gfSB8IHZvaWRcbiAqICAgICAgICBGaXJlcyBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGVuZ2luZSB3b3VsZCByZXRyYWN0IHRoZSB0YXJnZXQnc1xuICogICAgICAgIHBpZWNlIGZhY3RzLiBSZXR1cm5pbmcgYHsgY29uc3VtZTogdHJ1ZSB9YCB0ZWxscyB0aGUgZW5naW5lXG4gKiAgICAgICAgXCJJJ3ZlIGhhbmRsZWQgdGhpcyBjYXB0dXJlLCBza2lwIHlvdXIgZGVmYXVsdCByZXRyYWN0LWFuZC1tb3ZlXG4gKiAgICAgICAgYmVoYXZpb3VyXCI7IHRoZSBhdHRhY2tlciB3aWxsIE5PVCBtb3ZlIGFuZCB0aGUgdGFyZ2V0IHdpbGwgTk9UXG4gKiAgICAgICAgYmUgcmVtb3ZlZC4gVGhlIHByZXNldCBpdHNlbGYgZGVjaWRlcyB3aGF0IHRvIGRvIChkZWNyZW1lbnQgYW5cbiAqICAgICAgICBIUCBhdHRyaWJ1dGUsIGV4cGxvZGUgYWRqYWNlbnQgc3F1YXJlcywgZXRjLikuIEFueXRoaW5nIGVsc2VcbiAqICAgICAgICAodW5kZWZpbmVkLCBge31gLCBgeyBjb25zdW1lOiBmYWxzZSB9YCkgbGV0cyB0aGUgZW5naW5lIGNvbnRpbnVlXG4gKiAgICAgICAgd2l0aCB0aGUgbm9ybWFsIGNhcHR1cmUgcGF0aC5cbiAqXG4gKiAgICAgICAgSU1QT1JUQU5UOiB0aGlzIGhvb2sgb25seSBmaXJlcyBmcm9tIGBDaGVzc0VuZ2luZS5hcHBseU1vdmVgIG9uXG4gKiAgICAgICAgdGhlIGF1dGhvcml0YXRpdmUgc2Vzc2lvbi4gVGhlIHNlbGYtY2hlY2sgZmlsdGVyIHVzZXMgYW4gaXNvbGF0ZWRcbiAqICAgICAgICBzbmFwc2hvdCBzZXNzaW9uIGFuZCBkZWxpYmVyYXRlbHkgYnlwYXNzZXMgdGhlIGhvb2sg4oCUIG90aGVyd2lzZVxuICogICAgICAgIGV2ZXJ5IG1vdmUtbGVnYWxpdHkgY2hlY2sgd291bGQgZmlyZSBwcmVzZXQgc2lkZS1lZmZlY3RzLlxuICpcbiAqICBPdmVyYWxsIGRlc2lnbiBpbnRlbnQ6IHRoZXNlIGhvb2tzIGxldCBhIHByZXNldCByZWFjdCB0byBzdGF0ZSBjaGFuZ2VzXG4gKiAgd2l0aG91dCBjb3VwbGluZyB0aGUgZW5naW5lIHRvIGFueSBzcGVjaWZpYyBydWxlLiBBZGRpbmcgYSBuZXcgcnVsZSB3aXRoXG4gKiAgY3VzdG9tIHN0YXRlICsgY3VzdG9tIGNhcHR1cmVzICsgY3VzdG9tIFVJIHNob3VsZCBiZSBwb3NzaWJsZSB3aXRob3V0XG4gKiAgdG91Y2hpbmcgYGVuZ2luZS50c2AgYXQgYWxsIOKAlCBzZWUgYC4vcGllY2UtaHAudHNgICsgYC4vcGllY2UtaHAudWkudHN4YFxuICogIGZvciB0aGUgY2Fub25pY2FsIGV4YW1wbGUuXG4gKlxuICogUHJlc2V0cyByZWdpc3RlciB0aGVtc2VsdmVzIHZpYSBzaWRlLWVmZmVjdCBpbXBvcnRzIChzZWUgYC4vaW5kZXgudHNgKS5cbiAqL1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCwgU2Vzc2lvbiB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuaW1wb3J0IHR5cGUgeyBDaGVzc0VuZ2luZSwgR2FtZVJlc3VsdCB9IGZyb20gXCIuLi9lbmdpbmUuanNcIjtcbmltcG9ydCB0eXBlIHsgTGVnYWxNb3ZlIH0gZnJvbSBcIi4uL3J1bGVzL3R5cGVzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENoZXNzQXR0cktleSB9IGZyb20gXCIuLi9zY2hlbWEuanNcIjtcblxuLyoqIFJldHVybiBzaGFwZSBmb3Igb25CZWZvcmVDYXB0dXJlLiBgY29uc3VtZTogdHJ1ZWAgc2tpcHMgdGhlIGVuZ2luZSdzXG4gKiAgZGVmYXVsdCBjYXB0dXJlIHBhdGggKG5vIHRhcmdldCByZXRyYWN0aW9uLCBubyBhdHRhY2tlciBtb3ZlKS5cbiAqICBgY29uc3VtZTogZmFsc2VgIC8gdW5kZWZpbmVkIGNvbnRpbnVlcyBub3JtYWxseS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FwdHVyZUhvb2tSZXN1bHQge1xuICByZWFkb25seSBjb25zdW1lPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb250ZXh0IGZvciBgb25CZWZvcmVDYXB0dXJlYC4gRmlyZWQgd2hlbiBhIGNhcHR1cmUgaXMgYWJvdXQgdG9cbiAqIHJlc29sdmUg4oCUIHByZXNldHMgdGhhdCB3YW50IHRvIHJlcGxhY2UgdGhlIGRlZmF1bHQgcmV0cmFjdCthZHZhbmNlXG4gKiB3aXRoIHRoZWlyIG93biBtZWNoYW5pYyAocXVlZW4tc3BsaXRzIGZpc3Npb24sIGV4cGxvc2l2ZS1yb29rIEFvRSxcbiAqIGNhcHR1cmUtdG8td2luIHdpbm5lci1yZWNvcmRpbmcpIHJlYWQgdGhpcyBhbmQgcmV0dXJuXG4gKiBgeyBjb25zdW1lOiB0cnVlIH1gLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhcHR1cmVIb29rQ29udGV4dCB7XG4gIHJlYWRvbmx5IGVuZ2luZTogQ2hlc3NFbmdpbmU7XG4gIHJlYWRvbmx5IGF0dGFja2VyOiBFbnRpdHlJZDtcbiAgcmVhZG9ubHkgdGFyZ2V0OiBFbnRpdHlJZDtcbiAgcmVhZG9ubHkgbW92ZXI6IFwid2hpdGVcIiB8IFwiYmxhY2tcIjtcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgV0hFUkUgYSB1bml0IG9mIGRhbWFnZSBpcyBjb21pbmcgZnJvbS4gUGFzc2VkIHRvXG4gKiBgZW5naW5lLmRlYWxEYW1hZ2VgIGJ5IHRoZSBjYWxsZXI7IGJ1bmRsZWQgaW50byBgRGFtYWdlSG9va0NvbnRleHRgXG4gKiBmb3IgdGhlIGBvbkRhbWFnZWAgaG9vay5cbiAqXG4gKiBga2luZGAgaXMgdHlwZWQgYXMgYSBzdHJpbmcgdW5pb24gd2l0aCBrbm93biB2YWx1ZXMgcGx1cyBmcmVlLWZvcm1cbiAqIG92ZXJmbG93IHNvIGZ1dHVyZSBwcmVzZXRzIGNhbiBpbnRyb2R1Y2UgbmV3IGRhbWFnZSBraW5kcyB3aXRob3V0XG4gKiB0b3VjaGluZyB0aGlzIGZpbGUuIEVhY2ggcHJlc2V0IGlzIHJlc3BvbnNpYmxlIGZvciBkb2N1bWVudGluZyB0aGVcbiAqIGtpbmRzIGl0IGVtaXRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhbWFnZUNvbnRleHQge1xuICByZWFkb25seSBraW5kOiBcImNhcHR1cmVcIiB8IFwiZXhwbG9zaW9uXCIgfCBcInBvaXNvblwiIHwgKHN0cmluZyAmIHt9KTtcbiAgcmVhZG9ubHkgYXR0YWNrZXI/OiBFbnRpdHlJZDtcbn1cblxuLyoqXG4gKiBGdWxsIGNvbnRleHQgcGFzc2VkIHRvIGBvbkRhbWFnZWAgaG9va3MuIEJ1bmRsZXMgdGhlIHRhcmdldCBlbnRpdHksXG4gKiB0aGUgYW1vdW50IGJlaW5nIGRlYWx0LCBhbmQgdGhlIERhbWFnZUNvbnRleHQgc291cmNlIHRhZyBpbnRvIG9uZVxuICogZ3Jvd2FibGUgb2JqZWN0LlxuICpcbiAqIEZ1dHVyZSBmaWVsZHMgKG1vdmUgYmVpbmcgZXhlY3V0ZWQsIGJvYXJkIHBvc2l0aW9uIHNuYXBzaG90LFxuICogdHVybiBudW1iZXIsIOKApikgY2FuIGJlIGFkZGVkIHdpdGhvdXQgYnJlYWtpbmcgZXhpc3RpbmcgaG9va1xuICogaW1wbGVtZW50YXRpb25zIOKAlCB0aGV5J2xsIHNpbXBseSBpZ25vcmUgdGhlIG5ldyBmaWVsZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGFtYWdlSG9va0NvbnRleHQge1xuICByZWFkb25seSBlbmdpbmU6IENoZXNzRW5naW5lO1xuICByZWFkb25seSB0YXJnZXQ6IEVudGl0eUlkO1xuICByZWFkb25seSBhbW91bnQ6IG51bWJlcjtcbiAgcmVhZG9ubHkga2luZDogRGFtYWdlQ29udGV4dFtcImtpbmRcIl07XG4gIHJlYWRvbmx5IGF0dGFja2VyPzogRW50aXR5SWQ7XG59XG5cbi8qKlxuICogQmFzZSBzaGFwZSBpbmhlcml0ZWQgYnkgZXZlcnkgaG9vayBjb250ZXh0LiBDYXJyeWluZyB0aGUgZW5naW5lXG4gKiBvbiBldmVyeSBjb250ZXh0IG1lYW5zIHByZXNldHMgZG9uJ3QgbmVlZCB0byByZW1lbWJlciBcIndhcyBpdFxuICogdGhlIGZpcnN0IGFyZyB0aGlzIHRpbWUgb3IgdGhlIHRoaXJkP1wiXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSG9va0NvbnRleHQge1xuICByZWFkb25seSBlbmdpbmU6IENoZXNzRW5naW5lO1xufVxuXG4vKipcbiAqIENvbnRleHQgZm9yIGxpZmVjeWNsZSBob29rcyB0aGF0IGRvbid0IGNhcnJ5IHBlci1ldmVudCBkYXRhIOKAlFxuICogYG9uQWN0aXZhdGVgLCBgb25EZWFjdGl2YXRlYC4gS2VlcHMgdGhlIGV4dGVuc2lvbiBwb2ludCByZWFkeSBpZlxuICogd2UgbGF0ZXIgbmVlZCB0byBhZGQgXCJ3YXMgdGhpcyBmaXJlZCBhcyBwYXJ0IG9mIGEgc2F2ZS1sb2FkXG4gKiByZXN0b3JhdGlvbj9cIiBvciBzaW1pbGFyIGZpZWxkcyB3aXRob3V0IGJyZWFraW5nIGV2ZXJ5IHByZXNldC5cbiAqXG4gKiBDdXJyZW50bHkgaWRlbnRpY2FsIHRvIGBIb29rQ29udGV4dGA7IGFsaWFzZWQgKG5vdCBleHRlbmRlZCkgdG9cbiAqIHNhdGlzZnkgdGhlIG5vLWVtcHR5LWludGVyZmFjZSBsaW50IHJ1bGUgd2hpbGUga2VlcGluZyB0aGUgdHlwZVxuICogbmFtZSBzZW1hbnRpY2FsbHkgZGlzdGluY3QgYXQgY2FsbCBzaXRlcy5cbiAqL1xuZXhwb3J0IHR5cGUgTGlmZWN5Y2xlQ29udGV4dCA9IEhvb2tDb250ZXh0O1xuXG4vKipcbiAqIENvbnRleHQgZm9yIGBvbkFmdGVyTW92ZWAuIGBtb3ZlcmAgaXMgdGhlIGNvbG9yIHRoYXQganVzdCBtb3ZlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb3ZlSG9va0NvbnRleHQgZXh0ZW5kcyBIb29rQ29udGV4dCB7XG4gIHJlYWRvbmx5IG1vdmVyOiBcIndoaXRlXCIgfCBcImJsYWNrXCI7XG59XG5cbi8qKlxuICogQ29udGV4dCBmb3IgYG9uQmVmb3JlTW92ZWAuIEZpcmVzIEFGVEVSIG1vdmUgbGVnYWxpdHkgaXMgY29uZmlybWVkXG4gKiBidXQgQkVGT1JFIGFueSBtdXRhdGlvbi4gUHJlc2V0cyBtYXkgaW5zcGVjdCB0aGUgbW92ZSArIHJlYWQgc3RhdGUsXG4gKiB0aGVuIHJldHVybiBgeyBjYW5jZWw6IHRydWUsIHJlYXNvbiB9YCB0byBhYm9ydC4gUmV0dXJuaW5nIGFueXRoaW5nXG4gKiBlbHNlICh1bmRlZmluZWQsIGB7IGNhbmNlbDogZmFsc2UgfWApIGxldHMgdGhlIG1vdmUgcHJvY2VlZC5cbiAqXG4gKiBOT1RFOiB1c2luZyBgY2FuY2VsYCBoZXJlIGlzIGEgZGVsaWJlcmF0ZWx5IHN0cm9uZyBjYXBhYmlsaXR5LiBJdFxuICogbGV0cyBhIHByZXNldCB2ZXRvIGEgbW92ZSB0aGUgZW5naW5lIGNvbnNpZGVycyBsZWdhbCDigJQgZS5nLiwgYVxuICogXCJwYXduLXN0YW1pbmFcIiBwcmVzZXQgdGhhdCBibG9ja3MgcHVzaGVzIHdoZW4gc3RhbWluYSBpcyBlbXB0eS5cbiAqIFByZXNldHMgTVVTVCBzdXBwbHkgYSBodW1hbi1yZWFkYWJsZSBgcmVhc29uYCBzbyB0aGUgVUkgY2FuXG4gKiBleHBsYWluIHRoZSBibG9jayB2aWEgdG9hc3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmVmb3JlTW92ZUNvbnRleHQgZXh0ZW5kcyBIb29rQ29udGV4dCB7XG4gIHJlYWRvbmx5IG1vdmVyOiBcIndoaXRlXCIgfCBcImJsYWNrXCI7XG4gIHJlYWRvbmx5IHBpZWNlSWQ6IEVudGl0eUlkO1xuICByZWFkb25seSBmcm9tOiBudW1iZXI7XG4gIHJlYWRvbmx5IHRvOiBudW1iZXI7XG4gIHJlYWRvbmx5IGlzQ2FwdHVyZTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXR1cm4gc2hhcGUgZm9yIGBvbkJlZm9yZU1vdmVgLiBQcmVzZXRzIHRoYXQgZG9uJ3Qgd2FudCB0byB2ZXRvXG4gKiBjYW4gc2tpcCBpbXBsZW1lbnRpbmcgdGhlIGhvb2sgZW50aXJlbHk7IHRob3NlIHRoYXQgZG8gbXVzdFxuICogcHJvdmlkZSBhIGh1bWFuLXJlYWRhYmxlIGByZWFzb25gIHdoZW4gY2FuY2VsbGluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCZWZvcmVNb3ZlUmVzdWx0IHtcbiAgcmVhZG9ubHkgY2FuY2VsPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcmVhc29uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnRleHQgZm9yIGBvblR1cm5TdGFydGAuIEZpcmVzIEFGVEVSIHRoZSB0dXJuIGNvdW50ZXIgaGFzIGZsaXBwZWRcbiAqIChUdXJuIGZhY3QgdXBkYXRlZCkgYW5kIEFGVEVSIGBvbkFmdGVyTW92ZWAsIGJ1dCBCRUZPUkUgdGhlIHNpZGUtXG4gKiB0by1tb3ZlJ3MgbGVnYWwtbW92ZSBsaXN0IGlzIHJlcXVlc3RlZC4gSWRlYWwgaG9vayBmb3I6XG4gKiAgIC0gcmVnZW5lcmF0aW5nIHBlci1waWVjZSByZXNvdXJjZXMgKFN0YW1pbmEgKzEgdXAgdG8gbWF4KVxuICogICAtIGRlY3JlbWVudGluZyBjb29sZG93biB0aW1lcnNcbiAqICAgLSByZWZyZXNoaW5nIGF1cmFzIC8gYmxlc3NpbmdzIG9uIGFsdGFyIHNxdWFyZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUdXJuU3RhcnRDb250ZXh0IGV4dGVuZHMgSG9va0NvbnRleHQge1xuICAvKiogVGhlIGNvbG9yIHdob3NlIHR1cm4gaXMgbm93IGJlZ2lubmluZy4gKi9cbiAgcmVhZG9ubHkgdHVybjogXCJ3aGl0ZVwiIHwgXCJibGFja1wiO1xufVxuXG4vKipcbiAqIENvbnRleHQgZm9yIGBkZXNjcmliZU1vdmVFZmZlY3RgLiBDYXJyaWVzIHRoZSByYXcgbW92ZSBwYXlsb2FkLFxuICogY2FwdHVyZSBpbmZvLCBhbmQgbW92ZXIgY29sb3Ig4oCUIGVub3VnaCBmb3IgcHJlc2V0cyB0byBkZWNpZGVcbiAqIHdoZXRoZXIgdGhleSBjb250cmlidXRlZCB0byB0aGlzIG1vdmUgYW5kIGhvdyB0byBkZXNjcmliZSBpdC5cbiAqXG4gKiBTZXBhcmF0ZSBmcm9tIGBNb3ZlSG9va0NvbnRleHRgIGJlY2F1c2Ugd2UgZXhwbGljaXRseSBET04nVCBwYXNzXG4gKiB0aGUgZnVsbCBgTW92ZVJlY29yZGAgYmVpbmcgYnVpbHQg4oCUIGNpcmN1bGFyIHJlZmVyZW5jZXMgbWFrZVxuICogc2VyaWFsaXphdGlvbiBhd2t3YXJkLCBhbmQgdGhlIGhvb2sgaXMgbmFycm93IGVub3VnaCB0aGF0IGEgZmV3XG4gKiBmaWVsZHMgYXJlIGVhc2llciB0byBkb2N1bWVudCB0aGFuIFwidGhlIHJlY29yZCBzbyBmYXJcIi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXNjcmliZU1vdmVFZmZlY3RDb250ZXh0IGV4dGVuZHMgSG9va0NvbnRleHQge1xuICByZWFkb25seSBtb3ZlcjogXCJ3aGl0ZVwiIHwgXCJibGFja1wiO1xuICByZWFkb25seSBmcm9tOiBudW1iZXI7XG4gIHJlYWRvbmx5IHRvOiBudW1iZXI7XG4gIHJlYWRvbmx5IG1vdmluZ1R5cGU6IHN0cmluZztcbiAgcmVhZG9ubHkgY2FwdHVyZWRUeXBlOiBzdHJpbmcgfCBudWxsO1xuICByZWFkb25seSBpc0VuUGFzc2FudDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaXNDYXN0bGluZzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcHJvbW90aW9uOiBzdHJpbmcgfCBudWxsO1xufVxuXG4vKipcbiAqIENvbnRleHQgZm9yIGBvbkNoZWNrR2FtZVJlc3VsdGAg4oCUIGZpcmVkIHdoZW4gdGhlIGVuZ2luZSBpcyBkZWNpZGluZ1xuICogdGhlIGdhbWUncyB0ZXJtaW5hbCBzdGF0ZS4gUHJlc2V0cyB0aGF0IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRcbiAqIGNoZWNrbWF0ZS9zdGFsZW1hdGUvZHJhdyBsb2dpYyByZWFkIHRoaXMgYW5kIHJldHVybiBhIHZlcmRpY3QuXG4gKlxuICogQWxpYXNlZCAobm90IGV4dGVuZGVkKSB0byBzYXRpc2Z5IG5vLWVtcHR5LWludGVyZmFjZSBsaW50IHdoaWxlXG4gKiBwcmVzZXJ2aW5nIHRoZSBuYW1lZCB0eXBlIGF0IGNhbGwgc2l0ZXMgZm9yIHJlYWRhYmlsaXR5LlxuICovXG5leHBvcnQgdHlwZSBHYW1lUmVzdWx0SG9va0NvbnRleHQgPSBIb29rQ29udGV4dDtcblxuLyoqXG4gKiBDb250ZXh0IGZvciBgc2hvdWxkRmlsdGVyU2VsZkNoZWNrYC4gYGNvbG9yYCBpcyB3aG9zZSBtb3ZlcyBhcmVcbiAqIGJlaW5nIGdlbmVyYXRlZCDigJQgYSBwcmVzZXQgc2NvcGVkIHRvIHdoaXRlIHdvdWxkIHR5cGljYWxseSBvbmx5XG4gKiBvcHQgb3V0IG9mIHRoZSBmaWx0ZXIgd2hlbiBgY29sb3IgPT09IFwid2hpdGVcImAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZkNoZWNrRmlsdGVyQ29udGV4dCBleHRlbmRzIEhvb2tDb250ZXh0IHtcbiAgcmVhZG9ubHkgY29sb3I6IFwid2hpdGVcIiB8IFwiYmxhY2tcIjtcbn1cblxuLyoqXG4gKiBXaHkgYSBwaWVjZSBpcyBiZWluZyBzcGF3bmVkLiBVc2VkIGJ5IGBvblBpZWNlU3Bhd25gIGhvb2tzIHRvXG4gKiBkZWNpZGUgd2hldGhlciB0byBwYXJ0aWNpcGF0ZSAoZS5nLiwgYSBwcmVzZXQgdGhhdCByZXN1cnJlY3RzXG4gKiBjYXB0dXJlZCBwaWVjZXMgc2hvdWxkbid0IHN0YWNrIGl0cyBvd24gYG9uUGllY2VTcGF3bmAgaW50byBpdHNcbiAqIG93biByZXN1cnJlY3Rpb24gcGF0aCkuIGBzdHJpbmcgJiB7fWAgbGV0cyBuZXcgcmVhc29ucyBlbnRlciB0aGVcbiAqIHVuaW9uIHdpdGhvdXQgZWRpdGluZyB0aGlzIGZpbGUg4oCUIGVhY2ggcHJlc2V0IGRvY3VtZW50cyB0aGUga2luZHNcbiAqIGl0IGVtaXRzLlxuICovXG5leHBvcnQgdHlwZSBQaWVjZVNwYXduUmVhc29uID1cbiAgfCBcImluaXRpYWxcIiAgICAgICAvLyBmcm9tIGdlbmVyYXRlU3RhcnRpbmdQb3NpdGlvbiBhdCBlbmdpbmUgY29uc3RydWN0aW9uXG4gIHwgXCJwcm9tb3Rpb25cIiAgICAgLy8gcGF3biByZWFjaGVkIGxhc3QgcmFua1xuICB8IFwiZmlzc2lvblwiICAgICAgIC8vIHF1ZWVuLXNwbGl0cyBzcGF3bmluZyByb29rICsgYmlzaG9wXG4gIHwgXCJzdW1tb25cIiAgICAgICAgLy8gZ2VuZXJpYyAvIHByZXNldC1hdXRob3JlZFxuICB8IFwicmVzdXJyZWN0aW9uXCIgIC8vIHBpZWNlIGJyb3VnaHQgYmFjayBmcm9tIHRoZSBkZWFkXG4gIHwgKHN0cmluZyAmIHt9KTtcblxuLyoqXG4gKiBDb250ZXh0IHBhc3NlZCB0byBgb25QaWVjZVNwYXduYC4gQ2FycmllcyBldmVyeXRoaW5nIGEgaG9vayBtaWdodFxuICogbmVlZCB0byB0YWcgdGhlIG5ldyBlbnRpdHkgKHNlZWQgSFAsIG1hcmsgd2l0aCBzaGllbGQsIHJlZ2lzdGVyIGl0XG4gKiBpbiBwcmVzZXQgc3RhdGUsIOKApikgd2l0aG91dCBuZWVkaW5nIHRvIHJlLXF1ZXJ5IHRoZSBzZXNzaW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpZWNlU3Bhd25Db250ZXh0IHtcbiAgcmVhZG9ubHkgZW5naW5lOiBDaGVzc0VuZ2luZTtcbiAgcmVhZG9ubHkgcGllY2VJZDogRW50aXR5SWQ7XG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZzsgICAgICAgLy8gUGllY2VUeXBlLCBrZXB0IGFzIHN0cmluZyBmb3IgZm9yd2FyZC1jb21wYXQgd2l0aCBjdXN0b20gdHlwZXNcbiAgcmVhZG9ubHkgY29sb3I6IFwid2hpdGVcIiB8IFwiYmxhY2tcIjtcbiAgcmVhZG9ubHkgc3F1YXJlOiBudW1iZXI7ICAgICAvLyBTcXVhcmVcbiAgcmVhZG9ubHkgcmVhc29uOiBQaWVjZVNwYXduUmVhc29uO1xufVxuXG4vKipcbiAqIFJldHVybiBzaGFwZSBmb3Igb25EYW1hZ2UuIFNlbWFudGljczpcbiAqICAtIGBjb25zdW1lOiB0cnVlYCBtZWFucyBcIkknbSB0aGUgYXV0aG9yaXR5IG9uIHRoaXMgZGFtYWdlIGV2ZW50O1xuICogICAgdGhlIGVuZ2luZSBzaG91bGQgTk9UIHJ1biBpdHMgZGVmYXVsdCAoZGFtYWdlID49IDEga2lsbHMpIHBhdGguXCJcbiAqICAgIFRoZSBob29rIG11c3QgYWxzbyBpbmRpY2F0ZSB3aGV0aGVyIHRoZSB0YXJnZXQgZGllZCB2aWEgYGRpZWRgLFxuICogICAgYmVjYXVzZSBmb2xsb3ctdXAgYWN0aW9ucyAoZmlzc2lvbiwgY2FzY2FkaW5nIHRyaWdnZXJzKSBkZXBlbmQgb25cbiAqICAgIGtub3dpbmcuXG4gKiAgLSBgY29uc3VtZTogZmFsc2VgIC8gdW5kZWZpbmVkIC8gbm8gaG9vayBtZWFucyBcIkkgZG9uJ3Qgd2FudCB0b1xuICogICAgaGFuZGxlIHRoaXNcIjsgdGhlIGVuZ2luZSBmYWxscyB0aHJvdWdoIHRvIHRoZSBuZXh0IHByZXNldCBhbmRcbiAqICAgIHVsdGltYXRlbHkgdGhlIGRlZmF1bHQga2lsbC1vbi1kYW1hZ2UgcGF0aC5cbiAqXG4gKiBPbmx5IE9ORSBwcmVzZXQgaXMgZXhwZWN0ZWQgdG8gY29uc3VtZSBhIGdpdmVuIGRhbWFnZSBldmVudC4gSWYgbW9yZVxuICogdGhhbiBvbmUgdHJpZXMsIHRoZSBmaXJzdCB0byByZXR1cm4gYGNvbnN1bWU6IHRydWVgIHdpbnMgKGl0ZXJhdGlvblxuICogb3JkZXIgZm9sbG93cyBgYWN0aXZlUHJlc2V0cy5saXN0KClgKS4gVGhpcyBpcyB0aGUgY29uc2Npb3VzXG4gKiBzaW1wbGlmaWNhdGlvbiB0aGF0IGVsaW1pbmF0ZXMgdGhlIHpvbWJpZS1zdGF0ZSBidWcgd2UgaGFkIHdoZW4gdHdvXG4gKiBwcmVzZXRzJyBvbkJlZm9yZUNhcHR1cmUgaG9va3MgYm90aCBzZXQgY29uc3VtZTogdHJ1ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYW1hZ2VIb29rUmVzdWx0IHtcbiAgcmVhZG9ubHkgY29uc3VtZTogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGllZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlc2V0RGVmIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKiogUHJlc2V0IElEcyB3aG9zZSBhY3RpdmF0aW9uIG11c3QgTk9UIG92ZXJsYXAgd2l0aCB0aGlzIG9uZS4gKi9cbiAgcmVhZG9ubHkgaW5jb21wYXRpYmxlV2l0aDogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBQcmVzZXQgSURzIHRoYXQgbXVzdCBhbHNvIGJlIGFjdGl2ZSBmb3IgdGhpcyBvbmUgdG8gYmUgdmFsaWQuICovXG4gIHJlYWRvbmx5IHJlcXVpcmVzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUGVyLXBpZWNlIGF0dHJpYnV0ZXMgT1dORUQgYnkgdGhpcyBwcmVzZXQuIFdoZW4gdGhlIHByZXNldCBpc1xuICAgKiBhY3RpdmUsIHRoZSBlbmdpbmUgdHJlYXRzIHRoZXNlIGFzIHBhcnQgb2YgZXZlcnkgcGllY2UncyBpZGVudGl0eTpcbiAgICogICAtIHJldHJhY3RlZCB3aGVuIHRoZSBwaWVjZSBkaWVzIChkZWZhdWx0IGRhbWFnZSBwYXRoKVxuICAgKiAgIC0gc2VlZGVkIG9uIG5ld2x5IHNwYXduZWQgcGllY2VzIHZpYSBgb25QaWVjZVNwYXduYCBpZiB0aGlzXG4gICAqICAgICBwcmVzZXQgaW1wbGVtZW50cyB0aGF0IGhvb2tcbiAgICogICAtIGluY2x1ZGVkIGluIHNhdmUtc3RhdGUgc2VyaWFsaXphdGlvblxuICAgKlxuICAgKiBgSHBgIGlzIHRoZSBjYW5vbmljYWwgZXhhbXBsZSDigJQgZGVjbGFyZWQgYnkgYHBpZWNlLWhwYCByYXRoZXIgdGhhblxuICAgKiBiZWluZyBoYXJkY29kZWQgaW4gY29yZS4gVGhpcyBtYWtlcyBhdHRyaWJ1dGUtY2FycnlpbmcgcHJlc2V0c1xuICAgKiAoU2hpZWxkLCBBcm1vciwgU3RhbWluYSwgTWFuYSwg4oCmKSBhIHB1cmVseSBhZGRpdGl2ZSBzdXJmYWNlLlxuICAgKlxuICAgKiBBdHRyaWJ1dGVzIG11c3QgYWxyZWFkeSBleGlzdCBpbiBgQ2hlc3NBdHRyTWFwYCDigJQgd2UgZG9uJ3QgYWxsb3dcbiAgICogZnJlZS1mb3JtIGtleXMsIGJlY2F1c2UgZmFjdC10eXBlIHNhZmV0eSBkZXBlbmRzIG9uIHRoZSBleGhhdXN0aXZlXG4gICAqIGF0dHJpYnV0ZSBtYXAuIEFkZGluZyBhIG5ldyBhdHRyaWJ1dGUgPSBvbmUtbGluZSBlZGl0IHRvIHNjaGVtYS50c1xuICAgKiArIGRlY2xhcmF0aW9uIGhlcmUuXG4gICAqL1xuICByZWFkb25seSBwaWVjZUF0dHJpYnV0ZXM/OiByZWFkb25seSBDaGVzc0F0dHJLZXlbXTtcblxuICAvLyDilIDilIAgTW92ZS1nZW5lcmF0aW9uIGhvb2tzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICByZWFkb25seSBnZXRFeHRyYU1vdmVzPzogKGVuZ2luZTogQ2hlc3NFbmdpbmUsIHBpZWNlSWQ6IEVudGl0eUlkKSA9PiBMZWdhbE1vdmVbXTtcbiAgcmVhZG9ubHkgZmlsdGVyTW92ZXM/OiAoXG4gICAgbW92ZXM6IExlZ2FsTW92ZVtdLFxuICAgIGVuZ2luZTogQ2hlc3NFbmdpbmUsXG4gICAgcGllY2VJZDogRW50aXR5SWQsXG4gICkgPT4gTGVnYWxNb3ZlW107XG5cbiAgLyoqXG4gICAqIFdyYXBzIHRoZSBtb3ZlIGdlbmVyYXRvciBmb3IgYSBzcGVjaWZpYyBwaWVjZS4gUmVjZWl2ZXMgdGhlIGN1cnJlbnRcbiAgICogZ2VuZXJhdG9yIChpbml0aWFsbHkgdGhlIHR5cGUtcmVnaXN0cnkncyBnZW5lcmF0b3IsIG9yIHRoZSBvdXRwdXQgb2ZcbiAgICogYSBwcmlvciBwcmVzZXQncyB0cmFuc2Zvcm1hdGlvbikgYW5kIHJldHVybnMgYSBuZXcgZ2VuZXJhdG9yLlxuICAgKlxuICAgKiBTZW1hbnRpY3M6IFdSQVAsIG5vdCBSRVBMQUNFLiBUaGUgcmV0dXJuZWQgZnVuY3Rpb24gTVVTVCBjYWxsIGBwcmV2YFxuICAgKiBhdCBzb21lIHBvaW50IHRvIHByZXNlcnZlIGJhc2UgbW92ZXMgKHVubGVzcyBpbnRlbnRpb25hbGx5IGRpc2NhcmRpbmcpLlxuICAgKiBSZXR1cm5lZCBtb3ZlcyBhcmUgUFNFVURPLUxFR0FMIOKAlCB0aGUgZW5naW5lJ3Mgc2VsZi1jaGVjayBmaWx0ZXIgcnVuc1xuICAgKiBkb3duc3RyZWFtIHJlZ2FyZGxlc3MuXG4gICAqXG4gICAqIEV2YWx1YXRpb24gb3JkZXI6IHByZXNldHMgaXRlcmF0ZSBpbiBsaXN0IG9yZGVyLiBFYWNoIHRyYW5zZm9ybSByZWNlaXZlc1xuICAgKiB0aGUgb3V0cHV0IG9mIHRoZSBwcmV2aW91cywgY29tcG9zaW5nIGNsZWFubHkuXG4gICAqL1xuICByZWFkb25seSB0cmFuc2Zvcm1Nb3ZlR2VuZXJhdG9yPzogKFxuICAgIGVuZ2luZTogQ2hlc3NFbmdpbmUsXG4gICAgcGllY2VJZDogRW50aXR5SWQsXG4gICAgcHJldjogKHNlc3Npb246IFNlc3Npb24sIHBpZWNlSWQ6IEVudGl0eUlkKSA9PiBMZWdhbE1vdmVbXSxcbiAgKSA9PiAoc2Vzc2lvbjogU2Vzc2lvbiwgcGllY2VJZDogRW50aXR5SWQpID0+IExlZ2FsTW92ZVtdO1xuXG4gIC8qKlxuICAgKiBDb250cmlidXRlIG1vdmUgYXR0cmlidXRlIGRlbHRhcyAocmFuZ2UgZXh0ZW5zaW9uLCBkaXJlY3Rpb24gYWRkaXRpb25zKVxuICAgKiBmb3IgYSBwaWVjZS4gUmVhZCBieSBtb3ZlIGdlbmVyYXRvcnMgdGhhdCBzdXBwb3J0IHRoZW0gKHJvb2ssIGJpc2hvcCwgcXVlZW4pLlxuICAgKiBNdWx0aXBsZSBwcmVzZXRzIHJldHVybmluZyB2YWx1ZXMgYXJlIEFERElUSVZFIHBlciB0aGUgc3RhY2tpbmcgcnVsZXMuXG4gICAqXG4gICAqIFJldHVybnMgdW5kZWZpbmVkIC8gZW1wdHkgb2JqZWN0IGZvciBuby1vcC5cbiAgICovXG4gIHJlYWRvbmx5IG1vZGlmeU1vdmVBdHRycz86IChcbiAgICBlbmdpbmU6IENoZXNzRW5naW5lLFxuICAgIHBpZWNlSWQ6IEVudGl0eUlkLFxuICApID0+IHsgcmFuZ2VCb251cz86IG51bWJlcjsgZGlyZWN0aW9uQWRkaXRpb25zPzogcmVhZG9ubHkgc3RyaW5nW10gfSB8IHVuZGVmaW5lZDtcblxuICAvLyDilIDilIAgTGlmZWN5Y2xlIGhvb2tzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICByZWFkb25seSBvbkFjdGl2YXRlPzogKGN0eDogTGlmZWN5Y2xlQ29udGV4dCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgb25EZWFjdGl2YXRlPzogKGN0eDogTGlmZWN5Y2xlQ29udGV4dCkgPT4gdm9pZDtcblxuICAvLyDilIDilIAgQ2FwdHVyZS1pbnRlcmNlcHRpb24gaG9vayDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgcmVhZG9ubHkgb25CZWZvcmVDYXB0dXJlPzogKFxuICAgIGN0eDogQ2FwdHVyZUhvb2tDb250ZXh0LFxuICApID0+IENhcHR1cmVIb29rUmVzdWx0IHwgdm9pZDtcblxuICAvKipcbiAgICogSW50ZXJjZXB0IGEgZGFtYWdlIGV2ZW50IGJlZm9yZSB0aGUgZW5naW5lIGFwcGxpZXMgaXRzIGRlZmF1bHRcbiAgICogXCJkYW1hZ2UgPj0gMSBraWxsc1wiIGJlaGF2aW91ci4gVGhpcyBpcyB0aGUgcGlwZWxpbmUgdGhhdCBsZXRzIEhQXG4gICAqIGV4aXN0IGFzIGEgc2VsZi1jb250YWluZWQgcHJlc2V0OiBgcGllY2UtaHBgIGltcGxlbWVudHMgb25EYW1hZ2VcbiAgICogdG8gZGVjcmVtZW50IGFuIEhwIGF0dHJpYnV0ZSBhbmQgb25seSBmYWxscyB0aHJvdWdoIHRvIGRlYXRoIHdoZW5cbiAgICogSHAgd291bGQgZ28gPD0gMC4gT3RoZXIgcHJlc2V0cyAoZXhwbG9zaXZlLXJvb2ssIHBvaXNvbmVkLXNxdWFyZXMsXG4gICAqIGV0YykgY2FsbCBgZW5naW5lLmRlYWxEYW1hZ2UoKWAgaW5zdGVhZCBvZiByZXRyYWN0aW5nIHBpZWNlc1xuICAgKiBkaXJlY3RseSwgd2hpY2ggbWVhbnMgdGhleSBjb21wb3NlIHdpdGggSFAgZm9yIGZyZWUg4oCUIHdpdGhvdXQgZXZlclxuICAgKiBpbXBvcnRpbmcgb3IgcmVmZXJlbmNpbmcgSFAtc3BlY2lmaWMgY29kZS5cbiAgICpcbiAgICogQ29udHJhY3QgKHNlZSBEYW1hZ2VIb29rUmVzdWx0IGRvY3MpOlxuICAgKiAgIC0gcmV0dXJuIGB7IGNvbnN1bWU6IHRydWUsIGRpZWQgfWAgdG8gaGFuZGxlIHRoZSBkYW1hZ2UgZXZlbnQ7XG4gICAqICAgICBgZGllZGAgdGVsbHMgdGhlIGVuZ2luZSB3aGV0aGVyIHRoZSB0YXJnZXQgZW50aXR5IHdhcyByZXRyYWN0ZWRcbiAgICogICAgIGFuZCB1cHN0cmVhbSBjYWxsZXJzIChlLmcuIGRlZmF1bHQgY2FwdHVyZSBwYXRoKSB3aGV0aGVyIHRoZVxuICAgKiAgICAgYXR0YWNrZXIgc2hvdWxkIGFkdmFuY2Ugb250byB0aGUgc3F1YXJlLlxuICAgKiAgIC0gcmV0dXJuIGB1bmRlZmluZWRgIC8gYHsgY29uc3VtZTogZmFsc2UgfWAgdG8gbGV0IG90aGVyIHByZXNldHNcbiAgICogICAgIG9yIHRoZSBlbmdpbmUgZGVmYXVsdCBoYW5kbGUgaXQuXG4gICAqXG4gICAqIE9SREVSSU5HOiB0aGUgZW5naW5lIGl0ZXJhdGVzIGFjdGl2ZSBwcmVzZXRzIGluIGxpc3Qgb3JkZXIgYW5kXG4gICAqIHN0b3BzIGF0IHRoZSBmaXJzdCBjb25zdW1lci4gQ29uc2VxdWVudGx5IG9ubHkgT05FIHByZXNldCBpc1xuICAgKiBleHBlY3RlZCB0byBpbXBsZW1lbnQgb25EYW1hZ2UgbWVhbmluZ2Z1bGx5IGF0IGEgdGltZSDigJQgYHBpZWNlLWhwYFxuICAgKiBpcyB0aGUgY2Fub25pY2FsIGltcGxlbWVudGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgb25EYW1hZ2U/OiAoXG4gICAgY3R4OiBEYW1hZ2VIb29rQ29udGV4dCxcbiAgKSA9PiBEYW1hZ2VIb29rUmVzdWx0IHwgdm9pZDtcblxuICAvKipcbiAgICogQ29udHJpYnV0ZSBhIGh1bWFuLXJlYWRhYmxlIHN1bW1hcnkgb2Ygd2hhdCB0aGlzIHByZXNldCBkaWQgb25cbiAgICogdGhlIG1vdmUgdGhhdCBqdXN0IHJlc29sdmVkLiBSZXR1cm5pbmcgYSBub24tZW1wdHkgc3RyaW5nIGFwcGVuZHNcbiAgICogYHsgcHJlc2V0SWQsIHN1bW1hcnkgfWAgdG8gdGhlIE1vdmVSZWNvcmQncyBgcHJlc2V0RWZmZWN0c2AgYXJyYXlcbiAgICog4oCUIHN1cmZhY2VkIGJ5IFVJIG1vdmUtbGlzdCBwYW5lbHMsIFBHTiBleHBvcnQgYW5ub3RhdGlvbnMsIGV0Yy5cbiAgICpcbiAgICogUmV0dXJuIGB1bmRlZmluZWRgIChvciBvbWl0IHRoZSBob29rKSB3aGVuIHRoZSBwcmVzZXQgaGFkIG5vXG4gICAqIGVmZmVjdCBvbiB0aGlzIG1vdmUuIFRoZSBob29rIGZpcmVzIGV2ZW4gd2hlbiB0aGUgcHJlc2V0IERJRE4nVFxuICAgKiBpbnRlcmNlcHQgYSBob29rIOKAlCBtb3N0IHByZXNldHMgd2lsbCByZWFkIHRoZSBjb250ZXh0IHRvIGRlY2lkZVxuICAgKiB3aGV0aGVyIHRvIGNvbnRyaWJ1dGUgKGUuZy4gcXVlZW4tc3BsaXRzIG9ubHkgY29udHJpYnV0ZXMgd2hlblxuICAgKiB0aGUgbW92aW5nIHBpZWNlIHdhcyBhIHF1ZWVuIHRoYXQgY2FwdHVyZWQpLlxuICAgKlxuICAgKiBGaXJlcyBBRlRFUiBhbGwgbXV0YXRpb25zIGFyZSBhcHBsaWVkIGJ1dCBCRUZPUkUgYG9uQWZ0ZXJNb3ZlYC5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaWJlTW92ZUVmZmVjdD86IChcbiAgICBjdHg6IERlc2NyaWJlTW92ZUVmZmVjdENvbnRleHQsXG4gICkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIGEgbmV3IHBpZWNlIGVudGl0eSBpcyBjcmVhdGVkIHZpYSBgZW5naW5lLnNwYXduUGllY2VgLlxuICAgKiBFdmVyeSBhY3RpdmUgcHJlc2V0IGdldHMgYSBjaGFuY2UgdG8gdGFnIHRoZSBuZXcgcGllY2Ug4oCUIHNlZWRcbiAgICogYEhwYCwgbWFyayBpdCB3aXRoIGBTaGllbGRgLCByZWNvcmQgaXQgaW4gcHJlc2V0IHN0YXRlLCBldGMuXG4gICAqXG4gICAqIFJ1bnMgQUZURVIgdGhlIGNvcmUgYXR0cnMgKFBpZWNlVHlwZSwgQ29sb3IsIFBvc2l0aW9uLCBIYXNNb3ZlZClcbiAgICogYXJlIGluc2VydGVkLCBzbyBwcmVzZXRzIGNhbiByZWFkIHRoZSBwaWVjZSdzIGlkZW50aXR5LlxuICAgKlxuICAgKiBUaGlzIGlzIGhvdyBgcGllY2UtaHBgIGNvbXBvc2VzIHdpdGggYW55IHNwYXduLWVtaXR0aW5nIHByZXNldFxuICAgKiAocXVlZW4tc3BsaXRzLCBwcm9tb3Rpb24sIHJlc3VycmVjdGlvbikgd2l0aG91dCB0aG9zZSBwcmVzZXRzXG4gICAqIGtub3dpbmcgSFAgZXhpc3RzOiB0aGV5IGNhbGwgYGVuZ2luZS5zcGF3blBpZWNlKC4uLilgIGFuZCBIUFxuICAgKiBnZXRzIHNlZWRlZCBhdXRvbWF0aWNhbGx5IHZpYSB0aGlzIGhvb2suXG4gICAqL1xuICByZWFkb25seSBvblBpZWNlU3Bhd24/OiAoY3R4OiBQaWVjZVNwYXduQ29udGV4dCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogRmlyZXMgYWZ0ZXIgZXZlcnkgc3VjY2Vzc2Z1bCBgYXBwbHlNb3ZlYCwgYWZ0ZXIgdHVybiBhZHZhbmNlbWVudFxuICAgKiBhbmQgdGlja0FmdGVyTW92ZSBidXQgYmVmb3JlIGNoZWNrR2FtZVJlc3VsdC4gYG1vdmVyQ29sb3JgIGlzIHRoZVxuICAgKiBjb2xvciB0aGF0IGp1c3QgbW92ZWQuIFVzZSB0aGlzIGZvciBcImVuZCBvZiB0dXJuXCIgcmVnZW5lcmF0aW9uLFxuICAgKiBzdGF0dXMtZWZmZWN0IHByb2Nlc3NpbmcsIGV0Yy5cbiAgICpcbiAgICogVW5saWtlIHRoZSBtb3ZlLWdlbmVyYXRpb24gaG9va3MsIHRoaXMgZmlyZXMgb24gQUxMIGFjdGl2ZVxuICAgKiBwcmVzZXRzIHJlZ2FyZGxlc3Mgb2Ygc2NvcGUuIEVhY2ggcHJlc2V0IGlzIHJlc3BvbnNpYmxlIGZvclxuICAgKiBpbnNwZWN0aW5nIGl0cyBvd24gc2NvcGUgKHZpYSBgZW5naW5lLmFjdGl2ZVByZXNldHMubGlzdCgpYCkgaWYgaXRcbiAgICogbmVlZHMgc2NvcGUtYXdhcmUgYmVoYXZpb3VyIOKAlCBzY29wZSBzZW1hbnRpY3MgZm9yIFwic29tZXRoaW5nIHRoYXRcbiAgICogaGFwcGVucyBhdCB0dXJuIGJvdW5kYXJpZXNcIiBhcmVuJ3Qgb25lLXNpemUtZml0cy1hbGwgKGtpbmctaGVhbHNcbiAgICogd2FudHMgdG8gYWZmZWN0IHRoZSBub24tbW92ZXI7IHBvaXNvbmVkLXNxdWFyZXMgZGFtYWdlcyB0aGVcbiAgICogbW92ZXIpLlxuICAgKi9cbiAgcmVhZG9ubHkgb25BZnRlck1vdmU/OiAoY3R4OiBNb3ZlSG9va0NvbnRleHQpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEhvb2sgaW50byB0ZXJtaW5hbC1wb3NpdGlvbiBkZXRlY3Rpb24uIFJldHVybiBhIGNvbmNyZXRlIGBHYW1lUmVzdWx0YFxuICAgKiB0byBPVkVSUklERSB0aGUgZW5naW5lJ3MgZGVmYXVsdCBjaGVja21hdGUvc3RhbGVtYXRlL2RyYXcgbG9naWM7XG4gICAqIHJldHVybiBgdW5kZWZpbmVkYCB0byBsZXQgdGhlIGRlZmF1bHQgcnVuLiBNdWx0aXBsZSBwcmVzZXRzIG1heVxuICAgKiByZWdpc3RlcjsgdGhlIGZpcnN0IG9uZSByZXR1cm5pbmcgYSBub24tdW5kZWZpbmVkIHZhbHVlIHdpbnMuIE9yZGVyXG4gICAqIGZvbGxvd3MgcmVnaXN0cmF0aW9uIG9yZGVyIChzZWUgUFJFU0VUX1JFR0lTVFJZLmdldEFsbCgpKS5cbiAgICpcbiAgICogVXNlZCBieSBgY2FwdHVyZS10by13aW5gIChmaXJzdCBjYXB0dXJlIHNldHMgdGhlIHdpbm5lcikgYW5kXG4gICAqIGBsYXN0LXBpZWNlLXN0YW5kaW5nYCAoYW5uaWhpbGF0aW9uIHJlcGxhY2VzIGNoZWNrbWF0ZSksIHdoaWNoIGJvdGhcbiAgICogcmVkZWZpbmUgXCJ3aGVuIGlzIHRoZSBnYW1lIG92ZXJcIi5cbiAgICovXG4gIHJlYWRvbmx5IG9uQ2hlY2tHYW1lUmVzdWx0PzogKGN0eDogR2FtZVJlc3VsdEhvb2tDb250ZXh0KSA9PiBHYW1lUmVzdWx0IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBPcHQgb3V0IG9mIHRoZSBlbmdpbmUncyBkZWZhdWx0IHNlbGYtY2hlY2sgZmlsdGVyIGZvciBtb3ZlcyBvZlxuICAgKiBgY29sb3JgLiBSZXR1cm4gYGZhbHNlYCB0byBhbGxvdyBtb3ZlcyB0aGF0IGxlYXZlIHRoZSBraW5nIGF0dGFja2VkXG4gICAqIChlLmcuIGBwaWVjZS1ocGAsIHdoZXJlIGEgXCJoaXRcIiBvbmx5IGNvc3RzIEhQIHJhdGhlciB0aGFuIGVuZGluZ1xuICAgKiB0aGUgZ2FtZSkuIFJldHVybiBgdHJ1ZWAgb3IgYHVuZGVmaW5lZGAgdG8gbGVhdmUgdGhlIGZpbHRlciBpblxuICAgKiBwbGFjZS5cbiAgICpcbiAgICogVGhlIGVuZ2luZSBwb2xscyBldmVyeSBwcmVzZXQgd2hvc2Ugc2NvcGUgY292ZXJzIGBjb2xvcmAgYW5kXG4gICAqIHNraXBzIHRoZSBzZWxmLWNoZWNrIGZpbHRlciBpZmYgYXQgbGVhc3Qgb25lIHJldHVybnMgYGZhbHNlYC4gQVxuICAgKiBwcmVzZXQgdGhhdCBkb2Vzbid0IGNhcmUgbGVhdmVzIHRoaXMgaG9vayB1bmRlZmluZWQuXG4gICAqXG4gICAqIE5vdGU6IHByZXNldHMgdGhhdCBvcHQgb3V0IG9mIHRoZSBzZWxmLWNoZWNrIGZpbHRlciBhbG1vc3QgYWx3YXlzXG4gICAqIGFsc28gd2FudCB0byBvdmVycmlkZSBgb25DaGVja0dhbWVSZXN1bHRgIOKAlCBvdGhlcndpc2UgZGVmYXVsdFxuICAgKiBjaGVja21hdGUvc3RhbGVtYXRlIGRldGVjdGlvbiBzdGlsbCBmaXJlcyBhZ2FpbnN0IGEga2luZyB0aGF0IGNhblxuICAgKiBsZWdhbGx5IHN1cnZpdmUgYmVpbmcgYXR0YWNrZWQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRGaWx0ZXJTZWxmQ2hlY2s/OiAoXG4gICAgY3R4OiBTZWxmQ2hlY2tGaWx0ZXJDb250ZXh0LFxuICApID0+IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFBoYXNlIGhvb2s6IGZpcmVzIEFGVEVSIHRoZSBtb3ZlIGhhcyBiZWVuIGNvbmZpcm1lZCBsZWdhbCBidXRcbiAgICogQkVGT1JFIGFueSBzdGF0ZSBtdXRhdGlvbi4gUmV0dXJuIGB7IGNhbmNlbDogdHJ1ZSwgcmVhc29uIH1gIHRvXG4gICAqIGFib3J0IHRoZSBtb3ZlIOKAlCB0aGUgZW5naW5lIHRyZWF0cyB0aGUgYXR0ZW1wdCBhcyByZWplY3RlZCBhbmRcbiAgICogc3VyZmFjZXMgYHJlYXNvbmAgdmlhIGEgdG9hc3QuXG4gICAqXG4gICAqIFVzZWQgYnkgcmVzb3VyY2UtdHJhY2tpbmcgcHJlc2V0cyAoc3RhbWluYSwgYWN0aW9uLXBvaW50cyxcbiAgICogY29vbGRvd25zKS4gQWxzbyB0aGUgT05MWSBob29rIHRoYXQgY2FuIGJsb2NrIGFuIG90aGVyd2lzZVxuICAgKiBsZWdhbCBtb3ZlLCB3aGljaCBpcyB3aHkgaXQgcmVxdWlyZXMgYW4gZXhwbGljaXQgYHJlYXNvbmAuXG4gICAqXG4gICAqIFNjb3BlLWF3YXJlOiBmaXJlcyBvbmx5IGZvciBwcmVzZXRzIHdob3NlIHNjb3BlIGNvdmVycyB0aGVcbiAgICogbW92ZXIncyBjb2xvciAoYSBgc2NvcGU9d2hpdGVgIHByZXNldCBkb2Vzbid0IHZldG8gYmxhY2snc1xuICAgKiBtb3ZlcykuXG4gICAqL1xuICByZWFkb25seSBvbkJlZm9yZU1vdmU/OiAoXG4gICAgY3R4OiBCZWZvcmVNb3ZlQ29udGV4dCxcbiAgKSA9PiBCZWZvcmVNb3ZlUmVzdWx0IHwgdm9pZDtcblxuICAvKipcbiAgICogUGhhc2UgaG9vazogZmlyZXMgQUZURVIgdGhlIHR1cm4gaGFzIGZsaXBwZWQgYW5kIEFGVEVSXG4gICAqIGBvbkFmdGVyTW92ZWAsIGJ1dCBCRUZPUkUgdGhlIG5ldyBzaWRlJ3MgbGVnYWwgbW92ZXMgYXJlXG4gICAqIGNvbXB1dGVkLlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSBjYW5vbmljYWwgcGxhY2UgdG8gcmVnZW5lcmF0ZSBwZXItcGllY2UgcmVzb3VyY2VzLFxuICAgKiB0aWNrIGNvb2xkb3ducywgcmVmcmVzaCBhdXJhcywgb3IgYW55IFwic3RhcnQgb2YgdHVyblwiIGxvZ2ljXG4gICAqIHRoYXQgc2hvdWxkIHRha2UgZWZmZWN0IEJFRk9SRSB0aGUgcGxheWVyIHNlZXMgdGhlaXIgb3B0aW9ucy5cbiAgICpcbiAgICogU2NvcGUtYXdhcmU6IGZpcmVzIG9ubHkgZm9yIHByZXNldHMgd2hvc2Ugc2NvcGUgY292ZXJzIHRoZVxuICAgKiBjb2xvciB3aG9zZSB0dXJuIGlzIGJlZ2lubmluZy5cbiAgICovXG4gIHJlYWRvbmx5IG9uVHVyblN0YXJ0PzogKGN0eDogVHVyblN0YXJ0Q29udGV4dCkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBQdXJlIGNhdGFsb2cgb2YgcHJlc2V0IERFRklOSVRJT05TLiBEb2VzIE5PVCB0cmFjayBhY3RpdmF0aW9uIGFueSBtb3JlXG4gKiDigJQgYWN0aXZhdGlvbiBpcyBwZXItZW5naW5lIHZpYSBgQ2hlc3NFbmdpbmUuYWN0aXZlUHJlc2V0czogQWN0aXZlUHJlc2V0U2V0YFxuICogc28gY29uY3VycmVudCBnYW1lcyBpbiB0aGUgc2FtZSBwcm9jZXNzIChlLmcuIHNlcnZlciByb29tcykgY2FuIGhvbGRcbiAqIGRpZmZlcmVudCBydWxlIHNldHMgd2l0aG91dCBzaGFyaW5nIG1vZHVsZS1sZXZlbCBzdGF0ZS5cbiAqL1xuY2xhc3MgUHJlc2V0UmVnaXN0cnlDbGFzcyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJlc2V0cyA9IG5ldyBNYXA8c3RyaW5nLCBQcmVzZXREZWY+KCk7XG5cbiAgcmVnaXN0ZXIocHJlc2V0OiBQcmVzZXREZWYpOiB2b2lkIHtcbiAgICB0aGlzLnByZXNldHMuc2V0KHByZXNldC5pZCwgcHJlc2V0KTtcbiAgfVxuXG4gIGdldEFsbCgpOiBQcmVzZXREZWZbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLnByZXNldHMudmFsdWVzKCldO1xuICB9XG5cbiAgLyoqXG4gICAqIExvb2sgdXAgYSBwcmVzZXQgZGVmaW5pdGlvbiBieSBpZC4gVXNlZCBieSBBY3RpdmVQcmVzZXRTZXQgdG8gcmVzb2x2ZVxuICAgKiBlbnRyaWVzIGludG8gY2FsbGFibGUgaG9va3MuIFJldHVybnMgdW5kZWZpbmVkIGZvciB1bmtub3duIGlkcy5cbiAgICovXG4gIGdldChpZDogc3RyaW5nKTogUHJlc2V0RGVmIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wcmVzZXRzLmdldChpZCk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFBSRVNFVF9SRUdJU1RSWSA9IG5ldyBQcmVzZXRSZWdpc3RyeUNsYXNzKCk7XG4iXSwiZmlsZSI6Ii9zcmMvcHJlc2V0cy9yZWdpc3RyeS50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/57d085201360afb9929959d4bf9fd051e1b46b0b b/7xOfJqsDU787fe61oSCq1/web/57d085201360afb9929959d4bf9fd051e1b46b0b deleted file mode 100644 index 0178b13..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/57d085201360afb9929959d4bf9fd051e1b46b0b +++ /dev/null @@ -1,11 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "EMPTY_LAYOUT", { enumerable: true, configurable: true, get(){ try { return EMPTY_LAYOUT } catch {} }}); -const EMPTY_LAYOUT = { - id: "empty", - name: "Empty Board", - description: "Internal test fixture — not registered in LAYOUT_REGISTRY.", - pieces: [], - source: "custom" -}; - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQW9CTyxNQUFNLGVBQStCO0FBQUEsRUFDMUMsSUFBSTtBQUFBLEVBQ0osTUFBTTtBQUFBLEVBQ04sYUFDRTtBQUFBLEVBQ0YsUUFBUSxDQUFDO0FBQUEsRUFDVCxRQUFRO0FBQ1YiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImVtcHR5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGF5b3V0OiBFbXB0eSBib2FyZCAoaW50ZXJuYWwgdGVzdCBmaXh0dXJlKS5cbiAqXG4gKiBaZXJvIHBpZWNlcy4gTk9UIHJlZ2lzdGVyZWQgaW4gTEFZT1VUX1JFR0lTVFJZIOKAlCBpdCBmYWlscyB0aGVcbiAqIHZhbGlkYXRvciAocmVxdWlyZXMg4omlIDEga2luZyBwZXIgc2lkZSkgc28gZXhwb3NpbmcgaXQgaW4gdGhlXG4gKiBsb2JieSBwaWNrZXIgd291bGQgYmUgYSBkZWFkLWVuZCBVWDogdGhlIHNlcnZlciB3b3VsZCByZWplY3RcbiAqIENyZWF0ZSBSb29tLCBhbmQgc29sbyBwbGF5IHdvdWxkIGRyb3AgdGhlIHVzZXIgb250byBhIGJsYW5rXG4gKiBib2FyZCB3aXRoIG5vdGhpbmcgdG8gY2xpY2suXG4gKlxuICogVGhlIFwiYmxhbmsgY2FudmFzXCIgdXNlIGNhc2UgaXMgaGFuZGxlZCBieSB0aGUgTGF5b3V0RWRpdG9yJ3NcbiAqIEN1c3RvbeKApiBmbG93IOKAlCB0aGUgZWRpdG9yIGFscmVhZHkgb3BlbnMgZnJvbSBhbiBlbXB0eSBwaWVjZVxuICogbGlzdCBhbmQgbGV0cyB0aGUgdXNlciBjb21wb3NlIGZyZWVseS5cbiAqXG4gKiBFTVBUWV9MQVlPVVQgc3RheXMgZXhwb3J0ZWQgZm9yOlxuICogICAtIFVuaXQgdGVzdHMgdGhhdCBuZWVkIGEgemVyby1waWVjZSBzdGFydGluZyBzdGF0ZS5cbiAqICAgLSBgbmV3IENoZXNzRW5naW5lKHsgbGF5b3V0OiBFTVBUWV9MQVlPVVQgfSlgIGFzIGEgbWluaW1hbFxuICogICAgIGZpeHR1cmUgaW4gcHJlc2V0L3J1bGUgdGVzdHMuXG4gKi9cbmltcG9ydCB0eXBlIHsgU3RhcnRpbmdMYXlvdXQgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfTEFZT1VUOiBTdGFydGluZ0xheW91dCA9IHtcbiAgaWQ6IFwiZW1wdHlcIixcbiAgbmFtZTogXCJFbXB0eSBCb2FyZFwiLFxuICBkZXNjcmlwdGlvbjpcbiAgICBcIkludGVybmFsIHRlc3QgZml4dHVyZSDigJQgbm90IHJlZ2lzdGVyZWQgaW4gTEFZT1VUX1JFR0lTVFJZLlwiLFxuICBwaWVjZXM6IFtdLFxuICBzb3VyY2U6IFwiY3VzdG9tXCIsXG59O1xuIl0sImZpbGUiOiIvc3JjL2xheW91dHMvZW1wdHkudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/5bf0f20da686b067343f0f435b278d635f80d980 b/7xOfJqsDU787fe61oSCq1/web/5bf0f20da686b067343f0f435b278d635f80d980 deleted file mode 100644 index 93345b8..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/5bf0f20da686b067343f0f435b278d635f80d980 +++ /dev/null @@ -1,141 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["fileOf","rankOf","squareOf","isOnBoard","isValidSquare","squareColor","squareToAlgebraic","algebraicToSquare","slidingSquares","knightSquares","kingSquares"]}); - - - - - - - - - - - - -(0,__vite_ssr_import_0__.describe)("fileOf / rankOf / squareOf", () => { - (0,__vite_ssr_import_0__.it)("a1=0: file=0, rank=0", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.fileOf)(0)).toBe(0); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.rankOf)(0)).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("h1=7: file=7, rank=0", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.fileOf)(7)).toBe(7); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.rankOf)(7)).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("a2=8: file=0, rank=1", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.fileOf)(8)).toBe(0); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.rankOf)(8)).toBe(1); - }); - (0,__vite_ssr_import_0__.it)("e4=28: file=4, rank=3", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.fileOf)(28)).toBe(4); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.rankOf)(28)).toBe(3); - }); - (0,__vite_ssr_import_0__.it)("h8=63: file=7, rank=7", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.fileOf)(63)).toBe(7); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.rankOf)(63)).toBe(7); - }); - (0,__vite_ssr_import_0__.it)("squareOf round-trips", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.squareOf)(0, 0)).toBe(0); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.squareOf)(4, 3)).toBe(28); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.squareOf)(7, 7)).toBe(63); - }); -}); -(0,__vite_ssr_import_0__.describe)("isOnBoard / isValidSquare", () => { - (0,__vite_ssr_import_0__.it)("(0,0) is on board", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.isOnBoard)(0, 0)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("(7,7) is on board", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.isOnBoard)(7, 7)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("(-1,0) is off board", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.isOnBoard)(-1, 0)).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("(8,0) is off board", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.isOnBoard)(8, 0)).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("square 0 valid", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.isValidSquare)(0)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("square 63 valid", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.isValidSquare)(63)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("square -1 invalid", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.isValidSquare)(-1)).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("square 64 invalid", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.isValidSquare)(64)).toBe(false); - }); -}); -(0,__vite_ssr_import_0__.describe)("squareColor", () => { - (0,__vite_ssr_import_0__.it)("a1 (0) is dark (0+0=0 even)", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.squareColor)(0)).toBe("dark"); - }); - (0,__vite_ssr_import_0__.it)("b1 (1) is light (1+0=1 odd)", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.squareColor)(1)).toBe("light"); - }); - (0,__vite_ssr_import_0__.it)("h8 (63) is dark (7+7=14 even)", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.squareColor)(63)).toBe("dark"); - }); -}); -(0,__vite_ssr_import_0__.describe)("squareToAlgebraic / algebraicToSquare", () => { - (0,__vite_ssr_import_0__.it)("0 → 'a1'", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.squareToAlgebraic)(0)).toBe("a1"); - }); - (0,__vite_ssr_import_0__.it)("28 → 'e4'", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.squareToAlgebraic)(28)).toBe("e4"); - }); - (0,__vite_ssr_import_0__.it)("63 → 'h8'", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.squareToAlgebraic)(63)).toBe("h8"); - }); - (0,__vite_ssr_import_0__.it)("'e4' → 28", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.algebraicToSquare)("e4")).toBe(28); - }); - (0,__vite_ssr_import_0__.it)("'a1' → 0", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.algebraicToSquare)("a1")).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("'h8' → 63", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.algebraicToSquare)("h8")).toBe(63); - }); - (0,__vite_ssr_import_0__.it)("invalid → -1", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.algebraicToSquare)("z9")).toBe(-1); - }); -}); -(0,__vite_ssr_import_0__.describe)("slidingSquares", () => { - (0,__vite_ssr_import_0__.it)("rook from a1 going right: b1,c1,...,h1", () => { - const sq = (0,__vite_ssr_import_1__.slidingSquares)(0, 1, 0); - (0,__vite_ssr_import_0__.expect)(sq).toEqual([1, 2, 3, 4, 5, 6, 7]); - }); - (0,__vite_ssr_import_0__.it)("bishop from h8 going down-left: g7,f6,e5,d4,c3,b2,a1", () => { - const sq = (0,__vite_ssr_import_1__.slidingSquares)(63, -1, -1); - (0,__vite_ssr_import_0__.expect)(sq).toHaveLength(7); - (0,__vite_ssr_import_0__.expect)(sq[0]).toBe(54); - }); - (0,__vite_ssr_import_0__.it)("stops at board edge immediately if no room", () => { - const sq = (0,__vite_ssr_import_1__.slidingSquares)(7, 1, 0); - (0,__vite_ssr_import_0__.expect)(sq).toEqual([]); - }); -}); -(0,__vite_ssr_import_0__.describe)("knightSquares", () => { - (0,__vite_ssr_import_0__.it)("knight at e4 (28) has 8 moves", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.knightSquares)(28)).toHaveLength(8); - }); - (0,__vite_ssr_import_0__.it)("knight at a1 (0) has 2 moves only", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.knightSquares)(0)).toHaveLength(2); - }); - (0,__vite_ssr_import_0__.it)("knight at h8 (63) has 2 moves only", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.knightSquares)(63)).toHaveLength(2); - }); -}); -(0,__vite_ssr_import_0__.describe)("kingSquares", () => { - (0,__vite_ssr_import_0__.it)("king at e4 (28) has 8 moves", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.kingSquares)(28)).toHaveLength(8); - }); - (0,__vite_ssr_import_0__.it)("king at a1 (0) has 3 moves only", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.kingSquares)(0)).toHaveLength(3); - }); - (0,__vite_ssr_import_0__.it)("king at h8 (63) has 3 moves only", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.kingSquares)(63)).toHaveLength(3); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LHFDQUFPLEVBQUUsRUFBRSxhQUFhLENBQUM7QUFDekIscUNBQU8sR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUU7QUFBQSxFQUN2QixDQUFDO0FBQ0QsK0JBQUcsOENBQThDLE1BQU07QUFDckQsVUFBTSxRQUFLLHNDQUFlLEdBQUcsR0FBRyxDQUFDO0FBQ2pDLHFDQUFPLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUFBLEVBQ3ZCLENBQUM7QUFDSCxDQUFDO0dBRUQsZ0NBQVMsaUJBQWlCLE1BQU07QUFDOUIsK0JBQUcsaUNBQWlDLE1BQU07QUFDeEMsd0NBQU8scUNBQWMsRUFBRSxDQUFDLEVBQUUsYUFBYSxDQUFDO0FBQUEsRUFDMUMsQ0FBQztBQUNELCtCQUFHLHFDQUFxQyxNQUFNO0FBQzVDLHdDQUFPLHFDQUFjLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQztBQUFBLEVBQ3pDLENBQUM7QUFDRCwrQkFBRyxzQ0FBc0MsTUFBTTtBQUM3Qyx3Q0FBTyxxQ0FBYyxFQUFFLENBQUMsRUFBRSxhQUFhLENBQUM7QUFBQSxFQUMxQyxDQUFDO0FBQ0gsQ0FBQztHQUVELGdDQUFTLGVBQWUsTUFBTTtBQUM1QiwrQkFBRywrQkFBK0IsTUFBTTtBQUN0Qyx3Q0FBTyxtQ0FBWSxFQUFFLENBQUMsRUFBRSxhQUFhLENBQUM7QUFBQSxFQUN4QyxDQUFDO0FBQ0QsK0JBQUcsbUNBQW1DLE1BQU07QUFDMUMsd0NBQU8sbUNBQVksQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDO0FBQUEsRUFDdkMsQ0FBQztBQUNELCtCQUFHLG9DQUFvQyxNQUFNO0FBQzNDLHdDQUFPLG1DQUFZLEVBQUUsQ0FBQyxFQUFFLGFBQWEsQ0FBQztBQUFBLEVBQ3hDLENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJjb29yZC50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBpdCwgZXhwZWN0IH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IHtcbiAgZmlsZU9mLCByYW5rT2YsIHNxdWFyZU9mLCBpc09uQm9hcmQsIGlzVmFsaWRTcXVhcmUsIHNxdWFyZUNvbG9yLFxuICBzcXVhcmVUb0FsZ2VicmFpYywgYWxnZWJyYWljVG9TcXVhcmUsIHNsaWRpbmdTcXVhcmVzLCBrbmlnaHRTcXVhcmVzLCBraW5nU3F1YXJlcyxcbn0gZnJvbSBcIi4vY29vcmQuanNcIjtcblxuZGVzY3JpYmUoXCJmaWxlT2YgLyByYW5rT2YgLyBzcXVhcmVPZlwiLCAoKSA9PiB7XG4gIGl0KFwiYTE9MDogZmlsZT0wLCByYW5rPTBcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChmaWxlT2YoMCkpLnRvQmUoMCk7XG4gICAgZXhwZWN0KHJhbmtPZigwKSkudG9CZSgwKTtcbiAgfSk7XG4gIGl0KFwiaDE9NzogZmlsZT03LCByYW5rPTBcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChmaWxlT2YoNykpLnRvQmUoNyk7XG4gICAgZXhwZWN0KHJhbmtPZig3KSkudG9CZSgwKTtcbiAgfSk7XG4gIGl0KFwiYTI9ODogZmlsZT0wLCByYW5rPTFcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChmaWxlT2YoOCkpLnRvQmUoMCk7XG4gICAgZXhwZWN0KHJhbmtPZig4KSkudG9CZSgxKTtcbiAgfSk7XG4gIGl0KFwiZTQ9Mjg6IGZpbGU9NCwgcmFuaz0zXCIsICgpID0+IHtcbiAgICBleHBlY3QoZmlsZU9mKDI4KSkudG9CZSg0KTtcbiAgICBleHBlY3QocmFua09mKDI4KSkudG9CZSgzKTtcbiAgfSk7XG4gIGl0KFwiaDg9NjM6IGZpbGU9NywgcmFuaz03XCIsICgpID0+IHtcbiAgICBleHBlY3QoZmlsZU9mKDYzKSkudG9CZSg3KTtcbiAgICBleHBlY3QocmFua09mKDYzKSkudG9CZSg3KTtcbiAgfSk7XG4gIGl0KFwic3F1YXJlT2Ygcm91bmQtdHJpcHNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChzcXVhcmVPZigwLCAwKSkudG9CZSgwKTtcbiAgICBleHBlY3Qoc3F1YXJlT2YoNCwgMykpLnRvQmUoMjgpO1xuICAgIGV4cGVjdChzcXVhcmVPZig3LCA3KSkudG9CZSg2Myk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiaXNPbkJvYXJkIC8gaXNWYWxpZFNxdWFyZVwiLCAoKSA9PiB7XG4gIGl0KFwiKDAsMCkgaXMgb24gYm9hcmRcIiwgKCkgPT4geyBleHBlY3QoaXNPbkJvYXJkKDAsIDApKS50b0JlKHRydWUpOyB9KTtcbiAgaXQoXCIoNyw3KSBpcyBvbiBib2FyZFwiLCAoKSA9PiB7IGV4cGVjdChpc09uQm9hcmQoNywgNykpLnRvQmUodHJ1ZSk7IH0pO1xuICBpdChcIigtMSwwKSBpcyBvZmYgYm9hcmRcIiwgKCkgPT4geyBleHBlY3QoaXNPbkJvYXJkKC0xLCAwKSkudG9CZShmYWxzZSk7IH0pO1xuICBpdChcIig4LDApIGlzIG9mZiBib2FyZFwiLCAoKSA9PiB7IGV4cGVjdChpc09uQm9hcmQoOCwgMCkpLnRvQmUoZmFsc2UpOyB9KTtcbiAgaXQoXCJzcXVhcmUgMCB2YWxpZFwiLCAoKSA9PiB7IGV4cGVjdChpc1ZhbGlkU3F1YXJlKDApKS50b0JlKHRydWUpOyB9KTtcbiAgaXQoXCJzcXVhcmUgNjMgdmFsaWRcIiwgKCkgPT4geyBleHBlY3QoaXNWYWxpZFNxdWFyZSg2MykpLnRvQmUodHJ1ZSk7IH0pO1xuICBpdChcInNxdWFyZSAtMSBpbnZhbGlkXCIsICgpID0+IHsgZXhwZWN0KGlzVmFsaWRTcXVhcmUoLTEpKS50b0JlKGZhbHNlKTsgfSk7XG4gIGl0KFwic3F1YXJlIDY0IGludmFsaWRcIiwgKCkgPT4geyBleHBlY3QoaXNWYWxpZFNxdWFyZSg2NCkpLnRvQmUoZmFsc2UpOyB9KTtcbn0pO1xuXG5kZXNjcmliZShcInNxdWFyZUNvbG9yXCIsICgpID0+IHtcbiAgaXQoXCJhMSAoMCkgaXMgZGFyayAoMCswPTAgZXZlbilcIiwgKCkgPT4geyBleHBlY3Qoc3F1YXJlQ29sb3IoMCkpLnRvQmUoXCJkYXJrXCIpOyB9KTtcbiAgaXQoXCJiMSAoMSkgaXMgbGlnaHQgKDErMD0xIG9kZClcIiwgKCkgPT4geyBleHBlY3Qoc3F1YXJlQ29sb3IoMSkpLnRvQmUoXCJsaWdodFwiKTsgfSk7XG4gIGl0KFwiaDggKDYzKSBpcyBkYXJrICg3Kzc9MTQgZXZlbilcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChzcXVhcmVDb2xvcig2MykpLnRvQmUoXCJkYXJrXCIpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInNxdWFyZVRvQWxnZWJyYWljIC8gYWxnZWJyYWljVG9TcXVhcmVcIiwgKCkgPT4ge1xuICBpdChcIjAg4oaSICdhMSdcIiwgKCkgPT4geyBleHBlY3Qoc3F1YXJlVG9BbGdlYnJhaWMoMCkpLnRvQmUoXCJhMVwiKTsgfSk7XG4gIGl0KFwiMjgg4oaSICdlNCdcIiwgKCkgPT4geyBleHBlY3Qoc3F1YXJlVG9BbGdlYnJhaWMoMjgpKS50b0JlKFwiZTRcIik7IH0pO1xuICBpdChcIjYzIOKGkiAnaDgnXCIsICgpID0+IHsgZXhwZWN0KHNxdWFyZVRvQWxnZWJyYWljKDYzKSkudG9CZShcImg4XCIpOyB9KTtcbiAgaXQoXCInZTQnIOKGkiAyOFwiLCAoKSA9PiB7IGV4cGVjdChhbGdlYnJhaWNUb1NxdWFyZShcImU0XCIpKS50b0JlKDI4KTsgfSk7XG4gIGl0KFwiJ2ExJyDihpIgMFwiLCAoKSA9PiB7IGV4cGVjdChhbGdlYnJhaWNUb1NxdWFyZShcImExXCIpKS50b0JlKDApOyB9KTtcbiAgaXQoXCInaDgnIOKGkiA2M1wiLCAoKSA9PiB7IGV4cGVjdChhbGdlYnJhaWNUb1NxdWFyZShcImg4XCIpKS50b0JlKDYzKTsgfSk7XG4gIGl0KFwiaW52YWxpZCDihpIgLTFcIiwgKCkgPT4geyBleHBlY3QoYWxnZWJyYWljVG9TcXVhcmUoXCJ6OVwiKSkudG9CZSgtMSk7IH0pO1xufSk7XG5cbmRlc2NyaWJlKFwic2xpZGluZ1NxdWFyZXNcIiwgKCkgPT4ge1xuICBpdChcInJvb2sgZnJvbSBhMSBnb2luZyByaWdodDogYjEsYzEsLi4uLGgxXCIsICgpID0+IHtcbiAgICBjb25zdCBzcSA9IHNsaWRpbmdTcXVhcmVzKDAsIDEsIDApO1xuICAgIGV4cGVjdChzcSkudG9FcXVhbChbMSwgMiwgMywgNCwgNSwgNiwgN10pO1xuICB9KTtcbiAgaXQoXCJiaXNob3AgZnJvbSBoOCBnb2luZyBkb3duLWxlZnQ6IGc3LGY2LGU1LGQ0LGMzLGIyLGExXCIsICgpID0+IHtcbiAgICBjb25zdCBzcSA9IHNsaWRpbmdTcXVhcmVzKDYzLCAtMSwgLTEpO1xuICAgIGV4cGVjdChzcSkudG9IYXZlTGVuZ3RoKDcpO1xuICAgIGV4cGVjdChzcVswXSkudG9CZSg1NCk7IC8vIGc3XG4gIH0pO1xuICBpdChcInN0b3BzIGF0IGJvYXJkIGVkZ2UgaW1tZWRpYXRlbHkgaWYgbm8gcm9vbVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc3EgPSBzbGlkaW5nU3F1YXJlcyg3LCAxLCAwKTsgLy8gcm9vayBhdCBoMSBnb2luZyByaWdodFxuICAgIGV4cGVjdChzcSkudG9FcXVhbChbXSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwia25pZ2h0U3F1YXJlc1wiLCAoKSA9PiB7XG4gIGl0KFwia25pZ2h0IGF0IGU0ICgyOCkgaGFzIDggbW92ZXNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChrbmlnaHRTcXVhcmVzKDI4KSkudG9IYXZlTGVuZ3RoKDgpO1xuICB9KTtcbiAgaXQoXCJrbmlnaHQgYXQgYTEgKDApIGhhcyAyIG1vdmVzIG9ubHlcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChrbmlnaHRTcXVhcmVzKDApKS50b0hhdmVMZW5ndGgoMik7XG4gIH0pO1xuICBpdChcImtuaWdodCBhdCBoOCAoNjMpIGhhcyAyIG1vdmVzIG9ubHlcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChrbmlnaHRTcXVhcmVzKDYzKSkudG9IYXZlTGVuZ3RoKDIpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImtpbmdTcXVhcmVzXCIsICgpID0+IHtcbiAgaXQoXCJraW5nIGF0IGU0ICgyOCkgaGFzIDggbW92ZXNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChraW5nU3F1YXJlcygyOCkpLnRvSGF2ZUxlbmd0aCg4KTtcbiAgfSk7XG4gIGl0KFwia2luZyBhdCBhMSAoMCkgaGFzIDMgbW92ZXMgb25seVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KGtpbmdTcXVhcmVzKDApKS50b0hhdmVMZW5ndGgoMyk7XG4gIH0pO1xuICBpdChcImtpbmcgYXQgaDggKDYzKSBoYXMgMyBtb3ZlcyBvbmx5XCIsICgpID0+IHtcbiAgICBleHBlY3Qoa2luZ1NxdWFyZXMoNjMpKS50b0hhdmVMZW5ndGgoMyk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvY2hlc3Mvc3JjL2Nvb3JkLnRlc3QudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/6034a6596878f47503e8eb62460c8adada6415da b/7xOfJqsDU787fe61oSCq1/web/6034a6596878f47503e8eb62460c8adada6415da deleted file mode 100644 index 297c1d4..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/6034a6596878f47503e8eb62460c8adada6415da +++ /dev/null @@ -1,96 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "STARTING_PIECES_DEF", { enumerable: true, configurable: true, get(){ try { return STARTING_PIECES_DEF } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "CLASSIC_LAYOUT", { enumerable: true, configurable: true, get(){ try { return CLASSIC_LAYOUT } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "applyLayout", { enumerable: true, configurable: true, get(){ try { return applyLayout } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "generateStartingPosition", { enumerable: true, configurable: true, get(){ try { return generateStartingPosition } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/schema.ts", {"importedNames":["GAME_ENTITY"]}); - - -const WHITE_BACK_RANK = [ - "rook", - "knight", - "bishop", - "queen", - "king", - "bishop", - "knight", - "rook" -]; -const BLACK_BACK_RANK = [ - "rook", - "knight", - "bishop", - "queen", - "king", - "bishop", - "knight", - "rook" -]; -function buildStartingPieces() { - const pieces = []; - for (let file = 0; file < 8; file++) { - pieces.push({ - type: WHITE_BACK_RANK[file], - color: "white", - square: file - }); - }; - for (let file = 0; file < 8; file++) { - pieces.push({ - type: "pawn", - color: "white", - square: 8 + file - }); - }; - for (let file = 0; file < 8; file++) { - pieces.push({ - type: "pawn", - color: "black", - square: 48 + file - }); - }; - for (let file = 0; file < 8; file++) { - pieces.push({ - type: BLACK_BACK_RANK[file], - color: "black", - square: 56 + file - }); - }; - return pieces; -} -const STARTING_PIECES = buildStartingPieces(); -const STARTING_PIECES_DEF = STARTING_PIECES; -const CLASSIC_LAYOUT = { - id: "classic", - name: "Classic Chess", - description: "The standard FIDE starting position. 32 pieces, symmetric setup.", - pieces: STARTING_PIECES.map((p) => ({ - type: p.type, - color: p.color, - square: p.square - })), - source: "premade" -}; -function applyLayout(session, layout) { - const pieceIds = []; - for (const placement of layout.pieces) { - const id = session.nextId(); - session.insert(id, "PieceType", placement.type); - session.insert(id, "Color", placement.color); - session.insert(id, "Position", placement.square); - session.insert(id, "HasMoved", placement.hasMoved ?? false); - pieceIds.push(id); - }; - session.insert((0,__vite_ssr_import_0__.GAME_ENTITY), "Turn", "white"); - session.insert((0,__vite_ssr_import_0__.GAME_ENTITY), "HalfmoveClock", 0); - session.insert((0,__vite_ssr_import_0__.GAME_ENTITY), "FullmoveNumber", 1); - session.insert((0,__vite_ssr_import_0__.GAME_ENTITY), "EnPassantTarget", null); - session.insert((0,__vite_ssr_import_0__.GAME_ENTITY), "GameStatus", "active"); - session.insert((0,__vite_ssr_import_0__.GAME_ENTITY), "Winner", null); - return pieceIds; -}; -function generateStartingPosition(session) { - return applyLayout(session, CLASSIC_LAYOUT); -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7OztBQWtDQTs7O0FBZUEsTUFBTSxrQkFBK0I7QUFBQSxFQUNuQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRjtBQUNBLE1BQU0sa0JBQStCO0FBQUEsRUFDbkM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Y7QUFFQSxTQUFTLHNCQUFrQztBQUN6QyxRQUFNLFNBQXFCLENBQUM7QUFHNUIsV0FBUyxPQUFPLEdBQUcsT0FBTyxHQUFHLFFBQVE7QUFDbkMsV0FBTyxLQUFLO0FBQUEsTUFDVixNQUFNLGdCQUFnQixJQUFJO0FBQUEsTUFDMUIsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLElBQ1YsQ0FBQztBQUFBLEVBQ0g7QUFHQSxXQUFTLE9BQU8sR0FBRyxPQUFPLEdBQUcsUUFBUTtBQUNuQyxXQUFPLEtBQUs7QUFBQSxNQUNWLE1BQU07QUFBQSxNQUNOLE9BQU87QUFBQSxNQUNQLFFBQVEsSUFBSTtBQUFBLElBQ2QsQ0FBQztBQUFBLEVBQ0g7QUFHQSxXQUFTLE9BQU8sR0FBRyxPQUFPLEdBQUcsUUFBUTtBQUNuQyxXQUFPLEtBQUs7QUFBQSxNQUNWLE1BQU07QUFBQSxNQUNOLE9BQU87QUFBQSxNQUNQLFFBQVEsS0FBSztBQUFBLElBQ2YsQ0FBQztBQUFBLEVBQ0g7QUFHQSxXQUFTLE9BQU8sR0FBRyxPQUFPLEdBQUcsUUFBUTtBQUNuQyxXQUFPLEtBQUs7QUFBQSxNQUNWLE1BQU0sZ0JBQWdCLElBQUk7QUFBQSxNQUMxQixPQUFPO0FBQUEsTUFDUCxRQUFRLEtBQUs7QUFBQSxJQUNmLENBQUM7QUFBQSxFQUNIO0FBRUEsU0FBTztBQUNUO0FBRUEsTUFBTSxrQkFBa0Isb0JBQW9CO0FBR3JDLE1BQU0sc0JBQ1g7QUFnQkssTUFBTSxpQkFBaUM7QUFBQSxFQUM1QyxJQUFJO0FBQUEsRUFDSixNQUFNO0FBQUEsRUFDTixhQUNFO0FBQUEsRUFDRixRQUFRLGdCQUFnQixJQUFJLENBQUMsT0FBTztBQUFBLElBQ2xDLE1BQU0sRUFBRTtBQUFBLElBQ1IsT0FBTyxFQUFFO0FBQUEsSUFDVCxRQUFRLEVBQUU7QUFBQSxFQUNaLEVBQUU7QUFBQSxFQUNGLFFBQVE7QUFDVjtBQXNCTyxTQUFTLFlBQ2QsU0FDQSxRQUNZO0FBQ1osUUFBTSxXQUF1QixDQUFDO0FBRTlCLGFBQVcsYUFBYSxPQUFPLFFBQVE7QUFDckMsVUFBTSxLQUFLLFFBQVEsT0FBTztBQUMxQixZQUFRLE9BQU8sSUFBSSxhQUFhLFVBQVUsSUFBSTtBQUM5QyxZQUFRLE9BQU8sSUFBSSxTQUFTLFVBQVUsS0FBSztBQUMzQyxZQUFRLE9BQU8sSUFBSSxZQUFZLFVBQVUsTUFBTTtBQUMvQyxZQUFRLE9BQU8sSUFBSSxZQUFZLFVBQVUsWUFBWSxLQUFLO0FBQzFELGFBQVMsS0FBSyxFQUFFO0FBQUEsRUFDbEI7QUFHQSxVQUFRLFVBQU8sb0NBQWEsUUFBUSxPQUFPO0FBQzNDLFVBQVEsVUFBTyxvQ0FBYSxpQkFBaUIsQ0FBQztBQUM5QyxVQUFRLFVBQU8sb0NBQWEsa0JBQWtCLENBQUM7QUFDL0MsVUFBUSxVQUFPLG9DQUFhLG1CQUFtQixJQUFJO0FBQ25ELFVBQVEsVUFBTyxvQ0FBYSxjQUFjLFFBQVE7QUFDbEQsVUFBUSxVQUFPLG9DQUFhLFVBQVUsSUFBSTtBQUUxQyxTQUFPO0FBQ1Q7QUFTTyxTQUFTLHlCQUF5QixTQUE4QjtBQUNyRSxTQUFPLFlBQVksU0FBUyxjQUFjO0FBQzVDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJzdGFydGluZy1wb3NpdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0YXJ0aW5nLXBvc2l0aW9uIGdlbmVyYXRvci5cbiAqXG4gKiBQb3N0LWxheW91dHMtcmVmYWN0b3IsIHRoaXMgbW9kdWxlIGlzIGEgVEhJTiB3cmFwcGVyIGFyb3VuZCB0aGVcbiAqIGxheW91dHMgc3Vic3lzdGVtOlxuICpcbiAqICAgLSBgQ0xBU1NJQ19MQVlPVVRgIOKAlCB0aGUgRklERSBzdGFydGluZyBsYXlvdXQsIGRlZmluZWQgaGVyZSBhc1xuICogICAgIHRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRydXRoLiBSZS1leHBvcnRlZCBhbmQgcmVnaXN0ZXJlZCBieVxuICogICAgIGBsYXlvdXRzL2NsYXNzaWMudHNgIHNvIGl0IHBhcnRpY2lwYXRlcyBpbiBgTEFZT1VUX1JFR0lTVFJZYC5cbiAqICAgLSBgYXBwbHlMYXlvdXQoc2Vzc2lvbiwgbGF5b3V0KWAg4oCUIGluc2VydHMgcGllY2UgZmFjdHMgKG9uZVxuICogICAgIGVudGl0eSBwZXIgcGxhY2VtZW50KSArIGdhbWUtbGV2ZWwgZmFjdHMgaW50byBhbiBlbXB0eVxuICogICAgIFNlc3Npb24uIFRoZSBTSEFSRUQgcGF0aCBmb3IgZXZlcnkgc3RhcnRpbmcgbGF5b3V0IOKAlCBjbGFzc2ljLFxuICogICAgIGN1c3RvbSwgRHVuc2FueSwgQ2hlc3M5NjAuXG4gKiAgIC0gYGdlbmVyYXRlU3RhcnRpbmdQb3NpdGlvbihzZXNzaW9uKWAg4oCUIGxlZ2FjeSBlbnRyeSBwb2ludCBrZXB0XG4gKiAgICAgYXMgYSBiYWNrLWNvbXBhdCB3cmFwcGVyIG92ZXIgYGFwcGx5TGF5b3V0KHNlc3Npb24sIENMQVNTSUNfTEFZT1VUKWAuXG4gKiAgICAgQ2FsbGVkIGZyb20gb2xkZXIgdGVzdCBzaXRlcyB0aGF0IHByZS1kYXRlIHRoZSBsYXlvdXRzIGZlYXR1cmUuXG4gKlxuICogYGFwcGx5TGF5b3V0YCBkZWxpYmVyYXRlbHkgZG9lcyBOT1QgZmlyZSBgb25QaWVjZVNwYXduYCBob29rcyDigJQgaXRcbiAqIHJ1bnMgYXQgc2Vzc2lvbi1jb25zdHJ1Y3Rpb24gdGltZSwgYmVmb3JlIGFueSBwcmVzZXQgaXMgYWN0aXZlLCBzb1xuICogdGhlcmUncyBub3RoaW5nIHRvIGhvb2suIFByZXNldHMgdGhhdCBuZWVkIHRvIHRhZyBpbml0aWFsIHBpZWNlc1xuICogKHBpZWNlLWhwIHNlZWRpbmcgYEhwYCwgZXRjLikgZG8gc28gdmlhIHRoZWlyIGBvbkFjdGl2YXRlYCBzY2FuLFxuICogd2hpY2ggdGhlIGVuZ2luZSBmaXJlcyBhZnRlciB0aGUgc2Vzc2lvbiBpcyBzZWVkZWQuIFRoaXMga2VlcHMgdGhlXG4gKiBwaXBlbGluZSdzIHR3byBcInBpZWNlIGJpcnRoXCIgcGF0aHMgZGlzdGluY3Q6XG4gKlxuICogICAxLiBTdGFydGluZyBwaWVjZXMg4oaSIGluc2VydGVkIGJ5IGFwcGx5TGF5b3V0LCB0YWdnZWQgYnkgZWFjaFxuICogICAgICBwcmVzZXQncyBvbkFjdGl2YXRlIHdoZW4gdGhlIHByZXNldCBzZXQgaXMgYXBwbGllZC5cbiAqICAgMi4gTWlkLWdhbWUgc3Bhd25zIChwcm9tb3Rpb24sIGZpc3Npb24sIHN1bW1vbikg4oaSIGNyZWF0ZWQgdmlhXG4gKiAgICAgIGBlbmdpbmUuc3Bhd25QaWVjZWAgd2hpY2ggRE9FUyBmaXJlIG9uUGllY2VTcGF3bi5cbiAqXG4gKiBQZXIgU1BFQy5tZCDCp0lEIEF1dGhvcml0eSwgcGllY2VzIGdldCBpbmNyZW1lbnRhbCBFbnRpdHlJZHMgZnJvbVxuICogYHNlc3Npb24ubmV4dElkKClgOyBnYW1lLWxldmVsIGZhY3RzIGxpdmUgb24gYEdBTUVfRU5USVRZYCAoMCkuXG4gKi9cbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB0eXBlIHsgU2Vzc2lvbiB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuaW1wb3J0IHtcbiAgR0FNRV9FTlRJVFksXG4gIHR5cGUgUGllY2VUeXBlLFxuICB0eXBlIFNxdWFyZSxcbn0gZnJvbSBcIi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBpZWNlUGxhY2VtZW50LCBTdGFydGluZ0xheW91dCB9IGZyb20gXCIuL2xheW91dHMvdHlwZXMuanNcIjtcblxuaW50ZXJmYWNlIFBpZWNlRGVmIHtcbiAgdHlwZTogUGllY2VUeXBlO1xuICBjb2xvcjogXCJ3aGl0ZVwiIHwgXCJibGFja1wiO1xuICBzcXVhcmU6IFNxdWFyZTtcbn1cblxuLy8g4pSA4pSAIEZJREUgc3RhcnRpbmctcG9zaXRpb24gZGF0YSAoa2VwdCBhcyBhcnJheXMgZm9yIHJlYWRhYmlsaXR5KSDilIDilIDilIDilIDilIDilIBcblxuY29uc3QgV0hJVEVfQkFDS19SQU5LOiBQaWVjZVR5cGVbXSA9IFtcbiAgXCJyb29rXCIsXG4gIFwia25pZ2h0XCIsXG4gIFwiYmlzaG9wXCIsXG4gIFwicXVlZW5cIixcbiAgXCJraW5nXCIsXG4gIFwiYmlzaG9wXCIsXG4gIFwia25pZ2h0XCIsXG4gIFwicm9va1wiLFxuXTtcbmNvbnN0IEJMQUNLX0JBQ0tfUkFOSzogUGllY2VUeXBlW10gPSBbXG4gIFwicm9va1wiLFxuICBcImtuaWdodFwiLFxuICBcImJpc2hvcFwiLFxuICBcInF1ZWVuXCIsXG4gIFwia2luZ1wiLFxuICBcImJpc2hvcFwiLFxuICBcImtuaWdodFwiLFxuICBcInJvb2tcIixcbl07XG5cbmZ1bmN0aW9uIGJ1aWxkU3RhcnRpbmdQaWVjZXMoKTogUGllY2VEZWZbXSB7XG4gIGNvbnN0IHBpZWNlczogUGllY2VEZWZbXSA9IFtdO1xuXG4gIC8vIFdoaXRlIGJhY2sgcmFuayAocmFuayAxID0gc3F1YXJlcyAwLTcpXG4gIGZvciAobGV0IGZpbGUgPSAwOyBmaWxlIDwgODsgZmlsZSsrKSB7XG4gICAgcGllY2VzLnB1c2goe1xuICAgICAgdHlwZTogV0hJVEVfQkFDS19SQU5LW2ZpbGVdISxcbiAgICAgIGNvbG9yOiBcIndoaXRlXCIsXG4gICAgICBzcXVhcmU6IGZpbGUsXG4gICAgfSk7XG4gIH1cblxuICAvLyBXaGl0ZSBwYXducyAocmFuayAyID0gc3F1YXJlcyA4LTE1KVxuICBmb3IgKGxldCBmaWxlID0gMDsgZmlsZSA8IDg7IGZpbGUrKykge1xuICAgIHBpZWNlcy5wdXNoKHtcbiAgICAgIHR5cGU6IFwicGF3blwiLFxuICAgICAgY29sb3I6IFwid2hpdGVcIixcbiAgICAgIHNxdWFyZTogOCArIGZpbGUsXG4gICAgfSk7XG4gIH1cblxuICAvLyBCbGFjayBwYXducyAocmFuayA3ID0gc3F1YXJlcyA0OC01NSlcbiAgZm9yIChsZXQgZmlsZSA9IDA7IGZpbGUgPCA4OyBmaWxlKyspIHtcbiAgICBwaWVjZXMucHVzaCh7XG4gICAgICB0eXBlOiBcInBhd25cIixcbiAgICAgIGNvbG9yOiBcImJsYWNrXCIsXG4gICAgICBzcXVhcmU6IDQ4ICsgZmlsZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEJsYWNrIGJhY2sgcmFuayAocmFuayA4ID0gc3F1YXJlcyA1Ni02MylcbiAgZm9yIChsZXQgZmlsZSA9IDA7IGZpbGUgPCA4OyBmaWxlKyspIHtcbiAgICBwaWVjZXMucHVzaCh7XG4gICAgICB0eXBlOiBCTEFDS19CQUNLX1JBTktbZmlsZV0hLFxuICAgICAgY29sb3I6IFwiYmxhY2tcIixcbiAgICAgIHNxdWFyZTogNTYgKyBmaWxlLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHBpZWNlcztcbn1cblxuY29uc3QgU1RBUlRJTkdfUElFQ0VTID0gYnVpbGRTdGFydGluZ1BpZWNlcygpO1xuXG4vKiogVGhlIGNhbm9uaWNhbCBGSURFIHN0YXJ0aW5nIHBpZWNlIGRlZmluaXRpb25zIChmb3IgdGVzdGluZyBhbmQgcmVmZXJlbmNlKS4gKi9cbmV4cG9ydCBjb25zdCBTVEFSVElOR19QSUVDRVNfREVGOiBSZWFkb25seUFycmF5PFJlYWRvbmx5PFBpZWNlRGVmPj4gPVxuICBTVEFSVElOR19QSUVDRVM7XG5cbi8qKlxuICogVGhlIEZJREUgc3RhcnRpbmcgbGF5b3V0IGV4cG9ydGVkIGFzIGEgYFN0YXJ0aW5nTGF5b3V0YCB2YWx1ZS5cbiAqXG4gKiBMaXZlcyBoZXJlIChyYXRoZXIgdGhhbiBpbiBgbGF5b3V0cy9jbGFzc2ljLnRzYCkgc28gdGhhdDpcbiAqICAgLSBUaGUgYmFjay1jb21wYXQgYGdlbmVyYXRlU3RhcnRpbmdQb3NpdGlvbmAgY2FuIHJlYWNoIGl0IHdpdGhvdXRcbiAqICAgICBpbXBvcnRpbmcgdGhlIGxheW91dHMgYmFycmVsICh3aGljaCB3b3VsZCB0cmFuc2l0aXZlbHkgaW1wb3J0XG4gKiAgICAgZXZlcnkgcHJlbWFkZSBhbmQgcHVsbCB0aGVtIGludG8gdGhlIHRlc3QgaGFybmVzcyBmb3IgZmlsZXNcbiAqICAgICB0aGF0IGp1c3Qgd2FudCBcInRoZSBGSURFIHNldHVwXCIpLlxuICogICAtIGBsYXlvdXRzL2NsYXNzaWMudHNgIGlzIGEgb25lLWxpbmUgcmVnaXN0cmF0aW9uIGZpbGUgd2l0aCBub1xuICogICAgIGR1cGxpY2F0aW9uLlxuICpcbiAqIGBzb3VyY2U6IFwicHJlbWFkZVwiYCBzbyB0aGUgbG9iYnkgY2FuIHRlbGwgaXQgYXBhcnQgZnJvbSB1c2VyLVxuICogYXV0aG9yZWQgbGF5b3V0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IENMQVNTSUNfTEFZT1VUOiBTdGFydGluZ0xheW91dCA9IHtcbiAgaWQ6IFwiY2xhc3NpY1wiLFxuICBuYW1lOiBcIkNsYXNzaWMgQ2hlc3NcIixcbiAgZGVzY3JpcHRpb246XG4gICAgXCJUaGUgc3RhbmRhcmQgRklERSBzdGFydGluZyBwb3NpdGlvbi4gMzIgcGllY2VzLCBzeW1tZXRyaWMgc2V0dXAuXCIsXG4gIHBpZWNlczogU1RBUlRJTkdfUElFQ0VTLm1hcCgocCkgPT4gKHtcbiAgICB0eXBlOiBwLnR5cGUsXG4gICAgY29sb3I6IHAuY29sb3IsXG4gICAgc3F1YXJlOiBwLnNxdWFyZSxcbiAgfSkpIHNhdGlzZmllcyBQaWVjZVBsYWNlbWVudFtdLFxuICBzb3VyY2U6IFwicHJlbWFkZVwiLFxufTtcblxuLyoqXG4gKiBJbnNlcnQgZXZlcnkgcGllY2UgcGxhY2VtZW50IGluIGBsYXlvdXRgIGludG8gYHNlc3Npb25gLCBwbHVzIHRoZVxuICogc3RhbmRhcmQgZ2FtZS1sZXZlbCBmYWN0cyAoVHVybiA9IHdoaXRlLCBjbG9ja3MgPSAwLCBldGMuKS5cbiAqXG4gKiBSZXR1cm5zIHRoZSBhcnJheSBvZiBFbnRpdHlJZHMgYXNzaWduZWQgdG8gdGhlIHBpZWNlcywgaW4gdGhlXG4gKiBvcmRlciB0aGV5IGFwcGVhciBpbiBgbGF5b3V0LnBpZWNlc2AuIENhbGxlcnMgdGhhdCBuZWVkIHRvXG4gKiBjcm9zcy1yZWZlcmVuY2UgcGllY2UgaWRzIHdpdGggdGhlaXIgcGxhY2VtZW50cyAodGVzdHMsIHNhdmUtc3RhdGVcbiAqIGluc3BlY3Rpb24pIHJlbHkgb24gdGhpcyBvcmRlciBiZWluZyBzdGFibGUuXG4gKlxuICogRWFjaCBwaWVjZSBnZXRzIGZvdXIgZmFjdHM6IGBQaWVjZVR5cGVgLCBgQ29sb3JgLCBgUG9zaXRpb25gLFxuICogYEhhc01vdmVkYC4gYEhhc01vdmVkYCBkZWZhdWx0cyB0byBgZmFsc2VgIHVubGVzcyB0aGUgcGxhY2VtZW50XG4gKiBleHBsaWNpdGx5IHNldHMgaXQg4oCUIGxheW91dHMgY2FuIHByZS1yZXZva2UgY2FzdGxpbmcgLyBkb3VibGUtcHVzaFxuICogcmlnaHRzIGJ5IHNldHRpbmcgYGhhc01vdmVkOiB0cnVlYCBvbiBzcGVjaWZpYyBwbGFjZW1lbnRzLlxuICpcbiAqIEdhbWUtbGV2ZWwgZmFjdHMgKFR1cm4sIEhhbGZtb3ZlQ2xvY2ssIEZ1bGxtb3ZlTnVtYmVyLFxuICogRW5QYXNzYW50VGFyZ2V0LCBHYW1lU3RhdHVzLCBXaW5uZXIpIGFyZSBpbnNlcnRlZCBpZGVudGljYWxseVxuICogcmVnYXJkbGVzcyBvZiBsYXlvdXQg4oCUIHRoZSBsYXlvdXQgY29udHJvbHMgV0hFUkUgcGllY2VzIGFyZSwgbm90XG4gKiB0aGUgY2xvY2sgLyB0dXJuIHN0YXRlLiBDbG9jay1yZWxhdGVkIHByZXNldHMgYXJlIGZyZWUgdG8gYWRqdXN0XG4gKiB0aGVzZSB2aWEgYG9uQWN0aXZhdGVgIGlmIHRoZXkgd2FudCBjdXN0b20gaW5pdGlhbCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUxheW91dChcbiAgc2Vzc2lvbjogU2Vzc2lvbixcbiAgbGF5b3V0OiBTdGFydGluZ0xheW91dCxcbik6IEVudGl0eUlkW10ge1xuICBjb25zdCBwaWVjZUlkczogRW50aXR5SWRbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgcGxhY2VtZW50IG9mIGxheW91dC5waWVjZXMpIHtcbiAgICBjb25zdCBpZCA9IHNlc3Npb24ubmV4dElkKCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoaWQsIFwiUGllY2VUeXBlXCIsIHBsYWNlbWVudC50eXBlKTtcbiAgICBzZXNzaW9uLmluc2VydChpZCwgXCJDb2xvclwiLCBwbGFjZW1lbnQuY29sb3IpO1xuICAgIHNlc3Npb24uaW5zZXJ0KGlkLCBcIlBvc2l0aW9uXCIsIHBsYWNlbWVudC5zcXVhcmUpO1xuICAgIHNlc3Npb24uaW5zZXJ0KGlkLCBcIkhhc01vdmVkXCIsIHBsYWNlbWVudC5oYXNNb3ZlZCA/PyBmYWxzZSk7XG4gICAgcGllY2VJZHMucHVzaChpZCk7XG4gIH1cblxuICAvLyBHYW1lLWxldmVsIGZhY3RzIOKAlCB1bmlmb3JtIGFjcm9zcyBldmVyeSBsYXlvdXQuXG4gIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIlR1cm5cIiwgXCJ3aGl0ZVwiKTtcbiAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiSGFsZm1vdmVDbG9ja1wiLCAwKTtcbiAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiRnVsbG1vdmVOdW1iZXJcIiwgMSk7XG4gIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIkVuUGFzc2FudFRhcmdldFwiLCBudWxsKTtcbiAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiR2FtZVN0YXR1c1wiLCBcImFjdGl2ZVwiKTtcbiAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiV2lubmVyXCIsIG51bGwpO1xuXG4gIHJldHVybiBwaWVjZUlkcztcbn1cblxuLyoqXG4gKiBCYWNrLWNvbXBhdCB3cmFwcGVyOiBhcHBseSB0aGUgRklERSBzdGFydGluZyBsYXlvdXQgdG8gYHNlc3Npb25gLlxuICpcbiAqIFByZS1sYXlvdXRzLWZlYXR1cmUgY2FsbGVycyAodGVzdHMgbW9zdGx5KSB1c2UgdGhpcy4gTmV3IGNvZGVcbiAqIHNob3VsZCBjYWxsIGBhcHBseUxheW91dChzZXNzaW9uLCBsYXlvdXQpYCBkaXJlY3RseSBvciBnbyB0aHJvdWdoXG4gKiB0aGUgZW5naW5lIGNvbnN0cnVjdG9yJ3MgYGxheW91dGAgb3B0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVTdGFydGluZ1Bvc2l0aW9uKHNlc3Npb246IFNlc3Npb24pOiBFbnRpdHlJZFtdIHtcbiAgcmV0dXJuIGFwcGx5TGF5b3V0KHNlc3Npb24sIENMQVNTSUNfTEFZT1VUKTtcbn1cbiJdLCJmaWxlIjoiL3NyYy9zdGFydGluZy1wb3NpdGlvbi50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/61212ab2cb2dd1014ec28f222f7a16693a8dc704 b/7xOfJqsDU787fe61oSCq1/web/61212ab2cb2dd1014ec28f222f7a16693a8dc704 deleted file mode 100644 index 1e3693f..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/61212ab2cb2dd1014ec28f222f7a16693a8dc704 +++ /dev/null @@ -1,5 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "default", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_export_default__ } catch {} }}); -const __vite_ssr_export_default__ = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%20width='45'%20height='45'%3e%3cg%20style='fill:%23ffffff;stroke:%23000000;stroke-width:1.5;stroke-linejoin:round'%3e%3cpath%20d='M%209,26%20C%2017.5,24.5%2030,24.5%2036,26%20L%2038.5,13.5%20L%2031,25%20L%2030.7,10.9%20L%2025.5,24.5%20L%2022.5,10%20L%2019.5,24.5%20L%2014.3,10.9%20L%2014,25%20L%206.5,13.5%20L%209,26%20z'/%3e%3cpath%20d='M%209,26%20C%209,28%2010.5,28%2011.5,30%20C%2012.5,31.5%2012.5,31%2012,33.5%20C%2010.5,34.5%2011,36%2011,36%20C%209.5,37.5%2011,38.5%2011,38.5%20C%2017.5,39.5%2027.5,39.5%2034,38.5%20C%2034,38.5%2035.5,37.5%2034,36%20C%2034,36%2034.5,34.5%2033,33.5%20C%2032.5,31%2032.5,31.5%2033.5,30%20C%2034.5,28%2036,28%2036,26%20C%2027.5,24.5%2017.5,24.5%209,26%20z'/%3e%3cpath%20d='M%2011.5,30%20C%2015,29%2030,29%2033.5,30'%20style='fill:none'/%3e%3cpath%20d='M%2012,33.5%20C%2018,32.5%2027,32.5%2033,33.5'%20style='fill:none'/%3e%3ccircle%20cx='6'%20cy='12'%20r='2'%20/%3e%3ccircle%20cx='14'%20cy='9'%20r='2'%20/%3e%3ccircle%20cx='22.5'%20cy='8'%20r='2'%20/%3e%3ccircle%20cx='31'%20cy='9'%20r='2'%20/%3e%3ccircle%20cx='39'%20cy='12'%20r='2'%20/%3e%3c/g%3e%3c/svg%3e" - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndoaXRlLXF1ZWVuLnN2ZyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2M/eG1sJTIwdmVyc2lvbj0nMS4wJyUyMGVuY29kaW5nPSdVVEYtOCclMjBzdGFuZGFsb25lPSdubyc/JTNlJTNjIURPQ1RZUEUlMjBzdmclMjBQVUJMSUMlMjAnLS8vVzNDLy9EVEQlMjBTVkclMjAxLjEvL0VOJyUyMCdodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQnJTNlJTNjc3ZnJTIweG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUyMHZlcnNpb249JzEuMSclMjB3aWR0aD0nNDUnJTIwaGVpZ2h0PSc0NSclM2UlM2NnJTIwc3R5bGU9J2ZpbGw6JTIzZmZmZmZmO3N0cm9rZTolMjMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuNTtzdHJva2UtbGluZWpvaW46cm91bmQnJTNlJTNjcGF0aCUyMGQ9J00lMjA5LDI2JTIwQyUyMDE3LjUsMjQuNSUyMDMwLDI0LjUlMjAzNiwyNiUyMEwlMjAzOC41LDEzLjUlMjBMJTIwMzEsMjUlMjBMJTIwMzAuNywxMC45JTIwTCUyMDI1LjUsMjQuNSUyMEwlMjAyMi41LDEwJTIwTCUyMDE5LjUsMjQuNSUyMEwlMjAxNC4zLDEwLjklMjBMJTIwMTQsMjUlMjBMJTIwNi41LDEzLjUlMjBMJTIwOSwyNiUyMHonLyUzZSUzY3BhdGglMjBkPSdNJTIwOSwyNiUyMEMlMjA5LDI4JTIwMTAuNSwyOCUyMDExLjUsMzAlMjBDJTIwMTIuNSwzMS41JTIwMTIuNSwzMSUyMDEyLDMzLjUlMjBDJTIwMTAuNSwzNC41JTIwMTEsMzYlMjAxMSwzNiUyMEMlMjA5LjUsMzcuNSUyMDExLDM4LjUlMjAxMSwzOC41JTIwQyUyMDE3LjUsMzkuNSUyMDI3LjUsMzkuNSUyMDM0LDM4LjUlMjBDJTIwMzQsMzguNSUyMDM1LjUsMzcuNSUyMDM0LDM2JTIwQyUyMDM0LDM2JTIwMzQuNSwzNC41JTIwMzMsMzMuNSUyMEMlMjAzMi41LDMxJTIwMzIuNSwzMS41JTIwMzMuNSwzMCUyMEMlMjAzNC41LDI4JTIwMzYsMjglMjAzNiwyNiUyMEMlMjAyNy41LDI0LjUlMjAxNy41LDI0LjUlMjA5LDI2JTIweicvJTNlJTNjcGF0aCUyMGQ9J00lMjAxMS41LDMwJTIwQyUyMDE1LDI5JTIwMzAsMjklMjAzMy41LDMwJyUyMHN0eWxlPSdmaWxsOm5vbmUnLyUzZSUzY3BhdGglMjBkPSdNJTIwMTIsMzMuNSUyMEMlMjAxOCwzMi41JTIwMjcsMzIuNSUyMDMzLDMzLjUnJTIwc3R5bGU9J2ZpbGw6bm9uZScvJTNlJTNjY2lyY2xlJTIwY3g9JzYnJTIwY3k9JzEyJyUyMHI9JzInJTIwLyUzZSUzY2NpcmNsZSUyMGN4PScxNCclMjBjeT0nOSclMjByPScyJyUyMC8lM2UlM2NjaXJjbGUlMjBjeD0nMjIuNSclMjBjeT0nOCclMjByPScyJyUyMC8lM2UlM2NjaXJjbGUlMjBjeD0nMzEnJTIwY3k9JzknJTIwcj0nMiclMjAvJTNlJTNjY2lyY2xlJTIwY3g9JzM5JyUyMGN5PScxMiclMjByPScyJyUyMC8lM2UlM2MvZyUzZSUzYy9zdmclM2VcIiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsbUNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/6140973a3e41c9e10775129f7df0d2e0ec71507f b/7xOfJqsDU787fe61oSCq1/web/6140973a3e41c9e10775129f7df0d2e0ec71507f deleted file mode 100644 index b043db6..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/6140973a3e41c9e10775129f7df0d2e0ec71507f +++ /dev/null @@ -1,5 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "default", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_export_default__ } catch {} }}); -const __vite_ssr_export_default__ = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='45'%20height='45'%3e%3cg%20fill='none'%20fill-rule='evenodd'%20stroke='%23000'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='1.5'%3e%3cpath%20stroke-linejoin='miter'%20d='M22.5%2011.63V6M20%208h5'/%3e%3cpath%20fill='%23fff'%20stroke-linecap='butt'%20stroke-linejoin='miter'%20d='M22.5%2025s4.5-7.5%203-10.5c0%200-1-2.5-3-2.5s-3%202.5-3%202.5c-1.5%203%203%2010.5%203%2010.5'/%3e%3cpath%20fill='%23fff'%20d='M12.5%2037c5.5%203.5%2014.5%203.5%2020%200v-7s9-4.5%206-10.5c-4-6.5-13.5-3.5-16%204V27v-3.5c-2.5-7.5-12-10.5-16-4-3%206%206%2010.5%206%2010.5v7'/%3e%3cpath%20d='M12.5%2030c5.5-3%2014.5-3%2020%200m-20%203.5c5.5-3%2014.5-3%2020%200m-20%203.5c5.5-3%2014.5-3%2020%200'/%3e%3c/g%3e%3c/svg%3e" - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndoaXRlLWtpbmcuc3ZnIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzYz94bWwlMjB2ZXJzaW9uPScxLjAnJTIwZW5jb2Rpbmc9J1VURi04JyUyMHN0YW5kYWxvbmU9J25vJz8lM2UlM2NzdmclMjB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTIwd2lkdGg9JzQ1JyUyMGhlaWdodD0nNDUnJTNlJTNjZyUyMGZpbGw9J25vbmUnJTIwZmlsbC1ydWxlPSdldmVub2RkJyUyMHN0cm9rZT0nJTIzMDAwJyUyMHN0cm9rZS1saW5lY2FwPSdyb3VuZCclMjBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUyMHN0cm9rZS13aWR0aD0nMS41JyUzZSUzY3BhdGglMjBzdHJva2UtbGluZWpvaW49J21pdGVyJyUyMGQ9J00yMi41JTIwMTEuNjNWNk0yMCUyMDhoNScvJTNlJTNjcGF0aCUyMGZpbGw9JyUyM2ZmZiclMjBzdHJva2UtbGluZWNhcD0nYnV0dCclMjBzdHJva2UtbGluZWpvaW49J21pdGVyJyUyMGQ9J00yMi41JTIwMjVzNC41LTcuNSUyMDMtMTAuNWMwJTIwMC0xLTIuNS0zLTIuNXMtMyUyMDIuNS0zJTIwMi41Yy0xLjUlMjAzJTIwMyUyMDEwLjUlMjAzJTIwMTAuNScvJTNlJTNjcGF0aCUyMGZpbGw9JyUyM2ZmZiclMjBkPSdNMTIuNSUyMDM3YzUuNSUyMDMuNSUyMDE0LjUlMjAzLjUlMjAyMCUyMDB2LTdzOS00LjUlMjA2LTEwLjVjLTQtNi41LTEzLjUtMy41LTE2JTIwNFYyN3YtMy41Yy0yLjUtNy41LTEyLTEwLjUtMTYtNC0zJTIwNiUyMDYlMjAxMC41JTIwNiUyMDEwLjV2NycvJTNlJTNjcGF0aCUyMGQ9J00xMi41JTIwMzBjNS41LTMlMjAxNC41LTMlMjAyMCUyMDBtLTIwJTIwMy41YzUuNS0zJTIwMTQuNS0zJTIwMjAlMjAwbS0yMCUyMDMuNWM1LjUtMyUyMDE0LjUtMyUyMDIwJTIwMCcvJTNlJTNjL2clM2UlM2Mvc3ZnJTNlXCIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLG1DQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/63927b8561240ae5565092905e25f88a0ec65efb b/7xOfJqsDU787fe61oSCq1/web/63927b8561240ae5565092905e25f88a0ec65efb deleted file mode 100644 index ab2d63f..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/63927b8561240ae5565092905e25f88a0ec65efb +++ /dev/null @@ -1,110 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect","vi"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/presets/index.ts"); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/engine.ts", {"importedNames":["ChessEngine"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["algebraicToSquare"]}); -(0,__vite_ssr_import_0__.describe)("engine.emitEffect + subscribeEffects", () => { - (0,__vite_ssr_import_0__.it)("subscribers receive every emitted effect", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - const received = []; - engine.subscribeEffects((e) => received.push(e)); - engine.emitEffect({ kind: "test", square: 0, ttl: 100 }); - engine.emitEffect({ kind: "other", square: 5, ttl: 200 }); - (0,__vite_ssr_import_0__.expect)(received).toHaveLength(2); - (0,__vite_ssr_import_0__.expect)(received[0]?.kind).toBe("test"); - (0,__vite_ssr_import_0__.expect)(received[1]?.kind).toBe("other"); - }); - (0,__vite_ssr_import_0__.it)("unsubscribe stops further deliveries", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - const received = []; - const unsub = engine.subscribeEffects((e) => received.push(e)); - engine.emitEffect({ kind: "a", square: null, ttl: 100 }); - unsub(); - engine.emitEffect({ kind: "b", square: null, ttl: 100 }); - (0,__vite_ssr_import_0__.expect)(received).toHaveLength(1); - }); - (0,__vite_ssr_import_0__.it)("multiple subscribers all receive the same effect", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - const a = []; - const b = []; - engine.subscribeEffects((e) => a.push(e)); - engine.subscribeEffects((e) => b.push(e)); - engine.emitEffect({ kind: "x", square: 0, ttl: 100 }); - (0,__vite_ssr_import_0__.expect)(a).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(b).toHaveLength(1); - }); - (0,__vite_ssr_import_0__.it)("a subscriber that throws doesn't break other subscribers", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - const survivor = []; - const errSpy = __vite_ssr_import_0__.vi.spyOn(console, "error").mockImplementation(() => { - }); - engine.subscribeEffects(() => { - throw new Error("boom"); - }); - engine.subscribeEffects((e) => survivor.push(e)); - engine.emitEffect({ kind: "x", square: 0, ttl: 100 }); - (0,__vite_ssr_import_0__.expect)(survivor).toHaveLength(1); - errSpy.mockRestore(); - }); - (0,__vite_ssr_import_0__.it)("no subscribers is a no-op (no throw)", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - (0,__vite_ssr_import_0__.expect)( - () => engine.emitEffect({ kind: "x", square: 0, ttl: 100 }) - ).not.toThrow(); - }); -}); -(0,__vite_ssr_import_0__.describe)("explosive-rook emits 'explosion' effect", () => { - (0,__vite_ssr_import_0__.it)("fires on rook capture with target square", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - const facts = engine.session.allFacts(); - for (const f of facts) { - if (f.attr !== "PieceType") continue; - if (f.id <= 0) continue; - if (f.value === "king") continue; - for (const attr of ["PieceType", "Color", "Position", "HasMoved", "Hp"]) { - if (engine.session.contains(f.id, attr)) engine.session.retract(f.id, attr); - } - }; - const rook = engine.session.nextId(); - engine.session.insert(rook, "PieceType", "rook"); - engine.session.insert(rook, "Color", "white"); - engine.session.insert(rook, "Position", (0,__vite_ssr_import_3__.algebraicToSquare)("a1")); - const target = engine.session.nextId(); - engine.session.insert(target, "PieceType", "pawn"); - engine.session.insert(target, "Color", "black"); - engine.session.insert(target, "Position", (0,__vite_ssr_import_3__.algebraicToSquare)("a5")); - engine.session.insert(target, "HasMoved", true); - engine.setActivePresets([ - { id: "explosive-rook", scope: "both", turnsRemaining: null } - ]); - const received = []; - engine.subscribeEffects((e) => received.push(e)); - const capture = engine.findMove( - (0,__vite_ssr_import_3__.algebraicToSquare)("a1"), - (0,__vite_ssr_import_3__.algebraicToSquare)("a5") - ); - (0,__vite_ssr_import_0__.expect)(capture).not.toBeNull(); - engine.applyMove(capture); - const explosion = received.find((e) => e.kind === "explosion"); - (0,__vite_ssr_import_0__.expect)(explosion).toBeDefined(); - (0,__vite_ssr_import_0__.expect)(explosion?.square).toBe((0,__vite_ssr_import_3__.algebraicToSquare)("a5")); - (0,__vite_ssr_import_0__.expect)(explosion?.ttl).toBeGreaterThan(0); - }); -}); -(0,__vite_ssr_import_0__.describe)("king-heals emits 'heal' effect", () => { - (0,__vite_ssr_import_0__.it)("fires on successful regen with king square", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null }, - { id: "king-heals", scope: "both", turnsRemaining: null } - ]); - const received = []; - engine.subscribeEffects((e) => received.push(e)); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e2"), (0,__vite_ssr_import_3__.algebraicToSquare)("e4"))); - const heal = received.find((e) => e.kind === "heal"); - (0,__vite_ssr_import_0__.expect)(heal).toBeDefined(); - (0,__vite_ssr_import_0__.expect)(heal?.square).toBe((0,__vite_ssr_import_3__.algebraicToSquare)("e8")); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LHlDQUFrQixJQUFJLENBQUM7QUFDdEQscUNBQU8sV0FBVyxHQUFHLEVBQUUsZ0JBQWdCLENBQUM7QUFBQSxFQUMxQyxDQUFDO0FBQ0gsQ0FBQztHQUVELGdDQUFTLGtDQUFrQyxNQUFNO0FBQy9DLCtCQUFHLDhDQUE4QyxNQUFNO0FBQ3JELFVBQU0sU0FBUyxJQUFJLGtDQUFZO0FBQy9CLFdBQU8saUJBQWlCO0FBQUEsTUFDdEIsRUFBRSxJQUFJLFlBQVksT0FBTyxRQUFRLGdCQUFnQixLQUFLO0FBQUEsTUFDdEQsRUFBRSxJQUFJLGNBQWMsT0FBTyxRQUFRLGdCQUFnQixLQUFLO0FBQUEsSUFDMUQsQ0FBQztBQUNELFVBQU0sV0FBMkIsQ0FBQztBQUNsQyxXQUFPLGlCQUFpQixDQUFDLE1BQU0sU0FBUyxLQUFLLENBQUMsQ0FBQztBQUcvQyxXQUFPLFVBQVUsT0FBTyxZQUFTLHlDQUFrQixJQUFJLE1BQUcseUNBQWtCLElBQUksQ0FBQyxDQUFFO0FBRW5GLFVBQU0sT0FBTyxTQUFTLEtBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUyxNQUFNO0FBQ25ELHFDQUFPLElBQUksRUFBRSxZQUFZO0FBQ3pCLHFDQUFPLE1BQU0sTUFBTSxFQUFFLFFBQUsseUNBQWtCLElBQUksQ0FBQztBQUFBLEVBQ25ELENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJ2aXN1YWwtZWZmZWN0LnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUZXN0cyBmb3IgYENoZXNzRW5naW5lLmVtaXRFZmZlY3RgICsgYHN1YnNjcmliZUVmZmVjdHNgIGFuZCB0aGVcbiAqIHByZXNldHMgdGhhdCBlbWl0IGVmZmVjdHMgdmlhIHRob3NlIEFQSXMuXG4gKi9cbmltcG9ydCB7IGRlc2NyaWJlLCBpdCwgZXhwZWN0LCB2aSB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCBcIi4vaW5kZXguanNcIjtcbmltcG9ydCB7IENoZXNzRW5naW5lLCB0eXBlIFZpc3VhbEVmZmVjdCB9IGZyb20gXCIuLi9lbmdpbmUuanNcIjtcbmltcG9ydCB7IGFsZ2VicmFpY1RvU3F1YXJlIH0gZnJvbSBcIi4uL2Nvb3JkLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eUlkIH0gZnJvbSBcIkBwYXJhdHlwZS9yZXRlXCI7XG5cbmRlc2NyaWJlKFwiZW5naW5lLmVtaXRFZmZlY3QgKyBzdWJzY3JpYmVFZmZlY3RzXCIsICgpID0+IHtcbiAgaXQoXCJzdWJzY3JpYmVycyByZWNlaXZlIGV2ZXJ5IGVtaXR0ZWQgZWZmZWN0XCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBjb25zdCByZWNlaXZlZDogVmlzdWFsRWZmZWN0W10gPSBbXTtcbiAgICBlbmdpbmUuc3Vic2NyaWJlRWZmZWN0cygoZSkgPT4gcmVjZWl2ZWQucHVzaChlKSk7XG5cbiAgICBlbmdpbmUuZW1pdEVmZmVjdCh7IGtpbmQ6IFwidGVzdFwiLCBzcXVhcmU6IDAsIHR0bDogMTAwIH0pO1xuICAgIGVuZ2luZS5lbWl0RWZmZWN0KHsga2luZDogXCJvdGhlclwiLCBzcXVhcmU6IDUsIHR0bDogMjAwIH0pO1xuXG4gICAgZXhwZWN0KHJlY2VpdmVkKS50b0hhdmVMZW5ndGgoMik7XG4gICAgZXhwZWN0KHJlY2VpdmVkWzBdPy5raW5kKS50b0JlKFwidGVzdFwiKTtcbiAgICBleHBlY3QocmVjZWl2ZWRbMV0/LmtpbmQpLnRvQmUoXCJvdGhlclwiKTtcbiAgfSk7XG5cbiAgaXQoXCJ1bnN1YnNjcmliZSBzdG9wcyBmdXJ0aGVyIGRlbGl2ZXJpZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGNvbnN0IHJlY2VpdmVkOiBWaXN1YWxFZmZlY3RbXSA9IFtdO1xuICAgIGNvbnN0IHVuc3ViID0gZW5naW5lLnN1YnNjcmliZUVmZmVjdHMoKGUpID0+IHJlY2VpdmVkLnB1c2goZSkpO1xuICAgIGVuZ2luZS5lbWl0RWZmZWN0KHsga2luZDogXCJhXCIsIHNxdWFyZTogbnVsbCwgdHRsOiAxMDAgfSk7XG4gICAgdW5zdWIoKTtcbiAgICBlbmdpbmUuZW1pdEVmZmVjdCh7IGtpbmQ6IFwiYlwiLCBzcXVhcmU6IG51bGwsIHR0bDogMTAwIH0pO1xuICAgIGV4cGVjdChyZWNlaXZlZCkudG9IYXZlTGVuZ3RoKDEpO1xuICB9KTtcblxuICBpdChcIm11bHRpcGxlIHN1YnNjcmliZXJzIGFsbCByZWNlaXZlIHRoZSBzYW1lIGVmZmVjdFwiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgY29uc3QgYTogVmlzdWFsRWZmZWN0W10gPSBbXTtcbiAgICBjb25zdCBiOiBWaXN1YWxFZmZlY3RbXSA9IFtdO1xuICAgIGVuZ2luZS5zdWJzY3JpYmVFZmZlY3RzKChlKSA9PiBhLnB1c2goZSkpO1xuICAgIGVuZ2luZS5zdWJzY3JpYmVFZmZlY3RzKChlKSA9PiBiLnB1c2goZSkpO1xuICAgIGVuZ2luZS5lbWl0RWZmZWN0KHsga2luZDogXCJ4XCIsIHNxdWFyZTogMCwgdHRsOiAxMDAgfSk7XG4gICAgZXhwZWN0KGEpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICBleHBlY3QoYikudG9IYXZlTGVuZ3RoKDEpO1xuICB9KTtcblxuICBpdChcImEgc3Vic2NyaWJlciB0aGF0IHRocm93cyBkb2Vzbid0IGJyZWFrIG90aGVyIHN1YnNjcmliZXJzXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBjb25zdCBzdXJ2aXZvcjogVmlzdWFsRWZmZWN0W10gPSBbXTtcbiAgICBjb25zdCBlcnJTcHkgPSB2aS5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgZW5naW5lLnN1YnNjcmliZUVmZmVjdHMoKCkgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYm9vbVwiKTtcbiAgICB9KTtcbiAgICBlbmdpbmUuc3Vic2NyaWJlRWZmZWN0cygoZSkgPT4gc3Vydml2b3IucHVzaChlKSk7XG4gICAgZW5naW5lLmVtaXRFZmZlY3QoeyBraW5kOiBcInhcIiwgc3F1YXJlOiAwLCB0dGw6IDEwMCB9KTtcbiAgICBleHBlY3Qoc3Vydml2b3IpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICBlcnJTcHkubW9ja1Jlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoXCJubyBzdWJzY3JpYmVycyBpcyBhIG5vLW9wIChubyB0aHJvdylcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgZW5naW5lLmVtaXRFZmZlY3QoeyBraW5kOiBcInhcIiwgc3F1YXJlOiAwLCB0dGw6IDEwMCB9KSxcbiAgICApLm5vdC50b1Rocm93KCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiZXhwbG9zaXZlLXJvb2sgZW1pdHMgJ2V4cGxvc2lvbicgZWZmZWN0XCIsICgpID0+IHtcbiAgaXQoXCJmaXJlcyBvbiByb29rIGNhcHR1cmUgd2l0aCB0YXJnZXQgc3F1YXJlXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICAvLyBNaW5pbWFsIHNldHVwOiBjbGVhciBib2FyZCwgYWRkIHdoaXRlIHJvb2sgb24gYTEsIGJsYWNrIHBhd24gb24gYTVcbiAgICBjb25zdCBmYWN0cyA9IGVuZ2luZS5zZXNzaW9uLmFsbEZhY3RzKCk7XG4gICAgZm9yIChjb25zdCBmIG9mIGZhY3RzKSB7XG4gICAgICBpZiAoZi5hdHRyICE9PSBcIlBpZWNlVHlwZVwiKSBjb250aW51ZTtcbiAgICAgIGlmICgoZi5pZCBhcyBudW1iZXIpIDw9IDApIGNvbnRpbnVlO1xuICAgICAgaWYgKGYudmFsdWUgPT09IFwia2luZ1wiKSBjb250aW51ZTtcbiAgICAgIGZvciAoY29uc3QgYXR0ciBvZiBbXCJQaWVjZVR5cGVcIiwgXCJDb2xvclwiLCBcIlBvc2l0aW9uXCIsIFwiSGFzTW92ZWRcIiwgXCJIcFwiXSBhcyBjb25zdCkge1xuICAgICAgICBpZiAoZW5naW5lLnNlc3Npb24uY29udGFpbnMoZi5pZCwgYXR0cikpIGVuZ2luZS5zZXNzaW9uLnJldHJhY3QoZi5pZCwgYXR0cik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJvb2s6IEVudGl0eUlkID0gZW5naW5lLnNlc3Npb24ubmV4dElkKCk7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KHJvb2ssIFwiUGllY2VUeXBlXCIsIFwicm9va1wiKTtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQocm9vaywgXCJDb2xvclwiLCBcIndoaXRlXCIpO1xuICAgIGVuZ2luZS5zZXNzaW9uLmluc2VydChyb29rLCBcIlBvc2l0aW9uXCIsIGFsZ2VicmFpY1RvU3F1YXJlKFwiYTFcIikpO1xuICAgIGNvbnN0IHRhcmdldDogRW50aXR5SWQgPSBlbmdpbmUuc2Vzc2lvbi5uZXh0SWQoKTtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQodGFyZ2V0LCBcIlBpZWNlVHlwZVwiLCBcInBhd25cIik7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KHRhcmdldCwgXCJDb2xvclwiLCBcImJsYWNrXCIpO1xuICAgIGVuZ2luZS5zZXNzaW9uLmluc2VydCh0YXJnZXQsIFwiUG9zaXRpb25cIiwgYWxnZWJyYWljVG9TcXVhcmUoXCJhNVwiKSk7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KHRhcmdldCwgXCJIYXNNb3ZlZFwiLCB0cnVlKTtcblxuICAgIGVuZ2luZS5zZXRBY3RpdmVQcmVzZXRzKFtcbiAgICAgIHsgaWQ6IFwiZXhwbG9zaXZlLXJvb2tcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuXG4gICAgY29uc3QgcmVjZWl2ZWQ6IFZpc3VhbEVmZmVjdFtdID0gW107XG4gICAgZW5naW5lLnN1YnNjcmliZUVmZmVjdHMoKGUpID0+IHJlY2VpdmVkLnB1c2goZSkpO1xuXG4gICAgY29uc3QgY2FwdHVyZSA9IGVuZ2luZS5maW5kTW92ZShcbiAgICAgIGFsZ2VicmFpY1RvU3F1YXJlKFwiYTFcIiksXG4gICAgICBhbGdlYnJhaWNUb1NxdWFyZShcImE1XCIpLFxuICAgICk7XG4gICAgZXhwZWN0KGNhcHR1cmUpLm5vdC50b0JlTnVsbCgpO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoY2FwdHVyZSEpO1xuXG4gICAgY29uc3QgZXhwbG9zaW9uID0gcmVjZWl2ZWQuZmluZCgoZSkgPT4gZS5raW5kID09PSBcImV4cGxvc2lvblwiKTtcbiAgICBleHBlY3QoZXhwbG9zaW9uKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChleHBsb3Npb24/LnNxdWFyZSkudG9CZShhbGdlYnJhaWNUb1NxdWFyZShcImE1XCIpKTtcbiAgICBleHBlY3QoZXhwbG9zaW9uPy50dGwpLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJraW5nLWhlYWxzIGVtaXRzICdoZWFsJyBlZmZlY3RcIiwgKCkgPT4ge1xuICBpdChcImZpcmVzIG9uIHN1Y2Nlc3NmdWwgcmVnZW4gd2l0aCBraW5nIHNxdWFyZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgZW5naW5lLnNldEFjdGl2ZVByZXNldHMoW1xuICAgICAgeyBpZDogXCJwaWVjZS1ocFwiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgICB7IGlkOiBcImtpbmctaGVhbHNcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuICAgIGNvbnN0IHJlY2VpdmVkOiBWaXN1YWxFZmZlY3RbXSA9IFtdO1xuICAgIGVuZ2luZS5zdWJzY3JpYmVFZmZlY3RzKChlKSA9PiByZWNlaXZlZC5wdXNoKGUpKTtcblxuICAgIC8vIDEuIGU0IOKAlCBoZWFscyBCTEFDSyBraW5nIChub24tbW92ZXIpLiBCbGFjayBraW5nIG9uIGU4LCBIcD0yIOKGkiAzLlxuICAgIGVuZ2luZS5hcHBseU1vdmUoZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZTJcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiZTRcIikpISk7XG5cbiAgICBjb25zdCBoZWFsID0gcmVjZWl2ZWQuZmluZCgoZSkgPT4gZS5raW5kID09PSBcImhlYWxcIik7XG4gICAgZXhwZWN0KGhlYWwpLnRvQmVEZWZpbmVkKCk7XG4gICAgZXhwZWN0KGhlYWw/LnNxdWFyZSkudG9CZShhbGdlYnJhaWNUb1NxdWFyZShcImU4XCIpKTtcbiAgfSk7XG59KTtcbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9jaGVzcy9zcmMvcHJlc2V0cy92aXN1YWwtZWZmZWN0LnRlc3QudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/63aa90a3f7866d28b88897a72607b4b394969d5a b/7xOfJqsDU787fe61oSCq1/web/63aa90a3f7866d28b88897a72607b4b394969d5a deleted file mode 100644 index 61f4db2..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/63aa90a3f7866d28b88897a72607b4b394969d5a +++ /dev/null @@ -1,34 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "HORDE_LAYOUT", { enumerable: true, configurable: true, get(){ try { return HORDE_LAYOUT } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/layouts/registry.ts", {"importedNames":["LAYOUT_REGISTRY"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/layouts/_helpers.ts", {"importedNames":["fideSideOf","pawnsOnRanks"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["algebraicToSquare"]}); -const E1 = (0,__vite_ssr_import_2__.algebraicToSquare)("e1"); -const whitePawnsMinusE1 = (0,__vite_ssr_import_1__.pawnsOnRanks)("white", [ - 0, - 1, - 2, - 3 -]).filter((p) => p.square !== E1); -const advancedPawns = [ - { type: "pawn", color: "white", square: (0,__vite_ssr_import_2__.algebraicToSquare)("b5") }, - { type: "pawn", color: "white", square: (0,__vite_ssr_import_2__.algebraicToSquare)("c5") }, - { type: "pawn", color: "white", square: (0,__vite_ssr_import_2__.algebraicToSquare)("f5") }, - { type: "pawn", color: "white", square: (0,__vite_ssr_import_2__.algebraicToSquare)("g5") } -]; -const HORDE_LAYOUT = { - id: "horde", - name: "Horde", - description: "White has a horde of 35 pawns and a king; black has a full army. (Canonical Horde has no white king; this version plays under standard FIDE win conditions.)", - pieces: [ - ...whitePawnsMinusE1, - { type: "king", color: "white", square: E1 }, - ...advancedPawns, - ...(0,__vite_ssr_import_1__.fideSideOf)("black") - ], - suggestedPresets: [], - source: "premade" -}; -__vite_ssr_import_0__.LAYOUT_REGISTRY.register(HORDE_LAYOUT); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQThCQTtBQUNBO0FBQ0E7QUFFQSxNQUFNLFFBQUsseUNBQWtCLElBQUk7QUFLakMsTUFBTSx1QkFBc0Msb0NBQWEsU0FBUztBQUFBLEVBQ2hFO0FBQUEsRUFBRztBQUFBLEVBQUc7QUFBQSxFQUFHO0FBQ1gsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFO0FBRWhDLE1BQU0sZ0JBQWtDO0FBQUEsRUFDdEMsRUFBRSxNQUFNLFFBQVEsT0FBTyxTQUFTLFdBQVEseUNBQWtCLElBQUksRUFBRTtBQUFBLEVBQ2hFLEVBQUUsTUFBTSxRQUFRLE9BQU8sU0FBUyxXQUFRLHlDQUFrQixJQUFJLEVBQUU7QUFBQSxFQUNoRSxFQUFFLE1BQU0sUUFBUSxPQUFPLFNBQVMsV0FBUSx5Q0FBa0IsSUFBSSxFQUFFO0FBQUEsRUFDaEUsRUFBRSxNQUFNLFFBQVEsT0FBTyxTQUFTLFdBQVEseUNBQWtCLElBQUksRUFBRTtBQUNsRTtBQUVPLE1BQU0sZUFBK0I7QUFBQSxFQUMxQyxJQUFJO0FBQUEsRUFDSixNQUFNO0FBQUEsRUFDTixhQUNFO0FBQUEsRUFDRixRQUFRO0FBQUEsSUFDTixHQUFHO0FBQUEsSUFDSCxFQUFFLE1BQU0sUUFBUSxPQUFPLFNBQVMsUUFBUSxHQUFHO0FBQUEsSUFDM0MsR0FBRztBQUFBLElBQ0gsTUFBRyxrQ0FBVyxPQUFPO0FBQUEsRUFDdkI7QUFBQSxFQUNBLGtCQUFrQixDQUFDO0FBQUEsRUFDbkIsUUFBUTtBQUNWO0FBRUEsc0NBQWdCLFNBQVMsWUFBWSIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiaG9yZGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMYXlvdXQ6IEhvcmRlLlxuICpcbiAqICAgLSBXaGl0ZTogcGF3bnMgZmlsbGluZyByYW5rcyAxLTQgKHNxdWFyZXMgMC0zMSksIEVYQ0VQVCBlMSB3aGljaFxuICogICAgIGhvbGRzIHRoZSB3aGl0ZSBraW5nLiBQbHVzIGZvdXIgYWR2YW5jZWQgcGF3bnMgb24gYjUsIGM1LCBmNSxcbiAqICAgICBnNS4gVG90YWw6IDMxIHBhd25zICsgMSBraW5nID0gMzIgcGllY2VzIG9uIHdoaXRlLlxuICogICAtIEJsYWNrOiBzdGFuZGFyZCBGSURFIHNldHVwLlxuICpcbiAqICMjIERldmlhdGlvbiBmcm9tIGNhbm9uaWNhbCBIb3JkZVxuICpcbiAqIFRoZSBjYW5vbmljYWwgbGljaGVzcyBIb3JkZSB2YXJpYW50IGhhcyBOTyB3aGl0ZSBraW5nIGFuZCAzNlxuICogcGF3bnMg4oCUIGJsYWNrIHdpbnMgT05MWSBieSBlbGltaW5hdGluZyBldmVyeSB3aGl0ZSBwYXduLCB3aGl0ZVxuICogd2lucyBieSBjaGVja21hdGluZyBibGFjay4gU3VwcG9ydGluZyBcIm5vIGtpbmcgb24gb25lIHNpZGVcIlxuICogcmVxdWlyZXMgYSBwZXItbGF5b3V0IHZhbGlkYXRvciByZWxheGF0aW9uIHdlIGhhdmVuJ3QgYnVpbHQgeWV0XG4gKiAoY3VycmVudCBtaW5pbXVtLXZpYWJsZSB2YWxpZGF0b3IgcmVxdWlyZXMgZXhhY3RseSBvbmUga2luZyBwZXJcbiAqIGNvbG9yKS5cbiAqXG4gKiBUbyBzaGlwIEhvcmRlIG5vdywgd2UgZ2l2ZSB3aGl0ZSBhIGtpbmcgb24gZTEgKHJlcGxhY2luZyB0aGF0XG4gKiBwYXduKS4gVG90YWwgd2hpdGUgcGllY2VzOiAzMSBwYXducyArIDEga2luZyA9IDMyIOKAlCBzYW1lIGFzXG4gKiBibGFjay4gTm90IGNhbm9uaWNhbCAobGljaGVzcyBoYXMgMzYgd2hpdGUgcGF3bnMsIG5vIGtpbmcpIGJ1dFxuICogcGxheWFibGUsIGFuZCB0aGUgb3ZlcmFsbCBcIndhbGwgb2YgcGF3bnNcIiBmZWVsIGlzIHByZXNlcnZlZC5cbiAqXG4gKiBXaGVuIHRoZSB2YWxpZGF0b3IgbGVhcm5zIHBlci1sYXlvdXQgZXhlbXB0aW9ucyAob3IgdGhlXG4gKiBgY2FwdHVyZS1hbGxgIHByZXNldCBsYW5kcyB3aXRoIDAta2luZyBzdXBwb3J0KSwgdGhlIGNhbm9uaWNhbFxuICoga2luZy1sZXNzIHZlcnNpb24gd2lsbCByZWdpc3RlciB1bmRlciB0aGlzIHNhbWUgaWQgYW5kIHRoZVxuICogb25lLWtpbmcgdmVyc2lvbiB3aWxsIG1vdmUgdG8gYGhvcmRlLWNsYXNzaWNgLlxuICpcbiAqIFJlZmVyZW5jZTogaHR0cHM6Ly9saWNoZXNzLm9yZy92YXJpYW50L2hvcmRlXG4gKi9cbmltcG9ydCB0eXBlIHsgU3RhcnRpbmdMYXlvdXQsIFBpZWNlUGxhY2VtZW50IH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IExBWU9VVF9SRUdJU1RSWSB9IGZyb20gXCIuL3JlZ2lzdHJ5LmpzXCI7XG5pbXBvcnQgeyBmaWRlU2lkZU9mLCBwYXduc09uUmFua3MgfSBmcm9tIFwiLi9faGVscGVycy5qc1wiO1xuaW1wb3J0IHsgYWxnZWJyYWljVG9TcXVhcmUgfSBmcm9tIFwiLi4vY29vcmQuanNcIjtcblxuY29uc3QgRTEgPSBhbGdlYnJhaWNUb1NxdWFyZShcImUxXCIpO1xuXG4vLyBCYXNlIHBhd25zIChyYW5rcyAxLTQpIHdpdGggdGhlIGUxIHBhd24gcmVtb3ZlZCBzbyB0aGUga2luZyBjYW5cbi8vIGxpdmUgdGhlcmUg4oCUIHBsYWNpbmcgdHdvIHBpZWNlcyBvbiB0aGUgc2FtZSBzcXVhcmUgd291bGQgZmFpbCB0aGVcbi8vIHZhbGlkYXRvciB3aXRoIFwiZHVwbGljYXRlIHNxdWFyZVwiIGFuZCBpcyBhIG1vZGVsaW5nIGJ1Zy5cbmNvbnN0IHdoaXRlUGF3bnNNaW51c0UxOiBQaWVjZVBsYWNlbWVudFtdID0gcGF3bnNPblJhbmtzKFwid2hpdGVcIiwgW1xuICAwLCAxLCAyLCAzLFxuXSkuZmlsdGVyKChwKSA9PiBwLnNxdWFyZSAhPT0gRTEpO1xuXG5jb25zdCBhZHZhbmNlZFBhd25zOiBQaWVjZVBsYWNlbWVudFtdID0gW1xuICB7IHR5cGU6IFwicGF3blwiLCBjb2xvcjogXCJ3aGl0ZVwiLCBzcXVhcmU6IGFsZ2VicmFpY1RvU3F1YXJlKFwiYjVcIikgfSxcbiAgeyB0eXBlOiBcInBhd25cIiwgY29sb3I6IFwid2hpdGVcIiwgc3F1YXJlOiBhbGdlYnJhaWNUb1NxdWFyZShcImM1XCIpIH0sXG4gIHsgdHlwZTogXCJwYXduXCIsIGNvbG9yOiBcIndoaXRlXCIsIHNxdWFyZTogYWxnZWJyYWljVG9TcXVhcmUoXCJmNVwiKSB9LFxuICB7IHR5cGU6IFwicGF3blwiLCBjb2xvcjogXCJ3aGl0ZVwiLCBzcXVhcmU6IGFsZ2VicmFpY1RvU3F1YXJlKFwiZzVcIikgfSxcbl07XG5cbmV4cG9ydCBjb25zdCBIT1JERV9MQVlPVVQ6IFN0YXJ0aW5nTGF5b3V0ID0ge1xuICBpZDogXCJob3JkZVwiLFxuICBuYW1lOiBcIkhvcmRlXCIsXG4gIGRlc2NyaXB0aW9uOlxuICAgIFwiV2hpdGUgaGFzIGEgaG9yZGUgb2YgMzUgcGF3bnMgYW5kIGEga2luZzsgYmxhY2sgaGFzIGEgZnVsbCBhcm15LiAoQ2Fub25pY2FsIEhvcmRlIGhhcyBubyB3aGl0ZSBraW5nOyB0aGlzIHZlcnNpb24gcGxheXMgdW5kZXIgc3RhbmRhcmQgRklERSB3aW4gY29uZGl0aW9ucy4pXCIsXG4gIHBpZWNlczogW1xuICAgIC4uLndoaXRlUGF3bnNNaW51c0UxLFxuICAgIHsgdHlwZTogXCJraW5nXCIsIGNvbG9yOiBcIndoaXRlXCIsIHNxdWFyZTogRTEgfSxcbiAgICAuLi5hZHZhbmNlZFBhd25zLFxuICAgIC4uLmZpZGVTaWRlT2YoXCJibGFja1wiKSxcbiAgXSxcbiAgc3VnZ2VzdGVkUHJlc2V0czogW10sXG4gIHNvdXJjZTogXCJwcmVtYWRlXCIsXG59O1xuXG5MQVlPVVRfUkVHSVNUUlkucmVnaXN0ZXIoSE9SREVfTEFZT1VUKTtcbiJdLCJmaWxlIjoiL3NyYy9sYXlvdXRzL2hvcmRlLnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/6623074b7aca1ecaf396d6b3f8a45169103647c9 b/7xOfJqsDU787fe61oSCq1/web/6623074b7aca1ecaf396d6b3f8a45169103647c9 deleted file mode 100644 index e32ffc1..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/6623074b7aca1ecaf396d6b3f8a45169103647c9 +++ /dev/null @@ -1,18 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "getLegalKingMoves", { enumerable: true, configurable: true, get(){ try { return getLegalKingMoves } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/rules/primitives.ts", {"importedNames":["kingCandidates"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/rules/board-queries.ts", {"importedNames":["getPiecePosition","getPieceColor","isAllyAt","isPieceAt"]}); -function getLegalKingMoves(session, pieceId) { - const from = (0,__vite_ssr_import_1__.getPiecePosition)(session, pieceId); - const color = (0,__vite_ssr_import_1__.getPieceColor)(session, pieceId); - if (from === null || color === null) return []; - const moves = []; - for (const to of (0,__vite_ssr_import_0__.kingCandidates)(from)) { - if ((0,__vite_ssr_import_1__.isAllyAt)(session, to, color)) continue; - const isCapture = (0,__vite_ssr_import_1__.isPieceAt)(session, to); - moves.push({ pieceId, from, to, isCapture }); - }; - return moves; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQWNBO0FBRUE7QUFHTyxTQUFTLGtCQUFrQixTQUFrQixTQUFnQztBQUNsRixRQUFNLFVBQU8sd0NBQWlCLFNBQVMsT0FBTztBQUM5QyxRQUFNLFdBQVEscUNBQWMsU0FBUyxPQUFPO0FBQzVDLE1BQUksU0FBUyxRQUFRLFVBQVUsS0FBTSxRQUFPLENBQUM7QUFFN0MsUUFBTSxRQUFxQixDQUFDO0FBQzVCLGFBQVcsU0FBTSxzQ0FBZSxJQUFJLEdBQUc7QUFDckMsV0FBSSxnQ0FBUyxTQUFTLElBQUksS0FBSyxFQUFHO0FBQ2xDLFVBQU0sZUFBWSxpQ0FBVSxTQUFTLEVBQUU7QUFDdkMsVUFBTSxLQUFLLEVBQUUsU0FBUyxNQUFNLElBQUksVUFBVSxDQUFDO0FBQUEsRUFDN0M7QUFDQSxTQUFPO0FBQ1QiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImtpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBLaW5nIG1vdmVtZW50IHJ1bGVzIGZvciBAcGFyYXR5cGUvY2hlc3MuXG4gKlxuICogQmFzaWMga2luZyBtb3ZlczogMSBzcXVhcmUgaW4gYW55IG9mIDggZGlyZWN0aW9ucy5cbiAqIEV4Y2x1ZGVzOlxuICogICAtIENhc3RsaW5nIChQMi4xNSlcbiAqICAgLSBDaGVjay1hd2FyZSByZWplY3Rpb24gLyBraW5nLWluLWNoZWNrIGZpbHRlciAoUDIuMTgpXG4gKlxuICogUnVsZXM6XG4gKiAgIC0gZW1wdHkgdGFyZ2V0IHNxdWFyZSDihpIgbGVnYWwgcXVpZXQgbW92ZVxuICogICAtIGVuZW15IG9uIHRhcmdldCAgICAg4oaSIGxlZ2FsIGNhcHR1cmVcbiAqICAgLSBhbGx5IG9uIHRhcmdldCAgICAgIOKGkiBpbGxlZ2FsXG4gKi9cbmltcG9ydCB0eXBlIHsgU2Vzc2lvbiwgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB7IGtpbmdDYW5kaWRhdGVzIH0gZnJvbSBcIi4vcHJpbWl0aXZlcy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBMZWdhbE1vdmUgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgZ2V0UGllY2VQb3NpdGlvbiwgZ2V0UGllY2VDb2xvciwgaXNBbGx5QXQsIGlzUGllY2VBdCB9IGZyb20gXCIuL2JvYXJkLXF1ZXJpZXMuanNcIjtcblxuLyoqIEdldCBhbGwgbGVnYWwgYmFzaWMga2luZyBtb3ZlcyAoMSBzcXVhcmUsIGFueSBkaXJlY3Rpb24pLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExlZ2FsS2luZ01vdmVzKHNlc3Npb246IFNlc3Npb24sIHBpZWNlSWQ6IEVudGl0eUlkKTogTGVnYWxNb3ZlW10ge1xuICBjb25zdCBmcm9tID0gZ2V0UGllY2VQb3NpdGlvbihzZXNzaW9uLCBwaWVjZUlkKTtcbiAgY29uc3QgY29sb3IgPSBnZXRQaWVjZUNvbG9yKHNlc3Npb24sIHBpZWNlSWQpO1xuICBpZiAoZnJvbSA9PT0gbnVsbCB8fCBjb2xvciA9PT0gbnVsbCkgcmV0dXJuIFtdO1xuXG4gIGNvbnN0IG1vdmVzOiBMZWdhbE1vdmVbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHRvIG9mIGtpbmdDYW5kaWRhdGVzKGZyb20pKSB7XG4gICAgaWYgKGlzQWxseUF0KHNlc3Npb24sIHRvLCBjb2xvcikpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGlzQ2FwdHVyZSA9IGlzUGllY2VBdChzZXNzaW9uLCB0byk7XG4gICAgbW92ZXMucHVzaCh7IHBpZWNlSWQsIGZyb20sIHRvLCBpc0NhcHR1cmUgfSk7XG4gIH1cbiAgcmV0dXJuIG1vdmVzO1xufVxuIl0sImZpbGUiOiIvc3JjL3J1bGVzL2tpbmcudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/678e146b1f33e2b0e8a47c1f43303128a5523ae9 b/7xOfJqsDU787fe61oSCq1/web/678e146b1f33e2b0e8a47c1f43303128a5523ae9 deleted file mode 100644 index 965bd49..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/678e146b1f33e2b0e8a47c1f43303128a5523ae9 +++ /dev/null @@ -1,5 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "default", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_export_default__ } catch {} }}); -const __vite_ssr_export_default__ = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%20width='45'%20height='45'%3e%3cg%20style='fill:%23000000;stroke:%23000000;stroke-width:1.5;%20stroke-linecap:round;stroke-linejoin:round'%3e%3cpath%20d='M%209,26%20C%2017.5,24.5%2030,24.5%2036,26%20L%2038.5,13.5%20L%2031,25%20L%2030.7,10.9%20L%2025.5,24.5%20L%2022.5,10%20L%2019.5,24.5%20L%2014.3,10.9%20L%2014,25%20L%206.5,13.5%20L%209,26%20z'%20style='stroke-linecap:butt;fill:%23000000'%20/%3e%3cpath%20d='m%209,26%20c%200,2%201.5,2%202.5,4%201,1.5%201,1%200.5,3.5%20-1.5,1%20-1,2.5%20-1,2.5%20-1.5,1.5%200,2.5%200,2.5%206.5,1%2016.5,1%2023,0%200,0%201.5,-1%200,-2.5%200,0%200.5,-1.5%20-1,-2.5%20-0.5,-2.5%20-0.5,-2%200.5,-3.5%201,-2%202.5,-2%202.5,-4%20-8.5,-1.5%20-18.5,-1.5%20-27,0%20z'%20/%3e%3cpath%20d='M%2011.5,30%20C%2015,29%2030,29%2033.5,30'%20/%3e%3cpath%20d='m%2012,33.5%20c%206,-1%2015,-1%2021,0'%20/%3e%3ccircle%20cx='6'%20cy='12'%20r='2'%20/%3e%3ccircle%20cx='14'%20cy='9'%20r='2'%20/%3e%3ccircle%20cx='22.5'%20cy='8'%20r='2'%20/%3e%3ccircle%20cx='31'%20cy='9'%20r='2'%20/%3e%3ccircle%20cx='39'%20cy='12'%20r='2'%20/%3e%3cpath%20d='M%2011,38.5%20A%2035,35%201%200%200%2034,38.5'%20style='fill:none;%20stroke:%23000000;stroke-linecap:butt;'%20/%3e%3cg%20style='fill:none;%20stroke:%23ffffff;'%3e%3cpath%20d='M%2011,29%20A%2035,35%201%200%201%2034,29'%20/%3e%3cpath%20d='M%2012.5,31.5%20L%2032.5,31.5'%20/%3e%3cpath%20d='M%2011.5,34.5%20A%2035,35%201%200%200%2033.5,34.5'%20/%3e%3cpath%20d='M%2010.5,37.5%20A%2035,35%201%200%200%2034.5,37.5'%20/%3e%3c/g%3e%3c/g%3e%3c/svg%3e" - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJsYWNrLXF1ZWVuLnN2ZyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2M/eG1sJTIwdmVyc2lvbj0nMS4wJyUyMGVuY29kaW5nPSd1dGYtOCclMjBzdGFuZGFsb25lPSdubyc/JTNlJTNjIURPQ1RZUEUlMjBzdmclMjBQVUJMSUMlMjAnLS8vVzNDLy9EVEQlMjBTVkclMjAxLjEvL0VOJyUyMCdodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQnJTNlJTNjc3ZnJTIweG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUyMHZlcnNpb249JzEuMSclMjB3aWR0aD0nNDUnJTIwaGVpZ2h0PSc0NSclM2UlM2NnJTIwc3R5bGU9J2ZpbGw6JTIzMDAwMDAwO3N0cm9rZTolMjMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuNTslMjBzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQnJTNlJTNjcGF0aCUyMGQ9J00lMjA5LDI2JTIwQyUyMDE3LjUsMjQuNSUyMDMwLDI0LjUlMjAzNiwyNiUyMEwlMjAzOC41LDEzLjUlMjBMJTIwMzEsMjUlMjBMJTIwMzAuNywxMC45JTIwTCUyMDI1LjUsMjQuNSUyMEwlMjAyMi41LDEwJTIwTCUyMDE5LjUsMjQuNSUyMEwlMjAxNC4zLDEwLjklMjBMJTIwMTQsMjUlMjBMJTIwNi41LDEzLjUlMjBMJTIwOSwyNiUyMHonJTIwc3R5bGU9J3N0cm9rZS1saW5lY2FwOmJ1dHQ7ZmlsbDolMjMwMDAwMDAnJTIwLyUzZSUzY3BhdGglMjBkPSdtJTIwOSwyNiUyMGMlMjAwLDIlMjAxLjUsMiUyMDIuNSw0JTIwMSwxLjUlMjAxLDElMjAwLjUsMy41JTIwLTEuNSwxJTIwLTEsMi41JTIwLTEsMi41JTIwLTEuNSwxLjUlMjAwLDIuNSUyMDAsMi41JTIwNi41LDElMjAxNi41LDElMjAyMywwJTIwMCwwJTIwMS41LC0xJTIwMCwtMi41JTIwMCwwJTIwMC41LC0xLjUlMjAtMSwtMi41JTIwLTAuNSwtMi41JTIwLTAuNSwtMiUyMDAuNSwtMy41JTIwMSwtMiUyMDIuNSwtMiUyMDIuNSwtNCUyMC04LjUsLTEuNSUyMC0xOC41LC0xLjUlMjAtMjcsMCUyMHonJTIwLyUzZSUzY3BhdGglMjBkPSdNJTIwMTEuNSwzMCUyMEMlMjAxNSwyOSUyMDMwLDI5JTIwMzMuNSwzMCclMjAvJTNlJTNjcGF0aCUyMGQ9J20lMjAxMiwzMy41JTIwYyUyMDYsLTElMjAxNSwtMSUyMDIxLDAnJTIwLyUzZSUzY2NpcmNsZSUyMGN4PSc2JyUyMGN5PScxMiclMjByPScyJyUyMC8lM2UlM2NjaXJjbGUlMjBjeD0nMTQnJTIwY3k9JzknJTIwcj0nMiclMjAvJTNlJTNjY2lyY2xlJTIwY3g9JzIyLjUnJTIwY3k9JzgnJTIwcj0nMiclMjAvJTNlJTNjY2lyY2xlJTIwY3g9JzMxJyUyMGN5PSc5JyUyMHI9JzInJTIwLyUzZSUzY2NpcmNsZSUyMGN4PSczOSclMjBjeT0nMTInJTIwcj0nMiclMjAvJTNlJTNjcGF0aCUyMGQ9J00lMjAxMSwzOC41JTIwQSUyMDM1LDM1JTIwMSUyMDAlMjAwJTIwMzQsMzguNSclMjBzdHlsZT0nZmlsbDpub25lOyUyMHN0cm9rZTolMjMwMDAwMDA7c3Ryb2tlLWxpbmVjYXA6YnV0dDsnJTIwLyUzZSUzY2clMjBzdHlsZT0nZmlsbDpub25lOyUyMHN0cm9rZTolMjNmZmZmZmY7JyUzZSUzY3BhdGglMjBkPSdNJTIwMTEsMjklMjBBJTIwMzUsMzUlMjAxJTIwMCUyMDElMjAzNCwyOSclMjAvJTNlJTNjcGF0aCUyMGQ9J00lMjAxMi41LDMxLjUlMjBMJTIwMzIuNSwzMS41JyUyMC8lM2UlM2NwYXRoJTIwZD0nTSUyMDExLjUsMzQuNSUyMEElMjAzNSwzNSUyMDElMjAwJTIwMCUyMDMzLjUsMzQuNSclMjAvJTNlJTNjcGF0aCUyMGQ9J00lMjAxMC41LDM3LjUlMjBBJTIwMzUsMzUlMjAxJTIwMCUyMDAlMjAzNC41LDM3LjUnJTIwLyUzZSUzYy9nJTNlJTNjL2clM2UlM2Mvc3ZnJTNlXCIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLG1DQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/6af8c01d8a0b854ecbbba3e996e3f8defaf5dab4 b/7xOfJqsDU787fe61oSCq1/web/6af8c01d8a0b854ecbbba3e996e3f8defaf5dab4 deleted file mode 100644 index 6d1bad9..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/6af8c01d8a0b854ecbbba3e996e3f8defaf5dab4 +++ /dev/null @@ -1,70 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/modifiers/registry.ts", {"importedNames":["MODIFIER_REGISTRY"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/modifiers/descriptors/damage-resistance.ts"); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/modifiers/descriptors/damage-resistance.ts", {"importedNames":["DAMAGE_RESISTANCE_DESCRIPTOR","applyResistance","stackResistances"]}); - - - - -(0,__vite_ssr_import_0__.describe)("damage-resistance descriptor — registry", () => { - (0,__vite_ssr_import_0__.it)("registers in MODIFIER_REGISTRY under key 'damage-resistance'", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.MODIFIER_REGISTRY.has("damage-resistance")).toBe(true); - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.MODIFIER_REGISTRY.get("damage-resistance")).toBe((0,__vite_ssr_import_4__.DAMAGE_RESISTANCE_DESCRIPTOR)); - }); -}); -(0,__vite_ssr_import_0__.describe)("damage-resistance descriptor — apply()", () => { - (0,__vite_ssr_import_0__.it)("seeds DamageResistance fact on piece entity in session", () => { - const session = new __vite_ssr_import_1__.Session(); - const pieceId = session.nextId(); - session.insert(pieceId, "PieceType", "pawn"); - __vite_ssr_import_4__.DAMAGE_RESISTANCE_DESCRIPTOR.apply(session, pieceId, 0.5); - (0,__vite_ssr_import_0__.expect)(session.contains(pieceId, "DamageResistance")).toBe(true); - (0,__vite_ssr_import_0__.expect)(session.get(pieceId, "DamageResistance")).toBe(0.5); - }); -}); -(0,__vite_ssr_import_0__.describe)("damage-resistance descriptor — describe()", () => { - (0,__vite_ssr_import_0__.it)("formats 0.5 as '50% damage resistance'", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_4__.DAMAGE_RESISTANCE_DESCRIPTOR.describe(0.5)).toBe("50% damage resistance"); - }); - (0,__vite_ssr_import_0__.it)("formats 0 as '0% damage resistance'", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_4__.DAMAGE_RESISTANCE_DESCRIPTOR.describe(0)).toBe("0% damage resistance"); - }); - (0,__vite_ssr_import_0__.it)("formats 1 as '100% damage resistance'", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_4__.DAMAGE_RESISTANCE_DESCRIPTOR.describe(1)).toBe("100% damage resistance"); - }); -}); -(0,__vite_ssr_import_0__.describe)("applyResistance()", () => { - (0,__vite_ssr_import_0__.it)("halves damage at 0.5 resistance", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_4__.applyResistance)(4, 0.5)).toBe(2); - }); - (0,__vite_ssr_import_0__.it)("passes full damage through at 0 resistance", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_4__.applyResistance)(4, 0)).toBe(4); - }); - (0,__vite_ssr_import_0__.it)("reduces damage to 0 at 1 (full immunity)", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_4__.applyResistance)(4, 1)).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("clamps negative results to 0", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_4__.applyResistance)(4, 1.5)).toBe(0); - }); -}); -(0,__vite_ssr_import_0__.describe)("stackResistances()", () => { - (0,__vite_ssr_import_0__.it)("returns 0 for an empty array", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_4__.stackResistances)([])).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("stacks two 0.5 resistances multiplicatively to 0.75", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_4__.stackResistances)([0.5, 0.5])).toBe(0.75); - }); - (0,__vite_ssr_import_0__.it)("stacks three 0.5 resistances to 0.875", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_4__.stackResistances)([0.5, 0.5, 0.5])).toBe(0.875); - }); - (0,__vite_ssr_import_0__.it)("returns 0 for a single 0 resistance", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_4__.stackResistances)([0])).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("returns 1 (clamped) for a single full immunity", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_4__.stackResistances)([1])).toBe(1); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7R0FNQSxnQ0FBUywyQ0FBMkMsTUFBTTtBQUN4RCwrQkFBRyxnRUFBZ0UsTUFBTTtBQUN2RSxxQ0FBTyx3Q0FBa0IsSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLEtBQUssSUFBSTtBQUM1RCxxQ0FBTyx3Q0FBa0IsSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLFFBQUssbURBQTRCO0FBQUEsRUFDdEYsQ0FBQztBQUNILENBQUM7R0FFRCxnQ0FBUywwQ0FBMEMsTUFBTTtBQUN2RCwrQkFBRywwREFBMEQsTUFBTTtBQUNqRSxVQUFNLFVBQVUsSUFBSSw4QkFBUTtBQUM1QixVQUFNLFVBQVUsUUFBUSxPQUFPO0FBQy9CLFlBQVEsT0FBTyxTQUFTLGFBQWEsTUFBTTtBQUUzQyx1REFBNkIsTUFBTSxTQUFTLFNBQVMsR0FBRztBQUV4RCxxQ0FBTyxRQUFRLFNBQVMsU0FBUyxrQkFBa0IsQ0FBQyxFQUFFLEtBQUssSUFBSTtBQUMvRCxxQ0FBTyxRQUFRLElBQUksU0FBUyxrQkFBa0IsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUFBLEVBQzNELENBQUM7QUFDSCxDQUFDO0dBRUQsZ0NBQVMsNkNBQTZDLE1BQU07QUFDMUQsK0JBQUcsMENBQTBDLE1BQU07QUFDakQscUNBQU8sbURBQTZCLFNBQVMsR0FBRyxDQUFDLEVBQUUsS0FBSyx1QkFBdUI7QUFBQSxFQUNqRixDQUFDO0FBRUQsK0JBQUcsdUNBQXVDLE1BQU07QUFDOUMscUNBQU8sbURBQTZCLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxzQkFBc0I7QUFBQSxFQUM5RSxDQUFDO0FBRUQsK0JBQUcseUNBQXlDLE1BQU07QUFDaEQscUNBQU8sbURBQTZCLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyx3QkFBd0I7QUFBQSxFQUNoRixDQUFDO0FBQ0gsQ0FBQztHQUVELGdDQUFTLHFCQUFxQixNQUFNO0FBQ2xDLCtCQUFHLG1DQUFtQyxNQUFNO0FBQzFDLHdDQUFPLHVDQUFnQixHQUFHLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQztBQUFBLEVBQ3hDLENBQUM7QUFFRCwrQkFBRyw4Q0FBOEMsTUFBTTtBQUNyRCx3Q0FBTyx1Q0FBZ0IsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7QUFBQSxFQUN0QyxDQUFDO0FBRUQsK0JBQUcsNENBQTRDLE1BQU07QUFDbkQsd0NBQU8sdUNBQWdCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQUEsRUFDdEMsQ0FBQztBQUVELCtCQUFHLGdDQUFnQyxNQUFNO0FBRXZDLHdDQUFPLHVDQUFnQixHQUFHLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQztBQUFBLEVBQ3hDLENBQUM7QUFDSCxDQUFDO0dBRUQsZ0NBQVMsc0JBQXNCLE1BQU07QUFDbkMsK0JBQUcsZ0NBQWdDLE1BQU07QUFDdkMsd0NBQU8sd0NBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQUEsRUFDckMsQ0FBQztBQUVELCtCQUFHLHVEQUF1RCxNQUFNO0FBRTlELHdDQUFPLHdDQUFpQixDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUk7QUFBQSxFQUNoRCxDQUFDO0FBRUQsK0JBQUcseUNBQXlDLE1BQU07QUFFaEQsd0NBQU8sd0NBQWlCLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxLQUFLO0FBQUEsRUFDdEQsQ0FBQztBQUVELCtCQUFHLHVDQUF1QyxNQUFNO0FBQzlDLHdDQUFPLHdDQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQUEsRUFDdEMsQ0FBQztBQUVELCtCQUFHLGtEQUFrRCxNQUFNO0FBQ3pELHdDQUFPLHdDQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQUEsRUFDdEMsQ0FBQztBQUNILENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImRhbWFnZS1yZXNpc3RhbmNlLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgeyBTZXNzaW9uIH0gZnJvbSBcIkBwYXJhdHlwZS9yZXRlXCI7XG5pbXBvcnQgeyBNT0RJRklFUl9SRUdJU1RSWSB9IGZyb20gXCIuLi9yZWdpc3RyeS5qc1wiO1xuaW1wb3J0IFwiLi9kYW1hZ2UtcmVzaXN0YW5jZS5qc1wiO1xuaW1wb3J0IHtcbiAgREFNQUdFX1JFU0lTVEFOQ0VfREVTQ1JJUFRPUixcbiAgYXBwbHlSZXNpc3RhbmNlLFxuICBzdGFja1Jlc2lzdGFuY2VzLFxufSBmcm9tIFwiLi9kYW1hZ2UtcmVzaXN0YW5jZS5qc1wiO1xuXG5kZXNjcmliZShcImRhbWFnZS1yZXNpc3RhbmNlIGRlc2NyaXB0b3Ig4oCUIHJlZ2lzdHJ5XCIsICgpID0+IHtcbiAgaXQoXCJyZWdpc3RlcnMgaW4gTU9ESUZJRVJfUkVHSVNUUlkgdW5kZXIga2V5ICdkYW1hZ2UtcmVzaXN0YW5jZSdcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChNT0RJRklFUl9SRUdJU1RSWS5oYXMoXCJkYW1hZ2UtcmVzaXN0YW5jZVwiKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QoTU9ESUZJRVJfUkVHSVNUUlkuZ2V0KFwiZGFtYWdlLXJlc2lzdGFuY2VcIikpLnRvQmUoREFNQUdFX1JFU0lTVEFOQ0VfREVTQ1JJUFRPUik7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiZGFtYWdlLXJlc2lzdGFuY2UgZGVzY3JpcHRvciDigJQgYXBwbHkoKVwiLCAoKSA9PiB7XG4gIGl0KFwic2VlZHMgRGFtYWdlUmVzaXN0YW5jZSBmYWN0IG9uIHBpZWNlIGVudGl0eSBpbiBzZXNzaW9uXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oKTtcbiAgICBjb25zdCBwaWVjZUlkID0gc2Vzc2lvbi5uZXh0SWQoKTtcbiAgICBzZXNzaW9uLmluc2VydChwaWVjZUlkLCBcIlBpZWNlVHlwZVwiLCBcInBhd25cIik7XG5cbiAgICBEQU1BR0VfUkVTSVNUQU5DRV9ERVNDUklQVE9SLmFwcGx5KHNlc3Npb24sIHBpZWNlSWQsIDAuNSk7XG5cbiAgICBleHBlY3Qoc2Vzc2lvbi5jb250YWlucyhwaWVjZUlkLCBcIkRhbWFnZVJlc2lzdGFuY2VcIikpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KHNlc3Npb24uZ2V0KHBpZWNlSWQsIFwiRGFtYWdlUmVzaXN0YW5jZVwiKSkudG9CZSgwLjUpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImRhbWFnZS1yZXNpc3RhbmNlIGRlc2NyaXB0b3Ig4oCUIGRlc2NyaWJlKClcIiwgKCkgPT4ge1xuICBpdChcImZvcm1hdHMgMC41IGFzICc1MCUgZGFtYWdlIHJlc2lzdGFuY2UnXCIsICgpID0+IHtcbiAgICBleHBlY3QoREFNQUdFX1JFU0lTVEFOQ0VfREVTQ1JJUFRPUi5kZXNjcmliZSgwLjUpKS50b0JlKFwiNTAlIGRhbWFnZSByZXNpc3RhbmNlXCIpO1xuICB9KTtcblxuICBpdChcImZvcm1hdHMgMCBhcyAnMCUgZGFtYWdlIHJlc2lzdGFuY2UnXCIsICgpID0+IHtcbiAgICBleHBlY3QoREFNQUdFX1JFU0lTVEFOQ0VfREVTQ1JJUFRPUi5kZXNjcmliZSgwKSkudG9CZShcIjAlIGRhbWFnZSByZXNpc3RhbmNlXCIpO1xuICB9KTtcblxuICBpdChcImZvcm1hdHMgMSBhcyAnMTAwJSBkYW1hZ2UgcmVzaXN0YW5jZSdcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChEQU1BR0VfUkVTSVNUQU5DRV9ERVNDUklQVE9SLmRlc2NyaWJlKDEpKS50b0JlKFwiMTAwJSBkYW1hZ2UgcmVzaXN0YW5jZVwiKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJhcHBseVJlc2lzdGFuY2UoKVwiLCAoKSA9PiB7XG4gIGl0KFwiaGFsdmVzIGRhbWFnZSBhdCAwLjUgcmVzaXN0YW5jZVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KGFwcGx5UmVzaXN0YW5jZSg0LCAwLjUpKS50b0JlKDIpO1xuICB9KTtcblxuICBpdChcInBhc3NlcyBmdWxsIGRhbWFnZSB0aHJvdWdoIGF0IDAgcmVzaXN0YW5jZVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KGFwcGx5UmVzaXN0YW5jZSg0LCAwKSkudG9CZSg0KTtcbiAgfSk7XG5cbiAgaXQoXCJyZWR1Y2VzIGRhbWFnZSB0byAwIGF0IDEgKGZ1bGwgaW1tdW5pdHkpXCIsICgpID0+IHtcbiAgICBleHBlY3QoYXBwbHlSZXNpc3RhbmNlKDQsIDEpKS50b0JlKDApO1xuICB9KTtcblxuICBpdChcImNsYW1wcyBuZWdhdGl2ZSByZXN1bHRzIHRvIDBcIiwgKCkgPT4ge1xuICAgIC8vIFJlc2lzdGFuY2UgPiAxIGlzIHNjaGVtYS1pbnZhbGlkLCBidXQgYXBwbHlSZXNpc3RhbmNlIGlzIGRlZmVuc2l2ZVxuICAgIGV4cGVjdChhcHBseVJlc2lzdGFuY2UoNCwgMS41KSkudG9CZSgwKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJzdGFja1Jlc2lzdGFuY2VzKClcIiwgKCkgPT4ge1xuICBpdChcInJldHVybnMgMCBmb3IgYW4gZW1wdHkgYXJyYXlcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChzdGFja1Jlc2lzdGFuY2VzKFtdKSkudG9CZSgwKTtcbiAgfSk7XG5cbiAgaXQoXCJzdGFja3MgdHdvIDAuNSByZXNpc3RhbmNlcyBtdWx0aXBsaWNhdGl2ZWx5IHRvIDAuNzVcIiwgKCkgPT4ge1xuICAgIC8vIDEgLSAoMC41ICogMC41KSA9IDAuNzVcbiAgICBleHBlY3Qoc3RhY2tSZXNpc3RhbmNlcyhbMC41LCAwLjVdKSkudG9CZSgwLjc1KTtcbiAgfSk7XG5cbiAgaXQoXCJzdGFja3MgdGhyZWUgMC41IHJlc2lzdGFuY2VzIHRvIDAuODc1XCIsICgpID0+IHtcbiAgICAvLyAxIC0gKDAuNSAqIDAuNSAqIDAuNSkgPSAwLjg3NVxuICAgIGV4cGVjdChzdGFja1Jlc2lzdGFuY2VzKFswLjUsIDAuNSwgMC41XSkpLnRvQmUoMC44NzUpO1xuICB9KTtcblxuICBpdChcInJldHVybnMgMCBmb3IgYSBzaW5nbGUgMCByZXNpc3RhbmNlXCIsICgpID0+IHtcbiAgICBleHBlY3Qoc3RhY2tSZXNpc3RhbmNlcyhbMF0pKS50b0JlKDApO1xuICB9KTtcblxuICBpdChcInJldHVybnMgMSAoY2xhbXBlZCkgZm9yIGEgc2luZ2xlIGZ1bGwgaW1tdW5pdHlcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChzdGFja1Jlc2lzdGFuY2VzKFsxXSkpLnRvQmUoMSk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvY2hlc3Mvc3JjL21vZGlmaWVycy9kZXNjcmlwdG9ycy9kYW1hZ2UtcmVzaXN0YW5jZS50ZXN0LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/6b65ade2c2953561fe0150f7c1abebc0c0c5c0db b/7xOfJqsDU787fe61oSCq1/web/6b65ade2c2953561fe0150f7c1abebc0c0c5c0db deleted file mode 100644 index b323d61..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/6b65ade2c2953561fe0150f7c1abebc0c0c5c0db +++ /dev/null @@ -1,49 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/modifiers/registry.ts", {"importedNames":["MODIFIER_REGISTRY"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/modifiers/descriptors/hp-bonus.ts"); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/modifiers/descriptors/hp-bonus.ts", {"importedNames":["HP_BONUS_DESCRIPTOR"]}); -(0,__vite_ssr_import_0__.describe)("hp-bonus descriptor — registry", () => { - (0,__vite_ssr_import_0__.it)("registers in MODIFIER_REGISTRY under key 'hp-bonus'", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.MODIFIER_REGISTRY.has("hp-bonus")).toBe(true); - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.MODIFIER_REGISTRY.get("hp-bonus")).toBe((0,__vite_ssr_import_4__.HP_BONUS_DESCRIPTOR)); - }); -}); -(0,__vite_ssr_import_0__.describe)("hp-bonus descriptor — describe()", () => { - (0,__vite_ssr_import_0__.it)("formats positive values with a leading '+'", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_4__.HP_BONUS_DESCRIPTOR.describe(3)).toBe("HP +3"); - }); - (0,__vite_ssr_import_0__.it)("formats negative values without an extra sign", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_4__.HP_BONUS_DESCRIPTOR.describe(-1)).toBe("HP -1"); - }); - (0,__vite_ssr_import_0__.it)("formats zero as '+'", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_4__.HP_BONUS_DESCRIPTOR.describe(0)).toBe("HP +0"); - }); -}); -(0,__vite_ssr_import_0__.describe)("hp-bonus descriptor — apply()", () => { - (0,__vite_ssr_import_0__.it)("seeds HpBonus fact on piece entity in session", () => { - const session = new __vite_ssr_import_1__.Session(); - const pieceId = session.nextId(); - session.insert(pieceId, "PieceType", "pawn"); - __vite_ssr_import_4__.HP_BONUS_DESCRIPTOR.apply(session, pieceId, 3); - (0,__vite_ssr_import_0__.expect)(session.contains(pieceId, "HpBonus")).toBe(true); - (0,__vite_ssr_import_0__.expect)(session.get(pieceId, "HpBonus")).toBe(3); - }); -}); -(0,__vite_ssr_import_0__.describe)("hp-bonus descriptor — valueSchema", () => { - const schema = __vite_ssr_import_4__.HP_BONUS_DESCRIPTOR.valueSchema; - (0,__vite_ssr_import_0__.it)("accepts values within range [-10, 10]", () => { - (0,__vite_ssr_import_0__.expect)(() => schema.parse(10)).not.toThrow(); - (0,__vite_ssr_import_0__.expect)(() => schema.parse(-10)).not.toThrow(); - (0,__vite_ssr_import_0__.expect)(() => schema.parse(0)).not.toThrow(); - }); - (0,__vite_ssr_import_0__.it)("rejects values above 10", () => { - (0,__vite_ssr_import_0__.expect)(() => schema.parse(11)).toThrow(); - }); - (0,__vite_ssr_import_0__.it)("rejects non-integer values", () => { - (0,__vite_ssr_import_0__.expect)(() => schema.parse(1.5)).toThrow(); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtHQUVBLGdDQUFTLGtDQUFrQyxNQUFNO0FBQy9DLCtCQUFHLHVEQUF1RCxNQUFNO0FBQzlELHFDQUFPLHdDQUFrQixJQUFJLFVBQVUsQ0FBQyxFQUFFLEtBQUssSUFBSTtBQUNuRCxxQ0FBTyx3Q0FBa0IsSUFBSSxVQUFVLENBQUMsRUFBRSxRQUFLLDBDQUFtQjtBQUFBLEVBQ3BFLENBQUM7QUFDSCxDQUFDO0dBRUQsZ0NBQVMsb0NBQW9DLE1BQU07QUFDakQsK0JBQUcsOENBQThDLE1BQU07QUFDckQscUNBQU8sMENBQW9CLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPO0FBQUEsRUFDdEQsQ0FBQztBQUVELCtCQUFHLGlEQUFpRCxNQUFNO0FBQ3hELHFDQUFPLDBDQUFvQixTQUFTLEVBQUUsQ0FBQyxFQUFFLEtBQUssT0FBTztBQUFBLEVBQ3ZELENBQUM7QUFFRCwrQkFBRyx1QkFBdUIsTUFBTTtBQUM5QixxQ0FBTywwQ0FBb0IsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU87QUFBQSxFQUN0RCxDQUFDO0FBQ0gsQ0FBQztHQUVELGdDQUFTLGlDQUFpQyxNQUFNO0FBQzlDLCtCQUFHLGlEQUFpRCxNQUFNO0FBQ3hELFVBQU0sVUFBVSxJQUFJLDhCQUFRO0FBQzVCLFVBQU0sVUFBVSxRQUFRLE9BQU87QUFFL0IsWUFBUSxPQUFPLFNBQVMsYUFBYSxNQUFNO0FBRTNDLDhDQUFvQixNQUFNLFNBQVMsU0FBUyxDQUFDO0FBRTdDLHFDQUFPLFFBQVEsU0FBUyxTQUFTLFNBQVMsQ0FBQyxFQUFFLEtBQUssSUFBSTtBQUN0RCxxQ0FBTyxRQUFRLElBQUksU0FBUyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUM7QUFBQSxFQUNoRCxDQUFDO0FBQ0gsQ0FBQztHQUVELGdDQUFTLHFDQUFxQyxNQUFNO0FBQ2xELFFBQU0sU0FBUywwQ0FBb0I7QUFFbkMsK0JBQUcseUNBQXlDLE1BQU07QUFDaEQscUNBQU8sTUFBTSxPQUFPLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxRQUFRO0FBQzNDLHFDQUFPLE1BQU0sT0FBTyxNQUFNLEdBQUcsQ0FBQyxFQUFFLElBQUksUUFBUTtBQUM1QyxxQ0FBTyxNQUFNLE9BQU8sTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLFFBQVE7QUFBQSxFQUM1QyxDQUFDO0FBRUQsK0JBQUcsMkJBQTJCLE1BQU07QUFDbEMscUNBQU8sTUFBTSxPQUFPLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBUTtBQUFBLEVBQ3pDLENBQUM7QUFFRCwrQkFBRyw4QkFBOEIsTUFBTTtBQUNyQyxxQ0FBTyxNQUFNLE9BQU8sTUFBTSxHQUFHLENBQUMsRUFBRSxRQUFRO0FBQUEsRUFDMUMsQ0FBQztBQUNILENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImhwLWJvbnVzLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgeyBTZXNzaW9uIH0gZnJvbSBcIkBwYXJhdHlwZS9yZXRlXCI7XG5pbXBvcnQgeyBNT0RJRklFUl9SRUdJU1RSWSB9IGZyb20gXCIuLi9yZWdpc3RyeS5qc1wiO1xuaW1wb3J0IFwiLi9ocC1ib251cy5qc1wiO1xuaW1wb3J0IHsgSFBfQk9OVVNfREVTQ1JJUFRPUiB9IGZyb20gXCIuL2hwLWJvbnVzLmpzXCI7XG5cbmRlc2NyaWJlKFwiaHAtYm9udXMgZGVzY3JpcHRvciDigJQgcmVnaXN0cnlcIiwgKCkgPT4ge1xuICBpdChcInJlZ2lzdGVycyBpbiBNT0RJRklFUl9SRUdJU1RSWSB1bmRlciBrZXkgJ2hwLWJvbnVzJ1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KE1PRElGSUVSX1JFR0lTVFJZLmhhcyhcImhwLWJvbnVzXCIpKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChNT0RJRklFUl9SRUdJU1RSWS5nZXQoXCJocC1ib251c1wiKSkudG9CZShIUF9CT05VU19ERVNDUklQVE9SKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJocC1ib251cyBkZXNjcmlwdG9yIOKAlCBkZXNjcmliZSgpXCIsICgpID0+IHtcbiAgaXQoXCJmb3JtYXRzIHBvc2l0aXZlIHZhbHVlcyB3aXRoIGEgbGVhZGluZyAnKydcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChIUF9CT05VU19ERVNDUklQVE9SLmRlc2NyaWJlKDMpKS50b0JlKFwiSFAgKzNcIik7XG4gIH0pO1xuXG4gIGl0KFwiZm9ybWF0cyBuZWdhdGl2ZSB2YWx1ZXMgd2l0aG91dCBhbiBleHRyYSBzaWduXCIsICgpID0+IHtcbiAgICBleHBlY3QoSFBfQk9OVVNfREVTQ1JJUFRPUi5kZXNjcmliZSgtMSkpLnRvQmUoXCJIUCAtMVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJmb3JtYXRzIHplcm8gYXMgJysnXCIsICgpID0+IHtcbiAgICBleHBlY3QoSFBfQk9OVVNfREVTQ1JJUFRPUi5kZXNjcmliZSgwKSkudG9CZShcIkhQICswXCIpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImhwLWJvbnVzIGRlc2NyaXB0b3Ig4oCUIGFwcGx5KClcIiwgKCkgPT4ge1xuICBpdChcInNlZWRzIEhwQm9udXMgZmFjdCBvbiBwaWVjZSBlbnRpdHkgaW4gc2Vzc2lvblwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKCk7XG4gICAgY29uc3QgcGllY2VJZCA9IHNlc3Npb24ubmV4dElkKCk7XG4gICAgLy8gU2VlZCBhIFBpZWNlVHlwZSBmYWN0IHNvIGl0J3MgYSBcInJlYWxcIiBwaWVjZSBlbnRpdHkuXG4gICAgc2Vzc2lvbi5pbnNlcnQocGllY2VJZCwgXCJQaWVjZVR5cGVcIiwgXCJwYXduXCIpO1xuXG4gICAgSFBfQk9OVVNfREVTQ1JJUFRPUi5hcHBseShzZXNzaW9uLCBwaWVjZUlkLCAzKTtcblxuICAgIGV4cGVjdChzZXNzaW9uLmNvbnRhaW5zKHBpZWNlSWQsIFwiSHBCb251c1wiKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3Qoc2Vzc2lvbi5nZXQocGllY2VJZCwgXCJIcEJvbnVzXCIpKS50b0JlKDMpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImhwLWJvbnVzIGRlc2NyaXB0b3Ig4oCUIHZhbHVlU2NoZW1hXCIsICgpID0+IHtcbiAgY29uc3Qgc2NoZW1hID0gSFBfQk9OVVNfREVTQ1JJUFRPUi52YWx1ZVNjaGVtYTtcblxuICBpdChcImFjY2VwdHMgdmFsdWVzIHdpdGhpbiByYW5nZSBbLTEwLCAxMF1cIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBzY2hlbWEucGFyc2UoMTApKS5ub3QudG9UaHJvdygpO1xuICAgIGV4cGVjdCgoKSA9PiBzY2hlbWEucGFyc2UoLTEwKSkubm90LnRvVGhyb3coKTtcbiAgICBleHBlY3QoKCkgPT4gc2NoZW1hLnBhcnNlKDApKS5ub3QudG9UaHJvdygpO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgdmFsdWVzIGFib3ZlIDEwXCIsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gc2NoZW1hLnBhcnNlKDExKSkudG9UaHJvdygpO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgbm9uLWludGVnZXIgdmFsdWVzXCIsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gc2NoZW1hLnBhcnNlKDEuNSkpLnRvVGhyb3coKTtcbiAgfSk7XG59KTtcbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9jaGVzcy9zcmMvbW9kaWZpZXJzL2Rlc2NyaXB0b3JzL2hwLWJvbnVzLnRlc3QudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/6d0dbbce4a5bfc3d91ea3cda6ae1026ae5f19182 b/7xOfJqsDU787fe61oSCq1/web/6d0dbbce4a5bfc3d91ea3cda6ae1026ae5f19182 deleted file mode 100644 index 3c07541..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/6d0dbbce4a5bfc3d91ea3cda6ae1026ae5f19182 +++ /dev/null @@ -1,21 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "PRESET_REGISTRY", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_16__.PRESET_REGISTRY } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/presets/core-piece-types.ts"); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/presets/pawns-move-backward.ts"); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/presets/double-pawn-sprint.ts"); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/presets/pawn-diagonal-no-capture.ts"); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/presets/knights-leap-twice.ts"); -const __vite_ssr_import_5__ = await __vite_ssr_import__("/src/presets/bishops-ignore-color.ts"); -const __vite_ssr_import_6__ = await __vite_ssr_import__("/src/presets/rook-warp.ts"); -const __vite_ssr_import_7__ = await __vite_ssr_import__("/src/presets/wrap-board.ts"); -const __vite_ssr_import_8__ = await __vite_ssr_import__("/src/presets/queen-splits.ts"); -const __vite_ssr_import_9__ = await __vite_ssr_import__("/src/presets/king-heals.ts"); -const __vite_ssr_import_10__ = await __vite_ssr_import__("/src/presets/explosive-rook.ts"); -const __vite_ssr_import_11__ = await __vite_ssr_import__("/src/presets/capture-to-win.ts"); -const __vite_ssr_import_12__ = await __vite_ssr_import__("/src/presets/last-piece-standing.ts"); -const __vite_ssr_import_13__ = await __vite_ssr_import__("/src/presets/piece-hp.ts"); -const __vite_ssr_import_14__ = await __vite_ssr_import__("/src/presets/knight-immunity.ts"); -const __vite_ssr_import_15__ = await __vite_ssr_import__("/src/presets/poisoned-squares.ts"); -const __vite_ssr_import_16__ = await __vite_ssr_import__("/src/presets/registry.ts", {"importedNames":["PRESET_REGISTRY"]}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQWFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHJlc2V0IHJ1bGUgYmFycmVsICsgcmVnaXN0cmF0aW9uIHNpZGUtZWZmZWN0cyAoUDMuNCspLlxuICpcbiAqIEltcG9ydGluZyB0aGlzIG1vZHVsZSBndWFyYW50ZWVzOlxuICogICAtIENvcmUgRklERSBwaWVjZSB0eXBlcyBhcmUgcmVnaXN0ZXJlZCBpbiBQSUVDRV9UWVBFX1JFR0lTVFJZLlxuICogICAtIEFsbCBwcmVzZXQgcnVsZXMgYXJlIHJlZ2lzdGVyZWQgaW4gUFJFU0VUX1JFR0lTVFJZLlxuICpcbiAqIENvbnN1bWVycyBzaG91bGQgaW1wb3J0IGAuL2luZGV4LmpzYCAobmV2ZXIgdGhlIHJlZ2lzdHJpZXNcbiAqIGRpcmVjdGx5KSB0byBlbnN1cmUgc2lkZS1lZmZlY3QgcmVnaXN0cmF0aW9uIGhhcyBydW4uXG4gKi9cbi8vIElNUE9SVEFOVDogY29yZS1waWVjZS10eXBlcyBtdXN0IHJlZ2lzdGVyIEJFRk9SRSBhbnkgcHJlc2V0IHJ1bnNcbi8vIHNvIHByZXNldCBvbkFjdGl2YXRlIGhvb2tzIHRoYXQgaW5zcGVjdCBwaWVjZSB0eXBlcyBzZWUgdGhlIGZ1bGxcbi8vIHJlZ2lzdHJ5LlxuaW1wb3J0IFwiLi9jb3JlLXBpZWNlLXR5cGVzLmpzXCI7XG5cbmltcG9ydCBcIi4vcGF3bnMtbW92ZS1iYWNrd2FyZC5qc1wiO1xuaW1wb3J0IFwiLi9kb3VibGUtcGF3bi1zcHJpbnQuanNcIjtcbmltcG9ydCBcIi4vcGF3bi1kaWFnb25hbC1uby1jYXB0dXJlLmpzXCI7XG5pbXBvcnQgXCIuL2tuaWdodHMtbGVhcC10d2ljZS5qc1wiO1xuaW1wb3J0IFwiLi9iaXNob3BzLWlnbm9yZS1jb2xvci5qc1wiO1xuaW1wb3J0IFwiLi9yb29rLXdhcnAuanNcIjtcbmltcG9ydCBcIi4vd3JhcC1ib2FyZC5qc1wiO1xuaW1wb3J0IFwiLi9xdWVlbi1zcGxpdHMuanNcIjtcbmltcG9ydCBcIi4va2luZy1oZWFscy5qc1wiO1xuaW1wb3J0IFwiLi9leHBsb3NpdmUtcm9vay5qc1wiO1xuaW1wb3J0IFwiLi9jYXB0dXJlLXRvLXdpbi5qc1wiO1xuaW1wb3J0IFwiLi9sYXN0LXBpZWNlLXN0YW5kaW5nLmpzXCI7XG5pbXBvcnQgXCIuL3BpZWNlLWhwLmpzXCI7XG5pbXBvcnQgXCIuL2tuaWdodC1pbW11bml0eS5qc1wiO1xuaW1wb3J0IFwiLi9wb2lzb25lZC1zcXVhcmVzLmpzXCI7XG5cbmV4cG9ydCB7IFBSRVNFVF9SRUdJU1RSWSwgdHlwZSBQcmVzZXREZWYgfSBmcm9tIFwiLi9yZWdpc3RyeS5qc1wiO1xuIl0sImZpbGUiOiIvc3JjL3ByZXNldHMvaW5kZXgudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/6f0456a37ed510d24f7c002d2625bb39ac9ff41f b/7xOfJqsDU787fe61oSCq1/web/6f0456a37ed510d24f7c002d2625bb39ac9ff41f deleted file mode 100644 index 2fd0038..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/6f0456a37ed510d24f7c002d2625bb39ac9ff41f +++ /dev/null @@ -1,181 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/rules/promotion.ts", {"importedNames":["getPromotionMoves","applyPromotion","isPromotionMove"]}); - - - - -function setupSession() { - return new __vite_ssr_import_1__.Session({ autoFire: false }); -} -function insertPiece(session, id, type, color, square) { - const eid = id; - session.insert(eid, "PieceType", type); - session.insert(eid, "Color", color); - session.insert(eid, "Position", square); - return eid; -} -(0,__vite_ssr_import_0__.describe)("isPromotionMove", () => { - (0,__vite_ssr_import_0__.it)("white pawn landing on rank 7 (e8=60) is a promotion", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isPromotionMove)(60, "white")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("white pawn landing on rank 6 (e7=52) is not a promotion", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isPromotionMove)(52, "white")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("white pawn landing on rank 0 is not a promotion (wrong direction)", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isPromotionMove)(4, "white")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("black pawn landing on rank 0 (e1=4) is a promotion", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isPromotionMove)(4, "black")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("black pawn landing on rank 1 is not a promotion", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isPromotionMove)(12, "black")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("black pawn landing on rank 7 is not a promotion (wrong direction)", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isPromotionMove)(60, "black")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("covers the full rank-7 strip for white (squares 56..63)", () => { - for (let sq = 56; sq <= 63; sq++) { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isPromotionMove)(sq, "white")).toBe(true); - } - }); - (0,__vite_ssr_import_0__.it)("covers the full rank-0 strip for black (squares 0..7)", () => { - for (let sq = 0; sq <= 7; sq++) { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isPromotionMove)(sq, "black")).toBe(true); - } - }); -}); -(0,__vite_ssr_import_0__.describe)("getPromotionMoves — white", () => { - (0,__vite_ssr_import_0__.it)("pawn at e7 (52) with e8 (60) empty: 4 push-promotion moves", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 52); - const moves = (0,__vite_ssr_import_2__.getPromotionMoves)(session, pawn); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(4); - const promotions = moves.map((m) => m.promoteTo); - (0,__vite_ssr_import_0__.expect)(promotions).toContain("queen"); - (0,__vite_ssr_import_0__.expect)(promotions).toContain("rook"); - (0,__vite_ssr_import_0__.expect)(promotions).toContain("bishop"); - (0,__vite_ssr_import_0__.expect)(promotions).toContain("knight"); - (0,__vite_ssr_import_0__.expect)(moves.every((m) => m.to === 60)).toBe(true); - (0,__vite_ssr_import_0__.expect)(moves.every((m) => m.from === 52)).toBe(true); - (0,__vite_ssr_import_0__.expect)(moves.every((m) => m.pieceId === pawn)).toBe(true); - (0,__vite_ssr_import_0__.expect)(moves.every((m) => !m.isCapture)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("no push-promotion when the promotion square is blocked", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 52); - insertPiece(session, 2, "rook", "black", 60); - const moves = (0,__vite_ssr_import_2__.getPromotionMoves)(session, pawn); - (0,__vite_ssr_import_0__.expect)(moves.filter((m) => m.to === 60 && !m.isCapture)).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("capture-promotion on d7→e8: 4 capture moves with 4 piece options", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 51); - insertPiece(session, 2, "rook", "black", 60); - const moves = (0,__vite_ssr_import_2__.getPromotionMoves)(session, pawn); - const captures = moves.filter((m) => m.to === 60 && m.isCapture); - (0,__vite_ssr_import_0__.expect)(captures).toHaveLength(4); - (0,__vite_ssr_import_0__.expect)(captures.map((m) => m.promoteTo).sort()).toEqual( - ["bishop", "knight", "queen", "rook"] - ); - }); - (0,__vite_ssr_import_0__.it)("cannot capture-promote onto an allied piece", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 51); - insertPiece(session, 2, "rook", "white", 60); - const moves = (0,__vite_ssr_import_2__.getPromotionMoves)(session, pawn); - (0,__vite_ssr_import_0__.expect)(moves.filter((m) => m.to === 60)).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("edge file: a7 pawn can only capture to b8 (no off-board left capture)", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 48); - insertPiece(session, 2, "rook", "black", 57); - insertPiece(session, 3, "knight", "white", 56); - const moves = (0,__vite_ssr_import_2__.getPromotionMoves)(session, pawn); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(4); - (0,__vite_ssr_import_0__.expect)(moves.every((m) => m.to === 57 && m.isCapture)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("pawn not yet on promotion-approaching rank returns []", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 12); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.getPromotionMoves)(session, pawn)).toEqual([]); - }); -}); -(0,__vite_ssr_import_0__.describe)("getPromotionMoves — black", () => { - (0,__vite_ssr_import_0__.it)("black pawn at e2 (12) with e1 (4) empty: 4 push-promotion moves", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "black", 12); - const moves = (0,__vite_ssr_import_2__.getPromotionMoves)(session, pawn); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(4); - (0,__vite_ssr_import_0__.expect)(moves.every((m) => m.to === 4 && !m.isCapture)).toBe(true); - (0,__vite_ssr_import_0__.expect)(moves.map((m) => m.promoteTo).sort()).toEqual( - ["bishop", "knight", "queen", "rook"] - ); - }); - (0,__vite_ssr_import_0__.it)("black capture-promotion d2→e1: 4 moves", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "black", 11); - insertPiece(session, 2, "rook", "white", 4); - const moves = (0,__vite_ssr_import_2__.getPromotionMoves)(session, pawn); - const captures = moves.filter((m) => m.to === 4 && m.isCapture); - (0,__vite_ssr_import_0__.expect)(captures).toHaveLength(4); - }); -}); -(0,__vite_ssr_import_0__.describe)("getPromotionMoves — degenerate inputs", () => { - (0,__vite_ssr_import_0__.it)("unknown piece id returns []", () => { - const session = setupSession(); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.getPromotionMoves)(session, 999)).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("piece with Position but no Color returns []", () => { - const session = setupSession(); - const eid = 1; - session.insert(eid, "Position", 52); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.getPromotionMoves)(session, eid)).toEqual([]); - }); -}); -(0,__vite_ssr_import_0__.describe)("applyPromotion", () => { - (0,__vite_ssr_import_0__.it)("defaults to queen when no target specified", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 60); - (0,__vite_ssr_import_2__.applyPromotion)(session, pawn); - (0,__vite_ssr_import_0__.expect)(session.get(pawn, "PieceType")).toBe("queen"); - }); - (0,__vite_ssr_import_0__.it)("promotes to a specified piece type (knight)", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 60); - (0,__vite_ssr_import_2__.applyPromotion)(session, pawn, "knight"); - (0,__vite_ssr_import_0__.expect)(session.get(pawn, "PieceType")).toBe("knight"); - }); - (0,__vite_ssr_import_0__.it)("promotes to each of queen / rook / bishop / knight", () => { - for (const target of ["queen", "rook", "bishop", "knight"]) { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 60); - (0,__vite_ssr_import_2__.applyPromotion)(session, pawn, target); - (0,__vite_ssr_import_0__.expect)(session.get(pawn, "PieceType")).toBe(target); - } - }); - (0,__vite_ssr_import_0__.it)("preserves color and position when promoting", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 60); - (0,__vite_ssr_import_2__.applyPromotion)(session, pawn, "rook"); - (0,__vite_ssr_import_0__.expect)(session.get(pawn, "Color")).toBe("white"); - (0,__vite_ssr_import_0__.expect)(session.get(pawn, "Position")).toBe(60); - }); - (0,__vite_ssr_import_0__.it)("throws when promoting to king", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 60); - (0,__vite_ssr_import_0__.expect)(() => (0,__vite_ssr_import_2__.applyPromotion)(session, pawn, "king")).toThrow( - /Invalid promotion target/ - ); - }); - (0,__vite_ssr_import_0__.it)("throws when promoting to pawn", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 60); - (0,__vite_ssr_import_0__.expect)(() => (0,__vite_ssr_import_2__.applyPromotion)(session, pawn, "pawn")).toThrow( - /Invalid promotion target/ - ); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QVcsVUFBVSxDQUFDLFNBQVMsUUFBUSxVQUFVLFFBQVEsR0FBWTtBQUNuRSxZQUFNLFVBQVUsYUFBYTtBQUM3QixZQUFNLE9BQU8sWUFBWSxTQUFTLEdBQUcsUUFBUSxTQUFTLEVBQUU7QUFDeEQsK0NBQWUsU0FBUyxNQUFNLE1BQU07QUFDcEMsdUNBQU8sUUFBUSxJQUFJLE1BQU0sV0FBVyxDQUFDLEVBQUUsS0FBSyxNQUFNO0FBQUEsSUFDcEQ7QUFBQSxFQUNGLENBQUM7QUFFRCwrQkFBRywrQ0FBK0MsTUFBTTtBQUN0RCxVQUFNLFVBQVUsYUFBYTtBQUM3QixVQUFNLE9BQU8sWUFBWSxTQUFTLEdBQUcsUUFBUSxTQUFTLEVBQUU7QUFDeEQsNkNBQWUsU0FBUyxNQUFNLE1BQU07QUFDcEMscUNBQU8sUUFBUSxJQUFJLE1BQU0sT0FBTyxDQUFDLEVBQUUsS0FBSyxPQUFPO0FBQy9DLHFDQUFPLFFBQVEsSUFBSSxNQUFNLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUFBLEVBQy9DLENBQUM7QUFFRCwrQkFBRyxpQ0FBaUMsTUFBTTtBQUN4QyxVQUFNLFVBQVUsYUFBYTtBQUM3QixVQUFNLE9BQU8sWUFBWSxTQUFTLEdBQUcsUUFBUSxTQUFTLEVBQUU7QUFDeEQscUNBQU8sU0FBTSxzQ0FBZSxTQUFTLE1BQU0sTUFBTSxDQUFDLEVBQUU7QUFBQSxNQUNsRDtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFFRCwrQkFBRyxpQ0FBaUMsTUFBTTtBQUN4QyxVQUFNLFVBQVUsYUFBYTtBQUM3QixVQUFNLE9BQU8sWUFBWSxTQUFTLEdBQUcsUUFBUSxTQUFTLEVBQUU7QUFDeEQscUNBQU8sU0FBTSxzQ0FBZSxTQUFTLE1BQU0sTUFBTSxDQUFDLEVBQUU7QUFBQSxNQUNsRDtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJwcm9tb3Rpb24udGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgaXQsIGV4cGVjdCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB7IFNlc3Npb24sIHR5cGUgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB0eXBlIHsgUGllY2VDb2xvciwgUGllY2VUeXBlLCBTcXVhcmUgfSBmcm9tIFwiLi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQge1xuICBnZXRQcm9tb3Rpb25Nb3ZlcyxcbiAgYXBwbHlQcm9tb3Rpb24sXG4gIGlzUHJvbW90aW9uTW92ZSxcbn0gZnJvbSBcIi4vcHJvbW90aW9uLmpzXCI7XG5cbmZ1bmN0aW9uIHNldHVwU2Vzc2lvbigpOiBTZXNzaW9uIHtcbiAgcmV0dXJuIG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRQaWVjZShcbiAgc2Vzc2lvbjogU2Vzc2lvbixcbiAgaWQ6IG51bWJlcixcbiAgdHlwZTogUGllY2VUeXBlLFxuICBjb2xvcjogUGllY2VDb2xvcixcbiAgc3F1YXJlOiBTcXVhcmUsXG4pOiBFbnRpdHlJZCB7XG4gIGNvbnN0IGVpZCA9IGlkIGFzIEVudGl0eUlkO1xuICBzZXNzaW9uLmluc2VydChlaWQsIFwiUGllY2VUeXBlXCIsIHR5cGUpO1xuICBzZXNzaW9uLmluc2VydChlaWQsIFwiQ29sb3JcIiwgY29sb3IpO1xuICBzZXNzaW9uLmluc2VydChlaWQsIFwiUG9zaXRpb25cIiwgc3F1YXJlKTtcbiAgcmV0dXJuIGVpZDtcbn1cblxuLy8g4pSA4pSA4pSAIGlzUHJvbW90aW9uTW92ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZGVzY3JpYmUoXCJpc1Byb21vdGlvbk1vdmVcIiwgKCkgPT4ge1xuICBpdChcIndoaXRlIHBhd24gbGFuZGluZyBvbiByYW5rIDcgKGU4PTYwKSBpcyBhIHByb21vdGlvblwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KGlzUHJvbW90aW9uTW92ZSg2MCwgXCJ3aGl0ZVwiKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJ3aGl0ZSBwYXduIGxhbmRpbmcgb24gcmFuayA2IChlNz01MikgaXMgbm90IGEgcHJvbW90aW9uXCIsICgpID0+IHtcbiAgICBleHBlY3QoaXNQcm9tb3Rpb25Nb3ZlKDUyLCBcIndoaXRlXCIpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJ3aGl0ZSBwYXduIGxhbmRpbmcgb24gcmFuayAwIGlzIG5vdCBhIHByb21vdGlvbiAod3JvbmcgZGlyZWN0aW9uKVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KGlzUHJvbW90aW9uTW92ZSg0LCBcIndoaXRlXCIpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJibGFjayBwYXduIGxhbmRpbmcgb24gcmFuayAwIChlMT00KSBpcyBhIHByb21vdGlvblwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KGlzUHJvbW90aW9uTW92ZSg0LCBcImJsYWNrXCIpKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcImJsYWNrIHBhd24gbGFuZGluZyBvbiByYW5rIDEgaXMgbm90IGEgcHJvbW90aW9uXCIsICgpID0+IHtcbiAgICBleHBlY3QoaXNQcm9tb3Rpb25Nb3ZlKDEyLCBcImJsYWNrXCIpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJibGFjayBwYXduIGxhbmRpbmcgb24gcmFuayA3IGlzIG5vdCBhIHByb21vdGlvbiAod3JvbmcgZGlyZWN0aW9uKVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KGlzUHJvbW90aW9uTW92ZSg2MCwgXCJibGFja1wiKSkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwiY292ZXJzIHRoZSBmdWxsIHJhbmstNyBzdHJpcCBmb3Igd2hpdGUgKHNxdWFyZXMgNTYuLjYzKVwiLCAoKSA9PiB7XG4gICAgZm9yIChsZXQgc3EgPSA1Njsgc3EgPD0gNjM7IHNxKyspIHtcbiAgICAgIGV4cGVjdChpc1Byb21vdGlvbk1vdmUoc3EsIFwid2hpdGVcIikpLnRvQmUodHJ1ZSk7XG4gICAgfVxuICB9KTtcblxuICBpdChcImNvdmVycyB0aGUgZnVsbCByYW5rLTAgc3RyaXAgZm9yIGJsYWNrIChzcXVhcmVzIDAuLjcpXCIsICgpID0+IHtcbiAgICBmb3IgKGxldCBzcSA9IDA7IHNxIDw9IDc7IHNxKyspIHtcbiAgICAgIGV4cGVjdChpc1Byb21vdGlvbk1vdmUoc3EsIFwiYmxhY2tcIikpLnRvQmUodHJ1ZSk7XG4gICAgfVxuICB9KTtcbn0pO1xuXG4vLyDilIDilIDilIAgZ2V0UHJvbW90aW9uTW92ZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmRlc2NyaWJlKFwiZ2V0UHJvbW90aW9uTW92ZXMg4oCUIHdoaXRlXCIsICgpID0+IHtcbiAgaXQoXCJwYXduIGF0IGU3ICg1Mikgd2l0aCBlOCAoNjApIGVtcHR5OiA0IHB1c2gtcHJvbW90aW9uIG1vdmVzXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gc2V0dXBTZXNzaW9uKCk7XG4gICAgY29uc3QgcGF3biA9IGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwicGF3blwiLCBcIndoaXRlXCIsIDUyKTsgLy8gZTdcbiAgICBjb25zdCBtb3ZlcyA9IGdldFByb21vdGlvbk1vdmVzKHNlc3Npb24sIHBhd24pO1xuICAgIGV4cGVjdChtb3ZlcykudG9IYXZlTGVuZ3RoKDQpO1xuXG4gICAgY29uc3QgcHJvbW90aW9ucyA9IG1vdmVzLm1hcCgobSkgPT4gbS5wcm9tb3RlVG8pO1xuICAgIGV4cGVjdChwcm9tb3Rpb25zKS50b0NvbnRhaW4oXCJxdWVlblwiKTtcbiAgICBleHBlY3QocHJvbW90aW9ucykudG9Db250YWluKFwicm9va1wiKTtcbiAgICBleHBlY3QocHJvbW90aW9ucykudG9Db250YWluKFwiYmlzaG9wXCIpO1xuICAgIGV4cGVjdChwcm9tb3Rpb25zKS50b0NvbnRhaW4oXCJrbmlnaHRcIik7XG5cbiAgICBleHBlY3QobW92ZXMuZXZlcnkoKG0pID0+IG0udG8gPT09IDYwKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QobW92ZXMuZXZlcnkoKG0pID0+IG0uZnJvbSA9PT0gNTIpKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChtb3Zlcy5ldmVyeSgobSkgPT4gbS5waWVjZUlkID09PSBwYXduKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QobW92ZXMuZXZlcnkoKG0pID0+ICFtLmlzQ2FwdHVyZSkpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwibm8gcHVzaC1wcm9tb3Rpb24gd2hlbiB0aGUgcHJvbW90aW9uIHNxdWFyZSBpcyBibG9ja2VkXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gc2V0dXBTZXNzaW9uKCk7XG4gICAgY29uc3QgcGF3biA9IGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwicGF3blwiLCBcIndoaXRlXCIsIDUyKTsgLy8gZTdcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAyLCBcInJvb2tcIiwgXCJibGFja1wiLCA2MCk7IC8vIGU4IGJsb2NrcyBwdXNoXG4gICAgY29uc3QgbW92ZXMgPSBnZXRQcm9tb3Rpb25Nb3ZlcyhzZXNzaW9uLCBwYXduKTtcbiAgICBleHBlY3QobW92ZXMuZmlsdGVyKChtKSA9PiBtLnRvID09PSA2MCAmJiAhbS5pc0NhcHR1cmUpKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xuXG4gIGl0KFwiY2FwdHVyZS1wcm9tb3Rpb24gb24gZDfihpJlODogNCBjYXB0dXJlIG1vdmVzIHdpdGggNCBwaWVjZSBvcHRpb25zXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gc2V0dXBTZXNzaW9uKCk7XG4gICAgY29uc3QgcGF3biA9IGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwicGF3blwiLCBcIndoaXRlXCIsIDUxKTsgLy8gZDdcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAyLCBcInJvb2tcIiwgXCJibGFja1wiLCA2MCk7IC8vIGU4IOKAlCBlbmVteSB0byBjYXB0dXJlXG4gICAgY29uc3QgbW92ZXMgPSBnZXRQcm9tb3Rpb25Nb3ZlcyhzZXNzaW9uLCBwYXduKTtcbiAgICBjb25zdCBjYXB0dXJlcyA9IG1vdmVzLmZpbHRlcigobSkgPT4gbS50byA9PT0gNjAgJiYgbS5pc0NhcHR1cmUpO1xuICAgIGV4cGVjdChjYXB0dXJlcykudG9IYXZlTGVuZ3RoKDQpO1xuICAgIGV4cGVjdChjYXB0dXJlcy5tYXAoKG0pID0+IG0ucHJvbW90ZVRvKS5zb3J0KCkpLnRvRXF1YWwoXG4gICAgICBbXCJiaXNob3BcIiwgXCJrbmlnaHRcIiwgXCJxdWVlblwiLCBcInJvb2tcIl0sXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJjYW5ub3QgY2FwdHVyZS1wcm9tb3RlIG9udG8gYW4gYWxsaWVkIHBpZWNlXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gc2V0dXBTZXNzaW9uKCk7XG4gICAgY29uc3QgcGF3biA9IGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwicGF3blwiLCBcIndoaXRlXCIsIDUxKTsgLy8gZDdcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAyLCBcInJvb2tcIiwgXCJ3aGl0ZVwiLCA2MCk7IC8vIGU4IGFsbHlcbiAgICBjb25zdCBtb3ZlcyA9IGdldFByb21vdGlvbk1vdmVzKHNlc3Npb24sIHBhd24pO1xuICAgIGV4cGVjdChtb3Zlcy5maWx0ZXIoKG0pID0+IG0udG8gPT09IDYwKSkudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcblxuICBpdChcImVkZ2UgZmlsZTogYTcgcGF3biBjYW4gb25seSBjYXB0dXJlIHRvIGI4IChubyBvZmYtYm9hcmQgbGVmdCBjYXB0dXJlKVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IHBhd24gPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCA0OCk7IC8vIGE3XG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMiwgXCJyb29rXCIsIFwiYmxhY2tcIiwgNTcpOyAvLyBiOCBlbmVteVxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDMsIFwia25pZ2h0XCIsIFwid2hpdGVcIiwgNTYpOyAvLyBhOCBibG9ja3MgcHVzaCAoYWxseSlcbiAgICBjb25zdCBtb3ZlcyA9IGdldFByb21vdGlvbk1vdmVzKHNlc3Npb24sIHBhd24pO1xuICAgIC8vIE9ubHkgNCBjYXB0dXJlLXByb21vdGlvbnMgdG8gYjggKDU3KTsgYTggcHVzaCBibG9ja2VkIGJ5IGFsbHkuXG4gICAgZXhwZWN0KG1vdmVzKS50b0hhdmVMZW5ndGgoNCk7XG4gICAgZXhwZWN0KG1vdmVzLmV2ZXJ5KChtKSA9PiBtLnRvID09PSA1NyAmJiBtLmlzQ2FwdHVyZSkpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwicGF3biBub3QgeWV0IG9uIHByb21vdGlvbi1hcHByb2FjaGluZyByYW5rIHJldHVybnMgW11cIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZXR1cFNlc3Npb24oKTtcbiAgICBjb25zdCBwYXduID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJwYXduXCIsIFwid2hpdGVcIiwgMTIpOyAvLyBlMlxuICAgIGV4cGVjdChnZXRQcm9tb3Rpb25Nb3ZlcyhzZXNzaW9uLCBwYXduKSkudG9FcXVhbChbXSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiZ2V0UHJvbW90aW9uTW92ZXMg4oCUIGJsYWNrXCIsICgpID0+IHtcbiAgaXQoXCJibGFjayBwYXduIGF0IGUyICgxMikgd2l0aCBlMSAoNCkgZW1wdHk6IDQgcHVzaC1wcm9tb3Rpb24gbW92ZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZXR1cFNlc3Npb24oKTtcbiAgICBjb25zdCBwYXduID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJwYXduXCIsIFwiYmxhY2tcIiwgMTIpOyAvLyBlMlxuICAgIGNvbnN0IG1vdmVzID0gZ2V0UHJvbW90aW9uTW92ZXMoc2Vzc2lvbiwgcGF3bik7XG4gICAgZXhwZWN0KG1vdmVzKS50b0hhdmVMZW5ndGgoNCk7XG4gICAgZXhwZWN0KG1vdmVzLmV2ZXJ5KChtKSA9PiBtLnRvID09PSA0ICYmICFtLmlzQ2FwdHVyZSkpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KG1vdmVzLm1hcCgobSkgPT4gbS5wcm9tb3RlVG8pLnNvcnQoKSkudG9FcXVhbChcbiAgICAgIFtcImJpc2hvcFwiLCBcImtuaWdodFwiLCBcInF1ZWVuXCIsIFwicm9va1wiXSxcbiAgICApO1xuICB9KTtcblxuICBpdChcImJsYWNrIGNhcHR1cmUtcHJvbW90aW9uIGQy4oaSZTE6IDQgbW92ZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZXR1cFNlc3Npb24oKTtcbiAgICBjb25zdCBwYXduID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJwYXduXCIsIFwiYmxhY2tcIiwgMTEpOyAvLyBkMlxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDIsIFwicm9va1wiLCBcIndoaXRlXCIsIDQpOyAvLyBlMSBlbmVteVxuICAgIGNvbnN0IG1vdmVzID0gZ2V0UHJvbW90aW9uTW92ZXMoc2Vzc2lvbiwgcGF3bik7XG4gICAgY29uc3QgY2FwdHVyZXMgPSBtb3Zlcy5maWx0ZXIoKG0pID0+IG0udG8gPT09IDQgJiYgbS5pc0NhcHR1cmUpO1xuICAgIGV4cGVjdChjYXB0dXJlcykudG9IYXZlTGVuZ3RoKDQpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImdldFByb21vdGlvbk1vdmVzIOKAlCBkZWdlbmVyYXRlIGlucHV0c1wiLCAoKSA9PiB7XG4gIGl0KFwidW5rbm93biBwaWVjZSBpZCByZXR1cm5zIFtdXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gc2V0dXBTZXNzaW9uKCk7XG4gICAgZXhwZWN0KGdldFByb21vdGlvbk1vdmVzKHNlc3Npb24sIDk5OSBhcyBFbnRpdHlJZCkpLnRvRXF1YWwoW10pO1xuICB9KTtcblxuICBpdChcInBpZWNlIHdpdGggUG9zaXRpb24gYnV0IG5vIENvbG9yIHJldHVybnMgW11cIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZXR1cFNlc3Npb24oKTtcbiAgICBjb25zdCBlaWQgPSAxIGFzIEVudGl0eUlkO1xuICAgIHNlc3Npb24uaW5zZXJ0KGVpZCwgXCJQb3NpdGlvblwiLCA1Mik7XG4gICAgZXhwZWN0KGdldFByb21vdGlvbk1vdmVzKHNlc3Npb24sIGVpZCkpLnRvRXF1YWwoW10pO1xuICB9KTtcbn0pO1xuXG4vLyDilIDilIDilIAgYXBwbHlQcm9tb3Rpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmRlc2NyaWJlKFwiYXBwbHlQcm9tb3Rpb25cIiwgKCkgPT4ge1xuICBpdChcImRlZmF1bHRzIHRvIHF1ZWVuIHdoZW4gbm8gdGFyZ2V0IHNwZWNpZmllZFwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IHBhd24gPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCA2MCk7XG4gICAgYXBwbHlQcm9tb3Rpb24oc2Vzc2lvbiwgcGF3bik7XG4gICAgZXhwZWN0KHNlc3Npb24uZ2V0KHBhd24sIFwiUGllY2VUeXBlXCIpKS50b0JlKFwicXVlZW5cIik7XG4gIH0pO1xuXG4gIGl0KFwicHJvbW90ZXMgdG8gYSBzcGVjaWZpZWQgcGllY2UgdHlwZSAoa25pZ2h0KVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IHBhd24gPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCA2MCk7XG4gICAgYXBwbHlQcm9tb3Rpb24oc2Vzc2lvbiwgcGF3biwgXCJrbmlnaHRcIik7XG4gICAgZXhwZWN0KHNlc3Npb24uZ2V0KHBhd24sIFwiUGllY2VUeXBlXCIpKS50b0JlKFwia25pZ2h0XCIpO1xuICB9KTtcblxuICBpdChcInByb21vdGVzIHRvIGVhY2ggb2YgcXVlZW4gLyByb29rIC8gYmlzaG9wIC8ga25pZ2h0XCIsICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiBbXCJxdWVlblwiLCBcInJvb2tcIiwgXCJiaXNob3BcIiwgXCJrbmlnaHRcIl0gYXMgY29uc3QpIHtcbiAgICAgIGNvbnN0IHNlc3Npb24gPSBzZXR1cFNlc3Npb24oKTtcbiAgICAgIGNvbnN0IHBhd24gPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCA2MCk7XG4gICAgICBhcHBseVByb21vdGlvbihzZXNzaW9uLCBwYXduLCB0YXJnZXQpO1xuICAgICAgZXhwZWN0KHNlc3Npb24uZ2V0KHBhd24sIFwiUGllY2VUeXBlXCIpKS50b0JlKHRhcmdldCk7XG4gICAgfVxuICB9KTtcblxuICBpdChcInByZXNlcnZlcyBjb2xvciBhbmQgcG9zaXRpb24gd2hlbiBwcm9tb3RpbmdcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZXR1cFNlc3Npb24oKTtcbiAgICBjb25zdCBwYXduID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJwYXduXCIsIFwid2hpdGVcIiwgNjApO1xuICAgIGFwcGx5UHJvbW90aW9uKHNlc3Npb24sIHBhd24sIFwicm9va1wiKTtcbiAgICBleHBlY3Qoc2Vzc2lvbi5nZXQocGF3biwgXCJDb2xvclwiKSkudG9CZShcIndoaXRlXCIpO1xuICAgIGV4cGVjdChzZXNzaW9uLmdldChwYXduLCBcIlBvc2l0aW9uXCIpKS50b0JlKDYwKTtcbiAgfSk7XG5cbiAgaXQoXCJ0aHJvd3Mgd2hlbiBwcm9tb3RpbmcgdG8ga2luZ1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IHBhd24gPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCA2MCk7XG4gICAgZXhwZWN0KCgpID0+IGFwcGx5UHJvbW90aW9uKHNlc3Npb24sIHBhd24sIFwia2luZ1wiKSkudG9UaHJvdyhcbiAgICAgIC9JbnZhbGlkIHByb21vdGlvbiB0YXJnZXQvLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwidGhyb3dzIHdoZW4gcHJvbW90aW5nIHRvIHBhd25cIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZXR1cFNlc3Npb24oKTtcbiAgICBjb25zdCBwYXduID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJwYXduXCIsIFwid2hpdGVcIiwgNjApO1xuICAgIGV4cGVjdCgoKSA9PiBhcHBseVByb21vdGlvbihzZXNzaW9uLCBwYXduLCBcInBhd25cIikpLnRvVGhyb3coXG4gICAgICAvSW52YWxpZCBwcm9tb3Rpb24gdGFyZ2V0LyxcbiAgICApO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL2NoZXNzL3NyYy9ydWxlcy9wcm9tb3Rpb24udGVzdC50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/6f3f4f0d5514021cf9fb69adb91fdd7e92d83259 b/7xOfJqsDU787fe61oSCq1/web/6f3f4f0d5514021cf9fb69adb91fdd7e92d83259 deleted file mode 100644 index be2d5c2..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/6f3f4f0d5514021cf9fb69adb91fdd7e92d83259 +++ /dev/null @@ -1,5 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "default", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_export_default__ } catch {} }}); -const __vite_ssr_export_default__ = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%20width='45'%20height='45'%3e%3cg%20style='opacity:1;%20fill:%23000000;%20fill-opacity:1;%20fill-rule:evenodd;%20stroke:%23000000;%20stroke-width:1.5;%20stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;%20stroke-dasharray:none;%20stroke-opacity:1;'%20transform='translate(0,0.3)'%3e%3cpath%20d='M%209,39%20L%2036,39%20L%2036,36%20L%209,36%20L%209,39%20z%20'%20style='stroke-linecap:butt;'%20/%3e%3cpath%20d='M%2012.5,32%20L%2014,29.5%20L%2031,29.5%20L%2032.5,32%20L%2012.5,32%20z%20'%20style='stroke-linecap:butt;'%20/%3e%3cpath%20d='M%2012,36%20L%2012,32%20L%2033,32%20L%2033,36%20L%2012,36%20z%20'%20style='stroke-linecap:butt;'%20/%3e%3cpath%20d='M%2014,29.5%20L%2014,16.5%20L%2031,16.5%20L%2031,29.5%20L%2014,29.5%20z%20'%20style='stroke-linecap:butt;stroke-linejoin:miter;'%20/%3e%3cpath%20d='M%2014,16.5%20L%2011,14%20L%2034,14%20L%2031,16.5%20L%2014,16.5%20z%20'%20style='stroke-linecap:butt;'%20/%3e%3cpath%20d='M%2011,14%20L%2011,9%20L%2015,9%20L%2015,11%20L%2020,11%20L%2020,9%20L%2025,9%20L%2025,11%20L%2030,11%20L%2030,9%20L%2034,9%20L%2034,14%20L%2011,14%20z%20'%20style='stroke-linecap:butt;'%20/%3e%3cpath%20d='M%2012,35.5%20L%2033,35.5%20L%2033,35.5'%20style='fill:none;%20stroke:%23ffffff;%20stroke-width:1;%20stroke-linejoin:miter;'%20/%3e%3cpath%20d='M%2013,31.5%20L%2032,31.5'%20style='fill:none;%20stroke:%23ffffff;%20stroke-width:1;%20stroke-linejoin:miter;'%20/%3e%3cpath%20d='M%2014,29.5%20L%2031,29.5'%20style='fill:none;%20stroke:%23ffffff;%20stroke-width:1;%20stroke-linejoin:miter;'%20/%3e%3cpath%20d='M%2014,16.5%20L%2031,16.5'%20style='fill:none;%20stroke:%23ffffff;%20stroke-width:1;%20stroke-linejoin:miter;'%20/%3e%3cpath%20d='M%2011,14%20L%2034,14'%20style='fill:none;%20stroke:%23ffffff;%20stroke-width:1;%20stroke-linejoin:miter;'%20/%3e%3c/g%3e%3c/svg%3e" - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJsYWNrLXJvb2suc3ZnIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzYz94bWwlMjB2ZXJzaW9uPScxLjAnJTIwZW5jb2Rpbmc9J1VURi04JyUyMHN0YW5kYWxvbmU9J25vJz8lM2UlM2MhRE9DVFlQRSUyMHN2ZyUyMFBVQkxJQyUyMCctLy9XM0MvL0RURCUyMFNWRyUyMDEuMS8vRU4nJTIwJ2h0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCclM2UlM2NzdmclMjB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTIwdmVyc2lvbj0nMS4xJyUyMHdpZHRoPSc0NSclMjBoZWlnaHQ9JzQ1JyUzZSUzY2clMjBzdHlsZT0nb3BhY2l0eToxOyUyMGZpbGw6JTIzMDAwMDAwOyUyMGZpbGwtb3BhY2l0eToxOyUyMGZpbGwtcnVsZTpldmVub2RkOyUyMHN0cm9rZTolMjMwMDAwMDA7JTIwc3Ryb2tlLXdpZHRoOjEuNTslMjBzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDslMjBzdHJva2UtZGFzaGFycmF5Om5vbmU7JTIwc3Ryb2tlLW9wYWNpdHk6MTsnJTIwdHJhbnNmb3JtPSd0cmFuc2xhdGUoMCwwLjMpJyUzZSUzY3BhdGglMjBkPSdNJTIwOSwzOSUyMEwlMjAzNiwzOSUyMEwlMjAzNiwzNiUyMEwlMjA5LDM2JTIwTCUyMDksMzklMjB6JTIwJyUyMHN0eWxlPSdzdHJva2UtbGluZWNhcDpidXR0OyclMjAvJTNlJTNjcGF0aCUyMGQ9J00lMjAxMi41LDMyJTIwTCUyMDE0LDI5LjUlMjBMJTIwMzEsMjkuNSUyMEwlMjAzMi41LDMyJTIwTCUyMDEyLjUsMzIlMjB6JTIwJyUyMHN0eWxlPSdzdHJva2UtbGluZWNhcDpidXR0OyclMjAvJTNlJTNjcGF0aCUyMGQ9J00lMjAxMiwzNiUyMEwlMjAxMiwzMiUyMEwlMjAzMywzMiUyMEwlMjAzMywzNiUyMEwlMjAxMiwzNiUyMHolMjAnJTIwc3R5bGU9J3N0cm9rZS1saW5lY2FwOmJ1dHQ7JyUyMC8lM2UlM2NwYXRoJTIwZD0nTSUyMDE0LDI5LjUlMjBMJTIwMTQsMTYuNSUyMEwlMjAzMSwxNi41JTIwTCUyMDMxLDI5LjUlMjBMJTIwMTQsMjkuNSUyMHolMjAnJTIwc3R5bGU9J3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyOyclMjAvJTNlJTNjcGF0aCUyMGQ9J00lMjAxNCwxNi41JTIwTCUyMDExLDE0JTIwTCUyMDM0LDE0JTIwTCUyMDMxLDE2LjUlMjBMJTIwMTQsMTYuNSUyMHolMjAnJTIwc3R5bGU9J3N0cm9rZS1saW5lY2FwOmJ1dHQ7JyUyMC8lM2UlM2NwYXRoJTIwZD0nTSUyMDExLDE0JTIwTCUyMDExLDklMjBMJTIwMTUsOSUyMEwlMjAxNSwxMSUyMEwlMjAyMCwxMSUyMEwlMjAyMCw5JTIwTCUyMDI1LDklMjBMJTIwMjUsMTElMjBMJTIwMzAsMTElMjBMJTIwMzAsOSUyMEwlMjAzNCw5JTIwTCUyMDM0LDE0JTIwTCUyMDExLDE0JTIweiUyMCclMjBzdHlsZT0nc3Ryb2tlLWxpbmVjYXA6YnV0dDsnJTIwLyUzZSUzY3BhdGglMjBkPSdNJTIwMTIsMzUuNSUyMEwlMjAzMywzNS41JTIwTCUyMDMzLDM1LjUnJTIwc3R5bGU9J2ZpbGw6bm9uZTslMjBzdHJva2U6JTIzZmZmZmZmOyUyMHN0cm9rZS13aWR0aDoxOyUyMHN0cm9rZS1saW5lam9pbjptaXRlcjsnJTIwLyUzZSUzY3BhdGglMjBkPSdNJTIwMTMsMzEuNSUyMEwlMjAzMiwzMS41JyUyMHN0eWxlPSdmaWxsOm5vbmU7JTIwc3Ryb2tlOiUyM2ZmZmZmZjslMjBzdHJva2Utd2lkdGg6MTslMjBzdHJva2UtbGluZWpvaW46bWl0ZXI7JyUyMC8lM2UlM2NwYXRoJTIwZD0nTSUyMDE0LDI5LjUlMjBMJTIwMzEsMjkuNSclMjBzdHlsZT0nZmlsbDpub25lOyUyMHN0cm9rZTolMjNmZmZmZmY7JTIwc3Ryb2tlLXdpZHRoOjE7JTIwc3Ryb2tlLWxpbmVqb2luOm1pdGVyOyclMjAvJTNlJTNjcGF0aCUyMGQ9J00lMjAxNCwxNi41JTIwTCUyMDMxLDE2LjUnJTIwc3R5bGU9J2ZpbGw6bm9uZTslMjBzdHJva2U6JTIzZmZmZmZmOyUyMHN0cm9rZS13aWR0aDoxOyUyMHN0cm9rZS1saW5lam9pbjptaXRlcjsnJTIwLyUzZSUzY3BhdGglMjBkPSdNJTIwMTEsMTQlMjBMJTIwMzQsMTQnJTIwc3R5bGU9J2ZpbGw6bm9uZTslMjBzdHJva2U6JTIzZmZmZmZmOyUyMHN0cm9rZS13aWR0aDoxOyUyMHN0cm9rZS1saW5lam9pbjptaXRlcjsnJTIwLyUzZSUzYy9nJTNlJTNjL3N2ZyUzZVwiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxtQ0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/6fbd706f9c7aba12152874394f40de3b5e0d4ffb b/7xOfJqsDU787fe61oSCq1/web/6fbd706f9c7aba12152874394f40de3b5e0d4ffb deleted file mode 100644 index bf5ee6f..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/6fbd706f9c7aba12152874394f40de3b5e0d4ffb +++ /dev/null @@ -1,155 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "PresetActivationError", { enumerable: true, configurable: true, get(){ try { return PresetActivationError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "ActivePresetSet", { enumerable: true, configurable: true, get(){ try { return ActivePresetSet } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/presets/registry.ts", {"importedNames":["PRESET_REGISTRY"]}); -function scopesOverlap(a, b) { - if (a === "both" || b === "both") return true; - return a === b; -} -class PresetActivationError extends Error { - code; - constructor(code, message) { - super(message); - this.name = "PresetActivationError"; - this.code = code; - } -}; -class ActivePresetSet { - entries = /* @__PURE__ */ new Map(); - /** - * Replace the entire active set with `requests`. Used by the server's - * authoritative path and by client sync on `game.presets`. Validates - * each entry individually AND the whole set together (so cross-preset - * incompatibilities are caught before any mutation). - * - * On failure the existing set is untouched — errors abort the entire - * replacement so the caller never observes a half-applied state. - */ - replaceAll(requests) { - for (const r of requests) { - this.validateSingle(r); - }; - for (const r of requests) { - const def = __vite_ssr_import_0__.PRESET_REGISTRY.get(r.id); - if (!def) continue; - for (const other of requests) { - if (other.id === r.id) continue; - if (def.incompatibleWith.includes(other.id) && scopesOverlap(r.scope, other.scope)) { - throw new PresetActivationError( - "INCOMPATIBLE", - `Preset "${r.id}" (scope=${r.scope}) is incompatible with "${other.id}" (scope=${other.scope}) under overlapping scope.` - ); - } - }; - for (const dep of def.requires) { - const met = requests.some( - (rq) => rq.id === dep && scopesOverlap(rq.scope, r.scope) - ); - if (!met) { - throw new PresetActivationError( - "MISSING_REQUIREMENT", - `Preset "${r.id}" requires "${dep}" to also be active under an overlapping scope.` - ); - } - } - }; - this.entries.clear(); - for (const r of requests) { - this.entries.set(r.id, { - id: r.id, - scope: r.scope, - turnsRemaining: r.turnsRemaining - }); - } - } - validateSingle(r) { - const def = __vite_ssr_import_0__.PRESET_REGISTRY.get(r.id); - if (!def) { - throw new PresetActivationError( - "UNKNOWN_PRESET", - `Preset "${r.id}" is not registered.` - ); - }; - if (r.scope !== "both" && r.scope !== "white" && r.scope !== "black") { - throw new PresetActivationError( - "INVALID_SCOPE", - `Preset "${r.id}" has invalid scope "${String(r.scope)}".` - ); - }; - if (r.turnsRemaining !== null) { - if (!Number.isInteger(r.turnsRemaining) || r.turnsRemaining <= 0) { - throw new PresetActivationError( - "INVALID_DURATION", - `Preset "${r.id}" has invalid turnsRemaining "${String(r.turnsRemaining)}" (must be a positive integer or null).` - ); - } - } - } - /** - * Returns the list of preset definitions that apply to moves made by - * the given color right now. Presets with `scope=both` are included for - * both colors; `scope=white` only for white; `scope=black` only for - * black. This is what ChessEngine.getAllLegalMoves calls per piece. - */ - getForColor(color) { - const out = []; - for (const entry of this.entries.values()) { - if (entry.scope !== "both" && entry.scope !== color) continue; - const def = __vite_ssr_import_0__.PRESET_REGISTRY.get(entry.id); - if (def) out.push(def); - }; - return out; - } - /** - * Called by ChessEngine.applyMove AFTER the move is applied, with the - * color that just moved (NOT the new side to move). Decrements every - * entry whose scope applies to `moverColor` and removes entries whose - * `turnsRemaining` reaches 0. - * - * This implements the "player-local turns" policy: a `scope=white` - * preset ticks only after white moves; `scope=both` ticks on every - * half-move. - * - * Returns the list of ids that expired during this tick so the engine - * can fire the preset `onDeactivate` lifecycle hook against them. The - * ActivePresetSet itself stays engine-unaware — the hook dispatch is - * strictly a ChessEngine concern. - */ - tickAfterMove(moverColor) { - const toRemove = []; - for (const entry of this.entries.values()) { - if (entry.scope !== "both" && entry.scope !== moverColor) continue; - if (entry.turnsRemaining === null) continue; - const next = entry.turnsRemaining - 1; - if (next <= 0) { - toRemove.push(entry.id); - } else { - this.entries.set(entry.id, { ...entry, turnsRemaining: next }); - } - }; - for (const id of toRemove) this.entries.delete(id); - return toRemove; - } - /** All active entries, in registration order. Used by UI + wire sync. */ - list() { - return [...this.entries.values()]; - } - /** Fast "is X active under any scope?" query — mainly for tests. */ - has(id) { - return this.entries.has(id); - } - /** Remove everything — used on new-game / engine swap. */ - clear() { - this.entries.clear(); - } - /** Deep copy — used by PredictionManager when cloning engines. */ - clone() { - const next = new ActivePresetSet(); - for (const entry of this.entries.values()) { - next.entries.set(entry.id, { ...entry }); - }; - return next; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7QUErQkE7QUE0QkEsU0FBUyxjQUFjLEdBQWdCLEdBQXlCO0FBQzlELE1BQUksTUFBTSxVQUFVLE1BQU0sT0FBUSxRQUFPO0FBQ3pDLFNBQU8sTUFBTTtBQUNmO0FBTU8sTUFBTSw4QkFBOEIsTUFBTTtBQUFBLEVBQ3RDO0FBQUEsRUFNVCxZQUFZLE1BQXFDLFNBQWlCO0FBQ2hFLFVBQU0sT0FBTztBQUNiLFNBQUssT0FBTztBQUNaLFNBQUssT0FBTztBQUFBLEVBQ2Q7QUFDRjtBQUVPLE1BQU0sZ0JBQWdCO0FBQUEsRUFDVixVQUFVLG9CQUFJLElBQThCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFXN0QsV0FBVyxVQUE4QztBQUd2RCxlQUFXLEtBQUssVUFBVTtBQUN4QixXQUFLLGVBQWUsQ0FBQztBQUFBLElBQ3ZCO0FBSUEsZUFBVyxLQUFLLFVBQVU7QUFDeEIsWUFBTSxNQUFNLHNDQUFnQixJQUFJLEVBQUUsRUFBRTtBQUNwQyxVQUFJLENBQUMsSUFBSztBQUVWLGlCQUFXLFNBQVMsVUFBVTtBQUM1QixZQUFJLE1BQU0sT0FBTyxFQUFFLEdBQUk7QUFDdkIsWUFBSSxJQUFJLGlCQUFpQixTQUFTLE1BQU0sRUFBRSxLQUFLLGNBQWMsRUFBRSxPQUFPLE1BQU0sS0FBSyxHQUFHO0FBQ2xGLGdCQUFNLElBQUk7QUFBQSxZQUNSO0FBQUEsWUFDQSxXQUFXLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSywyQkFBMkIsTUFBTSxFQUFFLFlBQVksTUFBTSxLQUFLO0FBQUEsVUFDOUY7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLGlCQUFXLE9BQU8sSUFBSSxVQUFVO0FBQzlCLGNBQU0sTUFBTSxTQUFTO0FBQUEsVUFDbkIsQ0FBQyxPQUFPLEdBQUcsT0FBTyxPQUFPLGNBQWMsR0FBRyxPQUFPLEVBQUUsS0FBSztBQUFBLFFBQzFEO0FBQ0EsWUFBSSxDQUFDLEtBQUs7QUFDUixnQkFBTSxJQUFJO0FBQUEsWUFDUjtBQUFBLFlBQ0EsV0FBVyxFQUFFLEVBQUUsZUFBZSxHQUFHO0FBQUEsVUFDbkM7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFHQSxTQUFLLFFBQVEsTUFBTTtBQUNuQixlQUFXLEtBQUssVUFBVTtBQUN4QixXQUFLLFFBQVEsSUFBSSxFQUFFLElBQUk7QUFBQSxRQUNyQixJQUFJLEVBQUU7QUFBQSxRQUNOLE9BQU8sRUFBRTtBQUFBLFFBQ1QsZ0JBQWdCLEVBQUU7QUFBQSxNQUNwQixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFBQSxFQUVRLGVBQWUsR0FBNEI7QUFDakQsVUFBTSxNQUFNLHNDQUFnQixJQUFJLEVBQUUsRUFBRTtBQUNwQyxRQUFJLENBQUMsS0FBSztBQUNSLFlBQU0sSUFBSTtBQUFBLFFBQ1I7QUFBQSxRQUNBLFdBQVcsRUFBRSxFQUFFO0FBQUEsTUFDakI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxFQUFFLFVBQVUsVUFBVSxFQUFFLFVBQVUsV0FBVyxFQUFFLFVBQVUsU0FBUztBQUNwRSxZQUFNLElBQUk7QUFBQSxRQUNSO0FBQUEsUUFDQSxXQUFXLEVBQUUsRUFBRSx3QkFBd0IsT0FBTyxFQUFFLEtBQUssQ0FBQztBQUFBLE1BQ3hEO0FBQUEsSUFDRjtBQUNBLFFBQUksRUFBRSxtQkFBbUIsTUFBTTtBQUM3QixVQUNFLENBQUMsT0FBTyxVQUFVLEVBQUUsY0FBYyxLQUNsQyxFQUFFLGtCQUFrQixHQUNwQjtBQUNBLGNBQU0sSUFBSTtBQUFBLFVBQ1I7QUFBQSxVQUNBLFdBQVcsRUFBRSxFQUFFLGlDQUFpQyxPQUFPLEVBQUUsY0FBYyxDQUFDO0FBQUEsUUFDMUU7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFBLFlBQVksT0FBdUM7QUFDakQsVUFBTSxNQUFtQixDQUFDO0FBQzFCLGVBQVcsU0FBUyxLQUFLLFFBQVEsT0FBTyxHQUFHO0FBQ3pDLFVBQUksTUFBTSxVQUFVLFVBQVUsTUFBTSxVQUFVLE1BQU87QUFDckQsWUFBTSxNQUFNLHNDQUFnQixJQUFJLE1BQU0sRUFBRTtBQUN4QyxVQUFJLElBQUssS0FBSSxLQUFLLEdBQUc7QUFBQSxJQUN2QjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFpQkEsY0FBYyxZQUF5QztBQUNyRCxVQUFNLFdBQXFCLENBQUM7QUFDNUIsZUFBVyxTQUFTLEtBQUssUUFBUSxPQUFPLEdBQUc7QUFDekMsVUFBSSxNQUFNLFVBQVUsVUFBVSxNQUFNLFVBQVUsV0FBWTtBQUMxRCxVQUFJLE1BQU0sbUJBQW1CLEtBQU07QUFDbkMsWUFBTSxPQUFPLE1BQU0saUJBQWlCO0FBQ3BDLFVBQUksUUFBUSxHQUFHO0FBQ2IsaUJBQVMsS0FBSyxNQUFNLEVBQUU7QUFBQSxNQUN4QixPQUFPO0FBQ0wsYUFBSyxRQUFRLElBQUksTUFBTSxJQUFJLEVBQUUsR0FBRyxPQUFPLGdCQUFnQixLQUFLLENBQUM7QUFBQSxNQUMvRDtBQUFBLElBQ0Y7QUFDQSxlQUFXLE1BQU0sU0FBVSxNQUFLLFFBQVEsT0FBTyxFQUFFO0FBQ2pELFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQSxFQUdBLE9BQTJCO0FBQ3pCLFdBQU8sQ0FBQyxHQUFHLEtBQUssUUFBUSxPQUFPLENBQUM7QUFBQSxFQUNsQztBQUFBO0FBQUEsRUFHQSxJQUFJLElBQXFCO0FBQ3ZCLFdBQU8sS0FBSyxRQUFRLElBQUksRUFBRTtBQUFBLEVBQzVCO0FBQUE7QUFBQSxFQUdBLFFBQWM7QUFDWixTQUFLLFFBQVEsTUFBTTtBQUFBLEVBQ3JCO0FBQUE7QUFBQSxFQUdBLFFBQXlCO0FBQ3ZCLFVBQU0sT0FBTyxJQUFJLGdCQUFnQjtBQUNqQyxlQUFXLFNBQVMsS0FBSyxRQUFRLE9BQU8sR0FBRztBQUN6QyxXQUFLLFFBQVEsSUFBSSxNQUFNLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUFBLElBQ3pDO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFDRiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiYWN0aXZlLXNldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBlci1nYW1lIGFjdGl2ZSBwcmVzZXQgdHJhY2tpbmcuXG4gKlxuICogRWFybGllciBpdGVyYXRpb25zIG9mIHRoZSBwcmVzZXQgc3lzdGVtIHVzZWQgYSBtb2R1bGUtbGV2ZWxcbiAqIGBQUkVTRVRfUkVHSVNUUlkuYWN0aXZlOiBTZXQ8c3RyaW5nPmAgd2hpY2ggd2FzIHNoYXJlZCBieSBldmVyeVxuICogQ2hlc3NFbmdpbmUgaW4gdGhlIHByb2Nlc3Mg4oCUIGZpbmUgZm9yIHRoZSBicm93c2VyLCBidXQgd3JvbmcgZm9yIHRoZVxuICogc2VydmVyIHdoZXJlIGEgc2luZ2xlIHByb2Nlc3MgaG9zdHMgbXVsdGlwbGUgY29uY3VycmVudCByb29tcyB3aXRoXG4gKiBkaWZmZXJlbnQgcnVsZSBzZXRzLiBJdCBhbHNvIGNvdWxkbid0IGV4cHJlc3MgcGVyLWNvbG9yIHNjb3BlIG9yXG4gKiB0dXJuLWxpbWl0ZWQgZHVyYXRpb25zLlxuICpcbiAqIGBBY3RpdmVQcmVzZXRTZXRgIHJlcGxhY2VzIHRoYXQgc2hhcmVkIFNldCB3aXRoIGFuIElOU1RBTkNFIGhlbGQgYnlcbiAqIGVhY2ggYEdhbWVTZXNzaW9uYCAvIGBDaGVzc0VuZ2luZWAuIEl0IHRyYWNrczpcbiAqXG4gKiAgIC0gd2hpY2ggcHJlc2V0cyBhcmUgYWN0aXZlLFxuICogICAtIGZvciB3aGljaCBjb2xvciB0aGV5IGFwcGx5IChgYm90aGAgfCBgd2hpdGVgIHwgYGJsYWNrYCksXG4gKiAgIC0gaG93IG1hbnkgb2YgdGhhdCBjb2xvcidzIHVwY29taW5nIHR1cm5zIHRoZXkgcmVtYWluIGFjdGl2ZVxuICogICAgIChgbnVsbGAgPSBwZXJtYW5lbnQpLlxuICpcbiAqIFRoZSBwZXItY29sb3ItdHVybiBjb3VudGluZyBwb2xpY3kgbWF0Y2hlcyB0aGUgdXNlcidzIGNvbmZpcm1lZFxuICogZGVzaWduOiBmb3IgYSBgd2hpdGVgLXNjb3BlZCBwcmVzZXQsIG9uZSBcInRpY2tcIiBoYXBwZW5zIGFmdGVyIGVhY2hcbiAqIHdoaXRlIG1vdmUgKG5vdCBlYWNoIGhhbGYtbW92ZSkuIEZvciBgYm90aGAtc2NvcGVkIHByZXNldHMgd2UgdGlja1xuICogb24gZXZlcnkgaGFsZi1tb3ZlLiBUaGlzIGlzIHdoYXQgdGhlIHBsYW4gY2FsbHMgXCJwbGF5ZXItbG9jYWwgdHVybnNcIi5cbiAqXG4gKiBDb21wYXRpYmlsaXR5IHVzZXMgdGhlIExPT1NFIHJ1bGU6IHR3byBwcmVzZXRzIHRoYXQgbGlzdCBlYWNoIG90aGVyXG4gKiBpbiBgaW5jb21wYXRpYmxlV2l0aGAgbWF5IHN0aWxsIGNvZXhpc3QgaWYgdGhlaXIgU0NPUEVTIGRvbid0XG4gKiBvdmVybGFwIOKAlCBlLmcuIGBBIHNjb3BlPXdoaXRlYCArIGBCIHNjb3BlPWJsYWNrYCBpcyBhbGxvd2VkIGV2ZW5cbiAqIHdoZW4gQSBhbmQgQiBhcmUgbm9taW5hbGx5IGluY29tcGF0aWJsZSwgYmVjYXVzZSB0aGUgZW5naW5lIG9ubHlcbiAqIGV2ZXIgZXZhbHVhdGVzIG9uZSBzaWRlJ3MgcnVsZXMgYXQgYSB0aW1lLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJlc2V0RGVmIH0gZnJvbSBcIi4vcmVnaXN0cnkuanNcIjtcbmltcG9ydCB7IFBSRVNFVF9SRUdJU1RSWSB9IGZyb20gXCIuL3JlZ2lzdHJ5LmpzXCI7XG5cbmV4cG9ydCB0eXBlIFByZXNldFNjb3BlID0gXCJib3RoXCIgfCBcIndoaXRlXCIgfCBcImJsYWNrXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlc2V0QWN0aXZhdGlvbiB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNjb3BlOiBQcmVzZXRTY29wZTtcbiAgLyoqIE51bWJlciBvZiBwbGF5ZXItbG9jYWwgdHVybnMgcmVtYWluaW5nLiBgbnVsbGAgPSBwZXJtYW5lbnQuICovXG4gIHJlYWRvbmx5IHR1cm5zUmVtYWluaW5nOiBudW1iZXIgfCBudWxsO1xufVxuXG4vKiogSW5wdXQtc2hhcGUgd2hlbiB0aGUgVUkgLyB3aXJlIHByb3RvY29sIGFza3MgdG8gKHJlKWFjdGl2YXRlIGEgcHJlc2V0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3RpdmF0aW9uUmVxdWVzdCB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNjb3BlOiBQcmVzZXRTY29wZTtcbiAgLyoqIFBsYXllci1sb2NhbCB0dXJucyB0aGUgcHJlc2V0IHNob3VsZCBsYXN0LiBgbnVsbGAgPSBwZXJtYW5lbnQuICovXG4gIHJlYWRvbmx5IHR1cm5zUmVtYWluaW5nOiBudW1iZXIgfCBudWxsO1xufVxuXG4vKiogV2lyZS1zZXJpYWxpemFibGUgc25hcHNob3Qg4oCUIGlkZW50aWNhbCBzaGFwZSB0b2RheTsga2VwdCBhcyBpdHMgb3duXG4gKiAgbmFtZSBzbyBkb3duc3RyZWFtIHByb3RvY29sIHR5cGVzIGNhbiBhbGlhcyBpdC4gKi9cbmV4cG9ydCB0eXBlIEFjdGl2YXRpb25FbnRyeSA9IFByZXNldEFjdGl2YXRpb247XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmZiBgYWAncyBzY29wZSBhbmQgYGJgJ3Mgc2NvcGUgaW50ZXJzZWN0IOKAlCBpLmUuIHRoZXJlIGlzXG4gKiBhdCBsZWFzdCBvbmUgY29sb3Igd2hlcmUgQk9USCBwcmVzZXRzIGFyZSBhY3RpdmUgYW5kIHdvdWxkIGJlIGFwcGxpZWRcbiAqIHRvIHRoZSBzYW1lIHNpZGUncyBtb3ZlcyBpbiB0aGUgc2FtZSB0dXJuLlxuICovXG5mdW5jdGlvbiBzY29wZXNPdmVybGFwKGE6IFByZXNldFNjb3BlLCBiOiBQcmVzZXRTY29wZSk6IGJvb2xlYW4ge1xuICBpZiAoYSA9PT0gXCJib3RoXCIgfHwgYiA9PT0gXCJib3RoXCIpIHJldHVybiB0cnVlO1xuICByZXR1cm4gYSA9PT0gYjtcbn1cblxuLyoqXG4gKiBFeHRyYWN0ZWQgZm9yIHRlc3RpbmcgYW5kIGZvciB0aGUgc2VydmVyIHRvIHJlamVjdCBiYWQgcmVxdWVzdHMgd2l0aCBhXG4gKiBzcGVjaWZpYyByZWFzb24uIFRocm93biBmcm9tIGBBY3RpdmVQcmVzZXRTZXQuYWN0aXZhdGVgLlxuICovXG5leHBvcnQgY2xhc3MgUHJlc2V0QWN0aXZhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlOlxuICAgIHwgXCJVTktOT1dOX1BSRVNFVFwiXG4gICAgfCBcIklOQ09NUEFUSUJMRVwiXG4gICAgfCBcIk1JU1NJTkdfUkVRVUlSRU1FTlRcIlxuICAgIHwgXCJJTlZBTElEX1NDT1BFXCJcbiAgICB8IFwiSU5WQUxJRF9EVVJBVElPTlwiO1xuICBjb25zdHJ1Y3Rvcihjb2RlOiBQcmVzZXRBY3RpdmF0aW9uRXJyb3JbXCJjb2RlXCJdLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSBcIlByZXNldEFjdGl2YXRpb25FcnJvclwiO1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGl2ZVByZXNldFNldCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW50cmllcyA9IG5ldyBNYXA8c3RyaW5nLCBQcmVzZXRBY3RpdmF0aW9uPigpO1xuXG4gIC8qKlxuICAgKiBSZXBsYWNlIHRoZSBlbnRpcmUgYWN0aXZlIHNldCB3aXRoIGByZXF1ZXN0c2AuIFVzZWQgYnkgdGhlIHNlcnZlcidzXG4gICAqIGF1dGhvcml0YXRpdmUgcGF0aCBhbmQgYnkgY2xpZW50IHN5bmMgb24gYGdhbWUucHJlc2V0c2AuIFZhbGlkYXRlc1xuICAgKiBlYWNoIGVudHJ5IGluZGl2aWR1YWxseSBBTkQgdGhlIHdob2xlIHNldCB0b2dldGhlciAoc28gY3Jvc3MtcHJlc2V0XG4gICAqIGluY29tcGF0aWJpbGl0aWVzIGFyZSBjYXVnaHQgYmVmb3JlIGFueSBtdXRhdGlvbikuXG4gICAqXG4gICAqIE9uIGZhaWx1cmUgdGhlIGV4aXN0aW5nIHNldCBpcyB1bnRvdWNoZWQg4oCUIGVycm9ycyBhYm9ydCB0aGUgZW50aXJlXG4gICAqIHJlcGxhY2VtZW50IHNvIHRoZSBjYWxsZXIgbmV2ZXIgb2JzZXJ2ZXMgYSBoYWxmLWFwcGxpZWQgc3RhdGUuXG4gICAqL1xuICByZXBsYWNlQWxsKHJlcXVlc3RzOiByZWFkb25seSBBY3RpdmF0aW9uUmVxdWVzdFtdKTogdm9pZCB7XG4gICAgLy8gVmFsaWRhdGUgZWFjaCByZXF1ZXN0IGluIGlzb2xhdGlvbiBmaXJzdCAocHJlc2V0IGV4aXN0cywgc2NvcGVcbiAgICAvLyBsZWdhbCwgZHVyYXRpb24gbGVnYWwpLlxuICAgIGZvciAoY29uc3QgciBvZiByZXF1ZXN0cykge1xuICAgICAgdGhpcy52YWxpZGF0ZVNpbmdsZShyKTtcbiAgICB9XG5cbiAgICAvLyBUaGVuIHBhaXJ3aXNlOiBgaW5jb21wYXRpYmxlV2l0aGAgYmxvY2tzIG9ubHkgd2hlbiBzY29wZXMgb3ZlcmxhcDtcbiAgICAvLyBgcmVxdWlyZXNgIG11c3QgaG9sZCB3aXRoIG92ZXJsYXBwaW5nIHNjb3BlLlxuICAgIGZvciAoY29uc3QgciBvZiByZXF1ZXN0cykge1xuICAgICAgY29uc3QgZGVmID0gUFJFU0VUX1JFR0lTVFJZLmdldChyLmlkKTtcbiAgICAgIGlmICghZGVmKSBjb250aW51ZTsgLy8gdmFsaWRhdGVTaW5nbGUgYWxyZWFkeSB0aHJldyBpZiBtaXNzaW5nXG5cbiAgICAgIGZvciAoY29uc3Qgb3RoZXIgb2YgcmVxdWVzdHMpIHtcbiAgICAgICAgaWYgKG90aGVyLmlkID09PSByLmlkKSBjb250aW51ZTtcbiAgICAgICAgaWYgKGRlZi5pbmNvbXBhdGlibGVXaXRoLmluY2x1ZGVzKG90aGVyLmlkKSAmJiBzY29wZXNPdmVybGFwKHIuc2NvcGUsIG90aGVyLnNjb3BlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBQcmVzZXRBY3RpdmF0aW9uRXJyb3IoXG4gICAgICAgICAgICBcIklOQ09NUEFUSUJMRVwiLFxuICAgICAgICAgICAgYFByZXNldCBcIiR7ci5pZH1cIiAoc2NvcGU9JHtyLnNjb3BlfSkgaXMgaW5jb21wYXRpYmxlIHdpdGggXCIke290aGVyLmlkfVwiIChzY29wZT0ke290aGVyLnNjb3BlfSkgdW5kZXIgb3ZlcmxhcHBpbmcgc2NvcGUuYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZGVwIG9mIGRlZi5yZXF1aXJlcykge1xuICAgICAgICBjb25zdCBtZXQgPSByZXF1ZXN0cy5zb21lKFxuICAgICAgICAgIChycSkgPT4gcnEuaWQgPT09IGRlcCAmJiBzY29wZXNPdmVybGFwKHJxLnNjb3BlLCByLnNjb3BlKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFtZXQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUHJlc2V0QWN0aXZhdGlvbkVycm9yKFxuICAgICAgICAgICAgXCJNSVNTSU5HX1JFUVVJUkVNRU5UXCIsXG4gICAgICAgICAgICBgUHJlc2V0IFwiJHtyLmlkfVwiIHJlcXVpcmVzIFwiJHtkZXB9XCIgdG8gYWxzbyBiZSBhY3RpdmUgdW5kZXIgYW4gb3ZlcmxhcHBpbmcgc2NvcGUuYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWxsIHZhbGlkIOKAlCBzd2FwIGF0b21pY2FsbHkuXG4gICAgdGhpcy5lbnRyaWVzLmNsZWFyKCk7XG4gICAgZm9yIChjb25zdCByIG9mIHJlcXVlc3RzKSB7XG4gICAgICB0aGlzLmVudHJpZXMuc2V0KHIuaWQsIHtcbiAgICAgICAgaWQ6IHIuaWQsXG4gICAgICAgIHNjb3BlOiByLnNjb3BlLFxuICAgICAgICB0dXJuc1JlbWFpbmluZzogci50dXJuc1JlbWFpbmluZyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVTaW5nbGUocjogQWN0aXZhdGlvblJlcXVlc3QpOiB2b2lkIHtcbiAgICBjb25zdCBkZWYgPSBQUkVTRVRfUkVHSVNUUlkuZ2V0KHIuaWQpO1xuICAgIGlmICghZGVmKSB7XG4gICAgICB0aHJvdyBuZXcgUHJlc2V0QWN0aXZhdGlvbkVycm9yKFxuICAgICAgICBcIlVOS05PV05fUFJFU0VUXCIsXG4gICAgICAgIGBQcmVzZXQgXCIke3IuaWR9XCIgaXMgbm90IHJlZ2lzdGVyZWQuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChyLnNjb3BlICE9PSBcImJvdGhcIiAmJiByLnNjb3BlICE9PSBcIndoaXRlXCIgJiYgci5zY29wZSAhPT0gXCJibGFja1wiKSB7XG4gICAgICB0aHJvdyBuZXcgUHJlc2V0QWN0aXZhdGlvbkVycm9yKFxuICAgICAgICBcIklOVkFMSURfU0NPUEVcIixcbiAgICAgICAgYFByZXNldCBcIiR7ci5pZH1cIiBoYXMgaW52YWxpZCBzY29wZSBcIiR7U3RyaW5nKHIuc2NvcGUpfVwiLmAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoci50dXJuc1JlbWFpbmluZyAhPT0gbnVsbCkge1xuICAgICAgaWYgKFxuICAgICAgICAhTnVtYmVyLmlzSW50ZWdlcihyLnR1cm5zUmVtYWluaW5nKSB8fFxuICAgICAgICByLnR1cm5zUmVtYWluaW5nIDw9IDBcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgUHJlc2V0QWN0aXZhdGlvbkVycm9yKFxuICAgICAgICAgIFwiSU5WQUxJRF9EVVJBVElPTlwiLFxuICAgICAgICAgIGBQcmVzZXQgXCIke3IuaWR9XCIgaGFzIGludmFsaWQgdHVybnNSZW1haW5pbmcgXCIke1N0cmluZyhyLnR1cm5zUmVtYWluaW5nKX1cIiAobXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgbnVsbCkuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBwcmVzZXQgZGVmaW5pdGlvbnMgdGhhdCBhcHBseSB0byBtb3ZlcyBtYWRlIGJ5XG4gICAqIHRoZSBnaXZlbiBjb2xvciByaWdodCBub3cuIFByZXNldHMgd2l0aCBgc2NvcGU9Ym90aGAgYXJlIGluY2x1ZGVkIGZvclxuICAgKiBib3RoIGNvbG9yczsgYHNjb3BlPXdoaXRlYCBvbmx5IGZvciB3aGl0ZTsgYHNjb3BlPWJsYWNrYCBvbmx5IGZvclxuICAgKiBibGFjay4gVGhpcyBpcyB3aGF0IENoZXNzRW5naW5lLmdldEFsbExlZ2FsTW92ZXMgY2FsbHMgcGVyIHBpZWNlLlxuICAgKi9cbiAgZ2V0Rm9yQ29sb3IoY29sb3I6IFwid2hpdGVcIiB8IFwiYmxhY2tcIik6IFByZXNldERlZltdIHtcbiAgICBjb25zdCBvdXQ6IFByZXNldERlZltdID0gW107XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXMudmFsdWVzKCkpIHtcbiAgICAgIGlmIChlbnRyeS5zY29wZSAhPT0gXCJib3RoXCIgJiYgZW50cnkuc2NvcGUgIT09IGNvbG9yKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGRlZiA9IFBSRVNFVF9SRUdJU1RSWS5nZXQoZW50cnkuaWQpO1xuICAgICAgaWYgKGRlZikgb3V0LnB1c2goZGVmKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYnkgQ2hlc3NFbmdpbmUuYXBwbHlNb3ZlIEFGVEVSIHRoZSBtb3ZlIGlzIGFwcGxpZWQsIHdpdGggdGhlXG4gICAqIGNvbG9yIHRoYXQganVzdCBtb3ZlZCAoTk9UIHRoZSBuZXcgc2lkZSB0byBtb3ZlKS4gRGVjcmVtZW50cyBldmVyeVxuICAgKiBlbnRyeSB3aG9zZSBzY29wZSBhcHBsaWVzIHRvIGBtb3ZlckNvbG9yYCBhbmQgcmVtb3ZlcyBlbnRyaWVzIHdob3NlXG4gICAqIGB0dXJuc1JlbWFpbmluZ2AgcmVhY2hlcyAwLlxuICAgKlxuICAgKiBUaGlzIGltcGxlbWVudHMgdGhlIFwicGxheWVyLWxvY2FsIHR1cm5zXCIgcG9saWN5OiBhIGBzY29wZT13aGl0ZWBcbiAgICogcHJlc2V0IHRpY2tzIG9ubHkgYWZ0ZXIgd2hpdGUgbW92ZXM7IGBzY29wZT1ib3RoYCB0aWNrcyBvbiBldmVyeVxuICAgKiBoYWxmLW1vdmUuXG4gICAqXG4gICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgaWRzIHRoYXQgZXhwaXJlZCBkdXJpbmcgdGhpcyB0aWNrIHNvIHRoZSBlbmdpbmVcbiAgICogY2FuIGZpcmUgdGhlIHByZXNldCBgb25EZWFjdGl2YXRlYCBsaWZlY3ljbGUgaG9vayBhZ2FpbnN0IHRoZW0uIFRoZVxuICAgKiBBY3RpdmVQcmVzZXRTZXQgaXRzZWxmIHN0YXlzIGVuZ2luZS11bmF3YXJlIOKAlCB0aGUgaG9vayBkaXNwYXRjaCBpc1xuICAgKiBzdHJpY3RseSBhIENoZXNzRW5naW5lIGNvbmNlcm4uXG4gICAqL1xuICB0aWNrQWZ0ZXJNb3ZlKG1vdmVyQ29sb3I6IFwid2hpdGVcIiB8IFwiYmxhY2tcIik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB0b1JlbW92ZTogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllcy52YWx1ZXMoKSkge1xuICAgICAgaWYgKGVudHJ5LnNjb3BlICE9PSBcImJvdGhcIiAmJiBlbnRyeS5zY29wZSAhPT0gbW92ZXJDb2xvcikgY29udGludWU7XG4gICAgICBpZiAoZW50cnkudHVybnNSZW1haW5pbmcgPT09IG51bGwpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgbmV4dCA9IGVudHJ5LnR1cm5zUmVtYWluaW5nIC0gMTtcbiAgICAgIGlmIChuZXh0IDw9IDApIHtcbiAgICAgICAgdG9SZW1vdmUucHVzaChlbnRyeS5pZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVudHJpZXMuc2V0KGVudHJ5LmlkLCB7IC4uLmVudHJ5LCB0dXJuc1JlbWFpbmluZzogbmV4dCB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBpZCBvZiB0b1JlbW92ZSkgdGhpcy5lbnRyaWVzLmRlbGV0ZShpZCk7XG4gICAgcmV0dXJuIHRvUmVtb3ZlO1xuICB9XG5cbiAgLyoqIEFsbCBhY3RpdmUgZW50cmllcywgaW4gcmVnaXN0cmF0aW9uIG9yZGVyLiBVc2VkIGJ5IFVJICsgd2lyZSBzeW5jLiAqL1xuICBsaXN0KCk6IFByZXNldEFjdGl2YXRpb25bXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmVudHJpZXMudmFsdWVzKCldO1xuICB9XG5cbiAgLyoqIEZhc3QgXCJpcyBYIGFjdGl2ZSB1bmRlciBhbnkgc2NvcGU/XCIgcXVlcnkg4oCUIG1haW5seSBmb3IgdGVzdHMuICovXG4gIGhhcyhpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW50cmllcy5oYXMoaWQpO1xuICB9XG5cbiAgLyoqIFJlbW92ZSBldmVyeXRoaW5nIOKAlCB1c2VkIG9uIG5ldy1nYW1lIC8gZW5naW5lIHN3YXAuICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuZW50cmllcy5jbGVhcigpO1xuICB9XG5cbiAgLyoqIERlZXAgY29weSDigJQgdXNlZCBieSBQcmVkaWN0aW9uTWFuYWdlciB3aGVuIGNsb25pbmcgZW5naW5lcy4gKi9cbiAgY2xvbmUoKTogQWN0aXZlUHJlc2V0U2V0IHtcbiAgICBjb25zdCBuZXh0ID0gbmV3IEFjdGl2ZVByZXNldFNldCgpO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzLnZhbHVlcygpKSB7XG4gICAgICBuZXh0LmVudHJpZXMuc2V0KGVudHJ5LmlkLCB7IC4uLmVudHJ5IH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dDtcbiAgfVxufVxuIl0sImZpbGUiOiIvc3JjL3ByZXNldHMvYWN0aXZlLXNldC50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/70308924277a8722c76c082d2896c0b0afd5ae07 b/7xOfJqsDU787fe61oSCq1/web/70308924277a8722c76c082d2896c0b0afd5ae07 deleted file mode 100644 index 4f052df..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/70308924277a8722c76c082d2896c0b0afd5ae07 +++ /dev/null @@ -1,53 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/rules/stalemate.ts", {"importedNames":["isStalemate"]}); -const mkId = (n) => n; -function insertPiece(s, id, type, color, sq) { - const eid = mkId(id); - s.insert(eid, "PieceType", type); - s.insert(eid, "Color", color); - s.insert(eid, "Position", sq); - return eid; -} -(0,__vite_ssr_import_0__.describe)("isStalemate", () => { - (0,__vite_ssr_import_0__.it)("classic stalemate: king at h8 with enemy queen on g6, not in check, no legal moves", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "king", "white", 63); - insertPiece(session, 2, "queen", "black", 46); - insertPiece(session, 3, "king", "black", 0); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isStalemate)(session, "white")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("NOT stalemate when side is in check", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "king", "white", 4); - insertPiece(session, 2, "rook", "black", 60); - insertPiece(session, 3, "king", "black", 56); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isStalemate)(session, "white")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("NOT stalemate when king has legal escape squares", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "king", "white", 4); - insertPiece(session, 2, "king", "black", 60); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isStalemate)(session, "white")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("checkmate position is NOT stalemate (in check disqualifies)", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "king", "white", 7); - insertPiece(session, 2, "pawn", "white", 14); - insertPiece(session, 3, "pawn", "white", 15); - insertPiece(session, 4, "rook", "black", 0); - insertPiece(session, 5, "king", "black", 56); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isStalemate)(session, "white")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("stalemate check is color-specific", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "king", "white", 63); - insertPiece(session, 2, "queen", "black", 46); - insertPiece(session, 3, "king", "black", 0); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isStalemate)(session, "white")).toBe(true); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isStalemate)(session, "black")).toBe(false); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBT0E7QUFDQTtBQUVBO0FBRUEsTUFBTSxPQUFPLENBQUMsTUFBYztBQUU1QixTQUFTLFlBQ1AsR0FDQSxJQUNBLE1BQ0EsT0FDQSxJQUNVO0FBQ1YsUUFBTSxNQUFNLEtBQUssRUFBRTtBQUNuQixJQUFFLE9BQU8sS0FBSyxhQUFhLElBQUk7QUFDL0IsSUFBRSxPQUFPLEtBQUssU0FBUyxLQUFLO0FBQzVCLElBQUUsT0FBTyxLQUFLLFlBQVksRUFBRTtBQUM1QixTQUFPO0FBQ1Q7R0FFQSxnQ0FBUyxlQUFlLE1BQU07QUFDNUIsK0JBQUcsc0ZBQXNGLE1BQU07QUFDN0YsVUFBTSxVQUFVLElBQUksOEJBQVEsRUFBRSxVQUFVLE1BQU0sQ0FBQztBQUkvQyxnQkFBWSxTQUFTLEdBQUcsUUFBUSxTQUFTLEVBQUU7QUFDM0MsZ0JBQVksU0FBUyxHQUFHLFNBQVMsU0FBUyxFQUFFO0FBRzVDLGdCQUFZLFNBQVMsR0FBRyxRQUFRLFNBQVMsQ0FBQztBQUMxQyx3Q0FBTyxtQ0FBWSxTQUFTLE9BQU8sQ0FBQyxFQUFFLEtBQUssSUFBSTtBQUFBLEVBQ2pELENBQUM7QUFFRCwrQkFBRyx1Q0FBdUMsTUFBTTtBQUM5QyxVQUFNLFVBQVUsSUFBSSw4QkFBUSxFQUFFLFVBQVUsTUFBTSxDQUFDO0FBQy9DLGdCQUFZLFNBQVMsR0FBRyxRQUFRLFNBQVMsQ0FBQztBQUMxQyxnQkFBWSxTQUFTLEdBQUcsUUFBUSxTQUFTLEVBQUU7QUFDM0MsZ0JBQVksU0FBUyxHQUFHLFFBQVEsU0FBUyxFQUFFO0FBQzNDLHdDQUFPLG1DQUFZLFNBQVMsT0FBTyxDQUFDLEVBQUUsS0FBSyxLQUFLO0FBQUEsRUFDbEQsQ0FBQztBQUVELCtCQUFHLG9EQUFvRCxNQUFNO0FBQzNELFVBQU0sVUFBVSxJQUFJLDhCQUFRLEVBQUUsVUFBVSxNQUFNLENBQUM7QUFDL0MsZ0JBQVksU0FBUyxHQUFHLFFBQVEsU0FBUyxDQUFDO0FBQzFDLGdCQUFZLFNBQVMsR0FBRyxRQUFRLFNBQVMsRUFBRTtBQUMzQyx3Q0FBTyxtQ0FBWSxTQUFTLE9BQU8sQ0FBQyxFQUFFLEtBQUssS0FBSztBQUFBLEVBQ2xELENBQUM7QUFFRCwrQkFBRywrREFBK0QsTUFBTTtBQUN0RSxVQUFNLFVBQVUsSUFBSSw4QkFBUSxFQUFFLFVBQVUsTUFBTSxDQUFDO0FBSy9DLGdCQUFZLFNBQVMsR0FBRyxRQUFRLFNBQVMsQ0FBQztBQUMxQyxnQkFBWSxTQUFTLEdBQUcsUUFBUSxTQUFTLEVBQUU7QUFDM0MsZ0JBQVksU0FBUyxHQUFHLFFBQVEsU0FBUyxFQUFFO0FBQzNDLGdCQUFZLFNBQVMsR0FBRyxRQUFRLFNBQVMsQ0FBQztBQUMxQyxnQkFBWSxTQUFTLEdBQUcsUUFBUSxTQUFTLEVBQUU7QUFFM0Msd0NBQU8sbUNBQVksU0FBUyxPQUFPLENBQUMsRUFBRSxLQUFLLEtBQUs7QUFBQSxFQUNsRCxDQUFDO0FBRUQsK0JBQUcscUNBQXFDLE1BQU07QUFDNUMsVUFBTSxVQUFVLElBQUksOEJBQVEsRUFBRSxVQUFVLE1BQU0sQ0FBQztBQUcvQyxnQkFBWSxTQUFTLEdBQUcsUUFBUSxTQUFTLEVBQUU7QUFDM0MsZ0JBQVksU0FBUyxHQUFHLFNBQVMsU0FBUyxFQUFFO0FBQzVDLGdCQUFZLFNBQVMsR0FBRyxRQUFRLFNBQVMsQ0FBQztBQUMxQyx3Q0FBTyxtQ0FBWSxTQUFTLE9BQU8sQ0FBQyxFQUFFLEtBQUssSUFBSTtBQUMvQyx3Q0FBTyxtQ0FBWSxTQUFTLE9BQU8sQ0FBQyxFQUFFLEtBQUssS0FBSztBQUFBLEVBQ2xELENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJzdGFsZW1hdGUudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRlc3RzIGZvciBzdGFsZW1hdGUgZGV0ZWN0aW9uIChQMi4yMCkuXG4gKlxuICogU3F1YXJlIGluZGV4aW5nIChwZXIgc2NoZW1hLnRzKTpcbiAqICAgc3F1YXJlID0gcmFuayAqIDggKyBmaWxlLCBmaWxlIDA9YS4uNz1oLCByYW5rIDA9cmFuazEuLjc9cmFuazhcbiAqICAgYTE9MCwgaDE9NywgYTg9NTYsIGg4PTYzXG4gKi9cbmltcG9ydCB7IGRlc2NyaWJlLCBpdCwgZXhwZWN0IH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuaW1wb3J0IHsgaXNTdGFsZW1hdGUgfSBmcm9tIFwiLi9zdGFsZW1hdGUuanNcIjtcblxuY29uc3QgbWtJZCA9IChuOiBudW1iZXIpID0+IG4gYXMgRW50aXR5SWQ7XG5cbmZ1bmN0aW9uIGluc2VydFBpZWNlKFxuICBzOiBTZXNzaW9uLFxuICBpZDogbnVtYmVyLFxuICB0eXBlOiBzdHJpbmcsXG4gIGNvbG9yOiBzdHJpbmcsXG4gIHNxOiBudW1iZXIsXG4pOiBFbnRpdHlJZCB7XG4gIGNvbnN0IGVpZCA9IG1rSWQoaWQpO1xuICBzLmluc2VydChlaWQsIFwiUGllY2VUeXBlXCIsIHR5cGUpO1xuICBzLmluc2VydChlaWQsIFwiQ29sb3JcIiwgY29sb3IpO1xuICBzLmluc2VydChlaWQsIFwiUG9zaXRpb25cIiwgc3EpO1xuICByZXR1cm4gZWlkO1xufVxuXG5kZXNjcmliZShcImlzU3RhbGVtYXRlXCIsICgpID0+IHtcbiAgaXQoXCJjbGFzc2ljIHN0YWxlbWF0ZToga2luZyBhdCBoOCB3aXRoIGVuZW15IHF1ZWVuIG9uIGc2LCBub3QgaW4gY2hlY2ssIG5vIGxlZ2FsIG1vdmVzXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgLy8gV2hpdGUga2luZyBhdCBoOCg2Myk7IGVzY2FwZSBzcXVhcmVzOiBnOCg2MiksIGc3KDU0KSwgaDcoNTUpLlxuICAgIC8vIEJsYWNrIHF1ZWVuIGF0IGc2KDQ2KSBjb3ZlcnMgZy1maWxlIChnNywgZzgpIGFuZCBkaWFnb25hbCB0byBoNy5cbiAgICAvLyBRdWVlbiBkb2VzIE5PVCBhdHRhY2sgaDggaXRzZWxmIChoOCB2cyBnNiBpcyBmaWxlLWRpZmYgMSwgcmFuay1kaWZmIDIpLlxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwia2luZ1wiLCBcIndoaXRlXCIsIDYzKTsgICAvLyBoOFxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDIsIFwicXVlZW5cIiwgXCJibGFja1wiLCA0Nik7ICAvLyBnNlxuICAgIC8vIEJsYWNrIGtpbmcgbmVlZHMgdG8gZXhpc3QgKGFuZCBtdXN0IGJlIGZhciBmcm9tIGFjdGlvbiBzbyBpdCBkb2Vzbid0XG4gICAgLy8gYWNjaWRlbnRhbGx5IGF0dGFjayB3aGl0ZSBraW5nIG9yIGJlIGFkamFjZW50IHRvIHRoZSBxdWVlbikuXG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMywgXCJraW5nXCIsIFwiYmxhY2tcIiwgMCk7ICAgIC8vIGExXG4gICAgZXhwZWN0KGlzU3RhbGVtYXRlKHNlc3Npb24sIFwid2hpdGVcIikpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwiTk9UIHN0YWxlbWF0ZSB3aGVuIHNpZGUgaXMgaW4gY2hlY2tcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcImtpbmdcIiwgXCJ3aGl0ZVwiLCA0KTsgICAgLy8gZTFcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAyLCBcInJvb2tcIiwgXCJibGFja1wiLCA2MCk7ICAgLy8gZTgg4oCUIGdpdmVzIGNoZWNrIGFsb25nIGUtZmlsZVxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDMsIFwia2luZ1wiLCBcImJsYWNrXCIsIDU2KTsgICAvLyBhOCAoZmFyIGNvcm5lcilcbiAgICBleHBlY3QoaXNTdGFsZW1hdGUoc2Vzc2lvbiwgXCJ3aGl0ZVwiKSkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwiTk9UIHN0YWxlbWF0ZSB3aGVuIGtpbmcgaGFzIGxlZ2FsIGVzY2FwZSBzcXVhcmVzXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJraW5nXCIsIFwid2hpdGVcIiwgNCk7ICAgIC8vIGUxLCBvcGVuIGJvYXJkXG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMiwgXCJraW5nXCIsIFwiYmxhY2tcIiwgNjApOyAgIC8vIGU4XG4gICAgZXhwZWN0KGlzU3RhbGVtYXRlKHNlc3Npb24sIFwid2hpdGVcIikpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcImNoZWNrbWF0ZSBwb3NpdGlvbiBpcyBOT1Qgc3RhbGVtYXRlIChpbiBjaGVjayBkaXNxdWFsaWZpZXMpXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgLy8gQmFjay1yYW5rLXN0eWxlIG1hdGU6IHdoaXRlIGtpbmcgaDEgYm94ZWQgaW4gYnkgb3duIHBhd24gZzIsaDI7XG4gICAgLy8gYmxhY2sgcm9vayBvbiBhMSBkZWxpdmVycyBjaGVjayBhbG9uZyByYW5rIDEgKGZpbGUgMC4uNykuIE5vdGVcbiAgICAvLyB0aGUgcm9vaydzIGxpbmUgdG8gdGhlIGtpbmcgaXMgY2xlYXIg4oCUIG5vdGhpbmcgYmV0d2VlbiBhMSBhbmQgaDEuXG4gICAgLy8gS2luZyBjYW5ub3Qgc3RlcCB0byBoMi9nMiAob3duIHBpZWNlcykgb3IgZzEgKGF0dGFja2VkIGFsb25nIHJhbmspLlxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwia2luZ1wiLCBcIndoaXRlXCIsIDcpOyAgICAvLyBoMVxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDIsIFwicGF3blwiLCBcIndoaXRlXCIsIDE0KTsgICAvLyBnMlxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDMsIFwicGF3blwiLCBcIndoaXRlXCIsIDE1KTsgICAvLyBoMlxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDQsIFwicm9va1wiLCBcImJsYWNrXCIsIDApOyAgICAvLyBhMSDigJQgY2hlY2shXG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgNSwgXCJraW5nXCIsIFwiYmxhY2tcIiwgNTYpOyAgIC8vIGE4XG4gICAgLy8gSW4gY2hlY2sg4oaSIGlzU3RhbGVtYXRlIG11c3QgcmV0dXJuIGZhbHNlIHJlZ2FyZGxlc3Mgb2YgbW92ZSBjb3VudC5cbiAgICBleHBlY3QoaXNTdGFsZW1hdGUoc2Vzc2lvbiwgXCJ3aGl0ZVwiKSkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwic3RhbGVtYXRlIGNoZWNrIGlzIGNvbG9yLXNwZWNpZmljXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgLy8gU3RhbGVtYXRlIHdoaXRlIChzYW1lIHBvc2l0aW9uIGFzIGZpcnN0IHRlc3QpOyBibGFjayBzaWRlIGhhc1xuICAgIC8vIHBsZW50eSBvZiBtb3ZlcyAocXVlZW4gY2FuIG1vdmUgYW55d2hlcmUpIOKAlCBub3Qgc3RhbGVtYXRlZC5cbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcImtpbmdcIiwgXCJ3aGl0ZVwiLCA2Myk7ICAgLy8gaDhcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAyLCBcInF1ZWVuXCIsIFwiYmxhY2tcIiwgNDYpOyAgLy8gZzZcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAzLCBcImtpbmdcIiwgXCJibGFja1wiLCAwKTsgICAgLy8gYTFcbiAgICBleHBlY3QoaXNTdGFsZW1hdGUoc2Vzc2lvbiwgXCJ3aGl0ZVwiKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QoaXNTdGFsZW1hdGUoc2Vzc2lvbiwgXCJibGFja1wiKSkudG9CZShmYWxzZSk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvY2hlc3Mvc3JjL3J1bGVzL3N0YWxlbWF0ZS50ZXN0LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/762ce37da2a2589b1d10505d5f2beb8d6535a9b4 b/7xOfJqsDU787fe61oSCq1/web/762ce37da2a2589b1d10505d5f2beb8d6535a9b4 deleted file mode 100644 index 904758a..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/762ce37da2a2589b1d10505d5f2beb8d6535a9b4 +++ /dev/null @@ -1,154 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "AlphaMemory", { enumerable: true, configurable: true, get(){ try { return AlphaMemory } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "AlphaNode", { enumerable: true, configurable: true, get(){ try { return AlphaNode } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "AlphaNetwork", { enumerable: true, configurable: true, get(){ try { return AlphaNetwork } catch {} }}); -/** - * Sorted working-set of facts that have passed an {@link AlphaNode}'s tests. - * - * The `facts` array is maintained in `[id asc, attr asc]` order on every - * mutation so that iteration is deterministic without a per-read sort. - */ -class AlphaMemory { - /** Facts currently in memory, sorted by `[id asc, attr asc]`. */ - facts = []; - /** Insert a fact; keeps `facts` sorted. O(n) via insertion-point search. */ - addFact(id, attr, value) { - const fact = { id, attr, value }; - // Find insertion index to keep sorted: [id asc, attr asc] - let lo = 0; - let hi = this.facts.length; - while (lo < hi) { - const mid = (lo + hi) >>> 1; - const m = this.facts[mid]; - const cmp = m.id !== id - ? m.id - id - : m.attr < attr - ? -1 - : m.attr > attr - ? 1 - : 0; - if (cmp < 0) - lo = mid + 1; - else - hi = mid; - }; - this.facts.splice(lo, 0, fact); - } - /** Remove the fact matching `(id, attr)`. Returns the removed value, or undefined. */ - removeFact(id, attr) { - const idx = this.facts.findIndex((f) => f.id === id && f.attr === attr); - if (idx === -1) - return undefined; - const removed = this.facts[idx]; - this.facts.splice(idx, 1); - return removed.value; - } -}; -/** - * A single alpha-network node: owns one {@link AlphaCondition}, its - * {@link AlphaMemory}, and activate/deactivate listener lists. - * - * Listeners are invoked synchronously after the memory mutation, so observers - * (typically join-nodes in Phase 1 and the agenda in later phases) see a - * consistent memory view. - */ -class AlphaNode { - condition; - memory; - #activateListeners = []; - #deactivateListeners = []; - constructor(condition) { - this.condition = condition; - this.memory = new AlphaMemory(); - } - /** Register a listener fired after a fact is added to this node's memory. */ - onActivate(listener) { - this.#activateListeners.push(listener); - } - /** Register a listener fired after a fact is removed from this node's memory. */ - onDeactivate(listener) { - this.#deactivateListeners.push(listener); - } - /** Internal: add to memory, then notify activate listeners. */ - activate(id, attr, value) { - this.memory.addFact(id, attr, value); - for (const l of this.#activateListeners) - l(id, attr, value); - } - /** Internal: remove from memory, then notify deactivate listeners. */ - deactivate(id, attr, value) { - this.memory.removeFact(id, attr); - for (const l of this.#deactivateListeners) - l(id, attr, value); - } -}; -/** - * Dispatch layer for alpha nodes. - * - * The network owns all alpha nodes and exposes `notifyInsert` / `notifyRetract` - * that the {@link import("./wm.js").WorkingMemory} fires on every triple - * change. Lookup is performed via an inverted index `attr → AlphaNode[]`, so - * dispatch cost scales with the number of nodes interested in that attr - * rather than the total node count. - * - * {@link buildNode} is memoised: identical conditions collapse to one node so - * that rules sharing a constant-test share the same alpha memory (the usual - * Rete sharing optimisation). - */ -class AlphaNetwork { - /** Inverted index: attribute key → nodes that filter on it. */ - #index = new Map(); - /** Memoisation cache: canonical condition key → node. */ - #nodeCache = new Map(); - /** Canonical key for an {@link AlphaCondition}. */ - #conditionKey(cond) { - // "*" is safe as a sentinel because EntityId is numeric at runtime. - return `${cond.id === null ? "*" : String(cond.id)}:${cond.attr}`; - } - /** - * Get or create the {@link AlphaNode} for a given condition. - * - * Two calls with the same `(id, attr)` pair return the same instance, so - * rules that share constant tests share alpha memories automatically. - */ - buildNode(cond) { - const key = this.#conditionKey(cond); - const cached = this.#nodeCache.get(key); - if (cached) - return cached; - const node = new AlphaNode({ id: cond.id, attr: cond.attr }); - this.#nodeCache.set(key, node); - let attrNodes = this.#index.get(cond.attr); - if (!attrNodes) { - attrNodes = []; - this.#index.set(cond.attr, attrNodes); - }; - attrNodes.push(node); - return node; - } - /** Called by `WorkingMemory` (via Session) when a fact is inserted. */ - notifyInsert(id, attr, value) { - const nodes = this.#index.get(attr); - if (!nodes) - return; - for (const node of nodes) { - // Wildcard (null) always matches; otherwise require exact id. - if (node.condition.id === null || node.condition.id === id) { - node.activate(id, attr, value); - } - } - } - /** Called by `WorkingMemory` (via Session) when a fact is retracted. */ - notifyRetract(id, attr, value) { - const nodes = this.#index.get(attr); - if (!nodes) - return; - for (const node of nodes) { - if (node.condition.id === null || node.condition.id === id) { - node.deactivate(id, attr, value); - } - } - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUM7UUFFcEIsT0FBTyxJQUFJO0lBQ2I7SUFFQTtJQUNBLFlBQVksQ0FBQyxFQUFZLEVBQUUsSUFBYSxFQUFFLEtBQWdCO1FBQ3hELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsS0FBSztZQUFFO1FBQ1osS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7WUFDeEI7WUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQzFELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUM7WUFDaEM7UUFDRjtJQUNGO0lBRUE7SUFDQSxhQUFhLENBQUMsRUFBWSxFQUFFLElBQWEsRUFBRSxLQUFnQjtRQUN6RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUs7WUFBRTtRQUNaLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1lBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDMUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQztZQUNsQztRQUNGO0lBQ0YiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9hbHBoYS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFscGhhTmV0d29yayDigJQgaW5kZXhlcyBhbmQgZGlzcGF0Y2hlcyBmYWN0cyBieSAoaWQ/LCBhdHRyKSBwYXR0ZXJuLlxuICpcbiAqIFBlciBgcGFja2FnZXMvcmV0ZS9TUEVDLm1kIMKnUmV0ZSBJSSBSZWZlcmVuY2UgVGFyZ2V0YCB0aGlzIG1vZHVsZSBpbXBsZW1lbnRzXG4gKiB0aGUgYWxwaGEgc2lkZSBvZiB0aGUgRG9vcmVuYm9zIG5ldHdvcms6IHtAbGluayBBbHBoYU5vZGV9IChjb25zdGFudCB0ZXN0cylcbiAqIGFuZCB7QGxpbmsgQWxwaGFNZW1vcnl9IChzZXQgb2YgZmFjdHMgdGhhdCBwYXNzZWQgdGhvc2UgdGVzdHMpLlxuICpcbiAqIERpc3BhdGNoIGlzIGFtb3J0aXNlZCBPKDEpIHBlciBmYWN0OiBhbiBpbnZlcnRlZCBpbmRleCBtYXBzIGF0dHJpYnV0ZSBrZXlzXG4gKiB0byB0aGUgYWxwaGEgbm9kZXMgdGhhdCBjYXJlIGFib3V0IHRoZW0sIHNvIHdlIG9ubHkgdmlzaXQgdGhlIHNtYWxsIHN1YnNldFxuICogb2Ygbm9kZXMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBhdHRyIHJhdGhlciB0aGFuIHNjYW5uaW5nIGV2ZXJ5IG5vZGUuIFRoZVxuICogaWQgZGltZW5zaW9uIGlzIGEgZmluYWwgY29tcGFyZSBpbiB0aGUgbm9kZSdzIG1hdGNoIHN0ZXAuXG4gKlxuICogQWxwaGFNZW1vcnkga2VlcHMgaXRzIGZhY3RzIHNvcnRlZCBieSBgW2lkIGFzYywgYXR0ciBhc2NdYCB0byBzYXRpc2Z5XG4gKiDCp0l0ZXJhdGlvbiBPcmRlciDigJQgZG93bnN0cmVhbSBiZXRhIGpvaW5zIGl0ZXJhdGUgYWxwaGEgbWVtb3JpZXMgaW4gYVxuICogZGV0ZXJtaW5pc3RpYyBvcmRlci5cbiAqL1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBdHRyS2V5LCBGYWN0VmFsdWUgfSBmcm9tIFwiLi93bS5qc1wiO1xuXG4vKipcbiAqIENvbnN0YW50LXRlc3QgY29uZGl0aW9uIHJlY29nbmlzZWQgYnkgYSBzaW5nbGUge0BsaW5rIEFscGhhTm9kZX0uXG4gKlxuICogYGlkYCBpcyBlaXRoZXIgYSBzcGVjaWZpYyB7QGxpbmsgRW50aXR5SWR9ICh0aGUgbm9kZSBvbmx5IGFjY2VwdHMgZmFjdHMgZm9yXG4gKiB0aGF0IGVudGl0eSkgb3IgYG51bGxgICh3aWxkY2FyZCDigJQgYWNjZXB0cyBhbnkgZW50aXR5KS4gYGF0dHJgIG11c3QgYWx3YXlzXG4gKiBiZSBhIGNvbmNyZXRlIGF0dHJpYnV0ZSBrZXk7IGF0dHJpYnV0ZSB3aWxkY2FyZHMgYXJlIG5vdCBzdXBwb3J0ZWQgYXQgdGhlXG4gKiBhbHBoYSBsYXllciBwZXIgU1BFQy5tZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBbHBoYUNvbmRpdGlvbiB7XG4gIC8qKiBTcGVjaWZpYyBlbnRpdHkgSUQgdG8gbWF0Y2gsIG9yIGBudWxsYCBmb3IgYSB3aWxkY2FyZCBvdmVyIGVudGl0aWVzLiAqL1xuICByZWFkb25seSBpZDogRW50aXR5SWQgfCBudWxsO1xuICAvKiogQXR0cmlidXRlIGtleSB0aGUgbm9kZSBmaWx0ZXJzIG9uIOKAlCByZXF1aXJlZCAobm8gYXR0ciB3aWxkY2FyZHMpLiAqL1xuICByZWFkb25seSBhdHRyOiBBdHRyS2V5O1xufVxuXG50eXBlIEFjdGl2YXRlTGlzdGVuZXIgPSAoaWQ6IEVudGl0eUlkLCBhdHRyOiBBdHRyS2V5LCB2YWx1ZTogRmFjdFZhbHVlKSA9PiB2b2lkO1xudHlwZSBEZWFjdGl2YXRlTGlzdGVuZXIgPSAoXG4gIGlkOiBFbnRpdHlJZCxcbiAgYXR0cjogQXR0cktleSxcbiAgdmFsdWU6IEZhY3RWYWx1ZVxuKSA9PiB2b2lkO1xuXG4vKipcbiAqIFNvcnRlZCB3b3JraW5nLXNldCBvZiBmYWN0cyB0aGF0IGhhdmUgcGFzc2VkIGFuIHtAbGluayBBbHBoYU5vZGV9J3MgdGVzdHMuXG4gKlxuICogVGhlIGBmYWN0c2AgYXJyYXkgaXMgbWFpbnRhaW5lZCBpbiBgW2lkIGFzYywgYXR0ciBhc2NdYCBvcmRlciBvbiBldmVyeVxuICogbXV0YXRpb24gc28gdGhhdCBpdGVyYXRpb24gaXMgZGV0ZXJtaW5pc3RpYyB3aXRob3V0IGEgcGVyLXJlYWQgc29ydC5cbiAqL1xuZXhwb3J0IGNsYXNzIEFscGhhTWVtb3J5IHtcbiAgLyoqIEZhY3RzIGN1cnJlbnRseSBpbiBtZW1vcnksIHNvcnRlZCBieSBgW2lkIGFzYywgYXR0ciBhc2NdYC4gKi9cbiAgcmVhZG9ubHkgZmFjdHM6IEFycmF5PHsgaWQ6IEVudGl0eUlkOyBhdHRyOiBBdHRyS2V5OyB2YWx1ZTogRmFjdFZhbHVlIH0+ID0gW107XG5cbiAgLyoqIEluc2VydCBhIGZhY3Q7IGtlZXBzIGBmYWN0c2Agc29ydGVkLiBPKG4pIHZpYSBpbnNlcnRpb24tcG9pbnQgc2VhcmNoLiAqL1xuICBhZGRGYWN0KGlkOiBFbnRpdHlJZCwgYXR0cjogQXR0cktleSwgdmFsdWU6IEZhY3RWYWx1ZSk6IHZvaWQge1xuICAgIGNvbnN0IGZhY3QgPSB7IGlkLCBhdHRyLCB2YWx1ZSB9O1xuICAgIC8vIEZpbmQgaW5zZXJ0aW9uIGluZGV4IHRvIGtlZXAgc29ydGVkOiBbaWQgYXNjLCBhdHRyIGFzY11cbiAgICBsZXQgbG8gPSAwO1xuICAgIGxldCBoaSA9IHRoaXMuZmFjdHMubGVuZ3RoO1xuICAgIHdoaWxlIChsbyA8IGhpKSB7XG4gICAgICBjb25zdCBtaWQgPSAobG8gKyBoaSkgPj4+IDE7XG4gICAgICBjb25zdCBtID0gdGhpcy5mYWN0c1ttaWRdITtcbiAgICAgIGNvbnN0IGNtcCA9XG4gICAgICAgIG0uaWQgIT09IGlkXG4gICAgICAgICAgPyAobS5pZCBhcyBudW1iZXIpIC0gKGlkIGFzIG51bWJlcilcbiAgICAgICAgICA6IG0uYXR0ciA8IGF0dHJcbiAgICAgICAgICAgID8gLTFcbiAgICAgICAgICAgIDogbS5hdHRyID4gYXR0clxuICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgOiAwO1xuICAgICAgaWYgKGNtcCA8IDApIGxvID0gbWlkICsgMTtcbiAgICAgIGVsc2UgaGkgPSBtaWQ7XG4gICAgfVxuICAgIHRoaXMuZmFjdHMuc3BsaWNlKGxvLCAwLCBmYWN0KTtcbiAgfVxuXG4gIC8qKiBSZW1vdmUgdGhlIGZhY3QgbWF0Y2hpbmcgYChpZCwgYXR0cilgLiBSZXR1cm5zIHRoZSByZW1vdmVkIHZhbHVlLCBvciB1bmRlZmluZWQuICovXG4gIHJlbW92ZUZhY3QoaWQ6IEVudGl0eUlkLCBhdHRyOiBBdHRyS2V5KTogRmFjdFZhbHVlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBpZHggPSB0aGlzLmZhY3RzLmZpbmRJbmRleCgoZikgPT4gZi5pZCA9PT0gaWQgJiYgZi5hdHRyID09PSBhdHRyKTtcbiAgICBpZiAoaWR4ID09PSAtMSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCByZW1vdmVkID0gdGhpcy5mYWN0c1tpZHhdITtcbiAgICB0aGlzLmZhY3RzLnNwbGljZShpZHgsIDEpO1xuICAgIHJldHVybiByZW1vdmVkLnZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogQSBzaW5nbGUgYWxwaGEtbmV0d29yayBub2RlOiBvd25zIG9uZSB7QGxpbmsgQWxwaGFDb25kaXRpb259LCBpdHNcbiAqIHtAbGluayBBbHBoYU1lbW9yeX0sIGFuZCBhY3RpdmF0ZS9kZWFjdGl2YXRlIGxpc3RlbmVyIGxpc3RzLlxuICpcbiAqIExpc3RlbmVycyBhcmUgaW52b2tlZCBzeW5jaHJvbm91c2x5IGFmdGVyIHRoZSBtZW1vcnkgbXV0YXRpb24sIHNvIG9ic2VydmVyc1xuICogKHR5cGljYWxseSBqb2luLW5vZGVzIGluIFBoYXNlIDEgYW5kIHRoZSBhZ2VuZGEgaW4gbGF0ZXIgcGhhc2VzKSBzZWUgYVxuICogY29uc2lzdGVudCBtZW1vcnkgdmlldy5cbiAqL1xuZXhwb3J0IGNsYXNzIEFscGhhTm9kZSB7XG4gIHJlYWRvbmx5IGNvbmRpdGlvbjogQWxwaGFDb25kaXRpb247XG4gIHJlYWRvbmx5IG1lbW9yeTogQWxwaGFNZW1vcnk7XG4gIHJlYWRvbmx5ICNhY3RpdmF0ZUxpc3RlbmVyczogQWN0aXZhdGVMaXN0ZW5lcltdID0gW107XG4gIHJlYWRvbmx5ICNkZWFjdGl2YXRlTGlzdGVuZXJzOiBEZWFjdGl2YXRlTGlzdGVuZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmRpdGlvbjogQWxwaGFDb25kaXRpb24pIHtcbiAgICB0aGlzLmNvbmRpdGlvbiA9IGNvbmRpdGlvbjtcbiAgICB0aGlzLm1lbW9yeSA9IG5ldyBBbHBoYU1lbW9yeSgpO1xuICB9XG5cbiAgLyoqIFJlZ2lzdGVyIGEgbGlzdGVuZXIgZmlyZWQgYWZ0ZXIgYSBmYWN0IGlzIGFkZGVkIHRvIHRoaXMgbm9kZSdzIG1lbW9yeS4gKi9cbiAgb25BY3RpdmF0ZShsaXN0ZW5lcjogQWN0aXZhdGVMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuI2FjdGl2YXRlTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqIFJlZ2lzdGVyIGEgbGlzdGVuZXIgZmlyZWQgYWZ0ZXIgYSBmYWN0IGlzIHJlbW92ZWQgZnJvbSB0aGlzIG5vZGUncyBtZW1vcnkuICovXG4gIG9uRGVhY3RpdmF0ZShsaXN0ZW5lcjogRGVhY3RpdmF0ZUxpc3RlbmVyKTogdm9pZCB7XG4gICAgdGhpcy4jZGVhY3RpdmF0ZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKiBJbnRlcm5hbDogYWRkIHRvIG1lbW9yeSwgdGhlbiBub3RpZnkgYWN0aXZhdGUgbGlzdGVuZXJzLiAqL1xuICBhY3RpdmF0ZShpZDogRW50aXR5SWQsIGF0dHI6IEF0dHJLZXksIHZhbHVlOiBGYWN0VmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzLm1lbW9yeS5hZGRGYWN0KGlkLCBhdHRyLCB2YWx1ZSk7XG4gICAgZm9yIChjb25zdCBsIG9mIHRoaXMuI2FjdGl2YXRlTGlzdGVuZXJzKSBsKGlkLCBhdHRyLCB2YWx1ZSk7XG4gIH1cblxuICAvKiogSW50ZXJuYWw6IHJlbW92ZSBmcm9tIG1lbW9yeSwgdGhlbiBub3RpZnkgZGVhY3RpdmF0ZSBsaXN0ZW5lcnMuICovXG4gIGRlYWN0aXZhdGUoaWQ6IEVudGl0eUlkLCBhdHRyOiBBdHRyS2V5LCB2YWx1ZTogRmFjdFZhbHVlKTogdm9pZCB7XG4gICAgdGhpcy5tZW1vcnkucmVtb3ZlRmFjdChpZCwgYXR0cik7XG4gICAgZm9yIChjb25zdCBsIG9mIHRoaXMuI2RlYWN0aXZhdGVMaXN0ZW5lcnMpIGwoaWQsIGF0dHIsIHZhbHVlKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGxheWVyIGZvciBhbHBoYSBub2Rlcy5cbiAqXG4gKiBUaGUgbmV0d29yayBvd25zIGFsbCBhbHBoYSBub2RlcyBhbmQgZXhwb3NlcyBgbm90aWZ5SW5zZXJ0YCAvIGBub3RpZnlSZXRyYWN0YFxuICogdGhhdCB0aGUge0BsaW5rIGltcG9ydChcIi4vd20uanNcIikuV29ya2luZ01lbW9yeX0gZmlyZXMgb24gZXZlcnkgdHJpcGxlXG4gKiBjaGFuZ2UuIExvb2t1cCBpcyBwZXJmb3JtZWQgdmlhIGFuIGludmVydGVkIGluZGV4IGBhdHRyIOKGkiBBbHBoYU5vZGVbXWAsIHNvXG4gKiBkaXNwYXRjaCBjb3N0IHNjYWxlcyB3aXRoIHRoZSBudW1iZXIgb2Ygbm9kZXMgaW50ZXJlc3RlZCBpbiB0aGF0IGF0dHJcbiAqIHJhdGhlciB0aGFuIHRoZSB0b3RhbCBub2RlIGNvdW50LlxuICpcbiAqIHtAbGluayBidWlsZE5vZGV9IGlzIG1lbW9pc2VkOiBpZGVudGljYWwgY29uZGl0aW9ucyBjb2xsYXBzZSB0byBvbmUgbm9kZSBzb1xuICogdGhhdCBydWxlcyBzaGFyaW5nIGEgY29uc3RhbnQtdGVzdCBzaGFyZSB0aGUgc2FtZSBhbHBoYSBtZW1vcnkgKHRoZSB1c3VhbFxuICogUmV0ZSBzaGFyaW5nIG9wdGltaXNhdGlvbikuXG4gKi9cbmV4cG9ydCBjbGFzcyBBbHBoYU5ldHdvcmsge1xuICAvKiogSW52ZXJ0ZWQgaW5kZXg6IGF0dHJpYnV0ZSBrZXkg4oaSIG5vZGVzIHRoYXQgZmlsdGVyIG9uIGl0LiAqL1xuICByZWFkb25seSAjaW5kZXggPSBuZXcgTWFwPEF0dHJLZXksIEFscGhhTm9kZVtdPigpO1xuICAvKiogTWVtb2lzYXRpb24gY2FjaGU6IGNhbm9uaWNhbCBjb25kaXRpb24ga2V5IOKGkiBub2RlLiAqL1xuICByZWFkb25seSAjbm9kZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIEFscGhhTm9kZT4oKTtcblxuICAvKiogQ2Fub25pY2FsIGtleSBmb3IgYW4ge0BsaW5rIEFscGhhQ29uZGl0aW9ufS4gKi9cbiAgI2NvbmRpdGlvbktleShjb25kOiBBbHBoYUNvbmRpdGlvbik6IHN0cmluZyB7XG4gICAgLy8gXCIqXCIgaXMgc2FmZSBhcyBhIHNlbnRpbmVsIGJlY2F1c2UgRW50aXR5SWQgaXMgbnVtZXJpYyBhdCBydW50aW1lLlxuICAgIHJldHVybiBgJHtjb25kLmlkID09PSBudWxsID8gXCIqXCIgOiBTdHJpbmcoY29uZC5pZCl9OiR7Y29uZC5hdHRyfWA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG9yIGNyZWF0ZSB0aGUge0BsaW5rIEFscGhhTm9kZX0gZm9yIGEgZ2l2ZW4gY29uZGl0aW9uLlxuICAgKlxuICAgKiBUd28gY2FsbHMgd2l0aCB0aGUgc2FtZSBgKGlkLCBhdHRyKWAgcGFpciByZXR1cm4gdGhlIHNhbWUgaW5zdGFuY2UsIHNvXG4gICAqIHJ1bGVzIHRoYXQgc2hhcmUgY29uc3RhbnQgdGVzdHMgc2hhcmUgYWxwaGEgbWVtb3JpZXMgYXV0b21hdGljYWxseS5cbiAgICovXG4gIGJ1aWxkTm9kZShjb25kOiBBbHBoYUNvbmRpdGlvbik6IEFscGhhTm9kZSB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy4jY29uZGl0aW9uS2V5KGNvbmQpO1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuI25vZGVDYWNoZS5nZXQoa2V5KTtcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuXG4gICAgY29uc3Qgbm9kZSA9IG5ldyBBbHBoYU5vZGUoeyBpZDogY29uZC5pZCwgYXR0cjogY29uZC5hdHRyIH0pO1xuICAgIHRoaXMuI25vZGVDYWNoZS5zZXQoa2V5LCBub2RlKTtcblxuICAgIGxldCBhdHRyTm9kZXMgPSB0aGlzLiNpbmRleC5nZXQoY29uZC5hdHRyKTtcbiAgICBpZiAoIWF0dHJOb2Rlcykge1xuICAgICAgYXR0ck5vZGVzID0gW107XG4gICAgICB0aGlzLiNpbmRleC5zZXQoY29uZC5hdHRyLCBhdHRyTm9kZXMpO1xuICAgIH1cbiAgICBhdHRyTm9kZXMucHVzaChub2RlKTtcblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgLyoqIENhbGxlZCBieSBgV29ya2luZ01lbW9yeWAgKHZpYSBTZXNzaW9uKSB3aGVuIGEgZmFjdCBpcyBpbnNlcnRlZC4gKi9cbiAgbm90aWZ5SW5zZXJ0KGlkOiBFbnRpdHlJZCwgYXR0cjogQXR0cktleSwgdmFsdWU6IEZhY3RWYWx1ZSk6IHZvaWQge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy4jaW5kZXguZ2V0KGF0dHIpO1xuICAgIGlmICghbm9kZXMpIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgIC8vIFdpbGRjYXJkIChudWxsKSBhbHdheXMgbWF0Y2hlczsgb3RoZXJ3aXNlIHJlcXVpcmUgZXhhY3QgaWQuXG4gICAgICBpZiAobm9kZS5jb25kaXRpb24uaWQgPT09IG51bGwgfHwgbm9kZS5jb25kaXRpb24uaWQgPT09IGlkKSB7XG4gICAgICAgIG5vZGUuYWN0aXZhdGUoaWQsIGF0dHIsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQ2FsbGVkIGJ5IGBXb3JraW5nTWVtb3J5YCAodmlhIFNlc3Npb24pIHdoZW4gYSBmYWN0IGlzIHJldHJhY3RlZC4gKi9cbiAgbm90aWZ5UmV0cmFjdChpZDogRW50aXR5SWQsIGF0dHI6IEF0dHJLZXksIHZhbHVlOiBGYWN0VmFsdWUpOiB2b2lkIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuI2luZGV4LmdldChhdHRyKTtcbiAgICBpZiAoIW5vZGVzKSByZXR1cm47XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICBpZiAobm9kZS5jb25kaXRpb24uaWQgPT09IG51bGwgfHwgbm9kZS5jb25kaXRpb24uaWQgPT09IGlkKSB7XG4gICAgICAgIG5vZGUuZGVhY3RpdmF0ZShpZCwgYXR0ciwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvZGlzdC9hbHBoYS5qcyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/778beafecaae71b0bd8ca0acab50cdfc4aa45b72 b/7xOfJqsDU787fe61oSCq1/web/778beafecaae71b0bd8ca0acab50cdfc4aa45b72 deleted file mode 100644 index 3cb78af..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/778beafecaae71b0bd8ca0acab50cdfc4aa45b72 +++ /dev/null @@ -1,151 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "NccPartner", { enumerable: true, configurable: true, get(){ try { return NccPartner } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "NccNode", { enumerable: true, configurable: true, get(){ try { return NccNode } catch {} }}); -/** - * Terminal node for the NCC sub-network. - * - * Carries a back-reference to its {@link NccNode}; the NccNode is set - * exactly once by the NccNode's constructor. If the partner is not yet - * wired to an NccNode, activations are silently ignored — this keeps - * construction order of `new NccPartner()` / `new NccNode(partner)` - * flexible for tests and builder code. - */ -class NccPartner { - #ncc = null; - /** - * Notify the NccNode that a new complete sub-match has formed for the - * given `outerToken`. Called by the sub-network's terminal production. - */ - leftActivate(subToken, outerToken) { - this.#ncc?.onSubMatchActivate(subToken, outerToken); - } - /** - * Notify the NccNode that a previously-formed sub-match has dissolved. - */ - leftDeactivate(subToken, outerToken) { - this.#ncc?.onSubMatchDeactivate(subToken, outerToken); - } - /** - * Bind this partner to its owning NccNode. Called by the NccNode - * constructor. Rebinding is intentionally a no-op after the first call — - * a partner is paired with exactly one NccNode for life. - */ - setNcc(ncc) { - if (this.#ncc === null) { - this.#ncc = ncc; - } - } -}; -/** - * Beta-network node implementing subconjunction negation. - * - * Downstream subscribers see an outer token iff the NCC sub-network yields - * zero complete sub-matches for it. Arrivals and departures of sub-matches - * are reported via the paired {@link NccPartner}. - */ -class NccNode { - #activateListeners = []; - #deactivateListeners = []; - /** Active sub-match count per outer token (absent entry ≡ 0). */ - #subMatchCount = new Map(); - /** Outer tokens currently propagated downstream. */ - #passingTokens = new Set(); - /** All outer tokens left-activated and not yet left-deactivated. */ - #outerTokens = new Set(); - constructor(partner) { - partner.setNcc(this); - } - /** Subscribe to downstream activations (tokens passing the NCC filter). */ - addDownstreamActivate(listener) { - this.#activateListeners.push(listener); - } - /** Subscribe to downstream deactivations (tokens withdrawn). */ - addDownstreamDeactivate(listener) { - this.#deactivateListeners.push(listener); - } - /** - * Accept an outer partial match. - * - * The token is passed downstream immediately when the sub-match count - * for it is zero. If a sub-match already exists (e.g. the sub-network - * activated before the outer left input did), the token is tracked but - * withheld from downstream until the count returns to zero. - */ - leftActivate(token) { - this.#outerTokens.add(token); - const count = this.#subMatchCount.get(token) ?? 0; - if (count === 0) { - this.#passingTokens.add(token); - for (const listener of this.#activateListeners) { - listener(token); - } - } - } - /** - * Withdraw an outer partial match. - * - * If the token is currently passing, fire downstream-deactivate; otherwise - * silently drop it. The sub-match count is discarded so stale sub-match - * retractions after this point become no-ops for this token. - */ - leftDeactivate(token) { - this.#outerTokens.delete(token); - this.#subMatchCount.delete(token); - if (this.#passingTokens.has(token)) { - this.#passingTokens.delete(token); - for (const listener of this.#deactivateListeners) { - listener(token); - } - } - } - /** - * Internal: sub-network reports a new complete sub-match. - * - * Incrementing the count from 0 to 1 blocks the outer token if it is - * currently passing. The `_subToken` argument is unused by the - * count-based scheme but retained in the signature per Doorenbos so that - * more elaborate variants (e.g. preserving matched sub-tokens for - * explanation) can slot in without changing the partner protocol. - */ - onSubMatchActivate(_subToken, outerToken) { - const prev = this.#subMatchCount.get(outerToken) ?? 0; - this.#subMatchCount.set(outerToken, prev + 1); - if (prev === 0 && this.#passingTokens.has(outerToken)) { - this.#passingTokens.delete(outerToken); - for (const listener of this.#deactivateListeners) { - listener(outerToken); - } - } - } - /** - * Internal: sub-network reports a sub-match has dissolved. - * - * Decrementing the count from 1 to 0 re-activates the outer token - * downstream, provided the token has been left-activated and is not - * already passing. The count is clamped at zero to tolerate idempotent - * retractions. - */ - onSubMatchDeactivate(_subToken, outerToken) { - const prev = this.#subMatchCount.get(outerToken) ?? 0; - if (prev === 0) { - return; // clamp — ignore spurious retracts - }; - const next = prev - 1; - if (next === 0) { - this.#subMatchCount.delete(outerToken); - } - else { - this.#subMatchCount.set(outerToken, next); - }; - if (next === 0 && - this.#outerTokens.has(outerToken) && - !this.#passingTokens.has(outerToken)) { - this.#passingTokens.add(outerToken); - for (const listener of this.#activateListeners) { - listener(outerToken); - } - } - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQyxVQUFVLENBQUM7WUFDdEI7UUFDRjtJQUNGO0lBRUE7Ozs7Ozs7O0lBUUEsb0JBQW9CLENBQUMsU0FBZ0IsRUFBRSxVQUFpQjtRQUN0RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQ3JELElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNkLE9BQU8sQ0FBQztRQUNWO1FBQ0EsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDckIsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQ3hDO2FBQU87WUFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO1FBQzNDO1FBRUEsSUFDRSxJQUFJLEtBQUssQ0FBQztZQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUNqQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUNwQztZQUNBLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUNuQyxLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtnQkFDOUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUN0QjtRQUNGO0lBQ0YiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9uY2MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBOY2NOb2RlICsgTmNjUGFydG5lciDigJQgc3ViY29uanVuY3Rpb24gKG5vdC1jb3VudC1jb25kaXRpb24pIG5lZ2F0aW9uLlxuICpcbiAqIFBlciBEb29yZW5ib3MgMTk5NSDCpzIuNi4zLiBVbmxpa2Ugc2ltcGxlIG5lZ2F0aW9uIChOT1Qgb2YgYSBzaW5nbGUgcGF0dGVybiksXG4gKiBOQ0MgbmVnYXRlcyBhbiBlbnRpcmUgY29uanVuY3Rpb24gb2YgTiBjb25kaXRpb25zOiB0aGUgb3V0ZXIgdG9rZW4gcGFzc2VzXG4gKiBvbmx5IGlmIHRoZXJlIGlzIE5PIGNvbWJpbmF0aW9uIG9mIGZhY3RzIHNhdGlzZnlpbmcgYWxsIE4gc3ViLWNvbmRpdGlvbnMuXG4gKlxuICogQXJjaGl0ZWN0dXJlOlxuICogICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gKiAgIOKUgiBvdXRlciBsZWZ0IGluIOKUguKUgOKUgOKUgOKUgOKUgOKUgOKWtiDilIIgICAgIE5jY05vZGUgICAgICDilILilIDilIDilIDilIDilIDilIDilrYg4pSCIGRvd25zdHJlYW0g4pSCXG4gKiAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAgICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4payXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBzdWItbWF0Y2ggbm90aWZpY2F0aW9uc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgICBOY2NQYXJ0bmVyICAg4pSCXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4payXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBmZWVkIGZyb21cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5DQyBzdWItbmV0d29yayB0ZXJtaW5hbFxuICpcbiAqIFRoZSBOQ0Mgc3ViLW5ldHdvcmsgKGEgY2hhaW4gb2Ygam9pbi9iZXRhIG5vZGVzIG1hdGNoaW5nIHRoZSBuZWdhdGVkXG4gKiBjb25qdW5jdGlvbikgaGFzIGl0cyB0ZXJtaW5hbCBmZWVkIGBwYXJ0bmVyLmxlZnRBY3RpdmF0ZShzdWJUb2tlbiwgb3V0ZXJUb2tlbilgXG4gKiB3aGVuZXZlciBhIGNvbXBsZXRlIHN1Yi1tYXRjaCBpcyBmb3JtZWQsIGFuZCBgbGVmdERlYWN0aXZhdGUoLi4uKWAgd2hlbmV2ZXJcbiAqIHRoYXQgc3ViLW1hdGNoIGRpc3NvbHZlcy4gVGhlIGBvdXRlclRva2VuYCBhcmd1bWVudCBpcyB0aGUgcGFyZW50IHBhcnRpYWxcbiAqIG1hdGNoIGZyb20gd2hpY2ggdGhlIHN1Yi1uZXR3b3JrIGV4dGVuZGVkIOKAlCB0aGlzIGlzIHRoZSB0b2tlbiB3aG9zZVxuICogcGFzcy9ibG9jayBzdGF0ZSBkZXBlbmRzIG9uIHRoZSBzdWItbWF0Y2ggY291bnQuXG4gKlxuICogVGhlIE5jY05vZGUgbWFpbnRhaW5zIGEgcmVmZXJlbmNlIGNvdW50IG9mIGFjdGl2ZSBzdWItbWF0Y2hlcyBwZXIgb3V0ZXJcbiAqIHRva2VuOiB3aGVuIHRoZSBjb3VudCB0cmFuc2l0aW9ucyAwIOKGkiAxIGFuIG91dGVyIHRva2VuIHRoYXQgd2FzIHBhc3NpbmdcbiAqIGRvd25zdHJlYW0gaXMgd2l0aGRyYXduOyB3aGVuIGl0IHRyYW5zaXRpb25zIDEg4oaSIDAgdGhlIHRva2VuIGlzXG4gKiByZS1hY3RpdmF0ZWQgZG93bnN0cmVhbSAocHJvdmlkZWQgdGhlIG91dGVyIHRva2VuIGlzIHN0aWxsIGtub3duKS5cbiAqL1xuaW1wb3J0IHR5cGUgeyBUb2tlbiB9IGZyb20gXCIuL2JldGEuanNcIjtcblxuLyoqIExpc3RlbmVyIGludm9rZWQgd2hlbiBhbiBvdXRlciB0b2tlbiBwYXNzZXMgZG93bnN0cmVhbS4gKi9cbnR5cGUgQWN0aXZhdGVMaXN0ZW5lciA9ICh0b2tlbjogVG9rZW4pID0+IHZvaWQ7XG4vKiogTGlzdGVuZXIgaW52b2tlZCB3aGVuIGFuIG91dGVyIHRva2VuIGlzIHdpdGhkcmF3biBkb3duc3RyZWFtLiAqL1xudHlwZSBEZWFjdGl2YXRlTGlzdGVuZXIgPSAodG9rZW46IFRva2VuKSA9PiB2b2lkO1xuXG4vKipcbiAqIFRlcm1pbmFsIG5vZGUgZm9yIHRoZSBOQ0Mgc3ViLW5ldHdvcmsuXG4gKlxuICogQ2FycmllcyBhIGJhY2stcmVmZXJlbmNlIHRvIGl0cyB7QGxpbmsgTmNjTm9kZX07IHRoZSBOY2NOb2RlIGlzIHNldFxuICogZXhhY3RseSBvbmNlIGJ5IHRoZSBOY2NOb2RlJ3MgY29uc3RydWN0b3IuIElmIHRoZSBwYXJ0bmVyIGlzIG5vdCB5ZXRcbiAqIHdpcmVkIHRvIGFuIE5jY05vZGUsIGFjdGl2YXRpb25zIGFyZSBzaWxlbnRseSBpZ25vcmVkIOKAlCB0aGlzIGtlZXBzXG4gKiBjb25zdHJ1Y3Rpb24gb3JkZXIgb2YgYG5ldyBOY2NQYXJ0bmVyKClgIC8gYG5ldyBOY2NOb2RlKHBhcnRuZXIpYFxuICogZmxleGlibGUgZm9yIHRlc3RzIGFuZCBidWlsZGVyIGNvZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBOY2NQYXJ0bmVyIHtcbiAgI25jYzogTmNjTm9kZSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBOb3RpZnkgdGhlIE5jY05vZGUgdGhhdCBhIG5ldyBjb21wbGV0ZSBzdWItbWF0Y2ggaGFzIGZvcm1lZCBmb3IgdGhlXG4gICAqIGdpdmVuIGBvdXRlclRva2VuYC4gQ2FsbGVkIGJ5IHRoZSBzdWItbmV0d29yaydzIHRlcm1pbmFsIHByb2R1Y3Rpb24uXG4gICAqL1xuICBsZWZ0QWN0aXZhdGUoc3ViVG9rZW46IFRva2VuLCBvdXRlclRva2VuOiBUb2tlbik6IHZvaWQge1xuICAgIHRoaXMuI25jYz8ub25TdWJNYXRjaEFjdGl2YXRlKHN1YlRva2VuLCBvdXRlclRva2VuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZnkgdGhlIE5jY05vZGUgdGhhdCBhIHByZXZpb3VzbHktZm9ybWVkIHN1Yi1tYXRjaCBoYXMgZGlzc29sdmVkLlxuICAgKi9cbiAgbGVmdERlYWN0aXZhdGUoc3ViVG9rZW46IFRva2VuLCBvdXRlclRva2VuOiBUb2tlbik6IHZvaWQge1xuICAgIHRoaXMuI25jYz8ub25TdWJNYXRjaERlYWN0aXZhdGUoc3ViVG9rZW4sIG91dGVyVG9rZW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmQgdGhpcyBwYXJ0bmVyIHRvIGl0cyBvd25pbmcgTmNjTm9kZS4gQ2FsbGVkIGJ5IHRoZSBOY2NOb2RlXG4gICAqIGNvbnN0cnVjdG9yLiBSZWJpbmRpbmcgaXMgaW50ZW50aW9uYWxseSBhIG5vLW9wIGFmdGVyIHRoZSBmaXJzdCBjYWxsIOKAlFxuICAgKiBhIHBhcnRuZXIgaXMgcGFpcmVkIHdpdGggZXhhY3RseSBvbmUgTmNjTm9kZSBmb3IgbGlmZS5cbiAgICovXG4gIHNldE5jYyhuY2M6IE5jY05vZGUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jbmNjID09PSBudWxsKSB7XG4gICAgICB0aGlzLiNuY2MgPSBuY2M7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQmV0YS1uZXR3b3JrIG5vZGUgaW1wbGVtZW50aW5nIHN1YmNvbmp1bmN0aW9uIG5lZ2F0aW9uLlxuICpcbiAqIERvd25zdHJlYW0gc3Vic2NyaWJlcnMgc2VlIGFuIG91dGVyIHRva2VuIGlmZiB0aGUgTkNDIHN1Yi1uZXR3b3JrIHlpZWxkc1xuICogemVybyBjb21wbGV0ZSBzdWItbWF0Y2hlcyBmb3IgaXQuIEFycml2YWxzIGFuZCBkZXBhcnR1cmVzIG9mIHN1Yi1tYXRjaGVzXG4gKiBhcmUgcmVwb3J0ZWQgdmlhIHRoZSBwYWlyZWQge0BsaW5rIE5jY1BhcnRuZXJ9LlxuICovXG5leHBvcnQgY2xhc3MgTmNjTm9kZSB7XG4gIHJlYWRvbmx5ICNhY3RpdmF0ZUxpc3RlbmVyczogQWN0aXZhdGVMaXN0ZW5lcltdID0gW107XG4gIHJlYWRvbmx5ICNkZWFjdGl2YXRlTGlzdGVuZXJzOiBEZWFjdGl2YXRlTGlzdGVuZXJbXSA9IFtdO1xuXG4gIC8qKiBBY3RpdmUgc3ViLW1hdGNoIGNvdW50IHBlciBvdXRlciB0b2tlbiAoYWJzZW50IGVudHJ5IOKJoSAwKS4gKi9cbiAgcmVhZG9ubHkgI3N1Yk1hdGNoQ291bnQgPSBuZXcgTWFwPFRva2VuLCBudW1iZXI+KCk7XG4gIC8qKiBPdXRlciB0b2tlbnMgY3VycmVudGx5IHByb3BhZ2F0ZWQgZG93bnN0cmVhbS4gKi9cbiAgcmVhZG9ubHkgI3Bhc3NpbmdUb2tlbnMgPSBuZXcgU2V0PFRva2VuPigpO1xuICAvKiogQWxsIG91dGVyIHRva2VucyBsZWZ0LWFjdGl2YXRlZCBhbmQgbm90IHlldCBsZWZ0LWRlYWN0aXZhdGVkLiAqL1xuICByZWFkb25seSAjb3V0ZXJUb2tlbnMgPSBuZXcgU2V0PFRva2VuPigpO1xuXG4gIGNvbnN0cnVjdG9yKHBhcnRuZXI6IE5jY1BhcnRuZXIpIHtcbiAgICBwYXJ0bmVyLnNldE5jYyh0aGlzKTtcbiAgfVxuXG4gIC8qKiBTdWJzY3JpYmUgdG8gZG93bnN0cmVhbSBhY3RpdmF0aW9ucyAodG9rZW5zIHBhc3NpbmcgdGhlIE5DQyBmaWx0ZXIpLiAqL1xuICBhZGREb3duc3RyZWFtQWN0aXZhdGUobGlzdGVuZXI6IEFjdGl2YXRlTGlzdGVuZXIpOiB2b2lkIHtcbiAgICB0aGlzLiNhY3RpdmF0ZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKiBTdWJzY3JpYmUgdG8gZG93bnN0cmVhbSBkZWFjdGl2YXRpb25zICh0b2tlbnMgd2l0aGRyYXduKS4gKi9cbiAgYWRkRG93bnN0cmVhbURlYWN0aXZhdGUobGlzdGVuZXI6IERlYWN0aXZhdGVMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuI2RlYWN0aXZhdGVMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICAvKipcbiAgICogQWNjZXB0IGFuIG91dGVyIHBhcnRpYWwgbWF0Y2guXG4gICAqXG4gICAqIFRoZSB0b2tlbiBpcyBwYXNzZWQgZG93bnN0cmVhbSBpbW1lZGlhdGVseSB3aGVuIHRoZSBzdWItbWF0Y2ggY291bnRcbiAgICogZm9yIGl0IGlzIHplcm8uIElmIGEgc3ViLW1hdGNoIGFscmVhZHkgZXhpc3RzIChlLmcuIHRoZSBzdWItbmV0d29ya1xuICAgKiBhY3RpdmF0ZWQgYmVmb3JlIHRoZSBvdXRlciBsZWZ0IGlucHV0IGRpZCksIHRoZSB0b2tlbiBpcyB0cmFja2VkIGJ1dFxuICAgKiB3aXRoaGVsZCBmcm9tIGRvd25zdHJlYW0gdW50aWwgdGhlIGNvdW50IHJldHVybnMgdG8gemVyby5cbiAgICovXG4gIGxlZnRBY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICB0aGlzLiNvdXRlclRva2Vucy5hZGQodG9rZW4pO1xuICAgIGNvbnN0IGNvdW50ID0gdGhpcy4jc3ViTWF0Y2hDb3VudC5nZXQodG9rZW4pID8/IDA7XG5cbiAgICBpZiAoY291bnQgPT09IDApIHtcbiAgICAgIHRoaXMuI3Bhc3NpbmdUb2tlbnMuYWRkKHRva2VuKTtcbiAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy4jYWN0aXZhdGVMaXN0ZW5lcnMpIHtcbiAgICAgICAgbGlzdGVuZXIodG9rZW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaXRoZHJhdyBhbiBvdXRlciBwYXJ0aWFsIG1hdGNoLlxuICAgKlxuICAgKiBJZiB0aGUgdG9rZW4gaXMgY3VycmVudGx5IHBhc3NpbmcsIGZpcmUgZG93bnN0cmVhbS1kZWFjdGl2YXRlOyBvdGhlcndpc2VcbiAgICogc2lsZW50bHkgZHJvcCBpdC4gVGhlIHN1Yi1tYXRjaCBjb3VudCBpcyBkaXNjYXJkZWQgc28gc3RhbGUgc3ViLW1hdGNoXG4gICAqIHJldHJhY3Rpb25zIGFmdGVyIHRoaXMgcG9pbnQgYmVjb21lIG5vLW9wcyBmb3IgdGhpcyB0b2tlbi5cbiAgICovXG4gIGxlZnREZWFjdGl2YXRlKHRva2VuOiBUb2tlbik6IHZvaWQge1xuICAgIHRoaXMuI291dGVyVG9rZW5zLmRlbGV0ZSh0b2tlbik7XG4gICAgdGhpcy4jc3ViTWF0Y2hDb3VudC5kZWxldGUodG9rZW4pO1xuXG4gICAgaWYgKHRoaXMuI3Bhc3NpbmdUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgdGhpcy4jcGFzc2luZ1Rva2Vucy5kZWxldGUodG9rZW4pO1xuICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNkZWFjdGl2YXRlTGlzdGVuZXJzKSB7XG4gICAgICAgIGxpc3RlbmVyKHRva2VuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWw6IHN1Yi1uZXR3b3JrIHJlcG9ydHMgYSBuZXcgY29tcGxldGUgc3ViLW1hdGNoLlxuICAgKlxuICAgKiBJbmNyZW1lbnRpbmcgdGhlIGNvdW50IGZyb20gMCB0byAxIGJsb2NrcyB0aGUgb3V0ZXIgdG9rZW4gaWYgaXQgaXNcbiAgICogY3VycmVudGx5IHBhc3NpbmcuIFRoZSBgX3N1YlRva2VuYCBhcmd1bWVudCBpcyB1bnVzZWQgYnkgdGhlXG4gICAqIGNvdW50LWJhc2VkIHNjaGVtZSBidXQgcmV0YWluZWQgaW4gdGhlIHNpZ25hdHVyZSBwZXIgRG9vcmVuYm9zIHNvIHRoYXRcbiAgICogbW9yZSBlbGFib3JhdGUgdmFyaWFudHMgKGUuZy4gcHJlc2VydmluZyBtYXRjaGVkIHN1Yi10b2tlbnMgZm9yXG4gICAqIGV4cGxhbmF0aW9uKSBjYW4gc2xvdCBpbiB3aXRob3V0IGNoYW5naW5nIHRoZSBwYXJ0bmVyIHByb3RvY29sLlxuICAgKi9cbiAgb25TdWJNYXRjaEFjdGl2YXRlKF9zdWJUb2tlbjogVG9rZW4sIG91dGVyVG9rZW46IFRva2VuKTogdm9pZCB7XG4gICAgY29uc3QgcHJldiA9IHRoaXMuI3N1Yk1hdGNoQ291bnQuZ2V0KG91dGVyVG9rZW4pID8/IDA7XG4gICAgdGhpcy4jc3ViTWF0Y2hDb3VudC5zZXQob3V0ZXJUb2tlbiwgcHJldiArIDEpO1xuXG4gICAgaWYgKHByZXYgPT09IDAgJiYgdGhpcy4jcGFzc2luZ1Rva2Vucy5oYXMob3V0ZXJUb2tlbikpIHtcbiAgICAgIHRoaXMuI3Bhc3NpbmdUb2tlbnMuZGVsZXRlKG91dGVyVG9rZW4pO1xuICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNkZWFjdGl2YXRlTGlzdGVuZXJzKSB7XG4gICAgICAgIGxpc3RlbmVyKG91dGVyVG9rZW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbDogc3ViLW5ldHdvcmsgcmVwb3J0cyBhIHN1Yi1tYXRjaCBoYXMgZGlzc29sdmVkLlxuICAgKlxuICAgKiBEZWNyZW1lbnRpbmcgdGhlIGNvdW50IGZyb20gMSB0byAwIHJlLWFjdGl2YXRlcyB0aGUgb3V0ZXIgdG9rZW5cbiAgICogZG93bnN0cmVhbSwgcHJvdmlkZWQgdGhlIHRva2VuIGhhcyBiZWVuIGxlZnQtYWN0aXZhdGVkIGFuZCBpcyBub3RcbiAgICogYWxyZWFkeSBwYXNzaW5nLiBUaGUgY291bnQgaXMgY2xhbXBlZCBhdCB6ZXJvIHRvIHRvbGVyYXRlIGlkZW1wb3RlbnRcbiAgICogcmV0cmFjdGlvbnMuXG4gICAqL1xuICBvblN1Yk1hdGNoRGVhY3RpdmF0ZShfc3ViVG9rZW46IFRva2VuLCBvdXRlclRva2VuOiBUb2tlbik6IHZvaWQge1xuICAgIGNvbnN0IHByZXYgPSB0aGlzLiNzdWJNYXRjaENvdW50LmdldChvdXRlclRva2VuKSA/PyAwO1xuICAgIGlmIChwcmV2ID09PSAwKSB7XG4gICAgICByZXR1cm47IC8vIGNsYW1wIOKAlCBpZ25vcmUgc3B1cmlvdXMgcmV0cmFjdHNcbiAgICB9XG4gICAgY29uc3QgbmV4dCA9IHByZXYgLSAxO1xuICAgIGlmIChuZXh0ID09PSAwKSB7XG4gICAgICB0aGlzLiNzdWJNYXRjaENvdW50LmRlbGV0ZShvdXRlclRva2VuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jc3ViTWF0Y2hDb3VudC5zZXQob3V0ZXJUb2tlbiwgbmV4dCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgbmV4dCA9PT0gMCAmJlxuICAgICAgdGhpcy4jb3V0ZXJUb2tlbnMuaGFzKG91dGVyVG9rZW4pICYmXG4gICAgICAhdGhpcy4jcGFzc2luZ1Rva2Vucy5oYXMob3V0ZXJUb2tlbilcbiAgICApIHtcbiAgICAgIHRoaXMuI3Bhc3NpbmdUb2tlbnMuYWRkKG91dGVyVG9rZW4pO1xuICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNhY3RpdmF0ZUxpc3RlbmVycykge1xuICAgICAgICBsaXN0ZW5lcihvdXRlclRva2VuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9yZXRlL2Rpc3QvbmNjLmpzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/78de59ef0bd506df2a5315e7cd51c3c91f34b2ff b/7xOfJqsDU787fe61oSCq1/web/78de59ef0bd506df2a5315e7cd51c3c91f34b2ff deleted file mode 100644 index 8e4de46..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/78de59ef0bd506df2a5315e7cd51c3c91f34b2ff +++ /dev/null @@ -1,5 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "default", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_export_default__ } catch {} }}); -const __vite_ssr_export_default__ = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%20width='45'%20height='45'%3e%3cg%20style='opacity:1;%20fill:none;%20fill-opacity:1;%20fill-rule:evenodd;%20stroke:%23000000;%20stroke-width:1.5;%20stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;%20stroke-dasharray:none;%20stroke-opacity:1;'%20transform='translate(0,0.3)'%3e%3cpath%20d='M%2022,10%20C%2032.5,11%2038.5,18%2038,39%20L%2015,39%20C%2015,30%2025,32.5%2023,18'%20style='fill:%23ffffff;%20stroke:%23000000;'%20/%3e%3cpath%20d='M%2024,18%20C%2024.38,20.91%2018.45,25.37%2016,27%20C%2013,29%2013.18,31.34%2011,31%20C%209.958,30.06%2012.41,27.96%2011,28%20C%2010,28%2011.19,29.23%2010,30%20C%209,30%205.997,31%206,26%20C%206,24%2012,14%2012,14%20C%2012,14%2013.89,12.1%2014,10.5%20C%2013.27,9.506%2013.5,8.5%2013.5,7.5%20C%2014.5,6.5%2016.5,10%2016.5,10%20L%2018.5,10%20C%2018.5,10%2019.28,8.008%2021,7%20C%2022,7%2022,10%2022,10'%20style='fill:%23ffffff;%20stroke:%23000000;'%20/%3e%3cpath%20d='M%209.5%2025.5%20A%200.5%200.5%200%201%201%208.5,25.5%20A%200.5%200.5%200%201%201%209.5%2025.5%20z'%20style='fill:%23000000;%20stroke:%23000000;'%20/%3e%3cpath%20d='M%2015%2015.5%20A%200.5%201.5%200%201%201%2014,15.5%20A%200.5%201.5%200%201%201%2015%2015.5%20z'%20transform='matrix(0.866,0.5,-0.5,0.866,9.693,-5.173)'%20style='fill:%23000000;%20stroke:%23000000;'%20/%3e%3c/g%3e%3c/svg%3e" - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndoaXRlLWtuaWdodC5zdmciXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjP3htbCUyMHZlcnNpb249JzEuMCclMjBlbmNvZGluZz0nVVRGLTgnJTIwc3RhbmRhbG9uZT0nbm8nPyUzZSUzYyFET0NUWVBFJTIwc3ZnJTIwUFVCTElDJTIwJy0vL1czQy8vRFREJTIwU1ZHJTIwMS4xLy9FTiclMjAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJyUzZSUzY3N2ZyUyMHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclMjB2ZXJzaW9uPScxLjEnJTIwd2lkdGg9JzQ1JyUyMGhlaWdodD0nNDUnJTNlJTNjZyUyMHN0eWxlPSdvcGFjaXR5OjE7JTIwZmlsbDpub25lOyUyMGZpbGwtb3BhY2l0eToxOyUyMGZpbGwtcnVsZTpldmVub2RkOyUyMHN0cm9rZTolMjMwMDAwMDA7JTIwc3Ryb2tlLXdpZHRoOjEuNTslMjBzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDslMjBzdHJva2UtZGFzaGFycmF5Om5vbmU7JTIwc3Ryb2tlLW9wYWNpdHk6MTsnJTIwdHJhbnNmb3JtPSd0cmFuc2xhdGUoMCwwLjMpJyUzZSUzY3BhdGglMjBkPSdNJTIwMjIsMTAlMjBDJTIwMzIuNSwxMSUyMDM4LjUsMTglMjAzOCwzOSUyMEwlMjAxNSwzOSUyMEMlMjAxNSwzMCUyMDI1LDMyLjUlMjAyMywxOCclMjBzdHlsZT0nZmlsbDolMjNmZmZmZmY7JTIwc3Ryb2tlOiUyMzAwMDAwMDsnJTIwLyUzZSUzY3BhdGglMjBkPSdNJTIwMjQsMTglMjBDJTIwMjQuMzgsMjAuOTElMjAxOC40NSwyNS4zNyUyMDE2LDI3JTIwQyUyMDEzLDI5JTIwMTMuMTgsMzEuMzQlMjAxMSwzMSUyMEMlMjA5Ljk1OCwzMC4wNiUyMDEyLjQxLDI3Ljk2JTIwMTEsMjglMjBDJTIwMTAsMjglMjAxMS4xOSwyOS4yMyUyMDEwLDMwJTIwQyUyMDksMzAlMjA1Ljk5NywzMSUyMDYsMjYlMjBDJTIwNiwyNCUyMDEyLDE0JTIwMTIsMTQlMjBDJTIwMTIsMTQlMjAxMy44OSwxMi4xJTIwMTQsMTAuNSUyMEMlMjAxMy4yNyw5LjUwNiUyMDEzLjUsOC41JTIwMTMuNSw3LjUlMjBDJTIwMTQuNSw2LjUlMjAxNi41LDEwJTIwMTYuNSwxMCUyMEwlMjAxOC41LDEwJTIwQyUyMDE4LjUsMTAlMjAxOS4yOCw4LjAwOCUyMDIxLDclMjBDJTIwMjIsNyUyMDIyLDEwJTIwMjIsMTAnJTIwc3R5bGU9J2ZpbGw6JTIzZmZmZmZmOyUyMHN0cm9rZTolMjMwMDAwMDA7JyUyMC8lM2UlM2NwYXRoJTIwZD0nTSUyMDkuNSUyMDI1LjUlMjBBJTIwMC41JTIwMC41JTIwMCUyMDElMjAxJTIwOC41LDI1LjUlMjBBJTIwMC41JTIwMC41JTIwMCUyMDElMjAxJTIwOS41JTIwMjUuNSUyMHonJTIwc3R5bGU9J2ZpbGw6JTIzMDAwMDAwOyUyMHN0cm9rZTolMjMwMDAwMDA7JyUyMC8lM2UlM2NwYXRoJTIwZD0nTSUyMDE1JTIwMTUuNSUyMEElMjAwLjUlMjAxLjUlMjAwJTIwMSUyMDElMjAxNCwxNS41JTIwQSUyMDAuNSUyMDEuNSUyMDAlMjAxJTIwMSUyMDE1JTIwMTUuNSUyMHonJTIwdHJhbnNmb3JtPSdtYXRyaXgoMC44NjYsMC41LC0wLjUsMC44NjYsOS42OTMsLTUuMTczKSclMjBzdHlsZT0nZmlsbDolMjMwMDAwMDA7JTIwc3Ryb2tlOiUyMzAwMDAwMDsnJTIwLyUzZSUzYy9nJTNlJTNjL3N2ZyUzZVwiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxtQ0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/7a14004d0a83487154bf6954b45a2ac876af434c b/7xOfJqsDU787fe61oSCq1/web/7a14004d0a83487154bf6954b45a2ac876af434c deleted file mode 100644 index c4022ec..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/7a14004d0a83487154bf6954b45a2ac876af434c +++ /dev/null @@ -1,179 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/presets/index.ts"); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/engine.ts", {"importedNames":["ChessEngine"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["algebraicToSquare"]}); -function pieceAt(engine, sq) { - const target = (0,__vite_ssr_import_3__.algebraicToSquare)(sq); - for (const f of engine.session.allFacts()) { - if (f.attr === "Position" && f.value === target) { - return f.id; - } - }; - return null; -} -function hpOf(engine, id) { - if (!engine.session.contains(id, "Hp")) return null; - return engine.session.get(id, "Hp"); -} -(0,__vite_ssr_import_0__.describe)("piece-hp preset — lifecycle hooks", () => { - (0,__vite_ssr_import_0__.it)("onActivate seeds Hp=2 on every piece", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null } - ]); - const pieces = engine.session.allFacts().filter( - (f) => f.attr === "PieceType" - ); - (0,__vite_ssr_import_0__.expect)(pieces.length).toBe(32); - for (const p of pieces) { - (0,__vite_ssr_import_0__.expect)(engine.session.contains(p.id, "Hp")).toBe(true); - (0,__vite_ssr_import_0__.expect)(engine.session.get(p.id, "Hp")).toBe(2); - } - }); - (0,__vite_ssr_import_0__.it)("onDeactivate retracts Hp from every piece", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null } - ]); - engine.setActivePresets([]); - for (const f of engine.session.allFacts()) { - if (f.attr === "PieceType") { - (0,__vite_ssr_import_0__.expect)(engine.session.contains(f.id, "Hp")).toBe(false); - } - } - }); - (0,__vite_ssr_import_0__.it)("onActivate is idempotent — doesn't stomp existing HP values", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null } - ]); - const e2Pawn = pieceAt(engine, "e2"); - engine.session.insert(e2Pawn, "Hp", 1); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null } - ]); - (0,__vite_ssr_import_0__.expect)(engine.session.get(e2Pawn, "Hp")).toBe(1); - }); - (0,__vite_ssr_import_0__.it)("scope or duration change on an already-active preset does NOT re-fire onActivate", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null } - ]); - const e2Pawn = pieceAt(engine, "e2"); - engine.session.insert(e2Pawn, "Hp", 1); - engine.setActivePresets([ - { id: "piece-hp", scope: "white", turnsRemaining: null } - ]); - (0,__vite_ssr_import_0__.expect)(engine.session.get(e2Pawn, "Hp")).toBe(1); - }); -}); -(0,__vite_ssr_import_0__.describe)("piece-hp preset — capture interception", () => { - (0,__vite_ssr_import_0__.it)("non-lethal capture: target loses 1 HP, attacker stays, turn passes", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null } - ]); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e2"), (0,__vite_ssr_import_3__.algebraicToSquare)("e4")) - ); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("d7"), (0,__vite_ssr_import_3__.algebraicToSquare)("d5")) - ); - const e4Pawn = pieceAt(engine, "e4"); - const d5Pawn = pieceAt(engine, "d5"); - (0,__vite_ssr_import_0__.expect)(hpOf(engine, d5Pawn)).toBe(2); - const capture = engine.findMove( - (0,__vite_ssr_import_3__.algebraicToSquare)("e4"), - (0,__vite_ssr_import_3__.algebraicToSquare)("d5") - ); - (0,__vite_ssr_import_0__.expect)(capture).not.toBeNull(); - engine.applyMove(capture); - (0,__vite_ssr_import_0__.expect)(pieceAt(engine, "e4")).toBe(e4Pawn); - (0,__vite_ssr_import_0__.expect)(pieceAt(engine, "d5")).toBe(d5Pawn); - (0,__vite_ssr_import_0__.expect)(hpOf(engine, d5Pawn)).toBe(1); - (0,__vite_ssr_import_0__.expect)(engine.getCurrentTurn()).toBe("black"); - }); - (0,__vite_ssr_import_0__.it)("lethal capture: target at 1 HP is fully removed, attacker moves in", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null } - ]); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e2"), (0,__vite_ssr_import_3__.algebraicToSquare)("e4")) - ); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("d7"), (0,__vite_ssr_import_3__.algebraicToSquare)("d5")) - ); - const d5Pawn = pieceAt(engine, "d5"); - engine.session.insert(d5Pawn, "Hp", 1); - const capture = engine.findMove( - (0,__vite_ssr_import_3__.algebraicToSquare)("e4"), - (0,__vite_ssr_import_3__.algebraicToSquare)("d5") - ); - engine.applyMove(capture); - (0,__vite_ssr_import_0__.expect)(pieceAt(engine, "e4")).toBeNull(); - (0,__vite_ssr_import_0__.expect)(pieceAt(engine, "d5")).not.toBeNull(); - (0,__vite_ssr_import_0__.expect)(pieceAt(engine, "d5")).not.toBe(d5Pawn); - }); - (0,__vite_ssr_import_0__.it)("repeated non-lethal captures drain HP to 0, third capture kills", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null } - ]); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e2"), (0,__vite_ssr_import_3__.algebraicToSquare)("e4")) - ); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("d7"), (0,__vite_ssr_import_3__.algebraicToSquare)("d5")) - ); - const d5Pawn = pieceAt(engine, "d5"); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e4"), (0,__vite_ssr_import_3__.algebraicToSquare)("d5")) - ); - (0,__vite_ssr_import_0__.expect)(hpOf(engine, d5Pawn)).toBe(1); - (0,__vite_ssr_import_0__.expect)(pieceAt(engine, "d5")).toBe(d5Pawn); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("a7"), (0,__vite_ssr_import_3__.algebraicToSquare)("a6")) - ); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e4"), (0,__vite_ssr_import_3__.algebraicToSquare)("d5")) - ); - (0,__vite_ssr_import_0__.expect)(pieceAt(engine, "e4")).toBeNull(); - const nowOnD5 = pieceAt(engine, "d5"); - (0,__vite_ssr_import_0__.expect)(nowOnD5).not.toBeNull(); - (0,__vite_ssr_import_0__.expect)(nowOnD5).not.toBe(d5Pawn); - }); - (0,__vite_ssr_import_0__.it)("deactivating after damage leaves pieces un-healed but without Hp attribute", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null } - ]); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e2"), (0,__vite_ssr_import_3__.algebraicToSquare)("e4")) - ); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("d7"), (0,__vite_ssr_import_3__.algebraicToSquare)("d5")) - ); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e4"), (0,__vite_ssr_import_3__.algebraicToSquare)("d5")) - ); - const d5Pawn = pieceAt(engine, "d5"); - (0,__vite_ssr_import_0__.expect)(hpOf(engine, d5Pawn)).toBe(1); - engine.setActivePresets([]); - (0,__vite_ssr_import_0__.expect)(engine.session.contains(d5Pawn, "Hp")).toBe(false); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("a7"), (0,__vite_ssr_import_3__.algebraicToSquare)("a6")) - ); - const whiteMove = engine.findMove( - (0,__vite_ssr_import_3__.algebraicToSquare)("a2"), - (0,__vite_ssr_import_3__.algebraicToSquare)("a3") - ); - engine.applyMove(whiteMove); - (0,__vite_ssr_import_0__.expect)( - engine.session.allFacts().some((f) => f.attr === "Hp") - ).toBe(false); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFlBQVMseUNBQWtCLElBQUksTUFBRyx5Q0FBa0IsSUFBSSxDQUFDO0FBQUEsSUFDbEU7QUFHQSxVQUFNLFlBQVksT0FBTztBQUFBLFNBQ3ZCLHlDQUFrQixJQUFJO0FBQUEsU0FDdEIseUNBQWtCLElBQUk7QUFBQSxJQUN4QjtBQUNBLFdBQU8sVUFBVSxTQUFVO0FBRTNCO0FBQUEsTUFDRSxPQUFPLFFBQVEsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUyxJQUFJO0FBQUEsSUFDdkQsRUFBRSxLQUFLLEtBQUs7QUFBQSxFQUNkLENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJwaWVjZS1ocC50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW50ZWdyYXRpb24gdGVzdHMgZm9yIHRoZSBgcGllY2UtaHBgIHByZXNldC5cbiAqXG4gKiBDb3ZlcnMgdGhlIGxpZmVjeWNsZSBob29rcyAob25BY3RpdmF0ZSAvIG9uRGVhY3RpdmF0ZSkgQU5EIHRoZVxuICogY2FwdHVyZS1pbnRlcmNlcHRpb24gaG9vayAob25CZWZvcmVDYXB0dXJlIOKGkiBjb25zdW1lKS4gVGVzdHMgdXNlXG4gKiBgZW5naW5lLnNldEFjdGl2ZVByZXNldHMoLi4uKWAgc28gbGlmZWN5Y2xlIGhvb2tzIGZpcmU7IHVzaW5nXG4gKiBgLmFjdGl2ZVByZXNldHMucmVwbGFjZUFsbGAgZGlyZWN0bHkgd291bGQgYnlwYXNzIHRoZW0uXG4gKi9cbmltcG9ydCB7IGRlc2NyaWJlLCBpdCwgZXhwZWN0IH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgQ2hlc3NFbmdpbmUgfSBmcm9tIFwiLi4vZW5naW5lLmpzXCI7XG5pbXBvcnQgeyBhbGdlYnJhaWNUb1NxdWFyZSB9IGZyb20gXCIuLi9jb29yZC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuXG4vKiogRmluZCB0aGUgcGllY2UgY3VycmVudGx5IG9uIGEgZ2l2ZW4gYWxnZWJyYWljIHNxdWFyZTsgbnVsbCBpZiBlbXB0eS4gKi9cbmZ1bmN0aW9uIHBpZWNlQXQoZW5naW5lOiBDaGVzc0VuZ2luZSwgc3E6IHN0cmluZyk6IEVudGl0eUlkIHwgbnVsbCB7XG4gIGNvbnN0IHRhcmdldCA9IGFsZ2VicmFpY1RvU3F1YXJlKHNxKTtcbiAgZm9yIChjb25zdCBmIG9mIGVuZ2luZS5zZXNzaW9uLmFsbEZhY3RzKCkpIHtcbiAgICBpZiAoZi5hdHRyID09PSBcIlBvc2l0aW9uXCIgJiYgZi52YWx1ZSA9PT0gdGFyZ2V0KSB7XG4gICAgICByZXR1cm4gZi5pZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGhwT2YoZW5naW5lOiBDaGVzc0VuZ2luZSwgaWQ6IEVudGl0eUlkKTogbnVtYmVyIHwgbnVsbCB7XG4gIGlmICghZW5naW5lLnNlc3Npb24uY29udGFpbnMoaWQsIFwiSHBcIikpIHJldHVybiBudWxsO1xuICByZXR1cm4gZW5naW5lLnNlc3Npb24uZ2V0KGlkLCBcIkhwXCIpIGFzIG51bWJlcjtcbn1cblxuZGVzY3JpYmUoXCJwaWVjZS1ocCBwcmVzZXQg4oCUIGxpZmVjeWNsZSBob29rc1wiLCAoKSA9PiB7XG4gIGl0KFwib25BY3RpdmF0ZSBzZWVkcyBIcD0yIG9uIGV2ZXJ5IHBpZWNlXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiBcInBpZWNlLWhwXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcblxuICAgIC8vIDMyIHBpZWNlcyBvbiB0aGUgc3RhcnRpbmcgYm9hcmQ7IGV2ZXJ5IG9uZSBzaG91bGQgaGF2ZSBIcD0yLlxuICAgIGNvbnN0IHBpZWNlcyA9IGVuZ2luZS5zZXNzaW9uLmFsbEZhY3RzKCkuZmlsdGVyKFxuICAgICAgKGYpID0+IGYuYXR0ciA9PT0gXCJQaWVjZVR5cGVcIixcbiAgICApO1xuICAgIGV4cGVjdChwaWVjZXMubGVuZ3RoKS50b0JlKDMyKTtcbiAgICBmb3IgKGNvbnN0IHAgb2YgcGllY2VzKSB7XG4gICAgICBleHBlY3QoZW5naW5lLnNlc3Npb24uY29udGFpbnMocC5pZCwgXCJIcFwiKSkudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdChlbmdpbmUuc2Vzc2lvbi5nZXQocC5pZCwgXCJIcFwiKSkudG9CZSgyKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwib25EZWFjdGl2YXRlIHJldHJhY3RzIEhwIGZyb20gZXZlcnkgcGllY2VcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGVuZ2luZS5zZXRBY3RpdmVQcmVzZXRzKFtcbiAgICAgIHsgaWQ6IFwicGllY2UtaHBcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuICAgIGVuZ2luZS5zZXRBY3RpdmVQcmVzZXRzKFtdKTtcblxuICAgIGZvciAoY29uc3QgZiBvZiBlbmdpbmUuc2Vzc2lvbi5hbGxGYWN0cygpKSB7XG4gICAgICBpZiAoZi5hdHRyID09PSBcIlBpZWNlVHlwZVwiKSB7XG4gICAgICAgIGV4cGVjdChlbmdpbmUuc2Vzc2lvbi5jb250YWlucyhmLmlkLCBcIkhwXCIpKS50b0JlKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwib25BY3RpdmF0ZSBpcyBpZGVtcG90ZW50IOKAlCBkb2Vzbid0IHN0b21wIGV4aXN0aW5nIEhQIHZhbHVlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgZW5naW5lLnNldEFjdGl2ZVByZXNldHMoW1xuICAgICAgeyBpZDogXCJwaWVjZS1ocFwiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgXSk7XG5cbiAgICAvLyBNYW51YWxseSBkYW1hZ2UgYSBwaWVjZSB0byBIcD0xLlxuICAgIGNvbnN0IGUyUGF3biA9IHBpZWNlQXQoZW5naW5lLCBcImUyXCIpITtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQoZTJQYXduLCBcIkhwXCIsIDEpO1xuXG4gICAgLy8gUmUtcnVubmluZyBzZXRBY3RpdmVQcmVzZXRzIHdpdGggdGhlIHNhbWUgc2V0IHNob3VsZCBiZSBhIG5vLW9wXG4gICAgLy8gZm9yIEhwIChvdXIgdHJhbnNpdGlvbiBsb2dpYyBzYXlzIFwiaWQgcHJlc2VudCBpbiBib3RoIOKGkiBubyBob29rXCIpLlxuICAgIC8vIEJ1dCBldmVuIGlmIHNvbWVvbmUgY2FsbHMgb25BY3RpdmF0ZSBkaXJlY3RseSB2aWEgYSBmdXR1cmUgY29kZVxuICAgIC8vIHBhdGgsIHRoZSBpZGVtcG90ZW5jZSBndWFyZCBlbnN1cmVzIEhwPTEgc3RheXMuXG4gICAgZW5naW5lLnNldEFjdGl2ZVByZXNldHMoW1xuICAgICAgeyBpZDogXCJwaWVjZS1ocFwiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgXSk7XG4gICAgZXhwZWN0KGVuZ2luZS5zZXNzaW9uLmdldChlMlBhd24sIFwiSHBcIikpLnRvQmUoMSk7XG4gIH0pO1xuXG4gIGl0KFwic2NvcGUgb3IgZHVyYXRpb24gY2hhbmdlIG9uIGFuIGFscmVhZHktYWN0aXZlIHByZXNldCBkb2VzIE5PVCByZS1maXJlIG9uQWN0aXZhdGVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGVuZ2luZS5zZXRBY3RpdmVQcmVzZXRzKFtcbiAgICAgIHsgaWQ6IFwicGllY2UtaHBcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuICAgIGNvbnN0IGUyUGF3biA9IHBpZWNlQXQoZW5naW5lLCBcImUyXCIpITtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQoZTJQYXduLCBcIkhwXCIsIDEpO1xuXG4gICAgLy8gQ2hhbmdlIHNjb3BlIG9ubHkg4oCUIGxpZmVjeWNsZSBzaG91bGQgbm90IGZpcmU7IEhwPTEgcHJlc2VydmVkLlxuICAgIGVuZ2luZS5zZXRBY3RpdmVQcmVzZXRzKFtcbiAgICAgIHsgaWQ6IFwicGllY2UtaHBcIiwgc2NvcGU6IFwid2hpdGVcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcbiAgICBleHBlY3QoZW5naW5lLnNlc3Npb24uZ2V0KGUyUGF3biwgXCJIcFwiKSkudG9CZSgxKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJwaWVjZS1ocCBwcmVzZXQg4oCUIGNhcHR1cmUgaW50ZXJjZXB0aW9uXCIsICgpID0+IHtcbiAgaXQoXCJub24tbGV0aGFsIGNhcHR1cmU6IHRhcmdldCBsb3NlcyAxIEhQLCBhdHRhY2tlciBzdGF5cywgdHVybiBwYXNzZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGVuZ2luZS5zZXRBY3RpdmVQcmVzZXRzKFtcbiAgICAgIHsgaWQ6IFwicGllY2UtaHBcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuXG4gICAgLy8gU2Nob2xhcnMtTWF0ZS1zdHlsZTogMS4gZTQgZTUgMi4gQmM0IE5jNiAzLiBRaDUg4oCmIGJ1dCB3ZSB3YW50IGFcbiAgICAvLyBjYXB0dXJlIGluIGEgY291cGxlIG1vdmVzLiBFYXNpZXN0OiAxLiBlNCBkNSAyLiBleGQ1IOKAlCB3aGl0ZVxuICAgIC8vIHBhd24gb24gZTQgY2FwdHVyZXMgYmxhY2sgcGF3biBvbiBkNS5cbiAgICBlbmdpbmUuYXBwbHlNb3ZlKFxuICAgICAgZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZTJcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiZTRcIikpISxcbiAgICApO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoXG4gICAgICBlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJkN1wiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJkNVwiKSkhLFxuICAgICk7XG5cbiAgICBjb25zdCBlNFBhd24gPSBwaWVjZUF0KGVuZ2luZSwgXCJlNFwiKSE7XG4gICAgY29uc3QgZDVQYXduID0gcGllY2VBdChlbmdpbmUsIFwiZDVcIikhO1xuICAgIGV4cGVjdChocE9mKGVuZ2luZSwgZDVQYXduKSkudG9CZSgyKTtcblxuICAgIC8vIEF0dGVtcHQgZXhkNS4gV2l0aCBwaWVjZS1ocCBhY3RpdmUsIHRhcmdldCBzdGFydHMgYXQgMiBIUCDihpIgZ29lc1xuICAgIC8vIHRvIDE7IG5vbi1sZXRoYWwsIGF0dGFja2VyIHN0YXlzIG9uIGU0LCBkNSBwYXduIHN0aWxsIHRoZXJlLlxuICAgIGNvbnN0IGNhcHR1cmUgPSBlbmdpbmUuZmluZE1vdmUoXG4gICAgICBhbGdlYnJhaWNUb1NxdWFyZShcImU0XCIpLFxuICAgICAgYWxnZWJyYWljVG9TcXVhcmUoXCJkNVwiKSxcbiAgICApO1xuICAgIGV4cGVjdChjYXB0dXJlKS5ub3QudG9CZU51bGwoKTtcbiAgICBlbmdpbmUuYXBwbHlNb3ZlKGNhcHR1cmUhKTtcblxuICAgIC8vIEF0dGFja2VyIGRpZCBOT1QgbW92ZTogZTQgc3RpbGwgb2NjdXBpZWQuXG4gICAgZXhwZWN0KHBpZWNlQXQoZW5naW5lLCBcImU0XCIpKS50b0JlKGU0UGF3bik7XG4gICAgLy8gVGFyZ2V0IHN0aWxsIHRoZXJlLlxuICAgIGV4cGVjdChwaWVjZUF0KGVuZ2luZSwgXCJkNVwiKSkudG9CZShkNVBhd24pO1xuICAgIC8vIFRhcmdldCBsb3N0IDEgSFAuXG4gICAgZXhwZWN0KGhwT2YoZW5naW5lLCBkNVBhd24pKS50b0JlKDEpO1xuICAgIC8vIFR1cm4gYWR2YW5jZWQgdG8gYmxhY2suXG4gICAgZXhwZWN0KGVuZ2luZS5nZXRDdXJyZW50VHVybigpKS50b0JlKFwiYmxhY2tcIik7XG4gIH0pO1xuXG4gIGl0KFwibGV0aGFsIGNhcHR1cmU6IHRhcmdldCBhdCAxIEhQIGlzIGZ1bGx5IHJlbW92ZWQsIGF0dGFja2VyIG1vdmVzIGluXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiBcInBpZWNlLWhwXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcblxuICAgIGVuZ2luZS5hcHBseU1vdmUoXG4gICAgICBlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJlMlwiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJlNFwiKSkhLFxuICAgICk7XG4gICAgZW5naW5lLmFwcGx5TW92ZShcbiAgICAgIGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImQ3XCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImQ1XCIpKSEsXG4gICAgKTtcblxuICAgIC8vIEhhbmQtZGFtYWdlIHRoZSBkNSBwYXduIGRvd24gdG8gMSBIUCBzbyB0aGUgbmV4dCBjYXB0dXJlIGlzIGxldGhhbC5cbiAgICBjb25zdCBkNVBhd24gPSBwaWVjZUF0KGVuZ2luZSwgXCJkNVwiKSE7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KGQ1UGF3biwgXCJIcFwiLCAxKTtcblxuICAgIGNvbnN0IGNhcHR1cmUgPSBlbmdpbmUuZmluZE1vdmUoXG4gICAgICBhbGdlYnJhaWNUb1NxdWFyZShcImU0XCIpLFxuICAgICAgYWxnZWJyYWljVG9TcXVhcmUoXCJkNVwiKSxcbiAgICApO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoY2FwdHVyZSEpO1xuXG4gICAgLy8gZTQgbm93IGVtcHR5LCBkNSBub3cgaG9sZHMgdGhlIHdoaXRlIHBhd24gKHN0YW5kYXJkIGNhcHR1cmVcbiAgICAvLyBzZW1hbnRpY3MgYXBwbHkgd2hlbiBIUCByZWFjaGVzIDApLlxuICAgIGV4cGVjdChwaWVjZUF0KGVuZ2luZSwgXCJlNFwiKSkudG9CZU51bGwoKTtcbiAgICBleHBlY3QocGllY2VBdChlbmdpbmUsIFwiZDVcIikpLm5vdC50b0JlTnVsbCgpO1xuICAgIGV4cGVjdChwaWVjZUF0KGVuZ2luZSwgXCJkNVwiKSkubm90LnRvQmUoZDVQYXduKTsgLy8gZDUgcGF3biByZXRyYWN0ZWRcbiAgfSk7XG5cbiAgaXQoXCJyZXBlYXRlZCBub24tbGV0aGFsIGNhcHR1cmVzIGRyYWluIEhQIHRvIDAsIHRoaXJkIGNhcHR1cmUga2lsbHNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGVuZ2luZS5zZXRBY3RpdmVQcmVzZXRzKFtcbiAgICAgIHsgaWQ6IFwicGllY2UtaHBcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuXG4gICAgLy8gQnVpbGQgYSBwb3NpdGlvbiB3aGVyZSB3aGl0ZSBhbmQgYmxhY2sgcGllY2VzIGNhbiByZXBlYXRlZGx5XG4gICAgLy8gcG9rZSBlYWNoIG90aGVyLiBFYXNpZXN0IHNldHVwOiBjbGVhciB0aGUgYm9hcmQsIHB1dCBhIHdoaXRlXG4gICAgLy8gcGF3biBvbiBlNCBhbmQgYmxhY2sgcGF3biBvbiBkNSwgdGhlbiBhbHRlcm5hdGUgY2FwdHVyZXMuXG4gICAgLy8gQWN0dWFsbHkgd2UnbGwgdXNlIG5hdHVyYWwgcGxheTpcbiAgICAvLyAgIDEuIGU0IGQ1ICAyLiBleGQ1IChkNSDihpIgSFAgMSkgIDMuIC4uLiAuLi4gdHJpY2t5IHdpdGhvdXRcbiAgICAvLyAgIGFsdGVybmF0aW9uLiBTaW1wbGVyOiBkaXJlY3RseSB0ZXN0IHdpdGggYSBjb250cml2ZWQgYm9hcmQuXG4gICAgZW5naW5lLmFwcGx5TW92ZShcbiAgICAgIGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImUyXCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImU0XCIpKSEsXG4gICAgKTtcbiAgICBlbmdpbmUuYXBwbHlNb3ZlKFxuICAgICAgZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZDdcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiZDVcIikpISxcbiAgICApO1xuICAgIGNvbnN0IGQ1UGF3biA9IHBpZWNlQXQoZW5naW5lLCBcImQ1XCIpITtcblxuICAgIC8vIEZpcnN0IHBva2U6IEhQIDIg4oaSIDEuXG4gICAgZW5naW5lLmFwcGx5TW92ZShcbiAgICAgIGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImU0XCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImQ1XCIpKSEsXG4gICAgKTtcbiAgICBleHBlY3QoaHBPZihlbmdpbmUsIGQ1UGF3bikpLnRvQmUoMSk7XG4gICAgZXhwZWN0KHBpZWNlQXQoZW5naW5lLCBcImQ1XCIpKS50b0JlKGQ1UGF3bik7XG5cbiAgICAvLyBCbGFjaydzIHR1cm4uIEJsYWNrIG5lZWRzIHRvIHBsYXkgYW55IG1vdmUgc28gd2hpdGUgY2FuIHBva2UgYWdhaW4uXG4gICAgZW5naW5lLmFwcGx5TW92ZShcbiAgICAgIGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImE3XCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImE2XCIpKSEsXG4gICAgKTtcblxuICAgIC8vIFNlY29uZCBwb2tlOiBIUCAxIOKGkiAwLCBsZXRoYWwuIGQ1IHBhd24gZGllcywgd2hpdGUgcGF3biBtb3ZlcyBpbi5cbiAgICBlbmdpbmUuYXBwbHlNb3ZlKFxuICAgICAgZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZTRcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiZDVcIikpISxcbiAgICApO1xuICAgIGV4cGVjdChwaWVjZUF0KGVuZ2luZSwgXCJlNFwiKSkudG9CZU51bGwoKTtcbiAgICBjb25zdCBub3dPbkQ1ID0gcGllY2VBdChlbmdpbmUsIFwiZDVcIik7XG4gICAgZXhwZWN0KG5vd09uRDUpLm5vdC50b0JlTnVsbCgpO1xuICAgIGV4cGVjdChub3dPbkQ1KS5ub3QudG9CZShkNVBhd24pO1xuICB9KTtcblxuICBpdChcImRlYWN0aXZhdGluZyBhZnRlciBkYW1hZ2UgbGVhdmVzIHBpZWNlcyB1bi1oZWFsZWQgYnV0IHdpdGhvdXQgSHAgYXR0cmlidXRlXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiBcInBpZWNlLWhwXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcblxuICAgIGVuZ2luZS5hcHBseU1vdmUoXG4gICAgICBlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJlMlwiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJlNFwiKSkhLFxuICAgICk7XG4gICAgZW5naW5lLmFwcGx5TW92ZShcbiAgICAgIGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImQ3XCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImQ1XCIpKSEsXG4gICAgKTtcbiAgICBlbmdpbmUuYXBwbHlNb3ZlKFxuICAgICAgZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZTRcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiZDVcIikpISxcbiAgICApO1xuXG4gICAgY29uc3QgZDVQYXduID0gcGllY2VBdChlbmdpbmUsIFwiZDVcIikhO1xuICAgIGV4cGVjdChocE9mKGVuZ2luZSwgZDVQYXduKSkudG9CZSgxKTtcblxuICAgIC8vIFRvZ2dsZSBvZmYuXG4gICAgZW5naW5lLnNldEFjdGl2ZVByZXNldHMoW10pO1xuICAgIC8vIEhwIGZhY3Qgc2hvdWxkIGJlIGdvbmUgZnJvbSBhbGwgcGllY2VzIGluY2x1ZGluZyB0aGUgZGFtYWdlZCBvbmUuXG4gICAgZXhwZWN0KGVuZ2luZS5zZXNzaW9uLmNvbnRhaW5zKGQ1UGF3biwgXCJIcFwiKSkudG9CZShmYWxzZSk7XG5cbiAgICAvLyBOZXh0IGNhcHR1cmUgYXR0ZW1wdCBzaG91bGQgYmUgbGV0aGFsIHZpYSBzdGFuZGFyZCBydWxlcy5cbiAgICBlbmdpbmUuYXBwbHlNb3ZlKFxuICAgICAgZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiYTdcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiYTZcIikpISxcbiAgICApO1xuICAgIC8vIFdoaXRlIHRvIHBsYXk7IG5lZWQgYSB3aGl0ZSBtb3ZlLiBBY3R1YWxseSB0dXJuIGlzIHdoaXRlIGhlcmVcbiAgICAvLyAoYmxhY2sganVzdCBwbGF5ZWQgYTYpLiBNb3ZlIGEgd2hpdGUgcGF3biBiYWNrIGludG8gdGhlIGZyYXk6XG4gICAgY29uc3Qgd2hpdGVNb3ZlID0gZW5naW5lLmZpbmRNb3ZlKFxuICAgICAgYWxnZWJyYWljVG9TcXVhcmUoXCJhMlwiKSxcbiAgICAgIGFsZ2VicmFpY1RvU3F1YXJlKFwiYTNcIiksXG4gICAgKTtcbiAgICBlbmdpbmUuYXBwbHlNb3ZlKHdoaXRlTW92ZSEpO1xuICAgIC8vIFdpdGhvdXQgcGllY2UtaHAsIG5vcm1hbCBjaGVzcyBzZW1hbnRpY3MgcmVzdW1lLlxuICAgIGV4cGVjdChcbiAgICAgIGVuZ2luZS5zZXNzaW9uLmFsbEZhY3RzKCkuc29tZSgoZikgPT4gZi5hdHRyID09PSBcIkhwXCIpLFxuICAgICkudG9CZShmYWxzZSk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvY2hlc3Mvc3JjL3ByZXNldHMvcGllY2UtaHAudGVzdC50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/7b9f60646d124ed7069776b1486ead04dd8b0f41 b/7xOfJqsDU787fe61oSCq1/web/7b9f60646d124ed7069776b1486ead04dd8b0f41 deleted file mode 100644 index d699927..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/7b9f60646d124ed7069776b1486ead04dd8b0f41 +++ /dev/null @@ -1,167 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect","beforeEach"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/presets/index.ts"); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/presets/active-set.ts", {"importedNames":["ActivePresetSet","PresetActivationError"]}); - - - -(0,__vite_ssr_import_0__.describe)("ActivePresetSet", () => { - let set; - (0,__vite_ssr_import_0__.beforeEach)(() => { - set = new __vite_ssr_import_2__.ActivePresetSet(); - }); - (0,__vite_ssr_import_0__.describe)("replaceAll — single-entry validation", () => { - (0,__vite_ssr_import_0__.it)("rejects unknown preset ids", () => { - (0,__vite_ssr_import_0__.expect)( - () => set.replaceAll([ - { id: "does-not-exist", scope: "both", turnsRemaining: null } - ]) - ).toThrow((0,__vite_ssr_import_2__.PresetActivationError)); - }); - (0,__vite_ssr_import_0__.it)("rejects invalid scope strings", () => { - (0,__vite_ssr_import_0__.expect)( - () => set.replaceAll([ - { - id: "knights-leap-twice", - // @ts-expect-error — deliberately invalid for runtime test - scope: "sideways", - turnsRemaining: null - } - ]) - ).toThrow(/invalid scope/); - }); - (0,__vite_ssr_import_0__.it)("rejects zero / negative / non-integer turnsRemaining", () => { - for (const bad of [0, -1, 1.5, Number.NaN]) { - (0,__vite_ssr_import_0__.expect)( - () => set.replaceAll([ - { id: "knights-leap-twice", scope: "both", turnsRemaining: bad } - ]) - ).toThrow(/turnsRemaining/); - } - }); - (0,__vite_ssr_import_0__.it)("accepts null turnsRemaining as permanent", () => { - set.replaceAll([ - { id: "knights-leap-twice", scope: "both", turnsRemaining: null } - ]); - (0,__vite_ssr_import_0__.expect)(set.has("knights-leap-twice")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("accepts positive integer turnsRemaining", () => { - set.replaceAll([ - { id: "knights-leap-twice", scope: "white", turnsRemaining: 3 } - ]); - (0,__vite_ssr_import_0__.expect)(set.list()[0]?.turnsRemaining).toBe(3); - }); - }); - (0,__vite_ssr_import_0__.describe)("replaceAll — loose compatibility", () => { - (0,__vite_ssr_import_0__.it)("blocks incompatible presets when scopes overlap (both+any)", () => { - (0,__vite_ssr_import_0__.expect)( - () => set.replaceAll([ - { id: "rook-warp", scope: "both", turnsRemaining: null }, - { id: "wrap-board", scope: "white", turnsRemaining: null } - ]) - ).toThrow(/incompatible/); - }); - (0,__vite_ssr_import_0__.it)("allows incompatible presets when scopes are disjoint", () => { - set.replaceAll([ - { id: "rook-warp", scope: "white", turnsRemaining: null }, - { id: "wrap-board", scope: "black", turnsRemaining: null } - ]); - (0,__vite_ssr_import_0__.expect)(set.has("rook-warp")).toBe(true); - (0,__vite_ssr_import_0__.expect)(set.has("wrap-board")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("blocks when both are the same explicit color", () => { - (0,__vite_ssr_import_0__.expect)( - () => set.replaceAll([ - { id: "rook-warp", scope: "white", turnsRemaining: null }, - { id: "wrap-board", scope: "white", turnsRemaining: null } - ]) - ).toThrow(/incompatible/); - }); - }); - (0,__vite_ssr_import_0__.describe)("replaceAll — atomicity", () => { - (0,__vite_ssr_import_0__.it)("leaves existing set untouched if validation fails", () => { - set.replaceAll([ - { id: "knights-leap-twice", scope: "both", turnsRemaining: null } - ]); - (0,__vite_ssr_import_0__.expect)( - () => set.replaceAll([ - { id: "knights-leap-twice", scope: "both", turnsRemaining: null }, - { id: "does-not-exist", scope: "both", turnsRemaining: null } - ]) - ).toThrow((0,__vite_ssr_import_2__.PresetActivationError)); - (0,__vite_ssr_import_0__.expect)(set.list()).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(set.has("knights-leap-twice")).toBe(true); - }); - }); - (0,__vite_ssr_import_0__.describe)("getForColor", () => { - (0,__vite_ssr_import_0__.it)("returns `both`-scoped presets for either color", () => { - set.replaceAll([ - { id: "knights-leap-twice", scope: "both", turnsRemaining: null } - ]); - (0,__vite_ssr_import_0__.expect)(set.getForColor("white").map((p) => p.id)).toEqual([ - "knights-leap-twice" - ]); - (0,__vite_ssr_import_0__.expect)(set.getForColor("black").map((p) => p.id)).toEqual([ - "knights-leap-twice" - ]); - }); - (0,__vite_ssr_import_0__.it)("filters color-scoped presets", () => { - set.replaceAll([ - { id: "knights-leap-twice", scope: "white", turnsRemaining: null }, - { id: "bishops-ignore-color", scope: "black", turnsRemaining: null } - ]); - (0,__vite_ssr_import_0__.expect)(set.getForColor("white").map((p) => p.id)).toEqual([ - "knights-leap-twice" - ]); - (0,__vite_ssr_import_0__.expect)(set.getForColor("black").map((p) => p.id)).toEqual([ - "bishops-ignore-color" - ]); - }); - }); - (0,__vite_ssr_import_0__.describe)("tickAfterMove — player-local turn counting", () => { - (0,__vite_ssr_import_0__.it)("ticks `both`-scoped presets on every half-move", () => { - set.replaceAll([ - { id: "knights-leap-twice", scope: "both", turnsRemaining: 2 } - ]); - set.tickAfterMove("white"); - (0,__vite_ssr_import_0__.expect)(set.list()[0]?.turnsRemaining).toBe(1); - set.tickAfterMove("black"); - (0,__vite_ssr_import_0__.expect)(set.list()).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("ticks white-scoped presets only after white moves", () => { - set.replaceAll([ - { id: "knights-leap-twice", scope: "white", turnsRemaining: 2 } - ]); - set.tickAfterMove("black"); - (0,__vite_ssr_import_0__.expect)(set.list()[0]?.turnsRemaining).toBe(2); - set.tickAfterMove("white"); - (0,__vite_ssr_import_0__.expect)(set.list()[0]?.turnsRemaining).toBe(1); - set.tickAfterMove("black"); - (0,__vite_ssr_import_0__.expect)(set.list()[0]?.turnsRemaining).toBe(1); - set.tickAfterMove("white"); - (0,__vite_ssr_import_0__.expect)(set.list()).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("never ticks permanent (turnsRemaining=null) entries", () => { - set.replaceAll([ - { id: "knights-leap-twice", scope: "both", turnsRemaining: null } - ]); - for (let i = 0; i < 50; i++) { - set.tickAfterMove(i % 2 === 0 ? "white" : "black"); - }; - (0,__vite_ssr_import_0__.expect)(set.has("knights-leap-twice")).toBe(true); - }); - }); - (0,__vite_ssr_import_0__.describe)("clone", () => { - (0,__vite_ssr_import_0__.it)("returns an independent deep copy", () => { - set.replaceAll([ - { id: "knights-leap-twice", scope: "white", turnsRemaining: 5 } - ]); - const copy = set.clone(); - copy.tickAfterMove("white"); - (0,__vite_ssr_import_0__.expect)(set.list()[0]?.turnsRemaining).toBe(5); - (0,__vite_ssr_import_0__.expect)(copy.list()[0]?.turnsRemaining).toBe(4); - }); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RSxhQUFhLENBQUM7QUFBQSxJQUNuQyxDQUFDO0FBRUQsaUNBQUcsdURBQXVELE1BQU07QUFDOUQsVUFBSSxXQUFXO0FBQUEsUUFDYixFQUFFLElBQUksc0JBQXNCLE9BQU8sUUFBUSxnQkFBZ0IsS0FBSztBQUFBLE1BQ2xFLENBQUM7QUFDRCxlQUFTLElBQUksR0FBRyxJQUFJLElBQUksS0FBSztBQUMzQixZQUFJLGNBQWMsSUFBSSxNQUFNLElBQUksVUFBVSxPQUFPO0FBQUEsTUFDbkQ7QUFDQSx1Q0FBTyxJQUFJLElBQUksb0JBQW9CLENBQUMsRUFBRSxLQUFLLElBQUk7QUFBQSxJQUNqRCxDQUFDO0FBQUEsRUFDSCxDQUFDO0FBRUQscUNBQVMsU0FBUyxNQUFNO0FBQ3RCLGlDQUFHLG9DQUFvQyxNQUFNO0FBQzNDLFVBQUksV0FBVztBQUFBLFFBQ2IsRUFBRSxJQUFJLHNCQUFzQixPQUFPLFNBQVMsZ0JBQWdCLEVBQUU7QUFBQSxNQUNoRSxDQUFDO0FBQ0QsWUFBTSxPQUFPLElBQUksTUFBTTtBQUN2QixXQUFLLGNBQWMsT0FBTztBQUUxQix1Q0FBTyxJQUFJLEtBQUssRUFBRSxDQUFDLEdBQUcsY0FBYyxFQUFFLEtBQUssQ0FBQztBQUM1Qyx1Q0FBTyxLQUFLLEtBQUssRUFBRSxDQUFDLEdBQUcsY0FBYyxFQUFFLEtBQUssQ0FBQztBQUFBLElBQy9DLENBQUM7QUFBQSxFQUNILENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJhY3RpdmUtc2V0LnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QsIGJlZm9yZUVhY2ggfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQge1xuICBBY3RpdmVQcmVzZXRTZXQsXG4gIFByZXNldEFjdGl2YXRpb25FcnJvcixcbn0gZnJvbSBcIi4vYWN0aXZlLXNldC5qc1wiO1xuXG5kZXNjcmliZShcIkFjdGl2ZVByZXNldFNldFwiLCAoKSA9PiB7XG4gIGxldCBzZXQ6IEFjdGl2ZVByZXNldFNldDtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBzZXQgPSBuZXcgQWN0aXZlUHJlc2V0U2V0KCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwicmVwbGFjZUFsbCDigJQgc2luZ2xlLWVudHJ5IHZhbGlkYXRpb25cIiwgKCkgPT4ge1xuICAgIGl0KFwicmVqZWN0cyB1bmtub3duIHByZXNldCBpZHNcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIHNldC5yZXBsYWNlQWxsKFtcbiAgICAgICAgICB7IGlkOiBcImRvZXMtbm90LWV4aXN0XCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICAgICAgXSksXG4gICAgICApLnRvVGhyb3coUHJlc2V0QWN0aXZhdGlvbkVycm9yKTtcbiAgICB9KTtcblxuICAgIGl0KFwicmVqZWN0cyBpbnZhbGlkIHNjb3BlIHN0cmluZ3NcIiwgKCkgPT4ge1xuICAgICAgLy8gVFMgd291bGQgbm9ybWFsbHkgY2F0Y2ggdGhpcywgYnV0IHdpcmUgdHJhZmZpYyBjYW4gcGFzcyBhbnl0aGluZy5cbiAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICBzZXQucmVwbGFjZUFsbChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwia25pZ2h0cy1sZWFwLXR3aWNlXCIsXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIOKAlCBkZWxpYmVyYXRlbHkgaW52YWxpZCBmb3IgcnVudGltZSB0ZXN0XG4gICAgICAgICAgICBzY29wZTogXCJzaWRld2F5c1wiLFxuICAgICAgICAgICAgdHVybnNSZW1haW5pbmc6IG51bGwsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSksXG4gICAgICApLnRvVGhyb3coL2ludmFsaWQgc2NvcGUvKTtcbiAgICB9KTtcblxuICAgIGl0KFwicmVqZWN0cyB6ZXJvIC8gbmVnYXRpdmUgLyBub24taW50ZWdlciB0dXJuc1JlbWFpbmluZ1wiLCAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGJhZCBvZiBbMCwgLTEsIDEuNSwgTnVtYmVyLk5hTl0pIHtcbiAgICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgICAgc2V0LnJlcGxhY2VBbGwoW1xuICAgICAgICAgICAgeyBpZDogXCJrbmlnaHRzLWxlYXAtdHdpY2VcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogYmFkIH0sXG4gICAgICAgICAgXSksXG4gICAgICAgICkudG9UaHJvdygvdHVybnNSZW1haW5pbmcvKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KFwiYWNjZXB0cyBudWxsIHR1cm5zUmVtYWluaW5nIGFzIHBlcm1hbmVudFwiLCAoKSA9PiB7XG4gICAgICBzZXQucmVwbGFjZUFsbChbXG4gICAgICAgIHsgaWQ6IFwia25pZ2h0cy1sZWFwLXR3aWNlXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICAgIF0pO1xuICAgICAgZXhwZWN0KHNldC5oYXMoXCJrbmlnaHRzLWxlYXAtdHdpY2VcIikpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdChcImFjY2VwdHMgcG9zaXRpdmUgaW50ZWdlciB0dXJuc1JlbWFpbmluZ1wiLCAoKSA9PiB7XG4gICAgICBzZXQucmVwbGFjZUFsbChbXG4gICAgICAgIHsgaWQ6IFwia25pZ2h0cy1sZWFwLXR3aWNlXCIsIHNjb3BlOiBcIndoaXRlXCIsIHR1cm5zUmVtYWluaW5nOiAzIH0sXG4gICAgICBdKTtcbiAgICAgIGV4cGVjdChzZXQubGlzdCgpWzBdPy50dXJuc1JlbWFpbmluZykudG9CZSgzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJyZXBsYWNlQWxsIOKAlCBsb29zZSBjb21wYXRpYmlsaXR5XCIsICgpID0+IHtcbiAgICAvLyBVc2VzIHJvb2std2FycCDihpQgd3JhcC1ib2FyZCBhcyB0aGUgY2Fub25pY2FsIG11dHVhbGx5LWluY29tcGF0aWJsZVxuICAgIC8vIHBhaXIg4oCUIHRoZXkgZGVmaW5lIGNvbnRyYWRpY3RvcnkgYm9hcmQtdG9wb2xvZ3kgc2VtYW50aWNzIGFuZFxuICAgIC8vIGdlbnVpbmVseSBjYW5ub3QgY29leGlzdC4gU2VlIFJVTEVTLm1kIGZvciB0aGUgZnVsbCBtYXRyaXguXG4gICAgaXQoXCJibG9ja3MgaW5jb21wYXRpYmxlIHByZXNldHMgd2hlbiBzY29wZXMgb3ZlcmxhcCAoYm90aCthbnkpXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICBzZXQucmVwbGFjZUFsbChbXG4gICAgICAgICAgeyBpZDogXCJyb29rLXdhcnBcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgICAgICAgIHsgaWQ6IFwid3JhcC1ib2FyZFwiLCBzY29wZTogXCJ3aGl0ZVwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgICAgICBdKSxcbiAgICAgICkudG9UaHJvdygvaW5jb21wYXRpYmxlLyk7XG4gICAgfSk7XG5cbiAgICBpdChcImFsbG93cyBpbmNvbXBhdGlibGUgcHJlc2V0cyB3aGVuIHNjb3BlcyBhcmUgZGlzam9pbnRcIiwgKCkgPT4ge1xuICAgICAgLy8gV2hpdGUtb25seSByb29rLXdhcnAgKyBibGFjay1vbmx5IHdyYXAtYm9hcmQg4oCUIHBlciB0aGUgbG9vc2VcbiAgICAgIC8vIHJ1bGUgdGhlc2UgbmV2ZXIgb3ZlcmxhcCwgc28gdGhlIGJsb2NrIGlzIGxpZnRlZC5cbiAgICAgIHNldC5yZXBsYWNlQWxsKFtcbiAgICAgICAgeyBpZDogXCJyb29rLXdhcnBcIiwgc2NvcGU6IFwid2hpdGVcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICAgICAgeyBpZDogXCJ3cmFwLWJvYXJkXCIsIHNjb3BlOiBcImJsYWNrXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgICBdKTtcbiAgICAgIGV4cGVjdChzZXQuaGFzKFwicm9vay13YXJwXCIpKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KHNldC5oYXMoXCJ3cmFwLWJvYXJkXCIpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJibG9ja3Mgd2hlbiBib3RoIGFyZSB0aGUgc2FtZSBleHBsaWNpdCBjb2xvclwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgc2V0LnJlcGxhY2VBbGwoW1xuICAgICAgICAgIHsgaWQ6IFwicm9vay13YXJwXCIsIHNjb3BlOiBcIndoaXRlXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgICAgICAgeyBpZDogXCJ3cmFwLWJvYXJkXCIsIHNjb3BlOiBcIndoaXRlXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgICAgIF0pLFxuICAgICAgKS50b1Rocm93KC9pbmNvbXBhdGlibGUvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJyZXBsYWNlQWxsIOKAlCBhdG9taWNpdHlcIiwgKCkgPT4ge1xuICAgIGl0KFwibGVhdmVzIGV4aXN0aW5nIHNldCB1bnRvdWNoZWQgaWYgdmFsaWRhdGlvbiBmYWlsc1wiLCAoKSA9PiB7XG4gICAgICBzZXQucmVwbGFjZUFsbChbXG4gICAgICAgIHsgaWQ6IFwia25pZ2h0cy1sZWFwLXR3aWNlXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICAgIF0pO1xuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIHNldC5yZXBsYWNlQWxsKFtcbiAgICAgICAgICB7IGlkOiBcImtuaWdodHMtbGVhcC10d2ljZVwiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgICAgICAgeyBpZDogXCJkb2VzLW5vdC1leGlzdFwiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgICAgIF0pLFxuICAgICAgKS50b1Rocm93KFByZXNldEFjdGl2YXRpb25FcnJvcik7XG4gICAgICAvLyBUaGUgb3JpZ2luYWwgc2luZ2xlLWVudHJ5IHNldCBtdXN0IHN0aWxsIGJlIGludGFjdC5cbiAgICAgIGV4cGVjdChzZXQubGlzdCgpKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgICBleHBlY3Qoc2V0LmhhcyhcImtuaWdodHMtbGVhcC10d2ljZVwiKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJnZXRGb3JDb2xvclwiLCAoKSA9PiB7XG4gICAgaXQoXCJyZXR1cm5zIGBib3RoYC1zY29wZWQgcHJlc2V0cyBmb3IgZWl0aGVyIGNvbG9yXCIsICgpID0+IHtcbiAgICAgIHNldC5yZXBsYWNlQWxsKFtcbiAgICAgICAgeyBpZDogXCJrbmlnaHRzLWxlYXAtdHdpY2VcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgICAgXSk7XG4gICAgICBleHBlY3Qoc2V0LmdldEZvckNvbG9yKFwid2hpdGVcIikubWFwKChwKSA9PiBwLmlkKSkudG9FcXVhbChbXG4gICAgICAgIFwia25pZ2h0cy1sZWFwLXR3aWNlXCIsXG4gICAgICBdKTtcbiAgICAgIGV4cGVjdChzZXQuZ2V0Rm9yQ29sb3IoXCJibGFja1wiKS5tYXAoKHApID0+IHAuaWQpKS50b0VxdWFsKFtcbiAgICAgICAgXCJrbmlnaHRzLWxlYXAtdHdpY2VcIixcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJmaWx0ZXJzIGNvbG9yLXNjb3BlZCBwcmVzZXRzXCIsICgpID0+IHtcbiAgICAgIHNldC5yZXBsYWNlQWxsKFtcbiAgICAgICAgeyBpZDogXCJrbmlnaHRzLWxlYXAtdHdpY2VcIiwgc2NvcGU6IFwid2hpdGVcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICAgICAgeyBpZDogXCJiaXNob3BzLWlnbm9yZS1jb2xvclwiLCBzY29wZTogXCJibGFja1wiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgICAgXSk7XG4gICAgICBleHBlY3Qoc2V0LmdldEZvckNvbG9yKFwid2hpdGVcIikubWFwKChwKSA9PiBwLmlkKSkudG9FcXVhbChbXG4gICAgICAgIFwia25pZ2h0cy1sZWFwLXR3aWNlXCIsXG4gICAgICBdKTtcbiAgICAgIGV4cGVjdChzZXQuZ2V0Rm9yQ29sb3IoXCJibGFja1wiKS5tYXAoKHApID0+IHAuaWQpKS50b0VxdWFsKFtcbiAgICAgICAgXCJiaXNob3BzLWlnbm9yZS1jb2xvclwiLFxuICAgICAgXSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwidGlja0FmdGVyTW92ZSDigJQgcGxheWVyLWxvY2FsIHR1cm4gY291bnRpbmdcIiwgKCkgPT4ge1xuICAgIGl0KFwidGlja3MgYGJvdGhgLXNjb3BlZCBwcmVzZXRzIG9uIGV2ZXJ5IGhhbGYtbW92ZVwiLCAoKSA9PiB7XG4gICAgICBzZXQucmVwbGFjZUFsbChbXG4gICAgICAgIHsgaWQ6IFwia25pZ2h0cy1sZWFwLXR3aWNlXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IDIgfSxcbiAgICAgIF0pO1xuICAgICAgc2V0LnRpY2tBZnRlck1vdmUoXCJ3aGl0ZVwiKTtcbiAgICAgIGV4cGVjdChzZXQubGlzdCgpWzBdPy50dXJuc1JlbWFpbmluZykudG9CZSgxKTtcbiAgICAgIHNldC50aWNrQWZ0ZXJNb3ZlKFwiYmxhY2tcIik7XG4gICAgICAvLyBTZWNvbmQgdGljayBvbiBgYm90aGAgc2NvcGUgZXhwaXJlcyBpdC5cbiAgICAgIGV4cGVjdChzZXQubGlzdCgpKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgfSk7XG5cbiAgICBpdChcInRpY2tzIHdoaXRlLXNjb3BlZCBwcmVzZXRzIG9ubHkgYWZ0ZXIgd2hpdGUgbW92ZXNcIiwgKCkgPT4ge1xuICAgICAgc2V0LnJlcGxhY2VBbGwoW1xuICAgICAgICB7IGlkOiBcImtuaWdodHMtbGVhcC10d2ljZVwiLCBzY29wZTogXCJ3aGl0ZVwiLCB0dXJuc1JlbWFpbmluZzogMiB9LFxuICAgICAgXSk7XG4gICAgICBzZXQudGlja0FmdGVyTW92ZShcImJsYWNrXCIpO1xuICAgICAgLy8gTm90IG91ciBjb2xvcjsgZHVyYXRpb24gdW5jaGFuZ2VkLlxuICAgICAgZXhwZWN0KHNldC5saXN0KClbMF0/LnR1cm5zUmVtYWluaW5nKS50b0JlKDIpO1xuICAgICAgc2V0LnRpY2tBZnRlck1vdmUoXCJ3aGl0ZVwiKTtcbiAgICAgIGV4cGVjdChzZXQubGlzdCgpWzBdPy50dXJuc1JlbWFpbmluZykudG9CZSgxKTtcbiAgICAgIHNldC50aWNrQWZ0ZXJNb3ZlKFwiYmxhY2tcIik7XG4gICAgICBleHBlY3Qoc2V0Lmxpc3QoKVswXT8udHVybnNSZW1haW5pbmcpLnRvQmUoMSk7XG4gICAgICBzZXQudGlja0FmdGVyTW92ZShcIndoaXRlXCIpO1xuICAgICAgZXhwZWN0KHNldC5saXN0KCkpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgICB9KTtcblxuICAgIGl0KFwibmV2ZXIgdGlja3MgcGVybWFuZW50ICh0dXJuc1JlbWFpbmluZz1udWxsKSBlbnRyaWVzXCIsICgpID0+IHtcbiAgICAgIHNldC5yZXBsYWNlQWxsKFtcbiAgICAgICAgeyBpZDogXCJrbmlnaHRzLWxlYXAtdHdpY2VcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgICAgXSk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwOyBpKyspIHtcbiAgICAgICAgc2V0LnRpY2tBZnRlck1vdmUoaSAlIDIgPT09IDAgPyBcIndoaXRlXCIgOiBcImJsYWNrXCIpO1xuICAgICAgfVxuICAgICAgZXhwZWN0KHNldC5oYXMoXCJrbmlnaHRzLWxlYXAtdHdpY2VcIikpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiY2xvbmVcIiwgKCkgPT4ge1xuICAgIGl0KFwicmV0dXJucyBhbiBpbmRlcGVuZGVudCBkZWVwIGNvcHlcIiwgKCkgPT4ge1xuICAgICAgc2V0LnJlcGxhY2VBbGwoW1xuICAgICAgICB7IGlkOiBcImtuaWdodHMtbGVhcC10d2ljZVwiLCBzY29wZTogXCJ3aGl0ZVwiLCB0dXJuc1JlbWFpbmluZzogNSB9LFxuICAgICAgXSk7XG4gICAgICBjb25zdCBjb3B5ID0gc2V0LmNsb25lKCk7XG4gICAgICBjb3B5LnRpY2tBZnRlck1vdmUoXCJ3aGl0ZVwiKTtcbiAgICAgIC8vIE9yaWdpbmFsIHVuYWZmZWN0ZWQgYnkgY29weSdzIHRpY2suXG4gICAgICBleHBlY3Qoc2V0Lmxpc3QoKVswXT8udHVybnNSZW1haW5pbmcpLnRvQmUoNSk7XG4gICAgICBleHBlY3QoY29weS5saXN0KClbMF0/LnR1cm5zUmVtYWluaW5nKS50b0JlKDQpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL2NoZXNzL3NyYy9wcmVzZXRzL2FjdGl2ZS1zZXQudGVzdC50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/7e74e4860bc162b5f27ee95149a511fc266897bb b/7xOfJqsDU787fe61oSCq1/web/7e74e4860bc162b5f27ee95149a511fc266897bb deleted file mode 100644 index 954f3ce..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/7e74e4860bc162b5f27ee95149a511fc266897bb +++ /dev/null @@ -1,60 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/modifiers/descriptors/range-bonus.ts", {"importedNames":["RANGE_BONUS_DESCRIPTOR"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/modifiers/registry.ts", {"importedNames":["MODIFIER_REGISTRY"]}); -function setupSession() { - return new __vite_ssr_import_1__.Session({ autoFire: false }); -} -(0,__vite_ssr_import_0__.describe)("RANGE_BONUS_DESCRIPTOR", () => { - (0,__vite_ssr_import_0__.it)("registers in MODIFIER_REGISTRY with id 'range-bonus'", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_3__.MODIFIER_REGISTRY.has("range-bonus")).toBe(true); - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_3__.MODIFIER_REGISTRY.get("range-bonus")).toBe((0,__vite_ssr_import_2__.RANGE_BONUS_DESCRIPTOR)); - }); - (0,__vite_ssr_import_0__.it)("has correct metadata", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.RANGE_BONUS_DESCRIPTOR.id).toBe("range-bonus"); - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.RANGE_BONUS_DESCRIPTOR.attrName).toBe("RangeBonus"); - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.RANGE_BONUS_DESCRIPTOR.stackingRule).toBe("additive"); - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.RANGE_BONUS_DESCRIPTOR.uiForm).toBe("number"); - }); - (0,__vite_ssr_import_0__.describe)("describe()", () => { - (0,__vite_ssr_import_0__.it)("returns 'Range +N' for non-negative values", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.RANGE_BONUS_DESCRIPTOR.describe(2)).toBe("Range +2"); - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.RANGE_BONUS_DESCRIPTOR.describe(0)).toBe("Range +0"); - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.RANGE_BONUS_DESCRIPTOR.describe(7)).toBe("Range +7"); - }); - (0,__vite_ssr_import_0__.it)("returns 'Range -N' for negative values", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.RANGE_BONUS_DESCRIPTOR.describe(-1)).toBe("Range -1"); - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.RANGE_BONUS_DESCRIPTOR.describe(-7)).toBe("Range -7"); - }); - }); - (0,__vite_ssr_import_0__.describe)("apply()", () => { - (0,__vite_ssr_import_0__.it)("inserts RangeBonus fact on the piece entity", () => { - const session = setupSession(); - __vite_ssr_import_2__.RANGE_BONUS_DESCRIPTOR.apply(session, 1, 3); - (0,__vite_ssr_import_0__.expect)(session.get(1, "RangeBonus")).toBe(3); - }); - (0,__vite_ssr_import_0__.it)("clamps effectiveValue above RANGE_MAX (7) down to 7", () => { - const session = setupSession(); - __vite_ssr_import_2__.RANGE_BONUS_DESCRIPTOR.apply(session, 1, 10); - (0,__vite_ssr_import_0__.expect)(session.get(1, "RangeBonus")).toBe(7); - }); - (0,__vite_ssr_import_0__.it)("clamps negative effectiveValue to 0", () => { - const session = setupSession(); - __vite_ssr_import_2__.RANGE_BONUS_DESCRIPTOR.apply(session, 1, -5); - (0,__vite_ssr_import_0__.expect)(session.get(1, "RangeBonus")).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("applies exactly RANGE_MAX (7) without clamping", () => { - const session = setupSession(); - __vite_ssr_import_2__.RANGE_BONUS_DESCRIPTOR.apply(session, 2, 7); - (0,__vite_ssr_import_0__.expect)(session.get(2, "RangeBonus")).toBe(7); - }); - (0,__vite_ssr_import_0__.it)("applies zero without clamping", () => { - const session = setupSession(); - __vite_ssr_import_2__.RANGE_BONUS_DESCRIPTOR.apply(session, 3, 0); - (0,__vite_ssr_import_0__.expect)(session.get(3, "RangeBonus")).toBe(0); - }); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQSxTQUFTLGVBQXdCO0FBQy9CLFNBQU8sSUFBSSw4QkFBUSxFQUFFLFVBQVUsTUFBTSxDQUFDO0FBQ3hDO0dBRUEsZ0NBQVMsMEJBQTBCLE1BQU07QUFDdkMsK0JBQUcsd0RBQXdELE1BQU07QUFDL0QscUNBQU8sd0NBQWtCLElBQUksYUFBYSxDQUFDLEVBQUUsS0FBSyxJQUFJO0FBQ3RELHFDQUFPLHdDQUFrQixJQUFJLGFBQWEsQ0FBQyxFQUFFLFFBQUssNkNBQXNCO0FBQUEsRUFDMUUsQ0FBQztBQUVELCtCQUFHLHdCQUF3QixNQUFNO0FBQy9CLHFDQUFPLDZDQUF1QixFQUFFLEVBQUUsS0FBSyxhQUFhO0FBQ3BELHFDQUFPLDZDQUF1QixRQUFRLEVBQUUsS0FBSyxZQUFZO0FBQ3pELHFDQUFPLDZDQUF1QixZQUFZLEVBQUUsS0FBSyxVQUFVO0FBQzNELHFDQUFPLDZDQUF1QixNQUFNLEVBQUUsS0FBSyxRQUFRO0FBQUEsRUFDckQsQ0FBQztBQUVELHFDQUFTLGNBQWMsTUFBTTtBQUMzQixpQ0FBRyw4Q0FBOEMsTUFBTTtBQUNyRCx1Q0FBTyw2Q0FBdUIsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLFVBQVU7QUFDMUQsdUNBQU8sNkNBQXVCLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxVQUFVO0FBQzFELHVDQUFPLDZDQUF1QixTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssVUFBVTtBQUFBLElBQzVELENBQUM7QUFFRCxpQ0FBRywwQ0FBMEMsTUFBTTtBQUNqRCx1Q0FBTyw2Q0FBdUIsU0FBUyxFQUFFLENBQUMsRUFBRSxLQUFLLFVBQVU7QUFDM0QsdUNBQU8sNkNBQXVCLFNBQVMsRUFBRSxDQUFDLEVBQUUsS0FBSyxVQUFVO0FBQUEsSUFDN0QsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUVELHFDQUFTLFdBQVcsTUFBTTtBQUN4QixpQ0FBRywrQ0FBK0MsTUFBTTtBQUN0RCxZQUFNLFVBQVUsYUFBYTtBQUM3QixtREFBdUIsTUFBTSxTQUFTLEdBQWUsQ0FBQztBQUN0RCx1Q0FBTyxRQUFRLElBQUksR0FBZSxZQUFZLENBQUMsRUFBRSxLQUFLLENBQUM7QUFBQSxJQUN6RCxDQUFDO0FBRUQsaUNBQUcsdURBQXVELE1BQU07QUFDOUQsWUFBTSxVQUFVLGFBQWE7QUFDN0IsbURBQXVCLE1BQU0sU0FBUyxHQUFlLEVBQVk7QUFDakUsdUNBQU8sUUFBUSxJQUFJLEdBQWUsWUFBWSxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQUEsSUFDekQsQ0FBQztBQUVELGlDQUFHLHVDQUF1QyxNQUFNO0FBQzlDLFlBQU0sVUFBVSxhQUFhO0FBQzdCLG1EQUF1QixNQUFNLFNBQVMsR0FBZSxFQUFZO0FBQ2pFLHVDQUFPLFFBQVEsSUFBSSxHQUFlLFlBQVksQ0FBQyxFQUFFLEtBQUssQ0FBQztBQUFBLElBQ3pELENBQUM7QUFFRCxpQ0FBRyxrREFBa0QsTUFBTTtBQUN6RCxZQUFNLFVBQVUsYUFBYTtBQUM3QixtREFBdUIsTUFBTSxTQUFTLEdBQWUsQ0FBQztBQUN0RCx1Q0FBTyxRQUFRLElBQUksR0FBZSxZQUFZLENBQUMsRUFBRSxLQUFLLENBQUM7QUFBQSxJQUN6RCxDQUFDO0FBRUQsaUNBQUcsaUNBQWlDLE1BQU07QUFDeEMsWUFBTSxVQUFVLGFBQWE7QUFDN0IsbURBQXVCLE1BQU0sU0FBUyxHQUFlLENBQUM7QUFDdEQsdUNBQU8sUUFBUSxJQUFJLEdBQWUsWUFBWSxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQUEsSUFDekQsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNILENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInJhbmdlLWJvbnVzLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgeyBTZXNzaW9uLCB0eXBlIEVudGl0eUlkIH0gZnJvbSBcIkBwYXJhdHlwZS9yZXRlXCI7XG5pbXBvcnQgeyBSQU5HRV9CT05VU19ERVNDUklQVE9SIH0gZnJvbSBcIi4vcmFuZ2UtYm9udXMuanNcIjtcbmltcG9ydCB7IE1PRElGSUVSX1JFR0lTVFJZIH0gZnJvbSBcIi4uL3JlZ2lzdHJ5LmpzXCI7XG5cbmZ1bmN0aW9uIHNldHVwU2Vzc2lvbigpOiBTZXNzaW9uIHtcbiAgcmV0dXJuIG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xufVxuXG5kZXNjcmliZShcIlJBTkdFX0JPTlVTX0RFU0NSSVBUT1JcIiwgKCkgPT4ge1xuICBpdChcInJlZ2lzdGVycyBpbiBNT0RJRklFUl9SRUdJU1RSWSB3aXRoIGlkICdyYW5nZS1ib251cydcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChNT0RJRklFUl9SRUdJU1RSWS5oYXMoXCJyYW5nZS1ib251c1wiKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QoTU9ESUZJRVJfUkVHSVNUUlkuZ2V0KFwicmFuZ2UtYm9udXNcIikpLnRvQmUoUkFOR0VfQk9OVVNfREVTQ1JJUFRPUik7XG4gIH0pO1xuXG4gIGl0KFwiaGFzIGNvcnJlY3QgbWV0YWRhdGFcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChSQU5HRV9CT05VU19ERVNDUklQVE9SLmlkKS50b0JlKFwicmFuZ2UtYm9udXNcIik7XG4gICAgZXhwZWN0KFJBTkdFX0JPTlVTX0RFU0NSSVBUT1IuYXR0ck5hbWUpLnRvQmUoXCJSYW5nZUJvbnVzXCIpO1xuICAgIGV4cGVjdChSQU5HRV9CT05VU19ERVNDUklQVE9SLnN0YWNraW5nUnVsZSkudG9CZShcImFkZGl0aXZlXCIpO1xuICAgIGV4cGVjdChSQU5HRV9CT05VU19ERVNDUklQVE9SLnVpRm9ybSkudG9CZShcIm51bWJlclwiKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJkZXNjcmliZSgpXCIsICgpID0+IHtcbiAgICBpdChcInJldHVybnMgJ1JhbmdlICtOJyBmb3Igbm9uLW5lZ2F0aXZlIHZhbHVlc1wiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoUkFOR0VfQk9OVVNfREVTQ1JJUFRPUi5kZXNjcmliZSgyKSkudG9CZShcIlJhbmdlICsyXCIpO1xuICAgICAgZXhwZWN0KFJBTkdFX0JPTlVTX0RFU0NSSVBUT1IuZGVzY3JpYmUoMCkpLnRvQmUoXCJSYW5nZSArMFwiKTtcbiAgICAgIGV4cGVjdChSQU5HRV9CT05VU19ERVNDUklQVE9SLmRlc2NyaWJlKDcpKS50b0JlKFwiUmFuZ2UgKzdcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInJldHVybnMgJ1JhbmdlIC1OJyBmb3IgbmVnYXRpdmUgdmFsdWVzXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdChSQU5HRV9CT05VU19ERVNDUklQVE9SLmRlc2NyaWJlKC0xKSkudG9CZShcIlJhbmdlIC0xXCIpO1xuICAgICAgZXhwZWN0KFJBTkdFX0JPTlVTX0RFU0NSSVBUT1IuZGVzY3JpYmUoLTcpKS50b0JlKFwiUmFuZ2UgLTdcIik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiYXBwbHkoKVwiLCAoKSA9PiB7XG4gICAgaXQoXCJpbnNlcnRzIFJhbmdlQm9udXMgZmFjdCBvbiB0aGUgcGllY2UgZW50aXR5XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHNlc3Npb24gPSBzZXR1cFNlc3Npb24oKTtcbiAgICAgIFJBTkdFX0JPTlVTX0RFU0NSSVBUT1IuYXBwbHkoc2Vzc2lvbiwgMSBhcyBFbnRpdHlJZCwgMyk7XG4gICAgICBleHBlY3Qoc2Vzc2lvbi5nZXQoMSBhcyBFbnRpdHlJZCwgXCJSYW5nZUJvbnVzXCIpKS50b0JlKDMpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJjbGFtcHMgZWZmZWN0aXZlVmFsdWUgYWJvdmUgUkFOR0VfTUFYICg3KSBkb3duIHRvIDdcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgICAgUkFOR0VfQk9OVVNfREVTQ1JJUFRPUi5hcHBseShzZXNzaW9uLCAxIGFzIEVudGl0eUlkLCAxMCBhcyBudW1iZXIpO1xuICAgICAgZXhwZWN0KHNlc3Npb24uZ2V0KDEgYXMgRW50aXR5SWQsIFwiUmFuZ2VCb251c1wiKSkudG9CZSg3KTtcbiAgICB9KTtcblxuICAgIGl0KFwiY2xhbXBzIG5lZ2F0aXZlIGVmZmVjdGl2ZVZhbHVlIHRvIDBcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgICAgUkFOR0VfQk9OVVNfREVTQ1JJUFRPUi5hcHBseShzZXNzaW9uLCAxIGFzIEVudGl0eUlkLCAtNSBhcyBudW1iZXIpO1xuICAgICAgZXhwZWN0KHNlc3Npb24uZ2V0KDEgYXMgRW50aXR5SWQsIFwiUmFuZ2VCb251c1wiKSkudG9CZSgwKTtcbiAgICB9KTtcblxuICAgIGl0KFwiYXBwbGllcyBleGFjdGx5IFJBTkdFX01BWCAoNykgd2l0aG91dCBjbGFtcGluZ1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBzZXNzaW9uID0gc2V0dXBTZXNzaW9uKCk7XG4gICAgICBSQU5HRV9CT05VU19ERVNDUklQVE9SLmFwcGx5KHNlc3Npb24sIDIgYXMgRW50aXR5SWQsIDcpO1xuICAgICAgZXhwZWN0KHNlc3Npb24uZ2V0KDIgYXMgRW50aXR5SWQsIFwiUmFuZ2VCb251c1wiKSkudG9CZSg3KTtcbiAgICB9KTtcblxuICAgIGl0KFwiYXBwbGllcyB6ZXJvIHdpdGhvdXQgY2xhbXBpbmdcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgICAgUkFOR0VfQk9OVVNfREVTQ1JJUFRPUi5hcHBseShzZXNzaW9uLCAzIGFzIEVudGl0eUlkLCAwKTtcbiAgICAgIGV4cGVjdChzZXNzaW9uLmdldCgzIGFzIEVudGl0eUlkLCBcIlJhbmdlQm9udXNcIikpLnRvQmUoMCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvY2hlc3Mvc3JjL21vZGlmaWVycy9kZXNjcmlwdG9ycy9yYW5nZS1ib251cy50ZXN0LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/7f25075c2f5d6892c387e443add584b9a5d1033a b/7xOfJqsDU787fe61oSCq1/web/7f25075c2f5d6892c387e443add584b9a5d1033a deleted file mode 100644 index 46d50f5..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/7f25075c2f5d6892c387e443add584b9a5d1033a +++ /dev/null @@ -1,71 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "isSquareAttacked", { enumerable: true, configurable: true, get(){ try { return isSquareAttacked } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "isInCheck", { enumerable: true, configurable: true, get(){ try { return isInCheck } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "filterSelfCheckMoves", { enumerable: true, configurable: true, get(){ try { return filterSelfCheckMoves } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/schema.ts", {"importedNames":["oppositeColor"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/rules/capture.ts", {"importedNames":["isPieceAttr"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/presets/piece-type-registry.ts", {"importedNames":["PIECE_TYPE_REGISTRY"]}); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/presets/core-piece-types.ts"); -function isSquareAttacked(session, square, byColor) { - const facts = session.allFacts(); - for (const f of facts) { - if (f.attr !== "Color" || f.value !== byColor) continue; - if (f.id <= 0) continue; - const typeFact = facts.find((t) => t.id === f.id && t.attr === "PieceType"); - if (typeFact === void 0) continue; - const type = typeFact.value; - const def = __vite_ssr_import_3__.PIECE_TYPE_REGISTRY.get(type); - if (def === void 0) continue; - if (def.attackProbe(session, f.id, square)) return true; - }; - return false; -}; -function isInCheck(session, color) { - const facts = session.allFacts(); - let kingId = null; - for (const f of facts) { - if (f.attr !== "PieceType" || f.value !== "king") continue; - const colorFact = facts.find((c) => c.id === f.id && c.attr === "Color"); - if (colorFact !== void 0 && colorFact.value === color) { - kingId = f.id; - break; - } - }; - if (kingId === null) return false; - const posFact = facts.find((f) => f.id === kingId && f.attr === "Position"); - if (posFact === void 0) return false; - const kingPos = posFact.value; - return isSquareAttacked(session, kingPos, (0,__vite_ssr_import_1__.oppositeColor)(color)); -}; -function snapshotSession(session) { - const temp = new __vite_ssr_import_0__.Session({ autoFire: false }); - for (const f of session.allFacts()) { - if (f.id <= 0) continue; - if (!(0,__vite_ssr_import_2__.isPieceAttr)(f.attr)) continue; - temp.insert(f.id, f.attr, f.value); - }; - return temp; -} -function clearSquare(temp, square) { - const facts = temp.allFacts(); - const occupant = facts.find((f) => f.attr === "Position" && f.value === square); - if (occupant === void 0) return; - const id = occupant.id; - const toRetract = facts.filter((f) => f.id === id && (0,__vite_ssr_import_2__.isPieceAttr)(f.attr)).map((f) => f.attr); - for (const attr of toRetract) { - if (temp.contains(id, attr)) temp.retract(id, attr); - } -} -function filterSelfCheckMoves(session, moves, color) { - return moves.filter((move) => { - const temp = snapshotSession(session); - if (move.isCapture) { - clearSquare(temp, move.to); - }; - temp.insert(move.pieceId, "Position", move.to); - return !isInCheck(temp, color); - }); -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7O0FBMkJBO0FBR0E7QUFDQTtBQUVBO0FBS0E7QUFVTyxTQUFTLGlCQUNkLFNBQ0EsUUFDQSxTQUNTO0FBQ1QsUUFBTSxRQUFRLFFBQVEsU0FBUztBQUcvQixhQUFXLEtBQUssT0FBTztBQUNyQixRQUFJLEVBQUUsU0FBUyxXQUFXLEVBQUUsVUFBVSxRQUFTO0FBRS9DLFFBQUksRUFBRSxNQUFNLEVBQUc7QUFFZixVQUFNLFdBQVcsTUFBTSxLQUFLLE9BQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsV0FBVztBQUN4RSxRQUFJLGFBQWEsT0FBVztBQUM1QixVQUFNLE9BQU8sU0FBUztBQUt0QixVQUFNLE1BQU0sMENBQW9CLElBQUksSUFBSTtBQUN4QyxRQUFJLFFBQVEsT0FBVztBQUN2QixRQUFJLElBQUksWUFBWSxTQUFTLEVBQUUsSUFBSSxNQUFNLEVBQUcsUUFBTztBQUFBLEVBQ3JEO0FBQ0EsU0FBTztBQUNUO0FBU08sU0FBUyxVQUFVLFNBQWtCLE9BQTRCO0FBQ3RFLFFBQU0sUUFBUSxRQUFRLFNBQVM7QUFJL0IsTUFBSSxTQUEwQjtBQUM5QixhQUFXLEtBQUssT0FBTztBQUNyQixRQUFJLEVBQUUsU0FBUyxlQUFlLEVBQUUsVUFBVSxPQUFRO0FBQ2xELFVBQU0sWUFBWSxNQUFNLEtBQUssT0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxPQUFPO0FBQ3JFLFFBQUksY0FBYyxVQUFhLFVBQVUsVUFBVSxPQUFPO0FBQ3hELGVBQVMsRUFBRTtBQUNYO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxNQUFJLFdBQVcsS0FBTSxRQUFPO0FBRTVCLFFBQU0sVUFBVSxNQUFNLEtBQUssT0FBSyxFQUFFLE9BQU8sVUFBVSxFQUFFLFNBQVMsVUFBVTtBQUN4RSxNQUFJLFlBQVksT0FBVyxRQUFPO0FBQ2xDLFFBQU0sVUFBVSxRQUFRO0FBRXhCLFNBQU8saUJBQWlCLFNBQVMsWUFBUyxxQ0FBYyxLQUFLLENBQUM7QUFDaEU7QUFRQSxTQUFTLGdCQUFnQixTQUEyQjtBQUNsRCxRQUFNLE9BQU8sSUFBSSw4QkFBUSxFQUFFLFVBQVUsTUFBTSxDQUFDO0FBQzVDLGFBQVcsS0FBSyxRQUFRLFNBQVMsR0FBRztBQUtsQyxRQUFLLEVBQUUsTUFBaUIsRUFBRztBQUMzQixRQUFJLElBQUMsbUNBQVksRUFBRSxJQUFJLEVBQUc7QUFDMUIsU0FBSyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLO0FBQUEsRUFDbkM7QUFDQSxTQUFPO0FBQ1Q7QUFNQSxTQUFTLFlBQVksTUFBZSxRQUFzQjtBQUN4RCxRQUFNLFFBQVEsS0FBSyxTQUFTO0FBQzVCLFFBQU0sV0FBVyxNQUFNLEtBQUssT0FBSyxFQUFFLFNBQVMsY0FBYyxFQUFFLFVBQVUsTUFBTTtBQUM1RSxNQUFJLGFBQWEsT0FBVztBQUM1QixRQUFNLEtBQUssU0FBUztBQUlwQixRQUFNLFlBQVksTUFDZixPQUFPLE9BQUssRUFBRSxPQUFPLFNBQU0sbUNBQVksRUFBRSxJQUFJLENBQUMsRUFDOUMsSUFBSSxPQUFLLEVBQUUsSUFBSTtBQUNsQixhQUFXLFFBQVEsV0FBVztBQUM1QixRQUFJLEtBQUssU0FBUyxJQUFJLElBQUksRUFBRyxNQUFLLFFBQVEsSUFBSSxJQUFJO0FBQUEsRUFDcEQ7QUFDRjtBQWNPLFNBQVMscUJBQ2QsU0FDQSxPQUNBLE9BQ2E7QUFDYixTQUFPLE1BQU0sT0FBTyxVQUFRO0FBQzFCLFVBQU0sT0FBTyxnQkFBZ0IsT0FBTztBQUtwQyxRQUFJLEtBQUssV0FBVztBQUNsQixrQkFBWSxNQUFNLEtBQUssRUFBRTtBQUFBLElBQzNCO0FBSUEsU0FBSyxPQUFPLEtBQUssU0FBUyxZQUFZLEtBQUssRUFBRTtBQUU3QyxXQUFPLENBQUMsVUFBVSxNQUFNLEtBQUs7QUFBQSxFQUMvQixDQUFDO0FBQ0giLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImNoZWNrLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2hlY2sgZGV0ZWN0aW9uIGFuZCBzZWxmLWNoZWNrIGZpbHRlciBmb3IgQHBhcmF0eXBlL2NoZXNzIChQMi4xOCkuXG4gKlxuICogUHJvdmlkZXMgdGhyZWUgZnVuY3Rpb25zOlxuICogICAtIGlzU3F1YXJlQXR0YWNrZWQoc2Vzc2lvbiwgc3F1YXJlLCBieUNvbG9yKVxuICogICAgICAgRG9lcyBhbnkgcGllY2Ugb2YgYGJ5Q29sb3JgIGhhdmUgYSBwc2V1ZG8tbGVnYWwgbW92ZSBsYW5kaW5nIG9uXG4gKiAgICAgICBgc3F1YXJlYD8gVXNlcyB0aGUgZXhpc3RpbmcgcGVyLXBpZWNlIG1vdmUgZ2VuZXJhdG9ycywgc28gaXRcbiAqICAgICAgIGF1dG9tYXRpY2FsbHkgcmVzcGVjdHMgYmxvY2tpbmcgKHNsaWRlcnMpLCBsZWFwaW5nIChrbmlnaHRzKSxcbiAqICAgICAgIGFuZCBwYXduIGNhcHR1cmUgZ2VvbWV0cnkuXG4gKlxuICogICAtIGlzSW5DaGVjayhzZXNzaW9uLCBjb2xvcilcbiAqICAgICAgIEZpbmRzIHRoZSBgY29sb3JgIGtpbmcgYW5kIGFza3Mgd2hldGhlciB0aGUgb3Bwb3NpdGUgY29sb3JcbiAqICAgICAgIGF0dGFja3MgaXRzIHNxdWFyZS4gU2FmZSB3aGVuIHRoZSBraW5nIGlzIGFic2VudCAocmV0dXJucyBmYWxzZSkuXG4gKlxuICogICAtIGZpbHRlclNlbGZDaGVja01vdmVzKHNlc3Npb24sIG1vdmVzLCBjb2xvcilcbiAqICAgICAgIFJlbW92ZXMgYW55IGNhbmRpZGF0ZSBtb3ZlIHRoYXQgd291bGQgbGVhdmUgdGhlIG1vdmluZyBzaWRlJ3NcbiAqICAgICAgIGtpbmcgaW4gY2hlY2suIFVzZXMgYSB0ZW1wb3JhcnkgU2Vzc2lvbiBidWlsdCBmcm9tXG4gKiAgICAgICBgc2Vzc2lvbi5hbGxGYWN0cygpYCBhcyBhIGxpZ2h0d2VpZ2h0IHNuYXBzaG90IOKAlCBhcHBsaWVzIHRoZVxuICogICAgICAgbW92ZSB0aGVyZSwgcnVucyBpc0luQ2hlY2ssIGFuZCB0aHJvd3MgdGhlIHRlbXAgc2Vzc2lvbiBhd2F5LlxuICpcbiAqIElNUE9SVEFOVDogYGlzU3F1YXJlQXR0YWNrZWRgIG11c3QgTk9UIHJlY3Vyc2UgdGhyb3VnaCBhIFwia2luZyBtb3ZlIGlzXG4gKiBvbmx5IGxlZ2FsIGlmIHRoZSB0YXJnZXQgaXMgbm90IGF0dGFja2VkXCIgY2hlY2sg4oCUIHRoYXQgd291bGQgaW5maW5pdGUtXG4gKiBsb29wIChraW5nIEEncyBsZWdhbCBtb3ZlcyBhc2sgXCJpcyBzcXVhcmUgWCBhdHRhY2tlZCBieSBraW5nIEI/XCIsIHdoaWNoXG4gKiBhc2tzIGZvciBraW5nIEIncyBsZWdhbCBtb3Zlcywgd2hpY2ggYXNrcyBiYWNr4oCmKS4gYGdldExlZ2FsS2luZ01vdmVzYFxuICogaXMgZGVsaWJlcmF0ZWx5IGNoZWNrLXVuYXdhcmU7IHNlbGYtY2hlY2sgZmlsdGVyaW5nIGhhcHBlbnMgb25lIGxheWVyXG4gKiB1cCwgaW4gYGZpbHRlclNlbGZDaGVja01vdmVzYC5cbiAqL1xuaW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuaW1wb3J0IHR5cGUgeyBQaWVjZUNvbG9yLCBQaWVjZVR5cGUsIFNxdWFyZSB9IGZyb20gXCIuLi9zY2hlbWEuanNcIjtcbmltcG9ydCB7IG9wcG9zaXRlQ29sb3IgfSBmcm9tIFwiLi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgeyBpc1BpZWNlQXR0ciB9IGZyb20gXCIuL2NhcHR1cmUuanNcIjtcbmltcG9ydCB0eXBlIHsgTGVnYWxNb3ZlIH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IFBJRUNFX1RZUEVfUkVHSVNUUlkgfSBmcm9tIFwiLi4vcHJlc2V0cy9waWVjZS10eXBlLXJlZ2lzdHJ5LmpzXCI7XG4vLyBTaWRlLWVmZmVjdDogZW5zdXJlIEZJREUgcGllY2UgdHlwZXMgYXJlIHJlZ2lzdGVyZWQuIFRlc3RzIHRoYXRcbi8vIGV4ZXJjaXNlIHRoZXNlIHB1cmUtZnVuY3Rpb24gaGVscGVycyBkaXJlY3RseSAod2l0aG91dCBDaGVzc0VuZ2luZSlcbi8vIHdvdWxkbid0IG90aGVyd2lzZSB0cmlnZ2VyIHRoZSByZWdpc3RyeSBwb3B1bGF0aW9uIGZyb21cbi8vIGBwcmVzZXRzL2luZGV4LnRzYC5cbmltcG9ydCBcIi4uL3ByZXNldHMvY29yZS1waWVjZS10eXBlcy5qc1wiO1xuXG4vKipcbiAqIElzIGBzcXVhcmVgIGF0dGFja2VkIGJ5IGFueSBwaWVjZSBvZiBgYnlDb2xvcmA/XG4gKlxuICogSXRlcmF0ZXMgZXZlcnkgcGllY2Ugb2YgYGJ5Q29sb3JgLCBhc2tzIGl0cyBtb3ZlIGdlbmVyYXRvciBmb3IgbGVnYWxcbiAqIHRhcmdldHMsIGFuZCByZXR1cm5zIHRydWUgaWYgYW55IHRhcmdldCBlcXVhbHMgYHNxdWFyZWAuIFBzZXVkby1sZWdhbDpcbiAqIGRvZXMgbm90IGNvbnNpZGVyIHdoZXRoZXIgdGhlIGF0dGFja2VyIHdvdWxkIGl0c2VsZiBiZSBwaW5uZWQg4oCUIHRoYXQnc1xuICogdGhlIHN0YW5kYXJkIGRlZmluaXRpb24gdXNlZCBmb3IgY2hlY2sgZGV0ZWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTcXVhcmVBdHRhY2tlZChcbiAgc2Vzc2lvbjogU2Vzc2lvbixcbiAgc3F1YXJlOiBTcXVhcmUsXG4gIGJ5Q29sb3I6IFBpZWNlQ29sb3IsXG4pOiBib29sZWFuIHtcbiAgY29uc3QgZmFjdHMgPSBzZXNzaW9uLmFsbEZhY3RzKCk7XG5cbiAgLy8gQ29sbGVjdCAoaWQsIHR5cGUpIHBhaXJzIGZvciBldmVyeSBwaWVjZSBvZiBgYnlDb2xvcmAuXG4gIGZvciAoY29uc3QgZiBvZiBmYWN0cykge1xuICAgIGlmIChmLmF0dHIgIT09IFwiQ29sb3JcIiB8fCBmLnZhbHVlICE9PSBieUNvbG9yKSBjb250aW51ZTtcbiAgICAvLyBHYW1lLWxldmVsIGZhY3RzIGxpdmUgb24gR0FNRV9FTlRJVFkgKGlkIDApOyBza2lwIGFueXRoaW5nIG5vbi1waWVjZS5cbiAgICBpZiAoZi5pZCA8PSAwKSBjb250aW51ZTtcblxuICAgIGNvbnN0IHR5cGVGYWN0ID0gZmFjdHMuZmluZCh0ID0+IHQuaWQgPT09IGYuaWQgJiYgdC5hdHRyID09PSBcIlBpZWNlVHlwZVwiKTtcbiAgICBpZiAodHlwZUZhY3QgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgY29uc3QgdHlwZSA9IHR5cGVGYWN0LnZhbHVlIGFzIFBpZWNlVHlwZTtcblxuICAgIC8vIEN1c3RvbSBwaWVjZSB0eXBlcyByZWdpc3RlciB0aGVpciBvd24gYXR0YWNrIHByb2JlIHZpYSB0aGVcbiAgICAvLyBwaWVjZS10eXBlIHJlZ2lzdHJ5LiBVbmtub3duIHR5cGVzIChkZWdlbmVyYXRlKSBjb250cmlidXRlIG5vXG4gICAgLy8gYXR0YWNrcy5cbiAgICBjb25zdCBkZWYgPSBQSUVDRV9UWVBFX1JFR0lTVFJZLmdldCh0eXBlKTtcbiAgICBpZiAoZGVmID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgIGlmIChkZWYuYXR0YWNrUHJvYmUoc2Vzc2lvbiwgZi5pZCwgc3F1YXJlKSkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIElzIHRoZSBgY29sb3JgIGtpbmcgY3VycmVudGx5IGluIGNoZWNrP1xuICpcbiAqIFJldHVybnMgZmFsc2Ugd2hlbiB0aGVyZSBpcyBubyBgY29sb3JgIGtpbmcgb24gdGhlIGJvYXJkICh0ZXN0cyAvXG4gKiBwYXJ0aWFsIHBvc2l0aW9ucykgcmF0aGVyIHRoYW4gdGhyb3dpbmcg4oCUIGNhbGxlcnMgc2hvdWxkIG5vdCBuZWVkIGFcbiAqIGZ1bGwgYXJteSB0byBxdWVyeSBjaGVjayBzdGF0dXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0luQ2hlY2soc2Vzc2lvbjogU2Vzc2lvbiwgY29sb3I6IFBpZWNlQ29sb3IpOiBib29sZWFuIHtcbiAgY29uc3QgZmFjdHMgPSBzZXNzaW9uLmFsbEZhY3RzKCk7XG5cbiAgLy8gRmluZCB0aGUga2luZyBlbnRpdHkgb2YgYGNvbG9yYDogYSBQaWVjZVR5cGU9a2luZyBmYWN0IHdob3NlIGlkIGFsc29cbiAgLy8gaGFzIGEgQ29sb3I9Y29sb3IgZmFjdC5cbiAgbGV0IGtpbmdJZDogRW50aXR5SWQgfCBudWxsID0gbnVsbDtcbiAgZm9yIChjb25zdCBmIG9mIGZhY3RzKSB7XG4gICAgaWYgKGYuYXR0ciAhPT0gXCJQaWVjZVR5cGVcIiB8fCBmLnZhbHVlICE9PSBcImtpbmdcIikgY29udGludWU7XG4gICAgY29uc3QgY29sb3JGYWN0ID0gZmFjdHMuZmluZChjID0+IGMuaWQgPT09IGYuaWQgJiYgYy5hdHRyID09PSBcIkNvbG9yXCIpO1xuICAgIGlmIChjb2xvckZhY3QgIT09IHVuZGVmaW5lZCAmJiBjb2xvckZhY3QudmFsdWUgPT09IGNvbG9yKSB7XG4gICAgICBraW5nSWQgPSBmLmlkO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChraW5nSWQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBwb3NGYWN0ID0gZmFjdHMuZmluZChmID0+IGYuaWQgPT09IGtpbmdJZCAmJiBmLmF0dHIgPT09IFwiUG9zaXRpb25cIik7XG4gIGlmIChwb3NGYWN0ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgY29uc3Qga2luZ1BvcyA9IHBvc0ZhY3QudmFsdWUgYXMgU3F1YXJlO1xuXG4gIHJldHVybiBpc1NxdWFyZUF0dGFja2VkKHNlc3Npb24sIGtpbmdQb3MsIG9wcG9zaXRlQ29sb3IoY29sb3IpKTtcbn1cblxuLyoqXG4gKiBDbG9uZSBhIHNlc3Npb24ncyB3b3JraW5nIG1lbW9yeSBpbnRvIGEgZnJlc2gsIGF1dG8tZmlyZS1kaXNhYmxlZFxuICogU2Vzc2lvbiBmb3IgXCJ3aGF0LWlmXCIgbW92ZSBzaW11bGF0aW9uLiBPbmx5IHBpZWNlLWxldmVsIGF0dHJpYnV0ZXMgYXJlXG4gKiBjb3BpZWQgKFBJRUNFX0FUVFJTKTsgZ2FtZS1sZXZlbCBmYWN0cyBhcmUgaXJyZWxldmFudCBmb3IgY2hlY2tcbiAqIGRldGVjdGlvbiBhbmQgd291bGQgZHJhZyBpbiBydWxlLWZpcmluZyBzaWRlIGVmZmVjdHMgd2UgZG9uJ3Qgd2FudC5cbiAqL1xuZnVuY3Rpb24gc25hcHNob3RTZXNzaW9uKHNlc3Npb246IFNlc3Npb24pOiBTZXNzaW9uIHtcbiAgY29uc3QgdGVtcCA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICBmb3IgKGNvbnN0IGYgb2Ygc2Vzc2lvbi5hbGxGYWN0cygpKSB7XG4gICAgLy8gU2tpcCBnYW1lLWxldmVsIGZhY3RzIChUdXJuLCBFblBhc3NhbnRUYXJnZXQsIGV0Yykg4oCUIHRoZVxuICAgIC8vIHNpbXVsYXRvciBvbmx5IGNhcmVzIGFib3V0IGJvYXJkIGdlb21ldHJ5ICsgd2hhdGV2ZXIgY3VzdG9tXG4gICAgLy8gcGllY2UgYXR0cnMgcHJlc2V0cyBoYXZlIGFkZGVkLiBQaWVjZSBlbnRpdGllcyBoYXZlIGlkID4gMCBieVxuICAgIC8vIGNvbnZlbnRpb24uXG4gICAgaWYgKChmLmlkIGFzIG51bWJlcikgPD0gMCkgY29udGludWU7XG4gICAgaWYgKCFpc1BpZWNlQXR0cihmLmF0dHIpKSBjb250aW51ZTtcbiAgICB0ZW1wLmluc2VydChmLmlkLCBmLmF0dHIsIGYudmFsdWUpO1xuICB9XG4gIHJldHVybiB0ZW1wO1xufVxuXG4vKipcbiAqIFJlbW92ZSB0aGUgcGllY2UgKGlmIGFueSkgY3VycmVudGx5IHN0YW5kaW5nIG9uIGBzcXVhcmVgIGZyb20gYHRlbXBgLlxuICogVXNlZCB0byByZXNvbHZlIGNhcHR1cmVzIGluIHRoZSB3aGF0LWlmIHNlc3Npb24uXG4gKi9cbmZ1bmN0aW9uIGNsZWFyU3F1YXJlKHRlbXA6IFNlc3Npb24sIHNxdWFyZTogU3F1YXJlKTogdm9pZCB7XG4gIGNvbnN0IGZhY3RzID0gdGVtcC5hbGxGYWN0cygpO1xuICBjb25zdCBvY2N1cGFudCA9IGZhY3RzLmZpbmQoZiA9PiBmLmF0dHIgPT09IFwiUG9zaXRpb25cIiAmJiBmLnZhbHVlID09PSBzcXVhcmUpO1xuICBpZiAob2NjdXBhbnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICBjb25zdCBpZCA9IG9jY3VwYW50LmlkO1xuICAvLyBSZXRyYWN0IGV2ZXJ5IHBpZWNlLWxldmVsIGZhY3Qgb24gdGhpcyBpZC4gVXNpbmcgYWxsRmFjdHMoKS1iYXNlZFxuICAvLyBlbnVtZXJhdGlvbiByYXRoZXIgdGhhbiBhIGhhcmRjb2RlZCBhdHRyIGxpc3Qgc28gcHJlc2V0LWRlY2xhcmVkXG4gIC8vIGF0dHJpYnV0ZXMgKEhwLCBTaGllbGQsIOKApikgYXJlIGFsc28gY2xlYW5lZC5cbiAgY29uc3QgdG9SZXRyYWN0ID0gZmFjdHNcbiAgICAuZmlsdGVyKGYgPT4gZi5pZCA9PT0gaWQgJiYgaXNQaWVjZUF0dHIoZi5hdHRyKSlcbiAgICAubWFwKGYgPT4gZi5hdHRyKTtcbiAgZm9yIChjb25zdCBhdHRyIG9mIHRvUmV0cmFjdCkge1xuICAgIGlmICh0ZW1wLmNvbnRhaW5zKGlkLCBhdHRyKSkgdGVtcC5yZXRyYWN0KGlkLCBhdHRyKTtcbiAgfVxufVxuXG4vKipcbiAqIEZpbHRlciBvdXQgbW92ZXMgdGhhdCB3b3VsZCBsZWF2ZSBgY29sb3JgJ3Mga2luZyBpbiBjaGVjay5cbiAqXG4gKiBTdHJhdGVneTogZm9yIGVhY2ggY2FuZGlkYXRlIG1vdmUsIGJ1aWxkIGEgZnJlc2ggU2Vzc2lvbiBmcm9tIHRoZVxuICogY3VycmVudCBmYWN0cywgYXBwbHkgdGhlIG1vdmUgKGhhbmRsaW5nIGNhcHR1cmVzIGJ5IHJldHJhY3RpbmcgdGhlXG4gKiBjYXB0dXJlZCBwaWVjZSdzIGZhY3RzKSwgdGhlbiBhc2sgYGlzSW5DaGVja2Agb24gdGhlIHJlc3VsdGluZ1xuICogcG9zaXRpb24uIE1vdmVzIHRoYXQgcGFzcyBhcmUga2VwdDsgbW92ZXMgdGhhdCB3b3VsZCBzZWxmLWNoZWNrIGFyZVxuICogZHJvcHBlZC5cbiAqXG4gKiBUaGlzIGlzIE8obW92ZXMgw5cgcGllY2VzIMOXIGF2Zy1tb3Zlcy1wZXItcGllY2UpIOKAlCBmaW5lIGZvciBQaGFzZSAyXG4gKiB3aGVyZSBjb3JyZWN0bmVzcyBiZWF0cyByYXcgdGhyb3VnaHB1dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlclNlbGZDaGVja01vdmVzKFxuICBzZXNzaW9uOiBTZXNzaW9uLFxuICBtb3ZlczogTGVnYWxNb3ZlW10sXG4gIGNvbG9yOiBQaWVjZUNvbG9yLFxuKTogTGVnYWxNb3ZlW10ge1xuICByZXR1cm4gbW92ZXMuZmlsdGVyKG1vdmUgPT4ge1xuICAgIGNvbnN0IHRlbXAgPSBzbmFwc2hvdFNlc3Npb24oc2Vzc2lvbik7XG5cbiAgICAvLyBDYXB0dXJlOiByZW1vdmUgd2hhdGV2ZXIgY3VycmVudGx5IHNpdHMgb24gdGhlIGRlc3RpbmF0aW9uIHNxdWFyZS5cbiAgICAvLyAoaXNDYXB0dXJlIGNvdmVycyBub3JtYWwgY2FwdHVyZXM7IGVuLXBhc3NhbnQgaGFzIGEgZGlmZmVyZW50XG4gICAgLy8gIHRhcmdldCBzcXVhcmUgYW5kIHdpbGwgbmVlZCBhIGRlZGljYXRlZCBwYXRoIHdoZW4gUDIuMTYgd2lyZXMgaW4uKVxuICAgIGlmIChtb3ZlLmlzQ2FwdHVyZSkge1xuICAgICAgY2xlYXJTcXVhcmUodGVtcCwgbW92ZS50byk7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgdGhlIG1vdmUgYnkgdXBkYXRpbmcgdGhlIG1vdmluZyBwaWVjZSdzIFBvc2l0aW9uLiBgaW5zZXJ0YFxuICAgIC8vIG9uIGFuIGV4aXN0aW5nIChpZCwgYXR0cikgb3ZlcndyaXRlcyBpbiBwbGFjZSAoV00gc2VtYW50aWNzKS5cbiAgICB0ZW1wLmluc2VydChtb3ZlLnBpZWNlSWQsIFwiUG9zaXRpb25cIiwgbW92ZS50byk7XG5cbiAgICByZXR1cm4gIWlzSW5DaGVjayh0ZW1wLCBjb2xvcik7XG4gIH0pO1xufVxuIl0sImZpbGUiOiIvc3JjL3J1bGVzL2NoZWNrLnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/7f28fbcafd62683bddf3e0e31deebb0b8d662089 b/7xOfJqsDU787fe61oSCq1/web/7f28fbcafd62683bddf3e0e31deebb0b8d662089 deleted file mode 100644 index 69dea87..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/7f28fbcafd62683bddf3e0e31deebb0b8d662089 +++ /dev/null @@ -1,161 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/presets/registry.ts", {"importedNames":["PRESET_REGISTRY"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["fileOf","rankOf","squareOf"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/rules/board-queries.ts", {"importedNames":["isAllyAt","isEnemyAt","isPieceAt"]}); - - - - -function wrapFile(file) { - return (file % 8 + 8) % 8; -} -function walkRay(session, pieceId, from, color, fileDelta, rankDelta) { - const out = []; - let file = (0,__vite_ssr_import_1__.fileOf)(from) + fileDelta; - let rank = (0,__vite_ssr_import_1__.rankOf)(from) + rankDelta; - for (let step = 0; step < 80; step++) { - if (rank < 0 || rank > 7) break; - const sq = (0,__vite_ssr_import_1__.squareOf)(wrapFile(file), rank); - if (sq === from) break; - if ((0,__vite_ssr_import_2__.isAllyAt)(session, sq, color)) break; - if ((0,__vite_ssr_import_2__.isEnemyAt)(session, sq, color)) { - out.push({ pieceId, from, to: sq, isCapture: true }); - break; - }; - out.push({ pieceId, from, to: sq, isCapture: false }); - file += fileDelta; - rank += rankDelta; - }; - return out; -} -function offsetMove(session, pieceId, from, color, fileDelta, rankDelta) { - const rank = (0,__vite_ssr_import_1__.rankOf)(from) + rankDelta; - if (rank < 0 || rank > 7) return null; - const file = wrapFile((0,__vite_ssr_import_1__.fileOf)(from) + fileDelta); - const sq = (0,__vite_ssr_import_1__.squareOf)(file, rank); - if (sq === from) return null; - if ((0,__vite_ssr_import_2__.isAllyAt)(session, sq, color)) return null; - return { - pieceId, - from, - to: sq, - isCapture: (0,__vite_ssr_import_2__.isPieceAt)(session, sq) - }; -} -const KNIGHT_OFFSETS = [ - [1, 2], - [2, 1], - [2, -1], - [1, -2], - [-1, -2], - [-2, -1], - [-2, 1], - [-1, 2] -]; -const KING_OFFSETS = [ - [1, 0], - [1, 1], - [0, 1], - [-1, 1], - [-1, 0], - [-1, -1], - [0, -1], - [1, -1] -]; -const ROOK_RAYS = [ - [1, 0], - [-1, 0], - [0, 1], - [0, -1] -]; -const BISHOP_RAYS = [ - [1, 1], - [1, -1], - [-1, 1], - [-1, -1] -]; -function computeCylinderMoves(session, pieceId, from, color, type) { - switch (type) { - case "knight": { - const out = []; - for (const [df, dr] of KNIGHT_OFFSETS) { - const m = offsetMove(session, pieceId, from, color, df, dr); - if (m !== null) out.push(m); - }; - return out; - } - case "king": { - const out = []; - for (const [df, dr] of KING_OFFSETS) { - const m = offsetMove(session, pieceId, from, color, df, dr); - if (m !== null) out.push(m); - }; - return out; - } - case "rook": { - const out = []; - for (const [df, dr] of ROOK_RAYS) { - out.push(...walkRay(session, pieceId, from, color, df, dr)); - }; - return out; - } - case "bishop": { - const out = []; - for (const [df, dr] of BISHOP_RAYS) { - out.push(...walkRay(session, pieceId, from, color, df, dr)); - }; - return out; - } - case "queen": { - const out = []; - for (const [df, dr] of [...ROOK_RAYS, ...BISHOP_RAYS]) { - out.push(...walkRay(session, pieceId, from, color, df, dr)); - }; - return out; - } - case "pawn": { - const dr = color === "white" ? 1 : -1; - const targetRank = (0,__vite_ssr_import_1__.rankOf)(from) + dr; - if (targetRank < 0 || targetRank > 7) return []; - const out = []; - for (const df of [-1, 1]) { - const file = wrapFile((0,__vite_ssr_import_1__.fileOf)(from) + df); - const sq = (0,__vite_ssr_import_1__.squareOf)(file, targetRank); - if (sq === from) continue; - if ((0,__vite_ssr_import_2__.isEnemyAt)(session, sq, color)) { - out.push({ pieceId, from, to: sq, isCapture: true }); - } - }; - return out; - } - default: - return []; - } -} -__vite_ssr_import_0__.PRESET_REGISTRY.register({ - id: "wrap-board", - name: "Cylindrical Board", - description: "The board wraps horizontally: every piece (knights, kings, bishops, queens, rooks, and pawn captures) can move off one side and appear on the other.", - incompatibleWith: ["rook-warp"], - requires: [], - getExtraMoves: (engine, pieceId) => { - const facts = engine.session.allFacts(); - const type = facts.find( - (f) => f.id === pieceId && f.attr === "PieceType" - )?.value; - const color = facts.find( - (f) => f.id === pieceId && f.attr === "Color" - )?.value; - const fromVal = facts.find( - (f) => f.id === pieceId && f.attr === "Position" - )?.value; - if (type === void 0 || color === void 0 || fromVal === void 0) { - return []; - }; - const from = fromVal; - const session = engine.session; - return computeCylinderMoves(session, pieceId, from, color, type); - } -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LE9BQU87QUFTdkIsV0FBTyxxQkFBcUIsU0FBUyxTQUFTLE1BQU0sT0FBTyxJQUFJO0FBQUEsRUFDakU7QUFDRixDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJ3cmFwLWJvYXJkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHJlc2V0OiBgd3JhcC1ib2FyZGAgKEN5bGluZHJpY2FsIEJvYXJkLCBSVUxFUy5tZCBydWxlICM3KVxuICpcbiAqIFRoZSBib2FyZCBpcyBhIGhvcml6b250YWwgY3lsaW5kZXI6IGEtZmlsZSBhbmQgaC1maWxlIGFyZSBhZGphY2VudC5cbiAqIEV2ZXJ5IHBpZWNlIHdob3NlIG1vdmVtZW50IGNvdWxkIFwiZmFsbCBvZmZcIiB0aGUgbGVmdCBvciByaWdodCBlZGdlXG4gKiBpbnN0ZWFkIGVtZXJnZXMgb24gdGhlIG9wcG9zaXRlIHNpZGUsIGNvbnRpbnVpbmcgaXRzIGdlb21ldHJ5IHRoZXJlLlxuICogVmVydGljYWwgZWRnZXMgKHJhbmtzIDEgYW5kIDgpIGRvIE5PVCB3cmFwIOKAlCB0aGUgYm9hcmQgaXMgYSBjeWxpbmRlcixcbiAqIG5vdCBhIHRvcnVzLlxuICpcbiAqIENvbmNyZXRlbHk6XG4gKiAgIC0gUm9va3MgLyBxdWVlbiBob3Jpem9udGFsczogc2xpZGVzIGNvbnRpbnVlIHBhc3QgdGhlIHNlYW0gYWxvbmcgdGhlXG4gKiAgICAgcmFuaywgc3RvcHBpbmcgYXQgdGhlIGZpcnN0IGJsb2NrZXIgb3IgY2FwdHVyaW5nIHRoZSBmaXJzdCBlbmVteS5cbiAqICAgLSBCaXNob3BzIC8gcXVlZW4gZGlhZ29uYWxzOiBkaWFnb25hbCBzbGlkZXMgd3JhcCBpbiBmaWxlIGJ1dCBzdGlsbFxuICogICAgIHRlcm1pbmF0ZSB3aGVuIHRoZSByYW5rIGxlYXZlcyB0aGUgYm9hcmQuXG4gKiAgIC0gS25pZ2h0czogdGhlIDggTC1vZmZzZXRzIGFyZSBjb21wdXRlZCB3aXRoIGZpbGUgYG1vZCA4YCwgc28gYSBrbmlnaHRcbiAqICAgICBvbiBoNCBjYW4gbGVhcCB0byBhNi9iNS9iMy9hMiBhcyBpZiBmaWxlIDgg4omhIGZpbGUgMC5cbiAqICAgLSBLaW5nczogYWxsIDggYWRqYWNlbnQgb2Zmc2V0cyB3aXRoIGZpbGUgYG1vZCA4YC5cbiAqICAgLSBQYXduIGNhcHR1cmVzOiB0aGUgdHdvIGRpYWdvbmFsLWZvcndhcmQgY2FwdHVyZSBzcXVhcmVzIHdyYXAgdG9vLlxuICogICAtIFBhd24gYWR2YW5jZXMgZG8gTk9UIHdyYXAg4oCUIHRoZXkgbW92ZSBhbG9uZyBmaWxlcywgbm90IGFjcm9zcyB0aGVcbiAqICAgICBmaWxlIHNlYW0sIHNvIHdyYXBwaW5nIGlzIGlycmVsZXZhbnQgdGhlcmUuXG4gKlxuICogV2UgaW1wbGVtZW50IHRoaXMgd2l0aCBhIHNpbmdsZSBgZ2V0RXh0cmFNb3Zlc2AgaG9vayB0aGF0LCBwZXIgcGllY2UsXG4gKiBjb21wdXRlcyB0aGUgd3JhcC1hd2FyZSBkZXN0aW5hdGlvbnMgYW5kIHJldHVybnMgb25seSB0aGUgb25lcyB0aGVcbiAqIGJhc2UgRklERSBydWxlIGNvdWxkIG5vdCBhbHJlYWR5IHByb2R1Y2UgKGJlY2F1c2UgaXRzIGZpbGUgbWF0aCBpc1xuICogY2xhbXBlZCB0byBbMCw3XSkuIFRoZSBiYXNlIHJ1bGUncyBzdGFuZGFyZCBtb3ZlcyBzdGlsbCBydW4sIHNvIHRoZVxuICogc3VtIGlzIHRoZSBmdWxsIGN5bGluZHJpY2FsIG1vdmUgc2V0LlxuICpcbiAqIEluY29tcGF0aWJsZSB3aXRoIGByb29rLXdhcnBgOiByb29rLXdhcnAgdXNlcyBhIHN0cmljdGVyIHByZWNvbmRpdGlvblxuICogKHRoZSBmdWxsIHBhdGggdG8gdGhlIGVkZ2UgbXVzdCBiZSBjbGVhciBiZWZvcmUgYW55IHdyYXAgaXMgbGVnYWwpXG4gKiBhbmQgYXBwbGllcyBvbmx5IHRvIHJvb2tzLiBDb21iaW5pbmcgdGhlbSB3b3VsZCBwcm9kdWNlIGFtYmlndW91c1xuICogZGVzdGluYXRpb24gc2V0cyDigJQgc2VlIFJVTEVTLm1kIGZvciB0aGUgZnVsbCBtYXRyaXguXG4gKi9cbmltcG9ydCB7IFBSRVNFVF9SRUdJU1RSWSB9IGZyb20gXCIuL3JlZ2lzdHJ5LmpzXCI7XG5pbXBvcnQgeyBmaWxlT2YsIHJhbmtPZiwgc3F1YXJlT2YgfSBmcm9tIFwiLi4vY29vcmQuanNcIjtcbmltcG9ydCB7XG4gIGlzQWxseUF0LFxuICBpc0VuZW15QXQsXG4gIGlzUGllY2VBdCxcbn0gZnJvbSBcIi4uL3J1bGVzL2JvYXJkLXF1ZXJpZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgUGllY2VDb2xvciwgUGllY2VUeXBlLCBTcXVhcmUgfSBmcm9tIFwiLi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNlc3Npb24sIEVudGl0eUlkIH0gZnJvbSBcIkBwYXJhdHlwZS9yZXRlXCI7XG5pbXBvcnQgdHlwZSB7IExlZ2FsTW92ZSB9IGZyb20gXCIuLi9ydWxlcy90eXBlcy5qc1wiO1xuXG4vKiogTW9kdWxvIHRoYXQgaGFuZGxlcyBuZWdhdGl2ZSBmaWxlIGRlbHRhcyBjb3JyZWN0bHkgKEpTIGAlYCByZXR1cm5zXG4gKiAgbmVnYXRpdmUgdmFsdWVzIGZvciBlLmcuIGAtMSAlIDhgKS4gKi9cbmZ1bmN0aW9uIHdyYXBGaWxlKGZpbGU6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiAoKGZpbGUgJSA4KSArIDgpICUgODtcbn1cblxuLyoqXG4gKiBXYWxrIGEgY3lsaW5kcmljYWwgcmF5IHdpdGggdGhlIGdpdmVuIChmaWxlRGVsdGEsIHJhbmtEZWx0YSkgc3RlcC5cbiAqIEZpbGVzIHdyYXAgbW9kIDg7IHJhbmtzIHRlcm1pbmF0ZSB0aGUgd2FsayB3aGVuIG91dCBvZiBbMCw3XS5cbiAqIFRoZSBzdGFydGluZyBzcXVhcmUgaXMgbmV2ZXIgaW5jbHVkZWQuIFN0b3BzIGF0IHRoZSBmaXJzdCBhbGx5LCBvclxuICogY2FwdHVyZXMgYW5kIHN0b3BzIGF0IHRoZSBmaXJzdCBlbmVteS4gSWYgdGhlIHdhbGsgbG9vcHMgYmFjayB0b1xuICogYGZyb21gIChwb3NzaWJsZSBvbiBhIHB1cmUtaG9yaXpvbnRhbCByYXkgc2luY2UgZmlsZXMgd3JhcCksIGl0XG4gKiBzdG9wcyB3aXRob3V0IHJlLWFkZGluZy5cbiAqL1xuZnVuY3Rpb24gd2Fsa1JheShcbiAgc2Vzc2lvbjogU2Vzc2lvbixcbiAgcGllY2VJZDogRW50aXR5SWQsXG4gIGZyb206IFNxdWFyZSxcbiAgY29sb3I6IFBpZWNlQ29sb3IsXG4gIGZpbGVEZWx0YTogbnVtYmVyLFxuICByYW5rRGVsdGE6IG51bWJlcixcbik6IExlZ2FsTW92ZVtdIHtcbiAgY29uc3Qgb3V0OiBMZWdhbE1vdmVbXSA9IFtdO1xuICBsZXQgZmlsZSA9IGZpbGVPZihmcm9tKSArIGZpbGVEZWx0YTtcbiAgbGV0IHJhbmsgPSByYW5rT2YoZnJvbSkgKyByYW5rRGVsdGE7XG4gIC8vIFNhZmV0eSBjYXA6IGF0IG1vc3QgOCBmaWxlLXdyYXBzICogOCByYW5rcyA9IDY0LCBwaWNrIDgwIGZvciBtYXJnaW4uXG4gIGZvciAobGV0IHN0ZXAgPSAwOyBzdGVwIDwgODA7IHN0ZXArKykge1xuICAgIGlmIChyYW5rIDwgMCB8fCByYW5rID4gNykgYnJlYWs7XG4gICAgY29uc3Qgc3EgPSBzcXVhcmVPZih3cmFwRmlsZShmaWxlKSwgcmFuayk7XG4gICAgaWYgKHNxID09PSBmcm9tKSBicmVhaztcbiAgICBpZiAoaXNBbGx5QXQoc2Vzc2lvbiwgc3EsIGNvbG9yKSkgYnJlYWs7XG4gICAgaWYgKGlzRW5lbXlBdChzZXNzaW9uLCBzcSwgY29sb3IpKSB7XG4gICAgICBvdXQucHVzaCh7IHBpZWNlSWQsIGZyb20sIHRvOiBzcSwgaXNDYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIG91dC5wdXNoKHsgcGllY2VJZCwgZnJvbSwgdG86IHNxLCBpc0NhcHR1cmU6IGZhbHNlIH0pO1xuICAgIGZpbGUgKz0gZmlsZURlbHRhO1xuICAgIHJhbmsgKz0gcmFua0RlbHRhO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogU2luZ2xlLW9mZnNldCAobm9uLXNsaWRpbmcpIGN5bGluZGVyIG1vdmUuIFJldHVybnMgMCBvciAxIGxlZ2FsXG4gKiBtb3Zlcy4gUmFua3Mgb3V0IG9mIGJvdW5kcyDihpIgbm90aGluZyAoY3lsaW5kZXIsIG5vdCB0b3J1cykuXG4gKi9cbmZ1bmN0aW9uIG9mZnNldE1vdmUoXG4gIHNlc3Npb246IFNlc3Npb24sXG4gIHBpZWNlSWQ6IEVudGl0eUlkLFxuICBmcm9tOiBTcXVhcmUsXG4gIGNvbG9yOiBQaWVjZUNvbG9yLFxuICBmaWxlRGVsdGE6IG51bWJlcixcbiAgcmFua0RlbHRhOiBudW1iZXIsXG4pOiBMZWdhbE1vdmUgfCBudWxsIHtcbiAgY29uc3QgcmFuayA9IHJhbmtPZihmcm9tKSArIHJhbmtEZWx0YTtcbiAgaWYgKHJhbmsgPCAwIHx8IHJhbmsgPiA3KSByZXR1cm4gbnVsbDtcbiAgY29uc3QgZmlsZSA9IHdyYXBGaWxlKGZpbGVPZihmcm9tKSArIGZpbGVEZWx0YSk7XG4gIGNvbnN0IHNxID0gc3F1YXJlT2YoZmlsZSwgcmFuayk7XG4gIGlmIChzcSA9PT0gZnJvbSkgcmV0dXJuIG51bGw7XG4gIGlmIChpc0FsbHlBdChzZXNzaW9uLCBzcSwgY29sb3IpKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHtcbiAgICBwaWVjZUlkLFxuICAgIGZyb20sXG4gICAgdG86IHNxLFxuICAgIGlzQ2FwdHVyZTogaXNQaWVjZUF0KHNlc3Npb24sIHNxKSxcbiAgfTtcbn1cblxuLyoqIEtuaWdodCBMLXNoYXBlIG9mZnNldHMuICovXG5jb25zdCBLTklHSFRfT0ZGU0VUUzogUmVhZG9ubHlBcnJheTxyZWFkb25seSBbbnVtYmVyLCBudW1iZXJdPiA9IFtcbiAgWzEsIDJdLCBbMiwgMV0sIFsyLCAtMV0sIFsxLCAtMl0sXG4gIFstMSwgLTJdLCBbLTIsIC0xXSwgWy0yLCAxXSwgWy0xLCAyXSxcbl07XG5cbi8qKiBLaW5nIDgtbmVpZ2hib3VyIG9mZnNldHMuICovXG5jb25zdCBLSU5HX09GRlNFVFM6IFJlYWRvbmx5QXJyYXk8cmVhZG9ubHkgW251bWJlciwgbnVtYmVyXT4gPSBbXG4gIFsxLCAwXSwgWzEsIDFdLCBbMCwgMV0sIFstMSwgMV0sXG4gIFstMSwgMF0sIFstMSwgLTFdLCBbMCwgLTFdLCBbMSwgLTFdLFxuXTtcblxuLyoqIFJvb2sgcmF5IGRpcmVjdGlvbnMuICovXG5jb25zdCBST09LX1JBWVM6IFJlYWRvbmx5QXJyYXk8cmVhZG9ubHkgW251bWJlciwgbnVtYmVyXT4gPSBbXG4gIFsxLCAwXSwgWy0xLCAwXSwgWzAsIDFdLCBbMCwgLTFdLFxuXTtcblxuLyoqIEJpc2hvcCByYXkgZGlyZWN0aW9ucy4gKi9cbmNvbnN0IEJJU0hPUF9SQVlTOiBSZWFkb25seUFycmF5PHJlYWRvbmx5IFtudW1iZXIsIG51bWJlcl0+ID0gW1xuICBbMSwgMV0sIFsxLCAtMV0sIFstMSwgMV0sIFstMSwgLTFdLFxuXTtcblxuLyoqIFBlci10eXBlIGN5bGluZGVyLWF3YXJlIG1vdmUgZ2VuZXJhdGlvbi4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVDeWxpbmRlck1vdmVzKFxuICBzZXNzaW9uOiBTZXNzaW9uLFxuICBwaWVjZUlkOiBFbnRpdHlJZCxcbiAgZnJvbTogU3F1YXJlLFxuICBjb2xvcjogUGllY2VDb2xvcixcbiAgdHlwZTogUGllY2VUeXBlLFxuKTogTGVnYWxNb3ZlW10ge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFwia25pZ2h0XCI6IHtcbiAgICAgIGNvbnN0IG91dDogTGVnYWxNb3ZlW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgW2RmLCBkcl0gb2YgS05JR0hUX09GRlNFVFMpIHtcbiAgICAgICAgY29uc3QgbSA9IG9mZnNldE1vdmUoc2Vzc2lvbiwgcGllY2VJZCwgZnJvbSwgY29sb3IsIGRmLCBkcik7XG4gICAgICAgIGlmIChtICE9PSBudWxsKSBvdXQucHVzaChtKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIGNhc2UgXCJraW5nXCI6IHtcbiAgICAgIGNvbnN0IG91dDogTGVnYWxNb3ZlW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgW2RmLCBkcl0gb2YgS0lOR19PRkZTRVRTKSB7XG4gICAgICAgIGNvbnN0IG0gPSBvZmZzZXRNb3ZlKHNlc3Npb24sIHBpZWNlSWQsIGZyb20sIGNvbG9yLCBkZiwgZHIpO1xuICAgICAgICBpZiAobSAhPT0gbnVsbCkgb3V0LnB1c2gobSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICBjYXNlIFwicm9va1wiOiB7XG4gICAgICBjb25zdCBvdXQ6IExlZ2FsTW92ZVtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IFtkZiwgZHJdIG9mIFJPT0tfUkFZUykge1xuICAgICAgICBvdXQucHVzaCguLi53YWxrUmF5KHNlc3Npb24sIHBpZWNlSWQsIGZyb20sIGNvbG9yLCBkZiwgZHIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIGNhc2UgXCJiaXNob3BcIjoge1xuICAgICAgY29uc3Qgb3V0OiBMZWdhbE1vdmVbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBbZGYsIGRyXSBvZiBCSVNIT1BfUkFZUykge1xuICAgICAgICBvdXQucHVzaCguLi53YWxrUmF5KHNlc3Npb24sIHBpZWNlSWQsIGZyb20sIGNvbG9yLCBkZiwgZHIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIGNhc2UgXCJxdWVlblwiOiB7XG4gICAgICBjb25zdCBvdXQ6IExlZ2FsTW92ZVtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IFtkZiwgZHJdIG9mIFsuLi5ST09LX1JBWVMsIC4uLkJJU0hPUF9SQVlTXSkge1xuICAgICAgICBvdXQucHVzaCguLi53YWxrUmF5KHNlc3Npb24sIHBpZWNlSWQsIGZyb20sIGNvbG9yLCBkZiwgZHIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIGNhc2UgXCJwYXduXCI6IHtcbiAgICAgIC8vIE9ubHkgZGlhZ29uYWwgQ0FQVFVSRVMgd3JhcCDigJQgc3RyYWlnaHQgYWR2YW5jZSBuZXZlciBjcm9zc2VzXG4gICAgICAvLyB0aGUgZmlsZSBzZWFtLiBFbWl0IGJvdGggZGlhZ29uYWxzIChmb3J3YXJkIG9uZSByYW5rIGZvciB0aGlzXG4gICAgICAvLyBjb2xvciksIHdyYXBwaW5nIGZpbGUsIGFuZCBvbmx5IGlmIGFuIGVuZW15IGFjdHVhbGx5IG9jY3VwaWVzXG4gICAgICAvLyB0aGUgdGFyZ2V0LlxuICAgICAgY29uc3QgZHIgPSBjb2xvciA9PT0gXCJ3aGl0ZVwiID8gMSA6IC0xO1xuICAgICAgY29uc3QgdGFyZ2V0UmFuayA9IHJhbmtPZihmcm9tKSArIGRyO1xuICAgICAgaWYgKHRhcmdldFJhbmsgPCAwIHx8IHRhcmdldFJhbmsgPiA3KSByZXR1cm4gW107XG4gICAgICBjb25zdCBvdXQ6IExlZ2FsTW92ZVtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGRmIG9mIFstMSwgMV0pIHtcbiAgICAgICAgY29uc3QgZmlsZSA9IHdyYXBGaWxlKGZpbGVPZihmcm9tKSArIGRmKTtcbiAgICAgICAgY29uc3Qgc3EgPSBzcXVhcmVPZihmaWxlLCB0YXJnZXRSYW5rKTtcbiAgICAgICAgaWYgKHNxID09PSBmcm9tKSBjb250aW51ZTtcbiAgICAgICAgaWYgKGlzRW5lbXlBdChzZXNzaW9uLCBzcSwgY29sb3IpKSB7XG4gICAgICAgICAgb3V0LnB1c2goeyBwaWVjZUlkLCBmcm9tLCB0bzogc3EsIGlzQ2FwdHVyZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG5QUkVTRVRfUkVHSVNUUlkucmVnaXN0ZXIoe1xuICBpZDogXCJ3cmFwLWJvYXJkXCIsXG4gIG5hbWU6IFwiQ3lsaW5kcmljYWwgQm9hcmRcIixcbiAgZGVzY3JpcHRpb246XG4gICAgXCJUaGUgYm9hcmQgd3JhcHMgaG9yaXpvbnRhbGx5OiBldmVyeSBwaWVjZSAoa25pZ2h0cywga2luZ3MsIGJpc2hvcHMsIHF1ZWVucywgcm9va3MsIGFuZCBwYXduIGNhcHR1cmVzKSBjYW4gbW92ZSBvZmYgb25lIHNpZGUgYW5kIGFwcGVhciBvbiB0aGUgb3RoZXIuXCIsXG4gIGluY29tcGF0aWJsZVdpdGg6IFtcInJvb2std2FycFwiXSxcbiAgcmVxdWlyZXM6IFtdLFxuICBnZXRFeHRyYU1vdmVzOiAoZW5naW5lLCBwaWVjZUlkKSA9PiB7XG4gICAgY29uc3QgZmFjdHMgPSBlbmdpbmUuc2Vzc2lvbi5hbGxGYWN0cygpO1xuICAgIGNvbnN0IHR5cGUgPSBmYWN0cy5maW5kKFxuICAgICAgKGYpID0+IGYuaWQgPT09IHBpZWNlSWQgJiYgZi5hdHRyID09PSBcIlBpZWNlVHlwZVwiLFxuICAgICk/LnZhbHVlIGFzIFBpZWNlVHlwZSB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBjb2xvciA9IGZhY3RzLmZpbmQoXG4gICAgICAoZikgPT4gZi5pZCA9PT0gcGllY2VJZCAmJiBmLmF0dHIgPT09IFwiQ29sb3JcIixcbiAgICApPy52YWx1ZSBhcyBQaWVjZUNvbG9yIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGZyb21WYWwgPSBmYWN0cy5maW5kKFxuICAgICAgKGYpID0+IGYuaWQgPT09IHBpZWNlSWQgJiYgZi5hdHRyID09PSBcIlBvc2l0aW9uXCIsXG4gICAgKT8udmFsdWUgYXMgbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgY29sb3IgPT09IHVuZGVmaW5lZCB8fCBmcm9tVmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgZnJvbSA9IGZyb21WYWwgYXMgU3F1YXJlO1xuICAgIGNvbnN0IHNlc3Npb24gPSBlbmdpbmUuc2Vzc2lvbjtcblxuICAgIC8vIFJldHVybiB0aGUgZnVsbCBjeWxpbmRlci1hd2FyZSBtb3ZlIHNldC4gV2UgZGVsaWJlcmF0ZWx5IGRvIE5PVFxuICAgIC8vIHN1YnRyYWN0IHRoZSBiYXNlLXJ1bGUgdGFyZ2V0czogZHVwbGljYXRlcyBoZXJlIGFyZSBoYXJtbGVzc1xuICAgIC8vIChkb3duc3RyZWFtIGNvbnN1bWVycyBkZWR1cCBieSAoZnJvbSx0bykgc3F1YXJlKSBhbmQgcmV0dXJuaW5nXG4gICAgLy8gYSBjb21wbGV0ZSBtb3ZlIGxpc3QgbWFrZXMgdGhlIHByZXNldCB0ZXN0YWJsZSBpbiBpc29sYXRpb24g4oCUXG4gICAgLy8gYSB0ZXN0IGZpeHR1cmUgd2l0aCBvbmx5IHRoZSByb29rIHByZXNlbnQgc2hvdWxkIHN0aWxsIHNlZVxuICAgIC8vIGB3cmFwLWJvYXJkYCBjb250cmlidXRlIHRoZSBzbGlkZSB0YXJnZXRzIHJhdGhlciB0aGFuIHJldHVybmluZ1xuICAgIC8vIGFuIGVtcHR5IGxpc3QgYmVjYXVzZSB0aGUgYmFzZSBydWxlIHdvdWxkIGhhdmUgcmVhY2hlZCB0aGVtLlxuICAgIHJldHVybiBjb21wdXRlQ3lsaW5kZXJNb3ZlcyhzZXNzaW9uLCBwaWVjZUlkLCBmcm9tLCBjb2xvciwgdHlwZSk7XG4gIH0sXG59KTtcbiJdLCJmaWxlIjoiL3NyYy9wcmVzZXRzL3dyYXAtYm9hcmQudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/8286c9fd745186907847a8a16ad952f8bec2c34c b/7xOfJqsDU787fe61oSCq1/web/8286c9fd745186907847a8a16ad952f8bec2c34c deleted file mode 100644 index 80125d3..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/8286c9fd745186907847a8a16ad952f8bec2c34c +++ /dev/null @@ -1,5 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "default", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_export_default__ } catch {} }}); -const __vite_ssr_export_default__ = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%20width='45'%20height='45'%3e%3cg%20style='opacity:1;%20fill:none;%20fill-opacity:1;%20fill-rule:evenodd;%20stroke:%23000000;%20stroke-width:1.5;%20stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;%20stroke-dasharray:none;%20stroke-opacity:1;'%20transform='translate(0,0.3)'%3e%3cpath%20d='M%2022,10%20C%2032.5,11%2038.5,18%2038,39%20L%2015,39%20C%2015,30%2025,32.5%2023,18'%20style='fill:%23000000;%20stroke:%23000000;'%20/%3e%3cpath%20d='M%2024,18%20C%2024.38,20.91%2018.45,25.37%2016,27%20C%2013,29%2013.18,31.34%2011,31%20C%209.958,30.06%2012.41,27.96%2011,28%20C%2010,28%2011.19,29.23%2010,30%20C%209,30%205.997,31%206,26%20C%206,24%2012,14%2012,14%20C%2012,14%2013.89,12.1%2014,10.5%20C%2013.27,9.506%2013.5,8.5%2013.5,7.5%20C%2014.5,6.5%2016.5,10%2016.5,10%20L%2018.5,10%20C%2018.5,10%2019.28,8.008%2021,7%20C%2022,7%2022,10%2022,10'%20style='fill:%23000000;%20stroke:%23000000;'%20/%3e%3cpath%20d='M%209.5%2025.5%20A%200.5%200.5%200%201%201%208.5,25.5%20A%200.5%200.5%200%201%201%209.5%2025.5%20z'%20style='fill:%23ffffff;%20stroke:%23ffffff;'%20/%3e%3cpath%20d='M%2015%2015.5%20A%200.5%201.5%200%201%201%2014,15.5%20A%200.5%201.5%200%201%201%2015%2015.5%20z'%20transform='matrix(0.866,0.5,-0.5,0.866,9.693,-5.173)'%20style='fill:%23ffffff;%20stroke:%23ffffff;'%20/%3e%3cpath%20d='M%2024.55,10.4%20L%2024.1,11.85%20L%2024.6,12%20C%2027.75,13%2030.25,14.49%2032.5,18.75%20C%2034.75,23.01%2035.75,29.06%2035.25,39%20L%2035.2,39.5%20L%2037.45,39.5%20L%2037.5,39%20C%2038,28.94%2036.62,22.15%2034.25,17.66%20C%2031.88,13.17%2028.46,11.02%2025.06,10.5%20L%2024.55,10.4%20z%20'%20style='fill:%23ffffff;%20stroke:none;'%20/%3e%3c/g%3e%3c/svg%3e" - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJsYWNrLWtuaWdodC5zdmciXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjP3htbCUyMHZlcnNpb249JzEuMCclMjBlbmNvZGluZz0nVVRGLTgnJTIwc3RhbmRhbG9uZT0nbm8nPyUzZSUzYyFET0NUWVBFJTIwc3ZnJTIwUFVCTElDJTIwJy0vL1czQy8vRFREJTIwU1ZHJTIwMS4xLy9FTiclMjAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJyUzZSUzY3N2ZyUyMHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclMjB2ZXJzaW9uPScxLjEnJTIwd2lkdGg9JzQ1JyUyMGhlaWdodD0nNDUnJTNlJTNjZyUyMHN0eWxlPSdvcGFjaXR5OjE7JTIwZmlsbDpub25lOyUyMGZpbGwtb3BhY2l0eToxOyUyMGZpbGwtcnVsZTpldmVub2RkOyUyMHN0cm9rZTolMjMwMDAwMDA7JTIwc3Ryb2tlLXdpZHRoOjEuNTslMjBzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDslMjBzdHJva2UtZGFzaGFycmF5Om5vbmU7JTIwc3Ryb2tlLW9wYWNpdHk6MTsnJTIwdHJhbnNmb3JtPSd0cmFuc2xhdGUoMCwwLjMpJyUzZSUzY3BhdGglMjBkPSdNJTIwMjIsMTAlMjBDJTIwMzIuNSwxMSUyMDM4LjUsMTglMjAzOCwzOSUyMEwlMjAxNSwzOSUyMEMlMjAxNSwzMCUyMDI1LDMyLjUlMjAyMywxOCclMjBzdHlsZT0nZmlsbDolMjMwMDAwMDA7JTIwc3Ryb2tlOiUyMzAwMDAwMDsnJTIwLyUzZSUzY3BhdGglMjBkPSdNJTIwMjQsMTglMjBDJTIwMjQuMzgsMjAuOTElMjAxOC40NSwyNS4zNyUyMDE2LDI3JTIwQyUyMDEzLDI5JTIwMTMuMTgsMzEuMzQlMjAxMSwzMSUyMEMlMjA5Ljk1OCwzMC4wNiUyMDEyLjQxLDI3Ljk2JTIwMTEsMjglMjBDJTIwMTAsMjglMjAxMS4xOSwyOS4yMyUyMDEwLDMwJTIwQyUyMDksMzAlMjA1Ljk5NywzMSUyMDYsMjYlMjBDJTIwNiwyNCUyMDEyLDE0JTIwMTIsMTQlMjBDJTIwMTIsMTQlMjAxMy44OSwxMi4xJTIwMTQsMTAuNSUyMEMlMjAxMy4yNyw5LjUwNiUyMDEzLjUsOC41JTIwMTMuNSw3LjUlMjBDJTIwMTQuNSw2LjUlMjAxNi41LDEwJTIwMTYuNSwxMCUyMEwlMjAxOC41LDEwJTIwQyUyMDE4LjUsMTAlMjAxOS4yOCw4LjAwOCUyMDIxLDclMjBDJTIwMjIsNyUyMDIyLDEwJTIwMjIsMTAnJTIwc3R5bGU9J2ZpbGw6JTIzMDAwMDAwOyUyMHN0cm9rZTolMjMwMDAwMDA7JyUyMC8lM2UlM2NwYXRoJTIwZD0nTSUyMDkuNSUyMDI1LjUlMjBBJTIwMC41JTIwMC41JTIwMCUyMDElMjAxJTIwOC41LDI1LjUlMjBBJTIwMC41JTIwMC41JTIwMCUyMDElMjAxJTIwOS41JTIwMjUuNSUyMHonJTIwc3R5bGU9J2ZpbGw6JTIzZmZmZmZmOyUyMHN0cm9rZTolMjNmZmZmZmY7JyUyMC8lM2UlM2NwYXRoJTIwZD0nTSUyMDE1JTIwMTUuNSUyMEElMjAwLjUlMjAxLjUlMjAwJTIwMSUyMDElMjAxNCwxNS41JTIwQSUyMDAuNSUyMDEuNSUyMDAlMjAxJTIwMSUyMDE1JTIwMTUuNSUyMHonJTIwdHJhbnNmb3JtPSdtYXRyaXgoMC44NjYsMC41LC0wLjUsMC44NjYsOS42OTMsLTUuMTczKSclMjBzdHlsZT0nZmlsbDolMjNmZmZmZmY7JTIwc3Ryb2tlOiUyM2ZmZmZmZjsnJTIwLyUzZSUzY3BhdGglMjBkPSdNJTIwMjQuNTUsMTAuNCUyMEwlMjAyNC4xLDExLjg1JTIwTCUyMDI0LjYsMTIlMjBDJTIwMjcuNzUsMTMlMjAzMC4yNSwxNC40OSUyMDMyLjUsMTguNzUlMjBDJTIwMzQuNzUsMjMuMDElMjAzNS43NSwyOS4wNiUyMDM1LjI1LDM5JTIwTCUyMDM1LjIsMzkuNSUyMEwlMjAzNy40NSwzOS41JTIwTCUyMDM3LjUsMzklMjBDJTIwMzgsMjguOTQlMjAzNi42MiwyMi4xNSUyMDM0LjI1LDE3LjY2JTIwQyUyMDMxLjg4LDEzLjE3JTIwMjguNDYsMTEuMDIlMjAyNS4wNiwxMC41JTIwTCUyMDI0LjU1LDEwLjQlMjB6JTIwJyUyMHN0eWxlPSdmaWxsOiUyM2ZmZmZmZjslMjBzdHJva2U6bm9uZTsnJTIwLyUzZSUzYy9nJTNlJTNjL3N2ZyUzZVwiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxtQ0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/85c7c6ae1e7237a8e62a9876eaac89c659ea1a85 b/7xOfJqsDU787fe61oSCq1/web/85c7c6ae1e7237a8e62a9876eaac89c659ea1a85 deleted file mode 100644 index 4aa4204..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/85c7c6ae1e7237a8e62a9876eaac89c659ea1a85 +++ /dev/null @@ -1,91 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "stateHash", { enumerable: true, configurable: true, get(){ try { return stateHash } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "replayFromLog", { enumerable: true, configurable: true, get(){ try { return replayFromLog } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/session.js", {"importedNames":["Session"]});/** - * Replay engine — reconstructs {@link Session} state from an - * {@link EventLog}, and produces a deterministic hash of a session's - * current fact state for equivalence checking. - * - * Per SPEC.md §Replay Determinism: given the same schema, rules, and - * event log, replay produces byte-identical working memory (verified - * via {@link stateHash}). Derived facts (negative {@link EntityId}s) - * are never logged — they are re-derived naturally when rules fire - * during replay. - * - * The hash is djb2 (a simple, deterministic, non-cryptographic - * algorithm). Collision resistance is not required — this is a - * fingerprint for determinism regression tests, not a security primitive. - */ - -/** - * Produce a deterministic hash of a session's fact state. - * - * Relies on {@link Session.allFacts} returning facts sorted by - * `[id asc, attr asc]` (see wm.ts). Values are serialized with - * `JSON.stringify`, which is stable for plain JSON-compatible values — - * callers that store non-JSON values in working memory must ensure - * their serialization is order-independent. - * - * Output is a zero-padded 8-character hex string (32-bit djb2). - */ -function stateHash(session) { - const facts = session.allFacts(); - const canonical = facts - .map((f) => `${f.id}:${f.attr}=${JSON.stringify(f.value)}`) - .join("|"); - // djb2 — deterministic, no crypto dependency, sufficient for - // fingerprinting fact state in tests and CI. - let hash = 5381; - for (let i = 0; i < canonical.length; i++) { - hash = ((hash << 5) + hash) ^ canonical.charCodeAt(i); - hash = hash >>> 0; // coerce to unsigned 32-bit - }; - return hash.toString(16).padStart(8, "0"); -}; -/** - * Replay a sequence of log events on a fresh {@link Session} and - * return it. The caller is responsible for registering rules on the - * session *before* replay if rule firings should re-derive facts. - * - * Events recorded against derived ids (negative {@link EntityId}s) - * are defensively skipped — the EventLog contract already excludes - * them at record time, but guarding here keeps replay correct against - * externally-sourced logs. - * - * Unknown event kinds are ignored rather than throwing: the log - * format may gain new kinds (e.g. `snapshot`) without breaking older - * replayers. - */ -function replayFromLog(events, opts = {}) { - const session = new __vite_ssr_import_0__.Session({ ...opts, autoFire: false }); - for (const event of events) { - switch (event.kind) { - case "insert": { - if (event.id === undefined || event.attr === undefined) - continue; - if (event.id < 0) - continue; - session.insert(event.id, event.attr, event.value); - break; - } - case "retract": { - if (event.id === undefined || event.attr === undefined) - continue; - if (event.id < 0) - continue; - session.retract(event.id, event.attr); - break; - } - case "fire": { - session.fireRules(); - break; - } - default: - // Forward-compatible: ignore unknown kinds. - break; - } - }; - return session; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7QUFlQSxzSkFmQTs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQTs7Ozs7Ozs7Ozs7QUFXTSxTQUFVLFNBQVMsQ0FBQyxPQUFnQjtJQUN4QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFO0lBQ2hDLE1BQU0sU0FBUyxHQUFHO1NBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFZLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtTQUNuRSxJQUFJLENBQUMsR0FBRyxDQUFDO0lBRVo7SUFDQTtJQUNBLElBQUksSUFBSSxHQUFHLElBQUk7SUFDZixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN6QyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNyRCxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JCO0lBQ0EsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQzNDO0FBV0E7Ozs7Ozs7Ozs7Ozs7O0FBY00sU0FBVSxhQUFhLENBQzNCLE1BQTJCLEVBQzNCLE9BQXNCLEVBQUU7SUFFeEIsTUFBTSxPQUFPLEdBQUcsSUFBSSw2QkFBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBRXpELEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFO1FBQzFCLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRTtZQUNsQixLQUFLLFFBQVEsQ0FBQyxDQUFDO2dCQUNiLElBQUksS0FBSyxDQUFDLEVBQUUsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTO29CQUFFO2dCQUN4RCxJQUFLLEtBQUssQ0FBQyxFQUFhLEdBQUcsQ0FBQztvQkFBRTtnQkFDOUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBYyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDN0Q7WUFDRjtZQUNBLEtBQUssU0FBUyxDQUFDLENBQUM7Z0JBQ2QsSUFBSSxLQUFLLENBQUMsRUFBRSxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVM7b0JBQUU7Z0JBQ3hELElBQUssS0FBSyxDQUFDLEVBQWEsR0FBRyxDQUFDO29CQUFFO2dCQUM5QixPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFjLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDakQ7WUFDRjtZQUNBLEtBQUssTUFBTSxDQUFDLENBQUM7Z0JBQ1gsT0FBTyxDQUFDLFNBQVMsRUFBRTtnQkFDbkI7WUFDRjtZQUNBO2dCQUNFO2dCQUNBO1FBQ0o7SUFDRjtJQUVBLE9BQU8sT0FBTztBQUNoQiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3JlcGxheS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlcGxheSBlbmdpbmUg4oCUIHJlY29uc3RydWN0cyB7QGxpbmsgU2Vzc2lvbn0gc3RhdGUgZnJvbSBhblxuICoge0BsaW5rIEV2ZW50TG9nfSwgYW5kIHByb2R1Y2VzIGEgZGV0ZXJtaW5pc3RpYyBoYXNoIG9mIGEgc2Vzc2lvbidzXG4gKiBjdXJyZW50IGZhY3Qgc3RhdGUgZm9yIGVxdWl2YWxlbmNlIGNoZWNraW5nLlxuICpcbiAqIFBlciBTUEVDLm1kIMKnUmVwbGF5IERldGVybWluaXNtOiBnaXZlbiB0aGUgc2FtZSBzY2hlbWEsIHJ1bGVzLCBhbmRcbiAqIGV2ZW50IGxvZywgcmVwbGF5IHByb2R1Y2VzIGJ5dGUtaWRlbnRpY2FsIHdvcmtpbmcgbWVtb3J5ICh2ZXJpZmllZFxuICogdmlhIHtAbGluayBzdGF0ZUhhc2h9KS4gRGVyaXZlZCBmYWN0cyAobmVnYXRpdmUge0BsaW5rIEVudGl0eUlkfXMpXG4gKiBhcmUgbmV2ZXIgbG9nZ2VkIOKAlCB0aGV5IGFyZSByZS1kZXJpdmVkIG5hdHVyYWxseSB3aGVuIHJ1bGVzIGZpcmVcbiAqIGR1cmluZyByZXBsYXkuXG4gKlxuICogVGhlIGhhc2ggaXMgZGpiMiAoYSBzaW1wbGUsIGRldGVybWluaXN0aWMsIG5vbi1jcnlwdG9ncmFwaGljXG4gKiBhbGdvcml0aG0pLiBDb2xsaXNpb24gcmVzaXN0YW5jZSBpcyBub3QgcmVxdWlyZWQg4oCUIHRoaXMgaXMgYVxuICogZmluZ2VycHJpbnQgZm9yIGRldGVybWluaXNtIHJlZ3Jlc3Npb24gdGVzdHMsIG5vdCBhIHNlY3VyaXR5IHByaW1pdGl2ZS5cbiAqL1xuaW1wb3J0IHsgU2Vzc2lvbiwgdHlwZSBTZXNzaW9uT3B0aW9ucyB9IGZyb20gXCIuL3Nlc3Npb24uanNcIjtcbmltcG9ydCB0eXBlIHsgTG9nRXZlbnQgfSBmcm9tIFwiLi9ldmVudGxvZy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuXG4vKipcbiAqIFByb2R1Y2UgYSBkZXRlcm1pbmlzdGljIGhhc2ggb2YgYSBzZXNzaW9uJ3MgZmFjdCBzdGF0ZS5cbiAqXG4gKiBSZWxpZXMgb24ge0BsaW5rIFNlc3Npb24uYWxsRmFjdHN9IHJldHVybmluZyBmYWN0cyBzb3J0ZWQgYnlcbiAqIGBbaWQgYXNjLCBhdHRyIGFzY11gIChzZWUgd20udHMpLiBWYWx1ZXMgYXJlIHNlcmlhbGl6ZWQgd2l0aFxuICogYEpTT04uc3RyaW5naWZ5YCwgd2hpY2ggaXMgc3RhYmxlIGZvciBwbGFpbiBKU09OLWNvbXBhdGlibGUgdmFsdWVzIOKAlFxuICogY2FsbGVycyB0aGF0IHN0b3JlIG5vbi1KU09OIHZhbHVlcyBpbiB3b3JraW5nIG1lbW9yeSBtdXN0IGVuc3VyZVxuICogdGhlaXIgc2VyaWFsaXphdGlvbiBpcyBvcmRlci1pbmRlcGVuZGVudC5cbiAqXG4gKiBPdXRwdXQgaXMgYSB6ZXJvLXBhZGRlZCA4LWNoYXJhY3RlciBoZXggc3RyaW5nICgzMi1iaXQgZGpiMikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZUhhc2goc2Vzc2lvbjogU2Vzc2lvbik6IHN0cmluZyB7XG4gIGNvbnN0IGZhY3RzID0gc2Vzc2lvbi5hbGxGYWN0cygpO1xuICBjb25zdCBjYW5vbmljYWwgPSBmYWN0c1xuICAgIC5tYXAoKGYpID0+IGAke2YuaWQgYXMgbnVtYmVyfToke2YuYXR0cn09JHtKU09OLnN0cmluZ2lmeShmLnZhbHVlKX1gKVxuICAgIC5qb2luKFwifFwiKTtcblxuICAvLyBkamIyIOKAlCBkZXRlcm1pbmlzdGljLCBubyBjcnlwdG8gZGVwZW5kZW5jeSwgc3VmZmljaWVudCBmb3JcbiAgLy8gZmluZ2VycHJpbnRpbmcgZmFjdCBzdGF0ZSBpbiB0ZXN0cyBhbmQgQ0kuXG4gIGxldCBoYXNoID0gNTM4MTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYW5vbmljYWwubGVuZ3RoOyBpKyspIHtcbiAgICBoYXNoID0gKChoYXNoIDw8IDUpICsgaGFzaCkgXiBjYW5vbmljYWwuY2hhckNvZGVBdChpKTtcbiAgICBoYXNoID0gaGFzaCA+Pj4gMDsgLy8gY29lcmNlIHRvIHVuc2lnbmVkIDMyLWJpdFxuICB9XG4gIHJldHVybiBoYXNoLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCBcIjBcIik7XG59XG5cbi8qKlxuICogT3B0aW9ucyBhY2NlcHRlZCBieSB7QGxpbmsgcmVwbGF5RnJvbUxvZ30uIE1pcnJvcnNcbiAqIHtAbGluayBTZXNzaW9uT3B0aW9uc30gbWludXMgYGF1dG9GaXJlYCBhbmQgYGV2ZW50TG9nYCwgd2hpY2ggYXJlXG4gKiBhbHdheXMgZm9yY2VkIHRvIGRldGVybWluaXN0aWMgdmFsdWVzOiBgYXV0b0ZpcmU6IGZhbHNlYCAodGhlIGxvZ1xuICogYWxyZWFkeSByZWNvcmRzIGV4cGxpY2l0IGZpcmVzIHZpYSBcImZpcmVcIiBldmVudHMpIGFuZCBubyBhdHRhY2hlZFxuICogbG9nIChyZXBsYXkgbXVzdCBub3QgcmUtcmVjb3JkIGludG8gYSBsaXZlIGxvZykuXG4gKi9cbmV4cG9ydCB0eXBlIFJlcGxheU9wdGlvbnMgPSBPbWl0PFNlc3Npb25PcHRpb25zLCBcImF1dG9GaXJlXCIgfCBcImV2ZW50TG9nXCI+O1xuXG4vKipcbiAqIFJlcGxheSBhIHNlcXVlbmNlIG9mIGxvZyBldmVudHMgb24gYSBmcmVzaCB7QGxpbmsgU2Vzc2lvbn0gYW5kXG4gKiByZXR1cm4gaXQuIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIHJ1bGVzIG9uIHRoZVxuICogc2Vzc2lvbiAqYmVmb3JlKiByZXBsYXkgaWYgcnVsZSBmaXJpbmdzIHNob3VsZCByZS1kZXJpdmUgZmFjdHMuXG4gKlxuICogRXZlbnRzIHJlY29yZGVkIGFnYWluc3QgZGVyaXZlZCBpZHMgKG5lZ2F0aXZlIHtAbGluayBFbnRpdHlJZH1zKVxuICogYXJlIGRlZmVuc2l2ZWx5IHNraXBwZWQg4oCUIHRoZSBFdmVudExvZyBjb250cmFjdCBhbHJlYWR5IGV4Y2x1ZGVzXG4gKiB0aGVtIGF0IHJlY29yZCB0aW1lLCBidXQgZ3VhcmRpbmcgaGVyZSBrZWVwcyByZXBsYXkgY29ycmVjdCBhZ2FpbnN0XG4gKiBleHRlcm5hbGx5LXNvdXJjZWQgbG9ncy5cbiAqXG4gKiBVbmtub3duIGV2ZW50IGtpbmRzIGFyZSBpZ25vcmVkIHJhdGhlciB0aGFuIHRocm93aW5nOiB0aGUgbG9nXG4gKiBmb3JtYXQgbWF5IGdhaW4gbmV3IGtpbmRzIChlLmcuIGBzbmFwc2hvdGApIHdpdGhvdXQgYnJlYWtpbmcgb2xkZXJcbiAqIHJlcGxheWVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxheUZyb21Mb2coXG4gIGV2ZW50czogcmVhZG9ubHkgTG9nRXZlbnRbXSxcbiAgb3B0czogUmVwbGF5T3B0aW9ucyA9IHt9LFxuKTogU2Vzc2lvbiB7XG4gIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IC4uLm9wdHMsIGF1dG9GaXJlOiBmYWxzZSB9KTtcblxuICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgIHN3aXRjaCAoZXZlbnQua2luZCkge1xuICAgICAgY2FzZSBcImluc2VydFwiOiB7XG4gICAgICAgIGlmIChldmVudC5pZCA9PT0gdW5kZWZpbmVkIHx8IGV2ZW50LmF0dHIgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgICAgIGlmICgoZXZlbnQuaWQgYXMgbnVtYmVyKSA8IDApIGNvbnRpbnVlO1xuICAgICAgICBzZXNzaW9uLmluc2VydChldmVudC5pZCBhcyBFbnRpdHlJZCwgZXZlbnQuYXR0ciwgZXZlbnQudmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJyZXRyYWN0XCI6IHtcbiAgICAgICAgaWYgKGV2ZW50LmlkID09PSB1bmRlZmluZWQgfHwgZXZlbnQuYXR0ciA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICAgICAgaWYgKChldmVudC5pZCBhcyBudW1iZXIpIDwgMCkgY29udGludWU7XG4gICAgICAgIHNlc3Npb24ucmV0cmFjdChldmVudC5pZCBhcyBFbnRpdHlJZCwgZXZlbnQuYXR0cik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBcImZpcmVcIjoge1xuICAgICAgICBzZXNzaW9uLmZpcmVSdWxlcygpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIEZvcndhcmQtY29tcGF0aWJsZTogaWdub3JlIHVua25vd24ga2luZHMuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzZXNzaW9uO1xufVxuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvZGlzdC9yZXBsYXkuanMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/86e6fa0d58da34ac9f2c18b2f3791b86158e7622 b/7xOfJqsDU787fe61oSCq1/web/86e6fa0d58da34ac9f2c18b2f3791b86158e7622 deleted file mode 100644 index e1576b1..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/86e6fa0d58da34ac9f2c18b2f3791b86158e7622 +++ /dev/null @@ -1,62 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "defineSchema", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_0__.defineSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "fact", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_0__.fact } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "WorkingMemory", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_1__.WorkingMemory } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "AlphaNetwork", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_2__.AlphaNetwork } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "AlphaNode", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_2__.AlphaNode } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "AlphaMemory", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_2__.AlphaMemory } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "Token", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_3__.Token } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "BetaMemory", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_3__.BetaMemory } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "BetaMemoryNode", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_3__.BetaMemoryNode } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "JoinNode", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_4__.JoinNode } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "NegationNode", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_5__.NegationNode } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "UnsafeNegationError", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_5__.UnsafeNegationError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "ExistentialNode", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_6__.ExistentialNode } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "NccNode", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_7__.NccNode } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "NccPartner", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_7__.NccPartner } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "v", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_8__.v } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "defineRule", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_8__.defineRule } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "HandlerRegistry", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_9__.HandlerRegistry } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "PredicateRegistry", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_9__.PredicateRegistry } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "UnknownHandlerError", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_9__.UnknownHandlerError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "UnknownPredicateError", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_9__.UnknownPredicateError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "FilterNode", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_10__.FilterNode } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "Session", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_11__.Session } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "EventLog", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_12__.EventLog } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "stateHash", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_13__.stateHash } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "replayFromLog", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_13__.replayFromLog } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "RecursionLimitExceededError", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_14__.RecursionLimitExceededError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "serialize", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_15__.serialize } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "deserialize", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_15__.deserialize } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "RULE_SCHEMA_V1", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_15__.RULE_SCHEMA_V1 } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "ProductionNode", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_16__.ProductionNode } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "query", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_16__.query } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "queryAll", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_16__.queryAll } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "NoMatchError", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_16__.NoMatchError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "DerivedFactProduction", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_17__.DerivedFactProduction } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "orderActivations", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_18__.orderActivations } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "AggregationNode", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_19__.AggregationNode } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "SnapshotManager", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_20__.SnapshotManager } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/schema.js", {"importedNames":["defineSchema","fact"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/wm.js", {"importedNames":["WorkingMemory"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/alpha.js", {"importedNames":["AlphaNetwork","AlphaNode","AlphaMemory"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/beta.js", {"importedNames":["Token","BetaMemory","BetaMemoryNode"]}); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/join.js", {"importedNames":["JoinNode"]}); -const __vite_ssr_import_5__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/negation.js", {"importedNames":["NegationNode","UnsafeNegationError"]}); -const __vite_ssr_import_6__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/existential.js", {"importedNames":["ExistentialNode"]}); -const __vite_ssr_import_7__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/ncc.js", {"importedNames":["NccNode","NccPartner"]}); -const __vite_ssr_import_8__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/builder.js", {"importedNames":["v","defineRule"]}); -const __vite_ssr_import_9__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/registry.js", {"importedNames":["HandlerRegistry","PredicateRegistry","UnknownHandlerError","UnknownPredicateError"]}); -const __vite_ssr_import_10__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/condition.js", {"importedNames":["FilterNode"]}); -const __vite_ssr_import_11__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/session.js", {"importedNames":["Session"]}); -const __vite_ssr_import_12__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/eventlog.js", {"importedNames":["EventLog"]}); -const __vite_ssr_import_13__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/replay.js", {"importedNames":["stateHash","replayFromLog"]}); -const __vite_ssr_import_14__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/cycle.js", {"importedNames":["RecursionLimitExceededError"]}); -const __vite_ssr_import_15__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/serialize.js", {"importedNames":["serialize","deserialize","RULE_SCHEMA_V1"]}); -const __vite_ssr_import_16__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/query.js", {"importedNames":["ProductionNode","query","queryAll","NoMatchError"]}); -const __vite_ssr_import_17__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/derived.js", {"importedNames":["DerivedFactProduction"]}); -const __vite_ssr_import_18__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/conflict.js", {"importedNames":["orderActivations"]}); -const __vite_ssr_import_19__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/aggregate.js", {"importedNames":["AggregationNode"]}); -const __vite_ssr_import_20__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/snapshot.js", {"importedNames":["SnapshotManager"]}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQTtBQUdBO0FBR0E7QUFHQTtBQUdBO0FBRUE7QUFFQTtBQUVBO0FBR0E7QUFFQTtBQUdBO0FBR0E7QUFHQTtBQUdBO0FBRUE7QUFHQTtBQUdBO0FBR0E7QUFHQTtBQUdBO0FBR0EiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAcGFyYXR5cGUvcmV0ZSDigJQgRG9vcmVuYm9zLXN0eWxlIFJldGUgSUkgcnVsZXMgZW5naW5lXG5leHBvcnQgdHlwZSB7XG4gIEVudGl0eUlkLFxuICBGYWN0LFxuICBTY2hlbWEsXG4gIFNjaGVtYUtpbmQsXG4gIERlZmluZVNjaGVtYU9wdGlvbnMsXG59IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuZXhwb3J0IHsgZGVmaW5lU2NoZW1hLCBmYWN0IH0gZnJvbSBcIi4vc2NoZW1hLmpzXCI7XG5cbmV4cG9ydCB0eXBlIHsgQXR0cktleSwgRmFjdFZhbHVlIH0gZnJvbSBcIi4vd20uanNcIjtcbmV4cG9ydCB7IFdvcmtpbmdNZW1vcnkgfSBmcm9tIFwiLi93bS5qc1wiO1xuXG5leHBvcnQgdHlwZSB7IEFscGhhQ29uZGl0aW9uIH0gZnJvbSBcIi4vYWxwaGEuanNcIjtcbmV4cG9ydCB7IEFscGhhTmV0d29yaywgQWxwaGFOb2RlLCBBbHBoYU1lbW9yeSB9IGZyb20gXCIuL2FscGhhLmpzXCI7XG5cbmV4cG9ydCB0eXBlIHsgQmluZGluZ3MsIFRva2VuRmFjdCB9IGZyb20gXCIuL2JldGEuanNcIjtcbmV4cG9ydCB7IFRva2VuLCBCZXRhTWVtb3J5LCBCZXRhTWVtb3J5Tm9kZSB9IGZyb20gXCIuL2JldGEuanNcIjtcblxuZXhwb3J0IHR5cGUgeyBKb2luVGVzdCB9IGZyb20gXCIuL2pvaW4uanNcIjtcbmV4cG9ydCB7IEpvaW5Ob2RlIH0gZnJvbSBcIi4vam9pbi5qc1wiO1xuXG5leHBvcnQgeyBOZWdhdGlvbk5vZGUsIFVuc2FmZU5lZ2F0aW9uRXJyb3IgfSBmcm9tIFwiLi9uZWdhdGlvbi5qc1wiO1xuXG5leHBvcnQgeyBFeGlzdGVudGlhbE5vZGUgfSBmcm9tIFwiLi9leGlzdGVudGlhbC5qc1wiO1xuXG5leHBvcnQgeyBOY2NOb2RlLCBOY2NQYXJ0bmVyIH0gZnJvbSBcIi4vbmNjLmpzXCI7XG5cbmV4cG9ydCB0eXBlIHsgVmFyaWFibGVEZXNjcmlwdG9yLCBSdWxlQ29uZGl0aW9uLCBSdWxlRGVmaW5pdGlvbiwgRGVmaW5lUnVsZU9wdHMgfSBmcm9tIFwiLi9idWlsZGVyLmpzXCI7XG5leHBvcnQgeyB2LCBkZWZpbmVSdWxlIH0gZnJvbSBcIi4vYnVpbGRlci5qc1wiO1xuZXhwb3J0IHR5cGUgeyBIYW5kbGVyRm4sIFByZWRpY2F0ZUZuIH0gZnJvbSBcIi4vcmVnaXN0cnkuanNcIjtcbmV4cG9ydCB7IEhhbmRsZXJSZWdpc3RyeSwgUHJlZGljYXRlUmVnaXN0cnksIFVua25vd25IYW5kbGVyRXJyb3IsIFVua25vd25QcmVkaWNhdGVFcnJvciB9IGZyb20gXCIuL3JlZ2lzdHJ5LmpzXCI7XG5cbmV4cG9ydCB0eXBlIHsgRmlsdGVyU3BlYyB9IGZyb20gXCIuL2NvbmRpdGlvbi5qc1wiO1xuZXhwb3J0IHsgRmlsdGVyTm9kZSB9IGZyb20gXCIuL2NvbmRpdGlvbi5qc1wiO1xuXG5leHBvcnQgdHlwZSB7IFNlc3Npb25PcHRpb25zIH0gZnJvbSBcIi4vc2Vzc2lvbi5qc1wiO1xuZXhwb3J0IHsgU2Vzc2lvbiB9IGZyb20gXCIuL3Nlc3Npb24uanNcIjtcblxuZXhwb3J0IHR5cGUgeyBFdmVudEtpbmQsIExvZ0V2ZW50IH0gZnJvbSBcIi4vZXZlbnRsb2cuanNcIjtcbmV4cG9ydCB7IEV2ZW50TG9nIH0gZnJvbSBcIi4vZXZlbnRsb2cuanNcIjtcblxuZXhwb3J0IHR5cGUgeyBSZXBsYXlPcHRpb25zIH0gZnJvbSBcIi4vcmVwbGF5LmpzXCI7XG5leHBvcnQgeyBzdGF0ZUhhc2gsIHJlcGxheUZyb21Mb2cgfSBmcm9tIFwiLi9yZXBsYXkuanNcIjtcblxuZXhwb3J0IHsgUmVjdXJzaW9uTGltaXRFeGNlZWRlZEVycm9yIH0gZnJvbSBcIi4vY3ljbGUuanNcIjtcblxuZXhwb3J0IHR5cGUgeyBTZXJpYWxpemVkUnVsZSB9IGZyb20gXCIuL3NlcmlhbGl6ZS5qc1wiO1xuZXhwb3J0IHsgc2VyaWFsaXplLCBkZXNlcmlhbGl6ZSwgUlVMRV9TQ0hFTUFfVjEgfSBmcm9tIFwiLi9zZXJpYWxpemUuanNcIjtcblxuZXhwb3J0IHR5cGUgeyBNYXRjaCB9IGZyb20gXCIuL3F1ZXJ5LmpzXCI7XG5leHBvcnQgeyBQcm9kdWN0aW9uTm9kZSwgcXVlcnksIHF1ZXJ5QWxsLCBOb01hdGNoRXJyb3IgfSBmcm9tIFwiLi9xdWVyeS5qc1wiO1xuXG5leHBvcnQgdHlwZSB7IERlcml2ZWRGYWN0LCBEZXJpdmVkSGFuZGxlciB9IGZyb20gXCIuL2Rlcml2ZWQuanNcIjtcbmV4cG9ydCB7IERlcml2ZWRGYWN0UHJvZHVjdGlvbiB9IGZyb20gXCIuL2Rlcml2ZWQuanNcIjtcblxuZXhwb3J0IHR5cGUgeyBBY3RpdmF0aW9uLCBPcmRlcmFibGVSdWxlIH0gZnJvbSBcIi4vY29uZmxpY3QuanNcIjtcbmV4cG9ydCB7IG9yZGVyQWN0aXZhdGlvbnMgfSBmcm9tIFwiLi9jb25mbGljdC5qc1wiO1xuXG5leHBvcnQgdHlwZSB7IEFnZ3JlZ2F0b3JLaW5kIH0gZnJvbSBcIi4vYWdncmVnYXRlLmpzXCI7XG5leHBvcnQgeyBBZ2dyZWdhdGlvbk5vZGUgfSBmcm9tIFwiLi9hZ2dyZWdhdGUuanNcIjtcblxuZXhwb3J0IHR5cGUgeyBTbmFwc2hvdCwgSW1tdXRhYmxlRmFjdHMsIE11dGFibGVGYWN0cywgRmFjdFJlY29yZCB9IGZyb20gXCIuL3NuYXBzaG90LmpzXCI7XG5leHBvcnQgeyBTbmFwc2hvdE1hbmFnZXIgfSBmcm9tIFwiLi9zbmFwc2hvdC5qc1wiO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvZGlzdC9pbmRleC5qcyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/88970f5e126aa527bc7cb4b9802a736e31a501b1 b/7xOfJqsDU787fe61oSCq1/web/88970f5e126aa527bc7cb4b9802a736e31a501b1 deleted file mode 100644 index 1320698..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/88970f5e126aa527bc7cb4b9802a736e31a501b1 +++ /dev/null @@ -1,97 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/presets/index.ts"); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/engine.ts", {"importedNames":["ChessEngine","MoveCancelledError"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["algebraicToSquare"]}); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/presets/registry.ts", {"importedNames":["PRESET_REGISTRY"]}); -(0,__vite_ssr_import_0__.describe)("onBeforeMove cancel", () => { - const blockerId = "test-onbeforemove-blocker"; - __vite_ssr_import_4__.PRESET_REGISTRY.register({ - id: blockerId, - name: "Test Blocker", - description: "Rejects every e2→e4.", - incompatibleWith: [], - requires: [], - onBeforeMove(ctx) { - if (ctx.from === (0,__vite_ssr_import_3__.algebraicToSquare)("e2") && ctx.to === (0,__vite_ssr_import_3__.algebraicToSquare)("e4")) { - return { cancel: true, reason: "blocked for testing" }; - }; - return void 0; - } - }); - (0,__vite_ssr_import_0__.it)("throws MoveCancelledError when a preset cancels the move", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: blockerId, scope: "both", turnsRemaining: null } - ]); - const move = engine.findMove( - (0,__vite_ssr_import_3__.algebraicToSquare)("e2"), - (0,__vite_ssr_import_3__.algebraicToSquare)("e4") - ); - (0,__vite_ssr_import_0__.expect)(() => engine.applyMove(move)).toThrow((0,__vite_ssr_import_2__.MoveCancelledError)); - const e2Still = engine.session.allFacts().find( - (f) => f.attr === "Position" && f.value === (0,__vite_ssr_import_3__.algebraicToSquare)("e2") - ); - (0,__vite_ssr_import_0__.expect)(e2Still).toBeDefined(); - }); - (0,__vite_ssr_import_0__.it)("allows moves the preset doesn't cancel", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: blockerId, scope: "both", turnsRemaining: null } - ]); - const move = engine.findMove( - (0,__vite_ssr_import_3__.algebraicToSquare)("d2"), - (0,__vite_ssr_import_3__.algebraicToSquare)("d4") - ); - (0,__vite_ssr_import_0__.expect)(() => engine.applyMove(move)).not.toThrow(); - }); - (0,__vite_ssr_import_0__.it)("scope-aware: a white-scoped preset doesn't veto black's moves", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: blockerId, scope: "white", turnsRemaining: null } - ]); - const whiteMove = engine.findMove( - (0,__vite_ssr_import_3__.algebraicToSquare)("e2"), - (0,__vite_ssr_import_3__.algebraicToSquare)("e4") - ); - (0,__vite_ssr_import_0__.expect)(() => engine.applyMove(whiteMove)).toThrow((0,__vite_ssr_import_2__.MoveCancelledError)); - }); -}); -(0,__vite_ssr_import_0__.describe)("onTurnStart fires after turn flip, scope-aware", () => { - const regenId = "test-onturnstart-regen"; - let firedFor = []; - __vite_ssr_import_4__.PRESET_REGISTRY.register({ - id: regenId, - name: "Test Regen", - description: "Appends 'turn:color' to firedFor on each turn start.", - incompatibleWith: [], - requires: [], - onTurnStart(ctx) { - firedFor.push(ctx.turn); - } - }); - (0,__vite_ssr_import_0__.it)("fires with nextColor after every successful move", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - firedFor = []; - engine.setActivePresets([ - { id: regenId, scope: "both", turnsRemaining: null } - ]); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e2"), (0,__vite_ssr_import_3__.algebraicToSquare)("e4"))); - (0,__vite_ssr_import_0__.expect)(firedFor).toEqual(["black"]); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e7"), (0,__vite_ssr_import_3__.algebraicToSquare)("e5"))); - (0,__vite_ssr_import_0__.expect)(firedFor).toEqual(["black", "white"]); - }); - (0,__vite_ssr_import_0__.it)("scope-aware: a white-scoped preset only fires when white's turn starts", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - firedFor = []; - engine.setActivePresets([ - { id: regenId, scope: "white", turnsRemaining: null } - ]); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e2"), (0,__vite_ssr_import_3__.algebraicToSquare)("e4"))); - (0,__vite_ssr_import_0__.expect)(firedFor).toEqual([]); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e7"), (0,__vite_ssr_import_3__.algebraicToSquare)("e5"))); - (0,__vite_ssr_import_0__.expect)(firedFor).toEqual(["white"]); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFFBQVEsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDO0FBQ2xDLFdBQU8sVUFBVSxPQUFPLFlBQVMseUNBQWtCLElBQUksTUFBRyx5Q0FBa0IsSUFBSSxDQUFDLENBQUU7QUFDbkYscUNBQU8sUUFBUSxFQUFFLFFBQVEsQ0FBQyxTQUFTLE9BQU8sQ0FBQztBQUFBLEVBQzdDLENBQUM7QUFFRCwrQkFBRywwRUFBMEUsTUFBTTtBQUNqRixVQUFNLFNBQVMsSUFBSSxrQ0FBWTtBQUMvQixlQUFXLENBQUM7QUFDWixXQUFPLGlCQUFpQjtBQUFBLE1BQ3RCLEVBQUUsSUFBSSxTQUFTLE9BQU8sU0FBUyxnQkFBZ0IsS0FBSztBQUFBLElBQ3RELENBQUM7QUFFRCxXQUFPLFVBQVUsT0FBTyxZQUFTLHlDQUFrQixJQUFJLE1BQUcseUNBQWtCLElBQUksQ0FBQyxDQUFFO0FBQ25GLHFDQUFPLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUUzQixXQUFPLFVBQVUsT0FBTyxZQUFTLHlDQUFrQixJQUFJLE1BQUcseUNBQWtCLElBQUksQ0FBQyxDQUFFO0FBQ25GLHFDQUFPLFFBQVEsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDO0FBQUEsRUFDcEMsQ0FBQztBQUNILENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInBoYXNlLWhvb2tzLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUZXN0cyBmb3IgdGhlIGBvbkJlZm9yZU1vdmVgICsgYG9uVHVyblN0YXJ0YCBwaGFzZSBob29rcy5cbiAqXG4gKiBUaGVzZSBob29rcyB1bmJsb2NrIHJlc291cmNlLXRyYWNraW5nIHByZXNldHMgKHN0YW1pbmEsIGFjdGlvblxuICogcG9pbnRzLCBjb29sZG93bnMpIHRoYXQgbmVlZCB0byBkZWNpZGUgd2hldGhlciBhIG1vdmUgaXMgbGVnYWxcbiAqIEFUIFBMQVkgVElNRSAobm90IGp1c3QgZ2VvbWV0cmljYWxseSkgYW5kIHRvIHJlZ2VuZXJhdGUgc3RhdGUgb25cbiAqIHR1cm4gYm91bmRhcmllcy5cbiAqL1xuaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBDaGVzc0VuZ2luZSwgTW92ZUNhbmNlbGxlZEVycm9yIH0gZnJvbSBcIi4uL2VuZ2luZS5qc1wiO1xuaW1wb3J0IHsgYWxnZWJyYWljVG9TcXVhcmUgfSBmcm9tIFwiLi4vY29vcmQuanNcIjtcbmltcG9ydCB7IFBSRVNFVF9SRUdJU1RSWSB9IGZyb20gXCIuL3JlZ2lzdHJ5LmpzXCI7XG5cbmRlc2NyaWJlKFwib25CZWZvcmVNb3ZlIGNhbmNlbFwiLCAoKSA9PiB7XG4gIGNvbnN0IGJsb2NrZXJJZCA9IFwidGVzdC1vbmJlZm9yZW1vdmUtYmxvY2tlclwiO1xuICBQUkVTRVRfUkVHSVNUUlkucmVnaXN0ZXIoe1xuICAgIGlkOiBibG9ja2VySWQsXG4gICAgbmFtZTogXCJUZXN0IEJsb2NrZXJcIixcbiAgICBkZXNjcmlwdGlvbjogXCJSZWplY3RzIGV2ZXJ5IGUy4oaSZTQuXCIsXG4gICAgaW5jb21wYXRpYmxlV2l0aDogW10sXG4gICAgcmVxdWlyZXM6IFtdLFxuICAgIG9uQmVmb3JlTW92ZShjdHgpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY3R4LmZyb20gPT09IGFsZ2VicmFpY1RvU3F1YXJlKFwiZTJcIikgJiZcbiAgICAgICAgY3R4LnRvID09PSBhbGdlYnJhaWNUb1NxdWFyZShcImU0XCIpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHsgY2FuY2VsOiB0cnVlLCByZWFzb246IFwiYmxvY2tlZCBmb3IgdGVzdGluZ1wiIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0sXG4gIH0pO1xuXG4gIGl0KFwidGhyb3dzIE1vdmVDYW5jZWxsZWRFcnJvciB3aGVuIGEgcHJlc2V0IGNhbmNlbHMgdGhlIG1vdmVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGVuZ2luZS5zZXRBY3RpdmVQcmVzZXRzKFtcbiAgICAgIHsgaWQ6IGJsb2NrZXJJZCwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuICAgIGNvbnN0IG1vdmUgPSBlbmdpbmUuZmluZE1vdmUoXG4gICAgICBhbGdlYnJhaWNUb1NxdWFyZShcImUyXCIpLFxuICAgICAgYWxnZWJyYWljVG9TcXVhcmUoXCJlNFwiKSxcbiAgICApITtcbiAgICBleHBlY3QoKCkgPT4gZW5naW5lLmFwcGx5TW92ZShtb3ZlKSkudG9UaHJvdyhNb3ZlQ2FuY2VsbGVkRXJyb3IpO1xuICAgIC8vIFN0YXRlIHVuY2hhbmdlZCDigJQgcGF3biBzdGlsbCBvbiBlMi5cbiAgICBjb25zdCBlMlN0aWxsID0gZW5naW5lLnNlc3Npb25cbiAgICAgIC5hbGxGYWN0cygpXG4gICAgICAuZmluZChcbiAgICAgICAgKGYpID0+IGYuYXR0ciA9PT0gXCJQb3NpdGlvblwiICYmIGYudmFsdWUgPT09IGFsZ2VicmFpY1RvU3F1YXJlKFwiZTJcIiksXG4gICAgICApO1xuICAgIGV4cGVjdChlMlN0aWxsKS50b0JlRGVmaW5lZCgpO1xuICB9KTtcblxuICBpdChcImFsbG93cyBtb3ZlcyB0aGUgcHJlc2V0IGRvZXNuJ3QgY2FuY2VsXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiBibG9ja2VySWQsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcbiAgICBjb25zdCBtb3ZlID0gZW5naW5lLmZpbmRNb3ZlKFxuICAgICAgYWxnZWJyYWljVG9TcXVhcmUoXCJkMlwiKSxcbiAgICAgIGFsZ2VicmFpY1RvU3F1YXJlKFwiZDRcIiksXG4gICAgKSE7XG4gICAgZXhwZWN0KCgpID0+IGVuZ2luZS5hcHBseU1vdmUobW92ZSkpLm5vdC50b1Rocm93KCk7XG4gIH0pO1xuXG4gIGl0KFwic2NvcGUtYXdhcmU6IGEgd2hpdGUtc2NvcGVkIHByZXNldCBkb2Vzbid0IHZldG8gYmxhY2sncyBtb3Zlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgZW5naW5lLnNldEFjdGl2ZVByZXNldHMoW1xuICAgICAgeyBpZDogYmxvY2tlcklkLCBzY29wZTogXCJ3aGl0ZVwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuICAgIC8vIFdoaXRlJ3MgZTLihpJlNCDigJQgc2FtZSBibG9ja2VkIHJ1bGUsIHdoaXRlIHNjb3BlIGFwcGxpZXMuXG4gICAgY29uc3Qgd2hpdGVNb3ZlID0gZW5naW5lLmZpbmRNb3ZlKFxuICAgICAgYWxnZWJyYWljVG9TcXVhcmUoXCJlMlwiKSxcbiAgICAgIGFsZ2VicmFpY1RvU3F1YXJlKFwiZTRcIiksXG4gICAgKSE7XG4gICAgZXhwZWN0KCgpID0+IGVuZ2luZS5hcHBseU1vdmUod2hpdGVNb3ZlKSkudG9UaHJvdyhNb3ZlQ2FuY2VsbGVkRXJyb3IpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIm9uVHVyblN0YXJ0IGZpcmVzIGFmdGVyIHR1cm4gZmxpcCwgc2NvcGUtYXdhcmVcIiwgKCkgPT4ge1xuICBjb25zdCByZWdlbklkID0gXCJ0ZXN0LW9udHVybnN0YXJ0LXJlZ2VuXCI7XG4gIGxldCBmaXJlZEZvcjogc3RyaW5nW10gPSBbXTtcblxuICBQUkVTRVRfUkVHSVNUUlkucmVnaXN0ZXIoe1xuICAgIGlkOiByZWdlbklkLFxuICAgIG5hbWU6IFwiVGVzdCBSZWdlblwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIkFwcGVuZHMgJ3R1cm46Y29sb3InIHRvIGZpcmVkRm9yIG9uIGVhY2ggdHVybiBzdGFydC5cIixcbiAgICBpbmNvbXBhdGlibGVXaXRoOiBbXSxcbiAgICByZXF1aXJlczogW10sXG4gICAgb25UdXJuU3RhcnQoY3R4KSB7XG4gICAgICBmaXJlZEZvci5wdXNoKGN0eC50dXJuKTtcbiAgICB9LFxuICB9KTtcblxuICBpdChcImZpcmVzIHdpdGggbmV4dENvbG9yIGFmdGVyIGV2ZXJ5IHN1Y2Nlc3NmdWwgbW92ZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgZmlyZWRGb3IgPSBbXTtcbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiByZWdlbklkLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgXSk7XG4gICAgZW5naW5lLmFwcGx5TW92ZShlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJlMlwiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJlNFwiKSkhKTtcbiAgICBleHBlY3QoZmlyZWRGb3IpLnRvRXF1YWwoW1wiYmxhY2tcIl0pO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZTdcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiZTVcIikpISk7XG4gICAgZXhwZWN0KGZpcmVkRm9yKS50b0VxdWFsKFtcImJsYWNrXCIsIFwid2hpdGVcIl0pO1xuICB9KTtcblxuICBpdChcInNjb3BlLWF3YXJlOiBhIHdoaXRlLXNjb3BlZCBwcmVzZXQgb25seSBmaXJlcyB3aGVuIHdoaXRlJ3MgdHVybiBzdGFydHNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGZpcmVkRm9yID0gW107XG4gICAgZW5naW5lLnNldEFjdGl2ZVByZXNldHMoW1xuICAgICAgeyBpZDogcmVnZW5JZCwgc2NvcGU6IFwid2hpdGVcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcbiAgICAvLyBBZnRlciB3aGl0ZSdzIG1vdmUg4oaSIGJsYWNrJ3MgdHVybiBzdGFydHMg4oaSIHNjb3BlPXdoaXRlIERPRVNOJ1QgZmlyZS5cbiAgICBlbmdpbmUuYXBwbHlNb3ZlKGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImUyXCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImU0XCIpKSEpO1xuICAgIGV4cGVjdChmaXJlZEZvcikudG9FcXVhbChbXSk7XG4gICAgLy8gQWZ0ZXIgYmxhY2sncyBtb3ZlIOKGkiB3aGl0ZSdzIHR1cm4gc3RhcnRzIOKGkiBzY29wZT13aGl0ZSBET0VTIGZpcmUuXG4gICAgZW5naW5lLmFwcGx5TW92ZShlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJlN1wiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJlNVwiKSkhKTtcbiAgICBleHBlY3QoZmlyZWRGb3IpLnRvRXF1YWwoW1wid2hpdGVcIl0pO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL2NoZXNzL3NyYy9wcmVzZXRzL3BoYXNlLWhvb2tzLnRlc3QudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/88d4090eb7940066aea6027e094b269f2ba4f15f b/7xOfJqsDU787fe61oSCq1/web/88d4090eb7940066aea6027e094b269f2ba4f15f deleted file mode 100644 index c02e0bb..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/88d4090eb7940066aea6027e094b269f2ba4f15f +++ /dev/null @@ -1,161 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/presets/index.ts", {"importedNames":["PRESET_REGISTRY"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/presets/active-set.ts", {"importedNames":["ActivePresetSet"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const mkId = (n) => n; -function makeEngine(pieces) { - const session = new __vite_ssr_import_3__.Session({ autoFire: false }); - for (const p of pieces) { - const eid = mkId(p.id); - session.insert(eid, "PieceType", p.type); - session.insert(eid, "Color", p.color); - session.insert(eid, "Position", p.sq); - }; - return { session }; -} -(0,__vite_ssr_import_0__.describe)("Preset registry — all 15 registered", () => { - const EXPECTED_IDS = [ - "pawns-move-backward", - "double-pawn-sprint", - "pawn-diagonal-no-capture", - "knights-leap-twice", - "bishops-ignore-color", - "rook-warp", - "wrap-board", - "queen-splits", - "king-heals", - "explosive-rook", - "capture-to-win", - "last-piece-standing", - "piece-hp", - "knight-immunity", - "poisoned-squares" - ]; - (0,__vite_ssr_import_0__.it)("has exactly 15 presets", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_1__.PRESET_REGISTRY.getAll().length).toBe(15); - }); - for (const id of EXPECTED_IDS) { - (0,__vite_ssr_import_0__.it)(`preset '${id}' is registered`, () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_1__.PRESET_REGISTRY.getAll().some((p) => p.id === id)).toBe(true); - }); - } -}); -(0,__vite_ssr_import_0__.describe)("Incompatibility declarations", () => { - (0,__vite_ssr_import_0__.it)("pawns-move-backward ↔ double-pawn-sprint are now compatible", () => { - const a = __vite_ssr_import_1__.PRESET_REGISTRY.getAll().find((p) => p.id === "pawns-move-backward"); - const b = __vite_ssr_import_1__.PRESET_REGISTRY.getAll().find((p) => p.id === "double-pawn-sprint"); - (0,__vite_ssr_import_0__.expect)(a.incompatibleWith).not.toContain("double-pawn-sprint"); - (0,__vite_ssr_import_0__.expect)(b.incompatibleWith).not.toContain("pawns-move-backward"); - }); - (0,__vite_ssr_import_0__.it)("rook-warp ↔ wrap-board are mutually incompatible", () => { - const a = __vite_ssr_import_1__.PRESET_REGISTRY.getAll().find((p) => p.id === "rook-warp"); - const b = __vite_ssr_import_1__.PRESET_REGISTRY.getAll().find((p) => p.id === "wrap-board"); - (0,__vite_ssr_import_0__.expect)(a.incompatibleWith).toContain("wrap-board"); - (0,__vite_ssr_import_0__.expect)(b.incompatibleWith).toContain("rook-warp"); - }); - (0,__vite_ssr_import_0__.it)("capture-to-win ↔ last-piece-standing are mutually incompatible", () => { - const a = __vite_ssr_import_1__.PRESET_REGISTRY.getAll().find((p) => p.id === "capture-to-win"); - const b = __vite_ssr_import_1__.PRESET_REGISTRY.getAll().find((p) => p.id === "last-piece-standing"); - (0,__vite_ssr_import_0__.expect)(a.incompatibleWith).toContain("last-piece-standing"); - (0,__vite_ssr_import_0__.expect)(b.incompatibleWith).toContain("capture-to-win"); - }); - (0,__vite_ssr_import_0__.it)("piece-hp ↔ explosive-rook now compose via the damage pipeline", () => { - const a = __vite_ssr_import_1__.PRESET_REGISTRY.getAll().find((p) => p.id === "piece-hp"); - const b = __vite_ssr_import_1__.PRESET_REGISTRY.getAll().find((p) => p.id === "explosive-rook"); - (0,__vite_ssr_import_0__.expect)(a.incompatibleWith).not.toContain("explosive-rook"); - (0,__vite_ssr_import_0__.expect)(b.incompatibleWith).not.toContain("piece-hp"); - }); -}); -(0,__vite_ssr_import_0__.describe)("Requires declarations", () => { - (0,__vite_ssr_import_0__.it)("king-heals requires piece-hp", () => { - const p = __vite_ssr_import_1__.PRESET_REGISTRY.getAll().find((p2) => p2.id === "king-heals"); - (0,__vite_ssr_import_0__.expect)(p.requires).toContain("piece-hp"); - }); - (0,__vite_ssr_import_0__.it)("poisoned-squares requires piece-hp", () => { - const p = __vite_ssr_import_1__.PRESET_REGISTRY.getAll().find((p2) => p2.id === "poisoned-squares"); - (0,__vite_ssr_import_0__.expect)(p.requires).toContain("piece-hp"); - }); -}); -(0,__vite_ssr_import_0__.describe)("Functional hook: pawns-move-backward", () => { - (0,__vite_ssr_import_0__.it)("adds backward move for pawn on rank ≥2", () => { - const preset = __vite_ssr_import_1__.PRESET_REGISTRY.getAll().find((p) => p.id === "pawns-move-backward"); - const engine = makeEngine([{ id: 1, type: "pawn", color: "white", sq: 20 }]); - const extras = preset.getExtraMoves(engine, mkId(1)); - (0,__vite_ssr_import_0__.expect)(extras.some((m) => m.to === 12)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("pawn at rank1 cannot go backward off board", () => { - const preset = __vite_ssr_import_1__.PRESET_REGISTRY.getAll().find((p) => p.id === "pawns-move-backward"); - const engine = makeEngine([{ id: 1, type: "pawn", color: "white", sq: 4 }]); - const extras = preset.getExtraMoves(engine, mkId(1)); - (0,__vite_ssr_import_0__.expect)(extras.some((m) => m.to < 0)).toBe(false); - }); -}); -(0,__vite_ssr_import_0__.describe)("Functional hook: knight-immunity", () => { - (0,__vite_ssr_import_0__.it)("bishop cannot capture knight (filterMoves removes it)", () => { - const preset = __vite_ssr_import_1__.PRESET_REGISTRY.getAll().find((p) => p.id === "knight-immunity"); - const engine = makeEngine([ - { id: 1, type: "bishop", color: "white", sq: 0 }, - // a1 - { id: 2, type: "knight", color: "black", sq: 9 } - // b2 - ]); - const captureMove = { pieceId: mkId(1), from: 0, to: 9, isCapture: true }; - const filtered = preset.filterMoves([captureMove], engine, mkId(1)); - (0,__vite_ssr_import_0__.expect)(filtered).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("bishop CAN capture non-knight pieces", () => { - const preset = __vite_ssr_import_1__.PRESET_REGISTRY.getAll().find((p) => p.id === "knight-immunity"); - const engine = makeEngine([ - { id: 1, type: "bishop", color: "white", sq: 0 }, - { id: 2, type: "rook", color: "black", sq: 9 } - // rook, not knight - ]); - const captureMove = { pieceId: mkId(1), from: 0, to: 9, isCapture: true }; - const filtered = preset.filterMoves([captureMove], engine, mkId(1)); - (0,__vite_ssr_import_0__.expect)(filtered).toHaveLength(1); - }); -}); -(0,__vite_ssr_import_0__.describe)("Functional hook: wrap-board", () => { - (0,__vite_ssr_import_0__.it)("rook on h-file gets wrap move to a-file", () => { - const preset = __vite_ssr_import_1__.PRESET_REGISTRY.getAll().find((p) => p.id === "wrap-board"); - const engine = makeEngine([{ id: 1, type: "rook", color: "white", sq: 7 }]); - const extras = preset.getExtraMoves(engine, mkId(1)); - (0,__vite_ssr_import_0__.expect)(extras.some((m) => m.to === 0)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("rook on a-file gets wrap move to h-file", () => { - const preset = __vite_ssr_import_1__.PRESET_REGISTRY.getAll().find((p) => p.id === "wrap-board"); - const engine = makeEngine([{ id: 1, type: "rook", color: "white", sq: 0 }]); - const extras = preset.getExtraMoves(engine, mkId(1)); - (0,__vite_ssr_import_0__.expect)(extras.some((m) => m.to === 7)).toBe(true); - }); -}); -(0,__vite_ssr_import_0__.describe)("ActivePresetSet incompatibility + requires", () => { - (0,__vite_ssr_import_0__.it)("activating incompatible pair (overlapping scope) throws", () => { - const set = new __vite_ssr_import_2__.ActivePresetSet(); - (0,__vite_ssr_import_0__.expect)( - () => set.replaceAll([ - { id: "rook-warp", scope: "both", turnsRemaining: null }, - { id: "wrap-board", scope: "both", turnsRemaining: null } - ]) - ).toThrow(); - }); - (0,__vite_ssr_import_0__.it)("activating without required dependency throws", () => { - const set = new __vite_ssr_import_2__.ActivePresetSet(); - (0,__vite_ssr_import_0__.expect)( - () => set.replaceAll([ - { id: "king-heals", scope: "both", turnsRemaining: null } - ]) - ).toThrow(/requires/); - }); - (0,__vite_ssr_import_0__.it)("activating with satisfied requirement succeeds", () => { - const set = new __vite_ssr_import_2__.ActivePresetSet(); - set.replaceAll([ - { id: "piece-hp", scope: "both", turnsRemaining: null }, - { id: "king-heals", scope: "both", turnsRemaining: null } - ]); - (0,__vite_ssr_import_0__.expect)(set.has("king-heals")).toBe(true); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QjtBQUNoQztBQUFBLE1BQU8sTUFDTCxJQUFJLFdBQVc7QUFBQSxRQUNiLEVBQUUsSUFBSSxjQUFjLE9BQU8sUUFBUSxnQkFBZ0IsS0FBSztBQUFBLE1BQzFELENBQUM7QUFBQSxJQUNILEVBQUUsUUFBUSxVQUFVO0FBQUEsRUFDdEIsQ0FBQztBQUVELCtCQUFHLGtEQUFrRCxNQUFNO0FBQ3pELFVBQU0sTUFBTSxJQUFJLHNDQUFnQjtBQUNoQyxRQUFJLFdBQVc7QUFBQSxNQUNiLEVBQUUsSUFBSSxZQUFZLE9BQU8sUUFBUSxnQkFBZ0IsS0FBSztBQUFBLE1BQ3RELEVBQUUsSUFBSSxjQUFjLE9BQU8sUUFBUSxnQkFBZ0IsS0FBSztBQUFBLElBQzFELENBQUM7QUFDRCxxQ0FBTyxJQUFJLElBQUksWUFBWSxDQUFDLEVBQUUsS0FBSyxJQUFJO0FBQUEsRUFDekMsQ0FBQztBQUNILENBQUMiLCJuYW1lcyI6WyJwIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInByZXNldHMudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnNvbGlkYXRlZCBwcmVzZXQgcmVnaXN0cnkgdGVzdHMgKFAzLjQtUDMuOCkuXG4gKiBWZXJpZmllczogYWxsIDE1IHByZXNldHMgcmVnaXN0ZXJlZCwgaW5jb21wYXRpYmlsaXRpZXMgY29ycmVjdCxcbiAqIGZ1bmN0aW9uYWwgaG9va3Mgd29yayBmb3IgcHJlc2V0cyB0aGF0IGhhdmUgdGhlbS5cbiAqL1xuaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgeyBQUkVTRVRfUkVHSVNUUlkgfSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgQWN0aXZlUHJlc2V0U2V0IH0gZnJvbSBcIi4vYWN0aXZlLXNldC5qc1wiO1xuaW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuaW1wb3J0IHR5cGUgeyBDaGVzc0VuZ2luZSB9IGZyb20gXCIuLi9lbmdpbmUuanNcIjtcblxuY29uc3QgbWtJZCA9IChuOiBudW1iZXIpID0+IG4gYXMgRW50aXR5SWQ7XG5cbmZ1bmN0aW9uIG1ha2VFbmdpbmUocGllY2VzOiBBcnJheTx7IGlkOiBudW1iZXI7IHR5cGU6IHN0cmluZzsgY29sb3I6IHN0cmluZzsgc3E6IG51bWJlciB9Pik6IENoZXNzRW5naW5lIHtcbiAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICBmb3IgKGNvbnN0IHAgb2YgcGllY2VzKSB7XG4gICAgY29uc3QgZWlkID0gbWtJZChwLmlkKTtcbiAgICBzZXNzaW9uLmluc2VydChlaWQsIFwiUGllY2VUeXBlXCIsIHAudHlwZSk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoZWlkLCBcIkNvbG9yXCIsIHAuY29sb3IpO1xuICAgIHNlc3Npb24uaW5zZXJ0KGVpZCwgXCJQb3NpdGlvblwiLCBwLnNxKTtcbiAgfVxuICByZXR1cm4geyBzZXNzaW9uIH0gYXMgdW5rbm93biBhcyBDaGVzc0VuZ2luZTtcbn1cblxuZGVzY3JpYmUoXCJQcmVzZXQgcmVnaXN0cnkg4oCUIGFsbCAxNSByZWdpc3RlcmVkXCIsICgpID0+IHtcbiAgY29uc3QgRVhQRUNURURfSURTID0gW1xuICAgIFwicGF3bnMtbW92ZS1iYWNrd2FyZFwiLFxuICAgIFwiZG91YmxlLXBhd24tc3ByaW50XCIsXG4gICAgXCJwYXduLWRpYWdvbmFsLW5vLWNhcHR1cmVcIixcbiAgICBcImtuaWdodHMtbGVhcC10d2ljZVwiLFxuICAgIFwiYmlzaG9wcy1pZ25vcmUtY29sb3JcIixcbiAgICBcInJvb2std2FycFwiLFxuICAgIFwid3JhcC1ib2FyZFwiLFxuICAgIFwicXVlZW4tc3BsaXRzXCIsXG4gICAgXCJraW5nLWhlYWxzXCIsXG4gICAgXCJleHBsb3NpdmUtcm9va1wiLFxuICAgIFwiY2FwdHVyZS10by13aW5cIixcbiAgICBcImxhc3QtcGllY2Utc3RhbmRpbmdcIixcbiAgICBcInBpZWNlLWhwXCIsXG4gICAgXCJrbmlnaHQtaW1tdW5pdHlcIixcbiAgICBcInBvaXNvbmVkLXNxdWFyZXNcIixcbiAgXTtcblxuICBpdChcImhhcyBleGFjdGx5IDE1IHByZXNldHNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChQUkVTRVRfUkVHSVNUUlkuZ2V0QWxsKCkubGVuZ3RoKS50b0JlKDE1KTtcbiAgfSk7XG5cbiAgZm9yIChjb25zdCBpZCBvZiBFWFBFQ1RFRF9JRFMpIHtcbiAgICBpdChgcHJlc2V0ICcke2lkfScgaXMgcmVnaXN0ZXJlZGAsICgpID0+IHtcbiAgICAgIGV4cGVjdChQUkVTRVRfUkVHSVNUUlkuZ2V0QWxsKCkuc29tZShwID0+IHAuaWQgPT09IGlkKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbmRlc2NyaWJlKFwiSW5jb21wYXRpYmlsaXR5IGRlY2xhcmF0aW9uc1wiLCAoKSA9PiB7XG4gIGl0KFwicGF3bnMtbW92ZS1iYWNrd2FyZCDihpQgZG91YmxlLXBhd24tc3ByaW50IGFyZSBub3cgY29tcGF0aWJsZVwiLCAoKSA9PiB7XG4gICAgLy8gSGlzdG9yaWNhbCBub3RlOiB0aGVzZSB3ZXJlIG9yaWdpbmFsbHkgaW5jb21wYXRpYmxlIG9uIGRlc2lnblxuICAgIC8vIGdyb3VuZHMgKGF1dGhvciBmZWx0IG9zY2lsbGF0aW5nIHBhd25zIHdlcmUgdWdseSkuIE1lY2hhbmljYWxseVxuICAgIC8vIHRoZXkncmUgZmluZSDigJQgdGhlIG1vdmUgc2V0cyBhcmUgZGlzam9pbnQgKGJhY2t3YXJkLTEgdnNcbiAgICAvLyBmb3J3YXJkLTIpIGFuZCBib3RoIGFyZSBwdXJlIGdldEV4dHJhTW92ZXMgYWRkaXRpb25zIG92ZXIgdGhlXG4gICAgLy8gYmFzZSBwYXduIHJ1bGUsIHNvIG5vIG1vdmUgY29udHJhZGljdHMgYW5vdGhlci5cbiAgICBjb25zdCBhID0gUFJFU0VUX1JFR0lTVFJZLmdldEFsbCgpLmZpbmQocCA9PiBwLmlkID09PSBcInBhd25zLW1vdmUtYmFja3dhcmRcIikhO1xuICAgIGNvbnN0IGIgPSBQUkVTRVRfUkVHSVNUUlkuZ2V0QWxsKCkuZmluZChwID0+IHAuaWQgPT09IFwiZG91YmxlLXBhd24tc3ByaW50XCIpITtcbiAgICBleHBlY3QoYS5pbmNvbXBhdGlibGVXaXRoKS5ub3QudG9Db250YWluKFwiZG91YmxlLXBhd24tc3ByaW50XCIpO1xuICAgIGV4cGVjdChiLmluY29tcGF0aWJsZVdpdGgpLm5vdC50b0NvbnRhaW4oXCJwYXducy1tb3ZlLWJhY2t3YXJkXCIpO1xuICB9KTtcblxuICBpdChcInJvb2std2FycCDihpQgd3JhcC1ib2FyZCBhcmUgbXV0dWFsbHkgaW5jb21wYXRpYmxlXCIsICgpID0+IHtcbiAgICBjb25zdCBhID0gUFJFU0VUX1JFR0lTVFJZLmdldEFsbCgpLmZpbmQocCA9PiBwLmlkID09PSBcInJvb2std2FycFwiKSE7XG4gICAgY29uc3QgYiA9IFBSRVNFVF9SRUdJU1RSWS5nZXRBbGwoKS5maW5kKHAgPT4gcC5pZCA9PT0gXCJ3cmFwLWJvYXJkXCIpITtcbiAgICBleHBlY3QoYS5pbmNvbXBhdGlibGVXaXRoKS50b0NvbnRhaW4oXCJ3cmFwLWJvYXJkXCIpO1xuICAgIGV4cGVjdChiLmluY29tcGF0aWJsZVdpdGgpLnRvQ29udGFpbihcInJvb2std2FycFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJjYXB0dXJlLXRvLXdpbiDihpQgbGFzdC1waWVjZS1zdGFuZGluZyBhcmUgbXV0dWFsbHkgaW5jb21wYXRpYmxlXCIsICgpID0+IHtcbiAgICBjb25zdCBhID0gUFJFU0VUX1JFR0lTVFJZLmdldEFsbCgpLmZpbmQocCA9PiBwLmlkID09PSBcImNhcHR1cmUtdG8td2luXCIpITtcbiAgICBjb25zdCBiID0gUFJFU0VUX1JFR0lTVFJZLmdldEFsbCgpLmZpbmQocCA9PiBwLmlkID09PSBcImxhc3QtcGllY2Utc3RhbmRpbmdcIikhO1xuICAgIGV4cGVjdChhLmluY29tcGF0aWJsZVdpdGgpLnRvQ29udGFpbihcImxhc3QtcGllY2Utc3RhbmRpbmdcIik7XG4gICAgZXhwZWN0KGIuaW5jb21wYXRpYmxlV2l0aCkudG9Db250YWluKFwiY2FwdHVyZS10by13aW5cIik7XG4gIH0pO1xuXG4gIGl0KFwicGllY2UtaHAg4oaUIGV4cGxvc2l2ZS1yb29rIG5vdyBjb21wb3NlIHZpYSB0aGUgZGFtYWdlIHBpcGVsaW5lXCIsICgpID0+IHtcbiAgICAvLyBIaXN0b3JpY2FsOiB0aGVzZSB3ZXJlIGhhcmQtaW5jb21wYXRpYmxlIGJlY2F1c2UgZWFjaCBwcmVzZXRcbiAgICAvLyByYWNlZCB0byBvd24gY2FwdHVyZSByZXNvbHV0aW9uLiBXaXRoIHRoZSBkYW1hZ2UgcGlwZWxpbmVcbiAgICAvLyAocmVnaXN0cnkuRGFtYWdlSG9va1Jlc3VsdCAvIGVuZ2luZS5kZWFsRGFtYWdlKSwgZXhwbG9zaXZlLXJvb2tcbiAgICAvLyBjYWxscyBkZWFsRGFtYWdlIGZvciBlYWNoIGJsYXN0IHZpY3RpbSBhbmQgcGllY2UtaHAgaXMgdGhlIHNvbGVcbiAgICAvLyBkYW1hZ2UtdG8tZGVhdGggYXJiaXRlciwgc28gdGhleSBjb21wb3NlIG5hdHVyYWxseTogYmxhc3RzIGRlYWxcbiAgICAvLyAxIEhQIHRvIGV2ZXJ5IHBpZWNlIGluIHJhbmdlLlxuICAgIGNvbnN0IGEgPSBQUkVTRVRfUkVHSVNUUlkuZ2V0QWxsKCkuZmluZChwID0+IHAuaWQgPT09IFwicGllY2UtaHBcIikhO1xuICAgIGNvbnN0IGIgPSBQUkVTRVRfUkVHSVNUUlkuZ2V0QWxsKCkuZmluZChwID0+IHAuaWQgPT09IFwiZXhwbG9zaXZlLXJvb2tcIikhO1xuICAgIGV4cGVjdChhLmluY29tcGF0aWJsZVdpdGgpLm5vdC50b0NvbnRhaW4oXCJleHBsb3NpdmUtcm9va1wiKTtcbiAgICBleHBlY3QoYi5pbmNvbXBhdGlibGVXaXRoKS5ub3QudG9Db250YWluKFwicGllY2UtaHBcIik7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiUmVxdWlyZXMgZGVjbGFyYXRpb25zXCIsICgpID0+IHtcbiAgaXQoXCJraW5nLWhlYWxzIHJlcXVpcmVzIHBpZWNlLWhwXCIsICgpID0+IHtcbiAgICBjb25zdCBwID0gUFJFU0VUX1JFR0lTVFJZLmdldEFsbCgpLmZpbmQocCA9PiBwLmlkID09PSBcImtpbmctaGVhbHNcIikhO1xuICAgIGV4cGVjdChwLnJlcXVpcmVzKS50b0NvbnRhaW4oXCJwaWVjZS1ocFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJwb2lzb25lZC1zcXVhcmVzIHJlcXVpcmVzIHBpZWNlLWhwXCIsICgpID0+IHtcbiAgICBjb25zdCBwID0gUFJFU0VUX1JFR0lTVFJZLmdldEFsbCgpLmZpbmQocCA9PiBwLmlkID09PSBcInBvaXNvbmVkLXNxdWFyZXNcIikhO1xuICAgIGV4cGVjdChwLnJlcXVpcmVzKS50b0NvbnRhaW4oXCJwaWVjZS1ocFwiKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJGdW5jdGlvbmFsIGhvb2s6IHBhd25zLW1vdmUtYmFja3dhcmRcIiwgKCkgPT4ge1xuICBpdChcImFkZHMgYmFja3dhcmQgbW92ZSBmb3IgcGF3biBvbiByYW5rIOKJpTJcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHByZXNldCA9IFBSRVNFVF9SRUdJU1RSWS5nZXRBbGwoKS5maW5kKHAgPT4gcC5pZCA9PT0gXCJwYXducy1tb3ZlLWJhY2t3YXJkXCIpITtcbiAgICBjb25zdCBlbmdpbmUgPSBtYWtlRW5naW5lKFt7IGlkOiAxLCB0eXBlOiBcInBhd25cIiwgY29sb3I6IFwid2hpdGVcIiwgc3E6IDIwIH1dKTsgLy8gZTNcbiAgICBjb25zdCBleHRyYXMgPSBwcmVzZXQuZ2V0RXh0cmFNb3ZlcyEoZW5naW5lLCBta0lkKDEpKTtcbiAgICBleHBlY3QoZXh0cmFzLnNvbWUobSA9PiBtLnRvID09PSAxMikpLnRvQmUodHJ1ZSk7IC8vIGUz4oaSZTIgKGJhY2t3YXJkKVxuICB9KTtcblxuICBpdChcInBhd24gYXQgcmFuazEgY2Fubm90IGdvIGJhY2t3YXJkIG9mZiBib2FyZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgcHJlc2V0ID0gUFJFU0VUX1JFR0lTVFJZLmdldEFsbCgpLmZpbmQocCA9PiBwLmlkID09PSBcInBhd25zLW1vdmUtYmFja3dhcmRcIikhO1xuICAgIGNvbnN0IGVuZ2luZSA9IG1ha2VFbmdpbmUoW3sgaWQ6IDEsIHR5cGU6IFwicGF3blwiLCBjb2xvcjogXCJ3aGl0ZVwiLCBzcTogNCB9XSk7IC8vIGUxXG4gICAgY29uc3QgZXh0cmFzID0gcHJlc2V0LmdldEV4dHJhTW92ZXMhKGVuZ2luZSwgbWtJZCgxKSk7XG4gICAgZXhwZWN0KGV4dHJhcy5zb21lKG0gPT4gbS50byA8IDApKS50b0JlKGZhbHNlKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJGdW5jdGlvbmFsIGhvb2s6IGtuaWdodC1pbW11bml0eVwiLCAoKSA9PiB7XG4gIGl0KFwiYmlzaG9wIGNhbm5vdCBjYXB0dXJlIGtuaWdodCAoZmlsdGVyTW92ZXMgcmVtb3ZlcyBpdClcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHByZXNldCA9IFBSRVNFVF9SRUdJU1RSWS5nZXRBbGwoKS5maW5kKHAgPT4gcC5pZCA9PT0gXCJrbmlnaHQtaW1tdW5pdHlcIikhO1xuICAgIGNvbnN0IGVuZ2luZSA9IG1ha2VFbmdpbmUoW1xuICAgICAgeyBpZDogMSwgdHlwZTogXCJiaXNob3BcIiwgY29sb3I6IFwid2hpdGVcIiwgc3E6IDAgfSwgLy8gYTFcbiAgICAgIHsgaWQ6IDIsIHR5cGU6IFwia25pZ2h0XCIsIGNvbG9yOiBcImJsYWNrXCIsIHNxOiA5IH0sIC8vIGIyXG4gICAgXSk7XG4gICAgY29uc3QgY2FwdHVyZU1vdmUgPSB7IHBpZWNlSWQ6IG1rSWQoMSksIGZyb206IDAsIHRvOiA5LCBpc0NhcHR1cmU6IHRydWUgfTtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IHByZXNldC5maWx0ZXJNb3ZlcyEoW2NhcHR1cmVNb3ZlXSwgZW5naW5lLCBta0lkKDEpKTtcbiAgICBleHBlY3QoZmlsdGVyZWQpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG5cbiAgaXQoXCJiaXNob3AgQ0FOIGNhcHR1cmUgbm9uLWtuaWdodCBwaWVjZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHByZXNldCA9IFBSRVNFVF9SRUdJU1RSWS5nZXRBbGwoKS5maW5kKHAgPT4gcC5pZCA9PT0gXCJrbmlnaHQtaW1tdW5pdHlcIikhO1xuICAgIGNvbnN0IGVuZ2luZSA9IG1ha2VFbmdpbmUoW1xuICAgICAgeyBpZDogMSwgdHlwZTogXCJiaXNob3BcIiwgY29sb3I6IFwid2hpdGVcIiwgc3E6IDAgfSxcbiAgICAgIHsgaWQ6IDIsIHR5cGU6IFwicm9va1wiLCBjb2xvcjogXCJibGFja1wiLCBzcTogOSB9LCAvLyByb29rLCBub3Qga25pZ2h0XG4gICAgXSk7XG4gICAgY29uc3QgY2FwdHVyZU1vdmUgPSB7IHBpZWNlSWQ6IG1rSWQoMSksIGZyb206IDAsIHRvOiA5LCBpc0NhcHR1cmU6IHRydWUgfTtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IHByZXNldC5maWx0ZXJNb3ZlcyEoW2NhcHR1cmVNb3ZlXSwgZW5naW5lLCBta0lkKDEpKTtcbiAgICBleHBlY3QoZmlsdGVyZWQpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJGdW5jdGlvbmFsIGhvb2s6IHdyYXAtYm9hcmRcIiwgKCkgPT4ge1xuICBpdChcInJvb2sgb24gaC1maWxlIGdldHMgd3JhcCBtb3ZlIHRvIGEtZmlsZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcHJlc2V0ID0gUFJFU0VUX1JFR0lTVFJZLmdldEFsbCgpLmZpbmQocCA9PiBwLmlkID09PSBcIndyYXAtYm9hcmRcIikhO1xuICAgIGNvbnN0IGVuZ2luZSA9IG1ha2VFbmdpbmUoW3sgaWQ6IDEsIHR5cGU6IFwicm9va1wiLCBjb2xvcjogXCJ3aGl0ZVwiLCBzcTogNyB9XSk7IC8vIGgxXG4gICAgY29uc3QgZXh0cmFzID0gcHJlc2V0LmdldEV4dHJhTW92ZXMhKGVuZ2luZSwgbWtJZCgxKSk7XG4gICAgZXhwZWN0KGV4dHJhcy5zb21lKG0gPT4gbS50byA9PT0gMCkpLnRvQmUodHJ1ZSk7IC8vIGExXG4gIH0pO1xuXG4gIGl0KFwicm9vayBvbiBhLWZpbGUgZ2V0cyB3cmFwIG1vdmUgdG8gaC1maWxlXCIsICgpID0+IHtcbiAgICBjb25zdCBwcmVzZXQgPSBQUkVTRVRfUkVHSVNUUlkuZ2V0QWxsKCkuZmluZChwID0+IHAuaWQgPT09IFwid3JhcC1ib2FyZFwiKSE7XG4gICAgY29uc3QgZW5naW5lID0gbWFrZUVuZ2luZShbeyBpZDogMSwgdHlwZTogXCJyb29rXCIsIGNvbG9yOiBcIndoaXRlXCIsIHNxOiAwIH1dKTsgLy8gYTFcbiAgICBjb25zdCBleHRyYXMgPSBwcmVzZXQuZ2V0RXh0cmFNb3ZlcyEoZW5naW5lLCBta0lkKDEpKTtcbiAgICBleHBlY3QoZXh0cmFzLnNvbWUobSA9PiBtLnRvID09PSA3KSkudG9CZSh0cnVlKTsgLy8gaDFcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJBY3RpdmVQcmVzZXRTZXQgaW5jb21wYXRpYmlsaXR5ICsgcmVxdWlyZXNcIiwgKCkgPT4ge1xuICBpdChcImFjdGl2YXRpbmcgaW5jb21wYXRpYmxlIHBhaXIgKG92ZXJsYXBwaW5nIHNjb3BlKSB0aHJvd3NcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNldCA9IG5ldyBBY3RpdmVQcmVzZXRTZXQoKTtcbiAgICBleHBlY3QoKCkgPT5cbiAgICAgIHNldC5yZXBsYWNlQWxsKFtcbiAgICAgICAgeyBpZDogXCJyb29rLXdhcnBcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgICAgICB7IGlkOiBcIndyYXAtYm9hcmRcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgICAgXSksXG4gICAgKS50b1Rocm93KCk7XG4gIH0pO1xuXG4gIGl0KFwiYWN0aXZhdGluZyB3aXRob3V0IHJlcXVpcmVkIGRlcGVuZGVuY3kgdGhyb3dzXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXQgPSBuZXcgQWN0aXZlUHJlc2V0U2V0KCk7XG4gICAgZXhwZWN0KCgpID0+XG4gICAgICBzZXQucmVwbGFjZUFsbChbXG4gICAgICAgIHsgaWQ6IFwia2luZy1oZWFsc1wiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgICBdKSxcbiAgICApLnRvVGhyb3coL3JlcXVpcmVzLyk7XG4gIH0pO1xuXG4gIGl0KFwiYWN0aXZhdGluZyB3aXRoIHNhdGlzZmllZCByZXF1aXJlbWVudCBzdWNjZWVkc1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2V0ID0gbmV3IEFjdGl2ZVByZXNldFNldCgpO1xuICAgIHNldC5yZXBsYWNlQWxsKFtcbiAgICAgIHsgaWQ6IFwicGllY2UtaHBcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgICAgeyBpZDogXCJraW5nLWhlYWxzXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcbiAgICBleHBlY3Qoc2V0LmhhcyhcImtpbmctaGVhbHNcIikpLnRvQmUodHJ1ZSk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvY2hlc3Mvc3JjL3ByZXNldHMvcHJlc2V0cy50ZXN0LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/88ea9f1e8bdf7c3c003e44d531ebfad4e503a16e b/7xOfJqsDU787fe61oSCq1/web/88ea9f1e8bdf7c3c003e44d531ebfad4e503a16e deleted file mode 100644 index 6b4e2db..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/88ea9f1e8bdf7c3c003e44d531ebfad4e503a16e +++ /dev/null @@ -1,31 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["rankOf"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/rules/board-queries.ts", {"importedNames":["getPiecePosition","getPieceColor","isPieceAt"]}); - - - - -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/presets/registry.ts", {"importedNames":["PRESET_REGISTRY"]}); -function getPawnBackwardMove(engine, pieceId) { - const pieceType = engine.session.get(pieceId, "PieceType"); - if (pieceType !== "pawn") return []; - const from = (0,__vite_ssr_import_1__.getPiecePosition)(engine.session, pieceId); - const color = (0,__vite_ssr_import_1__.getPieceColor)(engine.session, pieceId); - if (from === null || color === null) return []; - const rank = (0,__vite_ssr_import_0__.rankOf)(from); - const targetRank = color === "white" ? rank - 1 : rank + 1; - if (targetRank < 0 || targetRank > 7) return []; - const to = from + (color === "white" ? -8 : 8); - if ((0,__vite_ssr_import_1__.isPieceAt)(engine.session, to)) return []; - return [{ pieceId, from, to, isCapture: false }]; -} -__vite_ssr_import_2__.PRESET_REGISTRY.register({ - id: "pawns-move-backward", - name: "Backward-Marching Pawns", - description: "Pawns may also move 1 square straight backward to an empty square (no capture).", - incompatibleWith: [], - requires: [], - getExtraMoves: getPawnBackwardMove -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBY0E7QUFDQTs7Ozs7QUFLQTtBQUVBLFNBQVMsb0JBQW9CLFFBQXFCLFNBQWdDO0FBQ2hGLFFBQU0sWUFBWSxPQUFPLFFBQVEsSUFBSSxTQUFTLFdBQVc7QUFDekQsTUFBSSxjQUFjLE9BQVEsUUFBTyxDQUFDO0FBRWxDLFFBQU0sVUFBTyx3Q0FBaUIsT0FBTyxTQUFTLE9BQU87QUFDckQsUUFBTSxXQUFRLHFDQUFjLE9BQU8sU0FBUyxPQUFPO0FBQ25ELE1BQUksU0FBUyxRQUFRLFVBQVUsS0FBTSxRQUFPLENBQUM7QUFHN0MsUUFBTSxVQUFPLDhCQUFPLElBQUk7QUFDeEIsUUFBTSxhQUFjLFVBQXlCLFVBQVUsT0FBTyxJQUFJLE9BQU87QUFDekUsTUFBSSxhQUFhLEtBQUssYUFBYSxFQUFHLFFBQU8sQ0FBQztBQUU5QyxRQUFNLEtBQU0sUUFBUyxVQUF5QixVQUFVLEtBQUs7QUFDN0QsU0FBSSxpQ0FBVSxPQUFPLFNBQVMsRUFBRSxFQUFHLFFBQU8sQ0FBQztBQUUzQyxTQUFPLENBQUMsRUFBRSxTQUFTLE1BQU0sSUFBSSxXQUFXLE1BQU0sQ0FBQztBQUNqRDtBQUVBLHNDQUFnQixTQUFTO0FBQUEsRUFDdkIsSUFBSTtBQUFBLEVBQ0osTUFBTTtBQUFBLEVBQ04sYUFDRTtBQUFBLEVBQ0Ysa0JBQWtCLENBQUM7QUFBQSxFQUNuQixVQUFVLENBQUM7QUFBQSxFQUNYLGVBQWU7QUFDakIsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsicGF3bnMtbW92ZS1iYWNrd2FyZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByZXNldDogQmFja3dhcmQtTWFyY2hpbmcgUGF3bnMgKFJVTEVTLm1kIHJ1bGUgMSkuXG4gKlxuICogUGF3bnMgbWF5IGFkZGl0aW9uYWxseSBtb3ZlIGV4YWN0bHkgb25lIHNxdWFyZSBzdHJhaWdodCBiYWNrd2FyZCB0byBhblxuICogZW1wdHkgc3F1YXJlLiBCYWNrd2FyZCBtb3ZlcyBtYXkgTk9UIGNhcHR1cmUgYW5kIGRvIE5PVCBlbmFibGUgZW4gcGFzc2FudC5cbiAqXG4gKiBNb2RlOiBhZGRpdGl2ZS4gQ29tYmluZXMgY2xlYW5seSB3aXRoIGBkb3VibGUtcGF3bi1zcHJpbnRgIOKAlCBvbmUgYWRkc1xuICogYSBiYWNrd2FyZC0xIG1vdmUsIHRoZSBvdGhlciBhZGRzIGZvcndhcmQtMiBmcm9tIGFueSByYW5rOyB0aGUgbW92ZVxuICogc2V0cyBhcmUgZGlzam9pbnQgYW5kIHRoZSBiYXNlIHBhd24gcnVsZSBzdGlsbCBydW5zIHVuY2hhbmdlZC5cbiAqL1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuaW1wb3J0IHR5cGUgeyBDaGVzc0VuZ2luZSB9IGZyb20gXCIuLi9lbmdpbmUuanNcIjtcbmltcG9ydCB0eXBlIHsgTGVnYWxNb3ZlIH0gZnJvbSBcIi4uL3J1bGVzL3R5cGVzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBpZWNlQ29sb3IsIFNxdWFyZSB9IGZyb20gXCIuLi9zY2hlbWEuanNcIjtcbmltcG9ydCB7IHJhbmtPZiB9IGZyb20gXCIuLi9jb29yZC5qc1wiO1xuaW1wb3J0IHtcbiAgZ2V0UGllY2VQb3NpdGlvbixcbiAgZ2V0UGllY2VDb2xvcixcbiAgaXNQaWVjZUF0LFxufSBmcm9tIFwiLi4vcnVsZXMvYm9hcmQtcXVlcmllcy5qc1wiO1xuaW1wb3J0IHsgUFJFU0VUX1JFR0lTVFJZIH0gZnJvbSBcIi4vcmVnaXN0cnkuanNcIjtcblxuZnVuY3Rpb24gZ2V0UGF3bkJhY2t3YXJkTW92ZShlbmdpbmU6IENoZXNzRW5naW5lLCBwaWVjZUlkOiBFbnRpdHlJZCk6IExlZ2FsTW92ZVtdIHtcbiAgY29uc3QgcGllY2VUeXBlID0gZW5naW5lLnNlc3Npb24uZ2V0KHBpZWNlSWQsIFwiUGllY2VUeXBlXCIpO1xuICBpZiAocGllY2VUeXBlICE9PSBcInBhd25cIikgcmV0dXJuIFtdO1xuXG4gIGNvbnN0IGZyb20gPSBnZXRQaWVjZVBvc2l0aW9uKGVuZ2luZS5zZXNzaW9uLCBwaWVjZUlkKTtcbiAgY29uc3QgY29sb3IgPSBnZXRQaWVjZUNvbG9yKGVuZ2luZS5zZXNzaW9uLCBwaWVjZUlkKTtcbiAgaWYgKGZyb20gPT09IG51bGwgfHwgY29sb3IgPT09IG51bGwpIHJldHVybiBbXTtcblxuICAvLyBCYWNrd2FyZCA9IG9wcG9zaXRlIG9mIG5vcm1hbCBhZHZhbmNlIGRpcmVjdGlvbi5cbiAgY29uc3QgcmFuayA9IHJhbmtPZihmcm9tKTtcbiAgY29uc3QgdGFyZ2V0UmFuayA9IChjb2xvciBhcyBQaWVjZUNvbG9yKSA9PT0gXCJ3aGl0ZVwiID8gcmFuayAtIDEgOiByYW5rICsgMTtcbiAgaWYgKHRhcmdldFJhbmsgPCAwIHx8IHRhcmdldFJhbmsgPiA3KSByZXR1cm4gW107XG5cbiAgY29uc3QgdG8gPSAoZnJvbSArICgoY29sb3IgYXMgUGllY2VDb2xvcikgPT09IFwid2hpdGVcIiA/IC04IDogOCkpIGFzIFNxdWFyZTtcbiAgaWYgKGlzUGllY2VBdChlbmdpbmUuc2Vzc2lvbiwgdG8pKSByZXR1cm4gW107XG5cbiAgcmV0dXJuIFt7IHBpZWNlSWQsIGZyb20sIHRvLCBpc0NhcHR1cmU6IGZhbHNlIH1dO1xufVxuXG5QUkVTRVRfUkVHSVNUUlkucmVnaXN0ZXIoe1xuICBpZDogXCJwYXducy1tb3ZlLWJhY2t3YXJkXCIsXG4gIG5hbWU6IFwiQmFja3dhcmQtTWFyY2hpbmcgUGF3bnNcIixcbiAgZGVzY3JpcHRpb246XG4gICAgXCJQYXducyBtYXkgYWxzbyBtb3ZlIDEgc3F1YXJlIHN0cmFpZ2h0IGJhY2t3YXJkIHRvIGFuIGVtcHR5IHNxdWFyZSAobm8gY2FwdHVyZSkuXCIsXG4gIGluY29tcGF0aWJsZVdpdGg6IFtdLFxuICByZXF1aXJlczogW10sXG4gIGdldEV4dHJhTW92ZXM6IGdldFBhd25CYWNrd2FyZE1vdmUsXG59KTtcbiJdLCJmaWxlIjoiL3NyYy9wcmVzZXRzL3Bhd25zLW1vdmUtYmFja3dhcmQudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/894a7239df265fb9e666d77b1b7bc26eb50ee57c b/7xOfJqsDU787fe61oSCq1/web/894a7239df265fb9e666d77b1b7bc26eb50ee57c deleted file mode 100644 index 9928c21..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/894a7239df265fb9e666d77b1b7bc26eb50ee57c +++ /dev/null @@ -1,177 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/rules/enpassant.ts", {"importedNames":["getEnPassantMoves","setEnPassantTarget","clearEnPassantTarget","applyEnPassantCapture"]}); - - - - - -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/schema.ts", {"importedNames":["GAME_ENTITY"]}); -function mkSession() { - return new __vite_ssr_import_1__.Session({ autoFire: false }); -} -function insertPiece(session, id, type, color, square) { - const eid = id; - session.insert(eid, "PieceType", type); - session.insert(eid, "Color", color); - session.insert(eid, "Position", square); - return eid; -} -(0,__vite_ssr_import_0__.describe)("setEnPassantTarget", () => { - (0,__vite_ssr_import_0__.it)("sets target to midpoint for white double advance e2→e4", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget", null); - (0,__vite_ssr_import_2__.setEnPassantTarget)(session, 12, 28); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget")).toBe(20); - }); - (0,__vite_ssr_import_0__.it)("sets target to midpoint for black double advance e7→e5", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget", null); - (0,__vite_ssr_import_2__.setEnPassantTarget)(session, 52, 36); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget")).toBe(44); - }); - (0,__vite_ssr_import_0__.it)("overwrites an existing target", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget", 44); - (0,__vite_ssr_import_2__.setEnPassantTarget)(session, 12, 28); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget")).toBe(20); - }); -}); -(0,__vite_ssr_import_0__.describe)("clearEnPassantTarget", () => { - (0,__vite_ssr_import_0__.it)("sets target to null", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget", 44); - (0,__vite_ssr_import_2__.clearEnPassantTarget)(session); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget")).toBeNull(); - }); - (0,__vite_ssr_import_0__.it)("is idempotent when target already null", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget", null); - (0,__vite_ssr_import_2__.clearEnPassantTarget)(session); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget")).toBeNull(); - }); -}); -(0,__vite_ssr_import_0__.describe)("getEnPassantMoves — capture within the window", () => { - (0,__vite_ssr_import_0__.it)("white pawn on f5 captures en passant on e6 after black e7→e5", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget", 44); - const whitePawn = insertPiece(session, 1, "pawn", "white", 37); - insertPiece(session, 2, "pawn", "black", 36); - const moves = (0,__vite_ssr_import_2__.getEnPassantMoves)(session, whitePawn); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(moves[0]?.pieceId).toBe(whitePawn); - (0,__vite_ssr_import_0__.expect)(moves[0]?.from).toBe(37); - (0,__vite_ssr_import_0__.expect)(moves[0]?.to).toBe(44); - (0,__vite_ssr_import_0__.expect)(moves[0]?.isCapture).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("white pawn on d5 captures en passant on e6 after black e7→e5", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget", 44); - const whitePawn = insertPiece(session, 1, "pawn", "white", 35); - insertPiece(session, 2, "pawn", "black", 36); - const moves = (0,__vite_ssr_import_2__.getEnPassantMoves)(session, whitePawn); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(moves[0]?.to).toBe(44); - }); - (0,__vite_ssr_import_0__.it)("black pawn on e4 captures en passant on d3 after white d2→d4", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget", 19); - const blackPawn = insertPiece(session, 1, "pawn", "black", 28); - insertPiece(session, 2, "pawn", "white", 27); - const moves = (0,__vite_ssr_import_2__.getEnPassantMoves)(session, blackPawn); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(moves[0]?.to).toBe(19); - (0,__vite_ssr_import_0__.expect)(moves[0]?.isCapture).toBe(true); - }); -}); -(0,__vite_ssr_import_0__.describe)("getEnPassantMoves — window closed / ineligible", () => { - (0,__vite_ssr_import_0__.it)("returns [] when EnPassantTarget is null (window closed)", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget", null); - const whitePawn = insertPiece(session, 1, "pawn", "white", 37); - insertPiece(session, 2, "pawn", "black", 36); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.getEnPassantMoves)(session, whitePawn)).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("returns [] when EnPassantTarget is not in the capturing pawn's diagonals", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget", 44); - const whitePawn = insertPiece(session, 1, "pawn", "white", 20); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.getEnPassantMoves)(session, whitePawn)).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("returns [] when no pawn sits behind the target square", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget", 44); - const whitePawn = insertPiece(session, 1, "pawn", "white", 37); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.getEnPassantMoves)(session, whitePawn)).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("returns [] for a pawn with no Position / Color", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget", 44); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.getEnPassantMoves)(session, 999)).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("returns [] when the EnPassantTarget fact is absent entirely", () => { - const session = mkSession(); - const whitePawn = insertPiece(session, 1, "pawn", "white", 37); - insertPiece(session, 2, "pawn", "black", 36); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.getEnPassantMoves)(session, whitePawn)).toHaveLength(0); - }); -}); -(0,__vite_ssr_import_0__.describe)("applyEnPassantCapture", () => { - (0,__vite_ssr_import_0__.it)("white EP: capturing pawn moves to target, black pawn is removed", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget", 44); - const whitePawn = insertPiece(session, 1, "pawn", "white", 37); - const blackPawn = insertPiece(session, 2, "pawn", "black", 36); - (0,__vite_ssr_import_2__.applyEnPassantCapture)( - session, - { pieceId: whitePawn, from: 37, to: 44, isCapture: true }, - "white" - ); - (0,__vite_ssr_import_0__.expect)(session.get(whitePawn, "Position")).toBe(44); - (0,__vite_ssr_import_0__.expect)(session.get(whitePawn, "HasMoved")).toBe(true); - (0,__vite_ssr_import_0__.expect)(session.contains(blackPawn, "Position")).toBe(false); - (0,__vite_ssr_import_0__.expect)(session.contains(blackPawn, "PieceType")).toBe(false); - (0,__vite_ssr_import_0__.expect)(session.contains(blackPawn, "Color")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("black EP: capturing pawn moves to target, white pawn is removed", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget", 19); - const blackPawn = insertPiece(session, 1, "pawn", "black", 28); - const whitePawn = insertPiece(session, 2, "pawn", "white", 27); - (0,__vite_ssr_import_2__.applyEnPassantCapture)( - session, - { pieceId: blackPawn, from: 28, to: 19, isCapture: true }, - "black" - ); - (0,__vite_ssr_import_0__.expect)(session.get(blackPawn, "Position")).toBe(19); - (0,__vite_ssr_import_0__.expect)(session.get(blackPawn, "HasMoved")).toBe(true); - (0,__vite_ssr_import_0__.expect)(session.contains(whitePawn, "Position")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("retracts HasMoved on captured pawn if it was set", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget", 44); - const whitePawn = insertPiece(session, 1, "pawn", "white", 37); - const blackPawn = insertPiece(session, 2, "pawn", "black", 36); - session.insert(blackPawn, "HasMoved", true); - (0,__vite_ssr_import_2__.applyEnPassantCapture)( - session, - { pieceId: whitePawn, from: 37, to: 44, isCapture: true }, - "white" - ); - (0,__vite_ssr_import_0__.expect)(session.contains(blackPawn, "HasMoved")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("is a no-op on the captured pawn if no pawn is behind the target", () => { - const session = mkSession(); - session.insert((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget", 44); - const whitePawn = insertPiece(session, 1, "pawn", "white", 37); - (0,__vite_ssr_import_2__.applyEnPassantCapture)( - session, - { pieceId: whitePawn, from: 37, to: 44, isCapture: true }, - "white" - ); - (0,__vite_ssr_import_0__.expect)(session.get(whitePawn, "Position")).toBe(44); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBOzs7Ozs7QUFNQTtBQUdBLFNBQVMsWUFBcUI7QUFDNUIsU0FBTyxJQUFJLDhCQUFRLEVBQUUsVUFBVSxNQUFNLENBQUM7QUFDeEM7QUFFQSxTQUFTLFlBQ1AsU0FDQSxJQUNBLE1BQ0EsT0FDQSxRQUNVO0FBQ1YsUUFBTSxNQUFNO0FBQ1osVUFBUSxPQUFPLEtBQUssYUFBYSxJQUFJO0FBQ3JDLFVBQVEsT0FBTyxLQUFLLFNBQVMsS0FBSztBQUNsQyxVQUFRLE9BQU8sS0FBSyxZQUFZLE1BQU07QUFDdEMsU0FBTztBQUNUO0dBSUEsZ0NBQVMsc0JBQXNCLE1BQU07QUFDbkMsK0JBQUcsMERBQTBELE1BQU07QUFDakUsVUFBTSxVQUFVLFVBQVU7QUFDMUIsWUFBUSxVQUFPLG9DQUFhLG1CQUFtQixJQUFJO0FBQ25ELGlEQUFtQixTQUFTLElBQUksRUFBRTtBQUNsQyxxQ0FBTyxRQUFRLE9BQUksb0NBQWEsaUJBQWlCLENBQUMsRUFBRSxLQUFLLEVBQUU7QUFBQSxFQUM3RCxDQUFDO0FBRUQsK0JBQUcsMERBQTBELE1BQU07QUFDakUsVUFBTSxVQUFVLFVBQVU7QUFDMUIsWUFBUSxVQUFPLG9DQUFhLG1CQUFtQixJQUFJO0FBQ25ELGlEQUFtQixTQUFTLElBQUksRUFBRTtBQUNsQyxxQ0FBTyxRQUFRLE9BQUksb0NBQWEsaUJBQWlCLENBQUMsRUFBRSxLQUFLLEVBQUU7QUFBQSxFQUM3RCxDQUFDO0FBRUQsK0JBQUcsaUNBQWlDLE1BQU07QUFDeEMsVUFBTSxVQUFVLFVBQVU7QUFDMUIsWUFBUSxVQUFPLG9DQUFhLG1CQUFtQixFQUFFO0FBQ2pELGlEQUFtQixTQUFTLElBQUksRUFBRTtBQUNsQyxxQ0FBTyxRQUFRLE9BQUksb0NBQWEsaUJBQWlCLENBQUMsRUFBRSxLQUFLLEVBQUU7QUFBQSxFQUM3RCxDQUFDO0FBQ0gsQ0FBQztHQUVELGdDQUFTLHdCQUF3QixNQUFNO0FBQ3JDLCtCQUFHLHVCQUF1QixNQUFNO0FBQzlCLFVBQU0sVUFBVSxVQUFVO0FBQzFCLFlBQVEsVUFBTyxvQ0FBYSxtQkFBbUIsRUFBRTtBQUNqRCxtREFBcUIsT0FBTztBQUM1QixxQ0FBTyxRQUFRLE9BQUksb0NBQWEsaUJBQWlCLENBQUMsRUFBRSxTQUFTO0FBQUEsRUFDL0QsQ0FBQztBQUVELCtCQUFHLDBDQUEwQyxNQUFNO0FBQ2pELFVBQU0sVUFBVSxVQUFVO0FBQzFCLFlBQVEsVUFBTyxvQ0FBYSxtQkFBbUIsSUFBSTtBQUNuRCxtREFBcUIsT0FBTztBQUM1QixxQ0FBTyxRQUFRLE9BQUksb0NBQWEsaUJBQWlCLENBQUMsRUFBRSxTQUFTO0FBQUEsRUFDL0QsQ0FBQztBQUNILENBQUM7R0FJRCxnQ0FBUyxpREFBaUQsTUFBTTtBQUM5RCwrQkFBRyxnRUFBZ0UsTUFBTTtBQUN2RSxVQUFNLFVBQVUsVUFBVTtBQUMxQixZQUFRLFVBQU8sb0NBQWEsbUJBQW1CLEVBQUU7QUFDakQsVUFBTSxZQUFZLFlBQVksU0FBUyxHQUFHLFFBQVEsU0FBUyxFQUFFO0FBQzdELGdCQUFZLFNBQVMsR0FBRyxRQUFRLFNBQVMsRUFBRTtBQUUzQyxVQUFNLFdBQVEseUNBQWtCLFNBQVMsU0FBUztBQUNsRCxxQ0FBTyxLQUFLLEVBQUUsYUFBYSxDQUFDO0FBQzVCLHFDQUFPLE1BQU0sQ0FBQyxHQUFHLE9BQU8sRUFBRSxLQUFLLFNBQVM7QUFDeEMscUNBQU8sTUFBTSxDQUFDLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUM5QixxQ0FBTyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFO0FBQzVCLHFDQUFPLE1BQU0sQ0FBQyxHQUFHLFNBQVMsRUFBRSxLQUFLLElBQUk7QUFBQSxFQUN2QyxDQUFDO0FBRUQsK0JBQUcsZ0VBQWdFLE1BQU07QUFDdkUsVUFBTSxVQUFVLFVBQVU7QUFDMUIsWUFBUSxVQUFPLG9DQUFhLG1CQUFtQixFQUFFO0FBQ2pELFVBQU0sWUFBWSxZQUFZLFNBQVMsR0FBRyxRQUFRLFNBQVMsRUFBRTtBQUM3RCxnQkFBWSxTQUFTLEdBQUcsUUFBUSxTQUFTLEVBQUU7QUFFM0MsVUFBTSxXQUFRLHlDQUFrQixTQUFTLFNBQVM7QUFDbEQscUNBQU8sS0FBSyxFQUFFLGFBQWEsQ0FBQztBQUM1QixxQ0FBTyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFO0FBQUEsRUFDOUIsQ0FBQztBQUVELCtCQUFHLGdFQUFnRSxNQUFNO0FBQ3ZFLFVBQU0sVUFBVSxVQUFVO0FBQzFCLFlBQVEsVUFBTyxvQ0FBYSxtQkFBbUIsRUFBRTtBQUNqRCxVQUFNLFlBQVksWUFBWSxTQUFTLEdBQUcsUUFBUSxTQUFTLEVBQUU7QUFDN0QsZ0JBQVksU0FBUyxHQUFHLFFBQVEsU0FBUyxFQUFFO0FBRTNDLFVBQU0sV0FBUSx5Q0FBa0IsU0FBUyxTQUFTO0FBQ2xELHFDQUFPLEtBQUssRUFBRSxhQUFhLENBQUM7QUFDNUIscUNBQU8sTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRTtBQUM1QixxQ0FBTyxNQUFNLENBQUMsR0FBRyxTQUFTLEVBQUUsS0FBSyxJQUFJO0FBQUEsRUFDdkMsQ0FBQztBQUNILENBQUM7R0FFRCxnQ0FBUyxrREFBa0QsTUFBTTtBQUMvRCwrQkFBRywyREFBMkQsTUFBTTtBQUNsRSxVQUFNLFVBQVUsVUFBVTtBQUMxQixZQUFRLFVBQU8sb0NBQWEsbUJBQW1CLElBQUk7QUFDbkQsVUFBTSxZQUFZLFlBQVksU0FBUyxHQUFHLFFBQVEsU0FBUyxFQUFFO0FBQzdELGdCQUFZLFNBQVMsR0FBRyxRQUFRLFNBQVMsRUFBRTtBQUUzQyx3Q0FBTyx5Q0FBa0IsU0FBUyxTQUFTLENBQUMsRUFBRSxhQUFhLENBQUM7QUFBQSxFQUM5RCxDQUFDO0FBRUQsK0JBQUcsNEVBQTRFLE1BQU07QUFDbkYsVUFBTSxVQUFVLFVBQVU7QUFDMUIsWUFBUSxVQUFPLG9DQUFhLG1CQUFtQixFQUFFO0FBRWpELFVBQU0sWUFBWSxZQUFZLFNBQVMsR0FBRyxRQUFRLFNBQVMsRUFBRTtBQUU3RCx3Q0FBTyx5Q0FBa0IsU0FBUyxTQUFTLENBQUMsRUFBRSxhQUFhLENBQUM7QUFBQSxFQUM5RCxDQUFDO0FBRUQsK0JBQUcseURBQXlELE1BQU07QUFDaEUsVUFBTSxVQUFVLFVBQVU7QUFDMUIsWUFBUSxVQUFPLG9DQUFhLG1CQUFtQixFQUFFO0FBQ2pELFVBQU0sWUFBWSxZQUFZLFNBQVMsR0FBRyxRQUFRLFNBQVMsRUFBRTtBQUc3RCx3Q0FBTyx5Q0FBa0IsU0FBUyxTQUFTLENBQUMsRUFBRSxhQUFhLENBQUM7QUFBQSxFQUM5RCxDQUFDO0FBRUQsK0JBQUcsa0RBQWtELE1BQU07QUFDekQsVUFBTSxVQUFVLFVBQVU7QUFDMUIsWUFBUSxVQUFPLG9DQUFhLG1CQUFtQixFQUFFO0FBQ2pELHdDQUFPLHlDQUFrQixTQUFTLEdBQWUsQ0FBQyxFQUFFLGFBQWEsQ0FBQztBQUFBLEVBQ3BFLENBQUM7QUFFRCwrQkFBRywrREFBK0QsTUFBTTtBQUN0RSxVQUFNLFVBQVUsVUFBVTtBQUUxQixVQUFNLFlBQVksWUFBWSxTQUFTLEdBQUcsUUFBUSxTQUFTLEVBQUU7QUFDN0QsZ0JBQVksU0FBUyxHQUFHLFFBQVEsU0FBUyxFQUFFO0FBQzNDLHdDQUFPLHlDQUFrQixTQUFTLFNBQVMsQ0FBQyxFQUFFLGFBQWEsQ0FBQztBQUFBLEVBQzlELENBQUM7QUFDSCxDQUFDO0dBSUQsZ0NBQVMseUJBQXlCLE1BQU07QUFDdEMsK0JBQUcsbUVBQW1FLE1BQU07QUFDMUUsVUFBTSxVQUFVLFVBQVU7QUFDMUIsWUFBUSxVQUFPLG9DQUFhLG1CQUFtQixFQUFFO0FBQ2pELFVBQU0sWUFBWSxZQUFZLFNBQVMsR0FBRyxRQUFRLFNBQVMsRUFBRTtBQUM3RCxVQUFNLFlBQVksWUFBWSxTQUFTLEdBQUcsUUFBUSxTQUFTLEVBQUU7QUFFN0Q7QUFBQSxNQUNFO0FBQUEsTUFDQSxFQUFFLFNBQVMsV0FBVyxNQUFNLElBQUksSUFBSSxJQUFJLFdBQVcsS0FBSztBQUFBLE1BQ3hEO0FBQUEsSUFDRjtBQUVBLHFDQUFPLFFBQVEsSUFBSSxXQUFXLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUNsRCxxQ0FBTyxRQUFRLElBQUksV0FBVyxVQUFVLENBQUMsRUFBRSxLQUFLLElBQUk7QUFDcEQscUNBQU8sUUFBUSxTQUFTLFdBQVcsVUFBVSxDQUFDLEVBQUUsS0FBSyxLQUFLO0FBQzFELHFDQUFPLFFBQVEsU0FBUyxXQUFXLFdBQVcsQ0FBQyxFQUFFLEtBQUssS0FBSztBQUMzRCxxQ0FBTyxRQUFRLFNBQVMsV0FBVyxPQUFPLENBQUMsRUFBRSxLQUFLLEtBQUs7QUFBQSxFQUN6RCxDQUFDO0FBRUQsK0JBQUcsbUVBQW1FLE1BQU07QUFDMUUsVUFBTSxVQUFVLFVBQVU7QUFDMUIsWUFBUSxVQUFPLG9DQUFhLG1CQUFtQixFQUFFO0FBQ2pELFVBQU0sWUFBWSxZQUFZLFNBQVMsR0FBRyxRQUFRLFNBQVMsRUFBRTtBQUM3RCxVQUFNLFlBQVksWUFBWSxTQUFTLEdBQUcsUUFBUSxTQUFTLEVBQUU7QUFFN0Q7QUFBQSxNQUNFO0FBQUEsTUFDQSxFQUFFLFNBQVMsV0FBVyxNQUFNLElBQUksSUFBSSxJQUFJLFdBQVcsS0FBSztBQUFBLE1BQ3hEO0FBQUEsSUFDRjtBQUVBLHFDQUFPLFFBQVEsSUFBSSxXQUFXLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUNsRCxxQ0FBTyxRQUFRLElBQUksV0FBVyxVQUFVLENBQUMsRUFBRSxLQUFLLElBQUk7QUFDcEQscUNBQU8sUUFBUSxTQUFTLFdBQVcsVUFBVSxDQUFDLEVBQUUsS0FBSyxLQUFLO0FBQUEsRUFDNUQsQ0FBQztBQUVELCtCQUFHLG9EQUFvRCxNQUFNO0FBQzNELFVBQU0sVUFBVSxVQUFVO0FBQzFCLFlBQVEsVUFBTyxvQ0FBYSxtQkFBbUIsRUFBRTtBQUNqRCxVQUFNLFlBQVksWUFBWSxTQUFTLEdBQUcsUUFBUSxTQUFTLEVBQUU7QUFDN0QsVUFBTSxZQUFZLFlBQVksU0FBUyxHQUFHLFFBQVEsU0FBUyxFQUFFO0FBQzdELFlBQVEsT0FBTyxXQUFXLFlBQVksSUFBSTtBQUUxQztBQUFBLE1BQ0U7QUFBQSxNQUNBLEVBQUUsU0FBUyxXQUFXLE1BQU0sSUFBSSxJQUFJLElBQUksV0FBVyxLQUFLO0FBQUEsTUFDeEQ7QUFBQSxJQUNGO0FBRUEscUNBQU8sUUFBUSxTQUFTLFdBQVcsVUFBVSxDQUFDLEVBQUUsS0FBSyxLQUFLO0FBQUEsRUFDNUQsQ0FBQztBQUVELCtCQUFHLG1FQUFtRSxNQUFNO0FBQzFFLFVBQU0sVUFBVSxVQUFVO0FBQzFCLFlBQVEsVUFBTyxvQ0FBYSxtQkFBbUIsRUFBRTtBQUNqRCxVQUFNLFlBQVksWUFBWSxTQUFTLEdBQUcsUUFBUSxTQUFTLEVBQUU7QUFHN0Q7QUFBQSxNQUNFO0FBQUEsTUFDQSxFQUFFLFNBQVMsV0FBVyxNQUFNLElBQUksSUFBSSxJQUFJLFdBQVcsS0FBSztBQUFBLE1BQ3hEO0FBQUEsSUFDRjtBQUNBLHFDQUFPLFFBQVEsSUFBSSxXQUFXLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUFBLEVBQ3BELENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJlbnBhc3NhbnQudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgaXQsIGV4cGVjdCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB7IFNlc3Npb24sIHR5cGUgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB7XG4gIGdldEVuUGFzc2FudE1vdmVzLFxuICBzZXRFblBhc3NhbnRUYXJnZXQsXG4gIGNsZWFyRW5QYXNzYW50VGFyZ2V0LFxuICBhcHBseUVuUGFzc2FudENhcHR1cmUsXG59IGZyb20gXCIuL2VucGFzc2FudC5qc1wiO1xuaW1wb3J0IHsgR0FNRV9FTlRJVFkgfSBmcm9tIFwiLi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBpZWNlQ29sb3IsIFBpZWNlVHlwZSwgU3F1YXJlIH0gZnJvbSBcIi4uL3NjaGVtYS5qc1wiO1xuXG5mdW5jdGlvbiBta1Nlc3Npb24oKTogU2Vzc2lvbiB7XG4gIHJldHVybiBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbn1cblxuZnVuY3Rpb24gaW5zZXJ0UGllY2UoXG4gIHNlc3Npb246IFNlc3Npb24sXG4gIGlkOiBudW1iZXIsXG4gIHR5cGU6IFBpZWNlVHlwZSxcbiAgY29sb3I6IFBpZWNlQ29sb3IsXG4gIHNxdWFyZTogU3F1YXJlLFxuKTogRW50aXR5SWQge1xuICBjb25zdCBlaWQgPSBpZCBhcyBFbnRpdHlJZDtcbiAgc2Vzc2lvbi5pbnNlcnQoZWlkLCBcIlBpZWNlVHlwZVwiLCB0eXBlKTtcbiAgc2Vzc2lvbi5pbnNlcnQoZWlkLCBcIkNvbG9yXCIsIGNvbG9yKTtcbiAgc2Vzc2lvbi5pbnNlcnQoZWlkLCBcIlBvc2l0aW9uXCIsIHNxdWFyZSk7XG4gIHJldHVybiBlaWQ7XG59XG5cbi8vIOKUgOKUgOKUgCBzZXRFblBhc3NhbnRUYXJnZXQgLyBjbGVhckVuUGFzc2FudFRhcmdldCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZGVzY3JpYmUoXCJzZXRFblBhc3NhbnRUYXJnZXRcIiwgKCkgPT4ge1xuICBpdChcInNldHMgdGFyZ2V0IHRvIG1pZHBvaW50IGZvciB3aGl0ZSBkb3VibGUgYWR2YW5jZSBlMuKGkmU0XCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbWtTZXNzaW9uKCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiRW5QYXNzYW50VGFyZ2V0XCIsIG51bGwpO1xuICAgIHNldEVuUGFzc2FudFRhcmdldChzZXNzaW9uLCAxMiwgMjgpOyAvLyBlMuKGkmU0LCBtaWRwb2ludCA9IGUzICgyMClcbiAgICBleHBlY3Qoc2Vzc2lvbi5nZXQoR0FNRV9FTlRJVFksIFwiRW5QYXNzYW50VGFyZ2V0XCIpKS50b0JlKDIwKTtcbiAgfSk7XG5cbiAgaXQoXCJzZXRzIHRhcmdldCB0byBtaWRwb2ludCBmb3IgYmxhY2sgZG91YmxlIGFkdmFuY2UgZTfihpJlNVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG1rU2Vzc2lvbigpO1xuICAgIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIkVuUGFzc2FudFRhcmdldFwiLCBudWxsKTtcbiAgICBzZXRFblBhc3NhbnRUYXJnZXQoc2Vzc2lvbiwgNTIsIDM2KTsgLy8gZTfihpJlNSwgbWlkcG9pbnQgPSBlNiAoNDQpXG4gICAgZXhwZWN0KHNlc3Npb24uZ2V0KEdBTUVfRU5USVRZLCBcIkVuUGFzc2FudFRhcmdldFwiKSkudG9CZSg0NCk7XG4gIH0pO1xuXG4gIGl0KFwib3ZlcndyaXRlcyBhbiBleGlzdGluZyB0YXJnZXRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBta1Nlc3Npb24oKTtcbiAgICBzZXNzaW9uLmluc2VydChHQU1FX0VOVElUWSwgXCJFblBhc3NhbnRUYXJnZXRcIiwgNDQpO1xuICAgIHNldEVuUGFzc2FudFRhcmdldChzZXNzaW9uLCAxMiwgMjgpO1xuICAgIGV4cGVjdChzZXNzaW9uLmdldChHQU1FX0VOVElUWSwgXCJFblBhc3NhbnRUYXJnZXRcIikpLnRvQmUoMjApO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImNsZWFyRW5QYXNzYW50VGFyZ2V0XCIsICgpID0+IHtcbiAgaXQoXCJzZXRzIHRhcmdldCB0byBudWxsXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbWtTZXNzaW9uKCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiRW5QYXNzYW50VGFyZ2V0XCIsIDQ0KTtcbiAgICBjbGVhckVuUGFzc2FudFRhcmdldChzZXNzaW9uKTtcbiAgICBleHBlY3Qoc2Vzc2lvbi5nZXQoR0FNRV9FTlRJVFksIFwiRW5QYXNzYW50VGFyZ2V0XCIpKS50b0JlTnVsbCgpO1xuICB9KTtcblxuICBpdChcImlzIGlkZW1wb3RlbnQgd2hlbiB0YXJnZXQgYWxyZWFkeSBudWxsXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbWtTZXNzaW9uKCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiRW5QYXNzYW50VGFyZ2V0XCIsIG51bGwpO1xuICAgIGNsZWFyRW5QYXNzYW50VGFyZ2V0KHNlc3Npb24pO1xuICAgIGV4cGVjdChzZXNzaW9uLmdldChHQU1FX0VOVElUWSwgXCJFblBhc3NhbnRUYXJnZXRcIikpLnRvQmVOdWxsKCk7XG4gIH0pO1xufSk7XG5cbi8vIOKUgOKUgOKUgCBnZXRFblBhc3NhbnRNb3ZlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZGVzY3JpYmUoXCJnZXRFblBhc3NhbnRNb3ZlcyDigJQgY2FwdHVyZSB3aXRoaW4gdGhlIHdpbmRvd1wiLCAoKSA9PiB7XG4gIGl0KFwid2hpdGUgcGF3biBvbiBmNSBjYXB0dXJlcyBlbiBwYXNzYW50IG9uIGU2IGFmdGVyIGJsYWNrIGU34oaSZTVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBta1Nlc3Npb24oKTtcbiAgICBzZXNzaW9uLmluc2VydChHQU1FX0VOVElUWSwgXCJFblBhc3NhbnRUYXJnZXRcIiwgNDQpOyAvLyBlNlxuICAgIGNvbnN0IHdoaXRlUGF3biA9IGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwicGF3blwiLCBcIndoaXRlXCIsIDM3KTsgLy8gZjVcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAyLCBcInBhd25cIiwgXCJibGFja1wiLCAzNik7ICAgICAgICAgICAgICAgICAgIC8vIGU1IChqdXN0IGRvdWJsZWQpXG5cbiAgICBjb25zdCBtb3ZlcyA9IGdldEVuUGFzc2FudE1vdmVzKHNlc3Npb24sIHdoaXRlUGF3bik7XG4gICAgZXhwZWN0KG1vdmVzKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgZXhwZWN0KG1vdmVzWzBdPy5waWVjZUlkKS50b0JlKHdoaXRlUGF3bik7XG4gICAgZXhwZWN0KG1vdmVzWzBdPy5mcm9tKS50b0JlKDM3KTtcbiAgICBleHBlY3QobW92ZXNbMF0/LnRvKS50b0JlKDQ0KTtcbiAgICBleHBlY3QobW92ZXNbMF0/LmlzQ2FwdHVyZSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJ3aGl0ZSBwYXduIG9uIGQ1IGNhcHR1cmVzIGVuIHBhc3NhbnQgb24gZTYgYWZ0ZXIgYmxhY2sgZTfihpJlNVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG1rU2Vzc2lvbigpO1xuICAgIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIkVuUGFzc2FudFRhcmdldFwiLCA0NCk7IC8vIGU2XG4gICAgY29uc3Qgd2hpdGVQYXduID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJwYXduXCIsIFwid2hpdGVcIiwgMzUpOyAvLyBkNVxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDIsIFwicGF3blwiLCBcImJsYWNrXCIsIDM2KTsgICAgICAgICAgICAgICAgICAgLy8gZTVcblxuICAgIGNvbnN0IG1vdmVzID0gZ2V0RW5QYXNzYW50TW92ZXMoc2Vzc2lvbiwgd2hpdGVQYXduKTtcbiAgICBleHBlY3QobW92ZXMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICBleHBlY3QobW92ZXNbMF0/LnRvKS50b0JlKDQ0KTtcbiAgfSk7XG5cbiAgaXQoXCJibGFjayBwYXduIG9uIGU0IGNhcHR1cmVzIGVuIHBhc3NhbnQgb24gZDMgYWZ0ZXIgd2hpdGUgZDLihpJkNFwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG1rU2Vzc2lvbigpO1xuICAgIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIkVuUGFzc2FudFRhcmdldFwiLCAxOSk7IC8vIGQzXG4gICAgY29uc3QgYmxhY2tQYXduID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJwYXduXCIsIFwiYmxhY2tcIiwgMjgpOyAvLyBlNFxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDIsIFwicGF3blwiLCBcIndoaXRlXCIsIDI3KTsgICAgICAgICAgICAgICAgICAgLy8gZDRcblxuICAgIGNvbnN0IG1vdmVzID0gZ2V0RW5QYXNzYW50TW92ZXMoc2Vzc2lvbiwgYmxhY2tQYXduKTtcbiAgICBleHBlY3QobW92ZXMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICBleHBlY3QobW92ZXNbMF0/LnRvKS50b0JlKDE5KTtcbiAgICBleHBlY3QobW92ZXNbMF0/LmlzQ2FwdHVyZSkudG9CZSh0cnVlKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJnZXRFblBhc3NhbnRNb3ZlcyDigJQgd2luZG93IGNsb3NlZCAvIGluZWxpZ2libGVcIiwgKCkgPT4ge1xuICBpdChcInJldHVybnMgW10gd2hlbiBFblBhc3NhbnRUYXJnZXQgaXMgbnVsbCAod2luZG93IGNsb3NlZClcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBta1Nlc3Npb24oKTtcbiAgICBzZXNzaW9uLmluc2VydChHQU1FX0VOVElUWSwgXCJFblBhc3NhbnRUYXJnZXRcIiwgbnVsbCk7XG4gICAgY29uc3Qgd2hpdGVQYXduID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJwYXduXCIsIFwid2hpdGVcIiwgMzcpOyAvLyBmNVxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDIsIFwicGF3blwiLCBcImJsYWNrXCIsIDM2KTsgICAgICAgICAgICAgICAgICAgLy8gZTUgc3RpbGwgc2l0dGluZyB0aGVyZVxuXG4gICAgZXhwZWN0KGdldEVuUGFzc2FudE1vdmVzKHNlc3Npb24sIHdoaXRlUGF3bikpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIFtdIHdoZW4gRW5QYXNzYW50VGFyZ2V0IGlzIG5vdCBpbiB0aGUgY2FwdHVyaW5nIHBhd24ncyBkaWFnb25hbHNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBta1Nlc3Npb24oKTtcbiAgICBzZXNzaW9uLmluc2VydChHQU1FX0VOVElUWSwgXCJFblBhc3NhbnRUYXJnZXRcIiwgNDQpOyAvLyBlNlxuICAgIC8vIFdoaXRlIHBhd24gYXQgZTMgKDIwKSDigJQgbm90IGFkamFjZW50IHRvIGU2ICg0NCkuXG4gICAgY29uc3Qgd2hpdGVQYXduID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJwYXduXCIsIFwid2hpdGVcIiwgMjApO1xuXG4gICAgZXhwZWN0KGdldEVuUGFzc2FudE1vdmVzKHNlc3Npb24sIHdoaXRlUGF3bikpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIFtdIHdoZW4gbm8gcGF3biBzaXRzIGJlaGluZCB0aGUgdGFyZ2V0IHNxdWFyZVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG1rU2Vzc2lvbigpO1xuICAgIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIkVuUGFzc2FudFRhcmdldFwiLCA0NCk7IC8vIGU2XG4gICAgY29uc3Qgd2hpdGVQYXduID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJwYXduXCIsIFwid2hpdGVcIiwgMzcpOyAvLyBmNVxuICAgIC8vIE5vIGJsYWNrIHBhd24gb24gZTUg4oCUIHRoZSBFUCB0YXJnZXQgaXMgc3RhbGUgLyBubyBjYXB0dXJlZCBwaWVjZSBleGlzdHMuXG5cbiAgICBleHBlY3QoZ2V0RW5QYXNzYW50TW92ZXMoc2Vzc2lvbiwgd2hpdGVQYXduKSkudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcblxuICBpdChcInJldHVybnMgW10gZm9yIGEgcGF3biB3aXRoIG5vIFBvc2l0aW9uIC8gQ29sb3JcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBta1Nlc3Npb24oKTtcbiAgICBzZXNzaW9uLmluc2VydChHQU1FX0VOVElUWSwgXCJFblBhc3NhbnRUYXJnZXRcIiwgNDQpO1xuICAgIGV4cGVjdChnZXRFblBhc3NhbnRNb3ZlcyhzZXNzaW9uLCA5OTkgYXMgRW50aXR5SWQpKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyBbXSB3aGVuIHRoZSBFblBhc3NhbnRUYXJnZXQgZmFjdCBpcyBhYnNlbnQgZW50aXJlbHlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBta1Nlc3Npb24oKTtcbiAgICAvLyBObyBFblBhc3NhbnRUYXJnZXQgZmFjdCBpbnNlcnRlZCBhdCBhbGwuXG4gICAgY29uc3Qgd2hpdGVQYXduID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJwYXduXCIsIFwid2hpdGVcIiwgMzcpO1xuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDIsIFwicGF3blwiLCBcImJsYWNrXCIsIDM2KTtcbiAgICBleHBlY3QoZ2V0RW5QYXNzYW50TW92ZXMoc2Vzc2lvbiwgd2hpdGVQYXduKSkudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcbn0pO1xuXG4vLyDilIDilIDilIAgYXBwbHlFblBhc3NhbnRDYXB0dXJlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5kZXNjcmliZShcImFwcGx5RW5QYXNzYW50Q2FwdHVyZVwiLCAoKSA9PiB7XG4gIGl0KFwid2hpdGUgRVA6IGNhcHR1cmluZyBwYXduIG1vdmVzIHRvIHRhcmdldCwgYmxhY2sgcGF3biBpcyByZW1vdmVkXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbWtTZXNzaW9uKCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiRW5QYXNzYW50VGFyZ2V0XCIsIDQ0KTsgLy8gZTZcbiAgICBjb25zdCB3aGl0ZVBhd24gPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCAzNyk7IC8vIGY1XG4gICAgY29uc3QgYmxhY2tQYXduID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMiwgXCJwYXduXCIsIFwiYmxhY2tcIiwgMzYpOyAvLyBlNVxuXG4gICAgYXBwbHlFblBhc3NhbnRDYXB0dXJlKFxuICAgICAgc2Vzc2lvbixcbiAgICAgIHsgcGllY2VJZDogd2hpdGVQYXduLCBmcm9tOiAzNywgdG86IDQ0LCBpc0NhcHR1cmU6IHRydWUgfSxcbiAgICAgIFwid2hpdGVcIixcbiAgICApO1xuXG4gICAgZXhwZWN0KHNlc3Npb24uZ2V0KHdoaXRlUGF3biwgXCJQb3NpdGlvblwiKSkudG9CZSg0NCk7XG4gICAgZXhwZWN0KHNlc3Npb24uZ2V0KHdoaXRlUGF3biwgXCJIYXNNb3ZlZFwiKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3Qoc2Vzc2lvbi5jb250YWlucyhibGFja1Bhd24sIFwiUG9zaXRpb25cIikpLnRvQmUoZmFsc2UpO1xuICAgIGV4cGVjdChzZXNzaW9uLmNvbnRhaW5zKGJsYWNrUGF3biwgXCJQaWVjZVR5cGVcIikpLnRvQmUoZmFsc2UpO1xuICAgIGV4cGVjdChzZXNzaW9uLmNvbnRhaW5zKGJsYWNrUGF3biwgXCJDb2xvclwiKSkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwiYmxhY2sgRVA6IGNhcHR1cmluZyBwYXduIG1vdmVzIHRvIHRhcmdldCwgd2hpdGUgcGF3biBpcyByZW1vdmVkXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbWtTZXNzaW9uKCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiRW5QYXNzYW50VGFyZ2V0XCIsIDE5KTsgLy8gZDNcbiAgICBjb25zdCBibGFja1Bhd24gPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInBhd25cIiwgXCJibGFja1wiLCAyOCk7IC8vIGU0XG4gICAgY29uc3Qgd2hpdGVQYXduID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMiwgXCJwYXduXCIsIFwid2hpdGVcIiwgMjcpOyAvLyBkNFxuXG4gICAgYXBwbHlFblBhc3NhbnRDYXB0dXJlKFxuICAgICAgc2Vzc2lvbixcbiAgICAgIHsgcGllY2VJZDogYmxhY2tQYXduLCBmcm9tOiAyOCwgdG86IDE5LCBpc0NhcHR1cmU6IHRydWUgfSxcbiAgICAgIFwiYmxhY2tcIixcbiAgICApO1xuXG4gICAgZXhwZWN0KHNlc3Npb24uZ2V0KGJsYWNrUGF3biwgXCJQb3NpdGlvblwiKSkudG9CZSgxOSk7XG4gICAgZXhwZWN0KHNlc3Npb24uZ2V0KGJsYWNrUGF3biwgXCJIYXNNb3ZlZFwiKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3Qoc2Vzc2lvbi5jb250YWlucyh3aGl0ZVBhd24sIFwiUG9zaXRpb25cIikpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcInJldHJhY3RzIEhhc01vdmVkIG9uIGNhcHR1cmVkIHBhd24gaWYgaXQgd2FzIHNldFwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG1rU2Vzc2lvbigpO1xuICAgIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIkVuUGFzc2FudFRhcmdldFwiLCA0NCk7XG4gICAgY29uc3Qgd2hpdGVQYXduID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJwYXduXCIsIFwid2hpdGVcIiwgMzcpO1xuICAgIGNvbnN0IGJsYWNrUGF3biA9IGluc2VydFBpZWNlKHNlc3Npb24sIDIsIFwicGF3blwiLCBcImJsYWNrXCIsIDM2KTtcbiAgICBzZXNzaW9uLmluc2VydChibGFja1Bhd24sIFwiSGFzTW92ZWRcIiwgdHJ1ZSk7XG5cbiAgICBhcHBseUVuUGFzc2FudENhcHR1cmUoXG4gICAgICBzZXNzaW9uLFxuICAgICAgeyBwaWVjZUlkOiB3aGl0ZVBhd24sIGZyb206IDM3LCB0bzogNDQsIGlzQ2FwdHVyZTogdHJ1ZSB9LFxuICAgICAgXCJ3aGl0ZVwiLFxuICAgICk7XG5cbiAgICBleHBlY3Qoc2Vzc2lvbi5jb250YWlucyhibGFja1Bhd24sIFwiSGFzTW92ZWRcIikpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcImlzIGEgbm8tb3Agb24gdGhlIGNhcHR1cmVkIHBhd24gaWYgbm8gcGF3biBpcyBiZWhpbmQgdGhlIHRhcmdldFwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG1rU2Vzc2lvbigpO1xuICAgIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIkVuUGFzc2FudFRhcmdldFwiLCA0NCk7XG4gICAgY29uc3Qgd2hpdGVQYXduID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJwYXduXCIsIFwid2hpdGVcIiwgMzcpO1xuICAgIC8vIE5vIGJsYWNrIHBhd24gYXQgZTUuIGFwcGx5RW5QYXNzYW50Q2FwdHVyZSBzaG91bGQgc3RpbGwgbW92ZSB0aGVcbiAgICAvLyB3aGl0ZSBwYXduIHdpdGhvdXQgdGhyb3dpbmcuXG4gICAgYXBwbHlFblBhc3NhbnRDYXB0dXJlKFxuICAgICAgc2Vzc2lvbixcbiAgICAgIHsgcGllY2VJZDogd2hpdGVQYXduLCBmcm9tOiAzNywgdG86IDQ0LCBpc0NhcHR1cmU6IHRydWUgfSxcbiAgICAgIFwid2hpdGVcIixcbiAgICApO1xuICAgIGV4cGVjdChzZXNzaW9uLmdldCh3aGl0ZVBhd24sIFwiUG9zaXRpb25cIikpLnRvQmUoNDQpO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL2NoZXNzL3NyYy9ydWxlcy9lbnBhc3NhbnQudGVzdC50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/899683bff7ae897887133feecc8687bd7f454830 b/7xOfJqsDU787fe61oSCq1/web/899683bff7ae897887133feecc8687bd7f454830 deleted file mode 100644 index d530eac..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/899683bff7ae897887133feecc8687bd7f454830 +++ /dev/null @@ -1,27 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/presets/registry.ts", {"importedNames":["PRESET_REGISTRY"]}); -__vite_ssr_import_0__.PRESET_REGISTRY.register({ - id: "capture-to-win", - name: "First Blood", - description: "The first player to capture any enemy piece wins the game immediately. Makes every piece precious.", - incompatibleWith: ["last-piece-standing"], - requires: [], - onBeforeCapture({ engine, attacker }) { - const state = engine.presetState("capture-to-win"); - if (state.has("winner")) return; - const colorFact = engine.session.allFacts().find((f) => f.id === attacker && f.attr === "Color"); - if (!colorFact) return; - state.set("winner", colorFact.value); - }, - onCheckGameResult({ engine }) { - const state = engine.presetState("capture-to-win"); - const winner = state.get("winner"); - if (winner === "white") return "white-wins"; - if (winner === "black") return "black-wins"; - return void 0; - } - // No explicit onDeactivate needed: the engine automatically clears - // preset-state for this id via clearPresetState when we go inactive. -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBMkJBO0FBUUEsc0NBQWdCLFNBQVM7QUFBQSxFQUN2QixJQUFJO0FBQUEsRUFDSixNQUFNO0FBQUEsRUFDTixhQUNFO0FBQUEsRUFDRixrQkFBa0IsQ0FBQyxxQkFBcUI7QUFBQSxFQUN4QyxVQUFVLENBQUM7QUFBQSxFQUVYLGdCQUFnQixFQUFFLFFBQVEsU0FBUyxHQUFHO0FBQ3BDLFVBQU0sUUFBUSxPQUFPLFlBQStCLGdCQUFnQjtBQUdwRSxRQUFJLE1BQU0sSUFBSSxRQUFRLEVBQUc7QUFFekIsVUFBTSxZQUFZLE9BQU8sUUFDdEIsU0FBUyxFQUNULEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxZQUFZLEVBQUUsU0FBUyxPQUFPO0FBQ3RELFFBQUksQ0FBQyxVQUFXO0FBQ2hCLFVBQU0sSUFBSSxVQUFVLFVBQVUsS0FBbUI7QUFBQSxFQUduRDtBQUFBLEVBRUEsa0JBQWtCLEVBQUUsT0FBTyxHQUEyQjtBQUNwRCxVQUFNLFFBQVEsT0FBTyxZQUErQixnQkFBZ0I7QUFDcEUsVUFBTSxTQUFTLE1BQU0sSUFBSSxRQUFRO0FBQ2pDLFFBQUksV0FBVyxRQUFTLFFBQU87QUFDL0IsUUFBSSxXQUFXLFFBQVMsUUFBTztBQUMvQixXQUFPO0FBQUEsRUFDVDtBQUFBO0FBQUE7QUFJRixDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJjYXB0dXJlLXRvLXdpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByZXNldDogYGNhcHR1cmUtdG8td2luYCAoRmlyc3QgQmxvb2QsIFJVTEVTLm1kIHJ1bGUgIzExKVxuICpcbiAqIFRoZSBmaXJzdCBwbGF5ZXIgdG8gY2FwdHVyZSBBTlkgZW5lbXkgcGllY2Ugd2lucyB0aGUgZ2FtZVxuICogaW1tZWRpYXRlbHkuIENoZWNrbWF0ZSBpcyBuZXZlciByZWFjaGVkIGluIHByYWN0aWNlIGJlY2F1c2UgYW55XG4gKiBjYXB0dXJlIGVuZHMgdGhlIGdhbWUgZmlyc3QuXG4gKlxuICogV2lyaW5nOlxuICogIC0gYG9uQmVmb3JlQ2FwdHVyZWAg4oCUIHJlY29yZCB0aGUgY2FwdHVyZXIncyBjb2xvciBpbiBwcmVzZXQtXG4gKiAgICBzY29wZWQgc3RhdGUgdmlhIGBlbmdpbmUucHJlc2V0U3RhdGUoXCJjYXB0dXJlLXRvLXdpblwiKWAuIERvZXNcbiAqICAgIE5PVCBjb25zdW1lIHRoZSBjYXB0dXJlLCBzbyB0aGUgZW5naW5lJ3MgZGVmYXVsdCByZXRyYWN0LWFuZC1cbiAqICAgIG1vdmUgc3RpbGwgcnVucyAodGhlIHRhcmdldCBwaWVjZSBkaWVzIG5vcm1hbGx5LCB0aGUgYXR0YWNrZXJcbiAqICAgIGFkdmFuY2VzIG9udG8gaXRzIHNxdWFyZSkuIFRoaXMga2VlcHMgdGhlIGZpbmFsIGJvYXJkIHN0YXRlXG4gKiAgICBpbnR1aXRpdmUgZm9yIHBsYXllcnMgdG8gaW5zcGVjdC5cbiAqICAtIGBvbkNoZWNrR2FtZVJlc3VsdGAg4oCUIGlmIGEgd2lubmVyIHdhcyByZWNvcmRlZCwgY29udmVydCBpdFxuICogICAgaW50byB0aGUgY29ycmVzcG9uZGluZyBHYW1lUmVzdWx0LiBPdGhlcndpc2UgcmV0dXJuIHVuZGVmaW5lZFxuICogICAgYW5kIGxldCB0aGUgZGVmYXVsdCBjaGVja21hdGUvc3RhbGVtYXRlIGxvZ2ljIHJ1bi5cbiAqXG4gKiBTdGF0ZSBtaWdyYXRpb24gbm90ZTogdGhlIHdpbm5lciB1c2VkIHRvIGxpdmUgYXMgYSBgV2lubmVyYCBmYWN0XG4gKiBvbiBgR0FNRV9FTlRJVFlgLCBhbG9uZ3NpZGUgcmVhbCBnYW1lLWxldmVsIGZhY3RzIChUdXJuLCBldGMpLlxuICogUG9zdC1yZWZhY3RvciBpdCBsaXZlcyBpbiB0aGUgcHJlc2V0J3MgZGVkaWNhdGVkIHN0YXRlIGJhZyBzb1xuICogb3RoZXIgcHJlc2V0cyBjYW4ndCBjb2xsaWRlLCB0aGUgc3RhdGUgaXMgYXV0by1jbGVhcmVkIG9uXG4gKiBkZWFjdGl2YXRlLCBhbmQgYFdpbm5lcmAgc3RheXMgb2ZmIHRoZSBzaGFyZWQgZ2FtZSBlbnRpdHkuXG4gKlxuICogSW5jb21wYXRpYmxlIHdpdGggYGxhc3QtcGllY2Utc3RhbmRpbmdgIOKAlCBib3RoIHJlZGVmaW5lIFwid2hlbiBpc1xuICogdGhlIGdhbWUgb3ZlclwiIGFuZCB3b3VsZCBjb21wZXRlIGZvciB0aGUgb25DaGVja0dhbWVSZXN1bHQgaG9vay5cbiAqL1xuaW1wb3J0IHsgUFJFU0VUX1JFR0lTVFJZIH0gZnJvbSBcIi4vcmVnaXN0cnkuanNcIjtcbmltcG9ydCB0eXBlIHsgUGllY2VDb2xvciB9IGZyb20gXCIuLi9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgR2FtZVJlc3VsdCB9IGZyb20gXCIuLi9lbmdpbmUuanNcIjtcblxuaW50ZXJmYWNlIENhcHR1cmVUb1dpblN0YXRlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICB3aW5uZXI6IFBpZWNlQ29sb3I7XG59XG5cblBSRVNFVF9SRUdJU1RSWS5yZWdpc3Rlcih7XG4gIGlkOiBcImNhcHR1cmUtdG8td2luXCIsXG4gIG5hbWU6IFwiRmlyc3QgQmxvb2RcIixcbiAgZGVzY3JpcHRpb246XG4gICAgXCJUaGUgZmlyc3QgcGxheWVyIHRvIGNhcHR1cmUgYW55IGVuZW15IHBpZWNlIHdpbnMgdGhlIGdhbWUgaW1tZWRpYXRlbHkuIE1ha2VzIGV2ZXJ5IHBpZWNlIHByZWNpb3VzLlwiLFxuICBpbmNvbXBhdGlibGVXaXRoOiBbXCJsYXN0LXBpZWNlLXN0YW5kaW5nXCJdLFxuICByZXF1aXJlczogW10sXG5cbiAgb25CZWZvcmVDYXB0dXJlKHsgZW5naW5lLCBhdHRhY2tlciB9KSB7XG4gICAgY29uc3Qgc3RhdGUgPSBlbmdpbmUucHJlc2V0U3RhdGU8Q2FwdHVyZVRvV2luU3RhdGU+KFwiY2FwdHVyZS10by13aW5cIik7XG4gICAgLy8gT25seSByZWNvcmQgdGhlIEZJUlNUIGNhcHR1cmUg4oCUIG9uY2Ugc2V0LCBuZXZlciBvdmVyd3JpdGUgc29cbiAgICAvLyBtdWx0aS1jYXB0dXJlIGVkZ2UgY2FzZXMgaW4gdGhlIHNhbWUgYXBwbHlNb3ZlIGRvbid0IGRyaWZ0LlxuICAgIGlmIChzdGF0ZS5oYXMoXCJ3aW5uZXJcIikpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbG9yRmFjdCA9IGVuZ2luZS5zZXNzaW9uXG4gICAgICAuYWxsRmFjdHMoKVxuICAgICAgLmZpbmQoKGYpID0+IGYuaWQgPT09IGF0dGFja2VyICYmIGYuYXR0ciA9PT0gXCJDb2xvclwiKTtcbiAgICBpZiAoIWNvbG9yRmFjdCkgcmV0dXJuO1xuICAgIHN0YXRlLnNldChcIndpbm5lclwiLCBjb2xvckZhY3QudmFsdWUgYXMgUGllY2VDb2xvcik7XG4gICAgLy8gRG9uJ3QgY29uc3VtZSDigJQgbGV0IHRoZSBjYXB0dXJlIHJlc29sdmUgbm9ybWFsbHkgc28gdGhlIGJvYXJkXG4gICAgLy8gdmlzaWJseSByZWZsZWN0cyB0aGUga2lsbGluZyBibG93LlxuICB9LFxuXG4gIG9uQ2hlY2tHYW1lUmVzdWx0KHsgZW5naW5lIH0pOiBHYW1lUmVzdWx0IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzdGF0ZSA9IGVuZ2luZS5wcmVzZXRTdGF0ZTxDYXB0dXJlVG9XaW5TdGF0ZT4oXCJjYXB0dXJlLXRvLXdpblwiKTtcbiAgICBjb25zdCB3aW5uZXIgPSBzdGF0ZS5nZXQoXCJ3aW5uZXJcIik7XG4gICAgaWYgKHdpbm5lciA9PT0gXCJ3aGl0ZVwiKSByZXR1cm4gXCJ3aGl0ZS13aW5zXCI7XG4gICAgaWYgKHdpbm5lciA9PT0gXCJibGFja1wiKSByZXR1cm4gXCJibGFjay13aW5zXCI7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSxcblxuICAvLyBObyBleHBsaWNpdCBvbkRlYWN0aXZhdGUgbmVlZGVkOiB0aGUgZW5naW5lIGF1dG9tYXRpY2FsbHkgY2xlYXJzXG4gIC8vIHByZXNldC1zdGF0ZSBmb3IgdGhpcyBpZCB2aWEgY2xlYXJQcmVzZXRTdGF0ZSB3aGVuIHdlIGdvIGluYWN0aXZlLlxufSk7XG4iXSwiZmlsZSI6Ii9zcmMvcHJlc2V0cy9jYXB0dXJlLXRvLXdpbi50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/89ac0a6d5b766ba928f3c6d8c1164a768e7ff475 b/7xOfJqsDU787fe61oSCq1/web/89ac0a6d5b766ba928f3c6d8c1164a768e7ff475 deleted file mode 100644 index ebe9b30..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/89ac0a6d5b766ba928f3c6d8c1164a768e7ff475 +++ /dev/null @@ -1,73 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "rookCandidates", { enumerable: true, configurable: true, get(){ try { return rookCandidates } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "bishopCandidates", { enumerable: true, configurable: true, get(){ try { return bishopCandidates } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "queenCandidates", { enumerable: true, configurable: true, get(){ try { return queenCandidates } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "knightCandidates", { enumerable: true, configurable: true, get(){ try { return knightCandidates } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "kingCandidates", { enumerable: true, configurable: true, get(){ try { return kingCandidates } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "pawnSingleAdvance", { enumerable: true, configurable: true, get(){ try { return pawnSingleAdvance } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "pawnDoubleAdvance", { enumerable: true, configurable: true, get(){ try { return pawnDoubleAdvance } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "pawnCaptureSqares", { enumerable: true, configurable: true, get(){ try { return pawnCaptureSqares } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["slidingSquares","knightSquares","kingSquares","rankOf","fileOf"]}); - - - - - - -function rookCandidates(from) { - return [ - (0,__vite_ssr_import_0__.slidingSquares)(from, 1, 0), - // right - (0,__vite_ssr_import_0__.slidingSquares)(from, -1, 0), - // left - (0,__vite_ssr_import_0__.slidingSquares)(from, 0, 1), - // up - (0,__vite_ssr_import_0__.slidingSquares)(from, 0, -1) - // down - ]; -}; -function bishopCandidates(from) { - return [ - (0,__vite_ssr_import_0__.slidingSquares)(from, 1, 1), - // up-right - (0,__vite_ssr_import_0__.slidingSquares)(from, 1, -1), - // down-right - (0,__vite_ssr_import_0__.slidingSquares)(from, -1, 1), - // up-left - (0,__vite_ssr_import_0__.slidingSquares)(from, -1, -1) - // down-left - ]; -}; -function queenCandidates(from) { - return [...rookCandidates(from), ...bishopCandidates(from)]; -}; -function knightCandidates(from) { - return (0,__vite_ssr_import_0__.knightSquares)(from); -}; -function kingCandidates(from) { - return (0,__vite_ssr_import_0__.kingSquares)(from); -}; -function pawnSingleAdvance(from, color) { - const rank = (0,__vite_ssr_import_0__.rankOf)(from); - const targetRank = color === "white" ? rank + 1 : rank - 1; - if (targetRank < 0 || targetRank > 7) return null; - return from + (color === "white" ? 8 : -8); -}; -function pawnDoubleAdvance(from, color) { - const rank = (0,__vite_ssr_import_0__.rankOf)(from); - const homeRank = color === "white" ? 1 : 6; - if (rank !== homeRank) return null; - return from + (color === "white" ? 16 : -16); -}; -function pawnCaptureSqares(from, color) { - const rank = (0,__vite_ssr_import_0__.rankOf)(from); - const targetRank = color === "white" ? rank + 1 : rank - 1; - if (targetRank < 0 || targetRank > 7) return []; - const file = (0,__vite_ssr_import_0__.fileOf)(from); - const squares = []; - if (file > 0) squares.push(from + (color === "white" ? 7 : -9)); - if (file < 7) squares.push(from + (color === "white" ? 9 : -7)); - return squares; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFXQTs7Ozs7OztBQWlCTyxTQUFTLGVBQWUsTUFBMEI7QUFDdkQsU0FBTztBQUFBLE9BQ0wsc0NBQWUsTUFBTSxHQUFHLENBQUM7QUFBQTtBQUFBLE9BQ3pCLHNDQUFlLE1BQU0sSUFBSSxDQUFDO0FBQUE7QUFBQSxPQUMxQixzQ0FBZSxNQUFNLEdBQUcsQ0FBQztBQUFBO0FBQUEsT0FDekIsc0NBQWUsTUFBTSxHQUFHLEVBQUU7QUFBQTtBQUFBLEVBQzVCO0FBQ0Y7QUFHTyxTQUFTLGlCQUFpQixNQUEwQjtBQUN6RCxTQUFPO0FBQUEsT0FDTCxzQ0FBZSxNQUFNLEdBQUcsQ0FBQztBQUFBO0FBQUEsT0FDekIsc0NBQWUsTUFBTSxHQUFHLEVBQUU7QUFBQTtBQUFBLE9BQzFCLHNDQUFlLE1BQU0sSUFBSSxDQUFDO0FBQUE7QUFBQSxPQUMxQixzQ0FBZSxNQUFNLElBQUksRUFBRTtBQUFBO0FBQUEsRUFDN0I7QUFDRjtBQUdPLFNBQVMsZ0JBQWdCLE1BQTBCO0FBQ3hELFNBQU8sQ0FBQyxHQUFHLGVBQWUsSUFBSSxHQUFHLEdBQUcsaUJBQWlCLElBQUksQ0FBQztBQUM1RDtBQUtPLFNBQVMsaUJBQWlCLE1BQXdCO0FBQ3ZELFlBQU8scUNBQWMsSUFBSTtBQUMzQjtBQUdPLFNBQVMsZUFBZSxNQUF3QjtBQUNyRCxZQUFPLG1DQUFZLElBQUk7QUFDekI7QUFRTyxTQUFTLGtCQUFrQixNQUFjLE9BQWtDO0FBQ2hGLFFBQU0sVUFBTyw4QkFBTyxJQUFJO0FBQ3hCLFFBQU0sYUFBYSxVQUFVLFVBQVUsT0FBTyxJQUFJLE9BQU87QUFDekQsTUFBSSxhQUFhLEtBQUssYUFBYSxFQUFHLFFBQU87QUFDN0MsU0FBUSxRQUFRLFVBQVUsVUFBVSxJQUFJO0FBQzFDO0FBT08sU0FBUyxrQkFBa0IsTUFBYyxPQUFrQztBQUNoRixRQUFNLFVBQU8sOEJBQU8sSUFBSTtBQUN4QixRQUFNLFdBQVcsVUFBVSxVQUFVLElBQUk7QUFDekMsTUFBSSxTQUFTLFNBQVUsUUFBTztBQUM5QixTQUFRLFFBQVEsVUFBVSxVQUFVLEtBQUs7QUFDM0M7QUFPTyxTQUFTLGtCQUFrQixNQUFjLE9BQTZCO0FBQzNFLFFBQU0sVUFBTyw4QkFBTyxJQUFJO0FBQ3hCLFFBQU0sYUFBYSxVQUFVLFVBQVUsT0FBTyxJQUFJLE9BQU87QUFDekQsTUFBSSxhQUFhLEtBQUssYUFBYSxFQUFHLFFBQU8sQ0FBQztBQUM5QyxRQUFNLFVBQU8sOEJBQU8sSUFBSTtBQUN4QixRQUFNLFVBQW9CLENBQUM7QUFDM0IsTUFBSSxPQUFPLEVBQUcsU0FBUSxLQUFNLFFBQVEsVUFBVSxVQUFVLElBQUksR0FBYztBQUMxRSxNQUFJLE9BQU8sRUFBRyxTQUFRLEtBQU0sUUFBUSxVQUFVLFVBQVUsSUFBSSxHQUFjO0FBQzFFLFNBQU87QUFDVCIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsicHJpbWl0aXZlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1vdmVtZW50IHByaW1pdGl2ZSBydWxlcyBmb3IgQHBhcmF0eXBlL2NoZXNzLlxuICogRWFjaCBwcmltaXRpdmUgY29tcHV0ZXMgY2FuZGlkYXRlIHRhcmdldCBzcXVhcmVzIGZvciBhIHBpZWNlIHR5cGUuXG4gKiBUaGVzZSBhcmUgdXNlZCBieSBoaWdoZXItbGV2ZWwgcnVsZSBmaWxlcyAocGF3bi50cywga25pZ2h0LnRzLCBldGMuKVxuICpcbiAqIE5PVEU6IFRoZXNlIGFyZSBDQU5ESURBVEUgbW92ZXMgb25seSDigJQgdGhleSBkbyBub3QgY2hlY2s6XG4gKiAtIFdoZXRoZXIgdGFyZ2V0IHNxdWFyZXMgYXJlIG9jY3VwaWVkIChjYXB0dXJlL2Jsb2NraW5nIGhhbmRsZWQgaW4gUDIuOSspXG4gKiAtIFdoZXRoZXIgdGhlIG1vdmUgd291bGQgbGVhdmUgdGhlIGtpbmcgaW4gY2hlY2sgKFAyLjE4KVxuICogLSBUdXJuIG9yZGVyIChQMi4xMylcbiAqL1xuaW1wb3J0IHR5cGUgeyBQaWVjZUNvbG9yLCBTcXVhcmUgfSBmcm9tIFwiLi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQge1xuICBzbGlkaW5nU3F1YXJlcyxcbiAga25pZ2h0U3F1YXJlcyBhcyBrbmlnaHRUYXJnZXRzLFxuICBraW5nU3F1YXJlcyBhcyBraW5nVGFyZ2V0cyxcbiAgcmFua09mLFxuICBmaWxlT2YsXG59IGZyb20gXCIuLi9jb29yZC5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbmRpZGF0ZU1vdmUge1xuICByZWFkb25seSBwaWVjZUlkOiBudW1iZXI7XG4gIHJlYWRvbmx5IGZyb206IFNxdWFyZTtcbiAgcmVhZG9ubHkgdG86IFNxdWFyZTtcbn1cblxuLy8g4pSA4pSA4pSAIFNsaWRpbmcgcGllY2UgaGVscGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIEFsbCBjYW5kaWRhdGUgc3F1YXJlcyBmb3IgYSByb29rICg0IG9ydGhvZ29uYWwgcmF5cykuICovXG5leHBvcnQgZnVuY3Rpb24gcm9va0NhbmRpZGF0ZXMoZnJvbTogU3F1YXJlKTogU3F1YXJlW11bXSB7XG4gIHJldHVybiBbXG4gICAgc2xpZGluZ1NxdWFyZXMoZnJvbSwgMSwgMCksICAgLy8gcmlnaHRcbiAgICBzbGlkaW5nU3F1YXJlcyhmcm9tLCAtMSwgMCksICAvLyBsZWZ0XG4gICAgc2xpZGluZ1NxdWFyZXMoZnJvbSwgMCwgMSksICAgLy8gdXBcbiAgICBzbGlkaW5nU3F1YXJlcyhmcm9tLCAwLCAtMSksICAvLyBkb3duXG4gIF07XG59XG5cbi8qKiBBbGwgY2FuZGlkYXRlIHNxdWFyZXMgZm9yIGEgYmlzaG9wICg0IGRpYWdvbmFsIHJheXMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpc2hvcENhbmRpZGF0ZXMoZnJvbTogU3F1YXJlKTogU3F1YXJlW11bXSB7XG4gIHJldHVybiBbXG4gICAgc2xpZGluZ1NxdWFyZXMoZnJvbSwgMSwgMSksICAgLy8gdXAtcmlnaHRcbiAgICBzbGlkaW5nU3F1YXJlcyhmcm9tLCAxLCAtMSksICAvLyBkb3duLXJpZ2h0XG4gICAgc2xpZGluZ1NxdWFyZXMoZnJvbSwgLTEsIDEpLCAgLy8gdXAtbGVmdFxuICAgIHNsaWRpbmdTcXVhcmVzKGZyb20sIC0xLCAtMSksIC8vIGRvd24tbGVmdFxuICBdO1xufVxuXG4vKiogQWxsIGNhbmRpZGF0ZSBzcXVhcmVzIGZvciBhIHF1ZWVuICg4IHJheXMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHF1ZWVuQ2FuZGlkYXRlcyhmcm9tOiBTcXVhcmUpOiBTcXVhcmVbXVtdIHtcbiAgcmV0dXJuIFsuLi5yb29rQ2FuZGlkYXRlcyhmcm9tKSwgLi4uYmlzaG9wQ2FuZGlkYXRlcyhmcm9tKV07XG59XG5cbi8vIOKUgOKUgOKUgCBMZWFwIHBpZWNlIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBLbmlnaHQgY2FuZGlkYXRlIHNxdWFyZXMgKGFscmVhZHkgZmlsdGVycyBvZmYtYm9hcmQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtuaWdodENhbmRpZGF0ZXMoZnJvbTogU3F1YXJlKTogU3F1YXJlW10ge1xuICByZXR1cm4ga25pZ2h0VGFyZ2V0cyhmcm9tKTtcbn1cblxuLyoqIEtpbmcgY2FuZGlkYXRlIHNxdWFyZXMgKGFscmVhZHkgZmlsdGVycyBvZmYtYm9hcmQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtpbmdDYW5kaWRhdGVzKGZyb206IFNxdWFyZSk6IFNxdWFyZVtdIHtcbiAgcmV0dXJuIGtpbmdUYXJnZXRzKGZyb20pO1xufVxuXG4vLyDilIDilIDilIAgUGF3biBoZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFBhd24gc2luZ2xlLWFkdmFuY2UgdGFyZ2V0IChubyBjYXB0dXJlKS5cbiAqIFJldHVybnMgbnVsbCBpZiBwYXduIGlzIG9uIHRoZSBiYWNrIHJhbmsgKGludmFsaWQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGF3blNpbmdsZUFkdmFuY2UoZnJvbTogU3F1YXJlLCBjb2xvcjogUGllY2VDb2xvcik6IFNxdWFyZSB8IG51bGwge1xuICBjb25zdCByYW5rID0gcmFua09mKGZyb20pO1xuICBjb25zdCB0YXJnZXRSYW5rID0gY29sb3IgPT09IFwid2hpdGVcIiA/IHJhbmsgKyAxIDogcmFuayAtIDE7XG4gIGlmICh0YXJnZXRSYW5rIDwgMCB8fCB0YXJnZXRSYW5rID4gNykgcmV0dXJuIG51bGw7XG4gIHJldHVybiAoZnJvbSArIChjb2xvciA9PT0gXCJ3aGl0ZVwiID8gOCA6IC04KSkgYXMgU3F1YXJlO1xufVxuXG4vKipcbiAqIFBhd24gZG91YmxlLWFkdmFuY2UgdGFyZ2V0IChmcm9tIGhvbWUgcmFuayBvbmx5KS5cbiAqIFdoaXRlIGhvbWUgcmFuayA9IHJhbmsgMSAoc3F1YXJlcyA4LTE1KVxuICogQmxhY2sgaG9tZSByYW5rID0gcmFuayA2IChzcXVhcmVzIDQ4LTU1KVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGF3bkRvdWJsZUFkdmFuY2UoZnJvbTogU3F1YXJlLCBjb2xvcjogUGllY2VDb2xvcik6IFNxdWFyZSB8IG51bGwge1xuICBjb25zdCByYW5rID0gcmFua09mKGZyb20pO1xuICBjb25zdCBob21lUmFuayA9IGNvbG9yID09PSBcIndoaXRlXCIgPyAxIDogNjtcbiAgaWYgKHJhbmsgIT09IGhvbWVSYW5rKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIChmcm9tICsgKGNvbG9yID09PSBcIndoaXRlXCIgPyAxNiA6IC0xNikpIGFzIFNxdWFyZTtcbn1cblxuLyoqXG4gKiBQYXduIGRpYWdvbmFsIGNhcHR1cmUgc3F1YXJlcyAoMSBvciAyLCB3aXRoaW4gYm9hcmQgYm91bmRzKS5cbiAqIFBhd25zIGNhcHR1cmUgZGlhZ29uYWxseSBmb3J3YXJkIOKAlCB0aGlzIHJldHVybnMgdGhlIHNxdWFyZXMsIG5vdCB3aGV0aGVyXG4gKiBhbiBlbmVteSBvY2N1cGllcyB0aGVtIChjYXB0dXJlIHZhbGlkYXRpb24gaXMgaW4gUDIuOSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXduQ2FwdHVyZVNxYXJlcyhmcm9tOiBTcXVhcmUsIGNvbG9yOiBQaWVjZUNvbG9yKTogU3F1YXJlW10ge1xuICBjb25zdCByYW5rID0gcmFua09mKGZyb20pO1xuICBjb25zdCB0YXJnZXRSYW5rID0gY29sb3IgPT09IFwid2hpdGVcIiA/IHJhbmsgKyAxIDogcmFuayAtIDE7XG4gIGlmICh0YXJnZXRSYW5rIDwgMCB8fCB0YXJnZXRSYW5rID4gNykgcmV0dXJuIFtdO1xuICBjb25zdCBmaWxlID0gZmlsZU9mKGZyb20pO1xuICBjb25zdCBzcXVhcmVzOiBTcXVhcmVbXSA9IFtdO1xuICBpZiAoZmlsZSA+IDApIHNxdWFyZXMucHVzaCgoZnJvbSArIChjb2xvciA9PT0gXCJ3aGl0ZVwiID8gNyA6IC05KSkgYXMgU3F1YXJlKTsgIC8vIGxlZnQgZGlhZ29uYWxcbiAgaWYgKGZpbGUgPCA3KSBzcXVhcmVzLnB1c2goKGZyb20gKyAoY29sb3IgPT09IFwid2hpdGVcIiA/IDkgOiAtNykpIGFzIFNxdWFyZSk7ICAvLyByaWdodCBkaWFnb25hbFxuICByZXR1cm4gc3F1YXJlcztcbn1cbiJdLCJmaWxlIjoiL3NyYy9ydWxlcy9wcmltaXRpdmVzLnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/8a8fc9a82b64efffeb46c5583041b6b744577506 b/7xOfJqsDU787fe61oSCq1/web/8a8fc9a82b64efffeb46c5583041b6b744577506 deleted file mode 100644 index a61950a..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/8a8fc9a82b64efffeb46c5583041b6b744577506 +++ /dev/null @@ -1,73 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "defineSchema", { enumerable: true, configurable: true, get(){ try { return defineSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "fact", { enumerable: true, configurable: true, get(){ try { return fact } catch {} }}); -/** - * @paratype/rete — Schema and Fact primitives - * - * Implements the EAV (Entity-Attribute-Value) fact model specified in - * `packages/rete/SPEC.md §Fact Model` and the branded id type from §ID Authority. - * - * Working memory stores triples `(id: EntityId, attr: AttrKey, value: AttrValue)`. - * Each `(id, attr)` pair stores exactly one value; insertion over an existing pair - * is an update (see §Match Refraction). - * - * The schema `S` is a plain TypeScript object-type that maps attribute names to - * their value types. The schema is the single source of truth for attribute - * typing and is consumed by both the public API (for inference at call sites) - * and by JSON rule validation (see §JSON Rule Schema). - */ -/** - * Define a schema descriptor for use with a Session. - * - * The schema is a type-level contract: its runtime value is a lightweight - * descriptor that carries the type parameter `S` for inference and optionally - * records the attribute-name list for introspection. - * - * @example - * ```ts - * interface GameSchema { - * Health: number; - * Position: string; - * Active: boolean; - * } - * const schema = defineSchema({ - * keys: ["Health", "Position", "Active"], - * }); - * ``` - */ -function defineSchema(options = {}) { - const seen = new Set(); - const deduped = []; - const input = options.keys ?? []; - for (const k of input) { - if (!seen.has(k)) { - seen.add(k); - deduped.push(k); - } - }; - const schema = { - // `_type` is intentionally omitted at runtime; it exists only in the type - // system as a phantom carrier for the generic parameter `S`. - keys: Object.freeze(deduped), - }; - return Object.freeze(schema); -}; -/** - * Construct a typed, frozen fact triple. - * - * The generic parameters are explicit to preserve the literal `attr` type in - * the returned fact, which is essential for downstream discrimination against - * {@link Fact}``. - * - * @example - * ```ts - * const id = session.nextId(); - * const f = fact(id, "Health", 100); - * // f: { id: EntityId; attr: "Health"; value: number } - * ``` - */ -function fact(id, attr, value) { - return Object.freeze({ id, attr, value }); -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7O0FBd0ZBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUJNLFNBQVUsWUFBWSxDQUMxQixVQUFrQyxFQUFFO0lBRXBDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFVO0lBQzlCLE1BQU0sT0FBTyxHQUE0QixFQUFFO0lBQzNDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRTtJQUNoQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEtBQUssRUFBRTtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNoQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2pCO0lBQ0Y7SUFDQSxNQUFNLE1BQU0sR0FBYztRQUN4QjtRQUNBO1FBQ0EsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFvQztLQUNoRTtJQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDOUI7QUFFQTs7Ozs7Ozs7Ozs7Ozs7QUFjTSxTQUFVLElBQUksQ0FDbEIsRUFBWSxFQUNaLElBQU8sRUFDUCxLQUFXO0lBRVgsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUMzQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3NjaGVtYS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwYXJhdHlwZS9yZXRlIOKAlCBTY2hlbWEgYW5kIEZhY3QgcHJpbWl0aXZlc1xuICpcbiAqIEltcGxlbWVudHMgdGhlIEVBViAoRW50aXR5LUF0dHJpYnV0ZS1WYWx1ZSkgZmFjdCBtb2RlbCBzcGVjaWZpZWQgaW5cbiAqIGBwYWNrYWdlcy9yZXRlL1NQRUMubWQgwqdGYWN0IE1vZGVsYCBhbmQgdGhlIGJyYW5kZWQgaWQgdHlwZSBmcm9tIMKnSUQgQXV0aG9yaXR5LlxuICpcbiAqIFdvcmtpbmcgbWVtb3J5IHN0b3JlcyB0cmlwbGVzIGAoaWQ6IEVudGl0eUlkLCBhdHRyOiBBdHRyS2V5LCB2YWx1ZTogQXR0clZhbHVlKWAuXG4gKiBFYWNoIGAoaWQsIGF0dHIpYCBwYWlyIHN0b3JlcyBleGFjdGx5IG9uZSB2YWx1ZTsgaW5zZXJ0aW9uIG92ZXIgYW4gZXhpc3RpbmcgcGFpclxuICogaXMgYW4gdXBkYXRlIChzZWUgwqdNYXRjaCBSZWZyYWN0aW9uKS5cbiAqXG4gKiBUaGUgc2NoZW1hIGBTYCBpcyBhIHBsYWluIFR5cGVTY3JpcHQgb2JqZWN0LXR5cGUgdGhhdCBtYXBzIGF0dHJpYnV0ZSBuYW1lcyB0b1xuICogdGhlaXIgdmFsdWUgdHlwZXMuIFRoZSBzY2hlbWEgaXMgdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGF0dHJpYnV0ZVxuICogdHlwaW5nIGFuZCBpcyBjb25zdW1lZCBieSBib3RoIHRoZSBwdWJsaWMgQVBJIChmb3IgaW5mZXJlbmNlIGF0IGNhbGwgc2l0ZXMpXG4gKiBhbmQgYnkgSlNPTiBydWxlIHZhbGlkYXRpb24gKHNlZSDCp0pTT04gUnVsZSBTY2hlbWEpLlxuICovXG5cbi8qKlxuICogQ29tcGlsZS10aW1lIGJyYW5kZWQgZW50aXR5IGlkZW50aWZpZXIuXG4gKlxuICogQXQgcnVudGltZSwgYEVudGl0eUlkYCBpcyBhIHBsYWluIGBudW1iZXJgLiBUaGUgYnJhbmQgZXhpc3RzIG9ubHkgaW4gdGhlXG4gKiB0eXBlIHN5c3RlbSB0byBwcmV2ZW50IGFjY2lkZW50YWwgaW50ZXJjaGFuZ2Ugd2l0aCBvcmRpbmFyeSBudW1iZXJzIGF0XG4gKiBjYWxsIHNpdGVzLiBDb25zdHJ1Y3Qgb25lIGJ5IGNhc3RpbmcgYSBmcmVzaGx5LW1pbnRlZCBudW1iZXI6XG4gKiBgc2Vzc2lvbi5uZXh0SWQoKWAgKGluIHN0YW5kYWxvbmUgc2Vzc2lvbnMpIG9yIHRoZSBzZXJ2ZXIgKGluIG11bHRpcGxheWVyKS5cbiAqL1xuZXhwb3J0IHR5cGUgRW50aXR5SWQgPSBudW1iZXIgJiB7IHJlYWRvbmx5IF9fYnJhbmQ6IFwiRW50aXR5SWRcIiB9O1xuXG4vKipcbiAqIFNoYXBlIG9mIGEgc2NoZW1hIHR5cGUgcGFyYW1ldGVyLlxuICpcbiAqIEEgc2NoZW1hIG1hcHMgYXR0cmlidXRlIG5hbWUgKHN0cmluZyBrZXkpIHRvIHRoZSBUeXBlU2NyaXB0IHR5cGUgb2YgdGhhdFxuICogYXR0cmlidXRlJ3MgdmFsdWUuIFVzZXJzIGRvIG5vdCBjb25zdHJ1Y3QgYFNjaGVtYUtpbmRgIGRpcmVjdGx5OyB0aGV5IHBhc3NcbiAqIGFuIGludGVyZmFjZSBhcyBhIGdlbmVyaWMgYXJndW1lbnQgdG8ge0BsaW5rIGRlZmluZVNjaGVtYX0uXG4gKi9cbmV4cG9ydCB0eXBlIFNjaGVtYUtpbmQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuLyoqXG4gKiBEaXNjcmltaW5hdGVkIHVuaW9uIG9mIGFsbCB2YWxpZCBmYWN0IHRyaXBsZXMgZm9yIHNjaGVtYSBgU2AuXG4gKlxuICogRm9yIGEgc2NoZW1hIGB7IEhlYWx0aDogbnVtYmVyOyBQb3NpdGlvbjogc3RyaW5nIH1gLCBgRmFjdDxTPmAgZXZhbHVhdGVzIHRvXG4gKiBgeyBpZDogRW50aXR5SWQ7IGF0dHI6IFwiSGVhbHRoXCI7IHZhbHVlOiBudW1iZXIgfVxuICogIHwgeyBpZDogRW50aXR5SWQ7IGF0dHI6IFwiUG9zaXRpb25cIjsgdmFsdWU6IHN0cmluZyB9YC5cbiAqXG4gKiBOYXJyb3dpbmcgb24gYGF0dHJgIHJlZmluZXMgYHZhbHVlYCB0byB0aGUgY29ycmVzcG9uZGluZyBzY2hlbWEgdHlwZS5cbiAqL1xuZXhwb3J0IHR5cGUgRmFjdDxTIGV4dGVuZHMgU2NoZW1hS2luZD4gPSB7XG4gIFtLIGluIGtleW9mIFMgJiBzdHJpbmddOiB7XG4gICAgcmVhZG9ubHkgaWQ6IEVudGl0eUlkO1xuICAgIHJlYWRvbmx5IGF0dHI6IEs7XG4gICAgcmVhZG9ubHkgdmFsdWU6IFNbS107XG4gIH07XG59W2tleW9mIFMgJiBzdHJpbmddO1xuXG4vKipcbiAqIFJ1bnRpbWUgZGVzY3JpcHRvciByZXR1cm5lZCBieSB7QGxpbmsgZGVmaW5lU2NoZW1hfS5cbiAqXG4gKiBUaGUgcGhhbnRvbSBgX3R5cGVgIGZpZWxkIGNhcnJpZXMgdGhlIHNjaGVtYSB0eXBlIGBTYCB0aHJvdWdoIGluZmVyZW5jZSBzb1xuICogdGhhdCBkb3duc3RyZWFtIEFQSXMgKFNlc3Npb24sIHJ1bGVzLCBxdWVyaWVzKSBjYW4gcmVjb3ZlciB0aGUgdXNlcidzXG4gKiBhdHRyaWJ1dGUgdHlwaW5nIHdpdGhvdXQgcmVxdWlyaW5nIGl0IHRvIGJlIHJlLXNwZWNpZmllZC4gSXQgaXMgZGVjbGFyZWRcbiAqIG9wdGlvbmFsIGF0IHJ1bnRpbWUgYW5kIGlzIG5ldmVyIHBvcHVsYXRlZCB3aXRoIGEgdmFsdWU7IGF0IHRoZSB0eXBlIGxldmVsXG4gKiBpdCBjb25zdHJhaW5zIGBTYCB0aHJvdWdoIHZhcmlhbmNlLlxuICpcbiAqIFRoZSBga2V5c2AgYXJyYXkgaXMgYSBmcm96ZW4sIGRlZHVwbGljYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZSBuYW1lcyBmb3JcbiAqIHJ1bnRpbWUgaW50cm9zcGVjdGlvbiAoZS5nLiBKU09OIHJ1bGUgdmFsaWRhdGlvbiwgZGVidWcgZHVtcHMpLiBga2V5c2AgTUFZXG4gKiBiZSBlbXB0eSBpZiB0aGUgY2FsbGVyIG9ubHkgbmVlZHMgdHlwZS1sZXZlbCBzY2hlbWEgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hPFMgZXh0ZW5kcyBTY2hlbWFLaW5kPiB7XG4gIC8qKlxuICAgKiBQaGFudG9tIHR5cGUgY2Fycmllci4gTmV2ZXIgcmVhZCBhdCBydW50aW1lLiBQcmVzZW50IHNvbGVseSBzbyB0aGF0IHRoZVxuICAgKiBnZW5lcmljIHBhcmFtZXRlciBgU2AgcGFydGljaXBhdGVzIGluIHR5cGUgaW5mZXJlbmNlIHRocm91Z2ggdGhlIHJldHVyblxuICAgKiB2YWx1ZSBvZiB7QGxpbmsgZGVmaW5lU2NoZW1hfS5cbiAgICovXG4gIHJlYWRvbmx5IF90eXBlPzogUztcbiAgLyoqIEZyb3plbiwgZGVkdXBsaWNhdGVkIGF0dHJpYnV0ZS1uYW1lIGxpc3QgaW4gZmlyc3Qtc2VlbiBvcmRlci4gKi9cbiAgcmVhZG9ubHkga2V5czogUmVhZG9ubHlBcnJheTxrZXlvZiBTICYgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZGVmaW5lU2NoZW1hfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZpbmVTY2hlbWFPcHRpb25zPFMgZXh0ZW5kcyBTY2hlbWFLaW5kPiB7XG4gIC8qKlxuICAgKiBBdHRyaWJ1dGUgbmFtZXMgdG8gcmVjb3JkIGF0IHJ1bnRpbWUuIER1cGxpY2F0ZXMgYXJlIHJlbW92ZWQsIGZpcnN0LXNlZW5cbiAgICogb3JkZXIgaXMgcHJlc2VydmVkLiBJZiBvbWl0dGVkLCBga2V5c2AgZGVmYXVsdHMgdG8gYW4gZW1wdHkgYXJyYXkg4oCUIHRoZVxuICAgKiBzY2hlbWEgZGVzY3JpcHRvciBzdGlsbCBjYXJyaWVzIGZ1bGwgdHlwZSBpbmZvcm1hdGlvbiB2aWEgaXRzIGdlbmVyaWMuXG4gICAqL1xuICByZWFkb25seSBrZXlzPzogUmVhZG9ubHlBcnJheTxrZXlvZiBTICYgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBEZWZpbmUgYSBzY2hlbWEgZGVzY3JpcHRvciBmb3IgdXNlIHdpdGggYSBTZXNzaW9uLlxuICpcbiAqIFRoZSBzY2hlbWEgaXMgYSB0eXBlLWxldmVsIGNvbnRyYWN0OiBpdHMgcnVudGltZSB2YWx1ZSBpcyBhIGxpZ2h0d2VpZ2h0XG4gKiBkZXNjcmlwdG9yIHRoYXQgY2FycmllcyB0aGUgdHlwZSBwYXJhbWV0ZXIgYFNgIGZvciBpbmZlcmVuY2UgYW5kIG9wdGlvbmFsbHlcbiAqIHJlY29yZHMgdGhlIGF0dHJpYnV0ZS1uYW1lIGxpc3QgZm9yIGludHJvc3BlY3Rpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbnRlcmZhY2UgR2FtZVNjaGVtYSB7XG4gKiAgIEhlYWx0aDogbnVtYmVyO1xuICogICBQb3NpdGlvbjogc3RyaW5nO1xuICogICBBY3RpdmU6IGJvb2xlYW47XG4gKiB9XG4gKiBjb25zdCBzY2hlbWEgPSBkZWZpbmVTY2hlbWE8R2FtZVNjaGVtYT4oe1xuICogICBrZXlzOiBbXCJIZWFsdGhcIiwgXCJQb3NpdGlvblwiLCBcIkFjdGl2ZVwiXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVTY2hlbWE8UyBleHRlbmRzIFNjaGVtYUtpbmQ+KFxuICBvcHRpb25zOiBEZWZpbmVTY2hlbWFPcHRpb25zPFM+ID0ge31cbik6IFNjaGVtYTxTPiB7XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgZGVkdXBlZDogQXJyYXk8a2V5b2YgUyAmIHN0cmluZz4gPSBbXTtcbiAgY29uc3QgaW5wdXQgPSBvcHRpb25zLmtleXMgPz8gW107XG4gIGZvciAoY29uc3QgayBvZiBpbnB1dCkge1xuICAgIGlmICghc2Vlbi5oYXMoaykpIHtcbiAgICAgIHNlZW4uYWRkKGspO1xuICAgICAgZGVkdXBlZC5wdXNoKGspO1xuICAgIH1cbiAgfVxuICBjb25zdCBzY2hlbWE6IFNjaGVtYTxTPiA9IHtcbiAgICAvLyBgX3R5cGVgIGlzIGludGVudGlvbmFsbHkgb21pdHRlZCBhdCBydW50aW1lOyBpdCBleGlzdHMgb25seSBpbiB0aGUgdHlwZVxuICAgIC8vIHN5c3RlbSBhcyBhIHBoYW50b20gY2FycmllciBmb3IgdGhlIGdlbmVyaWMgcGFyYW1ldGVyIGBTYC5cbiAgICBrZXlzOiBPYmplY3QuZnJlZXplKGRlZHVwZWQpIGFzIFJlYWRvbmx5QXJyYXk8a2V5b2YgUyAmIHN0cmluZz4sXG4gIH07XG4gIHJldHVybiBPYmplY3QuZnJlZXplKHNjaGVtYSk7XG59XG5cbi8qKlxuICogQ29uc3RydWN0IGEgdHlwZWQsIGZyb3plbiBmYWN0IHRyaXBsZS5cbiAqXG4gKiBUaGUgZ2VuZXJpYyBwYXJhbWV0ZXJzIGFyZSBleHBsaWNpdCB0byBwcmVzZXJ2ZSB0aGUgbGl0ZXJhbCBgYXR0cmAgdHlwZSBpblxuICogdGhlIHJldHVybmVkIGZhY3QsIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgZG93bnN0cmVhbSBkaXNjcmltaW5hdGlvbiBhZ2FpbnN0XG4gKiB7QGxpbmsgRmFjdH1gPFM+YC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IGlkID0gc2Vzc2lvbi5uZXh0SWQoKTtcbiAqIGNvbnN0IGYgPSBmYWN0PEdhbWVTY2hlbWEsIFwiSGVhbHRoXCI+KGlkLCBcIkhlYWx0aFwiLCAxMDApO1xuICogLy8gZjogeyBpZDogRW50aXR5SWQ7IGF0dHI6IFwiSGVhbHRoXCI7IHZhbHVlOiBudW1iZXIgfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmYWN0PFMgZXh0ZW5kcyBTY2hlbWFLaW5kLCBLIGV4dGVuZHMga2V5b2YgUyAmIHN0cmluZz4oXG4gIGlkOiBFbnRpdHlJZCxcbiAgYXR0cjogSyxcbiAgdmFsdWU6IFNbS11cbik6IHsgcmVhZG9ubHkgaWQ6IEVudGl0eUlkOyByZWFkb25seSBhdHRyOiBLOyByZWFkb25seSB2YWx1ZTogU1tLXSB9IHtcbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyBpZCwgYXR0ciwgdmFsdWUgfSk7XG59XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvcmV0ZS9kaXN0L3NjaGVtYS5qcyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/90abb0845fa44a68c9b5130c8493917cf1007fc1 b/7xOfJqsDU787fe61oSCq1/web/90abb0845fa44a68c9b5130c8493917cf1007fc1 deleted file mode 100644 index a0a271a..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/90abb0845fa44a68c9b5130c8493917cf1007fc1 +++ /dev/null @@ -1,42 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/presets/registry.ts", {"importedNames":["PRESET_REGISTRY"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/rules/check.ts", {"importedNames":["isInCheck"]}); -const MAX_KING_HP = 3; -function findKing(session, color) { - const facts = session.allFacts(); - for (const f of facts) { - if (f.attr !== "PieceType" || f.value !== "king") continue; - const colorFact = facts.find((c) => c.id === f.id && c.attr === "Color"); - if (colorFact?.value === color) return f.id; - }; - return null; -} -__vite_ssr_import_0__.PRESET_REGISTRY.register({ - id: "king-heals", - name: "Regenerating King", - description: "After every half-move, the king whose turn it is to move regenerates +1 HP (max 3) — unless it's currently in check. Requires Hit Points.", - incompatibleWith: [], - requires: ["piece-hp"], - onAfterMove({ engine, mover }) { - const color = mover === "white" ? "black" : "white"; - const kingId = findKing(engine.session, color); - if (kingId === null) return; - if ((0,__vite_ssr_import_1__.isInCheck)(engine.session, color)) return; - const session = engine.session; - if (!session.contains(kingId, "Hp")) return; - const hp = session.get(kingId, "Hp"); - if (hp >= MAX_KING_HP) return; - session.insert(kingId, "Hp", hp + 1); - const kingSquare = session.get(kingId, "Position"); - if (typeof kingSquare === "number") { - engine.emitEffect({ - kind: "heal", - square: kingSquare, - ttl: 400, - data: { hp: hp + 1 } - }); - } - } -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBaUJBO0FBSUE7QUFFQSxNQUFNLGNBQWM7QUFHcEIsU0FBUyxTQUFTLFNBQWtCLE9BQW9DO0FBQ3RFLFFBQU0sUUFBUSxRQUFRLFNBQVM7QUFDL0IsYUFBVyxLQUFLLE9BQU87QUFDckIsUUFBSSxFQUFFLFNBQVMsZUFBZSxFQUFFLFVBQVUsT0FBUTtBQUNsRCxVQUFNLFlBQVksTUFBTSxLQUFLLE9BQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsT0FBTztBQUNyRSxRQUFJLFdBQVcsVUFBVSxNQUFPLFFBQU8sRUFBRTtBQUFBLEVBQzNDO0FBQ0EsU0FBTztBQUNUO0FBRUEsc0NBQWdCLFNBQVM7QUFBQSxFQUN2QixJQUFJO0FBQUEsRUFDSixNQUFNO0FBQUEsRUFDTixhQUNFO0FBQUEsRUFDRixrQkFBa0IsQ0FBQztBQUFBLEVBQ25CLFVBQVUsQ0FBQyxVQUFVO0FBQUEsRUFFckIsWUFBWSxFQUFFLFFBQVEsTUFBTSxHQUFHO0FBTTdCLFVBQU0sUUFBb0IsVUFBVSxVQUFVLFVBQVU7QUFDeEQsVUFBTSxTQUFTLFNBQVMsT0FBTyxTQUFTLEtBQUs7QUFDN0MsUUFBSSxXQUFXLEtBQU07QUFDckIsV0FBSSxpQ0FBVSxPQUFPLFNBQVMsS0FBSyxFQUFHO0FBRXRDLFVBQU0sVUFBVSxPQUFPO0FBQ3ZCLFFBQUksQ0FBQyxRQUFRLFNBQVMsUUFBUSxJQUFJLEVBQUc7QUFDckMsVUFBTSxLQUFLLFFBQVEsSUFBSSxRQUFRLElBQUk7QUFDbkMsUUFBSSxNQUFNLFlBQWE7QUFDdkIsWUFBUSxPQUFPLFFBQVEsTUFBTSxLQUFLLENBQUM7QUFJbkMsVUFBTSxhQUFhLFFBQVEsSUFBSSxRQUFRLFVBQVU7QUFDakQsUUFBSSxPQUFPLGVBQWUsVUFBVTtBQUNsQyxhQUFPLFdBQVc7QUFBQSxRQUNoQixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixLQUFLO0FBQUEsUUFDTCxNQUFNLEVBQUUsSUFBSSxLQUFLLEVBQUU7QUFBQSxNQUNyQixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFDRixDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJraW5nLWhlYWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHJlc2V0OiBga2luZy1oZWFsc2AgKFJlZ2VuZXJhdGluZyBLaW5nLCBSVUxFUy5tZCBydWxlICM5KVxuICpcbiAqIEFmdGVyIGV2ZXJ5IGhhbGYtbW92ZSwgY2hlY2sgdGhlIGtpbmcgQkVMT05HSU5HIFRPIFRIRSBOT04tTU9WRVJcbiAqIChpLmUuIHRoZSBwbGF5ZXIgYWJvdXQgdG8gbW92ZSkuIElmIGl0J3Mgbm90IGN1cnJlbnRseSBpbiBjaGVjayxcbiAqIGl0cyBIUCByZWdlbmVyYXRlcyBieSAxLCBjYXBwZWQgYXQgTUFYX0tJTkdfSFAuXG4gKlxuICogRGVzaWduIHJlYWRpbmcgb2YgUlVMRVMubWQgIzk6IFwiSWYgdGhlIEtpbmcgZW5kcyBhIHR1cm4gTk9UIGluIGNoZWNrLFxuICogaXQgZ2FpbnMgKzEgSFAuXCIgVGhlIG5hdHVyYWwgbW9tZW50IHRvIGFwcGx5IHRoaXMgaXMgQUZURVIgYSBtb3ZlXG4gKiBoYXMgYmVlbiBhcHBsaWVkIGJ1dCBCRUZPUkUgdGhlIHR1cm4gY291bnRlciBhZHZhbmNlcyBmdXJ0aGVyLiBPdXJcbiAqIGBvbkFmdGVyTW92ZWAgaG9vayBmaXJlcyBhdCB0aGF0IGV4YWN0IHBvaW50LiBXZSBoZWFsIHRoZSBLSU5HIHRoYXRcbiAqIGp1c3QgY2FtZSBvZmYgYXR0YWNrIOKAlCBpLmUuIHRoZSBub24tbW92ZXIncyBraW5nIOKAlCBiZWNhdXNlIHRoZVxuICogbW92ZXIncyBraW5nIGNvdWxkbid0IGhhdmUgYmVlbiBpbiBjaGVjayAoc2VsZi1jaGVjayBmaWx0ZXIgcHJldmVudHNcbiAqIG1vdmVzIHRoYXQgbGVhdmUgeW91ciBvd24ga2luZyBhdHRhY2tlZCkuXG4gKlxuICogUmVxdWlyZXMgYHBpZWNlLWhwYDsgd2l0aG91dCBpdCB0aGVyZSdzIG5vIEhwIGF0dHJpYnV0ZSB0byBoZWFsLlxuICovXG5pbXBvcnQgeyBQUkVTRVRfUkVHSVNUUlkgfSBmcm9tIFwiLi9yZWdpc3RyeS5qc1wiO1xuXG5pbXBvcnQgdHlwZSB7IFNlc3Npb24sIEVudGl0eUlkIH0gZnJvbSBcIkBwYXJhdHlwZS9yZXRlXCI7XG5pbXBvcnQgdHlwZSB7IFBpZWNlQ29sb3IgfSBmcm9tIFwiLi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgeyBpc0luQ2hlY2sgfSBmcm9tIFwiLi4vcnVsZXMvY2hlY2suanNcIjtcblxuY29uc3QgTUFYX0tJTkdfSFAgPSAzO1xuXG4vKiogRmluZCB0aGUga2luZyBlbnRpdHkgZm9yIGEgZ2l2ZW4gY29sb3IsIG9yIG51bGwgaWYgYWJzZW50LiAqL1xuZnVuY3Rpb24gZmluZEtpbmcoc2Vzc2lvbjogU2Vzc2lvbiwgY29sb3I6IFBpZWNlQ29sb3IpOiBFbnRpdHlJZCB8IG51bGwge1xuICBjb25zdCBmYWN0cyA9IHNlc3Npb24uYWxsRmFjdHMoKTtcbiAgZm9yIChjb25zdCBmIG9mIGZhY3RzKSB7XG4gICAgaWYgKGYuYXR0ciAhPT0gXCJQaWVjZVR5cGVcIiB8fCBmLnZhbHVlICE9PSBcImtpbmdcIikgY29udGludWU7XG4gICAgY29uc3QgY29sb3JGYWN0ID0gZmFjdHMuZmluZChjID0+IGMuaWQgPT09IGYuaWQgJiYgYy5hdHRyID09PSBcIkNvbG9yXCIpO1xuICAgIGlmIChjb2xvckZhY3Q/LnZhbHVlID09PSBjb2xvcikgcmV0dXJuIGYuaWQ7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cblBSRVNFVF9SRUdJU1RSWS5yZWdpc3Rlcih7XG4gIGlkOiBcImtpbmctaGVhbHNcIixcbiAgbmFtZTogXCJSZWdlbmVyYXRpbmcgS2luZ1wiLFxuICBkZXNjcmlwdGlvbjpcbiAgICBcIkFmdGVyIGV2ZXJ5IGhhbGYtbW92ZSwgdGhlIGtpbmcgd2hvc2UgdHVybiBpdCBpcyB0byBtb3ZlIHJlZ2VuZXJhdGVzICsxIEhQIChtYXggMykg4oCUIHVubGVzcyBpdCdzIGN1cnJlbnRseSBpbiBjaGVjay4gUmVxdWlyZXMgSGl0IFBvaW50cy5cIixcbiAgaW5jb21wYXRpYmxlV2l0aDogW10sXG4gIHJlcXVpcmVzOiBbXCJwaWVjZS1ocFwiXSxcblxuICBvbkFmdGVyTW92ZSh7IGVuZ2luZSwgbW92ZXIgfSkge1xuICAgIC8vIFRoZSBOT04tbW92ZXIncyBraW5nIGlzIHRoZSBvbmUgcG90ZW50aWFsbHkgaGVhbGluZzogaXQncyB0aGVcbiAgICAvLyBraW5nIGJlbG9uZ2luZyB0byB0aGUgcGxheWVyIHdob3NlIHR1cm4ganVzdCBhcnJpdmVkLiBIZWFsIG9ubHlcbiAgICAvLyBpZiB0aGF0IGtpbmcgaXNuJ3QgY3VycmVudGx5IGluIGNoZWNrIChiZWluZyBpbiBjaGVjayBkZW5pZXMgdGhlXG4gICAgLy8gaGVhbCDigJQgYW4gaW50ZW50aW9uYWwgZ2FtZS1kZXNpZ24gbGV2ZXIgdGhhdCBtYWtlcyBhZ2dyZXNzaXZlXG4gICAgLy8gcGxheSBzdHJhdGVnaWNhbGx5IG1lYW5pbmdmdWwpLlxuICAgIGNvbnN0IGNvbG9yOiBQaWVjZUNvbG9yID0gbW92ZXIgPT09IFwid2hpdGVcIiA/IFwiYmxhY2tcIiA6IFwid2hpdGVcIjtcbiAgICBjb25zdCBraW5nSWQgPSBmaW5kS2luZyhlbmdpbmUuc2Vzc2lvbiwgY29sb3IpO1xuICAgIGlmIChraW5nSWQgPT09IG51bGwpIHJldHVybjtcbiAgICBpZiAoaXNJbkNoZWNrKGVuZ2luZS5zZXNzaW9uLCBjb2xvcikpIHJldHVybjtcblxuICAgIGNvbnN0IHNlc3Npb24gPSBlbmdpbmUuc2Vzc2lvbjtcbiAgICBpZiAoIXNlc3Npb24uY29udGFpbnMoa2luZ0lkLCBcIkhwXCIpKSByZXR1cm47IC8vIHBpZWNlLWhwIG5vdCBhY3RpdmVcbiAgICBjb25zdCBocCA9IHNlc3Npb24uZ2V0KGtpbmdJZCwgXCJIcFwiKSBhcyBudW1iZXI7XG4gICAgaWYgKGhwID49IE1BWF9LSU5HX0hQKSByZXR1cm47XG4gICAgc2Vzc2lvbi5pbnNlcnQoa2luZ0lkLCBcIkhwXCIsIGhwICsgMSk7XG5cbiAgICAvLyBWaXN1YWw6IGEgYnJpZWYgaGVhbCBzaGltbWVyIG9uIHRoZSBraW5nJ3Mgc3F1YXJlLiBObyBzdWJzY3JpYmVyXG4gICAgLy8gPSBuby1vcCAoc2VlIGVuZ2luZS5lbWl0RWZmZWN0KS5cbiAgICBjb25zdCBraW5nU3F1YXJlID0gc2Vzc2lvbi5nZXQoa2luZ0lkLCBcIlBvc2l0aW9uXCIpO1xuICAgIGlmICh0eXBlb2Yga2luZ1NxdWFyZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgZW5naW5lLmVtaXRFZmZlY3Qoe1xuICAgICAgICBraW5kOiBcImhlYWxcIixcbiAgICAgICAgc3F1YXJlOiBraW5nU3F1YXJlLFxuICAgICAgICB0dGw6IDQwMCxcbiAgICAgICAgZGF0YTogeyBocDogaHAgKyAxIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG59KTtcbiJdLCJmaWxlIjoiL3NyYy9wcmVzZXRzL2tpbmctaGVhbHMudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/90bfe13060c1c642fa8bd2d92efb58fa47aa6cb2 b/7xOfJqsDU787fe61oSCq1/web/90bfe13060c1c642fa8bd2d92efb58fa47aa6cb2 deleted file mode 100644 index 3f955cc..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/90bfe13060c1c642fa8bd2d92efb58fa47aa6cb2 +++ /dev/null @@ -1,99 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "NoMatchError", { enumerable: true, configurable: true, get(){ try { return NoMatchError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "ProductionNode", { enumerable: true, configurable: true, get(){ try { return ProductionNode } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "query", { enumerable: true, configurable: true, get(){ try { return query } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "queryAll", { enumerable: true, configurable: true, get(){ try { return queryAll } catch {} }}); -/** - * Thrown by {@link query} when the target {@link ProductionNode} has no - * currently-active matches. The error carries the rule name so that callers - * — and, more importantly, test failures — can identify which production - * ran dry without needing to attach a stack frame of context. - */ -class NoMatchError extends Error { - constructor(ruleName) { - super(`NoMatchError: no match found for rule "${ruleName}"`); - this.name = "NoMatchError"; - } -}; -/** - * Terminal node in the Rete network. - * - * A `ProductionNode` subscribes (in a future wiring step) to the final - * beta-memory or filter node of a rule and accumulates the full matches - * produced by that rule. It exposes: - * - * - `matches` — the currently-active matches, in insertion order. The array - * reference itself is stable (`readonly` at the type level); its contents - * are mutated by {@link leftActivate} / {@link leftDeactivate}. - * - `ruleName` — carried for diagnostic messages (see {@link NoMatchError}). - * - * The `leftActivate` / `leftDeactivate` pair mirrors {@link BetaMemory}'s - * contract so a `ProductionNode` is a drop-in downstream subscriber for any - * node that fires left-activations. - */ -class ProductionNode { - ruleName; - /** - * Accumulated matches in insertion order. - * - * Declared `readonly` so external code cannot swap the array out from - * underneath the node, but its contents are mutated internally — tests - * and downstream code rely on positional access (`matches[0]`). - */ - matches = []; - constructor(ruleName) { - this.ruleName = ruleName; - } - /** - * Record a new full match. - * - * Called by the upstream node (a {@link BetaMemory} or a filter node) - * when a token representing a complete match enters the network. - */ - leftActivate(token) { - this.matches.push({ token, bindings: token.bindings }); - } - /** - * Withdraw a previously-recorded match. - * - * Removes the first match whose `token` is reference-equal to the - * supplied token. Unknown tokens are a no-op: upstream memories always - * broadcast deactivations to their subscribers, even when this particular - * node never accepted the token, so silently ignoring the absent case - * keeps wiring lenient (matching {@link BetaMemory.leftDeactivate}). - */ - leftDeactivate(token) { - const idx = this.matches.findIndex((m) => m.token === token); - if (idx !== -1) { - this.matches.splice(idx, 1); - } - } -}; -/** - * Return the first currently-active match's bindings, or throw - * {@link NoMatchError} if the production has no matches. - * - * "First" is defined by the same insertion order as {@link queryAll} — the - * upstream beta network is responsible for making that order deterministic - * (see module header). - */ -function query(prod) { - const first = prod.matches[0]; - if (!first) - throw new NoMatchError(prod.ruleName); - return first.bindings; -}; -/** - * Return a fresh array containing the bindings of every currently-active - * match, in insertion order. - * - * The returned array is a new array on every call, so callers may mutate - * it without affecting subsequent queries or the production node. The - * bindings objects themselves are shared by reference with the node — - * treat them as read-only. - */ -function queryAll(prod) { - return prod.matches.map((m) => m.bindings); -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7OztBQXFCQTs7Ozs7O0FBTU0sTUFBTyxZQUFhLFNBQVEsS0FBSztJQUNyQyxZQUFZLFFBQWdCO1FBQzFCLEtBQUssQ0FBQywwQ0FBMEMsUUFBUSxHQUFHLENBQUM7UUFDNUQsSUFBSSxDQUFDLElBQUksR0FBRyxjQUFjO0lBQzVCOztBQWtCRjs7Ozs7Ozs7Ozs7Ozs7OztBQWdCTSxNQUFPLGNBQWM7SUFVSjtJQVRyQjs7Ozs7OztJQU9TLE9BQU8sR0FBWSxFQUFFO0lBRTlCLFlBQXFCLFFBQWdCO1FBQWhCLGFBQVEsR0FBUixRQUFRO0lBQVc7SUFFeEM7Ozs7OztJQU1BLFlBQVksQ0FBQyxLQUFZO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDeEQ7SUFFQTs7Ozs7Ozs7O0lBU0EsY0FBYyxDQUFDLEtBQVk7UUFDekIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDO1FBQzVELElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM3QjtJQUNGOztBQUdGOzs7Ozs7OztBQVFNLFNBQVUsS0FBSyxDQUFDLElBQW9CO0lBQ3hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzdCLElBQUksQ0FBQyxLQUFLO1FBQUUsTUFBTSxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ2pELE9BQU8sS0FBSyxDQUFDLFFBQVE7QUFDdkI7QUFFQTs7Ozs7Ozs7O0FBU00sU0FBVSxRQUFRLENBQUMsSUFBb0I7SUFDM0MsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUM1QyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3F1ZXJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHJvZHVjdGlvbk5vZGUg4oCUIHRlcm1pbmFsIFJldGUgbm9kZSBhY2N1bXVsYXRpbmcgZnVsbCBtYXRjaGVzLCBwbHVzIHRoZVxuICogYHF1ZXJ5KClgIC8gYHF1ZXJ5QWxsKClgIHBvaW50LWluLXRpbWUgcXVlcnkgQVBJLlxuICpcbiAqIFBlciBgcGFja2FnZXMvcmV0ZS9TUEVDLm1kIMKnSXRlcmF0aW9uIE9yZGVyYCwgYHF1ZXJ5QWxsKClgIHJldHVybnMgcmVzdWx0c1xuICogaW4gYSBkZXRlcm1pbmlzdGljIG9yZGVyLiBEZXRlcm1pbmlzbSBpcyBwcm92aWRlZCAqdXBzdHJlYW0qIGJ5IHRoZSBiZXRhXG4gKiBuZXR3b3JrOiBpbnRlcm5hbCBiZXRhLW1lbW9yeSB0b2tlbnMgYXJlIHNvcnRlZCBieSB0aGVpciBjb25zdGl0dWVudCBmYWN0XG4gKiBpZHMgaW4gdGhlIHZhcmlhYmxlIG9yZGVyIGRlZmluZWQgYnkgdGhlIHJ1bGUncyBjb25kaXRpb24gbGlzdCAoU1BFQyDCpzgxKSxcbiAqIHNvIGJ5IHRoZSB0aW1lIHRva2VucyByZWFjaCBhIGBQcm9kdWN0aW9uTm9kZWAgdmlhIGBsZWZ0QWN0aXZhdGVgIHRoZXlcbiAqIGFscmVhZHkgYXJyaXZlIGluIGNhbm9uaWNhbCBvcmRlci4gYFByb2R1Y3Rpb25Ob2RlYCB0aGVyZWZvcmUgc3RvcmVzIHRoZW1cbiAqIGluIGluc2VydGlvbiBvcmRlciBhbmQgYHF1ZXJ5QWxsKClgIHJldHVybnMgdGhhdCBzYW1lIG9yZGVyIOKAlCByZS1zb3J0aW5nXG4gKiBoZXJlIHdvdWxkIGRpc2NhcmQgaW5mb3JtYXRpb24gKHJ1bGUtZGVjbGFyZWQgdmFyaWFibGUgb3JkZXIpIHRoYXQgdGhlXG4gKiBiZXRhIG5ldHdvcmsgaGFzIGFscmVhZHkgYmFrZWQgaW4uXG4gKlxuICogVGhpcyBtb2R1bGUgaXMgaW50ZW50aW9uYWxseSBsaW1pdGVkIHRvICpwb2ludC1pbi10aW1lKiBxdWVyaWVzLiBSZWFjdGl2ZVxuICogc3Vic2NyaXB0aW9ucyAob2JzZXJ2ZXItc3R5bGUgQVBJcykgYXJlIG91dCBvZiBzY29wZSBmb3IgUDEuMTAgcGVyIHRoZVxuICogcGhhc2UgcGxhbjsgaGlnaGVyLWxldmVsIGZpbHRlcmluZyAoZS5nLiBmaWx0ZXIgYnkgYmluZGluZykgaXMgbGF5ZXJlZCBvblxuICogdG9wIGluIGEgbGF0ZXIgcGhhc2UuXG4gKi9cbmltcG9ydCB0eXBlIHsgQmluZGluZ3MsIFRva2VuIH0gZnJvbSBcIi4vYmV0YS5qc1wiO1xuXG4vKipcbiAqIFRocm93biBieSB7QGxpbmsgcXVlcnl9IHdoZW4gdGhlIHRhcmdldCB7QGxpbmsgUHJvZHVjdGlvbk5vZGV9IGhhcyBub1xuICogY3VycmVudGx5LWFjdGl2ZSBtYXRjaGVzLiBUaGUgZXJyb3IgY2FycmllcyB0aGUgcnVsZSBuYW1lIHNvIHRoYXQgY2FsbGVyc1xuICog4oCUIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGVzdCBmYWlsdXJlcyDigJQgY2FuIGlkZW50aWZ5IHdoaWNoIHByb2R1Y3Rpb25cbiAqIHJhbiBkcnkgd2l0aG91dCBuZWVkaW5nIHRvIGF0dGFjaCBhIHN0YWNrIGZyYW1lIG9mIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBjbGFzcyBOb01hdGNoRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgTm9NYXRjaEVycm9yOiBubyBtYXRjaCBmb3VuZCBmb3IgcnVsZSBcIiR7cnVsZU5hbWV9XCJgKTtcbiAgICB0aGlzLm5hbWUgPSBcIk5vTWF0Y2hFcnJvclwiO1xuICB9XG59XG5cbi8qKlxuICogQSBmdWxsIG1hdGNoIGFjY3VtdWxhdGVkIGJ5IGEge0BsaW5rIFByb2R1Y3Rpb25Ob2RlfS5cbiAqXG4gKiBgdG9rZW5gIGlzIHRoZSB1bmRlcmx5aW5nIGJldGEtbmV0d29yayB0b2tlbiAodXNlZnVsIGZvciBkaWFnbm9zdGljcyBhbmRcbiAqIGZvciBmdXR1cmUgdHJ1dGgtbWFpbnRlbmFuY2Ugd2lyaW5nIHRoYXQgbmVlZHMgdG8gd2FsayB0aGUgbWF0Y2ggY2hhaW4pXG4gKiBhbmQgYGJpbmRpbmdzYCBpcyB0aGUgZmxhdCB2YXJpYWJsZS1iaW5kaW5nIG1hcCB0aGF0IHRoZSBwdWJsaWMgcXVlcnkgQVBJXG4gKiByZXR1cm5zLiBCb3RoIGZpZWxkcyBhcmUgYHJlYWRvbmx5YCBhdCB0aGUgdHlwZSBsZXZlbCB0byBkaXNjb3VyYWdlXG4gKiBleHRlcm5hbCBtdXRhdGlvbiwgYnV0IHRoZSBhcnJheXMgcmV0dXJuZWQgYnkge0BsaW5rIHF1ZXJ5QWxsfSBhcmUgZnJlc2hcbiAqIGNvcGllcyBzbyBjYWxsZXJzIGNhbiBtdXRhdGUgdGhlbSB3aXRob3V0IGRpc3R1cmJpbmcgdGhlIG5vZGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWF0Y2gge1xuICByZWFkb25seSB0b2tlbjogVG9rZW47XG4gIHJlYWRvbmx5IGJpbmRpbmdzOiBCaW5kaW5ncztcbn1cblxuLyoqXG4gKiBUZXJtaW5hbCBub2RlIGluIHRoZSBSZXRlIG5ldHdvcmsuXG4gKlxuICogQSBgUHJvZHVjdGlvbk5vZGVgIHN1YnNjcmliZXMgKGluIGEgZnV0dXJlIHdpcmluZyBzdGVwKSB0byB0aGUgZmluYWxcbiAqIGJldGEtbWVtb3J5IG9yIGZpbHRlciBub2RlIG9mIGEgcnVsZSBhbmQgYWNjdW11bGF0ZXMgdGhlIGZ1bGwgbWF0Y2hlc1xuICogcHJvZHVjZWQgYnkgdGhhdCBydWxlLiBJdCBleHBvc2VzOlxuICpcbiAqIC0gYG1hdGNoZXNgIOKAlCB0aGUgY3VycmVudGx5LWFjdGl2ZSBtYXRjaGVzLCBpbiBpbnNlcnRpb24gb3JkZXIuIFRoZSBhcnJheVxuICogICByZWZlcmVuY2UgaXRzZWxmIGlzIHN0YWJsZSAoYHJlYWRvbmx5YCBhdCB0aGUgdHlwZSBsZXZlbCk7IGl0cyBjb250ZW50c1xuICogICBhcmUgbXV0YXRlZCBieSB7QGxpbmsgbGVmdEFjdGl2YXRlfSAvIHtAbGluayBsZWZ0RGVhY3RpdmF0ZX0uXG4gKiAtIGBydWxlTmFtZWAg4oCUIGNhcnJpZWQgZm9yIGRpYWdub3N0aWMgbWVzc2FnZXMgKHNlZSB7QGxpbmsgTm9NYXRjaEVycm9yfSkuXG4gKlxuICogVGhlIGBsZWZ0QWN0aXZhdGVgIC8gYGxlZnREZWFjdGl2YXRlYCBwYWlyIG1pcnJvcnMge0BsaW5rIEJldGFNZW1vcnl9J3NcbiAqIGNvbnRyYWN0IHNvIGEgYFByb2R1Y3Rpb25Ob2RlYCBpcyBhIGRyb3AtaW4gZG93bnN0cmVhbSBzdWJzY3JpYmVyIGZvciBhbnlcbiAqIG5vZGUgdGhhdCBmaXJlcyBsZWZ0LWFjdGl2YXRpb25zLlxuICovXG5leHBvcnQgY2xhc3MgUHJvZHVjdGlvbk5vZGUge1xuICAvKipcbiAgICogQWNjdW11bGF0ZWQgbWF0Y2hlcyBpbiBpbnNlcnRpb24gb3JkZXIuXG4gICAqXG4gICAqIERlY2xhcmVkIGByZWFkb25seWAgc28gZXh0ZXJuYWwgY29kZSBjYW5ub3Qgc3dhcCB0aGUgYXJyYXkgb3V0IGZyb21cbiAgICogdW5kZXJuZWF0aCB0aGUgbm9kZSwgYnV0IGl0cyBjb250ZW50cyBhcmUgbXV0YXRlZCBpbnRlcm5hbGx5IOKAlCB0ZXN0c1xuICAgKiBhbmQgZG93bnN0cmVhbSBjb2RlIHJlbHkgb24gcG9zaXRpb25hbCBhY2Nlc3MgKGBtYXRjaGVzWzBdYCkuXG4gICAqL1xuICByZWFkb25seSBtYXRjaGVzOiBNYXRjaFtdID0gW107XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgcnVsZU5hbWU6IHN0cmluZykge31cblxuICAvKipcbiAgICogUmVjb3JkIGEgbmV3IGZ1bGwgbWF0Y2guXG4gICAqXG4gICAqIENhbGxlZCBieSB0aGUgdXBzdHJlYW0gbm9kZSAoYSB7QGxpbmsgQmV0YU1lbW9yeX0gb3IgYSBmaWx0ZXIgbm9kZSlcbiAgICogd2hlbiBhIHRva2VuIHJlcHJlc2VudGluZyBhIGNvbXBsZXRlIG1hdGNoIGVudGVycyB0aGUgbmV0d29yay5cbiAgICovXG4gIGxlZnRBY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICB0aGlzLm1hdGNoZXMucHVzaCh7IHRva2VuLCBiaW5kaW5nczogdG9rZW4uYmluZGluZ3MgfSk7XG4gIH1cblxuICAvKipcbiAgICogV2l0aGRyYXcgYSBwcmV2aW91c2x5LXJlY29yZGVkIG1hdGNoLlxuICAgKlxuICAgKiBSZW1vdmVzIHRoZSBmaXJzdCBtYXRjaCB3aG9zZSBgdG9rZW5gIGlzIHJlZmVyZW5jZS1lcXVhbCB0byB0aGVcbiAgICogc3VwcGxpZWQgdG9rZW4uIFVua25vd24gdG9rZW5zIGFyZSBhIG5vLW9wOiB1cHN0cmVhbSBtZW1vcmllcyBhbHdheXNcbiAgICogYnJvYWRjYXN0IGRlYWN0aXZhdGlvbnMgdG8gdGhlaXIgc3Vic2NyaWJlcnMsIGV2ZW4gd2hlbiB0aGlzIHBhcnRpY3VsYXJcbiAgICogbm9kZSBuZXZlciBhY2NlcHRlZCB0aGUgdG9rZW4sIHNvIHNpbGVudGx5IGlnbm9yaW5nIHRoZSBhYnNlbnQgY2FzZVxuICAgKiBrZWVwcyB3aXJpbmcgbGVuaWVudCAobWF0Y2hpbmcge0BsaW5rIEJldGFNZW1vcnkubGVmdERlYWN0aXZhdGV9KS5cbiAgICovXG4gIGxlZnREZWFjdGl2YXRlKHRva2VuOiBUb2tlbik6IHZvaWQge1xuICAgIGNvbnN0IGlkeCA9IHRoaXMubWF0Y2hlcy5maW5kSW5kZXgoKG0pID0+IG0udG9rZW4gPT09IHRva2VuKTtcbiAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgdGhpcy5tYXRjaGVzLnNwbGljZShpZHgsIDEpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgZmlyc3QgY3VycmVudGx5LWFjdGl2ZSBtYXRjaCdzIGJpbmRpbmdzLCBvciB0aHJvd1xuICoge0BsaW5rIE5vTWF0Y2hFcnJvcn0gaWYgdGhlIHByb2R1Y3Rpb24gaGFzIG5vIG1hdGNoZXMuXG4gKlxuICogXCJGaXJzdFwiIGlzIGRlZmluZWQgYnkgdGhlIHNhbWUgaW5zZXJ0aW9uIG9yZGVyIGFzIHtAbGluayBxdWVyeUFsbH0g4oCUIHRoZVxuICogdXBzdHJlYW0gYmV0YSBuZXR3b3JrIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgdGhhdCBvcmRlciBkZXRlcm1pbmlzdGljXG4gKiAoc2VlIG1vZHVsZSBoZWFkZXIpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcXVlcnkocHJvZDogUHJvZHVjdGlvbk5vZGUpOiBCaW5kaW5ncyB7XG4gIGNvbnN0IGZpcnN0ID0gcHJvZC5tYXRjaGVzWzBdO1xuICBpZiAoIWZpcnN0KSB0aHJvdyBuZXcgTm9NYXRjaEVycm9yKHByb2QucnVsZU5hbWUpO1xuICByZXR1cm4gZmlyc3QuYmluZGluZ3M7XG59XG5cbi8qKlxuICogUmV0dXJuIGEgZnJlc2ggYXJyYXkgY29udGFpbmluZyB0aGUgYmluZGluZ3Mgb2YgZXZlcnkgY3VycmVudGx5LWFjdGl2ZVxuICogbWF0Y2gsIGluIGluc2VydGlvbiBvcmRlci5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgYXJyYXkgaXMgYSBuZXcgYXJyYXkgb24gZXZlcnkgY2FsbCwgc28gY2FsbGVycyBtYXkgbXV0YXRlXG4gKiBpdCB3aXRob3V0IGFmZmVjdGluZyBzdWJzZXF1ZW50IHF1ZXJpZXMgb3IgdGhlIHByb2R1Y3Rpb24gbm9kZS4gVGhlXG4gKiBiaW5kaW5ncyBvYmplY3RzIHRoZW1zZWx2ZXMgYXJlIHNoYXJlZCBieSByZWZlcmVuY2Ugd2l0aCB0aGUgbm9kZSDigJRcbiAqIHRyZWF0IHRoZW0gYXMgcmVhZC1vbmx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlBbGwocHJvZDogUHJvZHVjdGlvbk5vZGUpOiBCaW5kaW5nc1tdIHtcbiAgcmV0dXJuIHByb2QubWF0Y2hlcy5tYXAoKG0pID0+IG0uYmluZGluZ3MpO1xufVxuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvZGlzdC9xdWVyeS5qcyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/91b2a24a80057bfb1814b6845e799b4ce08a6d5f b/7xOfJqsDU787fe61oSCq1/web/91b2a24a80057bfb1814b6845e799b4ce08a6d5f deleted file mode 100644 index 935677f..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/91b2a24a80057bfb1814b6845e799b4ce08a6d5f +++ /dev/null @@ -1,60 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/rules/capture.ts", {"importedNames":["applyCapture","getCapturablePieces","canCapture"]}); -const mkId = (n) => n; -const ins = (s, id, type, color, sq) => { - const eid = mkId(id); - s.insert(eid, "PieceType", type); - s.insert(eid, "Color", color); - s.insert(eid, "Position", sq); - return eid; -}; -(0,__vite_ssr_import_0__.describe)("applyCapture", () => { - (0,__vite_ssr_import_0__.it)("removes all facts for the captured piece", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const black = ins(session, 2, "knight", "black", 28); - (0,__vite_ssr_import_2__.applyCapture)(session, black); - (0,__vite_ssr_import_0__.expect)(session.contains(black, "PieceType")).toBe(false); - (0,__vite_ssr_import_0__.expect)(session.contains(black, "Color")).toBe(false); - (0,__vite_ssr_import_0__.expect)(session.contains(black, "Position")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("does not affect other pieces", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const white = ins(session, 1, "pawn", "white", 20); - const black = ins(session, 2, "knight", "black", 28); - (0,__vite_ssr_import_2__.applyCapture)(session, black); - (0,__vite_ssr_import_0__.expect)(session.contains(white, "Position")).toBe(true); - }); -}); -(0,__vite_ssr_import_0__.describe)("getCapturablePieces", () => { - (0,__vite_ssr_import_0__.it)("returns all enemy piece ids", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - ins(session, 1, "pawn", "white", 20); - ins(session, 2, "pawn", "white", 21); - ins(session, 3, "rook", "black", 50); - ins(session, 4, "bishop", "black", 51); - const capturable = (0,__vite_ssr_import_2__.getCapturablePieces)(session, "white"); - (0,__vite_ssr_import_0__.expect)(capturable).toContain(mkId(3)); - (0,__vite_ssr_import_0__.expect)(capturable).toContain(mkId(4)); - (0,__vite_ssr_import_0__.expect)(capturable).not.toContain(mkId(1)); - }); -}); -(0,__vite_ssr_import_0__.describe)("canCapture", () => { - (0,__vite_ssr_import_0__.it)("returns true when enemy on square", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - ins(session, 1, "rook", "black", 28); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.canCapture)(session, 28, "white")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("returns false when own piece on square", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - ins(session, 1, "rook", "white", 28); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.canCapture)(session, 28, "white")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("returns false when square is empty", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.canCapture)(session, 28, "white")).toBe(false); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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XSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiY2FwdHVyZS50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBpdCwgZXhwZWN0IH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuaW1wb3J0IHsgYXBwbHlDYXB0dXJlLCBnZXRDYXB0dXJhYmxlUGllY2VzLCBjYW5DYXB0dXJlIH0gZnJvbSBcIi4vY2FwdHVyZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuXG5jb25zdCBta0lkID0gKG46IG51bWJlcikgPT4gbiBhcyBFbnRpdHlJZDtcbmNvbnN0IGlucyA9IChzOiBTZXNzaW9uLCBpZDogbnVtYmVyLCB0eXBlOiBzdHJpbmcsIGNvbG9yOiBzdHJpbmcsIHNxOiBudW1iZXIpID0+IHtcbiAgY29uc3QgZWlkID0gbWtJZChpZCk7XG4gIHMuaW5zZXJ0KGVpZCwgXCJQaWVjZVR5cGVcIiwgdHlwZSk7IHMuaW5zZXJ0KGVpZCwgXCJDb2xvclwiLCBjb2xvcik7IHMuaW5zZXJ0KGVpZCwgXCJQb3NpdGlvblwiLCBzcSk7XG4gIHJldHVybiBlaWQ7XG59O1xuXG5kZXNjcmliZShcImFwcGx5Q2FwdHVyZVwiLCAoKSA9PiB7XG4gIGl0KFwicmVtb3ZlcyBhbGwgZmFjdHMgZm9yIHRoZSBjYXB0dXJlZCBwaWVjZVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGNvbnN0IGJsYWNrID0gaW5zKHNlc3Npb24sIDIsIFwia25pZ2h0XCIsIFwiYmxhY2tcIiwgMjgpO1xuICAgIGFwcGx5Q2FwdHVyZShzZXNzaW9uLCBibGFjayk7XG4gICAgZXhwZWN0KHNlc3Npb24uY29udGFpbnMoYmxhY2ssIFwiUGllY2VUeXBlXCIpKS50b0JlKGZhbHNlKTtcbiAgICBleHBlY3Qoc2Vzc2lvbi5jb250YWlucyhibGFjaywgXCJDb2xvclwiKSkudG9CZShmYWxzZSk7XG4gICAgZXhwZWN0KHNlc3Npb24uY29udGFpbnMoYmxhY2ssIFwiUG9zaXRpb25cIikpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcImRvZXMgbm90IGFmZmVjdCBvdGhlciBwaWVjZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBjb25zdCB3aGl0ZSA9IGlucyhzZXNzaW9uLCAxLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCAyMCk7XG4gICAgY29uc3QgYmxhY2sgPSBpbnMoc2Vzc2lvbiwgMiwgXCJrbmlnaHRcIiwgXCJibGFja1wiLCAyOCk7XG4gICAgYXBwbHlDYXB0dXJlKHNlc3Npb24sIGJsYWNrKTtcbiAgICBleHBlY3Qoc2Vzc2lvbi5jb250YWlucyh3aGl0ZSwgXCJQb3NpdGlvblwiKSkudG9CZSh0cnVlKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJnZXRDYXB0dXJhYmxlUGllY2VzXCIsICgpID0+IHtcbiAgaXQoXCJyZXR1cm5zIGFsbCBlbmVteSBwaWVjZSBpZHNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBpbnMoc2Vzc2lvbiwgMSwgXCJwYXduXCIsIFwid2hpdGVcIiwgMjApO1xuICAgIGlucyhzZXNzaW9uLCAyLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCAyMSk7XG4gICAgaW5zKHNlc3Npb24sIDMsIFwicm9va1wiLCBcImJsYWNrXCIsIDUwKTtcbiAgICBpbnMoc2Vzc2lvbiwgNCwgXCJiaXNob3BcIiwgXCJibGFja1wiLCA1MSk7XG4gICAgY29uc3QgY2FwdHVyYWJsZSA9IGdldENhcHR1cmFibGVQaWVjZXMoc2Vzc2lvbiwgXCJ3aGl0ZVwiKTtcbiAgICBleHBlY3QoY2FwdHVyYWJsZSkudG9Db250YWluKG1rSWQoMykpO1xuICAgIGV4cGVjdChjYXB0dXJhYmxlKS50b0NvbnRhaW4obWtJZCg0KSk7XG4gICAgZXhwZWN0KGNhcHR1cmFibGUpLm5vdC50b0NvbnRhaW4obWtJZCgxKSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiY2FuQ2FwdHVyZVwiLCAoKSA9PiB7XG4gIGl0KFwicmV0dXJucyB0cnVlIHdoZW4gZW5lbXkgb24gc3F1YXJlXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgaW5zKHNlc3Npb24sIDEsIFwicm9va1wiLCBcImJsYWNrXCIsIDI4KTtcbiAgICBleHBlY3QoY2FuQ2FwdHVyZShzZXNzaW9uLCAyOCwgXCJ3aGl0ZVwiKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIGZhbHNlIHdoZW4gb3duIHBpZWNlIG9uIHNxdWFyZVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGlucyhzZXNzaW9uLCAxLCBcInJvb2tcIiwgXCJ3aGl0ZVwiLCAyOCk7XG4gICAgZXhwZWN0KGNhbkNhcHR1cmUoc2Vzc2lvbiwgMjgsIFwid2hpdGVcIikpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcInJldHVybnMgZmFsc2Ugd2hlbiBzcXVhcmUgaXMgZW1wdHlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBleHBlY3QoY2FuQ2FwdHVyZShzZXNzaW9uLCAyOCwgXCJ3aGl0ZVwiKSkudG9CZShmYWxzZSk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvY2hlc3Mvc3JjL3J1bGVzL2NhcHR1cmUudGVzdC50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/924073366ec737c84909b9810e0b6044da633b7b b/7xOfJqsDU787fe61oSCq1/web/924073366ec737c84909b9810e0b6044da633b7b deleted file mode 100644 index 8d47c39..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/924073366ec737c84909b9810e0b6044da633b7b +++ /dev/null @@ -1,22 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "HP_BONUS_DESCRIPTOR", { enumerable: true, configurable: true, get(){ try { return descriptor } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/zod@4.3.6/node_modules/zod/index.js", {"importedNames":["z"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/modifiers/registry.ts", {"importedNames":["MODIFIER_REGISTRY"]}); -const schema = __vite_ssr_import_0__.z.number().int().min(-10).max(10); -const descriptor = { - id: "hp-bonus", - attrName: "HpBonus", - label: "HP Bonus", - valueSchema: schema, - stackingRule: "additive", - uiForm: "number", - apply(session, pieceId, effectiveValue) { - session.insert(pieceId, "HpBonus", effectiveValue); - }, - describe(value) { - return `HP ${value >= 0 ? "+" : ""}${value}`; - } -}; -__vite_ssr_import_1__.MODIFIER_REGISTRY.register(descriptor); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQUFBO0FBRUE7QUFHQSxNQUFNLFNBQVMsd0JBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFHL0MsTUFBTSxhQUF3QztBQUFBLEVBQzVDLElBQUk7QUFBQSxFQUNKLFVBQVU7QUFBQSxFQUNWLE9BQU87QUFBQSxFQUNQLGFBQWE7QUFBQSxFQUNiLGNBQWM7QUFBQSxFQUNkLFFBQVE7QUFBQSxFQUNSLE1BQU0sU0FBa0IsU0FBbUIsZ0JBQTZCO0FBQ3RFLFlBQVEsT0FBTyxTQUFTLFdBQVcsY0FBYztBQUFBLEVBQ25EO0FBQUEsRUFDQSxTQUFTLE9BQXNCO0FBQzdCLFdBQU8sTUFBTSxTQUFTLElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSztBQUFBLEVBQzVDO0FBQ0Y7QUFFQSx3Q0FBa0IsU0FBUyxVQUFVIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJocC1ib251cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyBTZXNzaW9uLCBFbnRpdHlJZCB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuaW1wb3J0IHsgTU9ESUZJRVJfUkVHSVNUUlkgfSBmcm9tIFwiLi4vcmVnaXN0cnkuanNcIjtcbmltcG9ydCB0eXBlIHsgTW9kaWZpZXJEZXNjcmlwdG9yIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5cbmNvbnN0IHNjaGVtYSA9IHoubnVtYmVyKCkuaW50KCkubWluKC0xMCkubWF4KDEwKTtcbnR5cGUgVmFsdWUgPSB6LmluZmVyPHR5cGVvZiBzY2hlbWE+O1xuXG5jb25zdCBkZXNjcmlwdG9yOiBNb2RpZmllckRlc2NyaXB0b3I8VmFsdWU+ID0ge1xuICBpZDogXCJocC1ib251c1wiLFxuICBhdHRyTmFtZTogXCJIcEJvbnVzXCIsXG4gIGxhYmVsOiBcIkhQIEJvbnVzXCIsXG4gIHZhbHVlU2NoZW1hOiBzY2hlbWEsXG4gIHN0YWNraW5nUnVsZTogXCJhZGRpdGl2ZVwiLFxuICB1aUZvcm06IFwibnVtYmVyXCIsXG4gIGFwcGx5KHNlc3Npb246IFNlc3Npb24sIHBpZWNlSWQ6IEVudGl0eUlkLCBlZmZlY3RpdmVWYWx1ZTogVmFsdWUpOiB2b2lkIHtcbiAgICBzZXNzaW9uLmluc2VydChwaWVjZUlkLCBcIkhwQm9udXNcIiwgZWZmZWN0aXZlVmFsdWUpO1xuICB9LFxuICBkZXNjcmliZSh2YWx1ZTogVmFsdWUpOiBzdHJpbmcge1xuICAgIHJldHVybiBgSFAgJHt2YWx1ZSA+PSAwID8gXCIrXCIgOiBcIlwifSR7dmFsdWV9YDtcbiAgfSxcbn07XG5cbk1PRElGSUVSX1JFR0lTVFJZLnJlZ2lzdGVyKGRlc2NyaXB0b3IpO1xuZXhwb3J0IHsgZGVzY3JpcHRvciBhcyBIUF9CT05VU19ERVNDUklQVE9SIH07XG4iXSwiZmlsZSI6Ii9zcmMvbW9kaWZpZXJzL2Rlc2NyaXB0b3JzL2hwLWJvbnVzLnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/972377de7c6d161cc492125e10d16faa2d6d326b b/7xOfJqsDU787fe61oSCq1/web/972377de7c6d161cc492125e10d16faa2d6d326b deleted file mode 100644 index e011bad..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/972377de7c6d161cc492125e10d16faa2d6d326b +++ /dev/null @@ -1,60 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "UnknownHandlerError", { enumerable: true, configurable: true, get(){ try { return UnknownHandlerError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "UnknownPredicateError", { enumerable: true, configurable: true, get(){ try { return UnknownPredicateError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "HandlerRegistry", { enumerable: true, configurable: true, get(){ try { return HandlerRegistry } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "PredicateRegistry", { enumerable: true, configurable: true, get(){ try { return PredicateRegistry } catch {} }}); -/** - * Handler and Predicate registries. - * Per SPEC.md §JSON Rule Schema: handler-registry pattern (no eval, no function-to-string). - */ -class UnknownHandlerError extends Error { - constructor(name) { - super(`UnknownHandlerError: handler "${name}" is not registered`); - this.name = "UnknownHandlerError"; - } -}; -class UnknownPredicateError extends Error { - constructor(name) { - super(`UnknownPredicateError: predicate "${name}" is not registered`); - this.name = "UnknownPredicateError"; - } -}; -class HandlerRegistry { - handlers = new Map(); - register(name, fn) { - this.handlers.set(name, fn); - } - get(name) { - return this.handlers.get(name); - } - has(name) { - return this.handlers.has(name); - } - /** Verify all listed handler names are registered. Throws UnknownHandlerError if any missing. */ - verify(names) { - for (const name of names) { - if (!this.handlers.has(name)) - throw new UnknownHandlerError(name); - } - } -}; -class PredicateRegistry { - predicates = new Map(); - register(name, fn) { - this.predicates.set(name, fn); - } - get(name) { - return this.predicates.get(name); - } - has(name) { - return this.predicates.has(name); - } - verify(names) { - for (const name of names) { - if (!this.predicates.has(name)) - throw new UnknownPredicateError(name); - } - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7OztBQUFBOzs7O0FBS00sTUFBTyxtQkFBb0IsU0FBUSxLQUFLO0lBQzVDLFlBQVksSUFBWTtRQUN0QixLQUFLLENBQUMsaUNBQWlDLElBQUkscUJBQXFCLENBQUM7UUFDakUsSUFBSSxDQUFDLElBQUksR0FBRyxxQkFBcUI7SUFDbkM7O0FBR0ksTUFBTyxxQkFBc0IsU0FBUSxLQUFLO0lBQzlDLFlBQVksSUFBWTtRQUN0QixLQUFLLENBQUMscUNBQXFDLElBQUkscUJBQXFCLENBQUM7UUFDckUsSUFBSSxDQUFDLElBQUksR0FBRyx1QkFBdUI7SUFDckM7O0FBcUJJLE1BQU8sZUFBZTtJQUNULFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBcUI7SUFFeEQsUUFBUSxDQUFDLElBQVksRUFBRSxFQUFhO1FBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7SUFDN0I7SUFFQSxHQUFHLENBQUMsSUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQ2hDO0lBRUEsR0FBRyxDQUFDLElBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztJQUNoQztJQUVBO0lBQ0EsTUFBTSxDQUFDLEtBQXdCO1FBQzdCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQUUsTUFBTSxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQztRQUNuRTtJQUNGOztBQUdJLE1BQU8saUJBQWlCO0lBQ1gsVUFBVSxHQUFHLElBQUksR0FBRyxFQUF1QjtJQUU1RCxRQUFRLENBQUMsSUFBWSxFQUFFLEVBQWU7UUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUMvQjtJQUVBLEdBQUcsQ0FBQyxJQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFDbEM7SUFFQSxHQUFHLENBQUMsSUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQ2xDO0lBRUEsTUFBTSxDQUFDLEtBQXdCO1FBQzdCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQUUsTUFBTSxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQztRQUN2RTtJQUNGIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyIuLi9zcmMvcmVnaXN0cnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBIYW5kbGVyIGFuZCBQcmVkaWNhdGUgcmVnaXN0cmllcy5cbiAqIFBlciBTUEVDLm1kIMKnSlNPTiBSdWxlIFNjaGVtYTogaGFuZGxlci1yZWdpc3RyeSBwYXR0ZXJuIChubyBldmFsLCBubyBmdW5jdGlvbi10by1zdHJpbmcpLlxuICovXG5cbmV4cG9ydCBjbGFzcyBVbmtub3duSGFuZGxlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgVW5rbm93bkhhbmRsZXJFcnJvcjogaGFuZGxlciBcIiR7bmFtZX1cIiBpcyBub3QgcmVnaXN0ZXJlZGApO1xuICAgIHRoaXMubmFtZSA9IFwiVW5rbm93bkhhbmRsZXJFcnJvclwiO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmtub3duUHJlZGljYXRlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKGBVbmtub3duUHJlZGljYXRlRXJyb3I6IHByZWRpY2F0ZSBcIiR7bmFtZX1cIiBpcyBub3QgcmVnaXN0ZXJlZGApO1xuICAgIHRoaXMubmFtZSA9IFwiVW5rbm93blByZWRpY2F0ZUVycm9yXCI7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgSGFuZGxlckZuID0gKHNlc3Npb246IHVua25vd24sIG1hdGNoOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gdm9pZDtcbi8qKlxuICogUHJlZGljYXRlIHNpZ25hdHVyZS5cbiAqXG4gKiBQcmVkaWNhdGVzIHJlY2VpdmUgdGhlIGN1cnJlbnQgYmluZGluZ3MgKHZhcmlhYmxlIG5hbWUg4oaSIHZhbHVlKSBhbmQgYVxuICogZnJvemVuLWJ1dC10eXBlZCBsaXN0IG9mIHN0YXRpYyBhcmd1bWVudHMgZGVjbGFyZWQgaW4gdGhlIHJ1bGUncyBmaWx0ZXJcbiAqIHNwZWMgKHNlZSB7QGxpbmsgRmlsdGVyU3BlY30pLiBSZXR1cm5pbmcgYHRydWVgIGxldHMgdGhlIHBhcnRpYWwgbWF0Y2hcbiAqIHByb2NlZWQ7IGBmYWxzZWAgZmlsdGVycyBpdCBvdXQuXG4gKlxuICogU3RhdGljIGBhcmdzYCBhcmUgcGFydCBvZiB0aGUgY2FsbCBzaWduYXR1cmUgc28gdGhlIHNhbWUgcmVnaXN0ZXJlZFxuICogcHJlZGljYXRlIGNhbiBiZSByZXVzZWQgd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVycyBhY3Jvc3MgZmlsdGVyIHNwZWNzXG4gKiAoZS5nLiBgZ3JlYXRlclRoYW4oNTApYCB2cyBgZ3JlYXRlclRoYW4oMClgKSB3aXRob3V0IHBlci1zcGVjIGNsb3N1cmVzLlxuICovXG5leHBvcnQgdHlwZSBQcmVkaWNhdGVGbiA9IChcbiAgbWF0Y2g6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBhcmdzOiByZWFkb25seSB1bmtub3duW10sXG4pID0+IGJvb2xlYW47XG5cbmV4cG9ydCBjbGFzcyBIYW5kbGVyUmVnaXN0cnkge1xuICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZXJzID0gbmV3IE1hcDxzdHJpbmcsIEhhbmRsZXJGbj4oKTtcblxuICByZWdpc3RlcihuYW1lOiBzdHJpbmcsIGZuOiBIYW5kbGVyRm4pOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZXJzLnNldChuYW1lLCBmbik7XG4gIH1cblxuICBnZXQobmFtZTogc3RyaW5nKTogSGFuZGxlckZuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVycy5nZXQobmFtZSk7XG4gIH1cblxuICBoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlcnMuaGFzKG5hbWUpO1xuICB9XG5cbiAgLyoqIFZlcmlmeSBhbGwgbGlzdGVkIGhhbmRsZXIgbmFtZXMgYXJlIHJlZ2lzdGVyZWQuIFRocm93cyBVbmtub3duSGFuZGxlckVycm9yIGlmIGFueSBtaXNzaW5nLiAqL1xuICB2ZXJpZnkobmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIG5hbWVzKSB7XG4gICAgICBpZiAoIXRoaXMuaGFuZGxlcnMuaGFzKG5hbWUpKSB0aHJvdyBuZXcgVW5rbm93bkhhbmRsZXJFcnJvcihuYW1lKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByZWRpY2F0ZVJlZ2lzdHJ5IHtcbiAgcHJpdmF0ZSByZWFkb25seSBwcmVkaWNhdGVzID0gbmV3IE1hcDxzdHJpbmcsIFByZWRpY2F0ZUZuPigpO1xuXG4gIHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgZm46IFByZWRpY2F0ZUZuKTogdm9pZCB7XG4gICAgdGhpcy5wcmVkaWNhdGVzLnNldChuYW1lLCBmbik7XG4gIH1cblxuICBnZXQobmFtZTogc3RyaW5nKTogUHJlZGljYXRlRm4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByZWRpY2F0ZXMuZ2V0KG5hbWUpO1xuICB9XG5cbiAgaGFzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByZWRpY2F0ZXMuaGFzKG5hbWUpO1xuICB9XG5cbiAgdmVyaWZ5KG5hbWVzOiByZWFkb25seSBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuICAgICAgaWYgKCF0aGlzLnByZWRpY2F0ZXMuaGFzKG5hbWUpKSB0aHJvdyBuZXcgVW5rbm93blByZWRpY2F0ZUVycm9yKG5hbWUpO1xuICAgIH1cbiAgfVxufVxuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvZGlzdC9yZWdpc3RyeS5qcyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/976d380d8ad4c558f2108e3e9ed81b5dcaf23e3f b/7xOfJqsDU787fe61oSCq1/web/976d380d8ad4c558f2108e3e9ed81b5dcaf23e3f deleted file mode 100644 index a946ed7..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/976d380d8ad4c558f2108e3e9ed81b5dcaf23e3f +++ /dev/null @@ -1,33 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/presets/registry.ts", {"importedNames":["PRESET_REGISTRY"]}); -__vite_ssr_import_0__.PRESET_REGISTRY.register({ - id: "last-piece-standing", - name: "Annihilation", - description: "Checkmate is disabled. The player who captures ALL enemy pieces (king included) wins. Every capture counts.", - incompatibleWith: ["capture-to-win"], - requires: [], - onCheckGameResult({ engine }) { - const facts = engine.session.allFacts(); - const colorById = /* @__PURE__ */ new Map(); - for (const f of facts) { - if (f.attr === "Color") colorById.set(f.id, f.value); - }; - let whiteCount = 0; - let blackCount = 0; - for (const f of facts) { - if (f.attr !== "Position") continue; - if (f.id <= 0) continue; - const color = colorById.get(f.id); - if (color === "white") whiteCount++; - else if (color === "black") blackCount++; - }; - if (whiteCount === 0 && blackCount === 0) { - return "draw-insufficient"; - }; - if (whiteCount === 0) return "black-wins"; - if (blackCount === 0) return "white-wins"; - return "ongoing"; - } -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBMkJBO0FBR0Esc0NBQWdCLFNBQVM7QUFBQSxFQUN2QixJQUFJO0FBQUEsRUFDSixNQUFNO0FBQUEsRUFDTixhQUNFO0FBQUEsRUFDRixrQkFBa0IsQ0FBQyxnQkFBZ0I7QUFBQSxFQUNuQyxVQUFVLENBQUM7QUFBQSxFQUVYLGtCQUFrQixFQUFFLE9BQU8sR0FBMkI7QUFJcEQsVUFBTSxRQUFRLE9BQU8sUUFBUSxTQUFTO0FBQ3RDLFVBQU0sWUFBWSxvQkFBSSxJQUFvQjtBQUMxQyxlQUFXLEtBQUssT0FBTztBQUNyQixVQUFJLEVBQUUsU0FBUyxRQUFTLFdBQVUsSUFBSSxFQUFFLElBQWMsRUFBRSxLQUFlO0FBQUEsSUFDekU7QUFFQSxRQUFJLGFBQWE7QUFDakIsUUFBSSxhQUFhO0FBQ2pCLGVBQVcsS0FBSyxPQUFPO0FBQ3JCLFVBQUksRUFBRSxTQUFTLFdBQVk7QUFDM0IsVUFBSyxFQUFFLE1BQWlCLEVBQUc7QUFDM0IsWUFBTSxRQUFRLFVBQVUsSUFBSSxFQUFFLEVBQVk7QUFDMUMsVUFBSSxVQUFVLFFBQVM7QUFBQSxlQUNkLFVBQVUsUUFBUztBQUFBLElBQzlCO0FBRUEsUUFBSSxlQUFlLEtBQUssZUFBZSxHQUFHO0FBR3hDLGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSSxlQUFlLEVBQUcsUUFBTztBQUM3QixRQUFJLGVBQWUsRUFBRyxRQUFPO0FBTTdCLFdBQU87QUFBQSxFQUNUO0FBQ0YsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsibGFzdC1waWVjZS1zdGFuZGluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByZXNldDogYGxhc3QtcGllY2Utc3RhbmRpbmdgIChBbm5paGlsYXRpb24sIFJVTEVTLm1kIHJ1bGUgIzEyKVxuICpcbiAqIFRoZSBraW5nIGhhcyBubyBzcGVjaWFsIHN0YXR1cy4gQ2hlY2ttYXRlIGlzIGRpc2FibGVkLiBUaGUgcGxheWVyXG4gKiB3aG8gY2FwdHVyZXMgQUxMIGVuZW15IHBpZWNlcyB3aW5zIOKAlCBtZWFuaW5nIHRoZSBvcHBvbmVudCdzIHBpZWNlXG4gKiBjb3VudCBkcm9wcyB0byAwIChraW5nIGluY2x1ZGVkKS5cbiAqXG4gKiBXaXJpbmcgaXMgcHVyZSBgb25DaGVja0dhbWVSZXN1bHRgOlxuICogIC0gQ291bnQgcGllY2VzIGJ5IGNvbG9yLlxuICogIC0gSWYgb25lIGNvbG9yIGhhcyAwIHBpZWNlcywgdGhlIG90aGVyIGNvbG9yIHdpbnMuXG4gKiAgLSBPdGhlcndpc2UgcmV0dXJuIHVuZGVmaW5lZCDigJQgdGhlIGdhbWUgY29udGludWVzLiBXZSBkZWxpYmVyYXRlbHlcbiAqICAgIFNVUFBSRVNTIHRoZSBkZWZhdWx0IGNoZWNrbWF0ZSBhbmQgc3RhbGVtYXRlIGRldGVjdGlvbiBieVxuICogICAgcmV0dXJuaW5nIFwib25nb2luZ1wiIHdoZW5ldmVyIG5laXRoZXIgc2lkZSBpcyBhbm5paGlsYXRlZDsgdGhpc1xuICogICAgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGBpc0NoZWNrbWF0ZWAvYGlzU3RhbGVtYXRlYCBjaGVja3MgaW5cbiAqICAgIGBlbmdpbmUuY2hlY2tHYW1lUmVzdWx0YC5cbiAqXG4gKiBOb3RlIHRoYXQgYGZpbHRlclNlbGZDaGVja01vdmVzYCBzdGlsbCBydW5zIGluIG1vdmUgZ2VuZXJhdGlvbiwgc29cbiAqIHBsYXllcnMgc3RpbGwgY2FuJ3QgbW92ZSB0aGVpciBraW5nIGludG8gY2hlY2sgdm9sdW50YXJpbHkuIFRoYXQnc1xuICogYSBVWCBjb25jZXNzaW9uOiB1bmRlciBwdXJlIEFubmloaWxhdGlvbiBydWxlcyBhIHN1aWNpZGFsIGtpbmdcbiAqIG1vdmUgaXMgdGVjaG5pY2FsbHkgbGVnYWwsIGJ1dCBibG9ja2luZyBpdCBrZWVwcyB0aGUgZ2FtZSByZWFkYWJsZVxuICogKG90aGVyd2lzZSBhIGJsdW5kZXJpbmcgcGxheWVyIGNvdWxkIGFjY2lkZW50YWxseSB0cmFwIHRoZW1zZWx2ZXNcbiAqIHdpdGggbm8gbGVnYWwgbW92ZXMpLiBGdXR1cmUgd29yayBjb3VsZCBhZGQgYSBzY29wZSBmb3IgXCJkaXNhYmxlXG4gKiBzZWxmLWNoZWNrIGZpbHRlclwiIGlmIHdlIHdhbnQgc3RyaWN0ZXIgdmFyaWFudCBwdXJpdHkuXG4gKlxuICogSW5jb21wYXRpYmxlIHdpdGggYGNhcHR1cmUtdG8td2luYCDigJQgYm90aCByZWRlZmluZSBcIndoZW4gaXMgdGhlXG4gKiBnYW1lIG92ZXJcIi5cbiAqL1xuaW1wb3J0IHsgUFJFU0VUX1JFR0lTVFJZIH0gZnJvbSBcIi4vcmVnaXN0cnkuanNcIjtcbmltcG9ydCB0eXBlIHsgR2FtZVJlc3VsdCB9IGZyb20gXCIuLi9lbmdpbmUuanNcIjtcblxuUFJFU0VUX1JFR0lTVFJZLnJlZ2lzdGVyKHtcbiAgaWQ6IFwibGFzdC1waWVjZS1zdGFuZGluZ1wiLFxuICBuYW1lOiBcIkFubmloaWxhdGlvblwiLFxuICBkZXNjcmlwdGlvbjpcbiAgICBcIkNoZWNrbWF0ZSBpcyBkaXNhYmxlZC4gVGhlIHBsYXllciB3aG8gY2FwdHVyZXMgQUxMIGVuZW15IHBpZWNlcyAoa2luZyBpbmNsdWRlZCkgd2lucy4gRXZlcnkgY2FwdHVyZSBjb3VudHMuXCIsXG4gIGluY29tcGF0aWJsZVdpdGg6IFtcImNhcHR1cmUtdG8td2luXCJdLFxuICByZXF1aXJlczogW10sXG5cbiAgb25DaGVja0dhbWVSZXN1bHQoeyBlbmdpbmUgfSk6IEdhbWVSZXN1bHQgfCB1bmRlZmluZWQge1xuICAgIC8vIENvdW50IFBvc2l0aW9uIGZhY3RzIHBlciBjb2xvci4gV2UgdXNlIFBvc2l0aW9uIHJhdGhlciB0aGFuXG4gICAgLy8gUGllY2VUeXBlIGJlY2F1c2UgYSBwaWVjZSBcImV4aXN0cyBvbiB0aGUgYm9hcmRcIiBpZmYgaXQgaGFzIGFcbiAgICAvLyBwb3NpdGlvbjsgcmV0cmFjdGVkIHBpZWNlcyAoY2FwdHVyZWQpIGhhdmUgbm8gUG9zaXRpb24gZmFjdC5cbiAgICBjb25zdCBmYWN0cyA9IGVuZ2luZS5zZXNzaW9uLmFsbEZhY3RzKCk7XG4gICAgY29uc3QgY29sb3JCeUlkID0gbmV3IE1hcDxudW1iZXIsIHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IGYgb2YgZmFjdHMpIHtcbiAgICAgIGlmIChmLmF0dHIgPT09IFwiQ29sb3JcIikgY29sb3JCeUlkLnNldChmLmlkIGFzIG51bWJlciwgZi52YWx1ZSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIGxldCB3aGl0ZUNvdW50ID0gMDtcbiAgICBsZXQgYmxhY2tDb3VudCA9IDA7XG4gICAgZm9yIChjb25zdCBmIG9mIGZhY3RzKSB7XG4gICAgICBpZiAoZi5hdHRyICE9PSBcIlBvc2l0aW9uXCIpIGNvbnRpbnVlO1xuICAgICAgaWYgKChmLmlkIGFzIG51bWJlcikgPD0gMCkgY29udGludWU7XG4gICAgICBjb25zdCBjb2xvciA9IGNvbG9yQnlJZC5nZXQoZi5pZCBhcyBudW1iZXIpO1xuICAgICAgaWYgKGNvbG9yID09PSBcIndoaXRlXCIpIHdoaXRlQ291bnQrKztcbiAgICAgIGVsc2UgaWYgKGNvbG9yID09PSBcImJsYWNrXCIpIGJsYWNrQ291bnQrKztcbiAgICB9XG5cbiAgICBpZiAod2hpdGVDb3VudCA9PT0gMCAmJiBibGFja0NvdW50ID09PSAwKSB7XG4gICAgICAvLyBEZWdlbmVyYXRlIOKAlCBib3RoIHNpZGVzIHdpcGVkIHNpbXVsdGFuZW91c2x5IHNvbWVob3cuIENhbGxcbiAgICAgIC8vIGl0IGEgZHJhdy1ieS1hbm5paGlsYXRpb24uXG4gICAgICByZXR1cm4gXCJkcmF3LWluc3VmZmljaWVudFwiO1xuICAgIH1cbiAgICBpZiAod2hpdGVDb3VudCA9PT0gMCkgcmV0dXJuIFwiYmxhY2std2luc1wiO1xuICAgIGlmIChibGFja0NvdW50ID09PSAwKSByZXR1cm4gXCJ3aGl0ZS13aW5zXCI7XG5cbiAgICAvLyBOZWl0aGVyIHNpZGUgaXMgYW5uaWhpbGF0ZWQg4oCUIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGNoZWNrbWF0ZS9cbiAgICAvLyBzdGFsZW1hdGUgZGV0ZWN0aW9uIGJ5IGRlY2xhcmluZyB0aGUgZ2FtZSBvbmdvaW5nLiBXaXRob3V0IHRoaXNcbiAgICAvLyByZXR1cm4sIHRoZSBlbmdpbmUgd291bGQgZmFsbCB0aHJvdWdoIHRvIGlzQ2hlY2ttYXRlIHdoaWNoXG4gICAgLy8gY291bGQgc3B1cmlvdXNseSBlbmQgdGhlIGdhbWUgdW5kZXIgcHVyZSBGSURFIHJ1bGVzLlxuICAgIHJldHVybiBcIm9uZ29pbmdcIjtcbiAgfSxcbn0pO1xuIl0sImZpbGUiOiIvc3JjL3ByZXNldHMvbGFzdC1waWVjZS1zdGFuZGluZy50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/9821dc9a464f6f41c8a232a233cbc2f605203678 b/7xOfJqsDU787fe61oSCq1/web/9821dc9a464f6f41c8a232a233cbc2f605203678 deleted file mode 100644 index ad1498d..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/9821dc9a464f6f41c8a232a233cbc2f605203678 +++ /dev/null @@ -1,99 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "loadLibrary", { enumerable: true, configurable: true, get(){ try { return loadLibrary } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "saveToLibrary", { enumerable: true, configurable: true, get(){ try { return saveToLibrary } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "deleteFromLibrary", { enumerable: true, configurable: true, get(){ try { return deleteFromLibrary } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "setStarred", { enumerable: true, configurable: true, get(){ try { return setStarred } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "duplicateEntry", { enumerable: true, configurable: true, get(){ try { return duplicateEntry } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "makeId", { enumerable: true, configurable: true, get(){ try { return makeId } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "__test__", { enumerable: true, configurable: true, get(){ try { return __test__ } catch {} }}); -const STORAGE_KEY = "houserules:layouts:v1"; -const MAX_ENTRIES = 20; -function loadLibrary() { - try { - const raw = localStorage.getItem(STORAGE_KEY); - if (raw === null) return []; - const parsed = JSON.parse(raw); - if (!Array.isArray(parsed)) return []; - return parsed.filter(isSavedLayout); - } catch { - return []; - } -}; -function writeLibrary(entries) { - try { - localStorage.setItem(STORAGE_KEY, JSON.stringify(entries)); - } catch { - } -} -function saveToLibrary(entry) { - const library = loadLibrary(); - const existingIdx = library.findIndex((e) => e.id === entry.id); - if (existingIdx >= 0) { - library[existingIdx] = entry; - writeLibrary(library); - return { ok: true }; - }; - if (library.length >= MAX_ENTRIES) { - const evictable = library.filter((e) => !e.starred).sort((a, b) => a.updatedAt - b.updatedAt); - if (evictable.length === 0) { - return { - ok: false, - reason: "Library full (20 layouts). Unstar one to make room, or delete an entry." - }; - }; - const oldestNonStarred = evictable[0]; - const pruned = library.filter((e) => e.id !== oldestNonStarred.id); - pruned.push(entry); - writeLibrary(pruned); - return { ok: true }; - }; - library.push(entry); - writeLibrary(library); - return { ok: true }; -}; -function deleteFromLibrary(id) { - const library = loadLibrary(); - writeLibrary(library.filter((e) => e.id !== id)); -}; -function setStarred(id, starred) { - const library = loadLibrary(); - const idx = library.findIndex((e) => e.id === id); - if (idx < 0) return; - const updated = { - ...library[idx], - starred, - updatedAt: Date.now() - }; - library[idx] = updated; - writeLibrary(library); -}; -function duplicateEntry(id) { - const library = loadLibrary(); - const entry = library.find((e) => e.id === id); - if (entry === void 0) return void 0; - const newId = makeId(); - const copy = { - id: newId, - name: `${entry.name} (copy)`, - pieces: entry.pieces, - starred: false, - updatedAt: Date.now() - }; - const result = saveToLibrary(copy); - if (!result.ok) return void 0; - return newId; -}; -function makeId() { - if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") { - return crypto.randomUUID(); - }; - return `layout-${Math.random().toString(36).slice(2, 12)}`; -}; -function isSavedLayout(value) { - if (typeof value !== "object" || value === null) return false; - const v = value; - return typeof v["id"] === "string" && typeof v["name"] === "string" && Array.isArray(v["pieces"]) && typeof v["starred"] === "boolean" && typeof v["updatedAt"] === "number"; -} -const __test__ = { STORAGE_KEY, MAX_ENTRIES }; - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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V0FBTyxPQUFPLFdBQVc7QUFBQSxFQUMzQjtBQUNBLFNBQU8sVUFBVSxLQUFLLE9BQU8sRUFBRSxTQUFTLEVBQUUsRUFBRSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQzFEO0FBSUEsU0FBUyxjQUFjLE9BQXNDO0FBQzNELE1BQUksT0FBTyxVQUFVLFlBQVksVUFBVSxLQUFNLFFBQU87QUFDeEQsUUFBTSxJQUFJO0FBQ1YsU0FDRSxPQUFPLEVBQUUsSUFBSSxNQUFNLFlBQ25CLE9BQU8sRUFBRSxNQUFNLE1BQU0sWUFDckIsTUFBTSxRQUFRLEVBQUUsUUFBUSxDQUFDLEtBQ3pCLE9BQU8sRUFBRSxTQUFTLE1BQU0sYUFDeEIsT0FBTyxFQUFFLFdBQVcsTUFBTTtBQUU5QjtBQUdPLE1BQU0sV0FBVyxFQUFFLGFBQWEsWUFBWSIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsibGF5b3V0LWxpYnJhcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTYXZlZC1sYXlvdXQgbGlicmFyeSDigJQgbG9jYWxTdG9yYWdlLWJhY2tlZCBzdG9yZSBvZiB1c2VyLWF1dGhvcmVkXG4gKiBzdGFydGluZyBsYXlvdXRzLlxuICpcbiAqIEVhY2ggZW50cnk6XG4gKiAgIC0gYGlkYCDigJQgbG9jYWwtb25seSBVVUlEIChOT1QgdGhlIHNlcnZlci1zaWRlIGxheW91dCBpZCB3aGljaCBpc1xuICogICAgIGFsd2F5cyBcImN1c3RvbVwiIGZvciB1c2VyIGxheW91dHMpLiBVc2VkIHRvIGlkZW50aWZ5IHRoZSBlbnRyeVxuICogICAgIGZvciB1cGRhdGUvZGVsZXRlL3N0YXIgb3BlcmF0aW9ucy5cbiAqICAgLSBgbmFtZWAg4oCUIHVzZXItcHJvdmlkZWQgbGFiZWwsIHNob3duIGluIHRoZSBsaWJyYXJ5IGRyYXdlci5cbiAqICAgLSBgcGllY2VzYCDigJQgdGhlIHBpZWNlIHBsYWNlbWVudHMuXG4gKiAgIC0gYHN0YXJyZWRgIOKAlCB0cnVlIHdoZW4gdGhlIHVzZXIgaGFzIHBpbm5lZCB0aGlzIGxheW91dC4gU3RhcnJlZFxuICogICAgIGVudHJpZXMgYXJlIGV4ZW1wdCBmcm9tIEZJRk8gZXZpY3Rpb24gYW5kIHNvcnQgZmlyc3QuXG4gKiAgIC0gYHVwZGF0ZWRBdGAg4oCUIHVuaXggbXMgb2YgbGFzdCB3cml0ZS4gRHJpdmVzIGRpc3BsYXkgb3JkZXIgZm9yXG4gKiAgICAgbm9uLXN0YXJyZWQgZW50cmllcyAobmV3ZXN0IGZpcnN0KSBhbmQgRklGTyBldmljdGlvbiAob2xkZXN0XG4gKiAgICAgbm9uLXN0YXJyZWQgZW50cnkgaXMgcmVtb3ZlZCB3aGVuIGNhcGFjaXR5IGlzIGhpdCkuXG4gKlxuICogQ2FwYWNpdHk6IE1BWF9FTlRSSUVTICgyMCkuIFdoZW4gZXhjZWVkZWQsIHRoZSBvbGRlc3Qgbm9uLXN0YXJyZWRcbiAqIGVudHJ5IGlzIGV2aWN0ZWQuIElmIGV2ZXJ5IGVudHJ5IGlzIHN0YXJyZWQsIHdlIHJlZnVzZSB0aGUgc2F2ZVxuICogYW5kIHRoZSBjYWxsZXIgc3VyZmFjZXMgYSBcImxpYnJhcnkgZnVsbCDigJQgdW5zdGFyIHNvbWV0aGluZ1wiIGVycm9yLlxuICpcbiAqIFN0b3JhZ2Uga2V5IGlzIHZlcnNpb25lZCAoYGhvdXNlcnVsZXM6bGF5b3V0czp2MWApLiBBIHNjaGVtYSBidW1wXG4gKiB3b3VsZCBzaGlwIGEgbmV3IGtleSArIG1pZ3JhdGlvbjsgdjEgZW50cmllcyBhcmUga2VwdCBvbiBiZXN0LVxuICogZWZmb3J0IGFuZCByZS1oeWRyYXRlZCByZWFkLW9ubHkgaWYgdGhleSBjYW4ndCBiZSBtaWdyYXRlZC5cbiAqL1xuaW1wb3J0IHR5cGUgeyBQaWVjZVBsYWNlbWVudCB9IGZyb20gXCIuLi9sYXlvdXRzL3R5cGVzLmpzXCI7XG5cbmNvbnN0IFNUT1JBR0VfS0VZID0gXCJob3VzZXJ1bGVzOmxheW91dHM6djFcIjtcbmNvbnN0IE1BWF9FTlRSSUVTID0gMjA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2F2ZWRMYXlvdXQge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBpZWNlczogcmVhZG9ubHkgUGllY2VQbGFjZW1lbnRbXTtcbiAgcmVhZG9ubHkgc3RhcnJlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdXBkYXRlZEF0OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVhZCBldmVyeSBzYXZlZCBsYXlvdXQgZnJvbSBzdG9yYWdlLiBSZXR1cm5zIGFuIGVtcHR5IGFycmF5IG9uXG4gKiBlbXB0eS9taXNzaW5nL2NvcnJ1cHQgc3RvcmFnZSDigJQgc2lsZW50bHkgZGlzY2FyZGluZyB1bnBhcnNlYWJsZVxuICogZGF0YSBpcyBwcmVmZXJhYmxlIHRvIGJsb2NraW5nIHRoZSBVSS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRMaWJyYXJ5KCk6IFNhdmVkTGF5b3V0W10ge1xuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICBpZiAocmF3ID09PSBudWxsKSByZXR1cm4gW107XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpIGFzIHVua25vd247XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcnNlZCkpIHJldHVybiBbXTtcbiAgICAvLyBTaGFsbG93IHNoYXBlIHZhbGlkYXRpb24g4oCUIGFueXRoaW5nIHRoYXQgZmFpbHMgaXMgZHJvcHBlZC5cbiAgICByZXR1cm4gcGFyc2VkLmZpbHRlcihpc1NhdmVkTGF5b3V0KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbi8qKiBXcml0ZSB0aGUgZnVsbCBsaWJyYXJ5IGFycmF5IGJhY2sgdG8gc3RvcmFnZS4gKi9cbmZ1bmN0aW9uIHdyaXRlTGlicmFyeShlbnRyaWVzOiBTYXZlZExheW91dFtdKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KGVudHJpZXMpKTtcbiAgfSBjYXRjaCB7XG4gICAgLyogcXVvdGEgZXhjZWVkZWQgLyBzdG9yYWdlIGRpc2FibGVkIOKAlCBiZXN0IGVmZm9ydCAqL1xuICB9XG59XG5cbi8qKlxuICogU2F2ZSBhIG5ldyBsYXlvdXQgb3IgdXBkYXRlIGFuIGV4aXN0aW5nIG9uZSAobWF0Y2hlZCBieSBgaWRgKS5cbiAqXG4gKiBSZXR1cm5zIGB7IG9rOiB0cnVlIH1gIG9uIHN1Y2Nlc3MuIFJldHVybnMgYHsgb2s6IGZhbHNlLCByZWFzb24gfWBcbiAqIHdoZW4gdGhlIGxpYnJhcnkgaXMgZnVsbCBvZiBzdGFycmVkIGVudHJpZXMg4oCUIGNhbGxlciBzdXJmYWNlcyBhXG4gKiBtZXNzYWdlIHRlbGxpbmcgdGhlIHVzZXIgdG8gdW5zdGFyIHNvbWV0aGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhdmVUb0xpYnJhcnkoXG4gIGVudHJ5OiBTYXZlZExheW91dCxcbik6IHsgb2s6IHRydWUgfSB8IHsgb2s6IGZhbHNlOyByZWFzb246IHN0cmluZyB9IHtcbiAgY29uc3QgbGlicmFyeSA9IGxvYWRMaWJyYXJ5KCk7XG4gIGNvbnN0IGV4aXN0aW5nSWR4ID0gbGlicmFyeS5maW5kSW5kZXgoKGUpID0+IGUuaWQgPT09IGVudHJ5LmlkKTtcblxuICBpZiAoZXhpc3RpbmdJZHggPj0gMCkge1xuICAgIC8vIFVwZGF0ZSBpbiBwbGFjZSDigJQgbm8gY2FwYWNpdHkgY2hlY2sgbmVlZGVkLlxuICAgIGxpYnJhcnlbZXhpc3RpbmdJZHhdID0gZW50cnk7XG4gICAgd3JpdGVMaWJyYXJ5KGxpYnJhcnkpO1xuICAgIHJldHVybiB7IG9rOiB0cnVlIH07XG4gIH1cblxuICAvLyBOZXcgZW50cnkg4oCUIGVuZm9yY2UgY2FwYWNpdHkuXG4gIGlmIChsaWJyYXJ5Lmxlbmd0aCA+PSBNQVhfRU5UUklFUykge1xuICAgIC8vIEZpbmQgdGhlIG9sZGVzdCBub24tc3RhcnJlZCBlbnRyeSBhbmQgZXZpY3QgaXQuXG4gICAgY29uc3QgZXZpY3RhYmxlID0gbGlicmFyeVxuICAgICAgLmZpbHRlcigoZSkgPT4gIWUuc3RhcnJlZClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnVwZGF0ZWRBdCAtIGIudXBkYXRlZEF0KTtcbiAgICBpZiAoZXZpY3RhYmxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICByZWFzb246XG4gICAgICAgICAgXCJMaWJyYXJ5IGZ1bGwgKDIwIGxheW91dHMpLiBVbnN0YXIgb25lIHRvIG1ha2Ugcm9vbSwgb3IgZGVsZXRlIGFuIGVudHJ5LlwiLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3Qgb2xkZXN0Tm9uU3RhcnJlZCA9IGV2aWN0YWJsZVswXSE7XG4gICAgY29uc3QgcHJ1bmVkID0gbGlicmFyeS5maWx0ZXIoKGUpID0+IGUuaWQgIT09IG9sZGVzdE5vblN0YXJyZWQuaWQpO1xuICAgIHBydW5lZC5wdXNoKGVudHJ5KTtcbiAgICB3cml0ZUxpYnJhcnkocHJ1bmVkKTtcbiAgICByZXR1cm4geyBvazogdHJ1ZSB9O1xuICB9XG5cbiAgbGlicmFyeS5wdXNoKGVudHJ5KTtcbiAgd3JpdGVMaWJyYXJ5KGxpYnJhcnkpO1xuICByZXR1cm4geyBvazogdHJ1ZSB9O1xufVxuXG4vKiogUmVtb3ZlIGEgbGF5b3V0IGJ5IGlkLiBOby1vcCBpZiB0aGUgaWQgaXMgdW5rbm93bi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGcm9tTGlicmFyeShpZDogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IGxpYnJhcnkgPSBsb2FkTGlicmFyeSgpO1xuICB3cml0ZUxpYnJhcnkobGlicmFyeS5maWx0ZXIoKGUpID0+IGUuaWQgIT09IGlkKSk7XG59XG5cbi8qKiBUb2dnbGUgdGhlIHN0YXJyZWQgZmxhZyBvbiBhIGxheW91dC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRTdGFycmVkKGlkOiBzdHJpbmcsIHN0YXJyZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgY29uc3QgbGlicmFyeSA9IGxvYWRMaWJyYXJ5KCk7XG4gIGNvbnN0IGlkeCA9IGxpYnJhcnkuZmluZEluZGV4KChlKSA9PiBlLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwKSByZXR1cm47XG4gIGNvbnN0IHVwZGF0ZWQ6IFNhdmVkTGF5b3V0ID0ge1xuICAgIC4uLmxpYnJhcnlbaWR4XSEsXG4gICAgc3RhcnJlZCxcbiAgICB1cGRhdGVkQXQ6IERhdGUubm93KCksXG4gIH07XG4gIGxpYnJhcnlbaWR4XSA9IHVwZGF0ZWQ7XG4gIHdyaXRlTGlicmFyeShsaWJyYXJ5KTtcbn1cblxuLyoqXG4gKiBEdXBsaWNhdGUgYSBsaWJyYXJ5IGVudHJ5LiBUaGUgY29weSBnZXRzIGEgZnJlc2ggaWQsIFwiKGNvcHkpXCJcbiAqIGFwcGVuZGVkIHRvIHRoZSBuYW1lLCBhbmQgc3RhcnJlZD1mYWxzZSByZWdhcmRsZXNzIG9mIHRoZVxuICogb3JpZ2luYWwncyBzdGF0ZS4gUmV0dXJucyB0aGUgbmV3IGVudHJ5J3MgaWQgc28gdGhlIGNhbGxlciBjYW5cbiAqIHNlbGVjdCBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGR1cGxpY2F0ZUVudHJ5KGlkOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBsaWJyYXJ5ID0gbG9hZExpYnJhcnkoKTtcbiAgY29uc3QgZW50cnkgPSBsaWJyYXJ5LmZpbmQoKGUpID0+IGUuaWQgPT09IGlkKTtcbiAgaWYgKGVudHJ5ID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgbmV3SWQgPSBtYWtlSWQoKTtcbiAgY29uc3QgY29weTogU2F2ZWRMYXlvdXQgPSB7XG4gICAgaWQ6IG5ld0lkLFxuICAgIG5hbWU6IGAke2VudHJ5Lm5hbWV9IChjb3B5KWAsXG4gICAgcGllY2VzOiBlbnRyeS5waWVjZXMsXG4gICAgc3RhcnJlZDogZmFsc2UsXG4gICAgdXBkYXRlZEF0OiBEYXRlLm5vdygpLFxuICB9O1xuICBjb25zdCByZXN1bHQgPSBzYXZlVG9MaWJyYXJ5KGNvcHkpO1xuICBpZiAoIXJlc3VsdC5vaykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIG5ld0lkO1xufVxuXG4vKiogR2VuZXJhdGUgYSBsb2NhbC1vbmx5IGlkIGZvciBhIGxpYnJhcnkgZW50cnkuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZUlkKCk6IHN0cmluZyB7XG4gIC8vIGNyeXB0by5yYW5kb21VVUlEIGlzIGF2YWlsYWJsZSBpbiBldmVyeSBicm93c2VyIHdlIHRhcmdldCAoYW5kXG4gIC8vIGluIE5vZGUgMTkrKS4gRmFsbCBiYWNrIHRvIGEgTWF0aC5yYW5kb20tYmFzZWQgaWQgb25seSBvblxuICAvLyBhbmNpZW50IHJ1bnRpbWVzLlxuICBpZiAodHlwZW9mIGNyeXB0byAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgY3J5cHRvLnJhbmRvbVVVSUQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpO1xuICB9XG4gIHJldHVybiBgbGF5b3V0LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgMTIpfWA7XG59XG5cbi8vIOKUgOKUgCBJbnRlcm5hbCBoZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiBpc1NhdmVkTGF5b3V0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgU2F2ZWRMYXlvdXQge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHYgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdltcImlkXCJdID09PSBcInN0cmluZ1wiICYmXG4gICAgdHlwZW9mIHZbXCJuYW1lXCJdID09PSBcInN0cmluZ1wiICYmXG4gICAgQXJyYXkuaXNBcnJheSh2W1wicGllY2VzXCJdKSAmJlxuICAgIHR5cGVvZiB2W1wic3RhcnJlZFwiXSA9PT0gXCJib29sZWFuXCIgJiZcbiAgICB0eXBlb2YgdltcInVwZGF0ZWRBdFwiXSA9PT0gXCJudW1iZXJcIlxuICApO1xufVxuXG4vLyBFeHBvcnRlZCBmb3IgdGVzdHMgb25seS4gUHJlZmVyIHRoZSBoaWdoLWxldmVsIGhlbHBlcnMgYWJvdmUuXG5leHBvcnQgY29uc3QgX190ZXN0X18gPSB7IFNUT1JBR0VfS0VZLCBNQVhfRU5UUklFUyB9O1xuIl0sImZpbGUiOiIvc3JjL3BlcnNpc3QvbGF5b3V0LWxpYnJhcnkudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/994baeb2889f14afc67a23d081038c8021b4c55c b/7xOfJqsDU787fe61oSCq1/web/994baeb2889f14afc67a23d081038c8021b4c55c deleted file mode 100644 index fe4732e..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/994baeb2889f14afc67a23d081038c8021b4c55c +++ /dev/null @@ -1,121 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/modifiers/registry.ts", {"importedNames":["MODIFIER_REGISTRY"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/modifiers/descriptors/direction-additions.ts"); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/modifiers/descriptors/direction-additions.ts", {"importedNames":["DIRECTION_ADDITIONS_DESCRIPTOR","generateDirectionMoves"]}); - - - -(0,__vite_ssr_import_0__.describe)("direction-additions descriptor — registry", () => { - (0,__vite_ssr_import_0__.it)("registers in MODIFIER_REGISTRY under key 'direction-additions'", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.MODIFIER_REGISTRY.has("direction-additions")).toBe(true); - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.MODIFIER_REGISTRY.get("direction-additions")).toBe((0,__vite_ssr_import_4__.DIRECTION_ADDITIONS_DESCRIPTOR)); - }); -}); -(0,__vite_ssr_import_0__.describe)("direction-additions descriptor — apply()", () => { - (0,__vite_ssr_import_0__.it)("seeds DirectionAdditions fact on piece entity in session", () => { - const session = new __vite_ssr_import_1__.Session(); - const pieceId = session.nextId(); - session.insert(pieceId, "PieceType", "pawn"); - __vite_ssr_import_4__.DIRECTION_ADDITIONS_DESCRIPTOR.apply(session, pieceId, ["backward"]); - (0,__vite_ssr_import_0__.expect)(session.contains(pieceId, "DirectionAdditions")).toBe(true); - (0,__vite_ssr_import_0__.expect)(session.get(pieceId, "DirectionAdditions")).toEqual(["backward"]); - }); -}); -(0,__vite_ssr_import_0__.describe)("direction-additions descriptor — describe()", () => { - (0,__vite_ssr_import_0__.it)("formats a single direction", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_4__.DIRECTION_ADDITIONS_DESCRIPTOR.describe(["forward"])).toBe("+Directions: forward"); - }); - (0,__vite_ssr_import_0__.it)("contains all direction names when multiple directions given (union stacking)", () => { - const result = __vite_ssr_import_4__.DIRECTION_ADDITIONS_DESCRIPTOR.describe(["forward", "backward"]); - (0,__vite_ssr_import_0__.expect)(result).toContain("forward"); - (0,__vite_ssr_import_0__.expect)(result).toContain("backward"); - }); - (0,__vite_ssr_import_0__.it)("formats all eight directions", () => { - const all = __vite_ssr_import_4__.DIRECTION_ADDITIONS_DESCRIPTOR.describe([ - "forward", - "backward", - "left", - "right", - "diagonal-fl", - "diagonal-fr", - "diagonal-bl", - "diagonal-br" - ]); - (0,__vite_ssr_import_0__.expect)(all).toContain("diagonal-fl"); - (0,__vite_ssr_import_0__.expect)(all).toContain("diagonal-br"); - }); -}); -(0,__vite_ssr_import_0__.describe)("direction-additions — generateDirectionMoves()", () => { - (0,__vite_ssr_import_0__.it)("returns backward move for white pawn at e4 when e3 is empty", () => { - const session = new __vite_ssr_import_1__.Session(); - const pieceId = session.nextId(); - session.insert(pieceId, "PieceType", "pawn"); - session.insert(pieceId, "Color", "white"); - session.insert(pieceId, "Position", 28); - __vite_ssr_import_4__.DIRECTION_ADDITIONS_DESCRIPTOR.apply(session, pieceId, ["backward"]); - const moves = (0,__vite_ssr_import_4__.generateDirectionMoves)(session, pieceId); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(moves[0]).toMatchObject({ from: 28, to: 20, isCapture: false }); - }); - (0,__vite_ssr_import_0__.it)("returns no move when target square is occupied (blocked backward)", () => { - const session = new __vite_ssr_import_1__.Session(); - const pieceId = session.nextId(); - session.insert(pieceId, "PieceType", "pawn"); - session.insert(pieceId, "Color", "white"); - session.insert(pieceId, "Position", 28); - const blockerId = session.nextId(); - session.insert(blockerId, "PieceType", "pawn"); - session.insert(blockerId, "Color", "black"); - session.insert(blockerId, "Position", 20); - __vite_ssr_import_4__.DIRECTION_ADDITIONS_DESCRIPTOR.apply(session, pieceId, ["backward"]); - const moves = (0,__vite_ssr_import_4__.generateDirectionMoves)(session, pieceId); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("returns union of moves for two directions, no duplication", () => { - const session = new __vite_ssr_import_1__.Session(); - const pieceId = session.nextId(); - session.insert(pieceId, "PieceType", "pawn"); - session.insert(pieceId, "Color", "white"); - session.insert(pieceId, "Position", 28); - __vite_ssr_import_4__.DIRECTION_ADDITIONS_DESCRIPTOR.apply(session, pieceId, ["forward", "backward"]); - const moves = (0,__vite_ssr_import_4__.generateDirectionMoves)(session, pieceId); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(2); - const targets = moves.map((m) => m.to); - (0,__vite_ssr_import_0__.expect)(targets).toContain(36); - (0,__vite_ssr_import_0__.expect)(targets).toContain(20); - }); - (0,__vite_ssr_import_0__.it)("returns no moves when no DirectionAdditions fact is set", () => { - const session = new __vite_ssr_import_1__.Session(); - const pieceId = session.nextId(); - session.insert(pieceId, "PieceType", "pawn"); - session.insert(pieceId, "Color", "white"); - session.insert(pieceId, "Position", 28); - const moves = (0,__vite_ssr_import_4__.generateDirectionMoves)(session, pieceId); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("uses color-relative forward direction: black pawn at e5 forward goes to e4", () => { - const session = new __vite_ssr_import_1__.Session(); - const pieceId = session.nextId(); - session.insert(pieceId, "PieceType", "pawn"); - session.insert(pieceId, "Color", "black"); - session.insert(pieceId, "Position", 36); - __vite_ssr_import_4__.DIRECTION_ADDITIONS_DESCRIPTOR.apply(session, pieceId, ["forward"]); - const moves = (0,__vite_ssr_import_4__.generateDirectionMoves)(session, pieceId); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(moves[0]).toMatchObject({ from: 36, to: 28, isCapture: false }); - }); - (0,__vite_ssr_import_0__.it)("skips out-of-board targets (e.g. backward from rank 1)", () => { - const session = new __vite_ssr_import_1__.Session(); - const pieceId = session.nextId(); - session.insert(pieceId, "PieceType", "pawn"); - session.insert(pieceId, "Color", "white"); - session.insert(pieceId, "Position", 4); - __vite_ssr_import_4__.DIRECTION_ADDITIONS_DESCRIPTOR.apply(session, pieceId, ["backward"]); - const moves = (0,__vite_ssr_import_4__.generateDirectionMoves)(session, pieceId); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(0); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QixNQUFNLFNBQVMsU0FBUyxDQUFDLFNBQVMsQ0FBQztBQUVsRSxVQUFNLFdBQVEsOENBQXVCLFNBQVMsT0FBTztBQUNyRCxxQ0FBTyxLQUFLLEVBQUUsYUFBYSxDQUFDO0FBQzVCLHFDQUFPLE1BQU0sQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksV0FBVyxNQUFNLENBQUM7QUFBQSxFQUN2RSxDQUFDO0FBRUQsK0JBQUcsMERBQTBELE1BQU07QUFFakUsVUFBTSxVQUFVLElBQUksOEJBQVE7QUFDNUIsVUFBTSxVQUFVLFFBQVEsT0FBTztBQUMvQixZQUFRLE9BQU8sU0FBUyxhQUFhLE1BQU07QUFDM0MsWUFBUSxPQUFPLFNBQVMsU0FBUyxPQUFPO0FBQ3hDLFlBQVEsT0FBTyxTQUFTLFlBQVksQ0FBQztBQUVyQyx5REFBK0IsTUFBTSxTQUFTLFNBQVMsQ0FBQyxVQUFVLENBQUM7QUFFbkUsVUFBTSxXQUFRLDhDQUF1QixTQUFTLE9BQU87QUFDckQscUNBQU8sS0FBSyxFQUFFLGFBQWEsQ0FBQztBQUFBLEVBQzlCLENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJkaXJlY3Rpb24tYWRkaXRpb25zLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgeyBTZXNzaW9uIH0gZnJvbSBcIkBwYXJhdHlwZS9yZXRlXCI7XG5pbXBvcnQgeyBNT0RJRklFUl9SRUdJU1RSWSB9IGZyb20gXCIuLi9yZWdpc3RyeS5qc1wiO1xuaW1wb3J0IFwiLi9kaXJlY3Rpb24tYWRkaXRpb25zLmpzXCI7XG5pbXBvcnQge1xuICBESVJFQ1RJT05fQURESVRJT05TX0RFU0NSSVBUT1IsXG4gIGdlbmVyYXRlRGlyZWN0aW9uTW92ZXMsXG59IGZyb20gXCIuL2RpcmVjdGlvbi1hZGRpdGlvbnMuanNcIjtcblxuLy8gU3F1YXJlIGVuY29kaW5nOiBzcXVhcmUgPSByYW5rICogOCArIGZpbGVcbi8vIGU0ID0gcmFuayAzLCBmaWxlIDQg4oaSIDMqOCs0ID0gMjhcbi8vIGUzID0gcmFuayAyLCBmaWxlIDQg4oaSIDIqOCs0ID0gMjBcbi8vIGU1ID0gcmFuayA0LCBmaWxlIDQg4oaSIDQqOCs0ID0gMzZcbi8vIGQ0ID0gcmFuayAzLCBmaWxlIDMg4oaSIDMqOCszID0gMjdcbi8vIGY0ID0gcmFuayAzLCBmaWxlIDUg4oaSIDMqOCs1ID0gMjlcblxuZGVzY3JpYmUoXCJkaXJlY3Rpb24tYWRkaXRpb25zIGRlc2NyaXB0b3Ig4oCUIHJlZ2lzdHJ5XCIsICgpID0+IHtcbiAgaXQoXCJyZWdpc3RlcnMgaW4gTU9ESUZJRVJfUkVHSVNUUlkgdW5kZXIga2V5ICdkaXJlY3Rpb24tYWRkaXRpb25zJ1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KE1PRElGSUVSX1JFR0lTVFJZLmhhcyhcImRpcmVjdGlvbi1hZGRpdGlvbnNcIikpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KE1PRElGSUVSX1JFR0lTVFJZLmdldChcImRpcmVjdGlvbi1hZGRpdGlvbnNcIikpLnRvQmUoRElSRUNUSU9OX0FERElUSU9OU19ERVNDUklQVE9SKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJkaXJlY3Rpb24tYWRkaXRpb25zIGRlc2NyaXB0b3Ig4oCUIGFwcGx5KClcIiwgKCkgPT4ge1xuICBpdChcInNlZWRzIERpcmVjdGlvbkFkZGl0aW9ucyBmYWN0IG9uIHBpZWNlIGVudGl0eSBpbiBzZXNzaW9uXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oKTtcbiAgICBjb25zdCBwaWVjZUlkID0gc2Vzc2lvbi5uZXh0SWQoKTtcbiAgICBzZXNzaW9uLmluc2VydChwaWVjZUlkLCBcIlBpZWNlVHlwZVwiLCBcInBhd25cIik7XG5cbiAgICBESVJFQ1RJT05fQURESVRJT05TX0RFU0NSSVBUT1IuYXBwbHkoc2Vzc2lvbiwgcGllY2VJZCwgW1wiYmFja3dhcmRcIl0pO1xuXG4gICAgZXhwZWN0KHNlc3Npb24uY29udGFpbnMocGllY2VJZCwgXCJEaXJlY3Rpb25BZGRpdGlvbnNcIikpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KHNlc3Npb24uZ2V0KHBpZWNlSWQsIFwiRGlyZWN0aW9uQWRkaXRpb25zXCIpKS50b0VxdWFsKFtcImJhY2t3YXJkXCJdKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJkaXJlY3Rpb24tYWRkaXRpb25zIGRlc2NyaXB0b3Ig4oCUIGRlc2NyaWJlKClcIiwgKCkgPT4ge1xuICBpdChcImZvcm1hdHMgYSBzaW5nbGUgZGlyZWN0aW9uXCIsICgpID0+IHtcbiAgICBleHBlY3QoRElSRUNUSU9OX0FERElUSU9OU19ERVNDUklQVE9SLmRlc2NyaWJlKFtcImZvcndhcmRcIl0pKS50b0JlKFwiK0RpcmVjdGlvbnM6IGZvcndhcmRcIik7XG4gIH0pO1xuXG4gIGl0KFwiY29udGFpbnMgYWxsIGRpcmVjdGlvbiBuYW1lcyB3aGVuIG11bHRpcGxlIGRpcmVjdGlvbnMgZ2l2ZW4gKHVuaW9uIHN0YWNraW5nKVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gRElSRUNUSU9OX0FERElUSU9OU19ERVNDUklQVE9SLmRlc2NyaWJlKFtcImZvcndhcmRcIiwgXCJiYWNrd2FyZFwiXSk7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKFwiZm9yd2FyZFwiKTtcbiAgICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oXCJiYWNrd2FyZFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJmb3JtYXRzIGFsbCBlaWdodCBkaXJlY3Rpb25zXCIsICgpID0+IHtcbiAgICBjb25zdCBhbGwgPSBESVJFQ1RJT05fQURESVRJT05TX0RFU0NSSVBUT1IuZGVzY3JpYmUoW1xuICAgICAgXCJmb3J3YXJkXCIsIFwiYmFja3dhcmRcIiwgXCJsZWZ0XCIsIFwicmlnaHRcIixcbiAgICAgIFwiZGlhZ29uYWwtZmxcIiwgXCJkaWFnb25hbC1mclwiLCBcImRpYWdvbmFsLWJsXCIsIFwiZGlhZ29uYWwtYnJcIixcbiAgICBdKTtcbiAgICBleHBlY3QoYWxsKS50b0NvbnRhaW4oXCJkaWFnb25hbC1mbFwiKTtcbiAgICBleHBlY3QoYWxsKS50b0NvbnRhaW4oXCJkaWFnb25hbC1iclwiKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJkaXJlY3Rpb24tYWRkaXRpb25zIOKAlCBnZW5lcmF0ZURpcmVjdGlvbk1vdmVzKClcIiwgKCkgPT4ge1xuICBpdChcInJldHVybnMgYmFja3dhcmQgbW92ZSBmb3Igd2hpdGUgcGF3biBhdCBlNCB3aGVuIGUzIGlzIGVtcHR5XCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oKTtcbiAgICBjb25zdCBwaWVjZUlkID0gc2Vzc2lvbi5uZXh0SWQoKTtcbiAgICBzZXNzaW9uLmluc2VydChwaWVjZUlkLCBcIlBpZWNlVHlwZVwiLCBcInBhd25cIik7XG4gICAgc2Vzc2lvbi5pbnNlcnQocGllY2VJZCwgXCJDb2xvclwiLCBcIndoaXRlXCIpO1xuICAgIHNlc3Npb24uaW5zZXJ0KHBpZWNlSWQsIFwiUG9zaXRpb25cIiwgMjgpOyAvLyBlNFxuXG4gICAgRElSRUNUSU9OX0FERElUSU9OU19ERVNDUklQVE9SLmFwcGx5KHNlc3Npb24sIHBpZWNlSWQsIFtcImJhY2t3YXJkXCJdKTtcblxuICAgIGNvbnN0IG1vdmVzID0gZ2VuZXJhdGVEaXJlY3Rpb25Nb3ZlcyhzZXNzaW9uLCBwaWVjZUlkKTtcbiAgICBleHBlY3QobW92ZXMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICBleHBlY3QobW92ZXNbMF0pLnRvTWF0Y2hPYmplY3QoeyBmcm9tOiAyOCwgdG86IDIwLCBpc0NhcHR1cmU6IGZhbHNlIH0pO1xuICB9KTtcblxuICBpdChcInJldHVybnMgbm8gbW92ZSB3aGVuIHRhcmdldCBzcXVhcmUgaXMgb2NjdXBpZWQgKGJsb2NrZWQgYmFja3dhcmQpXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oKTtcbiAgICBjb25zdCBwaWVjZUlkID0gc2Vzc2lvbi5uZXh0SWQoKTtcbiAgICBzZXNzaW9uLmluc2VydChwaWVjZUlkLCBcIlBpZWNlVHlwZVwiLCBcInBhd25cIik7XG4gICAgc2Vzc2lvbi5pbnNlcnQocGllY2VJZCwgXCJDb2xvclwiLCBcIndoaXRlXCIpO1xuICAgIHNlc3Npb24uaW5zZXJ0KHBpZWNlSWQsIFwiUG9zaXRpb25cIiwgMjgpOyAvLyBlNFxuXG4gICAgLy8gQmxvY2tlciBhdCBlMyAoc3F1YXJlIDIwKVxuICAgIGNvbnN0IGJsb2NrZXJJZCA9IHNlc3Npb24ubmV4dElkKCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoYmxvY2tlcklkLCBcIlBpZWNlVHlwZVwiLCBcInBhd25cIik7XG4gICAgc2Vzc2lvbi5pbnNlcnQoYmxvY2tlcklkLCBcIkNvbG9yXCIsIFwiYmxhY2tcIik7XG4gICAgc2Vzc2lvbi5pbnNlcnQoYmxvY2tlcklkLCBcIlBvc2l0aW9uXCIsIDIwKTsgLy8gZTNcblxuICAgIERJUkVDVElPTl9BRERJVElPTlNfREVTQ1JJUFRPUi5hcHBseShzZXNzaW9uLCBwaWVjZUlkLCBbXCJiYWNrd2FyZFwiXSk7XG5cbiAgICBjb25zdCBtb3ZlcyA9IGdlbmVyYXRlRGlyZWN0aW9uTW92ZXMoc2Vzc2lvbiwgcGllY2VJZCk7XG4gICAgZXhwZWN0KG1vdmVzKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyB1bmlvbiBvZiBtb3ZlcyBmb3IgdHdvIGRpcmVjdGlvbnMsIG5vIGR1cGxpY2F0aW9uXCIsICgpID0+IHtcbiAgICAvLyB3aGl0ZSBwYXduIGF0IGU0OiBmb3J3YXJkIOKGkiBlNSAoMzYpLCBiYWNrd2FyZCDihpIgZTMgKDIwKVxuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbigpO1xuICAgIGNvbnN0IHBpZWNlSWQgPSBzZXNzaW9uLm5leHRJZCgpO1xuICAgIHNlc3Npb24uaW5zZXJ0KHBpZWNlSWQsIFwiUGllY2VUeXBlXCIsIFwicGF3blwiKTtcbiAgICBzZXNzaW9uLmluc2VydChwaWVjZUlkLCBcIkNvbG9yXCIsIFwid2hpdGVcIik7XG4gICAgc2Vzc2lvbi5pbnNlcnQocGllY2VJZCwgXCJQb3NpdGlvblwiLCAyOCk7IC8vIGU0XG5cbiAgICBESVJFQ1RJT05fQURESVRJT05TX0RFU0NSSVBUT1IuYXBwbHkoc2Vzc2lvbiwgcGllY2VJZCwgW1wiZm9yd2FyZFwiLCBcImJhY2t3YXJkXCJdKTtcblxuICAgIGNvbnN0IG1vdmVzID0gZ2VuZXJhdGVEaXJlY3Rpb25Nb3ZlcyhzZXNzaW9uLCBwaWVjZUlkKTtcbiAgICBleHBlY3QobW92ZXMpLnRvSGF2ZUxlbmd0aCgyKTtcbiAgICBjb25zdCB0YXJnZXRzID0gbW92ZXMubWFwKG0gPT4gbS50byk7XG4gICAgZXhwZWN0KHRhcmdldHMpLnRvQ29udGFpbigzNik7IC8vIGU1IChmb3J3YXJkKVxuICAgIGV4cGVjdCh0YXJnZXRzKS50b0NvbnRhaW4oMjApOyAvLyBlMyAoYmFja3dhcmQpXG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyBubyBtb3ZlcyB3aGVuIG5vIERpcmVjdGlvbkFkZGl0aW9ucyBmYWN0IGlzIHNldFwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKCk7XG4gICAgY29uc3QgcGllY2VJZCA9IHNlc3Npb24ubmV4dElkKCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQocGllY2VJZCwgXCJQaWVjZVR5cGVcIiwgXCJwYXduXCIpO1xuICAgIHNlc3Npb24uaW5zZXJ0KHBpZWNlSWQsIFwiQ29sb3JcIiwgXCJ3aGl0ZVwiKTtcbiAgICBzZXNzaW9uLmluc2VydChwaWVjZUlkLCBcIlBvc2l0aW9uXCIsIDI4KTsgLy8gZTRcbiAgICAvLyBEaXJlY3Rpb25BZGRpdGlvbnMgTk9UIHNlZWRlZFxuXG4gICAgY29uc3QgbW92ZXMgPSBnZW5lcmF0ZURpcmVjdGlvbk1vdmVzKHNlc3Npb24sIHBpZWNlSWQpO1xuICAgIGV4cGVjdChtb3ZlcykudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcblxuICBpdChcInVzZXMgY29sb3ItcmVsYXRpdmUgZm9yd2FyZCBkaXJlY3Rpb246IGJsYWNrIHBhd24gYXQgZTUgZm9yd2FyZCBnb2VzIHRvIGU0XCIsICgpID0+IHtcbiAgICAvLyBibGFjayBmb3J3YXJkID0gZHI9LTE7IGU1ID0gc3F1YXJlIDM2LCBlNCA9IHNxdWFyZSAyOFxuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbigpO1xuICAgIGNvbnN0IHBpZWNlSWQgPSBzZXNzaW9uLm5leHRJZCgpO1xuICAgIHNlc3Npb24uaW5zZXJ0KHBpZWNlSWQsIFwiUGllY2VUeXBlXCIsIFwicGF3blwiKTtcbiAgICBzZXNzaW9uLmluc2VydChwaWVjZUlkLCBcIkNvbG9yXCIsIFwiYmxhY2tcIik7XG4gICAgc2Vzc2lvbi5pbnNlcnQocGllY2VJZCwgXCJQb3NpdGlvblwiLCAzNik7IC8vIGU1XG5cbiAgICBESVJFQ1RJT05fQURESVRJT05TX0RFU0NSSVBUT1IuYXBwbHkoc2Vzc2lvbiwgcGllY2VJZCwgW1wiZm9yd2FyZFwiXSk7XG5cbiAgICBjb25zdCBtb3ZlcyA9IGdlbmVyYXRlRGlyZWN0aW9uTW92ZXMoc2Vzc2lvbiwgcGllY2VJZCk7XG4gICAgZXhwZWN0KG1vdmVzKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgZXhwZWN0KG1vdmVzWzBdKS50b01hdGNoT2JqZWN0KHsgZnJvbTogMzYsIHRvOiAyOCwgaXNDYXB0dXJlOiBmYWxzZSB9KTtcbiAgfSk7XG5cbiAgaXQoXCJza2lwcyBvdXQtb2YtYm9hcmQgdGFyZ2V0cyAoZS5nLiBiYWNrd2FyZCBmcm9tIHJhbmsgMSlcIiwgKCkgPT4ge1xuICAgIC8vIHdoaXRlIHBhd24gYXQgZTEgKHNxdWFyZSA0LCByYW5rIDApLCBiYWNrd2FyZCB3b3VsZCBnbyB0byByYW5rIC0xXG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKCk7XG4gICAgY29uc3QgcGllY2VJZCA9IHNlc3Npb24ubmV4dElkKCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQocGllY2VJZCwgXCJQaWVjZVR5cGVcIiwgXCJwYXduXCIpO1xuICAgIHNlc3Npb24uaW5zZXJ0KHBpZWNlSWQsIFwiQ29sb3JcIiwgXCJ3aGl0ZVwiKTtcbiAgICBzZXNzaW9uLmluc2VydChwaWVjZUlkLCBcIlBvc2l0aW9uXCIsIDQpOyAvLyBlMVxuXG4gICAgRElSRUNUSU9OX0FERElUSU9OU19ERVNDUklQVE9SLmFwcGx5KHNlc3Npb24sIHBpZWNlSWQsIFtcImJhY2t3YXJkXCJdKTtcblxuICAgIGNvbnN0IG1vdmVzID0gZ2VuZXJhdGVEaXJlY3Rpb25Nb3ZlcyhzZXNzaW9uLCBwaWVjZUlkKTtcbiAgICBleHBlY3QobW92ZXMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG59KTtcbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9jaGVzcy9zcmMvbW9kaWZpZXJzL2Rlc2NyaXB0b3JzL2RpcmVjdGlvbi1hZGRpdGlvbnMudGVzdC50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/9a6fda0ed697fcab701479616016c98d69e29963 b/7xOfJqsDU787fe61oSCq1/web/9a6fda0ed697fcab701479616016c98d69e29963 deleted file mode 100644 index f579d44..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/9a6fda0ed697fcab701479616016c98d69e29963 +++ /dev/null @@ -1,48 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "pieceAssets", { enumerable: true, configurable: true, get(){ try { return pieceAssets } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/assets/pieces/white-king.svg?import", {"importedNames":["default"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/assets/pieces/white-queen.svg?import", {"importedNames":["default"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/assets/pieces/white-rook.svg?import", {"importedNames":["default"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/assets/pieces/white-bishop.svg?import", {"importedNames":["default"]}); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/assets/pieces/white-knight.svg?import", {"importedNames":["default"]}); -const __vite_ssr_import_5__ = await __vite_ssr_import__("/src/assets/pieces/white-pawn.svg?import", {"importedNames":["default"]}); -const __vite_ssr_import_6__ = await __vite_ssr_import__("/src/assets/pieces/black-king.svg?import", {"importedNames":["default"]}); -const __vite_ssr_import_7__ = await __vite_ssr_import__("/src/assets/pieces/black-queen.svg?import", {"importedNames":["default"]}); -const __vite_ssr_import_8__ = await __vite_ssr_import__("/src/assets/pieces/black-rook.svg?import", {"importedNames":["default"]}); -const __vite_ssr_import_9__ = await __vite_ssr_import__("/src/assets/pieces/black-bishop.svg?import", {"importedNames":["default"]}); -const __vite_ssr_import_10__ = await __vite_ssr_import__("/src/assets/pieces/black-knight.svg?import", {"importedNames":["default"]}); -const __vite_ssr_import_11__ = await __vite_ssr_import__("/src/assets/pieces/black-pawn.svg?import", {"importedNames":["default"]}); -const pieceAssets = { - white: { - king: __vite_ssr_import_0__.default, - queen: __vite_ssr_import_1__.default, - rook: __vite_ssr_import_2__.default, - bishop: __vite_ssr_import_3__.default, - knight: __vite_ssr_import_4__.default, - pawn: __vite_ssr_import_5__.default - }, - black: { - king: __vite_ssr_import_6__.default, - queen: __vite_ssr_import_7__.default, - rook: __vite_ssr_import_8__.default, - bishop: __vite_ssr_import_9__.default, - knight: __vite_ssr_import_10__.default, - pawn: __vite_ssr_import_11__.default - } -}; -const PRELOADED_IMAGES = []; -if (typeof Image !== "undefined") { - for (const byType of Object.values(pieceAssets)) { - for (const url of Object.values(byType)) { - const img = new Image(); - img.src = url; - if (typeof img.decode === "function") { - img.decode().catch(() => { - }); - }; - PRELOADED_IMAGES.push(img); - } - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVPLE1BQU0sY0FBYztBQUFBLEVBQ3pCLE9BQU87QUFBQSxJQUNMLE1BQU07QUFBQSxJQUNOLE9BQU87QUFBQSxJQUNQLE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNSO0FBQUEsRUFDQSxPQUFPO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixPQUFPO0FBQUEsSUFDUCxNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUjtBQUNGO0FBVUEsTUFBTSxtQkFBdUMsQ0FBQztBQXFCOUMsSUFBSSxPQUFPLFVBQVUsYUFBYTtBQUNoQyxhQUFXLFVBQVUsT0FBTyxPQUFPLFdBQVcsR0FBRztBQUMvQyxlQUFXLE9BQU8sT0FBTyxPQUFPLE1BQU0sR0FBRztBQUN2QyxZQUFNLE1BQU0sSUFBSSxNQUFNO0FBQ3RCLFVBQUksTUFBTTtBQUlWLFVBQUksT0FBTyxJQUFJLFdBQVcsWUFBWTtBQUNwQyxZQUFJLE9BQU8sRUFBRSxNQUFNLE1BQU07QUFBQSxRQUFDLENBQUM7QUFBQSxNQUM3QjtBQUNBLHVCQUFpQixLQUFLLEdBQUc7QUFBQSxJQUMzQjtBQUFBLEVBQ0Y7QUFDRiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHdoaXRlS2luZyBmcm9tIFwiLi93aGl0ZS1raW5nLnN2Z1wiO1xuaW1wb3J0IHdoaXRlUXVlZW4gZnJvbSBcIi4vd2hpdGUtcXVlZW4uc3ZnXCI7XG5pbXBvcnQgd2hpdGVSb29rIGZyb20gXCIuL3doaXRlLXJvb2suc3ZnXCI7XG5pbXBvcnQgd2hpdGVCaXNob3AgZnJvbSBcIi4vd2hpdGUtYmlzaG9wLnN2Z1wiO1xuaW1wb3J0IHdoaXRlS25pZ2h0IGZyb20gXCIuL3doaXRlLWtuaWdodC5zdmdcIjtcbmltcG9ydCB3aGl0ZVBhd24gZnJvbSBcIi4vd2hpdGUtcGF3bi5zdmdcIjtcbmltcG9ydCBibGFja0tpbmcgZnJvbSBcIi4vYmxhY2sta2luZy5zdmdcIjtcbmltcG9ydCBibGFja1F1ZWVuIGZyb20gXCIuL2JsYWNrLXF1ZWVuLnN2Z1wiO1xuaW1wb3J0IGJsYWNrUm9vayBmcm9tIFwiLi9ibGFjay1yb29rLnN2Z1wiO1xuaW1wb3J0IGJsYWNrQmlzaG9wIGZyb20gXCIuL2JsYWNrLWJpc2hvcC5zdmdcIjtcbmltcG9ydCBibGFja0tuaWdodCBmcm9tIFwiLi9ibGFjay1rbmlnaHQuc3ZnXCI7XG5pbXBvcnQgYmxhY2tQYXduIGZyb20gXCIuL2JsYWNrLXBhd24uc3ZnXCI7XG5cbmV4cG9ydCBjb25zdCBwaWVjZUFzc2V0cyA9IHtcbiAgd2hpdGU6IHtcbiAgICBraW5nOiB3aGl0ZUtpbmcsXG4gICAgcXVlZW46IHdoaXRlUXVlZW4sXG4gICAgcm9vazogd2hpdGVSb29rLFxuICAgIGJpc2hvcDogd2hpdGVCaXNob3AsXG4gICAga25pZ2h0OiB3aGl0ZUtuaWdodCxcbiAgICBwYXduOiB3aGl0ZVBhd24sXG4gIH0sXG4gIGJsYWNrOiB7XG4gICAga2luZzogYmxhY2tLaW5nLFxuICAgIHF1ZWVuOiBibGFja1F1ZWVuLFxuICAgIHJvb2s6IGJsYWNrUm9vayxcbiAgICBiaXNob3A6IGJsYWNrQmlzaG9wLFxuICAgIGtuaWdodDogYmxhY2tLbmlnaHQsXG4gICAgcGF3bjogYmxhY2tQYXduLFxuICB9LFxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBNb2R1bGUtbGV2ZWwgYXJyYXkgYW5jaG9yaW5nIHByZWxvYWRlZCBJbWFnZSBvYmplY3RzIHNvIHRoZSBicm93c2VyXG4gKiBHQyBkb2Vzbid0IGNvbGxlY3QgdGhlbSBhZnRlciB0aGUgaW5pdCBibG9jayBiZWxvdyBjb21wbGV0ZXMuIFRoZVxuICogcHJlc2VuY2Ugb2YgYSBsaXZlIHJlZmVyZW5jZSBpcyB3aGF0IGtlZXBzIHRoZSBkZWNvZGVkIGJpdG1hcCBpblxuICogdGhlIGJyb3dzZXIncyBpbWFnZSBjYWNoZS5cbiAqL1xuLy8gVXNpbmcgSFRNTEltYWdlRWxlbWVudFtdIHJhdGhlciB0aGFuIEltYWdlW10gc28gdGhpcyBtb2R1bGUgY2FuIGJlXG4vLyBpbXBvcnRlZCBmcm9tIG5vbi1ET00gY29udGV4dHMgKHRlc3RzLCBzZXJ2ZXIpIHdpdGhvdXQgVFMgY29tcGxhaW5pbmcuXG5jb25zdCBQUkVMT0FERURfSU1BR0VTOiBIVE1MSW1hZ2VFbGVtZW50W10gPSBbXTtcblxuLyoqXG4gKiBQcmVsb2FkICsgZWFnZXJseSBkZWNvZGUgZXZlcnkgcGllY2UgU1ZHIGF0IG1vZHVsZSBpbml0LlxuICpcbiAqIFdoeTogZXZlcnkgbW92ZSB0cmlnZ2VycyBhIEZMSVAgcmVtb3VudCBpbiBQaWVjZS50c3gg4oCUIHRoZSBvbGRcbiAqIGA8aW1nPmAgdGFnIHVubW91bnRzIGF0IHRoZSBzb3VyY2Ugc3F1YXJlIGFuZCBhIGJyYW5kLW5ldyBvbmVcbiAqIG1vdW50cyBhdCB0aGUgZGVzdGluYXRpb24uIEJyb3dzZXJzIGRvbid0IGJsb2NrIHBhaW50IG9uIGltYWdlXG4gKiBsb2FkOyBldmVuIHRob3VnaCBWaXRlJ3MgYnVuZGxlZCBTVkcgaXMgYWxyZWFkeSBpbiB0aGUgSFRUUCBjYWNoZSxcbiAqIHRoZSBuZXcgYDxpbWc+YCBlbGVtZW50IHNob3dzIGl0cyBgYWx0YCBhdHRyaWJ1dGUgKHRoZSBcInRleHRcbiAqIHJlcHJlc2VudGF0aW9uXCIpIGZvciB0aGUgb25lIG9yIHR3byBmcmFtZXMgaXQgdGFrZXMgdG8gYXR0YWNoLFxuICogcGFyc2UsIGFuZCBkZWNvZGUuXG4gKlxuICogSG9sZGluZyBhIHdhcm0gYEltYWdlKClgIGZvciBldmVyeSBhc3NldCBrZWVwcyB0aGUgZGVjb2RlZCBiaXRtYXBcbiAqIGFsaXZlIGluIHRoZSBicm93c2VyJ3MgaW1hZ2UgY2FjaGUsIHNvIHN1YnNlcXVlbnQgYDxpbWcgc3JjPeKApj5gXG4gKiBhdHRhY2htZW50cyByZW5kZXIgdGhlIGZpcnN0IHBhaW50ZWQgZnJhbWUgZnJvbSBjYWNoZSBpbnN0ZWFkIG9mXG4gKiBicmllZmx5IGZhbGxpbmcgYmFjayB0byBhbHQgdGV4dC5cbiAqXG4gKiBHdWFyZGVkIGJ5IGB0eXBlb2YgSW1hZ2VgIHNvIHNlcnZlci1zaWRlIGltcG9ydHMgKHRlc3RzLCB0aGVcbiAqIGhlYWRsZXNzIHNlcnZlciBwYWNrYWdlKSBkb24ndCBjcmFzaC5cbiAqL1xuaWYgKHR5cGVvZiBJbWFnZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICBmb3IgKGNvbnN0IGJ5VHlwZSBvZiBPYmplY3QudmFsdWVzKHBpZWNlQXNzZXRzKSkge1xuICAgIGZvciAoY29uc3QgdXJsIG9mIE9iamVjdC52YWx1ZXMoYnlUeXBlKSkge1xuICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgICBpbWcuc3JjID0gdXJsO1xuICAgICAgLy8gZGVjb2RlKCkgcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIHBpeGVscyBhcmVcbiAgICAgIC8vIHJlYWR5LiBTd2FsbG93IHJlamVjdGlvbiDigJQgcmFyZSBicm93c2VycyB3aXRob3V0IHN1cHBvcnQgc3RpbGxcbiAgICAgIC8vIHJlbmRlciB0aGUgaW1hZ2UgZmluZSB3aGVuIGl0J3MgYWN0dWFsbHkgdXNlZC5cbiAgICAgIGlmICh0eXBlb2YgaW1nLmRlY29kZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGltZy5kZWNvZGUoKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICB9XG4gICAgICBQUkVMT0FERURfSU1BR0VTLnB1c2goaW1nKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJmaWxlIjoiL3NyYy9hc3NldHMvcGllY2VzL2luZGV4LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/9af4bbd039d06f6e7f6e97a1144e11b8d4339e8d b/7xOfJqsDU787fe61oSCq1/web/9af4bbd039d06f6e7f6e97a1144e11b8d4339e8d deleted file mode 100644 index 2acec81..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/9af4bbd039d06f6e7f6e97a1144e11b8d4339e8d +++ /dev/null @@ -1,646 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "MoveCancelledError", { enumerable: true, configurable: true, get(){ try { return MoveCancelledError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "ChessEngine", { enumerable: true, configurable: true, get(){ try { return ChessEngine } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/schema.ts", {"importedNames":["GAME_ENTITY","PRESET_STATE_ENTITY"]}); - - - -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/starting-position.ts", {"importedNames":["applyLayout","CLASSIC_LAYOUT"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/rules/castling.ts", {"importedNames":["getCastlingMoves","applyCastlingMove"]}); - - - -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/rules/enpassant.ts", {"importedNames":["getEnPassantMoves","setEnPassantTarget","clearEnPassantTarget"]}); - - - - -const __vite_ssr_import_5__ = await __vite_ssr_import__("/src/rules/promotion.ts", {"importedNames":["isPromotionMove","applyPromotion","getPromotionMoves"]}); - - - - -const __vite_ssr_import_6__ = await __vite_ssr_import__("/src/rules/check.ts", {"importedNames":["filterSelfCheckMoves","isInCheck","isSquareAttacked"]}); - - - - -const __vite_ssr_import_7__ = await __vite_ssr_import__("/src/rules/checkmate.ts", {"importedNames":["isCheckmate"]}); -const __vite_ssr_import_8__ = await __vite_ssr_import__("/src/rules/stalemate.ts", {"importedNames":["isStalemate"]}); -const __vite_ssr_import_9__ = await __vite_ssr_import__("/src/rules/insufficient.ts", {"importedNames":["isInsufficientMaterial"]}); -const __vite_ssr_import_10__ = await __vite_ssr_import__("/src/rules/draws.ts", {"importedNames":["isFiftyMoveDraw","updateHalfmoveClock","recordPosition","isThreefoldRepetition"]}); - - - - - -const __vite_ssr_import_11__ = await __vite_ssr_import__("/src/rules/capture.ts", {"importedNames":["CORE_PIECE_ATTRS"]}); -const __vite_ssr_import_12__ = await __vite_ssr_import__("/src/presets/active-set.ts", {"importedNames":["ActivePresetSet"]}); - - -const __vite_ssr_import_13__ = await __vite_ssr_import__("/src/presets/registry.ts", {"importedNames":["PRESET_REGISTRY"]}); -const __vite_ssr_import_14__ = await __vite_ssr_import__("/src/presets/piece-type-registry.ts", {"importedNames":["PIECE_TYPE_REGISTRY"]}); -const __vite_ssr_import_15__ = await __vite_ssr_import__("/src/presets/index.ts"); -function lookupMoveGenerator(type) { - const def = __vite_ssr_import_14__.PIECE_TYPE_REGISTRY.get(type); - return def?.moveGenerator ?? null; -} -const PRESET_STATE_ATTR_PREFIX = "__preset__/"; -class MoveCancelledError extends Error { - presetId; - constructor(message, presetId) { - super(message); - this.name = "MoveCancelledError"; - this.presetId = presetId; - } -}; -class PresetStateImpl { - #session; - #prefix; - constructor(session, presetId) { - this.#session = session; - this.#prefix = `${PRESET_STATE_ATTR_PREFIX}${presetId}/`; - } - #attrOf(key) { - return `${this.#prefix}${key}`; - } - get(key) { - const attr = this.#attrOf(key); - if (!this.#session.contains((0,__vite_ssr_import_1__.PRESET_STATE_ENTITY), attr)) return void 0; - return this.#session.get((0,__vite_ssr_import_1__.PRESET_STATE_ENTITY), attr); - } - set(key, value) { - this.#session.insert( - (0,__vite_ssr_import_1__.PRESET_STATE_ENTITY), - this.#attrOf(key), - value - ); - } - delete(key) { - const attr = this.#attrOf(key); - if (!this.#session.contains((0,__vite_ssr_import_1__.PRESET_STATE_ENTITY), attr)) return false; - this.#session.retract((0,__vite_ssr_import_1__.PRESET_STATE_ENTITY), attr); - return true; - } - has(key) { - return this.#session.contains((0,__vite_ssr_import_1__.PRESET_STATE_ENTITY), this.#attrOf(key)); - } - all() { - const result = {}; - for (const f of this.#session.allFacts()) { - if (f.id !== __vite_ssr_import_1__.PRESET_STATE_ENTITY) continue; - if (!f.attr.startsWith(this.#prefix)) continue; - const key = f.attr.slice(this.#prefix.length); - result[key] = f.value; - }; - return result; - } -} -class ChessEngine { - session; - /** - * Per-engine preset activation. Every engine owns its own set so two - * concurrent games (most importantly: the authoritative server session - * and a client's predicted clone) can hold different rule sets without - * a shared-module dance. - * - * Mutable by design — UIs and servers replace its contents via - * `.replaceAll()`. The engine reads it fresh on every call to - * `getAllLegalMoves()` so mid-game toggles take effect on the next - * move calculation with no reset. - */ - activePresets; - /** - * Chronological log of every successful applyMove. Callers consume - * this read-only for move-history UIs, PGN export, analysis. Writing - * to it is a private concern of applyMove. - * - * Unbounded — games are short-lived enough that we don't need a - * ring buffer. If that ever changes, add a `maxLogSize` option. - */ - #moveLog = []; - /** Read-only view of the move log. */ - get moveLog() { - return this.#moveLog; - } - /** - * Active visual-effect subscribers. Presets call `engine.emitEffect` - * to push effects; UI layers call `subscribeEffects` to listen. - * - * Using a Set (not an Array) so unsubscribe is O(1) and insertion - * order doesn't matter (effects are fire-and-forget — we iterate - * the full set on every emit). - */ - #effectHandlers = /* @__PURE__ */ new Set(); - /** - * Emit a visual effect to all subscribers. Fire-and-forget — - * handlers that throw are isolated (caught) so one bad subscriber - * doesn't break others. - * - * Safe to call from inside any preset hook. The engine does NOT - * persist effects; they're pure UI signals. If no subscribers are - * attached, the call is essentially a no-op. - */ - emitEffect(effect) { - for (const handler of this.#effectHandlers) { - try { - handler(effect); - } catch (err) { - console.error("VisualEffect handler threw:", err); - } - } - } - /** - * Register a subscriber for visual effects. Returns a function that - * removes the subscription. Typically called from React `useEffect` - * on component mount, and the return is returned as the cleanup. - * - * Handlers are called synchronously from `emitEffect`. For React - * subscribers, the handler should schedule a state update rather - * than render inline — use `useSyncExternalStore` or equivalent. - */ - subscribeEffects(handler) { - this.#effectHandlers.add(handler); - return () => { - this.#effectHandlers.delete(handler); - }; - } - constructor(arg) { - this.session = new __vite_ssr_import_0__.Session({ autoFire: false }); - const isLegacyPresetArg = arg !== void 0 && arg !== null && typeof arg.replaceAll === "function"; - const opts = isLegacyPresetArg ? { activePresets: arg } : arg ?? {}; - const layout = opts.layout ?? __vite_ssr_import_2__.CLASSIC_LAYOUT; - (0,__vite_ssr_import_2__.applyLayout)(this.session, layout); - (0,__vite_ssr_import_10__.recordPosition)(this.session); - this.activePresets = opts.activePresets ?? new __vite_ssr_import_12__.ActivePresetSet(); - } - /** - * The full set of piece attributes the engine should treat as - * "per-piece state" for this game, combining FIDE's core attrs - * with any preset-declared additions. - * - * Used by the damage pipeline's default-death path, piece retract - * helpers inside presets (queen-splits fissioning the queen, - * explosive-rook blast fallback), and any future save-state - * serialization. This is the CANONICAL answer to "what facts - * represent a piece." - * - * Computed on every read because the active preset set is mutable; - * the list is tiny (< 10 entries in practice), so we don't cache. - * If perf becomes a concern, invalidate a cache in - * `setActivePresets` / `ActivePresetSet.replaceAll`. - */ - get effectivePieceAttrs() { - const attrs = new Set(__vite_ssr_import_11__.CORE_PIECE_ATTRS); - for (const entry of this.activePresets.list()) { - const def = __vite_ssr_import_13__.PRESET_REGISTRY.get(entry.id); - if (!def?.pieceAttributes) continue; - for (const a of def.pieceAttributes) attrs.add(a); - }; - return [...attrs]; - } - /** - * Typed, per-preset, per-engine state bag. - * - * Returns an accessor scoped to `presetId` that reads/writes facts - * on the reserved `PRESET_STATE_ENTITY`. Attribute keys are - * namespaced as `__preset__/${presetId}/${key}` under the hood so - * two presets can never collide. - * - * Because state is backed by session facts it: - * - serializes automatically with the rest of save-state (no extra - * plumbing — `session.allFacts()` already includes it) - * - is engine-scoped, so two concurrent games (server-side) hold - * independent state under the same preset id — no module-level - * globals - * - is cleared when the preset deactivates (see - * `clearPresetState` called from `setActivePresets` / - * `tickAfterMove`) - * - * The type parameter is trusted for convenience — `set("x", 5)` - * doesn't verify that `x` is `number` in `T`. Use sparingly or wrap - * in a factory function per preset that enforces its own shape. - */ - presetState(presetId) { - return new PresetStateImpl(this.session, presetId); - } - /** - * Retract every preset-state fact owned by `presetId`. Called from - * `setActivePresets` and `tickAfterMove` when a preset deactivates, - * so stale state doesn't leak across activation cycles. - */ - clearPresetState(presetId) { - const prefix = `${PRESET_STATE_ATTR_PREFIX}${presetId}/`; - const toRetract = this.session.allFacts().filter( - (f) => f.id === __vite_ssr_import_1__.PRESET_STATE_ENTITY && f.attr.startsWith(prefix) - ).map((f) => f.attr); - for (const attr of toRetract) { - this.session.retract((0,__vite_ssr_import_1__.PRESET_STATE_ENTITY), attr); - } - } - /** - * Replace the active preset set and fire lifecycle hooks on transitions. - * - * This is the ONLY public entry point that routes through preset - * `onActivate` / `onDeactivate` hooks — direct mutation of - * `activePresets` (via `.replaceAll`) is still allowed for tests but - * bypasses the hooks. - * - * Transition ordering, by design: - * 1. Snapshot the old id set. - * 2. Validate + apply the new set via `ActivePresetSet.replaceAll`. - * If validation throws, no hooks fire and the old set is intact. - * 3. Fire `onDeactivate` for ids in old-but-not-new. - * 4. Fire `onActivate` for ids in new-but-not-old. - * - * Scope or turns-remaining changes on an id present in both sets do - * NOT re-fire any hook — the preset is considered "continuously - * active" across the transition. - * - * Deactivate-before-activate is deliberate: it lets a preset tear - * down state cleanly before the incoming preset reads the board. - * Ordering within each phase follows the input list's natural order. - */ - setActivePresets(requests) { - const oldIds = new Set(this.activePresets.list().map((e) => e.id)); - this.activePresets.replaceAll(requests); - const newIds = new Set(requests.map((r) => r.id)); - const ctx = { engine: this }; - for (const id of oldIds) { - if (newIds.has(id)) continue; - const def = __vite_ssr_import_13__.PRESET_REGISTRY.get(id); - def?.onDeactivate?.(ctx); - this.clearPresetState(id); - }; - for (const req of requests) { - if (oldIds.has(req.id)) continue; - const def = __vite_ssr_import_13__.PRESET_REGISTRY.get(req.id); - def?.onActivate?.(ctx); - } - } - /** - * Attempt a preset-intercepted capture. Dispatches `onBeforeCapture` - * on every currently-active preset for the mover's color; if any - * preset returns `{ consume: true }` the default capture is skipped - * and we return `true`. Otherwise the caller should proceed with the - * standard capture path. - * - * `color` is the color of the capturing piece (i.e. whose turn it is). - */ - tryInterceptCapture(attacker, target, color) { - let consumed = false; - const ctx = { - engine: this, - attacker, - target, - mover: color - }; - for (const preset of this.activePresets.getForColor(color)) { - if (!preset.onBeforeCapture) continue; - const result = preset.onBeforeCapture(ctx); - if (result && result.consume === true) consumed = true; - }; - return consumed; - } - /** - * Create a new piece entity on `square` and fire `onPieceSpawn` hooks. - * - * This is the CANONICAL spawn path. Every code site that materializes - * a piece — the queen-splits fission, promotion, hypothetical - * summon/resurrect presets — should go through here so: - * - `onPieceSpawn` hooks get a chance to seed preset-declared - * attributes (Hp from piece-hp, Shield from piece-shield, …) - * WITHOUT those presets having to implement idempotent - * onActivate scans. - * - core attrs are inserted in a consistent order. - * - new spawn reasons can be added to the `PieceSpawnReason` union - * without editing this function. - * - * The initial starting-position generation does NOT go through here - * (it precedes any active presets — nothing to hook). Preset-authored - * initial placements should activate AFTER piece seeding or use - * this function explicitly in their `onActivate`. - */ - spawnPiece(type, color, square, opts = {}) { - const id = this.session.nextId(); - this.session.insert(id, "PieceType", type); - this.session.insert(id, "Color", color); - this.session.insert(id, "Position", square); - this.session.insert(id, "HasMoved", opts.hasMoved ?? false); - const ctx = { - engine: this, - pieceId: id, - type, - color, - square, - reason: opts.reason ?? "summon" - }; - for (const entry of this.activePresets.list()) { - const def = __vite_ssr_import_13__.PRESET_REGISTRY.get(entry.id); - def?.onPieceSpawn?.(ctx); - }; - return id; - } - /** - * Deal `amount` damage to `target`, running it through the preset - * damage pipeline before applying the default kill-on-damage rule. - * - * This is the primitive that lets presets compose cleanly: - * - Without any damage-interceptor preset (standard chess, - * explosive-rook alone, etc.), damage ≥ 1 retracts the target. - * - With `piece-hp` active, the hook decrements the target's Hp - * fact and only retracts when Hp would go ≤ 0. - * - * Callers should use this instead of retracting piece facts directly - * whenever they want to compose with HP/armor/shield-like presets. - * See `explosive-rook` (AoE calls dealDamage on every victim) and - * `poisoned-squares` (tick calls dealDamage on every occupant of a - * poisoned square) for the canonical call sites. - * - * The first preset whose `onDamage` returns `consume: true` wins — - * further presets are not consulted for that event. This is - * deliberate: HP is the ONE authority on damage→death; two damage - * interceptors would race and produce zombie state (the bug this - * pipeline was designed to eliminate). - * - * Returns `{ died: true }` if the target was retracted (either by a - * hook that killed or by the default path), `{ died: false }` if it - * survived (HP absorbed it, or amount was 0). - */ - dealDamage(target, amount, ctx) { - if (amount <= 0) return { died: false }; - const targetColor = this.session.get(target, "Color"); - const hookCtx = { - engine: this, - target, - amount, - kind: ctx.kind, - ...ctx.attacker !== void 0 ? { attacker: ctx.attacker } : {} - }; - for (const entry of this.activePresets.list()) { - if (targetColor !== void 0 && entry.scope !== "both" && entry.scope !== targetColor) { - continue; - }; - const def = __vite_ssr_import_13__.PRESET_REGISTRY.get(entry.id); - const result = def?.onDamage?.(hookCtx); - if (result?.consume === true) { - return { died: result.died === true }; - } - }; - for (const attr of this.effectivePieceAttrs) { - if (this.session.contains(target, attr)) { - this.session.retract(target, attr); - } - }; - return { died: true }; - } - getCurrentTurn() { - return this.session.get((0,__vite_ssr_import_1__.GAME_ENTITY), "Turn") ?? "white"; - } - getAllLegalMoves() { - const color = this.getCurrentTurn(); - const facts = this.session.allFacts(); - const moves = []; - const pieces = facts.filter((f) => f.attr === "Color" && f.value === color && f.id > 0).map((f) => ({ - id: f.id, - type: facts.find((t) => t.id === f.id && t.attr === "PieceType")?.value - })).filter((p) => p.type !== void 0); - for (const piece of pieces) { - const baseGetter = lookupMoveGenerator(piece.type); - const scopedPresets = this.activePresets.getForColor(color); - const seedGetter = baseGetter ?? ((_s, _id) => []); - const getter = scopedPresets.filter((p) => p.transformMoveGenerator).reduce( - (gen, preset) => preset.transformMoveGenerator(this, piece.id, gen), - seedGetter - ); - if (!baseGetter && scopedPresets.every((p) => !p.transformMoveGenerator)) { - continue; - }; - let pieceMoves = getter(this.session, piece.id); - if (piece.type === "pawn") { - pieceMoves = [ - ...pieceMoves, - ...(0,__vite_ssr_import_4__.getEnPassantMoves)(this.session, piece.id) - ]; - }; - if (piece.type === "king") { - const enemyColor = color === "white" ? "black" : "white"; - const castling = (0,__vite_ssr_import_3__.getCastlingMoves)( - this.session, - piece.id, - (s, sq) => (0,__vite_ssr_import_6__.isSquareAttacked)(s, sq, enemyColor) - ); - pieceMoves = [...pieceMoves, ...castling]; - }; - if (piece.type === "pawn") { - const promotions = (0,__vite_ssr_import_5__.getPromotionMoves)(this.session, piece.id); - if (promotions.length > 0) { - const promotionTos = new Set(promotions.map((m) => m.to)); - pieceMoves = pieceMoves.filter((m) => !promotionTos.has(m.to)); - pieceMoves = [...pieceMoves, ...promotions]; - } - }; - const activePresets = scopedPresets; - for (const preset of activePresets) { - if (preset.getExtraMoves) { - pieceMoves = [ - ...pieceMoves, - ...preset.getExtraMoves(this, piece.id) - ]; - } - }; - for (const preset of activePresets) { - if (preset.filterMoves) { - pieceMoves = preset.filterMoves(pieceMoves, this, piece.id); - } - }; - moves.push(...pieceMoves); - }; - let applyFilter = true; - const selfCheckCtx = { engine: this, color }; - for (const preset of this.activePresets.getForColor(color)) { - if (preset.shouldFilterSelfCheck?.(selfCheckCtx) === false) { - applyFilter = false; - break; - } - }; - return applyFilter ? (0,__vite_ssr_import_6__.filterSelfCheckMoves)(this.session, moves, color) : moves; - } - applyMove(move, promoteTo = "queen") { - const color = this.getCurrentTurn(); - const beforeCtx = { - engine: this, - mover: color, - pieceId: move.pieceId, - from: move.from, - to: move.to, - isCapture: move.isCapture === true - }; - for (const preset of this.activePresets.getForColor(color)) { - const result = preset.onBeforeMove?.(beforeCtx); - if (result?.cancel === true) { - throw new MoveCancelledError( - result.reason ?? `Move cancelled by preset "${preset.id}"`, - preset.id - ); - } - }; - const facts = this.session.allFacts(); - const movingType = facts.find( - (f) => f.id === move.pieceId && f.attr === "PieceType" - )?.value; - const epTarget = this.session.get((0,__vite_ssr_import_1__.GAME_ENTITY), "EnPassantTarget"); - const isEnPassant = movingType === "pawn" && epTarget !== null && epTarget !== void 0 && epTarget === move.to; - const isCastling = move.isCastling === true; - const capturedIdForLog = move.isCapture ? isEnPassant ? this.getPieceAt( - color === "white" ? move.to - 8 : move.to + 8 - ) : this.getPieceAt(move.to) : null; - const capturedTypeForLog = capturedIdForLog !== null ? facts.find( - (f) => f.id === capturedIdForLog && f.attr === "PieceType" - )?.value ?? null : null; - if (isEnPassant) { - const capturedSquare = color === "white" ? move.to - 8 : move.to + 8; - const capturedId = this.getPieceAt(capturedSquare); - let consumed = false; - let targetDied = true; - if (capturedId !== null) { - consumed = this.tryInterceptCapture(move.pieceId, capturedId, color); - if (!consumed) { - const result = this.dealDamage(capturedId, 1, { - kind: "capture", - attacker: move.pieceId - }); - targetDied = result.died; - } - }; - if (!consumed && targetDied) { - this.session.insert(move.pieceId, "Position", move.to); - this.session.insert(move.pieceId, "HasMoved", true); - } - } else if (isCastling) { - (0,__vite_ssr_import_3__.applyCastlingMove)(this.session, move); - } else { - let consumed = false; - let captureResolved = true; - if (move.isCapture) { - const capturedId = this.getPieceAt(move.to); - if (capturedId !== null) { - consumed = this.tryInterceptCapture(move.pieceId, capturedId, color); - if (!consumed) { - const { died } = this.dealDamage(capturedId, 1, { - kind: "capture", - attacker: move.pieceId - }); - captureResolved = died; - } else { - captureResolved = false; - } - } - }; - if (!consumed && captureResolved) { - this.session.insert(move.pieceId, "Position", move.to); - this.session.insert(move.pieceId, "HasMoved", true); - } - }; - const effectiveTo = isCastling ? move.to : move.to; - if (movingType === "pawn" && (0,__vite_ssr_import_5__.isPromotionMove)(effectiveTo, color)) { - const promoteAs = move.promoteTo ?? promoteTo; - (0,__vite_ssr_import_5__.applyPromotion)(this.session, move.pieceId, promoteAs); - }; - if (movingType === "pawn" && Math.abs(move.to - move.from) === 16) { - (0,__vite_ssr_import_4__.setEnPassantTarget)(this.session, move.from, move.to); - } else { - (0,__vite_ssr_import_4__.clearEnPassantTarget)(this.session); - }; - (0,__vite_ssr_import_10__.updateHalfmoveClock)(this.session, move, movingType === "pawn"); - const nextColor = color === "white" ? "black" : "white"; - this.session.insert((0,__vite_ssr_import_1__.GAME_ENTITY), "Turn", nextColor); - if (color === "black") { - const fn = (this.session.get((0,__vite_ssr_import_1__.GAME_ENTITY), "FullmoveNumber") ?? 1) + 1; - this.session.insert((0,__vite_ssr_import_1__.GAME_ENTITY), "FullmoveNumber", fn); - }; - (0,__vite_ssr_import_10__.recordPosition)(this.session); - const lifecycleCtx = { engine: this }; - const expired = this.activePresets.tickAfterMove(color); - for (const id of expired) { - const def = __vite_ssr_import_13__.PRESET_REGISTRY.get(id); - def?.onDeactivate?.(lifecycleCtx); - this.clearPresetState(id); - }; - const moveCtx = { engine: this, mover: color }; - for (const entry of this.activePresets.list()) { - const def = __vite_ssr_import_13__.PRESET_REGISTRY.get(entry.id); - def?.onAfterMove?.(moveCtx); - }; - const turnStartCtx = { engine: this, turn: nextColor }; - for (const preset of this.activePresets.getForColor(nextColor)) { - preset.onTurnStart?.(turnStartCtx); - }; - const gameResult = this.checkGameResult(); - const terminal = gameResult !== "ongoing"; - const opponentInCheck = (0,__vite_ssr_import_6__.isInCheck)(this.session, nextColor); - const describeCtx = { - engine: this, - mover: color, - from: move.from, - to: move.to, - movingType, - capturedType: capturedTypeForLog, - isEnPassant, - isCastling, - promotion: movingType === "pawn" && (0,__vite_ssr_import_5__.isPromotionMove)(effectiveTo, color) ? move.promoteTo ?? promoteTo : null - }; - const presetEffects = []; - for (const entry of this.activePresets.list()) { - const def = __vite_ssr_import_13__.PRESET_REGISTRY.get(entry.id); - const summary = def?.describeMoveEffect?.(describeCtx); - if (summary !== void 0 && summary !== "") { - presetEffects.push({ presetId: entry.id, summary }); - } - }; - this.#moveLog.push({ - from: move.from, - to: move.to, - mover: color, - movingType, - capturedId: capturedIdForLog, - capturedType: capturedTypeForLog, - isCheck: opponentInCheck, - terminal, - isEnPassant, - isCastling, - promotion: describeCtx.promotion, - timestamp: Date.now(), - presetEffects - }); - return gameResult; - } - checkGameResult() { - const resultCtx = { engine: this }; - for (const entry of this.activePresets.list()) { - const def = __vite_ssr_import_13__.PRESET_REGISTRY.get(entry.id); - const override = def?.onCheckGameResult?.(resultCtx); - if (override !== void 0) return override; - }; - const nextColor = this.getCurrentTurn(); - if ((0,__vite_ssr_import_7__.isCheckmate)(this.session, nextColor)) return "checkmate"; - if ((0,__vite_ssr_import_8__.isStalemate)(this.session, nextColor)) return "stalemate"; - if ((0,__vite_ssr_import_10__.isFiftyMoveDraw)(this.session)) return "draw-50"; - if ((0,__vite_ssr_import_10__.isThreefoldRepetition)(this.session)) return "draw-3fold"; - if ((0,__vite_ssr_import_9__.isInsufficientMaterial)(this.session)) return "draw-insufficient"; - return "ongoing"; - } - /** Find first legal move matching from+to squares and optional promoteTo. */ - findMove(from, to, promoteTo) { - return this.getAllLegalMoves().find( - (m) => m.from === from && m.to === to && (!m.promoteTo || m.promoteTo === (promoteTo ?? "queen")) - ) ?? null; - } - getPieceAt(square) { - const f = this.session.allFacts().find((x) => x.attr === "Position" && x.value === square && x.id > 0); - return f ? f.id : null; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7QUFNQTtBQUVBOzs7O0FBTUE7QUFFQTs7OztBQUtBOzs7OztBQUtBOzs7OztBQUtBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFNQTtBQWlCQTs7O0FBSUE7QUFDQTtBQUdBO0FBZUEsU0FBUyxvQkFBb0IsTUFBaUM7QUFDNUQsUUFBTSxNQUFNLDJDQUFvQixJQUFJLElBQUk7QUFDeEMsU0FBTyxLQUFLLGlCQUFpQjtBQUMvQjtBQXlCQSxNQUFNLDJCQUEyQjtBQVcxQixNQUFNLDJCQUEyQixNQUFNO0FBQUEsRUFDbkM7QUFBQSxFQUNULFlBQVksU0FBaUIsVUFBa0I7QUFDN0MsVUFBTSxPQUFPO0FBQ2IsU0FBSyxPQUFPO0FBQ1osU0FBSyxXQUFXO0FBQUEsRUFDbEI7QUFDRjtBQW1HQSxNQUFNLGdCQUVOO0FBQUEsRUFDVztBQUFBLEVBQ0E7QUFBQSxFQUVULFlBQVksU0FBa0IsVUFBa0I7QUFDOUMsU0FBSyxXQUFXO0FBQ2hCLFNBQUssVUFBVSxHQUFHLHdCQUF3QixHQUFHLFFBQVE7QUFBQSxFQUN2RDtBQUFBLEVBRUEsUUFBUSxLQUFxQjtBQUMzQixXQUFPLEdBQUcsS0FBSyxPQUFPLEdBQUcsR0FBRztBQUFBLEVBQzlCO0FBQUEsRUFFQSxJQUF1QixLQUEwQjtBQUMvQyxVQUFNLE9BQU8sS0FBSyxRQUFRLEdBQWE7QUFDdkMsUUFBSSxDQUFDLEtBQUssU0FBUyxZQUFTLDRDQUFxQixJQUFJLEVBQUcsUUFBTztBQUMvRCxXQUFPLEtBQUssU0FBUyxPQUFJLDRDQUFxQixJQUFJO0FBQUEsRUFDcEQ7QUFBQSxFQUVBLElBQXVCLEtBQVEsT0FBbUI7QUFJaEQsU0FBSyxTQUFTO0FBQUEsU0FDWjtBQUFBLE1BQ0EsS0FBSyxRQUFRLEdBQWE7QUFBQSxNQUMxQjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFFQSxPQUEwQixLQUFpQjtBQUN6QyxVQUFNLE9BQU8sS0FBSyxRQUFRLEdBQWE7QUFDdkMsUUFBSSxDQUFDLEtBQUssU0FBUyxZQUFTLDRDQUFxQixJQUFJLEVBQUcsUUFBTztBQUMvRCxTQUFLLFNBQVMsV0FBUSw0Q0FBcUIsSUFBSTtBQUMvQyxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsSUFBdUIsS0FBaUI7QUFDdEMsV0FBTyxLQUFLLFNBQVMsWUFBUyw0Q0FBcUIsS0FBSyxRQUFRLEdBQWEsQ0FBQztBQUFBLEVBQ2hGO0FBQUEsRUFFQSxNQUFrQjtBQUNoQixVQUFNLFNBQWtDLENBQUM7QUFDekMsZUFBVyxLQUFLLEtBQUssU0FBUyxTQUFTLEdBQUc7QUFDeEMsVUFBSyxFQUFFLE9BQW1CLDBDQUFnQztBQUMxRCxVQUFJLENBQUMsRUFBRSxLQUFLLFdBQVcsS0FBSyxPQUFPLEVBQUc7QUFDdEMsWUFBTSxNQUFNLEVBQUUsS0FBSyxNQUFNLEtBQUssUUFBUSxNQUFNO0FBQzVDLGFBQU8sR0FBRyxJQUFJLEVBQUU7QUFBQSxJQUNsQjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQ0Y7QUFvQk8sTUFBTSxZQUFZO0FBQUEsRUFDUDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVlBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVVAsV0FBeUIsQ0FBQztBQUFBO0FBQUEsRUFHbkMsSUFBSSxVQUFxQztBQUN2QyxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVVMsa0JBQWtCLG9CQUFJLElBQXlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFXeEQsV0FBVyxRQUE0QjtBQUNyQyxlQUFXLFdBQVcsS0FBSyxpQkFBaUI7QUFDMUMsVUFBSTtBQUNGLGdCQUFRLE1BQU07QUFBQSxNQUNoQixTQUFTLEtBQUs7QUFJWixnQkFBUSxNQUFNLCtCQUErQixHQUFHO0FBQUEsTUFDbEQ7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBV0EsaUJBQWlCLFNBQTJDO0FBQzFELFNBQUssZ0JBQWdCLElBQUksT0FBTztBQUNoQyxXQUFPLE1BQU07QUFDWCxXQUFLLGdCQUFnQixPQUFPLE9BQU87QUFBQSxJQUNyQztBQUFBLEVBQ0Y7QUFBQSxFQTJCQSxZQUFZLEtBQXVDO0FBQ2pELFNBQUssVUFBVSxJQUFJLDhCQUFRLEVBQUUsVUFBVSxNQUFNLENBQUM7QUFNOUMsVUFBTSxvQkFDSixRQUFRLFVBQ1IsUUFBUSxRQUNSLE9BQVEsSUFBd0IsZUFBZTtBQUNqRCxVQUFNLE9BQXNCLG9CQUN4QixFQUFFLGVBQWUsSUFBdUIsSUFDdEMsT0FBcUMsQ0FBQztBQUU1QyxVQUFNLFNBQVMsS0FBSyxVQUFVO0FBQzlCLDBDQUFZLEtBQUssU0FBUyxNQUFNO0FBQ2hDLDhDQUFlLEtBQUssT0FBTztBQUMzQixTQUFLLGdCQUFnQixLQUFLLGlCQUFpQixJQUFJLHVDQUFnQjtBQUFBLEVBQ2pFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWtCQSxJQUFJLHNCQUErQztBQUNqRCxVQUFNLFFBQVEsSUFBSSxJQUFrQix1Q0FBZ0I7QUFDcEQsZUFBVyxTQUFTLEtBQUssY0FBYyxLQUFLLEdBQUc7QUFDN0MsWUFBTSxNQUFNLHVDQUFnQixJQUFJLE1BQU0sRUFBRTtBQUN4QyxVQUFJLENBQUMsS0FBSyxnQkFBaUI7QUFDM0IsaUJBQVcsS0FBSyxJQUFJLGdCQUFpQixPQUFNLElBQUksQ0FBQztBQUFBLElBQ2xEO0FBQ0EsV0FBTyxDQUFDLEdBQUcsS0FBSztBQUFBLEVBQ2xCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQXdCQSxZQUNFLFVBQ2dCO0FBQ2hCLFdBQU8sSUFBSSxnQkFBbUIsS0FBSyxTQUFTLFFBQVE7QUFBQSxFQUN0RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9RLGlCQUFpQixVQUF3QjtBQUMvQyxVQUFNLFNBQVMsR0FBRyx3QkFBd0IsR0FBRyxRQUFRO0FBQ3JELFVBQU0sWUFBWSxLQUFLLFFBQ3BCLFNBQVMsRUFDVDtBQUFBLE1BQ0MsQ0FBQyxNQUNFLEVBQUUsT0FBbUIsNkNBQ3RCLEVBQUUsS0FBSyxXQUFXLE1BQU07QUFBQSxJQUM1QixFQUNDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSTtBQUNwQixlQUFXLFFBQVEsV0FBVztBQUM1QixXQUFLLFFBQVEsV0FBUSw0Q0FBcUIsSUFBSTtBQUFBLElBQ2hEO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQXlCQSxpQkFBaUIsVUFBOEM7QUFDN0QsVUFBTSxTQUFTLElBQUksSUFBSSxLQUFLLGNBQWMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0FBQ2pFLFNBQUssY0FBYyxXQUFXLFFBQVE7QUFDdEMsVUFBTSxTQUFTLElBQUksSUFBSSxTQUFTLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0FBRWhELFVBQU0sTUFBd0IsRUFBRSxRQUFRLEtBQUs7QUFDN0MsZUFBVyxNQUFNLFFBQVE7QUFDdkIsVUFBSSxPQUFPLElBQUksRUFBRSxFQUFHO0FBQ3BCLFlBQU0sTUFBTSx1Q0FBZ0IsSUFBSSxFQUFFO0FBQ2xDLFdBQUssZUFBZSxHQUFHO0FBR3ZCLFdBQUssaUJBQWlCLEVBQUU7QUFBQSxJQUMxQjtBQUNBLGVBQVcsT0FBTyxVQUFVO0FBQzFCLFVBQUksT0FBTyxJQUFJLElBQUksRUFBRSxFQUFHO0FBQ3hCLFlBQU0sTUFBTSx1Q0FBZ0IsSUFBSSxJQUFJLEVBQUU7QUFDdEMsV0FBSyxhQUFhLEdBQUc7QUFBQSxJQUN2QjtBQUFBLEVBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVdRLG9CQUNOLFVBQ0EsUUFDQSxPQUNTO0FBQ1QsUUFBSSxXQUFXO0FBQ2YsVUFBTSxNQUEwQjtBQUFBLE1BQzlCLFFBQVE7QUFBQSxNQUNSO0FBQUEsTUFDQTtBQUFBLE1BQ0EsT0FBTztBQUFBLElBQ1Q7QUFDQSxlQUFXLFVBQVUsS0FBSyxjQUFjLFlBQVksS0FBSyxHQUFHO0FBQzFELFVBQUksQ0FBQyxPQUFPLGdCQUFpQjtBQUM3QixZQUFNLFNBQVMsT0FBTyxnQkFBZ0IsR0FBRztBQUN6QyxVQUFJLFVBQVUsT0FBTyxZQUFZLEtBQU0sWUFBVztBQUFBLElBQ3BEO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBcUJBLFdBQ0UsTUFDQSxPQUNBLFFBQ0EsT0FHSSxDQUFDLEdBQ0s7QUFDVixVQUFNLEtBQUssS0FBSyxRQUFRLE9BQU87QUFDL0IsU0FBSyxRQUFRLE9BQU8sSUFBSSxhQUFhLElBQUk7QUFDekMsU0FBSyxRQUFRLE9BQU8sSUFBSSxTQUFTLEtBQUs7QUFDdEMsU0FBSyxRQUFRLE9BQU8sSUFBSSxZQUFZLE1BQU07QUFDMUMsU0FBSyxRQUFRLE9BQU8sSUFBSSxZQUFZLEtBQUssWUFBWSxLQUFLO0FBRTFELFVBQU0sTUFBeUI7QUFBQSxNQUM3QixRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQSxRQUFRLEtBQUssVUFBVTtBQUFBLElBQ3pCO0FBQ0EsZUFBVyxTQUFTLEtBQUssY0FBYyxLQUFLLEdBQUc7QUFDN0MsWUFBTSxNQUFNLHVDQUFnQixJQUFJLE1BQU0sRUFBRTtBQUN4QyxXQUFLLGVBQWUsR0FBRztBQUFBLElBQ3pCO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUE0QkEsV0FDRSxRQUNBLFFBQ0EsS0FDbUI7QUFDbkIsUUFBSSxVQUFVLEVBQUcsUUFBTyxFQUFFLE1BQU0sTUFBTTtBQVF0QyxVQUFNLGNBQWMsS0FBSyxRQUFRLElBQUksUUFBUSxPQUFPO0FBR3BELFVBQU0sVUFBNkI7QUFBQSxNQUNqQyxRQUFRO0FBQUEsTUFDUjtBQUFBLE1BQ0E7QUFBQSxNQUNBLE1BQU0sSUFBSTtBQUFBLE1BQ1YsR0FBSSxJQUFJLGFBQWEsU0FBWSxFQUFFLFVBQVUsSUFBSSxTQUFTLElBQUksQ0FBQztBQUFBLElBQ2pFO0FBQ0EsZUFBVyxTQUFTLEtBQUssY0FBYyxLQUFLLEdBQUc7QUFJN0MsVUFDRSxnQkFBZ0IsVUFDaEIsTUFBTSxVQUFVLFVBQ2hCLE1BQU0sVUFBVSxhQUNoQjtBQUNBO0FBQUEsTUFDRjtBQUNBLFlBQU0sTUFBTSx1Q0FBZ0IsSUFBSSxNQUFNLEVBQUU7QUFDeEMsWUFBTSxTQUFTLEtBQUssV0FBVyxPQUFPO0FBQ3RDLFVBQUksUUFBUSxZQUFZLE1BQU07QUFDNUIsZUFBTyxFQUFFLE1BQU0sT0FBTyxTQUFTLEtBQUs7QUFBQSxNQUN0QztBQUFBLElBQ0Y7QUFLQSxlQUFXLFFBQVEsS0FBSyxxQkFBcUI7QUFDM0MsVUFBSSxLQUFLLFFBQVEsU0FBUyxRQUFRLElBQUksR0FBRztBQUN2QyxhQUFLLFFBQVEsUUFBUSxRQUFRLElBQUk7QUFBQSxNQUNuQztBQUFBLElBQ0Y7QUFDQSxXQUFPLEVBQUUsTUFBTSxLQUFLO0FBQUEsRUFDdEI7QUFBQSxFQUVBLGlCQUE2QjtBQUMzQixXQUFRLEtBQUssUUFBUSxPQUFJLG9DQUFhLE1BQU0sS0FBb0I7QUFBQSxFQUNsRTtBQUFBLEVBRUEsbUJBQWdDO0FBQzlCLFVBQU0sUUFBUSxLQUFLLGVBQWU7QUFDbEMsVUFBTSxRQUFRLEtBQUssUUFBUSxTQUFTO0FBQ3BDLFVBQU0sUUFBcUIsQ0FBQztBQUU1QixVQUFNLFNBQVMsTUFDWixPQUFPLE9BQUssRUFBRSxTQUFTLFdBQVcsRUFBRSxVQUFVLFNBQVUsRUFBRSxLQUFnQixDQUFDLEVBQzNFLElBQUksUUFBTTtBQUFBLE1BQ1QsSUFBSSxFQUFFO0FBQUEsTUFDTixNQUFNLE1BQU0sS0FBSyxPQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLFdBQVcsR0FDekQ7QUFBQSxJQUNOLEVBQUUsRUFDRCxPQUFPLE9BQUssRUFBRSxTQUFTLE1BQVM7QUFFbkMsZUFBVyxTQUFTLFFBQVE7QUFDMUIsWUFBTSxhQUFhLG9CQUFvQixNQUFNLElBQUk7QUFNakQsWUFBTSxnQkFBZ0IsS0FBSyxjQUFjLFlBQVksS0FBSztBQUMxRCxZQUFNLGFBQ0osZUFBZSxDQUFDLElBQWEsUUFBa0IsQ0FBQztBQUNsRCxZQUFNLFNBQXFCLGNBQ3hCLE9BQU8sT0FBSyxFQUFFLHNCQUFzQixFQUNwQztBQUFBLFFBQ0MsQ0FBQyxLQUFLLFdBQVcsT0FBTyx1QkFBd0IsTUFBTSxNQUFNLElBQUksR0FBRztBQUFBLFFBQ25FO0FBQUEsTUFDRjtBQUtGLFVBQUksQ0FBQyxjQUFjLGNBQWMsTUFBTSxPQUFLLENBQUMsRUFBRSxzQkFBc0IsR0FBRztBQUN0RTtBQUFBLE1BQ0Y7QUFFQSxVQUFJLGFBQWEsT0FBTyxLQUFLLFNBQVMsTUFBTSxFQUFFO0FBRzlDLFVBQUksTUFBTSxTQUFTLFFBQVE7QUFDekIscUJBQWE7QUFBQSxVQUNYLEdBQUc7QUFBQSxVQUNILE1BQUcseUNBQWtCLEtBQUssU0FBUyxNQUFNLEVBQUU7QUFBQSxRQUM3QztBQUFBLE1BQ0Y7QUFHQSxVQUFJLE1BQU0sU0FBUyxRQUFRO0FBQ3pCLGNBQU0sYUFBeUIsVUFBVSxVQUFVLFVBQVU7QUFDN0QsY0FBTSxjQUFXO0FBQUEsVUFDZixLQUFLO0FBQUEsVUFDTCxNQUFNO0FBQUEsVUFDTixDQUFDLEdBQUcsVUFBTyx3Q0FBaUIsR0FBRyxJQUFJLFVBQVU7QUFBQSxRQUMvQztBQUNBLHFCQUFhLENBQUMsR0FBRyxZQUFZLEdBQUcsUUFBUTtBQUFBLE1BQzFDO0FBR0EsVUFBSSxNQUFNLFNBQVMsUUFBUTtBQUN6QixjQUFNLGdCQUFhLHlDQUFrQixLQUFLLFNBQVMsTUFBTSxFQUFFO0FBQzNELFlBQUksV0FBVyxTQUFTLEdBQUc7QUFDekIsZ0JBQU0sZUFBZSxJQUFJLElBQUksV0FBVyxJQUFJLE9BQUssRUFBRSxFQUFFLENBQUM7QUFDdEQsdUJBQWEsV0FBVyxPQUFPLE9BQUssQ0FBQyxhQUFhLElBQUksRUFBRSxFQUFFLENBQUM7QUFDM0QsdUJBQWEsQ0FBQyxHQUFHLFlBQVksR0FBRyxVQUFVO0FBQUEsUUFDNUM7QUFBQSxNQUNGO0FBU0EsWUFBTSxnQkFBZ0I7QUFDdEIsaUJBQVcsVUFBVSxlQUFlO0FBQ2xDLFlBQUksT0FBTyxlQUFlO0FBQ3hCLHVCQUFhO0FBQUEsWUFDWCxHQUFHO0FBQUEsWUFDSCxHQUFHLE9BQU8sY0FBYyxNQUFNLE1BQU0sRUFBRTtBQUFBLFVBQ3hDO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFDQSxpQkFBVyxVQUFVLGVBQWU7QUFDbEMsWUFBSSxPQUFPLGFBQWE7QUFDdEIsdUJBQWEsT0FBTyxZQUFZLFlBQVksTUFBTSxNQUFNLEVBQUU7QUFBQSxRQUM1RDtBQUFBLE1BQ0Y7QUFFQSxZQUFNLEtBQUssR0FBRyxVQUFVO0FBQUEsSUFDMUI7QUFNQSxRQUFJLGNBQWM7QUFDbEIsVUFBTSxlQUF1QyxFQUFFLFFBQVEsTUFBTSxNQUFNO0FBQ25FLGVBQVcsVUFBVSxLQUFLLGNBQWMsWUFBWSxLQUFLLEdBQUc7QUFDMUQsVUFBSSxPQUFPLHdCQUF3QixZQUFZLE1BQU0sT0FBTztBQUMxRCxzQkFBYztBQUNkO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQSxXQUFPLGlCQUFjLDRDQUFxQixLQUFLLFNBQVMsT0FBTyxLQUFLLElBQUk7QUFBQSxFQUMxRTtBQUFBLEVBRUEsVUFBVSxNQUFpQixZQUF1QixTQUFxQjtBQUNyRSxVQUFNLFFBQVEsS0FBSyxlQUFlO0FBS2xDLFVBQU0sWUFBK0I7QUFBQSxNQUNuQyxRQUFRO0FBQUEsTUFDUixPQUFPO0FBQUEsTUFDUCxTQUFTLEtBQUs7QUFBQSxNQUNkLE1BQU0sS0FBSztBQUFBLE1BQ1gsSUFBSSxLQUFLO0FBQUEsTUFDVCxXQUFXLEtBQUssY0FBYztBQUFBLElBQ2hDO0FBQ0EsZUFBVyxVQUFVLEtBQUssY0FBYyxZQUFZLEtBQUssR0FBRztBQUMxRCxZQUFNLFNBQVMsT0FBTyxlQUFlLFNBQVM7QUFDOUMsVUFBSSxRQUFRLFdBQVcsTUFBTTtBQUMzQixjQUFNLElBQUk7QUFBQSxVQUNSLE9BQU8sVUFBVSw2QkFBNkIsT0FBTyxFQUFFO0FBQUEsVUFDdkQsT0FBTztBQUFBLFFBQ1Q7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLFVBQU0sUUFBUSxLQUFLLFFBQVEsU0FBUztBQUNwQyxVQUFNLGFBQWEsTUFBTTtBQUFBLE1BQ3ZCLE9BQUssRUFBRSxPQUFPLEtBQUssV0FBVyxFQUFFLFNBQVM7QUFBQSxJQUMzQyxHQUFHO0FBRUgsVUFBTSxXQUFXLEtBQUssUUFBUSxPQUFJLG9DQUFhLGlCQUFpQjtBQUNoRSxVQUFNLGNBQ0osZUFBZSxVQUNmLGFBQWEsUUFDYixhQUFhLFVBQ2IsYUFBYSxLQUFLO0FBRXBCLFVBQU0sYUFBYyxLQUFzQixlQUFlO0FBTXpELFVBQU0sbUJBQW9DLEtBQUssWUFDMUMsY0FDRyxLQUFLO0FBQUEsTUFDSCxVQUFVLFVBQ0osS0FBSyxLQUFLLElBQ1YsS0FBSyxLQUFLO0FBQUEsSUFDbEIsSUFDQSxLQUFLLFdBQVcsS0FBSyxFQUFFLElBQzNCO0FBQ0osVUFBTSxxQkFDSixxQkFBcUIsT0FDaEIsTUFBTTtBQUFBLE1BQ0wsQ0FBQyxNQUFNLEVBQUUsT0FBTyxvQkFBb0IsRUFBRSxTQUFTO0FBQUEsSUFDakQsR0FBRyxTQUFtQyxPQUN0QztBQUVOLFFBQUksYUFBYTtBQU1mLFlBQU0saUJBQ0osVUFBVSxVQUFZLEtBQUssS0FBSyxJQUFrQixLQUFLLEtBQUs7QUFDOUQsWUFBTSxhQUFhLEtBQUssV0FBVyxjQUFjO0FBQ2pELFVBQUksV0FBVztBQUNmLFVBQUksYUFBYTtBQUNqQixVQUFJLGVBQWUsTUFBTTtBQUN2QixtQkFBVyxLQUFLLG9CQUFvQixLQUFLLFNBQVMsWUFBWSxLQUFLO0FBQ25FLFlBQUksQ0FBQyxVQUFVO0FBQ2IsZ0JBQU0sU0FBUyxLQUFLLFdBQVcsWUFBWSxHQUFHO0FBQUEsWUFDNUMsTUFBTTtBQUFBLFlBQ04sVUFBVSxLQUFLO0FBQUEsVUFDakIsQ0FBQztBQUNELHVCQUFhLE9BQU87QUFBQSxRQUN0QjtBQUFBLE1BQ0Y7QUFJQSxVQUFJLENBQUMsWUFBWSxZQUFZO0FBQzNCLGFBQUssUUFBUSxPQUFPLEtBQUssU0FBUyxZQUFZLEtBQUssRUFBRTtBQUNyRCxhQUFLLFFBQVEsT0FBTyxLQUFLLFNBQVMsWUFBWSxJQUFJO0FBQUEsTUFDcEQ7QUFBQSxJQUNGLFdBQVcsWUFBWTtBQUNyQixrREFBa0IsS0FBSyxTQUFTLElBQW9CO0FBQUEsSUFDdEQsT0FBTztBQWVMLFVBQUksV0FBVztBQUNmLFVBQUksa0JBQWtCO0FBQ3RCLFVBQUksS0FBSyxXQUFXO0FBQ2xCLGNBQU0sYUFBYSxLQUFLLFdBQVcsS0FBSyxFQUFFO0FBQzFDLFlBQUksZUFBZSxNQUFNO0FBQ3ZCLHFCQUFXLEtBQUssb0JBQW9CLEtBQUssU0FBUyxZQUFZLEtBQUs7QUFDbkUsY0FBSSxDQUFDLFVBQVU7QUFDYixrQkFBTSxFQUFFLEtBQUssSUFBSSxLQUFLLFdBQVcsWUFBWSxHQUFHO0FBQUEsY0FDOUMsTUFBTTtBQUFBLGNBQ04sVUFBVSxLQUFLO0FBQUEsWUFDakIsQ0FBQztBQUNELDhCQUFrQjtBQUFBLFVBQ3BCLE9BQU87QUFJTCw4QkFBa0I7QUFBQSxVQUNwQjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBSUEsVUFBSSxDQUFDLFlBQVksaUJBQWlCO0FBQ2hDLGFBQUssUUFBUSxPQUFPLEtBQUssU0FBUyxZQUFZLEtBQUssRUFBRTtBQUNyRCxhQUFLLFFBQVEsT0FBTyxLQUFLLFNBQVMsWUFBWSxJQUFJO0FBQUEsTUFDcEQ7QUFBQSxJQUNGO0FBR0EsVUFBTSxjQUFjLGFBQWMsS0FBc0IsS0FBSyxLQUFLO0FBQ2xFLFFBQUksZUFBZSxhQUFVLHVDQUFnQixhQUFhLEtBQUssR0FBRztBQUNoRSxZQUFNLFlBQ0gsS0FBK0MsYUFBYTtBQUMvRCwrQ0FBZSxLQUFLLFNBQVMsS0FBSyxTQUFTLFNBQVM7QUFBQSxJQUN0RDtBQUdBLFFBQUksZUFBZSxVQUFVLEtBQUssSUFBSSxLQUFLLEtBQUssS0FBSyxJQUFJLE1BQU0sSUFBSTtBQUNqRSxtREFBbUIsS0FBSyxTQUFTLEtBQUssTUFBTSxLQUFLLEVBQUU7QUFBQSxJQUNyRCxPQUFPO0FBQ0wscURBQXFCLEtBQUssT0FBTztBQUFBLElBQ25DO0FBR0EsbURBQW9CLEtBQUssU0FBUyxNQUFNLGVBQWUsTUFBTTtBQUc3RCxVQUFNLFlBQXdCLFVBQVUsVUFBVSxVQUFVO0FBQzVELFNBQUssUUFBUSxVQUFPLG9DQUFhLFFBQVEsU0FBUztBQUdsRCxRQUFJLFVBQVUsU0FBUztBQUNyQixZQUFNLE1BQ0YsS0FBSyxRQUFRLE9BQUksb0NBQWEsZ0JBQWdCLEtBQWdCLEtBQUs7QUFDdkUsV0FBSyxRQUFRLFVBQU8sb0NBQWEsa0JBQWtCLEVBQUU7QUFBQSxJQUN2RDtBQUdBLDhDQUFlLEtBQUssT0FBTztBQU8zQixVQUFNLGVBQWlDLEVBQUUsUUFBUSxLQUFLO0FBQ3RELFVBQU0sVUFBVSxLQUFLLGNBQWMsY0FBYyxLQUFLO0FBQ3RELGVBQVcsTUFBTSxTQUFTO0FBQ3hCLFlBQU0sTUFBTSx1Q0FBZ0IsSUFBSSxFQUFFO0FBQ2xDLFdBQUssZUFBZSxZQUFZO0FBQ2hDLFdBQUssaUJBQWlCLEVBQUU7QUFBQSxJQUMxQjtBQU9BLFVBQU0sVUFBMkIsRUFBRSxRQUFRLE1BQU0sT0FBTyxNQUFNO0FBQzlELGVBQVcsU0FBUyxLQUFLLGNBQWMsS0FBSyxHQUFHO0FBQzdDLFlBQU0sTUFBTSx1Q0FBZ0IsSUFBSSxNQUFNLEVBQUU7QUFDeEMsV0FBSyxjQUFjLE9BQU87QUFBQSxJQUM1QjtBQVFBLFVBQU0sZUFBaUMsRUFBRSxRQUFRLE1BQU0sTUFBTSxVQUFVO0FBQ3ZFLGVBQVcsVUFBVSxLQUFLLGNBQWMsWUFBWSxTQUFTLEdBQUc7QUFDOUQsYUFBTyxjQUFjLFlBQVk7QUFBQSxJQUNuQztBQUlBLFVBQU0sYUFBYSxLQUFLLGdCQUFnQjtBQUN4QyxVQUFNLFdBQVcsZUFBZTtBQUloQyxVQUFNLHFCQUFrQixpQ0FBVSxLQUFLLFNBQVMsU0FBUztBQUd6RCxVQUFNLGNBQXlDO0FBQUEsTUFDN0MsUUFBUTtBQUFBLE1BQ1IsT0FBTztBQUFBLE1BQ1AsTUFBTSxLQUFLO0FBQUEsTUFDWCxJQUFJLEtBQUs7QUFBQSxNQUNUO0FBQUEsTUFDQSxjQUFjO0FBQUEsTUFDZDtBQUFBLE1BQ0E7QUFBQSxNQUNBLFdBQ0UsZUFBZSxhQUFVLHVDQUFnQixhQUFhLEtBQUssSUFDckQsS0FBK0MsYUFBYSxZQUM5RDtBQUFBLElBQ1I7QUFDQSxVQUFNLGdCQUE4RCxDQUFDO0FBQ3JFLGVBQVcsU0FBUyxLQUFLLGNBQWMsS0FBSyxHQUFHO0FBQzdDLFlBQU0sTUFBTSx1Q0FBZ0IsSUFBSSxNQUFNLEVBQUU7QUFDeEMsWUFBTSxVQUFVLEtBQUsscUJBQXFCLFdBQVc7QUFDckQsVUFBSSxZQUFZLFVBQWEsWUFBWSxJQUFJO0FBQzNDLHNCQUFjLEtBQUssRUFBRSxVQUFVLE1BQU0sSUFBSSxRQUFRLENBQUM7QUFBQSxNQUNwRDtBQUFBLElBQ0Y7QUFFQSxTQUFLLFNBQVMsS0FBSztBQUFBLE1BQ2pCLE1BQU0sS0FBSztBQUFBLE1BQ1gsSUFBSSxLQUFLO0FBQUEsTUFDVCxPQUFPO0FBQUEsTUFDUDtBQUFBLE1BQ0EsWUFBWTtBQUFBLE1BQ1osY0FBYztBQUFBLE1BQ2QsU0FBUztBQUFBLE1BQ1Q7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0EsV0FBVyxZQUFZO0FBQUEsTUFDdkIsV0FBVyxLQUFLLElBQUk7QUFBQSxNQUNwQjtBQUFBLElBQ0YsQ0FBQztBQUVELFdBQU87QUFBQSxFQUNUO0FBQUEsRUFFQSxrQkFBOEI7QUFLNUIsVUFBTSxZQUFtQyxFQUFFLFFBQVEsS0FBSztBQUN4RCxlQUFXLFNBQVMsS0FBSyxjQUFjLEtBQUssR0FBRztBQUM3QyxZQUFNLE1BQU0sdUNBQWdCLElBQUksTUFBTSxFQUFFO0FBQ3hDLFlBQU0sV0FBVyxLQUFLLG9CQUFvQixTQUFTO0FBQ25ELFVBQUksYUFBYSxPQUFXLFFBQU87QUFBQSxJQUNyQztBQUVBLFVBQU0sWUFBWSxLQUFLLGVBQWU7QUFDdEMsV0FBSSxtQ0FBWSxLQUFLLFNBQVMsU0FBUyxFQUFHLFFBQU87QUFDakQsV0FBSSxtQ0FBWSxLQUFLLFNBQVMsU0FBUyxFQUFHLFFBQU87QUFDakQsV0FBSSx3Q0FBZ0IsS0FBSyxPQUFPLEVBQUcsUUFBTztBQUMxQyxXQUFJLDhDQUFzQixLQUFLLE9BQU8sRUFBRyxRQUFPO0FBQ2hELFdBQUksOENBQXVCLEtBQUssT0FBTyxFQUFHLFFBQU87QUFDakQsV0FBTztBQUFBLEVBQ1Q7QUFBQTtBQUFBLEVBR0EsU0FBUyxNQUFjLElBQVksV0FBeUM7QUFDMUUsV0FDRSxLQUFLLGlCQUFpQixFQUFFO0FBQUEsTUFDdEIsT0FDRSxFQUFFLFNBQVMsUUFDWCxFQUFFLE9BQU8sT0FDUixDQUFDLEVBQUUsYUFBYSxFQUFFLGVBQWUsYUFBYTtBQUFBLElBQ25ELEtBQUs7QUFBQSxFQUVUO0FBQUEsRUFFUSxXQUFXLFFBQWlDO0FBQ2xELFVBQU0sSUFBSSxLQUFLLFFBQ1osU0FBUyxFQUNULEtBQUssT0FBSyxFQUFFLFNBQVMsY0FBYyxFQUFFLFVBQVUsVUFBVyxFQUFFLEtBQWdCLENBQUM7QUFDaEYsV0FBTyxJQUFLLEVBQUUsS0FBa0I7QUFBQSxFQUNsQztBQUNGIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJlbmdpbmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGVzc0VuZ2luZSDigJQgaW50ZWdyYXRlcyBhbGwgcnVsZSBtb2R1bGVzIGludG8gYSBwbGF5YWJsZSBjaGVzcyBnYW1lLlxuICpcbiAqIFVzZXMgU2Vzc2lvbiBhcyB3b3JraW5nIG1lbW9yeTsgY2FsbHMgcnVsZSBmdW5jdGlvbnMgZGlyZWN0bHkgKG5vIFJldGVcbiAqIHByb2R1Y3Rpb24gbmV0d29yayDigJQgdGhhdCBpbnRlZ3JhdGlvbiBpcyBmdXR1cmUgd29yaykuXG4gKi9cbmltcG9ydCB7IFNlc3Npb24gfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB7XG4gIEdBTUVfRU5USVRZLFxuICBQUkVTRVRfU1RBVEVfRU5USVRZLFxuICB0eXBlIFBpZWNlVHlwZSxcbiAgdHlwZSBQaWVjZUNvbG9yLFxufSBmcm9tIFwiLi9zY2hlbWEuanNcIjtcbmltcG9ydCB7IGFwcGx5TGF5b3V0LCBDTEFTU0lDX0xBWU9VVCB9IGZyb20gXCIuL3N0YXJ0aW5nLXBvc2l0aW9uLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFN0YXJ0aW5nTGF5b3V0IH0gZnJvbSBcIi4vbGF5b3V0cy90eXBlcy5qc1wiO1xuaW1wb3J0IHtcbiAgZ2V0Q2FzdGxpbmdNb3ZlcyxcbiAgYXBwbHlDYXN0bGluZ01vdmUsXG4gIHR5cGUgQ2FzdGxpbmdNb3ZlLFxufSBmcm9tIFwiLi9ydWxlcy9jYXN0bGluZy5qc1wiO1xuaW1wb3J0IHtcbiAgZ2V0RW5QYXNzYW50TW92ZXMsXG4gIHNldEVuUGFzc2FudFRhcmdldCxcbiAgY2xlYXJFblBhc3NhbnRUYXJnZXQsXG59IGZyb20gXCIuL3J1bGVzL2VucGFzc2FudC5qc1wiO1xuaW1wb3J0IHtcbiAgaXNQcm9tb3Rpb25Nb3ZlLFxuICBhcHBseVByb21vdGlvbixcbiAgZ2V0UHJvbW90aW9uTW92ZXMsXG59IGZyb20gXCIuL3J1bGVzL3Byb21vdGlvbi5qc1wiO1xuaW1wb3J0IHtcbiAgZmlsdGVyU2VsZkNoZWNrTW92ZXMsXG4gIGlzSW5DaGVjayxcbiAgaXNTcXVhcmVBdHRhY2tlZCxcbn0gZnJvbSBcIi4vcnVsZXMvY2hlY2suanNcIjtcbmltcG9ydCB7IGlzQ2hlY2ttYXRlIH0gZnJvbSBcIi4vcnVsZXMvY2hlY2ttYXRlLmpzXCI7XG5pbXBvcnQgeyBpc1N0YWxlbWF0ZSB9IGZyb20gXCIuL3J1bGVzL3N0YWxlbWF0ZS5qc1wiO1xuaW1wb3J0IHsgaXNJbnN1ZmZpY2llbnRNYXRlcmlhbCB9IGZyb20gXCIuL3J1bGVzL2luc3VmZmljaWVudC5qc1wiO1xuaW1wb3J0IHtcbiAgaXNGaWZ0eU1vdmVEcmF3LFxuICB1cGRhdGVIYWxmbW92ZUNsb2NrLFxuICByZWNvcmRQb3NpdGlvbixcbiAgaXNUaHJlZWZvbGRSZXBldGl0aW9uLFxufSBmcm9tIFwiLi9ydWxlcy9kcmF3cy5qc1wiO1xuaW1wb3J0IHsgQ09SRV9QSUVDRV9BVFRSUyB9IGZyb20gXCIuL3J1bGVzL2NhcHR1cmUuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgQmVmb3JlTW92ZUNvbnRleHQsXG4gIENhcHR1cmVIb29rQ29udGV4dCxcbiAgRGFtYWdlQ29udGV4dCxcbiAgRGFtYWdlSG9va0NvbnRleHQsXG4gIERlc2NyaWJlTW92ZUVmZmVjdENvbnRleHQsXG4gIEdhbWVSZXN1bHRIb29rQ29udGV4dCxcbiAgTGlmZWN5Y2xlQ29udGV4dCxcbiAgTW92ZUhvb2tDb250ZXh0LFxuICBQaWVjZVNwYXduQ29udGV4dCxcbiAgUGllY2VTcGF3blJlYXNvbixcbiAgU2VsZkNoZWNrRmlsdGVyQ29udGV4dCxcbiAgVHVyblN0YXJ0Q29udGV4dCxcbn0gZnJvbSBcIi4vcHJlc2V0cy9yZWdpc3RyeS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBDaGVzc0F0dHJLZXkgfSBmcm9tIFwiLi9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgTGVnYWxNb3ZlIH0gZnJvbSBcIi4vcnVsZXMvdHlwZXMuanNcIjtcbmltcG9ydCB7XG4gIEFjdGl2ZVByZXNldFNldCxcbiAgdHlwZSBBY3RpdmF0aW9uUmVxdWVzdCxcbn0gZnJvbSBcIi4vcHJlc2V0cy9hY3RpdmUtc2V0LmpzXCI7XG5pbXBvcnQgeyBQUkVTRVRfUkVHSVNUUlkgfSBmcm9tIFwiLi9wcmVzZXRzL3JlZ2lzdHJ5LmpzXCI7XG5pbXBvcnQgeyBQSUVDRV9UWVBFX1JFR0lTVFJZIH0gZnJvbSBcIi4vcHJlc2V0cy9waWVjZS10eXBlLXJlZ2lzdHJ5LmpzXCI7XG4vLyBJbXBvcnRpbmcgZnJvbSB0aGUgYmFycmVsIGd1YXJhbnRlZXMgZXZlcnkgcHJlc2V0IG1vZHVsZSdzXG4vLyBzaWRlLWVmZmVjdCByZWdpc3RyYXRpb24gaGFzIHJ1biBiZWZvcmUgdGhlIGZpcnN0IGVuZ2luZSBpcyBjcmVhdGVkLlxuaW1wb3J0IFwiLi9wcmVzZXRzL2luZGV4LmpzXCI7XG5cbnR5cGUgTW92ZUdldHRlciA9IChzZXNzaW9uOiBTZXNzaW9uLCBwaWVjZUlkOiBFbnRpdHlJZCkgPT4gTGVnYWxNb3ZlW107XG5cbi8qKlxuICogTG9vayB1cCB0aGUgbW92ZSBnZW5lcmF0b3IgZm9yIGEgcGllY2UgdHlwZSB2aWEgdGhlIHJlZ2lzdHJ5LlxuICogUmV0dXJucyBgbnVsbGAgZm9yIHVua25vd24gdHlwZXMgKGRlZ2VuZXJhdGUg4oCUIGluZGljYXRlcyBhIGZhY3RcbiAqIHdpdGggYSBwaWVjZSB0eXBlIG5vYm9keSByZWdpc3RlcmVkOyB0aGUgZW5naW5lIHRyZWF0cyBzdWNoIHBpZWNlc1xuICogYXMgaW1tb2JpbGUpLlxuICpcbiAqIFRoaXMgcmVwbGFjZXMgdGhlIGhhcmRjb2RlZCBgUElFQ0VfTU9WRV9HRVRURVJTYCB0YWJsZSB0aGF0IG9ubHlcbiAqIGtuZXcgYWJvdXQgRklERSBwaWVjZXMuIEN1c3RvbSB0eXBlcyAoQ2Fubm9uLCBBbWF6b24sIE5pZ2h0cmlkZXIpXG4gKiByZWdpc3RlciB0aGVpciBtb3ZlIGdlbmVyYXRvcnMgaW4gdGhlIHNhbWUgcmVnaXN0cnkgYW5kIGFyZVxuICogZGlzcGF0Y2hlZCBhdXRvbWF0aWNhbGx5LlxuICovXG5mdW5jdGlvbiBsb29rdXBNb3ZlR2VuZXJhdG9yKHR5cGU6IHN0cmluZyk6IE1vdmVHZXR0ZXIgfCBudWxsIHtcbiAgY29uc3QgZGVmID0gUElFQ0VfVFlQRV9SRUdJU1RSWS5nZXQodHlwZSk7XG4gIHJldHVybiBkZWY/Lm1vdmVHZW5lcmF0b3IgPz8gbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgR2FtZVJlc3VsdCA9XG4gIHwgXCJjaGVja21hdGVcIlxuICB8IFwic3RhbGVtYXRlXCJcbiAgfCBcImRyYXctNTBcIlxuICB8IFwiZHJhdy0zZm9sZFwiXG4gIHwgXCJkcmF3LWluc3VmZmljaWVudFwiXG4gIC8vIFByZXNldC1kZWZpbmVkIHRlcm1pbmFsIHN0YXRlcy4gVGhlIHJlZ3VsYXIgY2hlY2ttYXRlIHJlc3VsdCBhbHdheXNcbiAgLy8gaW1wbGljaXRseSBtZWFucyBcInRoZSBzaWRlIHRvIG1vdmUgbG9zZXNcIiAoc3RhbmRhcmQgY2hlc3MpLCBidXRcbiAgLy8gdmFyaWFudHMgbGlrZSBjYXB0dXJlLXRvLXdpbiBvciBsYXN0LXBpZWNlLXN0YW5kaW5nIG5lZWQgdG8gbmFtZVxuICAvLyB0aGUgd2lubmVyIGV4cGxpY2l0bHkgYmVjYXVzZSB0aGUgc2lkZSB0byBtb3ZlIG1heSBiZSB0aGUgV0lOTkVSLlxuICB8IFwid2hpdGUtd2luc1wiXG4gIHwgXCJibGFjay13aW5zXCJcbiAgfCBcIm9uZ29pbmdcIjtcblxuLyoqXG4gKiBSZXNlcnZlZCBhdHRyaWJ1dGUgcHJlZml4IGZvciBwcmVzZXQtc3RhdGUgZmFjdHMuIEV2ZXJ5IHByZXNldC1cbiAqIHN0YXRlIGF0dHJpYnV0ZSBzdG9yZWQgb24gUFJFU0VUX1NUQVRFX0VOVElUWSBpcyBwcmVmaXhlZCB3aXRoXG4gKiB0aGlzIHRvIGd1YXJhbnRlZSBubyBjb2xsaXNpb24gd2l0aCBnYW1lLWxldmVsIG9yIHBpZWNlLWxldmVsXG4gKiBhdHRyaWJ1dGUga2V5cy5cbiAqXG4gKiBDaGFuZ2luZyB0aGlzIHZhbHVlIGJyZWFrcyBzZXJpYWxpemVkIHNhdmUtZ2FtZXMgdGhhdCBjb250YWluXG4gKiBwcmVzZXQtc3RhdGUgZmFjdHMg4oCUIGRvbid0LlxuICovXG5jb25zdCBQUkVTRVRfU1RBVEVfQVRUUl9QUkVGSVggPSBcIl9fcHJlc2V0X18vXCI7XG5cbi8qKlxuICogVGhyb3duIGZyb20gYGFwcGx5TW92ZWAgd2hlbiBhIHByZXNldCdzIGBvbkJlZm9yZU1vdmVgIGhvb2sgdmV0b2VzXG4gKiB0aGUgbW92ZS4gVGhlIGNhbGxlciAoVUkgLyBzZXJ2ZXIpIHNob3VsZCBjYXRjaCB0aGlzLCBzdXJmYWNlXG4gKiBgcmVhc29uYCB0byB0aGUgdXNlciwgYW5kIGxlYXZlIHRoZSBnYW1lIHN0YXRlIHVuY2hhbmdlZCDigJQgbm9cbiAqIG11dGF0aW9uIGhhcHBlbnMgYmVmb3JlIHRoZSBjYW5jZWwgY2hlY2sgcnVucy5cbiAqXG4gKiBGYXRhbCB0aGUgbW92ZSBhdHRlbXB0LCBub3QgdGhlIHNlc3Npb24uIENhbGxlcnMgc2hvdWxkIE5PVCB0cmVhdFxuICogdGhpcyBhcyBhIHNlcnZlciBlcnJvci5cbiAqL1xuZXhwb3J0IGNsYXNzIE1vdmVDYW5jZWxsZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgcHJlc2V0SWQ6IHN0cmluZztcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBwcmVzZXRJZDogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gXCJNb3ZlQ2FuY2VsbGVkRXJyb3JcIjtcbiAgICB0aGlzLnByZXNldElkID0gcHJlc2V0SWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHNpbmdsZSBsaW5lIGluIHRoZSBlbmdpbmUncyBtb3ZlIGhpc3RvcnkuXG4gKlxuICogRXZlcnkgc3VjY2Vzc2Z1bCBgYXBwbHlNb3ZlYCBhcHBlbmRzIG9uZSBvZiB0aGVzZSB0byB0aGUgZW5naW5lJ3NcbiAqIGBtb3ZlTG9nYC4gQ2FsbGVycyB0aGF0IG5lZWQgaGlzdG9yeSAoVUkgbW92ZS1saXN0IHBhbmVsLCBQR05cbiAqIGV4cG9ydCwgcmVwbGF5LCBhbmFseXNpcykgcmVhZCB0aGlzIHJhdGhlciB0aGFuIGRpZmZpbmcgc2Vzc2lvblxuICogZmFjdHMuXG4gKlxuICogYHByZXNldEVmZmVjdHNgIGlzIHBvcHVsYXRlZCBieSBwcmVzZXRzIGltcGxlbWVudGluZ1xuICogYGRlc2NyaWJlTW92ZUVmZmVjdGA6IGVhY2ggcmV0dXJuIHZhbHVlIGNvbnRyaWJ1dGVzIG9uZSBlbnRyeVxuICogKHByZXNldElkICsgaHVtYW4tcmVhZGFibGUgc3VtbWFyeSkuIEV4YW1wbGU6IHF1ZWVuLXNwbGl0cyB3b3VsZFxuICogcHVzaCBgeyBwcmVzZXRJZDogXCJxdWVlbi1zcGxpdHNcIiwgc3VtbWFyeTogXCJRdWVlbiBzcGxpdCBpbnRvXG4gKiBSb29rL0Jpc2hvcFwiIH1gIG9uIGEgZmlzc2lvbiBtb3ZlLlxuICpcbiAqIEdyb3dhYmxlIOKAlCBmdXR1cmUgZmllbGRzIHNob3VsZCBiZSBvcHRpb25hbCBzbyBleGlzdGluZyBjb25zdW1lcnNcbiAqIGRvbid0IGJyZWFrLiBGYXZvciBwcmltaXRpdmUvc3RyaW5nIHZhbHVlcyBzbyB0aGUgcmVjb3JkIGlzXG4gKiB0cml2aWFsbHkgSlNPTi1zZXJpYWxpemFibGUgZm9yIHNhdmUvZXhwb3J0LlxuICovXG4vKipcbiAqIEFuIGVwaGVtZXJhbCB2aXN1YWwgZWZmZWN0IGVtaXR0ZWQgYnkgYSBwcmVzZXQgZm9yIHRoZSBVSSBsYXllclxuICogdG8gcmVuZGVyLlxuICpcbiAqIEVmZmVjdHMgYXJlIGRlY291cGxlZCBmcm9tIGdhbWVwbGF5IOKAlCB0aGUgZW5naW5lJ3Mgc3RhdGUgaXNcbiAqIGF1dGhvcml0YXRpdmUgYW5kIGluZGVwZW5kZW50IG9mIHdoZXRoZXIgYW55b25lIHN1YnNjcmliZWQuIEVtaXRcbiAqIGxpYmVyYWxseSBmcm9tIHByZXNldHM7IHRoZSBVSSBkZWNpZGVzIHdoZXRoZXIgLyBob3cgdG8gcmVuZGVyIGFcbiAqIGdpdmVuIGtpbmQuIFVua25vd24ga2luZHMgYXJlIHJlbmRlcmVkIGFzIGEgZ2VuZXJpYyBwdWxzZSBieSB0aGVcbiAqIGRlZmF1bHQgVmlzdWFsRWZmZWN0TGF5ZXIuXG4gKlxuICogYGtpbmRgIGlzIGEgZnJlZS1mb3JtIHN0cmluZyBzbyBwcmVzZXRzIGNhbiBpbnRyb2R1Y2UgbmV3IGVmZmVjdFxuICogdHlwZXMgKGV4cGxvc2lvbiwgaGVhbCwgcG9pc29uLCBsaWdodG5pbmcsIHNoaWVsZC1icmVhaywg4oCmKSB3aXRob3V0XG4gKiBlZGl0aW5nIGVuZ2luZS9VSSB0YWJsZXMuIFRoZSBVSSBsYXllciBkaXNwYXRjaGVzIHRvIHBlci1raW5kXG4gKiBjb21wb25lbnRzOyBhbiB1bnJlZ2lzdGVyZWQga2luZCBmYWxscyBiYWNrIHRvIGEgZ2VuZXJpYyBvdmVybGF5LlxuICpcbiAqIGBzcXVhcmVgIGlzIHdoZXJlIHRoZSBlZmZlY3QgdmlzdWFsbHkgYW5jaG9ycy4gYG51bGxgIGlzIGFsbG93ZWRcbiAqIGZvciBmdWxsLWJvYXJkIGVmZmVjdHMgKGUuZy4gYSBcInNob2Nrd2F2ZVwiIHRoYXQgc3dlZXBzIHRoZSB3aG9sZVxuICogYm9hcmQpLiBgdHRsYCBpcyBob3cgbG9uZyAoaW4gbXMpIHRoZSBlZmZlY3Qgc2hvdWxkIHBlcnNpc3QgYmVmb3JlXG4gKiBhdXRvLWV4cGlyaW5nLlxuICpcbiAqIGBkYXRhYCBpcyBhIHR5cGVkLWZyZWUtZm9ybSBiYWcgZm9yIGtpbmQtc3BlY2lmaWMgcGF5bG9hZHNcbiAqIChjb2xvciwgaW50ZW5zaXR5LCBkaXJlY3Rpb24sIGNvdW50KS4gUHJlc2V0cyBkb2N1bWVudCB3aGF0IHRoZXlcbiAqIGVtaXQ7IHJlbmRlcmVycyByZWFkIHdoYXQgdGhleSBuZWVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZpc3VhbEVmZmVjdCB7XG4gIHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc3F1YXJlOiBudW1iZXIgfCBudWxsO1xuICByZWFkb25seSB0dGw6IG51bWJlcjtcbiAgcmVhZG9ubHkgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKiogSGFuZGxlciBzaWduYXR1cmUgZm9yIGVmZmVjdCBzdWJzY3JpYmVycy4gUmV0dXJuIG5vdGhpbmcuICovXG5leHBvcnQgdHlwZSBWaXN1YWxFZmZlY3RIYW5kbGVyID0gKGVmZmVjdDogVmlzdWFsRWZmZWN0KSA9PiB2b2lkO1xuXG4vKiogVW5zdWJzY3JpYmUgY2FsbGJhY2sgcmV0dXJuZWQgYnkgYHN1YnNjcmliZUVmZmVjdHNgLiAqL1xuZXhwb3J0IHR5cGUgVW5zdWJzY3JpYmUgPSAoKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1vdmVSZWNvcmQge1xuICByZWFkb25seSBmcm9tOiBudW1iZXI7XG4gIHJlYWRvbmx5IHRvOiBudW1iZXI7XG4gIHJlYWRvbmx5IG1vdmVyOiBQaWVjZUNvbG9yO1xuICByZWFkb25seSBtb3ZpbmdUeXBlOiBQaWVjZVR5cGU7XG4gIC8qKiBDYXB0dXJlZCBwaWVjZSdzIGlkIEJFRk9SRSB0aGUgY2FwdHVyZSByZXNvbHZlZCAobnVsbCBpZiBubyBjYXB0dXJlKS4gKi9cbiAgcmVhZG9ubHkgY2FwdHVyZWRJZDogRW50aXR5SWQgfCBudWxsO1xuICAvKiogQ2FwdHVyZWQgcGllY2UncyB0eXBlIEJFRk9SRSB0aGUgY2FwdHVyZSByZXNvbHZlZCAobnVsbCBpZiBubyBjYXB0dXJlKS4gKi9cbiAgcmVhZG9ubHkgY2FwdHVyZWRUeXBlOiBQaWVjZVR5cGUgfCBudWxsO1xuICAvKiogRGlkIHRoZSBtb3ZlIHB1dCB0aGUgb3Bwb25lbnQgaW4gY2hlY2s/ICovXG4gIHJlYWRvbmx5IGlzQ2hlY2s6IGJvb2xlYW47XG4gIC8qKiBEaWQgdGhlIG1vdmUgZW5kIHRoZSBnYW1lIChjaGVja21hdGUgb3IgcHJlc2V0LXRlcm1pbmFsKT8gKi9cbiAgcmVhZG9ubHkgdGVybWluYWw6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlzRW5QYXNzYW50OiBib29sZWFuO1xuICByZWFkb25seSBpc0Nhc3RsaW5nOiBib29sZWFuO1xuICByZWFkb25seSBwcm9tb3Rpb246IFBpZWNlVHlwZSB8IG51bGw7XG4gIC8qKiBFbmdpbmUgdGltZXN0YW1wIGluIG1zIChEYXRlLm5vdygpKTsgZm9yIGNsaWVudC1zaWRlIGFuaW1hdGlvbiB0aW1pbmcuICovXG4gIHJlYWRvbmx5IHRpbWVzdGFtcDogbnVtYmVyO1xuICAvKiogTm9uLWVtcHR5IHdoZW4gcHJlc2V0cyBjb250cmlidXRlZCBlZmZlY3QgZGVzY3JpcHRpb25zLiAqL1xuICByZWFkb25seSBwcmVzZXRFZmZlY3RzOiBSZWFkb25seUFycmF5PHsgcHJlc2V0SWQ6IHN0cmluZzsgc3VtbWFyeTogc3RyaW5nIH0+O1xufVxuXG4vKipcbiAqIFR5cGVkIGFjY2Vzc29yIGZvciBhIHByZXNldCdzIHNsaWNlIG9mIGVuZ2luZS1zY29wZWQgc3RhdGUuXG4gKlxuICogT2J0YWluIG9uZSB2aWEgYENoZXNzRW5naW5lLnByZXNldFN0YXRlPFQ+KHByZXNldElkKWAuIENhbGxzIGFyZVxuICogc2NvcGVkOiB0d28gcHJlc2V0cyBjYWxsaW5nIGBzdGF0ZS5zZXQoXCJ4XCIsIDEpYCB3aXRoIGRpZmZlcmVudFxuICogcHJlc2V0IElEcyBlYWNoIGdldCB0aGVpciBvd24gYHhgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXNldFN0YXRlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAvKiogUmVhZCBhIHN0YXRlIGtleS4gUmV0dXJucyB1bmRlZmluZWQgd2hlbiB1bnNldC4gKi9cbiAgZ2V0PEsgZXh0ZW5kcyBrZXlvZiBUPihrZXk6IEspOiBUW0tdIHwgdW5kZWZpbmVkO1xuICAvKiogV3JpdGUgYSBzdGF0ZSBrZXkuIE92ZXJ3cml0ZXMgYW55IHByZXZpb3VzIHZhbHVlLiAqL1xuICBzZXQ8SyBleHRlbmRzIGtleW9mIFQ+KGtleTogSywgdmFsdWU6IFRbS10pOiB2b2lkO1xuICAvKiogRGVsZXRlIGEgc3RhdGUga2V5LiBSZXR1cm5zIHRydWUgaWYgaXQgd2FzIHNldCwgZmFsc2Ugb3RoZXJ3aXNlLiAqL1xuICBkZWxldGU8SyBleHRlbmRzIGtleW9mIFQ+KGtleTogSyk6IGJvb2xlYW47XG4gIC8qKiBSZXR1cm5zIHRoZSBmdWxsIHN0YXRlIHNuYXBzaG90IGFzIGEgcGxhaW4gb2JqZWN0LiAqL1xuICBhbGwoKTogUGFydGlhbDxUPjtcbiAgLyoqIFRydWUgaWYgYGtleWAgaGFzIGJlZW4gc2V0LiAqL1xuICBoYXM8SyBleHRlbmRzIGtleW9mIFQ+KGtleTogSyk6IGJvb2xlYW47XG59XG5cbmNsYXNzIFByZXNldFN0YXRlSW1wbDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+XG4gIGltcGxlbWVudHMgUHJlc2V0U3RhdGU8VD5cbntcbiAgcmVhZG9ubHkgI3Nlc3Npb246IFNlc3Npb247XG4gIHJlYWRvbmx5ICNwcmVmaXg6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzZXNzaW9uOiBTZXNzaW9uLCBwcmVzZXRJZDogc3RyaW5nKSB7XG4gICAgdGhpcy4jc2Vzc2lvbiA9IHNlc3Npb247XG4gICAgdGhpcy4jcHJlZml4ID0gYCR7UFJFU0VUX1NUQVRFX0FUVFJfUFJFRklYfSR7cHJlc2V0SWR9L2A7XG4gIH1cblxuICAjYXR0ck9mKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy4jcHJlZml4fSR7a2V5fWA7XG4gIH1cblxuICBnZXQ8SyBleHRlbmRzIGtleW9mIFQ+KGtleTogSyk6IFRbS10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGF0dHIgPSB0aGlzLiNhdHRyT2Yoa2V5IGFzIHN0cmluZyk7XG4gICAgaWYgKCF0aGlzLiNzZXNzaW9uLmNvbnRhaW5zKFBSRVNFVF9TVEFURV9FTlRJVFksIGF0dHIpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLiNzZXNzaW9uLmdldChQUkVTRVRfU1RBVEVfRU5USVRZLCBhdHRyKSBhcyBUW0tdO1xuICB9XG5cbiAgc2V0PEsgZXh0ZW5kcyBrZXlvZiBUPihrZXk6IEssIHZhbHVlOiBUW0tdKTogdm9pZCB7XG4gICAgLy8gVGhlIHJldGUgc2Vzc2lvbiB2YWxpZGF0ZXMgdGhhdCBgdmFsdWVgIGlzIGEgbGVnYWwgRmFjdFZhbHVlXG4gICAgLy8gKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsKS4gUGFzc2luZyBvYmplY3RzIGhlcmUgd2lsbFxuICAgIC8vIHRocm93IOKAlCBhIGRlbGliZXJhdGUgY29uc3RyYWludCB0byBrZWVwIGZhY3RzIHNlcmlhbGl6YXRpb24tc2FmZS5cbiAgICB0aGlzLiNzZXNzaW9uLmluc2VydChcbiAgICAgIFBSRVNFVF9TVEFURV9FTlRJVFksXG4gICAgICB0aGlzLiNhdHRyT2Yoa2V5IGFzIHN0cmluZyksXG4gICAgICB2YWx1ZSBhcyB1bmtub3duIGFzIGltcG9ydChcIkBwYXJhdHlwZS9yZXRlXCIpLkZhY3RWYWx1ZSxcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlPEsgZXh0ZW5kcyBrZXlvZiBUPihrZXk6IEspOiBib29sZWFuIHtcbiAgICBjb25zdCBhdHRyID0gdGhpcy4jYXR0ck9mKGtleSBhcyBzdHJpbmcpO1xuICAgIGlmICghdGhpcy4jc2Vzc2lvbi5jb250YWlucyhQUkVTRVRfU1RBVEVfRU5USVRZLCBhdHRyKSkgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMuI3Nlc3Npb24ucmV0cmFjdChQUkVTRVRfU1RBVEVfRU5USVRZLCBhdHRyKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGhhczxLIGV4dGVuZHMga2V5b2YgVD4oa2V5OiBLKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI3Nlc3Npb24uY29udGFpbnMoUFJFU0VUX1NUQVRFX0VOVElUWSwgdGhpcy4jYXR0ck9mKGtleSBhcyBzdHJpbmcpKTtcbiAgfVxuXG4gIGFsbCgpOiBQYXJ0aWFsPFQ+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgZm9yIChjb25zdCBmIG9mIHRoaXMuI3Nlc3Npb24uYWxsRmFjdHMoKSkge1xuICAgICAgaWYgKChmLmlkIGFzIG51bWJlcikgIT09IChQUkVTRVRfU1RBVEVfRU5USVRZIGFzIG51bWJlcikpIGNvbnRpbnVlO1xuICAgICAgaWYgKCFmLmF0dHIuc3RhcnRzV2l0aCh0aGlzLiNwcmVmaXgpKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGtleSA9IGYuYXR0ci5zbGljZSh0aGlzLiNwcmVmaXgubGVuZ3RoKTtcbiAgICAgIHJlc3VsdFtrZXldID0gZi52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdCBhcyBQYXJ0aWFsPFQ+O1xuICB9XG59XG5cbi8qKlxuICogT3B0aW9ucyBiYWcgZm9yIHRoZSBgQ2hlc3NFbmdpbmVgIGNvbnN0cnVjdG9yLlxuICpcbiAqIEFsbCBmaWVsZHMgb3B0aW9uYWwuIE9taXR0ZWQgZmllbGRzIHVzZSBhIHNlbnNpYmxlIGRlZmF1bHQ6XG4gKiAgIC0gYGFjdGl2ZVByZXNldHNgIOKGkiBhIGZyZXNoIGVtcHR5IEFjdGl2ZVByZXNldFNldCAobm8gcHJlc2V0cykuXG4gKiAgIC0gYGxheW91dGAg4oaSIGBDTEFTU0lDX0xBWU9VVGAgKHN0YW5kYXJkIEZJREUgc3RhcnRpbmcgcG9zaXRpb24pLlxuICpcbiAqIFBhc3NpbmcgYSBgbGF5b3V0YCBpcyBob3cgY2FsbGVycyBzdGFydCBmcm9tIGEgbm9uLUZJREUgcG9zaXRpb25cbiAqIChEdW5zYW55LCBNb25zdGVyLCBIb3JkZSwgY3VzdG9tIGVkaXRvciBvdXRwdXQsIGV0Yy4pLiBUaGUgZW5naW5lXG4gKiBhcHBsaWVzIHRoZSBsYXlvdXQgRklSU1QsIHRoZW4gYWN0aXZhdGVzIHByZXNldHMsIHNvIGV2ZXJ5XG4gKiBwcmVzZXQncyBgb25BY3RpdmF0ZWAgc2NhbnMgdGhlIGxheW91dCdzIHBpZWNlcyDigJQgbm8gcGVyLWxheW91dFxuICogc3BlY2lhbC1jYXNpbmcgaW5zaWRlIHByZXNldHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW5naW5lT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGFjdGl2ZVByZXNldHM/OiBBY3RpdmVQcmVzZXRTZXQ7XG4gIHJlYWRvbmx5IGxheW91dD86IFN0YXJ0aW5nTGF5b3V0O1xufVxuXG5leHBvcnQgY2xhc3MgQ2hlc3NFbmdpbmUge1xuICBwdWJsaWMgcmVhZG9ubHkgc2Vzc2lvbjogU2Vzc2lvbjtcbiAgLyoqXG4gICAqIFBlci1lbmdpbmUgcHJlc2V0IGFjdGl2YXRpb24uIEV2ZXJ5IGVuZ2luZSBvd25zIGl0cyBvd24gc2V0IHNvIHR3b1xuICAgKiBjb25jdXJyZW50IGdhbWVzIChtb3N0IGltcG9ydGFudGx5OiB0aGUgYXV0aG9yaXRhdGl2ZSBzZXJ2ZXIgc2Vzc2lvblxuICAgKiBhbmQgYSBjbGllbnQncyBwcmVkaWN0ZWQgY2xvbmUpIGNhbiBob2xkIGRpZmZlcmVudCBydWxlIHNldHMgd2l0aG91dFxuICAgKiBhIHNoYXJlZC1tb2R1bGUgZGFuY2UuXG4gICAqXG4gICAqIE11dGFibGUgYnkgZGVzaWduIOKAlCBVSXMgYW5kIHNlcnZlcnMgcmVwbGFjZSBpdHMgY29udGVudHMgdmlhXG4gICAqIGAucmVwbGFjZUFsbCgpYC4gVGhlIGVuZ2luZSByZWFkcyBpdCBmcmVzaCBvbiBldmVyeSBjYWxsIHRvXG4gICAqIGBnZXRBbGxMZWdhbE1vdmVzKClgIHNvIG1pZC1nYW1lIHRvZ2dsZXMgdGFrZSBlZmZlY3Qgb24gdGhlIG5leHRcbiAgICogbW92ZSBjYWxjdWxhdGlvbiB3aXRoIG5vIHJlc2V0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFjdGl2ZVByZXNldHM6IEFjdGl2ZVByZXNldFNldDtcblxuICAvKipcbiAgICogQ2hyb25vbG9naWNhbCBsb2cgb2YgZXZlcnkgc3VjY2Vzc2Z1bCBhcHBseU1vdmUuIENhbGxlcnMgY29uc3VtZVxuICAgKiB0aGlzIHJlYWQtb25seSBmb3IgbW92ZS1oaXN0b3J5IFVJcywgUEdOIGV4cG9ydCwgYW5hbHlzaXMuIFdyaXRpbmdcbiAgICogdG8gaXQgaXMgYSBwcml2YXRlIGNvbmNlcm4gb2YgYXBwbHlNb3ZlLlxuICAgKlxuICAgKiBVbmJvdW5kZWQg4oCUIGdhbWVzIGFyZSBzaG9ydC1saXZlZCBlbm91Z2ggdGhhdCB3ZSBkb24ndCBuZWVkIGFcbiAgICogcmluZyBidWZmZXIuIElmIHRoYXQgZXZlciBjaGFuZ2VzLCBhZGQgYSBgbWF4TG9nU2l6ZWAgb3B0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgI21vdmVMb2c6IE1vdmVSZWNvcmRbXSA9IFtdO1xuXG4gIC8qKiBSZWFkLW9ubHkgdmlldyBvZiB0aGUgbW92ZSBsb2cuICovXG4gIGdldCBtb3ZlTG9nKCk6IFJlYWRvbmx5QXJyYXk8TW92ZVJlY29yZD4ge1xuICAgIHJldHVybiB0aGlzLiNtb3ZlTG9nO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdGl2ZSB2aXN1YWwtZWZmZWN0IHN1YnNjcmliZXJzLiBQcmVzZXRzIGNhbGwgYGVuZ2luZS5lbWl0RWZmZWN0YFxuICAgKiB0byBwdXNoIGVmZmVjdHM7IFVJIGxheWVycyBjYWxsIGBzdWJzY3JpYmVFZmZlY3RzYCB0byBsaXN0ZW4uXG4gICAqXG4gICAqIFVzaW5nIGEgU2V0IChub3QgYW4gQXJyYXkpIHNvIHVuc3Vic2NyaWJlIGlzIE8oMSkgYW5kIGluc2VydGlvblxuICAgKiBvcmRlciBkb2Vzbid0IG1hdHRlciAoZWZmZWN0cyBhcmUgZmlyZS1hbmQtZm9yZ2V0IOKAlCB3ZSBpdGVyYXRlXG4gICAqIHRoZSBmdWxsIHNldCBvbiBldmVyeSBlbWl0KS5cbiAgICovXG4gIHJlYWRvbmx5ICNlZmZlY3RIYW5kbGVycyA9IG5ldyBTZXQ8VmlzdWFsRWZmZWN0SGFuZGxlcj4oKTtcblxuICAvKipcbiAgICogRW1pdCBhIHZpc3VhbCBlZmZlY3QgdG8gYWxsIHN1YnNjcmliZXJzLiBGaXJlLWFuZC1mb3JnZXQg4oCUXG4gICAqIGhhbmRsZXJzIHRoYXQgdGhyb3cgYXJlIGlzb2xhdGVkIChjYXVnaHQpIHNvIG9uZSBiYWQgc3Vic2NyaWJlclxuICAgKiBkb2Vzbid0IGJyZWFrIG90aGVycy5cbiAgICpcbiAgICogU2FmZSB0byBjYWxsIGZyb20gaW5zaWRlIGFueSBwcmVzZXQgaG9vay4gVGhlIGVuZ2luZSBkb2VzIE5PVFxuICAgKiBwZXJzaXN0IGVmZmVjdHM7IHRoZXkncmUgcHVyZSBVSSBzaWduYWxzLiBJZiBubyBzdWJzY3JpYmVycyBhcmVcbiAgICogYXR0YWNoZWQsIHRoZSBjYWxsIGlzIGVzc2VudGlhbGx5IGEgbm8tb3AuXG4gICAqL1xuICBlbWl0RWZmZWN0KGVmZmVjdDogVmlzdWFsRWZmZWN0KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHRoaXMuI2VmZmVjdEhhbmRsZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBoYW5kbGVyKGVmZmVjdCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gRWZmZWN0IGhhbmRsZXJzIGFyZSBVSS1zaWRlIGFuZCBzaG91bGRuJ3QgdGFuayBnYW1lcGxheS5cbiAgICAgICAgLy8gTG9nIHRvIGNvbnNvbGUgc28gZGV2LW1vZGUgc3VyZmFjZXMgdGhlIHByb2JsZW0gd2l0aG91dFxuICAgICAgICAvLyB0aHJvd2luZy5cbiAgICAgICAgY29uc29sZS5lcnJvcihcIlZpc3VhbEVmZmVjdCBoYW5kbGVyIHRocmV3OlwiLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIHN1YnNjcmliZXIgZm9yIHZpc3VhbCBlZmZlY3RzLiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdFxuICAgKiByZW1vdmVzIHRoZSBzdWJzY3JpcHRpb24uIFR5cGljYWxseSBjYWxsZWQgZnJvbSBSZWFjdCBgdXNlRWZmZWN0YFxuICAgKiBvbiBjb21wb25lbnQgbW91bnQsIGFuZCB0aGUgcmV0dXJuIGlzIHJldHVybmVkIGFzIHRoZSBjbGVhbnVwLlxuICAgKlxuICAgKiBIYW5kbGVycyBhcmUgY2FsbGVkIHN5bmNocm9ub3VzbHkgZnJvbSBgZW1pdEVmZmVjdGAuIEZvciBSZWFjdFxuICAgKiBzdWJzY3JpYmVycywgdGhlIGhhbmRsZXIgc2hvdWxkIHNjaGVkdWxlIGEgc3RhdGUgdXBkYXRlIHJhdGhlclxuICAgKiB0aGFuIHJlbmRlciBpbmxpbmUg4oCUIHVzZSBgdXNlU3luY0V4dGVybmFsU3RvcmVgIG9yIGVxdWl2YWxlbnQuXG4gICAqL1xuICBzdWJzY3JpYmVFZmZlY3RzKGhhbmRsZXI6IFZpc3VhbEVmZmVjdEhhbmRsZXIpOiBVbnN1YnNjcmliZSB7XG4gICAgdGhpcy4jZWZmZWN0SGFuZGxlcnMuYWRkKGhhbmRsZXIpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB0aGlzLiNlZmZlY3RIYW5kbGVycy5kZWxldGUoaGFuZGxlcik7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgZW5naW5lLlxuICAgKlxuICAgKiBUd28gY2FsbGluZyBjb252ZW50aW9ucyBhcmUgc3VwcG9ydGVkOlxuICAgKlxuICAgKiAgIDEuIExlZ2FjeSAobm8gYXJnLCBvciBgYWN0aXZlUHJlc2V0c2Agb25seSk6XG4gICAqICAgICAgICBgbmV3IENoZXNzRW5naW5lKClgXG4gICAqICAgICAgICBgbmV3IENoZXNzRW5naW5lKGFjdGl2ZVByZXNldHMpYFxuICAgKlxuICAgKiAgIDIuIE9wdGlvbnMgYmFnIChwcmVmZXJyZWQgZm9yIG5ldyBjb2RlKTpcbiAgICogICAgICAgIGBuZXcgQ2hlc3NFbmdpbmUoeyBhY3RpdmVQcmVzZXRzLCBsYXlvdXQgfSlgXG4gICAqICAgICAgICBgbmV3IENoZXNzRW5naW5lKHsgbGF5b3V0OiBFTVBUWV9MQVlPVVQgfSlgXG4gICAqXG4gICAqIFRoZSBvcHRpb25zIGJhZyBpcyBob3cgbmV3IGNhbGxlcnMgc3BlY2lmeSBhIHN0YXJ0aW5nIGxheW91dFxuICAgKiBvdGhlciB0aGFuIEZJREUuIFdoZW4gYGxheW91dGAgaXMgb21pdHRlZCwgZGVmYXVsdHMgdG9cbiAgICogYENMQVNTSUNfTEFZT1VUYCAodGhlIEZJREUgc3RhcnRpbmcgcG9zaXRpb24pLCB3aGljaCBrZWVwcyBldmVyeVxuICAgKiBwcmUtbGF5b3V0cyBjYWxsIHNpdGUgd29ya2luZyB1bmNoYW5nZWQuXG4gICAqXG4gICAqIGBhY3RpdmVQcmVzZXRzYCBpcyBhcHBsaWVkIEFGVEVSIHRoZSBsYXlvdXQsIHNvIGV2ZXJ5IHByZXNldCdzXG4gICAqIGBvbkFjdGl2YXRlYCBob29rIHNlZXMgdGhlIGluaXRpYWwgYm9hcmQgc3RhdGUg4oCUIHBpZWNlLWhwIHNlZWRzXG4gICAqIGBIcGAgb24gZXZlcnkgcGllY2UgaW4gdGhlIGxheW91dCAoRklERSwgRHVuc2FueSwgSG9yZGUsIOKApikgd2l0aFxuICAgKiBubyBwZXItbGF5b3V0IHBsdW1iaW5nLlxuICAgKi9cbiAgY29uc3RydWN0b3IoYWN0aXZlUHJlc2V0cz86IEFjdGl2ZVByZXNldFNldCk7XG4gIGNvbnN0cnVjdG9yKG9wdHM6IEVuZ2luZU9wdGlvbnMpO1xuICBjb25zdHJ1Y3Rvcihhcmc/OiBBY3RpdmVQcmVzZXRTZXQgfCBFbmdpbmVPcHRpb25zKSB7XG4gICAgdGhpcy5zZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG5cbiAgICAvLyBOb3JtYWxpemUgdGhlIGFyZ3VtZW50OiBBY3RpdmVQcmVzZXRTZXQgc3RheXMgYXMtaXMgKGxlZ2FjeVxuICAgIC8vIGZvcm0pOyBhbiBvcHRpb25zIGJhZyBkZXN0cnVjdHVyZXMuIFdlIGRldGVjdCBieSBjaGVja2luZyBmb3JcbiAgICAvLyBgcmVwbGFjZUFsbGAg4oCUIGFuIGludGVybmFsIEFjdGl2ZVByZXNldFNldCBtZXRob2QgdGhhdCBpc24ndFxuICAgIC8vIG9uIHBsYWluIG9wdGlvbiBiYWdzLlxuICAgIGNvbnN0IGlzTGVnYWN5UHJlc2V0QXJnID1cbiAgICAgIGFyZyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhcmcgIT09IG51bGwgJiZcbiAgICAgIHR5cGVvZiAoYXJnIGFzIEFjdGl2ZVByZXNldFNldCkucmVwbGFjZUFsbCA9PT0gXCJmdW5jdGlvblwiO1xuICAgIGNvbnN0IG9wdHM6IEVuZ2luZU9wdGlvbnMgPSBpc0xlZ2FjeVByZXNldEFyZ1xuICAgICAgPyB7IGFjdGl2ZVByZXNldHM6IGFyZyBhcyBBY3RpdmVQcmVzZXRTZXQgfVxuICAgICAgOiAoKGFyZyBhcyBFbmdpbmVPcHRpb25zIHwgdW5kZWZpbmVkKSA/PyB7fSk7XG5cbiAgICBjb25zdCBsYXlvdXQgPSBvcHRzLmxheW91dCA/PyBDTEFTU0lDX0xBWU9VVDtcbiAgICBhcHBseUxheW91dCh0aGlzLnNlc3Npb24sIGxheW91dCk7XG4gICAgcmVjb3JkUG9zaXRpb24odGhpcy5zZXNzaW9uKTtcbiAgICB0aGlzLmFjdGl2ZVByZXNldHMgPSBvcHRzLmFjdGl2ZVByZXNldHMgPz8gbmV3IEFjdGl2ZVByZXNldFNldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmdWxsIHNldCBvZiBwaWVjZSBhdHRyaWJ1dGVzIHRoZSBlbmdpbmUgc2hvdWxkIHRyZWF0IGFzXG4gICAqIFwicGVyLXBpZWNlIHN0YXRlXCIgZm9yIHRoaXMgZ2FtZSwgY29tYmluaW5nIEZJREUncyBjb3JlIGF0dHJzXG4gICAqIHdpdGggYW55IHByZXNldC1kZWNsYXJlZCBhZGRpdGlvbnMuXG4gICAqXG4gICAqIFVzZWQgYnkgdGhlIGRhbWFnZSBwaXBlbGluZSdzIGRlZmF1bHQtZGVhdGggcGF0aCwgcGllY2UgcmV0cmFjdFxuICAgKiBoZWxwZXJzIGluc2lkZSBwcmVzZXRzIChxdWVlbi1zcGxpdHMgZmlzc2lvbmluZyB0aGUgcXVlZW4sXG4gICAqIGV4cGxvc2l2ZS1yb29rIGJsYXN0IGZhbGxiYWNrKSwgYW5kIGFueSBmdXR1cmUgc2F2ZS1zdGF0ZVxuICAgKiBzZXJpYWxpemF0aW9uLiBUaGlzIGlzIHRoZSBDQU5PTklDQUwgYW5zd2VyIHRvIFwid2hhdCBmYWN0c1xuICAgKiByZXByZXNlbnQgYSBwaWVjZS5cIlxuICAgKlxuICAgKiBDb21wdXRlZCBvbiBldmVyeSByZWFkIGJlY2F1c2UgdGhlIGFjdGl2ZSBwcmVzZXQgc2V0IGlzIG11dGFibGU7XG4gICAqIHRoZSBsaXN0IGlzIHRpbnkgKDwgMTAgZW50cmllcyBpbiBwcmFjdGljZSksIHNvIHdlIGRvbid0IGNhY2hlLlxuICAgKiBJZiBwZXJmIGJlY29tZXMgYSBjb25jZXJuLCBpbnZhbGlkYXRlIGEgY2FjaGUgaW5cbiAgICogYHNldEFjdGl2ZVByZXNldHNgIC8gYEFjdGl2ZVByZXNldFNldC5yZXBsYWNlQWxsYC5cbiAgICovXG4gIGdldCBlZmZlY3RpdmVQaWVjZUF0dHJzKCk6IHJlYWRvbmx5IENoZXNzQXR0cktleVtdIHtcbiAgICBjb25zdCBhdHRycyA9IG5ldyBTZXQ8Q2hlc3NBdHRyS2V5PihDT1JFX1BJRUNFX0FUVFJTKTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuYWN0aXZlUHJlc2V0cy5saXN0KCkpIHtcbiAgICAgIGNvbnN0IGRlZiA9IFBSRVNFVF9SRUdJU1RSWS5nZXQoZW50cnkuaWQpO1xuICAgICAgaWYgKCFkZWY/LnBpZWNlQXR0cmlidXRlcykgY29udGludWU7XG4gICAgICBmb3IgKGNvbnN0IGEgb2YgZGVmLnBpZWNlQXR0cmlidXRlcykgYXR0cnMuYWRkKGEpO1xuICAgIH1cbiAgICByZXR1cm4gWy4uLmF0dHJzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUeXBlZCwgcGVyLXByZXNldCwgcGVyLWVuZ2luZSBzdGF0ZSBiYWcuXG4gICAqXG4gICAqIFJldHVybnMgYW4gYWNjZXNzb3Igc2NvcGVkIHRvIGBwcmVzZXRJZGAgdGhhdCByZWFkcy93cml0ZXMgZmFjdHNcbiAgICogb24gdGhlIHJlc2VydmVkIGBQUkVTRVRfU1RBVEVfRU5USVRZYC4gQXR0cmlidXRlIGtleXMgYXJlXG4gICAqIG5hbWVzcGFjZWQgYXMgYF9fcHJlc2V0X18vJHtwcmVzZXRJZH0vJHtrZXl9YCB1bmRlciB0aGUgaG9vZCBzb1xuICAgKiB0d28gcHJlc2V0cyBjYW4gbmV2ZXIgY29sbGlkZS5cbiAgICpcbiAgICogQmVjYXVzZSBzdGF0ZSBpcyBiYWNrZWQgYnkgc2Vzc2lvbiBmYWN0cyBpdDpcbiAgICogICAtIHNlcmlhbGl6ZXMgYXV0b21hdGljYWxseSB3aXRoIHRoZSByZXN0IG9mIHNhdmUtc3RhdGUgKG5vIGV4dHJhXG4gICAqICAgICBwbHVtYmluZyDigJQgYHNlc3Npb24uYWxsRmFjdHMoKWAgYWxyZWFkeSBpbmNsdWRlcyBpdClcbiAgICogICAtIGlzIGVuZ2luZS1zY29wZWQsIHNvIHR3byBjb25jdXJyZW50IGdhbWVzIChzZXJ2ZXItc2lkZSkgaG9sZFxuICAgKiAgICAgaW5kZXBlbmRlbnQgc3RhdGUgdW5kZXIgdGhlIHNhbWUgcHJlc2V0IGlkIOKAlCBubyBtb2R1bGUtbGV2ZWxcbiAgICogICAgIGdsb2JhbHNcbiAgICogICAtIGlzIGNsZWFyZWQgd2hlbiB0aGUgcHJlc2V0IGRlYWN0aXZhdGVzIChzZWVcbiAgICogICAgIGBjbGVhclByZXNldFN0YXRlYCBjYWxsZWQgZnJvbSBgc2V0QWN0aXZlUHJlc2V0c2AgL1xuICAgKiAgICAgYHRpY2tBZnRlck1vdmVgKVxuICAgKlxuICAgKiBUaGUgdHlwZSBwYXJhbWV0ZXIgaXMgdHJ1c3RlZCBmb3IgY29udmVuaWVuY2Ug4oCUIGBzZXQoXCJ4XCIsIDUpYFxuICAgKiBkb2Vzbid0IHZlcmlmeSB0aGF0IGB4YCBpcyBgbnVtYmVyYCBpbiBgVGAuIFVzZSBzcGFyaW5nbHkgb3Igd3JhcFxuICAgKiBpbiBhIGZhY3RvcnkgZnVuY3Rpb24gcGVyIHByZXNldCB0aGF0IGVuZm9yY2VzIGl0cyBvd24gc2hhcGUuXG4gICAqL1xuICBwcmVzZXRTdGF0ZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgcHJlc2V0SWQ6IHN0cmluZyxcbiAgKTogUHJlc2V0U3RhdGU8VD4ge1xuICAgIHJldHVybiBuZXcgUHJlc2V0U3RhdGVJbXBsPFQ+KHRoaXMuc2Vzc2lvbiwgcHJlc2V0SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJhY3QgZXZlcnkgcHJlc2V0LXN0YXRlIGZhY3Qgb3duZWQgYnkgYHByZXNldElkYC4gQ2FsbGVkIGZyb21cbiAgICogYHNldEFjdGl2ZVByZXNldHNgIGFuZCBgdGlja0FmdGVyTW92ZWAgd2hlbiBhIHByZXNldCBkZWFjdGl2YXRlcyxcbiAgICogc28gc3RhbGUgc3RhdGUgZG9lc24ndCBsZWFrIGFjcm9zcyBhY3RpdmF0aW9uIGN5Y2xlcy5cbiAgICovXG4gIHByaXZhdGUgY2xlYXJQcmVzZXRTdGF0ZShwcmVzZXRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcHJlZml4ID0gYCR7UFJFU0VUX1NUQVRFX0FUVFJfUFJFRklYfSR7cHJlc2V0SWR9L2A7XG4gICAgY29uc3QgdG9SZXRyYWN0ID0gdGhpcy5zZXNzaW9uXG4gICAgICAuYWxsRmFjdHMoKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKGYpID0+XG4gICAgICAgICAgKGYuaWQgYXMgbnVtYmVyKSA9PT0gKFBSRVNFVF9TVEFURV9FTlRJVFkgYXMgbnVtYmVyKSAmJlxuICAgICAgICAgIGYuYXR0ci5zdGFydHNXaXRoKHByZWZpeCksXG4gICAgICApXG4gICAgICAubWFwKChmKSA9PiBmLmF0dHIpO1xuICAgIGZvciAoY29uc3QgYXR0ciBvZiB0b1JldHJhY3QpIHtcbiAgICAgIHRoaXMuc2Vzc2lvbi5yZXRyYWN0KFBSRVNFVF9TVEFURV9FTlRJVFksIGF0dHIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIHRoZSBhY3RpdmUgcHJlc2V0IHNldCBhbmQgZmlyZSBsaWZlY3ljbGUgaG9va3Mgb24gdHJhbnNpdGlvbnMuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIE9OTFkgcHVibGljIGVudHJ5IHBvaW50IHRoYXQgcm91dGVzIHRocm91Z2ggcHJlc2V0XG4gICAqIGBvbkFjdGl2YXRlYCAvIGBvbkRlYWN0aXZhdGVgIGhvb2tzIOKAlCBkaXJlY3QgbXV0YXRpb24gb2ZcbiAgICogYGFjdGl2ZVByZXNldHNgICh2aWEgYC5yZXBsYWNlQWxsYCkgaXMgc3RpbGwgYWxsb3dlZCBmb3IgdGVzdHMgYnV0XG4gICAqIGJ5cGFzc2VzIHRoZSBob29rcy5cbiAgICpcbiAgICogVHJhbnNpdGlvbiBvcmRlcmluZywgYnkgZGVzaWduOlxuICAgKiAgIDEuIFNuYXBzaG90IHRoZSBvbGQgaWQgc2V0LlxuICAgKiAgIDIuIFZhbGlkYXRlICsgYXBwbHkgdGhlIG5ldyBzZXQgdmlhIGBBY3RpdmVQcmVzZXRTZXQucmVwbGFjZUFsbGAuXG4gICAqICAgICAgSWYgdmFsaWRhdGlvbiB0aHJvd3MsIG5vIGhvb2tzIGZpcmUgYW5kIHRoZSBvbGQgc2V0IGlzIGludGFjdC5cbiAgICogICAzLiBGaXJlIGBvbkRlYWN0aXZhdGVgIGZvciBpZHMgaW4gb2xkLWJ1dC1ub3QtbmV3LlxuICAgKiAgIDQuIEZpcmUgYG9uQWN0aXZhdGVgIGZvciBpZHMgaW4gbmV3LWJ1dC1ub3Qtb2xkLlxuICAgKlxuICAgKiBTY29wZSBvciB0dXJucy1yZW1haW5pbmcgY2hhbmdlcyBvbiBhbiBpZCBwcmVzZW50IGluIGJvdGggc2V0cyBkb1xuICAgKiBOT1QgcmUtZmlyZSBhbnkgaG9vayDigJQgdGhlIHByZXNldCBpcyBjb25zaWRlcmVkIFwiY29udGludW91c2x5XG4gICAqIGFjdGl2ZVwiIGFjcm9zcyB0aGUgdHJhbnNpdGlvbi5cbiAgICpcbiAgICogRGVhY3RpdmF0ZS1iZWZvcmUtYWN0aXZhdGUgaXMgZGVsaWJlcmF0ZTogaXQgbGV0cyBhIHByZXNldCB0ZWFyXG4gICAqIGRvd24gc3RhdGUgY2xlYW5seSBiZWZvcmUgdGhlIGluY29taW5nIHByZXNldCByZWFkcyB0aGUgYm9hcmQuXG4gICAqIE9yZGVyaW5nIHdpdGhpbiBlYWNoIHBoYXNlIGZvbGxvd3MgdGhlIGlucHV0IGxpc3QncyBuYXR1cmFsIG9yZGVyLlxuICAgKi9cbiAgc2V0QWN0aXZlUHJlc2V0cyhyZXF1ZXN0czogcmVhZG9ubHkgQWN0aXZhdGlvblJlcXVlc3RbXSk6IHZvaWQge1xuICAgIGNvbnN0IG9sZElkcyA9IG5ldyBTZXQodGhpcy5hY3RpdmVQcmVzZXRzLmxpc3QoKS5tYXAoKGUpID0+IGUuaWQpKTtcbiAgICB0aGlzLmFjdGl2ZVByZXNldHMucmVwbGFjZUFsbChyZXF1ZXN0cyk7XG4gICAgY29uc3QgbmV3SWRzID0gbmV3IFNldChyZXF1ZXN0cy5tYXAoKHIpID0+IHIuaWQpKTtcblxuICAgIGNvbnN0IGN0eDogTGlmZWN5Y2xlQ29udGV4dCA9IHsgZW5naW5lOiB0aGlzIH07XG4gICAgZm9yIChjb25zdCBpZCBvZiBvbGRJZHMpIHtcbiAgICAgIGlmIChuZXdJZHMuaGFzKGlkKSkgY29udGludWU7XG4gICAgICBjb25zdCBkZWYgPSBQUkVTRVRfUkVHSVNUUlkuZ2V0KGlkKTtcbiAgICAgIGRlZj8ub25EZWFjdGl2YXRlPy4oY3R4KTtcbiAgICAgIC8vIENsZWFyIHByZXNldC1zdGF0ZSBBRlRFUiBvbkRlYWN0aXZhdGUgc28gdGhlIGhvb2sgY2FuIHJlYWRcbiAgICAgIC8vIChvciBleHBsaWNpdGx5IHByZXNlcnZlKSBpdHMgb3duIHN0YXRlIGR1cmluZyB0ZWFyZG93bi5cbiAgICAgIHRoaXMuY2xlYXJQcmVzZXRTdGF0ZShpZCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcmVxIG9mIHJlcXVlc3RzKSB7XG4gICAgICBpZiAob2xkSWRzLmhhcyhyZXEuaWQpKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGRlZiA9IFBSRVNFVF9SRUdJU1RSWS5nZXQocmVxLmlkKTtcbiAgICAgIGRlZj8ub25BY3RpdmF0ZT8uKGN0eCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgYSBwcmVzZXQtaW50ZXJjZXB0ZWQgY2FwdHVyZS4gRGlzcGF0Y2hlcyBgb25CZWZvcmVDYXB0dXJlYFxuICAgKiBvbiBldmVyeSBjdXJyZW50bHktYWN0aXZlIHByZXNldCBmb3IgdGhlIG1vdmVyJ3MgY29sb3I7IGlmIGFueVxuICAgKiBwcmVzZXQgcmV0dXJucyBgeyBjb25zdW1lOiB0cnVlIH1gIHRoZSBkZWZhdWx0IGNhcHR1cmUgaXMgc2tpcHBlZFxuICAgKiBhbmQgd2UgcmV0dXJuIGB0cnVlYC4gT3RoZXJ3aXNlIHRoZSBjYWxsZXIgc2hvdWxkIHByb2NlZWQgd2l0aCB0aGVcbiAgICogc3RhbmRhcmQgY2FwdHVyZSBwYXRoLlxuICAgKlxuICAgKiBgY29sb3JgIGlzIHRoZSBjb2xvciBvZiB0aGUgY2FwdHVyaW5nIHBpZWNlIChpLmUuIHdob3NlIHR1cm4gaXQgaXMpLlxuICAgKi9cbiAgcHJpdmF0ZSB0cnlJbnRlcmNlcHRDYXB0dXJlKFxuICAgIGF0dGFja2VyOiBFbnRpdHlJZCxcbiAgICB0YXJnZXQ6IEVudGl0eUlkLFxuICAgIGNvbG9yOiBQaWVjZUNvbG9yLFxuICApOiBib29sZWFuIHtcbiAgICBsZXQgY29uc3VtZWQgPSBmYWxzZTtcbiAgICBjb25zdCBjdHg6IENhcHR1cmVIb29rQ29udGV4dCA9IHtcbiAgICAgIGVuZ2luZTogdGhpcyxcbiAgICAgIGF0dGFja2VyLFxuICAgICAgdGFyZ2V0LFxuICAgICAgbW92ZXI6IGNvbG9yLFxuICAgIH07XG4gICAgZm9yIChjb25zdCBwcmVzZXQgb2YgdGhpcy5hY3RpdmVQcmVzZXRzLmdldEZvckNvbG9yKGNvbG9yKSkge1xuICAgICAgaWYgKCFwcmVzZXQub25CZWZvcmVDYXB0dXJlKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHByZXNldC5vbkJlZm9yZUNhcHR1cmUoY3R4KTtcbiAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmNvbnN1bWUgPT09IHRydWUpIGNvbnN1bWVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnN1bWVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBwaWVjZSBlbnRpdHkgb24gYHNxdWFyZWAgYW5kIGZpcmUgYG9uUGllY2VTcGF3bmAgaG9va3MuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIENBTk9OSUNBTCBzcGF3biBwYXRoLiBFdmVyeSBjb2RlIHNpdGUgdGhhdCBtYXRlcmlhbGl6ZXNcbiAgICogYSBwaWVjZSDigJQgdGhlIHF1ZWVuLXNwbGl0cyBmaXNzaW9uLCBwcm9tb3Rpb24sIGh5cG90aGV0aWNhbFxuICAgKiBzdW1tb24vcmVzdXJyZWN0IHByZXNldHMg4oCUIHNob3VsZCBnbyB0aHJvdWdoIGhlcmUgc286XG4gICAqICAgLSBgb25QaWVjZVNwYXduYCBob29rcyBnZXQgYSBjaGFuY2UgdG8gc2VlZCBwcmVzZXQtZGVjbGFyZWRcbiAgICogICAgIGF0dHJpYnV0ZXMgKEhwIGZyb20gcGllY2UtaHAsIFNoaWVsZCBmcm9tIHBpZWNlLXNoaWVsZCwg4oCmKVxuICAgKiAgICAgV0lUSE9VVCB0aG9zZSBwcmVzZXRzIGhhdmluZyB0byBpbXBsZW1lbnQgaWRlbXBvdGVudFxuICAgKiAgICAgb25BY3RpdmF0ZSBzY2Fucy5cbiAgICogICAtIGNvcmUgYXR0cnMgYXJlIGluc2VydGVkIGluIGEgY29uc2lzdGVudCBvcmRlci5cbiAgICogICAtIG5ldyBzcGF3biByZWFzb25zIGNhbiBiZSBhZGRlZCB0byB0aGUgYFBpZWNlU3Bhd25SZWFzb25gIHVuaW9uXG4gICAqICAgICB3aXRob3V0IGVkaXRpbmcgdGhpcyBmdW5jdGlvbi5cbiAgICpcbiAgICogVGhlIGluaXRpYWwgc3RhcnRpbmctcG9zaXRpb24gZ2VuZXJhdGlvbiBkb2VzIE5PVCBnbyB0aHJvdWdoIGhlcmVcbiAgICogKGl0IHByZWNlZGVzIGFueSBhY3RpdmUgcHJlc2V0cyDigJQgbm90aGluZyB0byBob29rKS4gUHJlc2V0LWF1dGhvcmVkXG4gICAqIGluaXRpYWwgcGxhY2VtZW50cyBzaG91bGQgYWN0aXZhdGUgQUZURVIgcGllY2Ugc2VlZGluZyBvciB1c2VcbiAgICogdGhpcyBmdW5jdGlvbiBleHBsaWNpdGx5IGluIHRoZWlyIGBvbkFjdGl2YXRlYC5cbiAgICovXG4gIHNwYXduUGllY2UoXG4gICAgdHlwZTogUGllY2VUeXBlLFxuICAgIGNvbG9yOiBQaWVjZUNvbG9yLFxuICAgIHNxdWFyZTogbnVtYmVyLFxuICAgIG9wdHM6IHtcbiAgICAgIHJlYWRvbmx5IHJlYXNvbj86IFBpZWNlU3Bhd25SZWFzb247XG4gICAgICByZWFkb25seSBoYXNNb3ZlZD86IGJvb2xlYW47XG4gICAgfSA9IHt9LFxuICApOiBFbnRpdHlJZCB7XG4gICAgY29uc3QgaWQgPSB0aGlzLnNlc3Npb24ubmV4dElkKCk7XG4gICAgdGhpcy5zZXNzaW9uLmluc2VydChpZCwgXCJQaWVjZVR5cGVcIiwgdHlwZSk7XG4gICAgdGhpcy5zZXNzaW9uLmluc2VydChpZCwgXCJDb2xvclwiLCBjb2xvcik7XG4gICAgdGhpcy5zZXNzaW9uLmluc2VydChpZCwgXCJQb3NpdGlvblwiLCBzcXVhcmUpO1xuICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnQoaWQsIFwiSGFzTW92ZWRcIiwgb3B0cy5oYXNNb3ZlZCA/PyBmYWxzZSk7XG5cbiAgICBjb25zdCBjdHg6IFBpZWNlU3Bhd25Db250ZXh0ID0ge1xuICAgICAgZW5naW5lOiB0aGlzLFxuICAgICAgcGllY2VJZDogaWQsXG4gICAgICB0eXBlLFxuICAgICAgY29sb3IsXG4gICAgICBzcXVhcmUsXG4gICAgICByZWFzb246IG9wdHMucmVhc29uID8/IFwic3VtbW9uXCIsXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuYWN0aXZlUHJlc2V0cy5saXN0KCkpIHtcbiAgICAgIGNvbnN0IGRlZiA9IFBSRVNFVF9SRUdJU1RSWS5nZXQoZW50cnkuaWQpO1xuICAgICAgZGVmPy5vblBpZWNlU3Bhd24/LihjdHgpO1xuICAgIH1cbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAvKipcbiAgICogRGVhbCBgYW1vdW50YCBkYW1hZ2UgdG8gYHRhcmdldGAsIHJ1bm5pbmcgaXQgdGhyb3VnaCB0aGUgcHJlc2V0XG4gICAqIGRhbWFnZSBwaXBlbGluZSBiZWZvcmUgYXBwbHlpbmcgdGhlIGRlZmF1bHQga2lsbC1vbi1kYW1hZ2UgcnVsZS5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgcHJpbWl0aXZlIHRoYXQgbGV0cyBwcmVzZXRzIGNvbXBvc2UgY2xlYW5seTpcbiAgICogICAtIFdpdGhvdXQgYW55IGRhbWFnZS1pbnRlcmNlcHRvciBwcmVzZXQgKHN0YW5kYXJkIGNoZXNzLFxuICAgKiAgICAgZXhwbG9zaXZlLXJvb2sgYWxvbmUsIGV0Yy4pLCBkYW1hZ2Ug4omlIDEgcmV0cmFjdHMgdGhlIHRhcmdldC5cbiAgICogICAtIFdpdGggYHBpZWNlLWhwYCBhY3RpdmUsIHRoZSBob29rIGRlY3JlbWVudHMgdGhlIHRhcmdldCdzIEhwXG4gICAqICAgICBmYWN0IGFuZCBvbmx5IHJldHJhY3RzIHdoZW4gSHAgd291bGQgZ28g4omkIDAuXG4gICAqXG4gICAqIENhbGxlcnMgc2hvdWxkIHVzZSB0aGlzIGluc3RlYWQgb2YgcmV0cmFjdGluZyBwaWVjZSBmYWN0cyBkaXJlY3RseVxuICAgKiB3aGVuZXZlciB0aGV5IHdhbnQgdG8gY29tcG9zZSB3aXRoIEhQL2FybW9yL3NoaWVsZC1saWtlIHByZXNldHMuXG4gICAqIFNlZSBgZXhwbG9zaXZlLXJvb2tgIChBb0UgY2FsbHMgZGVhbERhbWFnZSBvbiBldmVyeSB2aWN0aW0pIGFuZFxuICAgKiBgcG9pc29uZWQtc3F1YXJlc2AgKHRpY2sgY2FsbHMgZGVhbERhbWFnZSBvbiBldmVyeSBvY2N1cGFudCBvZiBhXG4gICAqIHBvaXNvbmVkIHNxdWFyZSkgZm9yIHRoZSBjYW5vbmljYWwgY2FsbCBzaXRlcy5cbiAgICpcbiAgICogVGhlIGZpcnN0IHByZXNldCB3aG9zZSBgb25EYW1hZ2VgIHJldHVybnMgYGNvbnN1bWU6IHRydWVgIHdpbnMg4oCUXG4gICAqIGZ1cnRoZXIgcHJlc2V0cyBhcmUgbm90IGNvbnN1bHRlZCBmb3IgdGhhdCBldmVudC4gVGhpcyBpc1xuICAgKiBkZWxpYmVyYXRlOiBIUCBpcyB0aGUgT05FIGF1dGhvcml0eSBvbiBkYW1hZ2XihpJkZWF0aDsgdHdvIGRhbWFnZVxuICAgKiBpbnRlcmNlcHRvcnMgd291bGQgcmFjZSBhbmQgcHJvZHVjZSB6b21iaWUgc3RhdGUgKHRoZSBidWcgdGhpc1xuICAgKiBwaXBlbGluZSB3YXMgZGVzaWduZWQgdG8gZWxpbWluYXRlKS5cbiAgICpcbiAgICogUmV0dXJucyBgeyBkaWVkOiB0cnVlIH1gIGlmIHRoZSB0YXJnZXQgd2FzIHJldHJhY3RlZCAoZWl0aGVyIGJ5IGFcbiAgICogaG9vayB0aGF0IGtpbGxlZCBvciBieSB0aGUgZGVmYXVsdCBwYXRoKSwgYHsgZGllZDogZmFsc2UgfWAgaWYgaXRcbiAgICogc3Vydml2ZWQgKEhQIGFic29yYmVkIGl0LCBvciBhbW91bnQgd2FzIDApLlxuICAgKi9cbiAgZGVhbERhbWFnZShcbiAgICB0YXJnZXQ6IEVudGl0eUlkLFxuICAgIGFtb3VudDogbnVtYmVyLFxuICAgIGN0eDogRGFtYWdlQ29udGV4dCxcbiAgKTogeyBkaWVkOiBib29sZWFuIH0ge1xuICAgIGlmIChhbW91bnQgPD0gMCkgcmV0dXJuIHsgZGllZDogZmFsc2UgfTtcblxuICAgIC8vIFNjb3BlLWF3YXJlIGRpc3BhdGNoOiBwcmUtcmVzb2x2ZSB0aGUgdGFyZ2V0J3MgY29sb3Igc28gd2UgY2FuXG4gICAgLy8gc2tpcCBwcmVzZXRzIHdob3NlIHNjb3BlIGRvZXNuJ3QgY292ZXIgaXQuIEEgYHNjb3BlPXdoaXRlYCBwcmVzZXRcbiAgICAvLyBvbmx5IGRhbWFnZXMvcHJvdGVjdHMgd2hpdGUgcGllY2VzOyB3aXRob3V0IHRoaXMgZmlsdGVyLCBhIHdoaXRlLVxuICAgIC8vIG9ubHkgU2hpZWxkIHByZXNldCB3b3VsZCBhYnNvcmIgZGFtYWdlIG9uIGJsYWNrIHBpZWNlcyB0b28uXG4gICAgLy8gUHJlc2V0cyB3aXRob3V0IGEgY29sb3Itc2Vuc2l0aXZlIGhvb2sgb3B0IGluIHRvIHVuaXZlcnNhbFxuICAgIC8vIGRpc3BhdGNoIGJ5IGxlYXZpbmcgc2NvcGUgYXMgXCJib3RoXCIgKHRoZSBkZWZhdWx0KS5cbiAgICBjb25zdCB0YXJnZXRDb2xvciA9IHRoaXMuc2Vzc2lvbi5nZXQodGFyZ2V0LCBcIkNvbG9yXCIpIGFzXG4gICAgICB8IFBpZWNlQ29sb3JcbiAgICAgIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGhvb2tDdHg6IERhbWFnZUhvb2tDb250ZXh0ID0ge1xuICAgICAgZW5naW5lOiB0aGlzLFxuICAgICAgdGFyZ2V0LFxuICAgICAgYW1vdW50LFxuICAgICAga2luZDogY3R4LmtpbmQsXG4gICAgICAuLi4oY3R4LmF0dGFja2VyICE9PSB1bmRlZmluZWQgPyB7IGF0dGFja2VyOiBjdHguYXR0YWNrZXIgfSA6IHt9KSxcbiAgICB9O1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5hY3RpdmVQcmVzZXRzLmxpc3QoKSkge1xuICAgICAgLy8gSWYgd2Uga25vdyB0aGUgdGFyZ2V0J3MgY29sb3IsIHJlcXVpcmUgdGhlIHByZXNldCdzIHNjb3BlIHRvXG4gICAgICAvLyBjb3ZlciB0aGF0IGNvbG9yLiBJZiB3ZSBkb24ndCAoZGVnZW5lcmF0ZSDigJQgdGFyZ2V0IGhhcyBub1xuICAgICAgLy8gQ29sb3IgZmFjdCksIGZpcmUgb24gZXZlcnkgcHJlc2V0IHJlZ2FyZGxlc3MuXG4gICAgICBpZiAoXG4gICAgICAgIHRhcmdldENvbG9yICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgZW50cnkuc2NvcGUgIT09IFwiYm90aFwiICYmXG4gICAgICAgIGVudHJ5LnNjb3BlICE9PSB0YXJnZXRDb2xvclxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgZGVmID0gUFJFU0VUX1JFR0lTVFJZLmdldChlbnRyeS5pZCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBkZWY/Lm9uRGFtYWdlPy4oaG9va0N0eCk7XG4gICAgICBpZiAocmVzdWx0Py5jb25zdW1lID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiB7IGRpZWQ6IHJlc3VsdC5kaWVkID09PSB0cnVlIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdDogYW55IGRhbWFnZSBpcyBsZXRoYWwuIFJldHJhY3QgZXZlcnkgZWZmZWN0aXZlIHBpZWNlXG4gICAgLy8gYXR0cmlidXRlIChjb3JlICsgcHJlc2V0LWRlY2xhcmVkKSBzbyBkb3duc3RyZWFtIHF1ZXJpZXMgc2VlIHRoZVxuICAgIC8vIHBpZWNlIGFzIHRydWx5IGdvbmUuXG4gICAgZm9yIChjb25zdCBhdHRyIG9mIHRoaXMuZWZmZWN0aXZlUGllY2VBdHRycykge1xuICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5jb250YWlucyh0YXJnZXQsIGF0dHIpKSB7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5yZXRyYWN0KHRhcmdldCwgYXR0cik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IGRpZWQ6IHRydWUgfTtcbiAgfVxuXG4gIGdldEN1cnJlbnRUdXJuKCk6IFBpZWNlQ29sb3Ige1xuICAgIHJldHVybiAodGhpcy5zZXNzaW9uLmdldChHQU1FX0VOVElUWSwgXCJUdXJuXCIpIGFzIFBpZWNlQ29sb3IpID8/IFwid2hpdGVcIjtcbiAgfVxuXG4gIGdldEFsbExlZ2FsTW92ZXMoKTogTGVnYWxNb3ZlW10ge1xuICAgIGNvbnN0IGNvbG9yID0gdGhpcy5nZXRDdXJyZW50VHVybigpO1xuICAgIGNvbnN0IGZhY3RzID0gdGhpcy5zZXNzaW9uLmFsbEZhY3RzKCk7XG4gICAgY29uc3QgbW92ZXM6IExlZ2FsTW92ZVtdID0gW107XG5cbiAgICBjb25zdCBwaWVjZXMgPSBmYWN0c1xuICAgICAgLmZpbHRlcihmID0+IGYuYXR0ciA9PT0gXCJDb2xvclwiICYmIGYudmFsdWUgPT09IGNvbG9yICYmIChmLmlkIGFzIG51bWJlcikgPiAwKVxuICAgICAgLm1hcChmID0+ICh7XG4gICAgICAgIGlkOiBmLmlkIGFzIEVudGl0eUlkLFxuICAgICAgICB0eXBlOiBmYWN0cy5maW5kKHQgPT4gdC5pZCA9PT0gZi5pZCAmJiB0LmF0dHIgPT09IFwiUGllY2VUeXBlXCIpXG4gICAgICAgICAgPy52YWx1ZSBhcyBQaWVjZVR5cGUsXG4gICAgICB9KSlcbiAgICAgIC5maWx0ZXIocCA9PiBwLnR5cGUgIT09IHVuZGVmaW5lZCk7XG5cbiAgICBmb3IgKGNvbnN0IHBpZWNlIG9mIHBpZWNlcykge1xuICAgICAgY29uc3QgYmFzZUdldHRlciA9IGxvb2t1cE1vdmVHZW5lcmF0b3IocGllY2UudHlwZSk7XG4gICAgICAvLyBGb2xkIHRoZSB0cmFuc2Zvcm1Nb3ZlR2VuZXJhdG9yIGNoYWluIG92ZXIgYWxsIGFjdGl2ZSBwcmVzZXRzXG4gICAgICAvLyAoc2NvcGUtZmlsdGVyZWQgZm9yIGBjb2xvcmApLiBFYWNoIHByZXNldCdzIHdyYXBwZXIgcmVjZWl2ZXMgdGhlXG4gICAgICAvLyBPVVRQVVQgb2YgdGhlIHByZXZpb3VzIOKAlCBjb21wb3NpbmcgY2xlYW5seS4gV2Ugc2VlZCB3aXRoIHRoZVxuICAgICAgLy8gdHlwZS1yZWdpc3RyeSBnZW5lcmF0b3IsIG9yIGEgZGVnZW5lcmF0ZSBlbXB0eS1tb3ZlIGdlbmVyYXRvciBpZlxuICAgICAgLy8gdGhlIHBpZWNlIHR5cGUgaXMgdW5rbm93biAoa2VlcHMgbGF0ZXIgd3JhcHBlcnMgd2VsbC1kZWZpbmVkKS5cbiAgICAgIGNvbnN0IHNjb3BlZFByZXNldHMgPSB0aGlzLmFjdGl2ZVByZXNldHMuZ2V0Rm9yQ29sb3IoY29sb3IpO1xuICAgICAgY29uc3Qgc2VlZEdldHRlcjogTW92ZUdldHRlciA9XG4gICAgICAgIGJhc2VHZXR0ZXIgPz8gKChfczogU2Vzc2lvbiwgX2lkOiBFbnRpdHlJZCkgPT4gW10gYXMgTGVnYWxNb3ZlW10pO1xuICAgICAgY29uc3QgZ2V0dGVyOiBNb3ZlR2V0dGVyID0gc2NvcGVkUHJlc2V0c1xuICAgICAgICAuZmlsdGVyKHAgPT4gcC50cmFuc2Zvcm1Nb3ZlR2VuZXJhdG9yKVxuICAgICAgICAucmVkdWNlPE1vdmVHZXR0ZXI+KFxuICAgICAgICAgIChnZW4sIHByZXNldCkgPT4gcHJlc2V0LnRyYW5zZm9ybU1vdmVHZW5lcmF0b3IhKHRoaXMsIHBpZWNlLmlkLCBnZW4pLFxuICAgICAgICAgIHNlZWRHZXR0ZXIsXG4gICAgICAgICk7XG4gICAgICAvLyBTa2lwIHBpZWNlcyB3aXRoIG5vIGtub3duIHR5cGUgQU5EIG5vIHRyYW5zZm9ybSDigJQgc2FtZSBzZW1hbnRpY3NcbiAgICAgIC8vIGFzIHRoZSBvcmlnaW5hbCBcInVua25vd24gdHlwZSDih5IgaW1tb2JpbGVcIiBndWFyZCwgYnV0IG5vdyBhXG4gICAgICAvLyB0cmFuc2Zvcm0gcHJlc2V0IGNhbiBzdGlsbCBwcm9kdWNlIG1vdmVzIGZvciBhbiBvdGhlcndpc2UgdW5rbm93blxuICAgICAgLy8gdHlwZS5cbiAgICAgIGlmICghYmFzZUdldHRlciAmJiBzY29wZWRQcmVzZXRzLmV2ZXJ5KHAgPT4gIXAudHJhbnNmb3JtTW92ZUdlbmVyYXRvcikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGxldCBwaWVjZU1vdmVzID0gZ2V0dGVyKHRoaXMuc2Vzc2lvbiwgcGllY2UuaWQpO1xuXG4gICAgICAvLyBBZGQgZW4gcGFzc2FudCBmb3IgcGF3bnNcbiAgICAgIGlmIChwaWVjZS50eXBlID09PSBcInBhd25cIikge1xuICAgICAgICBwaWVjZU1vdmVzID0gW1xuICAgICAgICAgIC4uLnBpZWNlTW92ZXMsXG4gICAgICAgICAgLi4uZ2V0RW5QYXNzYW50TW92ZXModGhpcy5zZXNzaW9uLCBwaWVjZS5pZCksXG4gICAgICAgIF07XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBjYXN0bGluZyBmb3Iga2luZ3NcbiAgICAgIGlmIChwaWVjZS50eXBlID09PSBcImtpbmdcIikge1xuICAgICAgICBjb25zdCBlbmVteUNvbG9yOiBQaWVjZUNvbG9yID0gY29sb3IgPT09IFwid2hpdGVcIiA/IFwiYmxhY2tcIiA6IFwid2hpdGVcIjtcbiAgICAgICAgY29uc3QgY2FzdGxpbmcgPSBnZXRDYXN0bGluZ01vdmVzKFxuICAgICAgICAgIHRoaXMuc2Vzc2lvbixcbiAgICAgICAgICBwaWVjZS5pZCxcbiAgICAgICAgICAocywgc3EpID0+IGlzU3F1YXJlQXR0YWNrZWQocywgc3EsIGVuZW15Q29sb3IpLFxuICAgICAgICApO1xuICAgICAgICBwaWVjZU1vdmVzID0gWy4uLnBpZWNlTW92ZXMsIC4uLmNhc3RsaW5nXTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVwbGFjZSByYXcgcHJvbW90aW9uLXJhbmsgcGF3biBtb3ZlcyB3aXRoIHByb21vdGlvbi10YWdnZWQgdmFyaWFudHNcbiAgICAgIGlmIChwaWVjZS50eXBlID09PSBcInBhd25cIikge1xuICAgICAgICBjb25zdCBwcm9tb3Rpb25zID0gZ2V0UHJvbW90aW9uTW92ZXModGhpcy5zZXNzaW9uLCBwaWVjZS5pZCk7XG4gICAgICAgIGlmIChwcm9tb3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBwcm9tb3Rpb25Ub3MgPSBuZXcgU2V0KHByb21vdGlvbnMubWFwKG0gPT4gbS50bykpO1xuICAgICAgICAgIHBpZWNlTW92ZXMgPSBwaWVjZU1vdmVzLmZpbHRlcihtID0+ICFwcm9tb3Rpb25Ub3MuaGFzKG0udG8pKTtcbiAgICAgICAgICBwaWVjZU1vdmVzID0gWy4uLnBpZWNlTW92ZXMsIC4uLnByb21vdGlvbnNdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFwcGx5IGFjdGl2ZSBwcmVzZXQgcnVsZXMgZm9yIHRoZSBjb2xvciB3aG9zZSB0dXJuIGl0IGlzLiBUaGVcbiAgICAgIC8vIHBlci1jb2xvciBmaWx0ZXIgaW1wbGVtZW50cyBgc2NvcGU9d2hpdGVgIC8gYHNjb3BlPWJsYWNrYCDigJQgYVxuICAgICAgLy8gd2hpdGUtb25seSBwcmVzZXQgbmV2ZXIgY29udHJpYnV0ZXMgbW92ZXMgd2hpbGUgYmxhY2sgaXMgb24gbW92ZS5cbiAgICAgIC8vXG4gICAgICAvLyBPcmRlciBtYXR0ZXJzIOKAlCBgZ2V0RXh0cmFNb3Zlc2AgY29udHJpYnV0ZXMgdG8gdGhlIHNldCB0aGF0XG4gICAgICAvLyBgZmlsdGVyTW92ZXNgIG9wZXJhdGVzIG9uLCBzbyBldmVyeSBhY3RpdmUgcHJlc2V0IHNlZXMgdGhlIGZ1bGxcbiAgICAgIC8vIGFnZ3JlZ2F0ZWQgc2V0IChpbmNsdWRpbmcgcHJpb3IgcHJlc2V0cycgYWRkaXRpb25zKS5cbiAgICAgIGNvbnN0IGFjdGl2ZVByZXNldHMgPSBzY29wZWRQcmVzZXRzO1xuICAgICAgZm9yIChjb25zdCBwcmVzZXQgb2YgYWN0aXZlUHJlc2V0cykge1xuICAgICAgICBpZiAocHJlc2V0LmdldEV4dHJhTW92ZXMpIHtcbiAgICAgICAgICBwaWVjZU1vdmVzID0gW1xuICAgICAgICAgICAgLi4ucGllY2VNb3ZlcyxcbiAgICAgICAgICAgIC4uLnByZXNldC5nZXRFeHRyYU1vdmVzKHRoaXMsIHBpZWNlLmlkKSxcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHByZXNldCBvZiBhY3RpdmVQcmVzZXRzKSB7XG4gICAgICAgIGlmIChwcmVzZXQuZmlsdGVyTW92ZXMpIHtcbiAgICAgICAgICBwaWVjZU1vdmVzID0gcHJlc2V0LmZpbHRlck1vdmVzKHBpZWNlTW92ZXMsIHRoaXMsIHBpZWNlLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBtb3Zlcy5wdXNoKC4uLnBpZWNlTW92ZXMpO1xuICAgIH1cblxuICAgIC8vIFNlbGYtY2hlY2sgZmlsdGVyOiBza2lwIGl0IGlmZiBhbnkgYWN0aXZlIHByZXNldCAoZm9yIHRoaXMgY29sb3IpXG4gICAgLy8gZXhwbGljaXRseSBvcHRzIG91dCB2aWEgc2hvdWxkRmlsdGVyU2VsZkNoZWNrIHJldHVybmluZyBmYWxzZS5cbiAgICAvLyBUaGlzIGlzIGhvdyBgcGllY2UtaHBgIGFsbG93cyB0aGUga2luZyB0byBzdGF5IG9uIGFuIGF0dGFja2VkXG4gICAgLy8gc3F1YXJlIOKAlCBhIFwiaGl0XCIgY29zdHMgSFAgcmF0aGVyIHRoYW4gbG9zaW5nIHRoZSBnYW1lLlxuICAgIGxldCBhcHBseUZpbHRlciA9IHRydWU7XG4gICAgY29uc3Qgc2VsZkNoZWNrQ3R4OiBTZWxmQ2hlY2tGaWx0ZXJDb250ZXh0ID0geyBlbmdpbmU6IHRoaXMsIGNvbG9yIH07XG4gICAgZm9yIChjb25zdCBwcmVzZXQgb2YgdGhpcy5hY3RpdmVQcmVzZXRzLmdldEZvckNvbG9yKGNvbG9yKSkge1xuICAgICAgaWYgKHByZXNldC5zaG91bGRGaWx0ZXJTZWxmQ2hlY2s/LihzZWxmQ2hlY2tDdHgpID09PSBmYWxzZSkge1xuICAgICAgICBhcHBseUZpbHRlciA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFwcGx5RmlsdGVyID8gZmlsdGVyU2VsZkNoZWNrTW92ZXModGhpcy5zZXNzaW9uLCBtb3ZlcywgY29sb3IpIDogbW92ZXM7XG4gIH1cblxuICBhcHBseU1vdmUobW92ZTogTGVnYWxNb3ZlLCBwcm9tb3RlVG86IFBpZWNlVHlwZSA9IFwicXVlZW5cIik6IEdhbWVSZXN1bHQge1xuICAgIGNvbnN0IGNvbG9yID0gdGhpcy5nZXRDdXJyZW50VHVybigpO1xuXG4gICAgLy8gUGhhc2UgaG9vazogZ2l2ZSBwcmVzZXRzIGEgY2hhbmNlIHRvIHZldG8gdGhlIG1vdmUuIFNjb3BlLWF3YXJlXG4gICAgLy8gKGZpcmVzIG9ubHkgZm9yIHByZXNldHMgd2hvc2Ugc2NvcGUgY292ZXJzIHRoZSBtb3ZlcikuIFdlIGRvXG4gICAgLy8gdGhpcyBCRUZPUkUgYW55IG11dGF0aW9uIHNvIGEgdmV0byBsZWF2ZXMgc3RhdGUgY2xlYW4uXG4gICAgY29uc3QgYmVmb3JlQ3R4OiBCZWZvcmVNb3ZlQ29udGV4dCA9IHtcbiAgICAgIGVuZ2luZTogdGhpcyxcbiAgICAgIG1vdmVyOiBjb2xvcixcbiAgICAgIHBpZWNlSWQ6IG1vdmUucGllY2VJZCxcbiAgICAgIGZyb206IG1vdmUuZnJvbSxcbiAgICAgIHRvOiBtb3ZlLnRvLFxuICAgICAgaXNDYXB0dXJlOiBtb3ZlLmlzQ2FwdHVyZSA9PT0gdHJ1ZSxcbiAgICB9O1xuICAgIGZvciAoY29uc3QgcHJlc2V0IG9mIHRoaXMuYWN0aXZlUHJlc2V0cy5nZXRGb3JDb2xvcihjb2xvcikpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHByZXNldC5vbkJlZm9yZU1vdmU/LihiZWZvcmVDdHgpO1xuICAgICAgaWYgKHJlc3VsdD8uY2FuY2VsID09PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBNb3ZlQ2FuY2VsbGVkRXJyb3IoXG4gICAgICAgICAgcmVzdWx0LnJlYXNvbiA/PyBgTW92ZSBjYW5jZWxsZWQgYnkgcHJlc2V0IFwiJHtwcmVzZXQuaWR9XCJgLFxuICAgICAgICAgIHByZXNldC5pZCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmYWN0cyA9IHRoaXMuc2Vzc2lvbi5hbGxGYWN0cygpO1xuICAgIGNvbnN0IG1vdmluZ1R5cGUgPSBmYWN0cy5maW5kKFxuICAgICAgZiA9PiBmLmlkID09PSBtb3ZlLnBpZWNlSWQgJiYgZi5hdHRyID09PSBcIlBpZWNlVHlwZVwiLFxuICAgICk/LnZhbHVlIGFzIFBpZWNlVHlwZTtcblxuICAgIGNvbnN0IGVwVGFyZ2V0ID0gdGhpcy5zZXNzaW9uLmdldChHQU1FX0VOVElUWSwgXCJFblBhc3NhbnRUYXJnZXRcIik7XG4gICAgY29uc3QgaXNFblBhc3NhbnQgPVxuICAgICAgbW92aW5nVHlwZSA9PT0gXCJwYXduXCIgJiZcbiAgICAgIGVwVGFyZ2V0ICE9PSBudWxsICYmXG4gICAgICBlcFRhcmdldCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBlcFRhcmdldCA9PT0gbW92ZS50bztcblxuICAgIGNvbnN0IGlzQ2FzdGxpbmcgPSAobW92ZSBhcyBDYXN0bGluZ01vdmUpLmlzQ2FzdGxpbmcgPT09IHRydWU7XG5cbiAgICAvLyBDYXB0dXJlIHByZS1tb3ZlIHN0YXRlIGZvciB0aGUgTW92ZVJlY29yZCB3ZSdsbCBsb2cgYXQgdGhlIGVuZC5cbiAgICAvLyBUYWtpbmcgdGhlIHNuYXBzaG90IE5PVyDigJQgYmVmb3JlIGFueSBtdXRhdGlvbiDigJQgaXMgdGhlIG9ubHkgd2F5XG4gICAgLy8gdG8ga25vdyB3aGF0IHdhcyBvbiB0aGUgZGVzdGluYXRpb24gc3F1YXJlLCBzaW5jZSB0aGUgY2FwdHVyZVxuICAgIC8vIHBhdGggbWF5IHJldHJhY3QgaXQgbWlkLWZ1bmN0aW9uLlxuICAgIGNvbnN0IGNhcHR1cmVkSWRGb3JMb2c6IEVudGl0eUlkIHwgbnVsbCA9IG1vdmUuaXNDYXB0dXJlXG4gICAgICA/IChpc0VuUGFzc2FudFxuICAgICAgICAgID8gdGhpcy5nZXRQaWVjZUF0KFxuICAgICAgICAgICAgICBjb2xvciA9PT0gXCJ3aGl0ZVwiXG4gICAgICAgICAgICAgICAgPyAoKG1vdmUudG8gLSA4KSBhcyBudW1iZXIpXG4gICAgICAgICAgICAgICAgOiAoKG1vdmUudG8gKyA4KSBhcyBudW1iZXIpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogdGhpcy5nZXRQaWVjZUF0KG1vdmUudG8pKVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IGNhcHR1cmVkVHlwZUZvckxvZzogUGllY2VUeXBlIHwgbnVsbCA9XG4gICAgICBjYXB0dXJlZElkRm9yTG9nICE9PSBudWxsXG4gICAgICAgID8gKGZhY3RzLmZpbmQoXG4gICAgICAgICAgICAoZikgPT4gZi5pZCA9PT0gY2FwdHVyZWRJZEZvckxvZyAmJiBmLmF0dHIgPT09IFwiUGllY2VUeXBlXCIsXG4gICAgICAgICAgKT8udmFsdWUgYXMgUGllY2VUeXBlIHwgdW5kZWZpbmVkKSA/PyBudWxsXG4gICAgICAgIDogbnVsbDtcblxuICAgIGlmIChpc0VuUGFzc2FudCkge1xuICAgICAgLy8gRW4gcGFzc2FudCBjYXB0dXJlcyB0aGUgcGF3biBvbiB0aGUgU0tJUFBFRCBzcXVhcmUsIG5vdCBvblxuICAgICAgLy8gYG1vdmUudG9gLiBXZSBzdGlsbCBmaXJlIGBvbkJlZm9yZUNhcHR1cmVgIGZpcnN0IHNvIHByZXNldHNcbiAgICAgIC8vIGxpa2UgcXVlZW4tc3BsaXRzIC8gZXhwbG9zaXZlLXJvb2sgZ2V0IGEgY2hhbmNlIHRvIHRyYW5zZm9ybVxuICAgICAgLy8gdGhlIGNhcHR1cmUgd2hvbGVzYWxlLiBJZiBub25lIGNvbnN1bWUsIHdlIHJvdXRlIHRoZSB0YXJnZXRcbiAgICAgIC8vIHRocm91Z2ggYGRlYWxEYW1hZ2VgIHNvIHRoZSBIUCBwaXBlbGluZSBnZXRzIHRvIGFic29yYiBpdC5cbiAgICAgIGNvbnN0IGNhcHR1cmVkU3F1YXJlID1cbiAgICAgICAgY29sb3IgPT09IFwid2hpdGVcIiA/ICgobW92ZS50byAtIDgpIGFzIG51bWJlcikgOiAoKG1vdmUudG8gKyA4KSBhcyBudW1iZXIpO1xuICAgICAgY29uc3QgY2FwdHVyZWRJZCA9IHRoaXMuZ2V0UGllY2VBdChjYXB0dXJlZFNxdWFyZSk7XG4gICAgICBsZXQgY29uc3VtZWQgPSBmYWxzZTtcbiAgICAgIGxldCB0YXJnZXREaWVkID0gdHJ1ZTsgLy8gZGVmYXVsdDogbm8gY2FwdHVyZWQgcGF3biBmb3VuZCAoZGVnZW5lcmF0ZSksIHRyZWF0IGFzIFwiZGllZFwiXG4gICAgICBpZiAoY2FwdHVyZWRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdW1lZCA9IHRoaXMudHJ5SW50ZXJjZXB0Q2FwdHVyZShtb3ZlLnBpZWNlSWQsIGNhcHR1cmVkSWQsIGNvbG9yKTtcbiAgICAgICAgaWYgKCFjb25zdW1lZCkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZGVhbERhbWFnZShjYXB0dXJlZElkLCAxLCB7XG4gICAgICAgICAgICBraW5kOiBcImNhcHR1cmVcIixcbiAgICAgICAgICAgIGF0dGFja2VyOiBtb3ZlLnBpZWNlSWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGFyZ2V0RGllZCA9IHJlc3VsdC5kaWVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBBdHRhY2tlciBhZHZhbmNlcyBkaWFnb25hbGx5IHVubGVzcyBhIHByZXNldCBjb25zdW1lZCB0aGVcbiAgICAgIC8vIGNhcHR1cmUgKGl0IG93bnMgcG9zaXRpb25pbmcpIG9yIHRoZSBjYXB0dXJlZCBwYXduIHN1cnZpdmVkXG4gICAgICAvLyBIUCBkYW1hZ2UgKHBva2Ug4oCUIGF0dGFja2VyIHN0YXlzKS5cbiAgICAgIGlmICghY29uc3VtZWQgJiYgdGFyZ2V0RGllZCkge1xuICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0KG1vdmUucGllY2VJZCwgXCJQb3NpdGlvblwiLCBtb3ZlLnRvKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydChtb3ZlLnBpZWNlSWQsIFwiSGFzTW92ZWRcIiwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0Nhc3RsaW5nKSB7XG4gICAgICBhcHBseUNhc3RsaW5nTW92ZSh0aGlzLnNlc3Npb24sIG1vdmUgYXMgQ2FzdGxpbmdNb3ZlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm9ybWFsIG1vdmUuIFR3byBpbnRlcmNlcHQgbGF5ZXJzOlxuICAgICAgLy8gICAxLiBvbkJlZm9yZUNhcHR1cmUg4oCUIGxldHMgYSBwcmVzZXQgcmVwbGFjZSB0aGUgY2FwdHVyZVxuICAgICAgLy8gICAgICBtZWNoYW5pYyBlbnRpcmVseSAocXVlZW4tc3BsaXRzIGZpc3Npb24sIGV4cGxvc2l2ZS1yb29rXG4gICAgICAvLyAgICAgIEFvRSwgY2FwdHVyZS10by13aW4gd2lubmVyLXJlY29yZGluZykuIElmIGNvbnN1bWVkIHRoZVxuICAgICAgLy8gICAgICBlbmdpbmUgZG9lcyBub3RoaW5nIGVsc2UgZm9yIHRoaXMgY2FwdHVyZS5cbiAgICAgIC8vICAgMi4gZGVhbERhbWFnZSDigJQgcnVucyBhZnRlciwgb25seSBpZiBub3RoaW5nIGNvbnN1bWVkLiBUaGlzXG4gICAgICAvLyAgICAgIGlzIHRoZSBwaXBlbGluZSBIUCBob29rcywgYW5kIGlzIHdoYXQgbWFrZXMgXCJyb29rXG4gICAgICAvLyAgICAgIGNhcHR1cmVzIHBhd25cIiBkZWNyZW1lbnQgdGhlIHBhd24ncyBIcCBieSAxIHJhdGhlciB0aGFuXG4gICAgICAvLyAgICAgIGluc3RhbnRseSBraWxsaW5nLiBPbiBkZWZhdWx0IChubyBpbnRlcmNlcHRvcikgdGhlIHRhcmdldFxuICAgICAgLy8gICAgICBpcyByZXRyYWN0ZWQgYW5kIGBkaWVkPXRydWVgIGlzIHJldHVybmVkLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBhdHRhY2tlciBhZHZhbmNlcyBvbnRvIHRoZSB0YXJnZXQgc3F1YXJlIGlmZiB0aGUgdGFyZ2V0XG4gICAgICAvLyBBQ1RVQUxMWSBESUVELiBOb24tbGV0aGFsIGNhcHR1cmVzIGxlYXZlIHRoZSBhdHRhY2tlciBpblxuICAgICAgLy8gcGxhY2U7IHR1cm4gc3RpbGwgYWR2YW5jZXMgc28gdGhlIG1vdmUgY291bnRzIGFzIGEgXCJwb2tlXCIuXG4gICAgICBsZXQgY29uc3VtZWQgPSBmYWxzZTtcbiAgICAgIGxldCBjYXB0dXJlUmVzb2x2ZWQgPSB0cnVlOyAvLyBkZWZhdWx0OiBubyBjYXB0dXJlIGhhcHBlbmVkLCB0cmVhdCBhcyBcImRpZWRcIlxuICAgICAgaWYgKG1vdmUuaXNDYXB0dXJlKSB7XG4gICAgICAgIGNvbnN0IGNhcHR1cmVkSWQgPSB0aGlzLmdldFBpZWNlQXQobW92ZS50byk7XG4gICAgICAgIGlmIChjYXB0dXJlZElkICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3VtZWQgPSB0aGlzLnRyeUludGVyY2VwdENhcHR1cmUobW92ZS5waWVjZUlkLCBjYXB0dXJlZElkLCBjb2xvcik7XG4gICAgICAgICAgaWYgKCFjb25zdW1lZCkge1xuICAgICAgICAgICAgY29uc3QgeyBkaWVkIH0gPSB0aGlzLmRlYWxEYW1hZ2UoY2FwdHVyZWRJZCwgMSwge1xuICAgICAgICAgICAgICBraW5kOiBcImNhcHR1cmVcIixcbiAgICAgICAgICAgICAgYXR0YWNrZXI6IG1vdmUucGllY2VJZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY2FwdHVyZVJlc29sdmVkID0gZGllZDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQSBjb25zdW1pbmcgcHJlc2V0IG93bnMgQUxMIHBvc3QtY2FwdHVyZSBiZWhhdmlvdXIsXG4gICAgICAgICAgICAvLyBpbmNsdWRpbmcgd2hldGhlciB0aGUgYXR0YWNrZXIgbW92ZWQuIFdlIGRvbid0IHJ1biB0aGVcbiAgICAgICAgICAgIC8vIHN0YW5kYXJkIGFkdmFuY2UgYmVsb3cuXG4gICAgICAgICAgICBjYXB0dXJlUmVzb2x2ZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFkdmFuY2UgYXR0YWNrZXIgdW5sZXNzOlxuICAgICAgLy8gICAtIGEgcHJlc2V0IGNvbnN1bWVkIHRoZSBjYXB0dXJlIChpdCBoYW5kbGVkIHBvc2l0aW9uaW5nKSwgT1JcbiAgICAgIC8vICAgLSB0aGUgY2FwdHVyZSB3YXMgbm9uLWxldGhhbCAoYXR0YWNrZXIgc3RheXMsIHRhcmdldCBzdGFuZHMpXG4gICAgICBpZiAoIWNvbnN1bWVkICYmIGNhcHR1cmVSZXNvbHZlZCkge1xuICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0KG1vdmUucGllY2VJZCwgXCJQb3NpdGlvblwiLCBtb3ZlLnRvKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydChtb3ZlLnBpZWNlSWQsIFwiSGFzTW92ZWRcIiwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb21vdGlvbiAocGF3biByZWFjaGluZyBsYXN0IHJhbmspXG4gICAgY29uc3QgZWZmZWN0aXZlVG8gPSBpc0Nhc3RsaW5nID8gKG1vdmUgYXMgQ2FzdGxpbmdNb3ZlKS50byA6IG1vdmUudG87XG4gICAgaWYgKG1vdmluZ1R5cGUgPT09IFwicGF3blwiICYmIGlzUHJvbW90aW9uTW92ZShlZmZlY3RpdmVUbywgY29sb3IpKSB7XG4gICAgICBjb25zdCBwcm9tb3RlQXMgPVxuICAgICAgICAobW92ZSBhcyBMZWdhbE1vdmUgJiB7IHByb21vdGVUbz86IFBpZWNlVHlwZSB9KS5wcm9tb3RlVG8gPz8gcHJvbW90ZVRvO1xuICAgICAgYXBwbHlQcm9tb3Rpb24odGhpcy5zZXNzaW9uLCBtb3ZlLnBpZWNlSWQsIHByb21vdGVBcyk7XG4gICAgfVxuXG4gICAgLy8gU2V0L2NsZWFyIGVuIHBhc3NhbnQgdGFyZ2V0XG4gICAgaWYgKG1vdmluZ1R5cGUgPT09IFwicGF3blwiICYmIE1hdGguYWJzKG1vdmUudG8gLSBtb3ZlLmZyb20pID09PSAxNikge1xuICAgICAgc2V0RW5QYXNzYW50VGFyZ2V0KHRoaXMuc2Vzc2lvbiwgbW92ZS5mcm9tLCBtb3ZlLnRvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xlYXJFblBhc3NhbnRUYXJnZXQodGhpcy5zZXNzaW9uKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgaGFsZm1vdmUgY2xvY2tcbiAgICB1cGRhdGVIYWxmbW92ZUNsb2NrKHRoaXMuc2Vzc2lvbiwgbW92ZSwgbW92aW5nVHlwZSA9PT0gXCJwYXduXCIpO1xuXG4gICAgLy8gU3dpdGNoIHR1cm5cbiAgICBjb25zdCBuZXh0Q29sb3I6IFBpZWNlQ29sb3IgPSBjb2xvciA9PT0gXCJ3aGl0ZVwiID8gXCJibGFja1wiIDogXCJ3aGl0ZVwiO1xuICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiVHVyblwiLCBuZXh0Q29sb3IpO1xuXG4gICAgLy8gSW5jcmVtZW50IGZ1bGxtb3ZlIG51bWJlciBhZnRlciBibGFjaydzIG1vdmVcbiAgICBpZiAoY29sb3IgPT09IFwiYmxhY2tcIikge1xuICAgICAgY29uc3QgZm4gPVxuICAgICAgICAoKHRoaXMuc2Vzc2lvbi5nZXQoR0FNRV9FTlRJVFksIFwiRnVsbG1vdmVOdW1iZXJcIikgYXMgbnVtYmVyKSA/PyAxKSArIDE7XG4gICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIkZ1bGxtb3ZlTnVtYmVyXCIsIGZuKTtcbiAgICB9XG5cbiAgICAvLyBSZWNvcmQgcG9zaXRpb24gZm9yIHRocmVlZm9sZCByZXBldGl0aW9uXG4gICAgcmVjb3JkUG9zaXRpb24odGhpcy5zZXNzaW9uKTtcblxuICAgIC8vIFRpY2sgcHJlc2V0IGR1cmF0aW9ucyB3aXRoIHRoZSBjb2xvciB0aGF0IEpVU1QgbW92ZWQuIFBsYXllci1sb2NhbFxuICAgIC8vIHR1cm4gY291bnRpbmc6IGEgYHNjb3BlPXdoaXRlYCBwcmVzZXQgd2l0aCAzIHR1cm5zIHJlbWFpbmluZ1xuICAgIC8vIHRpY2tzIG9ubHkgd2hlbiB3aGl0ZSBwbGF5czsgYSBgc2NvcGU9Ym90aGAgdGlja3Mgb24gZXZlcnlcbiAgICAvLyBoYWxmLW1vdmUuIEVudHJpZXMgcmVhY2hpbmcgMCBhcmUgcmVtb3ZlZCBBTkQgZmlyZSBvbkRlYWN0aXZhdGVcbiAgICAvLyBzbyB0aGV5IGNhbiB0ZWFyIGRvd24gYW55IGJvYXJkIHN0YXRlIHRoZXkgaW5zdGFsbGVkLlxuICAgIGNvbnN0IGxpZmVjeWNsZUN0eDogTGlmZWN5Y2xlQ29udGV4dCA9IHsgZW5naW5lOiB0aGlzIH07XG4gICAgY29uc3QgZXhwaXJlZCA9IHRoaXMuYWN0aXZlUHJlc2V0cy50aWNrQWZ0ZXJNb3ZlKGNvbG9yKTtcbiAgICBmb3IgKGNvbnN0IGlkIG9mIGV4cGlyZWQpIHtcbiAgICAgIGNvbnN0IGRlZiA9IFBSRVNFVF9SRUdJU1RSWS5nZXQoaWQpO1xuICAgICAgZGVmPy5vbkRlYWN0aXZhdGU/LihsaWZlY3ljbGVDdHgpO1xuICAgICAgdGhpcy5jbGVhclByZXNldFN0YXRlKGlkKTtcbiAgICB9XG5cbiAgICAvLyBQb3N0LW1vdmUgcHJlc2V0IGhvb2tzOiBmaXJlIGFnYWluc3QgRVZFUlkgc3RpbGwtYWN0aXZlIHByZXNldFxuICAgIC8vIChyZWdhcmRsZXNzIG9mIHNjb3BlKS4gU2NvcGUtYXdhcmUgYmVoYXZpb3VyIGlzIHRoZSBwcmVzZXQnc1xuICAgIC8vIHJlc3BvbnNpYmlsaXR5IOKAlCBraW5nLWhlYWxzIGFmZmVjdHMgdGhlIG5vbi1tb3ZlciwgcG9pc29uZWQtc3F1YXJlc1xuICAgIC8vIGFmZmVjdHMgdGhlIG1vdmVyLCBzbyBhIHNpbmdsZSBlbmdpbmUtbGV2ZWwgc2NvcGUgZmlsdGVyIGNhbid0XG4gICAgLy8gc2VydmUgYm90aC5cbiAgICBjb25zdCBtb3ZlQ3R4OiBNb3ZlSG9va0NvbnRleHQgPSB7IGVuZ2luZTogdGhpcywgbW92ZXI6IGNvbG9yIH07XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmFjdGl2ZVByZXNldHMubGlzdCgpKSB7XG4gICAgICBjb25zdCBkZWYgPSBQUkVTRVRfUkVHSVNUUlkuZ2V0KGVudHJ5LmlkKTtcbiAgICAgIGRlZj8ub25BZnRlck1vdmU/Lihtb3ZlQ3R4KTtcbiAgICB9XG5cbiAgICAvLyBQaGFzZSBob29rOiBhIG5ldyB0dXJuIGlzIHN0YXJ0aW5nIChuZXh0Q29sb3IgaXMgbm93IHRvIG1vdmUpLlxuICAgIC8vIFNjb3BlLWF3YXJlIOKAlCBwcmVzZXRzIHNjb3BlZCB0byBhIHNwZWNpZmljIGNvbG9yIG9ubHkgZmlyZSB3aGVuXG4gICAgLy8gdGhhdCBjb2xvcidzIHR1cm4gaXMgYmVnaW5uaW5nLiBJZGVhbCBmb3IgcmVzb3VyY2UgcmVnZW4gL1xuICAgIC8vIGNvb2xkb3duIHRpY2tzIOKAlCBydW5zIEJFRk9SRSB0aGUgcGxheWVyIGFza3MgZm9yIHRoZWlyIGxlZ2FsXG4gICAgLy8gbW92ZXMsIHNvIHJlZ2VuZXJhdGVkIHN0YW1pbmEgLyByZWZyZXNoZWQgY29vbGRvd25zIGFyZVxuICAgIC8vIHJlZmxlY3RlZCBpbiB0aGUgZmlyc3QgbGVnYWwtbW92ZSBxdWVyeS5cbiAgICBjb25zdCB0dXJuU3RhcnRDdHg6IFR1cm5TdGFydENvbnRleHQgPSB7IGVuZ2luZTogdGhpcywgdHVybjogbmV4dENvbG9yIH07XG4gICAgZm9yIChjb25zdCBwcmVzZXQgb2YgdGhpcy5hY3RpdmVQcmVzZXRzLmdldEZvckNvbG9yKG5leHRDb2xvcikpIHtcbiAgICAgIHByZXNldC5vblR1cm5TdGFydD8uKHR1cm5TdGFydEN0eCk7XG4gICAgfVxuXG4gICAgLy8gRGV0ZXJtaW5lIHRlcm1pbmFsIHN0YXRlIEJFRk9SRSB3ZSBsb2csIHNvIHRoZSBNb3ZlUmVjb3JkXG4gICAgLy8gcmVmbGVjdHMgZ2FtZS1vdmVyIHN0YXR1cyBvbiB0aGUgbW92ZSB0aGF0IGNhdXNlZCBpdC5cbiAgICBjb25zdCBnYW1lUmVzdWx0ID0gdGhpcy5jaGVja0dhbWVSZXN1bHQoKTtcbiAgICBjb25zdCB0ZXJtaW5hbCA9IGdhbWVSZXN1bHQgIT09IFwib25nb2luZ1wiO1xuXG4gICAgLy8gQ2hlY2stZGV0ZWN0aW9uOiBhZnRlciB0aGUgbW92ZSArIHByZXNldCBob29rcywgaXMgdGhlIG9wcG9uZW50XG4gICAgLy8gKHRoZSBzaWRlIHdob3NlIHR1cm4gaXMgTk9XKSBpbiBjaGVjaz9cbiAgICBjb25zdCBvcHBvbmVudEluQ2hlY2sgPSBpc0luQ2hlY2sodGhpcy5zZXNzaW9uLCBuZXh0Q29sb3IpO1xuXG4gICAgLy8gQ29sbGVjdCBwcmVzZXQgY29udHJpYnV0aW9ucyB0byB0aGUgbW92ZSBkZXNjcmlwdGlvbi5cbiAgICBjb25zdCBkZXNjcmliZUN0eDogRGVzY3JpYmVNb3ZlRWZmZWN0Q29udGV4dCA9IHtcbiAgICAgIGVuZ2luZTogdGhpcyxcbiAgICAgIG1vdmVyOiBjb2xvcixcbiAgICAgIGZyb206IG1vdmUuZnJvbSxcbiAgICAgIHRvOiBtb3ZlLnRvLFxuICAgICAgbW92aW5nVHlwZSxcbiAgICAgIGNhcHR1cmVkVHlwZTogY2FwdHVyZWRUeXBlRm9yTG9nLFxuICAgICAgaXNFblBhc3NhbnQsXG4gICAgICBpc0Nhc3RsaW5nLFxuICAgICAgcHJvbW90aW9uOlxuICAgICAgICBtb3ZpbmdUeXBlID09PSBcInBhd25cIiAmJiBpc1Byb21vdGlvbk1vdmUoZWZmZWN0aXZlVG8sIGNvbG9yKVxuICAgICAgICAgID8gKChtb3ZlIGFzIExlZ2FsTW92ZSAmIHsgcHJvbW90ZVRvPzogUGllY2VUeXBlIH0pLnByb21vdGVUbyA/PyBwcm9tb3RlVG8pXG4gICAgICAgICAgOiBudWxsLFxuICAgIH07XG4gICAgY29uc3QgcHJlc2V0RWZmZWN0czogQXJyYXk8eyBwcmVzZXRJZDogc3RyaW5nOyBzdW1tYXJ5OiBzdHJpbmcgfT4gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuYWN0aXZlUHJlc2V0cy5saXN0KCkpIHtcbiAgICAgIGNvbnN0IGRlZiA9IFBSRVNFVF9SRUdJU1RSWS5nZXQoZW50cnkuaWQpO1xuICAgICAgY29uc3Qgc3VtbWFyeSA9IGRlZj8uZGVzY3JpYmVNb3ZlRWZmZWN0Py4oZGVzY3JpYmVDdHgpO1xuICAgICAgaWYgKHN1bW1hcnkgIT09IHVuZGVmaW5lZCAmJiBzdW1tYXJ5ICE9PSBcIlwiKSB7XG4gICAgICAgIHByZXNldEVmZmVjdHMucHVzaCh7IHByZXNldElkOiBlbnRyeS5pZCwgc3VtbWFyeSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNtb3ZlTG9nLnB1c2goe1xuICAgICAgZnJvbTogbW92ZS5mcm9tLFxuICAgICAgdG86IG1vdmUudG8sXG4gICAgICBtb3ZlcjogY29sb3IsXG4gICAgICBtb3ZpbmdUeXBlLFxuICAgICAgY2FwdHVyZWRJZDogY2FwdHVyZWRJZEZvckxvZyxcbiAgICAgIGNhcHR1cmVkVHlwZTogY2FwdHVyZWRUeXBlRm9yTG9nLFxuICAgICAgaXNDaGVjazogb3Bwb25lbnRJbkNoZWNrLFxuICAgICAgdGVybWluYWwsXG4gICAgICBpc0VuUGFzc2FudCxcbiAgICAgIGlzQ2FzdGxpbmcsXG4gICAgICBwcm9tb3Rpb246IGRlc2NyaWJlQ3R4LnByb21vdGlvbiBhcyBQaWVjZVR5cGUgfCBudWxsLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgcHJlc2V0RWZmZWN0cyxcbiAgICB9KTtcblxuICAgIHJldHVybiBnYW1lUmVzdWx0O1xuICB9XG5cbiAgY2hlY2tHYW1lUmVzdWx0KCk6IEdhbWVSZXN1bHQge1xuICAgIC8vIFByZXNldCBvdmVycmlkZSBwYXRoOiBydW4gb25DaGVja0dhbWVSZXN1bHQgb24gZXZlcnkgYWN0aXZlIHByZXNldFxuICAgIC8vIGluIHJlZ2lzdHJhdGlvbiBvcmRlci4gRmlyc3Qgbm9uLXVuZGVmaW5lZCByZXR1cm4gd2lucy4gVGhpcyBsZXRzXG4gICAgLy8gY2FwdHVyZS10by13aW4gYW5kIGxhc3QtcGllY2Utc3RhbmRpbmcgcmVkZWZpbmUgXCJnYW1lIG92ZXJcIlxuICAgIC8vIHdpdGhvdXQgdG91Y2hpbmcgZW5naW5lIGludGVybmFscy5cbiAgICBjb25zdCByZXN1bHRDdHg6IEdhbWVSZXN1bHRIb29rQ29udGV4dCA9IHsgZW5naW5lOiB0aGlzIH07XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmFjdGl2ZVByZXNldHMubGlzdCgpKSB7XG4gICAgICBjb25zdCBkZWYgPSBQUkVTRVRfUkVHSVNUUlkuZ2V0KGVudHJ5LmlkKTtcbiAgICAgIGNvbnN0IG92ZXJyaWRlID0gZGVmPy5vbkNoZWNrR2FtZVJlc3VsdD8uKHJlc3VsdEN0eCk7XG4gICAgICBpZiAob3ZlcnJpZGUgIT09IHVuZGVmaW5lZCkgcmV0dXJuIG92ZXJyaWRlO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRDb2xvciA9IHRoaXMuZ2V0Q3VycmVudFR1cm4oKTtcbiAgICBpZiAoaXNDaGVja21hdGUodGhpcy5zZXNzaW9uLCBuZXh0Q29sb3IpKSByZXR1cm4gXCJjaGVja21hdGVcIjtcbiAgICBpZiAoaXNTdGFsZW1hdGUodGhpcy5zZXNzaW9uLCBuZXh0Q29sb3IpKSByZXR1cm4gXCJzdGFsZW1hdGVcIjtcbiAgICBpZiAoaXNGaWZ0eU1vdmVEcmF3KHRoaXMuc2Vzc2lvbikpIHJldHVybiBcImRyYXctNTBcIjtcbiAgICBpZiAoaXNUaHJlZWZvbGRSZXBldGl0aW9uKHRoaXMuc2Vzc2lvbikpIHJldHVybiBcImRyYXctM2ZvbGRcIjtcbiAgICBpZiAoaXNJbnN1ZmZpY2llbnRNYXRlcmlhbCh0aGlzLnNlc3Npb24pKSByZXR1cm4gXCJkcmF3LWluc3VmZmljaWVudFwiO1xuICAgIHJldHVybiBcIm9uZ29pbmdcIjtcbiAgfVxuXG4gIC8qKiBGaW5kIGZpcnN0IGxlZ2FsIG1vdmUgbWF0Y2hpbmcgZnJvbSt0byBzcXVhcmVzIGFuZCBvcHRpb25hbCBwcm9tb3RlVG8uICovXG4gIGZpbmRNb3ZlKGZyb206IG51bWJlciwgdG86IG51bWJlciwgcHJvbW90ZVRvPzogUGllY2VUeXBlKTogTGVnYWxNb3ZlIHwgbnVsbCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZ2V0QWxsTGVnYWxNb3ZlcygpLmZpbmQoXG4gICAgICAgIG0gPT5cbiAgICAgICAgICBtLmZyb20gPT09IGZyb20gJiZcbiAgICAgICAgICBtLnRvID09PSB0byAmJlxuICAgICAgICAgICghbS5wcm9tb3RlVG8gfHwgbS5wcm9tb3RlVG8gPT09IChwcm9tb3RlVG8gPz8gXCJxdWVlblwiKSksXG4gICAgICApID8/IG51bGxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQaWVjZUF0KHNxdWFyZTogbnVtYmVyKTogRW50aXR5SWQgfCBudWxsIHtcbiAgICBjb25zdCBmID0gdGhpcy5zZXNzaW9uXG4gICAgICAuYWxsRmFjdHMoKVxuICAgICAgLmZpbmQoeCA9PiB4LmF0dHIgPT09IFwiUG9zaXRpb25cIiAmJiB4LnZhbHVlID09PSBzcXVhcmUgJiYgKHguaWQgYXMgbnVtYmVyKSA+IDApO1xuICAgIHJldHVybiBmID8gKGYuaWQgYXMgRW50aXR5SWQpIDogbnVsbDtcbiAgfVxufVxuIl0sImZpbGUiOiIvc3JjL2VuZ2luZS50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/9d39083cebaf1c866df45696efde36a3c907d76d b/7xOfJqsDU787fe61oSCq1/web/9d39083cebaf1c866df45696efde36a3c907d76d deleted file mode 100644 index b0e7db7..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/9d39083cebaf1c866df45696efde36a3c907d76d +++ /dev/null @@ -1,38 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "getLegalPawnMoves", { enumerable: true, configurable: true, get(){ try { return getLegalPawnMoves } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/rules/primitives.ts", {"importedNames":["pawnSingleAdvance","pawnDoubleAdvance","pawnCaptureSqares"]}); - - - - -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/rules/board-queries.ts", {"importedNames":["isPieceAt","isEnemyAt","getPiecePosition","getPieceColor"]}); - - - - - -function getLegalPawnMoves(session, pieceId) { - const from = (0,__vite_ssr_import_1__.getPiecePosition)(session, pieceId); - const color = (0,__vite_ssr_import_1__.getPieceColor)(session, pieceId); - if (from === null || color === null) return []; - const moves = []; - const single = (0,__vite_ssr_import_0__.pawnSingleAdvance)(from, color); - const singleClear = single !== null && !(0,__vite_ssr_import_1__.isPieceAt)(session, single); - if (singleClear) { - moves.push({ pieceId, from, to: single, isCapture: false }); - }; - if (singleClear) { - const dbl = (0,__vite_ssr_import_0__.pawnDoubleAdvance)(from, color); - if (dbl !== null && !(0,__vite_ssr_import_1__.isPieceAt)(session, dbl)) { - moves.push({ pieceId, from, to: dbl, isCapture: false }); - } - }; - for (const capSq of (0,__vite_ssr_import_0__.pawnCaptureSqares)(from, color)) { - if ((0,__vite_ssr_import_1__.isEnemyAt)(session, capSq, color)) { - moves.push({ pieceId, from, to: capSq, isCapture: true }); - } - }; - return moves; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQWVBOzs7OztBQU1BOzs7Ozs7QUFjTyxTQUFTLGtCQUFrQixTQUFrQixTQUFnQztBQUNsRixRQUFNLFVBQU8sd0NBQWlCLFNBQVMsT0FBTztBQUM5QyxRQUFNLFdBQVEscUNBQWMsU0FBUyxPQUFPO0FBQzVDLE1BQUksU0FBUyxRQUFRLFVBQVUsS0FBTSxRQUFPLENBQUM7QUFFN0MsUUFBTSxRQUFxQixDQUFDO0FBRzVCLFFBQU0sWUFBUyx5Q0FBa0IsTUFBTSxLQUFLO0FBQzVDLFFBQU0sY0FBYyxXQUFXLFFBQVEsSUFBQyxpQ0FBVSxTQUFTLE1BQU07QUFDakUsTUFBSSxhQUFhO0FBQ2YsVUFBTSxLQUFLLEVBQUUsU0FBUyxNQUFNLElBQUksUUFBUSxXQUFXLE1BQU0sQ0FBQztBQUFBLEVBQzVEO0FBSUEsTUFBSSxhQUFhO0FBQ2YsVUFBTSxTQUFNLHlDQUFrQixNQUFNLEtBQUs7QUFDekMsUUFBSSxRQUFRLFFBQVEsSUFBQyxpQ0FBVSxTQUFTLEdBQUcsR0FBRztBQUM1QyxZQUFNLEtBQUssRUFBRSxTQUFTLE1BQU0sSUFBSSxLQUFLLFdBQVcsTUFBTSxDQUFDO0FBQUEsSUFDekQ7QUFBQSxFQUNGO0FBR0EsYUFBVyxZQUFTLHlDQUFrQixNQUFNLEtBQUssR0FBRztBQUNsRCxXQUFJLGlDQUFVLFNBQVMsT0FBTyxLQUFLLEdBQUc7QUFDcEMsWUFBTSxLQUFLLEVBQUUsU0FBUyxNQUFNLElBQUksT0FBTyxXQUFXLEtBQUssQ0FBQztBQUFBLElBQzFEO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVCIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsicGF3bi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBhd24gbW92ZSBhbmQgY2FwdHVyZSBydWxlcyAoUDIuOSkuXG4gKlxuICogQ29tcHV0ZXMgdGhlIHNldCBvZiBsZWdhbCB0YXJnZXQgc3F1YXJlcyBmb3IgYSBzaW5nbGUgcGF3biwgZ2l2ZW4gdGhlXG4gKiBjdXJyZW50IGJvYXJkIHN0YXRlIGluIGEgU2Vzc2lvbi4gSGFuZGxlczpcbiAqICAgLSBzaW5nbGUgYWR2YW5jZSAoYmxvY2tlZCBieSBhbnkgcGllY2UpXG4gKiAgIC0gZG91YmxlIGFkdmFuY2UgZnJvbSBob21lIHJhbmsgKGJvdGggc3F1YXJlcyBtdXN0IGJlIGVtcHR5KVxuICogICAtIGRpYWdvbmFsIGNhcHR1cmVzIChvbmx5IHdoZW4gYW4gZW5lbXkgb2NjdXBpZXMgdGhlIGRpYWdvbmFsKVxuICpcbiAqIEludGVudGlvbmFsbHkgTk9UIGhhbmRsZWQgaGVyZSAoc2VlIGxhdGVyIHBoYXNlcyk6XG4gKiAgIC0gZW4gcGFzc2FudCAgICAgICDihpIgUDIuMTZcbiAqICAgLSBwcm9tb3Rpb24gY2hvaWNlIOKGkiBQMi4xN1xuICogICAtIGNoZWNrIGZpbHRlcmluZyAg4oaSIFAyLjE4XG4gKi9cbmltcG9ydCB0eXBlIHsgU2Vzc2lvbiwgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB7XG4gIHBhd25TaW5nbGVBZHZhbmNlLFxuICBwYXduRG91YmxlQWR2YW5jZSxcbiAgcGF3bkNhcHR1cmVTcWFyZXMsXG59IGZyb20gXCIuL3ByaW1pdGl2ZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgTGVnYWxNb3ZlIH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcbmltcG9ydCB7XG4gIGlzUGllY2VBdCxcbiAgaXNFbmVteUF0LFxuICBnZXRQaWVjZVBvc2l0aW9uLFxuICBnZXRQaWVjZUNvbG9yLFxufSBmcm9tIFwiLi9ib2FyZC1xdWVyaWVzLmpzXCI7XG5cbi8qKlxuICogR2V0IGFsbCBsZWdhbCBwYXduIG1vdmVzIGZvciBhIGdpdmVuIHBhd24gZW50aXR5LlxuICpcbiAqIERvZXMgbm90IHZlcmlmeSB0aGF0IGBwaWVjZUlkYCBpcyBhY3R1YWxseSBhIHBhd24g4oCUIHRoZSBjYWxsZXIgaXNcbiAqIGV4cGVjdGVkIHRvIGRpc3BhdGNoIG9uIFBpZWNlVHlwZS4gSWYgdGhlIHBpZWNlIGhhcyBubyBQb3NpdGlvbiBvclxuICogQ29sb3IgZmFjdCwgcmV0dXJucyBbXS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExlZ2FsUGF3bk1vdmVzKHNlc3Npb246IFNlc3Npb24sIHBpZWNlSWQ6IEVudGl0eUlkKTogTGVnYWxNb3ZlW10ge1xuICBjb25zdCBmcm9tID0gZ2V0UGllY2VQb3NpdGlvbihzZXNzaW9uLCBwaWVjZUlkKTtcbiAgY29uc3QgY29sb3IgPSBnZXRQaWVjZUNvbG9yKHNlc3Npb24sIHBpZWNlSWQpO1xuICBpZiAoZnJvbSA9PT0gbnVsbCB8fCBjb2xvciA9PT0gbnVsbCkgcmV0dXJuIFtdO1xuXG4gIGNvbnN0IG1vdmVzOiBMZWdhbE1vdmVbXSA9IFtdO1xuXG4gIC8vIOKUgOKUgOKUgCBTaW5nbGUgYWR2YW5jZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgY29uc3Qgc2luZ2xlID0gcGF3blNpbmdsZUFkdmFuY2UoZnJvbSwgY29sb3IpO1xuICBjb25zdCBzaW5nbGVDbGVhciA9IHNpbmdsZSAhPT0gbnVsbCAmJiAhaXNQaWVjZUF0KHNlc3Npb24sIHNpbmdsZSk7XG4gIGlmIChzaW5nbGVDbGVhcikge1xuICAgIG1vdmVzLnB1c2goeyBwaWVjZUlkLCBmcm9tLCB0bzogc2luZ2xlLCBpc0NhcHR1cmU6IGZhbHNlIH0pO1xuICB9XG5cbiAgLy8g4pSA4pSA4pSAIERvdWJsZSBhZHZhbmNlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvLyBSZXF1aXJlcyB0aGUgc2luZ2xlLWFkdmFuY2Ugc3F1YXJlIGFsc28gdG8gYmUgZW1wdHkgKG5vIGp1bXBpbmcpLlxuICBpZiAoc2luZ2xlQ2xlYXIpIHtcbiAgICBjb25zdCBkYmwgPSBwYXduRG91YmxlQWR2YW5jZShmcm9tLCBjb2xvcik7XG4gICAgaWYgKGRibCAhPT0gbnVsbCAmJiAhaXNQaWVjZUF0KHNlc3Npb24sIGRibCkpIHtcbiAgICAgIG1vdmVzLnB1c2goeyBwaWVjZUlkLCBmcm9tLCB0bzogZGJsLCBpc0NhcHR1cmU6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgOKUgCBEaWFnb25hbCBjYXB0dXJlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgZm9yIChjb25zdCBjYXBTcSBvZiBwYXduQ2FwdHVyZVNxYXJlcyhmcm9tLCBjb2xvcikpIHtcbiAgICBpZiAoaXNFbmVteUF0KHNlc3Npb24sIGNhcFNxLCBjb2xvcikpIHtcbiAgICAgIG1vdmVzLnB1c2goeyBwaWVjZUlkLCBmcm9tLCB0bzogY2FwU3EsIGlzQ2FwdHVyZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbW92ZXM7XG59XG4iXSwiZmlsZSI6Ii9zcmMvcnVsZXMvcGF3bi50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/9e7fcb28845dc7690fe9be4fcf25a2e83050810d b/7xOfJqsDU787fe61oSCq1/web/9e7fcb28845dc7690fe9be4fcf25a2e83050810d deleted file mode 100644 index a4f0223..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/9e7fcb28845dc7690fe9be4fcf25a2e83050810d +++ /dev/null @@ -1,92 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "fileOf", { enumerable: true, configurable: true, get(){ try { return fileOf } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "rankOf", { enumerable: true, configurable: true, get(){ try { return rankOf } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "squareOf", { enumerable: true, configurable: true, get(){ try { return squareOf } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "isOnBoard", { enumerable: true, configurable: true, get(){ try { return isOnBoard } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "isValidSquare", { enumerable: true, configurable: true, get(){ try { return isValidSquare } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "squareColor", { enumerable: true, configurable: true, get(){ try { return squareColor } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "squareToAlgebraic", { enumerable: true, configurable: true, get(){ try { return squareToAlgebraic } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "algebraicToSquare", { enumerable: true, configurable: true, get(){ try { return algebraicToSquare } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "slidingSquares", { enumerable: true, configurable: true, get(){ try { return slidingSquares } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "knightSquares", { enumerable: true, configurable: true, get(){ try { return knightSquares } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "kingSquares", { enumerable: true, configurable: true, get(){ try { return kingSquares } catch {} }}); -function fileOf(square) { - return square % 8; -}; -function rankOf(square) { - return Math.floor(square / 8); -}; -function squareOf(file, rank) { - return rank * 8 + file; -}; -function isOnBoard(file, rank) { - return file >= 0 && file <= 7 && rank >= 0 && rank <= 7; -}; -function isValidSquare(square) { - return square >= 0 && square <= 63; -}; -function squareColor(square) { - const file = fileOf(square); - const rank = rankOf(square); - return (file + rank) % 2 === 0 ? "dark" : "light"; -}; -function squareToAlgebraic(square) { - const file = fileOf(square); - const rank = rankOf(square); - return String.fromCharCode(97 + file) + String(rank + 1); -}; -function algebraicToSquare(notation) { - if (notation.length !== 2) return -1; - const file = notation.charCodeAt(0) - 97; - const rank = parseInt(notation[1], 10) - 1; - if (!isOnBoard(file, rank)) return -1; - return squareOf(file, rank); -}; -function slidingSquares(from, fileDelta, rankDelta) { - const squares = []; - let file = fileOf(from) + fileDelta; - let rank = rankOf(from) + rankDelta; - while (isOnBoard(file, rank)) { - squares.push(squareOf(file, rank)); - file += fileDelta; - rank += rankDelta; - }; - return squares; -}; -function knightSquares(from) { - const offsets = [ - [1, 2], - [2, 1], - [2, -1], - [1, -2], - [-1, -2], - [-2, -1], - [-2, 1], - [-1, 2] - ]; - const file = fileOf(from); - const rank = rankOf(from); - const squares = []; - for (const [df, dr] of offsets) { - const nf = file + df; - const nr = rank + dr; - if (isOnBoard(nf, nr)) squares.push(squareOf(nf, nr)); - }; - return squares; -}; -function kingSquares(from) { - const file = fileOf(from); - const rank = rankOf(from); - const squares = []; - for (let df = -1; df <= 1; df++) { - for (let dr = -1; dr <= 1; dr++) { - if (df === 0 && dr === 0) continue; - const nf = file + df; - const nr = rank + dr; - if (isOnBoard(nf, nr)) squares.push(squareOf(nf, nr)); - } - }; - return squares; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q3REO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVCIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiY29vcmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCb2FyZCBjb29yZGluYXRlIGhlbHBlcnMgZm9yIEBwYXJhdHlwZS9jaGVzcy5cbiAqIFNxdWFyZSBlbmNvZGluZzogc3F1YXJlID0gcmFuayAqIDggKyBmaWxlXG4gKiAgIGZpbGU6IDA9YSwgMT1iLCAyPWMsIDM9ZCwgND1lLCA1PWYsIDY9ZywgNz1oXG4gKiAgIHJhbms6IDA9cmFuazEsIDE9cmFuazIsIC4uLiwgNz1yYW5rOFxuICogRXhhbXBsZXM6IGExPTAsIGgxPTcsIGU0PTI4LCBoOD02M1xuICovXG5pbXBvcnQgdHlwZSB7IFNxdWFyZSB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuXG4vKiogRXh0cmFjdCBmaWxlICgwPWEuLjc9aCkgZnJvbSBhIHNxdWFyZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWxlT2Yoc3F1YXJlOiBTcXVhcmUpOiBudW1iZXIge1xuICByZXR1cm4gc3F1YXJlICUgODtcbn1cblxuLyoqIEV4dHJhY3QgcmFuayAoMD1yYW5rMS4uNz1yYW5rOCkgZnJvbSBhIHNxdWFyZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByYW5rT2Yoc3F1YXJlOiBTcXVhcmUpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5mbG9vcihzcXVhcmUgLyA4KTtcbn1cblxuLyoqIENvbnN0cnVjdCBhIHNxdWFyZSBmcm9tIGZpbGUgYW5kIHJhbmsuIERvZXMgTk9UIHZhbGlkYXRlIHJhbmdlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNxdWFyZU9mKGZpbGU6IG51bWJlciwgcmFuazogbnVtYmVyKTogU3F1YXJlIHtcbiAgcmV0dXJuIChyYW5rICogOCArIGZpbGUpIGFzIFNxdWFyZTtcbn1cblxuLyoqIElzIHRoZSAoZmlsZSwgcmFuaykgcGFpciBvbiB0aGUgYm9hcmQgKDAuLjcgZm9yIGJvdGgpPyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzT25Cb2FyZChmaWxlOiBudW1iZXIsIHJhbms6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gZmlsZSA+PSAwICYmIGZpbGUgPD0gNyAmJiByYW5rID49IDAgJiYgcmFuayA8PSA3O1xufVxuXG4vKiogSXMgYSBzcXVhcmUgaW4gdGhlIHZhbGlkIDAuLjYzIHJhbmdlPyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRTcXVhcmUoc3F1YXJlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNxdWFyZSA+PSAwICYmIHNxdWFyZSA8PSA2Mztcbn1cblxuLyoqXG4gKiBMaWdodC9kYXJrIHNxdWFyZSBjb2xvci4gUmV0dXJucyBcImxpZ2h0XCIgb3IgXCJkYXJrXCIuXG4gKiBBIHNxdWFyZSBpcyBsaWdodCBpZiAoZmlsZSArIHJhbmspIGlzIG9kZCwgZGFyayBpZiBldmVuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3F1YXJlQ29sb3Ioc3F1YXJlOiBTcXVhcmUpOiBcImxpZ2h0XCIgfCBcImRhcmtcIiB7XG4gIGNvbnN0IGZpbGUgPSBmaWxlT2Yoc3F1YXJlKTtcbiAgY29uc3QgcmFuayA9IHJhbmtPZihzcXVhcmUpO1xuICByZXR1cm4gKGZpbGUgKyByYW5rKSAlIDIgPT09IDAgPyBcImRhcmtcIiA6IFwibGlnaHRcIjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgc3F1YXJlIHRvIGFsZ2VicmFpYyBub3RhdGlvbiAoZS5nLiwgMCDihpIgXCJhMVwiLCAyOCDihpIgXCJlNFwiKS5cbiAqIFVzZWZ1bCBmb3IgZGVidWdnaW5nIGFuZCBQR04gcGFyc2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNxdWFyZVRvQWxnZWJyYWljKHNxdWFyZTogU3F1YXJlKTogc3RyaW5nIHtcbiAgY29uc3QgZmlsZSA9IGZpbGVPZihzcXVhcmUpO1xuICBjb25zdCByYW5rID0gcmFua09mKHNxdWFyZSk7XG4gIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDk3ICsgZmlsZSkgKyBTdHJpbmcocmFuayArIDEpO1xufVxuXG4vKipcbiAqIFBhcnNlIGFsZ2VicmFpYyBub3RhdGlvbiB0byBzcXVhcmUgbnVtYmVyIChlLmcuLCBcImU0XCIg4oaSIDI4KS5cbiAqIFJldHVybnMgLTEgZm9yIGludmFsaWQgaW5wdXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGdlYnJhaWNUb1NxdWFyZShub3RhdGlvbjogc3RyaW5nKTogU3F1YXJlIHtcbiAgaWYgKG5vdGF0aW9uLmxlbmd0aCAhPT0gMikgcmV0dXJuIC0xIGFzIFNxdWFyZTtcbiAgY29uc3QgZmlsZSA9IG5vdGF0aW9uLmNoYXJDb2RlQXQoMCkgLSA5NzsgLy8gJ2EnPTBcbiAgY29uc3QgcmFuayA9IHBhcnNlSW50KG5vdGF0aW9uWzFdISwgMTApIC0gMTtcbiAgaWYgKCFpc09uQm9hcmQoZmlsZSwgcmFuaykpIHJldHVybiAtMSBhcyBTcXVhcmU7XG4gIHJldHVybiBzcXVhcmVPZihmaWxlLCByYW5rKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYWxsIHNxdWFyZXMgYSBzbGlkaW5nIHBpZWNlIGNhbiByZWFjaCBpbiBvbmUgZGlyZWN0aW9uLFxuICogc3RvcHBpbmcgd2hlbiBpdCBoaXRzIHRoZSBib2FyZCBlZGdlIChleGNsdXNpdmUpLlxuICogQHBhcmFtIGZyb20g4oCUIHN0YXJ0aW5nIHNxdWFyZVxuICogQHBhcmFtIGZpbGVEZWx0YSDigJQgZmlsZSBjaGFuZ2UgcGVyIHN0ZXAgKC0xLCAwLCBvciAxKVxuICogQHBhcmFtIHJhbmtEZWx0YSDigJQgcmFuayBjaGFuZ2UgcGVyIHN0ZXAgKC0xLCAwLCBvciAxKVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2xpZGluZ1NxdWFyZXMoXG4gIGZyb206IFNxdWFyZSxcbiAgZmlsZURlbHRhOiBudW1iZXIsXG4gIHJhbmtEZWx0YTogbnVtYmVyLFxuKTogU3F1YXJlW10ge1xuICBjb25zdCBzcXVhcmVzOiBTcXVhcmVbXSA9IFtdO1xuICBsZXQgZmlsZSA9IGZpbGVPZihmcm9tKSArIGZpbGVEZWx0YTtcbiAgbGV0IHJhbmsgPSByYW5rT2YoZnJvbSkgKyByYW5rRGVsdGE7XG4gIHdoaWxlIChpc09uQm9hcmQoZmlsZSwgcmFuaykpIHtcbiAgICBzcXVhcmVzLnB1c2goc3F1YXJlT2YoZmlsZSwgcmFuaykpO1xuICAgIGZpbGUgKz0gZmlsZURlbHRhO1xuICAgIHJhbmsgKz0gcmFua0RlbHRhO1xuICB9XG4gIHJldHVybiBzcXVhcmVzO1xufVxuXG4vKipcbiAqIEtuaWdodCBtb3ZlIG9mZnNldHM6IGFsbCA4IEwtc2hhcGVkIG1vdmVzLlxuICogUmV0dXJucyB2YWxpZCB0YXJnZXQgc3F1YXJlcyBmcm9tIGEgZ2l2ZW4gc3F1YXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24ga25pZ2h0U3F1YXJlcyhmcm9tOiBTcXVhcmUpOiBTcXVhcmVbXSB7XG4gIGNvbnN0IG9mZnNldHM6IFtudW1iZXIsIG51bWJlcl1bXSA9IFtcbiAgICBbMSwgMl0sIFsyLCAxXSwgWzIsIC0xXSwgWzEsIC0yXSxcbiAgICBbLTEsIC0yXSwgWy0yLCAtMV0sIFstMiwgMV0sIFstMSwgMl0sXG4gIF07XG4gIGNvbnN0IGZpbGUgPSBmaWxlT2YoZnJvbSk7XG4gIGNvbnN0IHJhbmsgPSByYW5rT2YoZnJvbSk7XG4gIGNvbnN0IHNxdWFyZXM6IFNxdWFyZVtdID0gW107XG4gIGZvciAoY29uc3QgW2RmLCBkcl0gb2Ygb2Zmc2V0cykge1xuICAgIGNvbnN0IG5mID0gZmlsZSArIGRmO1xuICAgIGNvbnN0IG5yID0gcmFuayArIGRyO1xuICAgIGlmIChpc09uQm9hcmQobmYsIG5yKSkgc3F1YXJlcy5wdXNoKHNxdWFyZU9mKG5mLCBucikpO1xuICB9XG4gIHJldHVybiBzcXVhcmVzO1xufVxuXG4vKipcbiAqIEtpbmcgbW92ZSBzcXVhcmVzOiBhbGwgOCBhZGphY2VudCBzcXVhcmVzICh3aXRoaW4gYm9hcmQgYm91bmRzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtpbmdTcXVhcmVzKGZyb206IFNxdWFyZSk6IFNxdWFyZVtdIHtcbiAgY29uc3QgZmlsZSA9IGZpbGVPZihmcm9tKTtcbiAgY29uc3QgcmFuayA9IHJhbmtPZihmcm9tKTtcbiAgY29uc3Qgc3F1YXJlczogU3F1YXJlW10gPSBbXTtcbiAgZm9yIChsZXQgZGYgPSAtMTsgZGYgPD0gMTsgZGYrKykge1xuICAgIGZvciAobGV0IGRyID0gLTE7IGRyIDw9IDE7IGRyKyspIHtcbiAgICAgIGlmIChkZiA9PT0gMCAmJiBkciA9PT0gMCkgY29udGludWU7XG4gICAgICBjb25zdCBuZiA9IGZpbGUgKyBkZjtcbiAgICAgIGNvbnN0IG5yID0gcmFuayArIGRyO1xuICAgICAgaWYgKGlzT25Cb2FyZChuZiwgbnIpKSBzcXVhcmVzLnB1c2goc3F1YXJlT2YobmYsIG5yKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzcXVhcmVzO1xufVxuIl0sImZpbGUiOiIvc3JjL2Nvb3JkLnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/a0320f3cc19669dfd1818c82c40188bde27044e2 b/7xOfJqsDU787fe61oSCq1/web/a0320f3cc19669dfd1818c82c40188bde27044e2 deleted file mode 100644 index 2b3a75b..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/a0320f3cc19669dfd1818c82c40188bde27044e2 +++ /dev/null @@ -1,70 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/presets/registry.ts", {"importedNames":["PRESET_REGISTRY"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["fileOf","rankOf","squareOf"]}); -const DETONATION_RADIUS = 2; -function pieceAtSquare(session, sq) { - const facts = session.allFacts(); - for (const f of facts) { - if (f.attr === "Position" && f.value === sq && f.id > 0) { - return f.id; - } - }; - return null; -} -__vite_ssr_import_0__.PRESET_REGISTRY.register({ - id: "explosive-rook", - name: "Detonating Rook", - description: "When a Rook captures, it detonates: every piece within 2 squares on the same rank or file takes 1 damage (friend and foe alike). Diagonals are spared. Composes with Hit Points — pieces with HP>1 survive the blast.", - incompatibleWith: [], - requires: [], - onBeforeCapture({ engine, attacker, target }) { - const session = engine.session; - const attackerTypeFact = session.allFacts().find((f) => f.id === attacker && f.attr === "PieceType"); - if (attackerTypeFact?.value !== "rook") return; - const targetPos = session.get(target, "Position"); - if (targetPos === void 0) return; - const targetFile = (0,__vite_ssr_import_1__.fileOf)(targetPos); - const targetRank = (0,__vite_ssr_import_1__.rankOf)(targetPos); - const victims = []; - victims.push(target); - for (let d = 1; d <= DETONATION_RADIUS; d++) { - for (const [df, dr] of [ - [d, 0], - [-d, 0], - [0, d], - [0, -d] - ]) { - const f = targetFile + df; - const r = targetRank + dr; - if (f < 0 || f > 7 || r < 0 || r > 7) continue; - const sq = (0,__vite_ssr_import_1__.squareOf)(f, r); - const id = pieceAtSquare(session, sq); - if (id === null) continue; - if (id === attacker) continue; - if (id === target) continue; - victims.push(id); - } - }; - const { died: targetDied } = engine.dealDamage(target, 1, { - kind: "explosion", - attacker - }); - for (const v of victims) { - if (v === target) continue; - engine.dealDamage(v, 1, { kind: "explosion", attacker }); - }; - engine.emitEffect({ - kind: "explosion", - square: targetPos, - ttl: 600, - data: { radius: DETONATION_RADIUS, victimCount: victims.length } - }); - if (targetDied) { - session.insert(attacker, "Position", targetPos); - session.insert(attacker, "HasMoved", true); - }; - return { consume: true }; - } -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBdUJBO0FBRUE7QUFHQSxNQUFNLG9CQUFvQjtBQUUxQixTQUFTLGNBQWMsU0FBa0IsSUFBNkI7QUFDcEUsUUFBTSxRQUFRLFFBQVEsU0FBUztBQUMvQixhQUFXLEtBQUssT0FBTztBQUNyQixRQUFJLEVBQUUsU0FBUyxjQUFjLEVBQUUsVUFBVSxNQUFPLEVBQUUsS0FBZ0IsR0FBRztBQUNuRSxhQUFPLEVBQUU7QUFBQSxJQUNYO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDtBQUVBLHNDQUFnQixTQUFTO0FBQUEsRUFDdkIsSUFBSTtBQUFBLEVBQ0osTUFBTTtBQUFBLEVBQ04sYUFDRTtBQUFBLEVBQ0Ysa0JBQWtCLENBQUM7QUFBQSxFQUNuQixVQUFVLENBQUM7QUFBQSxFQUVYLGdCQUFnQixFQUFFLFFBQVEsVUFBVSxPQUFPLEdBQUc7QUFDNUMsVUFBTSxVQUFVLE9BQU87QUFDdkIsVUFBTSxtQkFBbUIsUUFDdEIsU0FBUyxFQUNULEtBQUssT0FBSyxFQUFFLE9BQU8sWUFBWSxFQUFFLFNBQVMsV0FBVztBQUN4RCxRQUFJLGtCQUFrQixVQUFVLE9BQVE7QUFFeEMsVUFBTSxZQUFZLFFBQVEsSUFBSSxRQUFRLFVBQVU7QUFDaEQsUUFBSSxjQUFjLE9BQVc7QUFFN0IsVUFBTSxnQkFBYSw4QkFBTyxTQUFTO0FBQ25DLFVBQU0sZ0JBQWEsOEJBQU8sU0FBUztBQU9uQyxVQUFNLFVBQXNCLENBQUM7QUFDN0IsWUFBUSxLQUFLLE1BQU07QUFFbkIsYUFBUyxJQUFJLEdBQUcsS0FBSyxtQkFBbUIsS0FBSztBQUMzQyxpQkFBVyxDQUFDLElBQUksRUFBRSxLQUFLO0FBQUEsUUFDckIsQ0FBQyxHQUFHLENBQUM7QUFBQSxRQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFBQSxRQUFHLENBQUMsR0FBRyxDQUFDO0FBQUEsUUFBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQUEsTUFDakMsR0FBWTtBQUNWLGNBQU0sSUFBSSxhQUFhO0FBQ3ZCLGNBQU0sSUFBSSxhQUFhO0FBQ3ZCLFlBQUksSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxFQUFHO0FBQ3RDLGNBQU0sUUFBSyxnQ0FBUyxHQUFHLENBQUM7QUFDeEIsY0FBTSxLQUFLLGNBQWMsU0FBUyxFQUFFO0FBQ3BDLFlBQUksT0FBTyxLQUFNO0FBQ2pCLFlBQUksT0FBTyxTQUFVO0FBQ3JCLFlBQUksT0FBTyxPQUFRO0FBQ25CLGdCQUFRLEtBQUssRUFBRTtBQUFBLE1BQ2pCO0FBQUEsSUFDRjtBQU1BLFVBQU0sRUFBRSxNQUFNLFdBQVcsSUFBSSxPQUFPLFdBQVcsUUFBUSxHQUFHO0FBQUEsTUFDeEQsTUFBTTtBQUFBLE1BQ047QUFBQSxJQUNGLENBQUM7QUFDRCxlQUFXLEtBQUssU0FBUztBQUN2QixVQUFJLE1BQU0sT0FBUTtBQUNsQixhQUFPLFdBQVcsR0FBRyxHQUFHLEVBQUUsTUFBTSxhQUFhLFNBQVMsQ0FBQztBQUFBLElBQ3pEO0FBS0EsV0FBTyxXQUFXO0FBQUEsTUFDaEIsTUFBTTtBQUFBLE1BQ04sUUFBUTtBQUFBLE1BQ1IsS0FBSztBQUFBLE1BQ0wsTUFBTSxFQUFFLFFBQVEsbUJBQW1CLGFBQWEsUUFBUSxPQUFPO0FBQUEsSUFDakUsQ0FBQztBQU9ELFFBQUksWUFBWTtBQUNkLGNBQVEsT0FBTyxVQUFVLFlBQVksU0FBUztBQUM5QyxjQUFRLE9BQU8sVUFBVSxZQUFZLElBQUk7QUFBQSxJQUMzQztBQUVBLFdBQU8sRUFBRSxTQUFTLEtBQUs7QUFBQSxFQUN6QjtBQUNGLENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImV4cGxvc2l2ZS1yb29rLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHJlc2V0OiBgZXhwbG9zaXZlLXJvb2tgIChEZXRvbmF0aW5nIFJvb2ssIFJVTEVTLm1kIHJ1bGUgIzEwKVxuICpcbiAqIFdoZW4gYSByb29rIGNhcHR1cmVzLCBpdCBkZXRvbmF0ZXMgb24gdGhlIHRhcmdldCBzcXVhcmUsIGRlYWxpbmcgMVxuICogZGFtYWdlIHRvIGV2ZXJ5IHBpZWNlIChmcmllbmRseSBvciBlbmVteSwgZXhjbHVkaW5nIHRoZSBjYXB0dXJpbmdcbiAqIHJvb2sgaXRzZWxmKSB3aXRoaW4gQ2hlYnlzaGV2IGRpc3RhbmNlIDw9IDIgb24gdGhlIHNhbWUgcmFuayBvclxuICogZmlsZS4gRGlhZ29uYWwgbmVpZ2hib3VycyBhcmUgTk9UIGFmZmVjdGVkIOKAlCBkZXRvbmF0aW9uIHByb3BhZ2F0ZXNcbiAqIGFsb25nIG9ydGhvZ29uYWwgcmF5cyBvbmx5LCBtYXRjaGluZyB0aGUgcm9vaydzIG93biBtb3ZlbWVudC5cbiAqXG4gKiBDb21wb3NlcyB3aXRoIEhQXG4gKiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAqIERhbWFnZSBpcyBhcHBsaWVkIHZpYSBgZW5naW5lLmRlYWxEYW1hZ2UoKWAgcmF0aGVyIHRoYW4gZGlyZWN0XG4gKiByZXRyYWN0aW9uLiBXaXRob3V0IEhQLCAxIGRhbWFnZSBraWxscyBpbnN0YW50bHkgKGVuZ2luZSBkZWZhdWx0KS5cbiAqIFdpdGggSFAgYWN0aXZlLCBldmVyeSB2aWN0aW0gdGFrZXMgMSBIUCBhbmQgc3Vydml2ZXMgaWYgaXQgaGFkID4xXG4gKiBIUCDigJQgc28gY29tYmluaW5nIEhpdCBQb2ludHMgd2l0aCBEZXRvbmF0aW5nIFJvb2sgcHJvZHVjZXMgYVxuICogbmF0dXJhbCBcImNoaXAgZGFtYWdlIGJsYXN0XCIgcmF0aGVyIHRoYW4gYmVpbmcgaW1wb3NzaWJsZS4gVGhpcyBpc1xuICogdGhlIHdob2xlIHBvaW50IG9mIHRoZSBkYW1hZ2UgcGlwZWxpbmU6IHByZXNldHMgZG9uJ3Qga25vdyBhYm91dCBIUCxcbiAqIGFuZCBIUCBkb2Vzbid0IGtub3cgYWJvdXQgdGhlbS5cbiAqXG4gKiBFeHBsb3Npb24gZG9lcyBOT1QgY2hhaW4g4oCUIGlmIGEgY2FwdHVyZWQgcGllY2UgaGFwcGVuZWQgdG8gYmUgYVxuICogc2Vjb25kIHJvb2ssIGl0cyBkZXRvbmF0aW9uIGRvZXMgbm90IHJlLXRyaWdnZXIuIEtlZXBpbmcgdGhlXG4gKiBtZWNoYW5pYyBmaW5pdGUuXG4gKi9cbmltcG9ydCB7IFBSRVNFVF9SRUdJU1RSWSB9IGZyb20gXCIuL3JlZ2lzdHJ5LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNlc3Npb24sIEVudGl0eUlkIH0gZnJvbSBcIkBwYXJhdHlwZS9yZXRlXCI7XG5pbXBvcnQgeyBmaWxlT2YsIHJhbmtPZiwgc3F1YXJlT2YgfSBmcm9tIFwiLi4vY29vcmQuanNcIjtcbmltcG9ydCB0eXBlIHsgU3F1YXJlIH0gZnJvbSBcIi4uL3NjaGVtYS5qc1wiO1xuXG5jb25zdCBERVRPTkFUSU9OX1JBRElVUyA9IDI7XG5cbmZ1bmN0aW9uIHBpZWNlQXRTcXVhcmUoc2Vzc2lvbjogU2Vzc2lvbiwgc3E6IFNxdWFyZSk6IEVudGl0eUlkIHwgbnVsbCB7XG4gIGNvbnN0IGZhY3RzID0gc2Vzc2lvbi5hbGxGYWN0cygpO1xuICBmb3IgKGNvbnN0IGYgb2YgZmFjdHMpIHtcbiAgICBpZiAoZi5hdHRyID09PSBcIlBvc2l0aW9uXCIgJiYgZi52YWx1ZSA9PT0gc3EgJiYgKGYuaWQgYXMgbnVtYmVyKSA+IDApIHtcbiAgICAgIHJldHVybiBmLmlkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuUFJFU0VUX1JFR0lTVFJZLnJlZ2lzdGVyKHtcbiAgaWQ6IFwiZXhwbG9zaXZlLXJvb2tcIixcbiAgbmFtZTogXCJEZXRvbmF0aW5nIFJvb2tcIixcbiAgZGVzY3JpcHRpb246XG4gICAgXCJXaGVuIGEgUm9vayBjYXB0dXJlcywgaXQgZGV0b25hdGVzOiBldmVyeSBwaWVjZSB3aXRoaW4gMiBzcXVhcmVzIG9uIHRoZSBzYW1lIHJhbmsgb3IgZmlsZSB0YWtlcyAxIGRhbWFnZSAoZnJpZW5kIGFuZCBmb2UgYWxpa2UpLiBEaWFnb25hbHMgYXJlIHNwYXJlZC4gQ29tcG9zZXMgd2l0aCBIaXQgUG9pbnRzIOKAlCBwaWVjZXMgd2l0aCBIUD4xIHN1cnZpdmUgdGhlIGJsYXN0LlwiLFxuICBpbmNvbXBhdGlibGVXaXRoOiBbXSxcbiAgcmVxdWlyZXM6IFtdLFxuXG4gIG9uQmVmb3JlQ2FwdHVyZSh7IGVuZ2luZSwgYXR0YWNrZXIsIHRhcmdldCB9KSB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGVuZ2luZS5zZXNzaW9uO1xuICAgIGNvbnN0IGF0dGFja2VyVHlwZUZhY3QgPSBzZXNzaW9uXG4gICAgICAuYWxsRmFjdHMoKVxuICAgICAgLmZpbmQoZiA9PiBmLmlkID09PSBhdHRhY2tlciAmJiBmLmF0dHIgPT09IFwiUGllY2VUeXBlXCIpO1xuICAgIGlmIChhdHRhY2tlclR5cGVGYWN0Py52YWx1ZSAhPT0gXCJyb29rXCIpIHJldHVybjsgLy8gZGVmYXVsdCBjYXB0dXJlIHJ1bnNcblxuICAgIGNvbnN0IHRhcmdldFBvcyA9IHNlc3Npb24uZ2V0KHRhcmdldCwgXCJQb3NpdGlvblwiKSBhcyBTcXVhcmUgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHRhcmdldFBvcyA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cbiAgICBjb25zdCB0YXJnZXRGaWxlID0gZmlsZU9mKHRhcmdldFBvcyk7XG4gICAgY29uc3QgdGFyZ2V0UmFuayA9IHJhbmtPZih0YXJnZXRQb3MpO1xuXG4gICAgLy8gQ29sbGVjdCBkZXRvbmF0aW9uIHZpY3RpbXMgKG9ydGhvZ29uYWwgbmVpZ2hib3VycyB3aXRoaW4gcmFkaXVzKVxuICAgIC8vIEJFRk9SRSBkZWFsaW5nIGFueSBkYW1hZ2Ug4oCUIHdlIHNuYXBzaG90IHRoZSBQb3NpdGlvbi1mYWN0c1xuICAgIC8vIGJlY2F1c2UgZGVhbERhbWFnZSBtYXkgcmV0cmFjdCBwaWVjZXMgbWlkLWxvb3AsIHdoaWNoIHdvdWxkXG4gICAgLy8gb3RoZXJ3aXNlIG1lc3MgdXAgaXRlcmF0aW9uIG9yZGVyLiBUaGUgYXR0YWNrZXIgaXMgYWx3YXlzXG4gICAgLy8gZXhjbHVkZWQuIFRoZSB0YXJnZXQgKGNlbnRyZSBvZiBibGFzdCkgaXMgaW5jbHVkZWQuXG4gICAgY29uc3QgdmljdGltczogRW50aXR5SWRbXSA9IFtdO1xuICAgIHZpY3RpbXMucHVzaCh0YXJnZXQpO1xuXG4gICAgZm9yIChsZXQgZCA9IDE7IGQgPD0gREVUT05BVElPTl9SQURJVVM7IGQrKykge1xuICAgICAgZm9yIChjb25zdCBbZGYsIGRyXSBvZiBbXG4gICAgICAgIFtkLCAwXSwgWy1kLCAwXSwgWzAsIGRdLCBbMCwgLWRdLFxuICAgICAgXSBhcyBjb25zdCkge1xuICAgICAgICBjb25zdCBmID0gdGFyZ2V0RmlsZSArIGRmO1xuICAgICAgICBjb25zdCByID0gdGFyZ2V0UmFuayArIGRyO1xuICAgICAgICBpZiAoZiA8IDAgfHwgZiA+IDcgfHwgciA8IDAgfHwgciA+IDcpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBzcSA9IHNxdWFyZU9mKGYsIHIpIGFzIFNxdWFyZTtcbiAgICAgICAgY29uc3QgaWQgPSBwaWVjZUF0U3F1YXJlKHNlc3Npb24sIHNxKTtcbiAgICAgICAgaWYgKGlkID09PSBudWxsKSBjb250aW51ZTtcbiAgICAgICAgaWYgKGlkID09PSBhdHRhY2tlcikgY29udGludWU7XG4gICAgICAgIGlmIChpZCA9PT0gdGFyZ2V0KSBjb250aW51ZTsgLy8gYWxyZWFkeSBhZGRlZFxuICAgICAgICB2aWN0aW1zLnB1c2goaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERhbWFnZSB0aGUgdGFyZ2V0IGZpcnN0IOKAlCB3ZSBjYXJlIHNwZWNpZmljYWxseSBhYm91dCB3aGV0aGVyXG4gICAgLy8gSVQgZGllZCwgdG8gZGVjaWRlIGlmIHRoZSByb29rIGFkdmFuY2VzIG9udG8gaXRzIHNxdWFyZS4gVGhlXG4gICAgLy8gb3RoZXIgdmljdGltcyBqdXN0IGdldCBzcHJheWVkIHdpdGggdGhlIGJsYXN0OyB3ZSBkb24ndCB0cmFja1xuICAgIC8vIHRoZWlyIHN1cnZpdmFsIGhlcmUuXG4gICAgY29uc3QgeyBkaWVkOiB0YXJnZXREaWVkIH0gPSBlbmdpbmUuZGVhbERhbWFnZSh0YXJnZXQsIDEsIHtcbiAgICAgIGtpbmQ6IFwiZXhwbG9zaW9uXCIsXG4gICAgICBhdHRhY2tlcixcbiAgICB9KTtcbiAgICBmb3IgKGNvbnN0IHYgb2YgdmljdGltcykge1xuICAgICAgaWYgKHYgPT09IHRhcmdldCkgY29udGludWU7IC8vIGFscmVhZHkgaGFuZGxlZFxuICAgICAgZW5naW5lLmRlYWxEYW1hZ2UodiwgMSwgeyBraW5kOiBcImV4cGxvc2lvblwiLCBhdHRhY2tlciB9KTtcbiAgICB9XG5cbiAgICAvLyBGaXJlIGEgdmlzdWFsIGVmZmVjdCBhbmNob3JlZCBvbiB0aGUgZGV0b25hdGlvbiBzcXVhcmUuIFRoZSBVSVxuICAgIC8vIGxheWVyIHJlbmRlcnMgdGhpcyBhcyBhIGJyaWVmIGJsYXN0IG92ZXJsYXkuIEZpcmUtYW5kLWZvcmdldCDigJRcbiAgICAvLyBubyBzdWJzY3JpYmVycyA9IG5vLW9wLCBzbyB0ZXN0cyBhbmQgaGVhZGxlc3MgcnVucyBwYXkgbm90aGluZy5cbiAgICBlbmdpbmUuZW1pdEVmZmVjdCh7XG4gICAgICBraW5kOiBcImV4cGxvc2lvblwiLFxuICAgICAgc3F1YXJlOiB0YXJnZXRQb3MsXG4gICAgICB0dGw6IDYwMCxcbiAgICAgIGRhdGE6IHsgcmFkaXVzOiBERVRPTkFUSU9OX1JBRElVUywgdmljdGltQ291bnQ6IHZpY3RpbXMubGVuZ3RoIH0sXG4gICAgfSk7XG5cbiAgICAvLyBBZHZhbmNlIHRoZSByb29rIG9ubHkgaWYgdGhlIHRhcmdldCBkaWVkIOKAlCBtYXRjaGVzIEhQJ3MgZ2VuZXJhbFxuICAgIC8vIFwibm9uLWxldGhhbCBjYXB0dXJlID0gYXR0YWNrZXIgc3RheXNcIiBzZW1hbnRpY3MuIFdpdGhvdXQgSFAsXG4gICAgLy8gdGFyZ2V0RGllZCBpcyBhbHdheXMgdHJ1ZSBzbyB0aGUgcm9vayBhbHdheXMgYWR2YW5jZXMgKHN0YW5kYXJkXG4gICAgLy8gZGV0b25hdGluZy1yb29rIGJlaGF2aW91cikuIFdpdGggSFAsIGEgdGFyZ2V0IHRoYXQgYWJzb3JiZWQgdGhlXG4gICAgLy8gaGl0IGtlZXBzIHRoZSByb29rIG9mZiB0aGUgc3F1YXJlLlxuICAgIGlmICh0YXJnZXREaWVkKSB7XG4gICAgICBzZXNzaW9uLmluc2VydChhdHRhY2tlciwgXCJQb3NpdGlvblwiLCB0YXJnZXRQb3MpO1xuICAgICAgc2Vzc2lvbi5pbnNlcnQoYXR0YWNrZXIsIFwiSGFzTW92ZWRcIiwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY29uc3VtZTogdHJ1ZSB9O1xuICB9LFxufSk7XG4iXSwiZmlsZSI6Ii9zcmMvcHJlc2V0cy9leHBsb3NpdmUtcm9vay50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/a11415dcae5aabd4b08e8a454dac5ae255d5e2be b/7xOfJqsDU787fe61oSCq1/web/a11415dcae5aabd4b08e8a454dac5ae255d5e2be deleted file mode 100644 index 0197529..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/a11415dcae5aabd4b08e8a454dac5ae255d5e2be +++ /dev/null @@ -1,148 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "toFen", { enumerable: true, configurable: true, get(){ try { return toFen } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "fromFen", { enumerable: true, configurable: true, get(){ try { return fromFen } catch {} }}); -const FIDE_LETTER_OF_TYPE = /* @__PURE__ */ new Map([ - ["pawn", "p"], - ["knight", "n"], - ["bishop", "b"], - ["rook", "r"], - ["queen", "q"], - ["king", "k"] -]); -const TYPE_OF_FIDE_LETTER = /* @__PURE__ */ new Map([ - ["p", "pawn"], - ["n", "knight"], - ["b", "bishop"], - ["r", "rook"], - ["q", "queen"], - ["k", "king"] -]); -const BOARD_FILES = 8; -const BOARD_RANKS = 8; -const BOARD_SQUARES = BOARD_FILES * BOARD_RANKS; -function toFen(pieces) { - const board = new Array(BOARD_SQUARES); - for (const p of pieces) { - if (p.square < 0 || p.square >= BOARD_SQUARES) { - continue; - }; - board[p.square] = p; - }; - const rankStrings = []; - for (let rank = BOARD_RANKS - 1; rank >= 0; rank--) { - let s = ""; - let emptyRun = 0; - for (let file = 0; file < BOARD_FILES; file++) { - const sq = rank * BOARD_FILES + file; - const piece = board[sq]; - if (piece === void 0) { - emptyRun++; - } else { - if (emptyRun > 0) { - s += String(emptyRun); - emptyRun = 0; - }; - s += toFenSymbol(piece.type, piece.color); - } - }; - if (emptyRun > 0) s += String(emptyRun); - rankStrings.push(s); - }; - return rankStrings.join("/"); -}; -function toFenSymbol(type, color) { - const fide = FIDE_LETTER_OF_TYPE.get(type); - if (fide !== void 0) { - return color === "white" ? fide.toUpperCase() : fide; - }; - if (color === "white") { - return "{" + capitalize(String(type)) + "}"; - }; - return "{" + String(type).toLowerCase() + "}"; -} -function capitalize(s) { - if (s.length === 0) return s; - return s[0].toUpperCase() + s.slice(1); -} -function fromFen(fen) { - const errors = []; - const trimmed = fen.trim(); - if (trimmed === "") { - return { pieces: [], errors: ["Empty FEN string."] }; - }; - const placementField = trimmed.split(/\s+/)[0] ?? ""; - const rankTokens = placementField.split("/"); - if (rankTokens.length !== BOARD_RANKS) { - errors.push( - `Expected ${BOARD_RANKS} ranks separated by '/', got ${rankTokens.length}.` - ); - }; - const pieces = []; - for (let tokenIdx = 0; tokenIdx < Math.min(rankTokens.length, BOARD_RANKS); tokenIdx++) { - const rankFromTop = tokenIdx; - const rankIdx = BOARD_RANKS - 1 - rankFromTop; - const token = rankTokens[tokenIdx]; - let file = 0; - let i = 0; - while (i < token.length) { - if (file >= BOARD_FILES) { - errors.push( - `Rank ${rankIdx + 1}: more than ${BOARD_FILES} squares described.` - ); - break; - }; - const ch = token[i]; - if (/[1-8]/.test(ch)) { - file += Number.parseInt(ch, 10); - i++; - continue; - }; - if (ch === "{") { - const close = token.indexOf("}", i + 1); - if (close === -1) { - errors.push( - `Rank ${rankIdx + 1}: unterminated '{' at position ${i}.` - ); - break; - }; - const inner = token.slice(i + 1, close); - const isWhite2 = inner.length > 0 && /[A-Z]/.test(inner[0]); - const typeId = inner.toLowerCase(); - pieces.push({ - type: typeId, - // caller resolves via PIECE_TYPE_REGISTRY - color: isWhite2 ? "white" : "black", - square: rankIdx * BOARD_FILES + file - }); - file++; - i = close + 1; - continue; - }; - const lower = ch.toLowerCase(); - const type = TYPE_OF_FIDE_LETTER.get(lower); - if (type === void 0) { - errors.push( - `Rank ${rankIdx + 1}: unknown FEN symbol '${ch}' at position ${i}.` - ); - i++; - continue; - }; - const isWhite = ch === ch.toUpperCase(); - pieces.push({ - type, - color: isWhite ? "white" : "black", - square: rankIdx * BOARD_FILES + file - }); - file++; - i++; - }; - if (file !== BOARD_FILES && errors.length === 0) { - errors.push( - `Rank ${rankIdx + 1}: described ${file} squares, expected ${BOARD_FILES}.` - ); - } - }; - return { pieces, errors }; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7QUFxREEsTUFBTSxzQkFBc0Qsb0JBQUksSUFBSTtBQUFBLEVBQ2xFLENBQUMsUUFBUSxHQUFHO0FBQUEsRUFDWixDQUFDLFVBQVUsR0FBRztBQUFBLEVBQ2QsQ0FBQyxVQUFVLEdBQUc7QUFBQSxFQUNkLENBQUMsUUFBUSxHQUFHO0FBQUEsRUFDWixDQUFDLFNBQVMsR0FBRztBQUFBLEVBQ2IsQ0FBQyxRQUFRLEdBQUc7QUFDZCxDQUFVO0FBR1YsTUFBTSxzQkFBc0Qsb0JBQUksSUFBSTtBQUFBLEVBQ2xFLENBQUMsS0FBSyxNQUFNO0FBQUEsRUFDWixDQUFDLEtBQUssUUFBUTtBQUFBLEVBQ2QsQ0FBQyxLQUFLLFFBQVE7QUFBQSxFQUNkLENBQUMsS0FBSyxNQUFNO0FBQUEsRUFDWixDQUFDLEtBQUssT0FBTztBQUFBLEVBQ2IsQ0FBQyxLQUFLLE1BQU07QUFDZCxDQUFVO0FBRVYsTUFBTSxjQUFjO0FBQ3BCLE1BQU0sY0FBYztBQUNwQixNQUFNLGdCQUFnQixjQUFjO0FBYzdCLFNBQVMsTUFBTSxRQUEyQztBQUUvRCxRQUFNLFFBQXdDLElBQUksTUFBTSxhQUFhO0FBQ3JFLGFBQVcsS0FBSyxRQUFRO0FBQ3RCLFFBQUksRUFBRSxTQUFTLEtBQUssRUFBRSxVQUFVLGVBQWU7QUFJN0M7QUFBQSxJQUNGO0FBQ0EsVUFBTSxFQUFFLE1BQU0sSUFBSTtBQUFBLEVBQ3BCO0FBRUEsUUFBTSxjQUF3QixDQUFDO0FBRS9CLFdBQVMsT0FBTyxjQUFjLEdBQUcsUUFBUSxHQUFHLFFBQVE7QUFDbEQsUUFBSSxJQUFJO0FBQ1IsUUFBSSxXQUFXO0FBQ2YsYUFBUyxPQUFPLEdBQUcsT0FBTyxhQUFhLFFBQVE7QUFDN0MsWUFBTSxLQUFLLE9BQU8sY0FBYztBQUNoQyxZQUFNLFFBQVEsTUFBTSxFQUFFO0FBQ3RCLFVBQUksVUFBVSxRQUFXO0FBQ3ZCO0FBQUEsTUFDRixPQUFPO0FBQ0wsWUFBSSxXQUFXLEdBQUc7QUFDaEIsZUFBSyxPQUFPLFFBQVE7QUFDcEIscUJBQVc7QUFBQSxRQUNiO0FBQ0EsYUFBSyxZQUFZLE1BQU0sTUFBTSxNQUFNLEtBQUs7QUFBQSxNQUMxQztBQUFBLElBQ0Y7QUFDQSxRQUFJLFdBQVcsRUFBRyxNQUFLLE9BQU8sUUFBUTtBQUN0QyxnQkFBWSxLQUFLLENBQUM7QUFBQSxFQUNwQjtBQUNBLFNBQU8sWUFBWSxLQUFLLEdBQUc7QUFDN0I7QUFRQSxTQUFTLFlBQVksTUFBMEIsT0FBMkI7QUFDeEUsUUFBTSxPQUFPLG9CQUFvQixJQUFJLElBQWlCO0FBQ3RELE1BQUksU0FBUyxRQUFXO0FBQ3RCLFdBQU8sVUFBVSxVQUFVLEtBQUssWUFBWSxJQUFJO0FBQUEsRUFDbEQ7QUFJQSxNQUFJLFVBQVUsU0FBUztBQUNyQixXQUFPLE1BQU0sV0FBVyxPQUFPLElBQUksQ0FBQyxJQUFJO0FBQUEsRUFDMUM7QUFDQSxTQUFPLE1BQU0sT0FBTyxJQUFJLEVBQUUsWUFBWSxJQUFJO0FBQzVDO0FBRUEsU0FBUyxXQUFXLEdBQW1CO0FBQ3JDLE1BQUksRUFBRSxXQUFXLEVBQUcsUUFBTztBQUMzQixTQUFPLEVBQUUsQ0FBQyxFQUFHLFlBQVksSUFBSSxFQUFFLE1BQU0sQ0FBQztBQUN4QztBQW1CTyxTQUFTLFFBQVEsS0FHdEI7QUFDQSxRQUFNLFNBQW1CLENBQUM7QUFDMUIsUUFBTSxVQUFVLElBQUksS0FBSztBQUN6QixNQUFJLFlBQVksSUFBSTtBQUNsQixXQUFPLEVBQUUsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLG1CQUFtQixFQUFFO0FBQUEsRUFDckQ7QUFHQSxRQUFNLGlCQUFpQixRQUFRLE1BQU0sS0FBSyxFQUFFLENBQUMsS0FBSztBQUNsRCxRQUFNLGFBQWEsZUFBZSxNQUFNLEdBQUc7QUFDM0MsTUFBSSxXQUFXLFdBQVcsYUFBYTtBQUNyQyxXQUFPO0FBQUEsTUFDTCxZQUFZLFdBQVcsZ0NBQWdDLFdBQVcsTUFBTTtBQUFBLElBQzFFO0FBQUEsRUFFRjtBQUVBLFFBQU0sU0FBMkIsQ0FBQztBQUdsQyxXQUNNLFdBQVcsR0FDZixXQUFXLEtBQUssSUFBSSxXQUFXLFFBQVEsV0FBVyxHQUNsRCxZQUNBO0FBQ0EsVUFBTSxjQUFjO0FBQ3BCLFVBQU0sVUFBVSxjQUFjLElBQUk7QUFDbEMsVUFBTSxRQUFRLFdBQVcsUUFBUTtBQUVqQyxRQUFJLE9BQU87QUFDWCxRQUFJLElBQUk7QUFDUixXQUFPLElBQUksTUFBTSxRQUFRO0FBQ3ZCLFVBQUksUUFBUSxhQUFhO0FBQ3ZCLGVBQU87QUFBQSxVQUNMLFFBQVEsVUFBVSxDQUFDLGVBQWUsV0FBVztBQUFBLFFBQy9DO0FBQ0E7QUFBQSxNQUNGO0FBRUEsWUFBTSxLQUFLLE1BQU0sQ0FBQztBQUdsQixVQUFJLFFBQVEsS0FBSyxFQUFFLEdBQUc7QUFDcEIsZ0JBQVEsT0FBTyxTQUFTLElBQUksRUFBRTtBQUM5QjtBQUNBO0FBQUEsTUFDRjtBQUdBLFVBQUksT0FBTyxLQUFLO0FBQ2QsY0FBTSxRQUFRLE1BQU0sUUFBUSxLQUFLLElBQUksQ0FBQztBQUN0QyxZQUFJLFVBQVUsSUFBSTtBQUNoQixpQkFBTztBQUFBLFlBQ0wsUUFBUSxVQUFVLENBQUMsa0NBQWtDLENBQUM7QUFBQSxVQUN4RDtBQUNBO0FBQUEsUUFDRjtBQUNBLGNBQU0sUUFBUSxNQUFNLE1BQU0sSUFBSSxHQUFHLEtBQUs7QUFDdEMsY0FBTUEsV0FBVSxNQUFNLFNBQVMsS0FBSyxRQUFRLEtBQUssTUFBTSxDQUFDLENBQUU7QUFDMUQsY0FBTSxTQUFTLE1BQU0sWUFBWTtBQUNqQyxlQUFPLEtBQUs7QUFBQSxVQUNWLE1BQU07QUFBQTtBQUFBLFVBQ04sT0FBT0EsV0FBVSxVQUFVO0FBQUEsVUFDM0IsUUFBUyxVQUFVLGNBQWM7QUFBQSxRQUNuQyxDQUFDO0FBQ0Q7QUFDQSxZQUFJLFFBQVE7QUFDWjtBQUFBLE1BQ0Y7QUFHQSxZQUFNLFFBQVEsR0FBRyxZQUFZO0FBQzdCLFlBQU0sT0FBTyxvQkFBb0IsSUFBSSxLQUFLO0FBQzFDLFVBQUksU0FBUyxRQUFXO0FBQ3RCLGVBQU87QUFBQSxVQUNMLFFBQVEsVUFBVSxDQUFDLHlCQUF5QixFQUFFLGlCQUFpQixDQUFDO0FBQUEsUUFDbEU7QUFDQTtBQUNBO0FBQUEsTUFDRjtBQUNBLFlBQU0sVUFBVSxPQUFPLEdBQUcsWUFBWTtBQUN0QyxhQUFPLEtBQUs7QUFBQSxRQUNWO0FBQUEsUUFDQSxPQUFPLFVBQVUsVUFBVTtBQUFBLFFBQzNCLFFBQVMsVUFBVSxjQUFjO0FBQUEsTUFDbkMsQ0FBQztBQUNEO0FBQ0E7QUFBQSxJQUNGO0FBRUEsUUFBSSxTQUFTLGVBQWUsT0FBTyxXQUFXLEdBQUc7QUFHL0MsYUFBTztBQUFBLFFBQ0wsUUFBUSxVQUFVLENBQUMsZUFBZSxJQUFJLHNCQUFzQixXQUFXO0FBQUEsTUFDekU7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFNBQU8sRUFBRSxRQUFRLE9BQU87QUFDMUIiLCJuYW1lcyI6WyJpc1doaXRlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImZlbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZFTiBwaWVjZS1wbGFjZW1lbnQgZW5jb2RpbmcgLyBkZWNvZGluZy5cbiAqXG4gKiBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBGSVJTVCBmaWVsZCBvZiBhIEZvcnN5dGgtRWR3YXJkc1xuICogTm90YXRpb24gcmVjb3JkIOKAlCB0aGUgcGllY2UgcGxhY2VtZW50LiBXZSBpbnRlbnRpb25hbGx5IERPIE5PVFxuICogcGFyc2UgdGhlIG90aGVyIGZpZWxkcyAoc2lkZSB0byBtb3ZlLCBjYXN0bGluZyByaWdodHMsIGVuLXBhc3NhbnRcbiAqIHRhcmdldCwgaGFsZm1vdmUgY2xvY2ssIGZ1bGxtb3ZlIG51bWJlcik6XG4gKlxuICogICAtIFNpZGUtdG8tbW92ZTogYSBsYXlvdXQgaXMgdGhlIElOSVRJQUwgYm9hcmQ7IHRoZSBlbmdpbmUgYWx3YXlzXG4gKiAgICAgc3RhcnRzIHdpdGggd2hpdGUgdG8gbW92ZS4gQSBsYXlvdXQgYXNzZXJ0aW5nIFwiYmxhY2sgdG8gbW92ZVxuICogICAgIGZpcnN0XCIgaXMgYSBjb25jZXB0dWFsbHktZGlmZmVyZW50IGZlYXR1cmUgKHR1cm4tb3JkZXJcbiAqICAgICBvdmVycmlkZSkgYW5kIGJlbG9uZ3MgaW4gYSBmdXR1cmUgcHJlc2V0LlxuICogICAtIENhc3RsaW5nIC8gZW4tcGFzc2FudDogdGhlc2UgZGVwZW5kIG9uIGBIYXNNb3ZlZGAgZmxhZ3Mgd2hpY2hcbiAqICAgICB0aGUgbGF5b3V0IGNhcnJpZXMgZXhwbGljaXRseSB2aWEgYFBpZWNlUGxhY2VtZW50Lmhhc01vdmVkYCxcbiAqICAgICBhbmQgb24gZ2FtZS1zdGF0ZSB0cmFja2luZyB3aGljaCBzdGFydHMgZnJlc2guIEFueSBGRU5cbiAqICAgICBwYXN0ZWQgZnJvbSBhbiBpbi1wcm9ncmVzcyBnYW1lIHNob3VsZCBiZSB1c2FibGUgYXMgYSBzdGFydGluZ1xuICogICAgIGxheW91dCDigJQgd2UgaWdub3JlIHRoZSBjYXN0bGluZy1yaWdodHMgLyBlbi1wYXNzYW50IGZpZWxkcyBzb1xuICogICAgIHRoZSBwYXN0ZSBcImp1c3Qgd29ya3NcIiBhbmQgY2FzdGxpbmcgcmlnaHRzIGFyZSBpbmZlcnJlZCBmcm9tXG4gKiAgICAgZWFjaCBwaWVjZSdzIGN1cnJlbnQgcG9zaXRpb24gKGtpbmdzIC8gcm9va3Mgb24gdGhlaXIgaG9tZVxuICogICAgIHNxdWFyZXMgcmV0YWluIHJpZ2h0czsgb3RoZXJzIGxvc2UgdGhlbSB2aWEgYGhhc01vdmVkOiB0cnVlYCkuXG4gKiAgIC0gSGFsZm1vdmUgLyBmdWxsbW92ZSBjbG9ja3M6IGlycmVsZXZhbnQgZm9yIGEgc3RhcnRpbmcgbGF5b3V0O1xuICogICAgIHRoZSBlbmdpbmUgcmVzZXRzIHRoZW0gdG8gMCAvIDEuXG4gKlxuICogIyMgUmFuayBvcmRlclxuICpcbiAqIEZFTiBkZXNjcmliZXMgcmFua3MgZnJvbSA4ICh0b3ApIERPV04gdG8gMSAoYm90dG9tKS4gT3VyXG4gKiBzcXVhcmUgbnVtYmVyaW5nIGlzIHRoZSBvcHBvc2l0ZTogcmFuayAxID0gc3F1YXJlcyAwLTcgYXQgdGhlXG4gKiBzdGFydCwgcmFuayA4ID0gc3F1YXJlcyA1Ni02My4gV2UgdHJhbnNsYXRlIGNhcmVmdWxseS5cbiAqXG4gKiAjIyBDdXN0b20gcGllY2UgdHlwZXNcbiAqXG4gKiBTdGFuZGFyZCBGRU4gdXNlcyBvbmUtbGV0dGVyIHN5bWJvbHMgZm9yIEZJREUncyBzaXggcGllY2UgdHlwZXM6XG4gKlxuICogICBwPXBhd24sIG49a25pZ2h0LCBiPWJpc2hvcCwgcj1yb29rLCBxPXF1ZWVuLCBrPWtpbmdcbiAqICAgKGxvd2VyY2FzZSA9IGJsYWNrLCB1cHBlcmNhc2UgPSB3aGl0ZSlcbiAqXG4gKiBGb3Igbm9uLUZJREUgcGllY2UgdHlwZXMgcmVnaXN0ZXJlZCBpbiBgUElFQ0VfVFlQRV9SRUdJU1RSWWAgKGUuZy5cbiAqIENhbm5vbiwgTmlnaHRyaWRlciksIHdlIGZhbGwgYmFjayB0byBhIGRldGVybWluaXN0aWMgc2NoZW1lOlxuICogYnJhY2tldHMgYXJvdW5kIHRoZSBwaWVjZS10eXBlIGlkIOKAlCBge2Nhbm5vbn1gLCBge25pZ2h0cmlkZXJ9YC5cbiAqIFRoaXMga2VlcHMgRkVOcyByb3VuZC10cmlwcGFibGUgZm9yIGN1c3RvbSBwaWVjZXMgd2l0aG91dFxuICogY29sbGlkaW5nIHdpdGggdGhlIHN0YW5kYXJkIGFscGhhYmV0LiBSZWFkZXJzIHRoYXQgZG9uJ3RcbiAqIHVuZGVyc3RhbmQgYnJhY2tldGVkIGZvcm1zIHJlcG9ydCBhbiBlcnJvcjsgd3JpdGVycyBhbHdheXMgZW1pdFxuICogc3RhbmRhcmQgbGV0dGVycyB3aGVuIGEgcGllY2UtdHlwZSBpZCBtYXRjaGVzIGEgRklERSBsZXR0ZXIuXG4gKlxuICogTk9URTogYnJhY2tldCBlbmNvZGluZyBpcyBhIEhvdXNlcnVsZXMgZXh0ZW5zaW9uLCBOT1QgYSBGRU5cbiAqIHN0YW5kYXJkLiBGRU5zIHNoaXBwZWQgdG8gZXh0ZXJuYWwgdG9vbHMgKGxpY2hlc3MsIGNoZXNzLmNvbSlcbiAqIHdpbGwgbm90IGluY2x1ZGUgY3VzdG9tIHBpZWNlcy4gRm9yIGEgcHVyZS1GSURFIGxheW91dCwgdGhlXG4gKiBlbWl0dGVkIHN0cmluZyBpcyBmdWxseSBzdGFuZGFyZC5cbiAqL1xuaW1wb3J0IHR5cGUgeyBQaWVjZVR5cGUsIFBpZWNlQ29sb3IsIFNxdWFyZSB9IGZyb20gXCIuLi9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgUGllY2VQbGFjZW1lbnQgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuXG4vKiogTWFwIG9mIEZJREUgcGllY2UgdHlwZXMgdG8gdGhlaXIgRkVOIGxldHRlci4gKi9cbmNvbnN0IEZJREVfTEVUVEVSX09GX1RZUEU6IFJlYWRvbmx5TWFwPFBpZWNlVHlwZSwgc3RyaW5nPiA9IG5ldyBNYXAoW1xuICBbXCJwYXduXCIsIFwicFwiXSxcbiAgW1wia25pZ2h0XCIsIFwiblwiXSxcbiAgW1wiYmlzaG9wXCIsIFwiYlwiXSxcbiAgW1wicm9va1wiLCBcInJcIl0sXG4gIFtcInF1ZWVuXCIsIFwicVwiXSxcbiAgW1wia2luZ1wiLCBcImtcIl0sXG5dIGFzIGNvbnN0KTtcblxuLyoqIFJldmVyc2UgbG9va3VwOiBGRU4gbGV0dGVyIOKGkiBwaWVjZSB0eXBlLiBVcHBlcmNhc2UgPSB3aGl0ZS4gKi9cbmNvbnN0IFRZUEVfT0ZfRklERV9MRVRURVI6IFJlYWRvbmx5TWFwPHN0cmluZywgUGllY2VUeXBlPiA9IG5ldyBNYXAoW1xuICBbXCJwXCIsIFwicGF3blwiXSxcbiAgW1wiblwiLCBcImtuaWdodFwiXSxcbiAgW1wiYlwiLCBcImJpc2hvcFwiXSxcbiAgW1wiclwiLCBcInJvb2tcIl0sXG4gIFtcInFcIiwgXCJxdWVlblwiXSxcbiAgW1wia1wiLCBcImtpbmdcIl0sXG5dIGFzIGNvbnN0KTtcblxuY29uc3QgQk9BUkRfRklMRVMgPSA4O1xuY29uc3QgQk9BUkRfUkFOS1MgPSA4O1xuY29uc3QgQk9BUkRfU1FVQVJFUyA9IEJPQVJEX0ZJTEVTICogQk9BUkRfUkFOS1M7XG5cbi8qKlxuICogRW5jb2RlIHBsYWNlbWVudHMgYXMgYSBGRU4gcGllY2UtcGxhY2VtZW50IHN0cmluZy5cbiAqXG4gKiBFeGFtcGxlOiB0aGUgRklERSBzdGFydGluZyBwb3NpdGlvbiB5aWVsZHNcbiAqIGBcInJuYnFrYm5yL3BwcHBwcHBwLzgvOC84LzgvUFBQUFBQUFAvUk5CUUtCTlJcImAg4oCUIHJhbmtzIGZyb20gOCB0b1xuICogMSwgZW1wdHkgc3F1YXJlcyBydW4tbGVuZ3RoIGVuY29kZWQgYXMgYSBkZWNpbWFsIGNvdW50LlxuICpcbiAqIFBpZWNlcyBub3QgcmVwcmVzZW50YWJsZSBpbiBzdGFuZGFyZCBGSURFIGxldHRlcnMgZmFsbCBiYWNrIHRvXG4gKiBge3R5cGUtaWR9YCDigJQgZS5nLiBhIHdoaXRlIGNhbm5vbiBvbiBlNCBlbWl0cyBge2Nhbm5vbn1gIGluXG4gKiB1cHBlcmNhc2UgdmlhIHRoZSBoZWxwZXIgYHRvRmVuU3ltYm9sYC4gVGhpcyBpcyBhbiBpbnRlcm5hbFxuICogY29udmVudGlvbjsgc2VlIHRoZSBmaWxlIGhlYWRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvRmVuKHBpZWNlczogcmVhZG9ubHkgUGllY2VQbGFjZW1lbnRbXSk6IHN0cmluZyB7XG4gIC8vIEJ1aWxkIGEgc3BhcnNlIDY0LXNsb3QgYm9hcmQgaW5kZXhlZCBieSBzcXVhcmUuXG4gIGNvbnN0IGJvYXJkOiAoUGllY2VQbGFjZW1lbnQgfCB1bmRlZmluZWQpW10gPSBuZXcgQXJyYXkoQk9BUkRfU1FVQVJFUyk7XG4gIGZvciAoY29uc3QgcCBvZiBwaWVjZXMpIHtcbiAgICBpZiAocC5zcXVhcmUgPCAwIHx8IHAuc3F1YXJlID49IEJPQVJEX1NRVUFSRVMpIHtcbiAgICAgIC8vIE91dC1vZi1yYW5nZSBwbGFjZW1lbnRzIGFyZSBzaWxlbnRseSBkcm9wcGVkIGluIHRoZSBlbmNvZGVcbiAgICAgIC8vIHBhdGgg4oCUIHRoZSB2YWxpZGF0b3IgY2F0Y2hlcyB0aGVzZTsgdG9GZW4gaXMgYSBwdXJlIGVuY29kZXJcbiAgICAgIC8vIGFuZCBkb2Vzbid0IHRocm93IG9uIGJhZCBpbnB1dC5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBib2FyZFtwLnNxdWFyZV0gPSBwO1xuICB9XG5cbiAgY29uc3QgcmFua1N0cmluZ3M6IHN0cmluZ1tdID0gW107XG4gIC8vIEZFTiByYW5rczogOCBmaXJzdCwgMSBsYXN0LiBSYW5rIHIgb2NjdXBpZXMgc3F1YXJlcyBbcio4LCByKjgrN10uXG4gIGZvciAobGV0IHJhbmsgPSBCT0FSRF9SQU5LUyAtIDE7IHJhbmsgPj0gMDsgcmFuay0tKSB7XG4gICAgbGV0IHMgPSBcIlwiO1xuICAgIGxldCBlbXB0eVJ1biA9IDA7XG4gICAgZm9yIChsZXQgZmlsZSA9IDA7IGZpbGUgPCBCT0FSRF9GSUxFUzsgZmlsZSsrKSB7XG4gICAgICBjb25zdCBzcSA9IHJhbmsgKiBCT0FSRF9GSUxFUyArIGZpbGU7XG4gICAgICBjb25zdCBwaWVjZSA9IGJvYXJkW3NxXTtcbiAgICAgIGlmIChwaWVjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVtcHR5UnVuKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZW1wdHlSdW4gPiAwKSB7XG4gICAgICAgICAgcyArPSBTdHJpbmcoZW1wdHlSdW4pO1xuICAgICAgICAgIGVtcHR5UnVuID0gMDtcbiAgICAgICAgfVxuICAgICAgICBzICs9IHRvRmVuU3ltYm9sKHBpZWNlLnR5cGUsIHBpZWNlLmNvbG9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVtcHR5UnVuID4gMCkgcyArPSBTdHJpbmcoZW1wdHlSdW4pO1xuICAgIHJhbmtTdHJpbmdzLnB1c2gocyk7XG4gIH1cbiAgcmV0dXJuIHJhbmtTdHJpbmdzLmpvaW4oXCIvXCIpO1xufVxuXG4vKipcbiAqIEVuY29kZSBhIHNpbmdsZSBwaWVjZSBhcyBpdHMgRkVOIHN5bWJvbC5cbiAqXG4gKiBGSURFIHR5cGVzIHVzZSBzdGFuZGFyZCBsZXR0ZXJzIChsb3dlcmNhc2UgYmxhY2ssIHVwcGVyY2FzZSB3aGl0ZSkuXG4gKiBOb24tRklERSB0eXBlcyB1c2UgYHt0eXBlLWlkfWAgd2l0aCBjYXNlIGZsaXBwZWQgZm9yIGNvbG9yLlxuICovXG5mdW5jdGlvbiB0b0ZlblN5bWJvbCh0eXBlOiBQaWVjZVR5cGUgfCBzdHJpbmcsIGNvbG9yOiBQaWVjZUNvbG9yKTogc3RyaW5nIHtcbiAgY29uc3QgZmlkZSA9IEZJREVfTEVUVEVSX09GX1RZUEUuZ2V0KHR5cGUgYXMgUGllY2VUeXBlKTtcbiAgaWYgKGZpZGUgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjb2xvciA9PT0gXCJ3aGl0ZVwiID8gZmlkZS50b1VwcGVyQ2FzZSgpIDogZmlkZTtcbiAgfVxuICAvLyBDdXN0b20gcGllY2Ug4oCUIGVtaXQgYnJhY2tldGVkIGZvcm0uIENvbG9yIGlzIGVuY29kZWQgYnkgd3JhcHBpbmdcbiAgLy8gYnJhY2tldHM6IGB7Q2Fubm9ufWAgPSB3aGl0ZSwgYHtjYW5ub259YCA9IGJsYWNrIChsb3dlcmNhc2VcbiAgLy8gdHlwZS1pZCBmb3IgYmxhY2ssIGNhcGl0YWxpemVkIGZpcnN0IGxldHRlciBmb3Igd2hpdGUpLlxuICBpZiAoY29sb3IgPT09IFwid2hpdGVcIikge1xuICAgIHJldHVybiBcIntcIiArIGNhcGl0YWxpemUoU3RyaW5nKHR5cGUpKSArIFwifVwiO1xuICB9XG4gIHJldHVybiBcIntcIiArIFN0cmluZyh0eXBlKS50b0xvd2VyQ2FzZSgpICsgXCJ9XCI7XG59XG5cbmZ1bmN0aW9uIGNhcGl0YWxpemUoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHMubGVuZ3RoID09PSAwKSByZXR1cm4gcztcbiAgcmV0dXJuIHNbMF0hLnRvVXBwZXJDYXNlKCkgKyBzLnNsaWNlKDEpO1xufVxuXG4vKipcbiAqIERlY29kZSBhIEZFTiBwaWVjZS1wbGFjZW1lbnQgc3RyaW5nIGludG8gcGxhY2VtZW50cyArIGVycm9yIGxpc3QuXG4gKlxuICogQWNjZXB0cyB0aGUgRklSU1Qgc3BhY2UtZGVsaW1pdGVkIHRva2VuIG9mIGEgRkVOLiBBZGRpdGlvbmFsIHRva2Vuc1xuICogKHNpZGUtdG8tbW92ZSwgY2FzdGxpbmcsIGVuLXBhc3NhbnQsIGNsb2NrcykgYXJlIHRvbGVyYXRlZCBhbmRcbiAqIGlnbm9yZWQg4oCUIGNhbGxlcnMgbWF5IHBhc3RlIGEgZnVsbCBGRU4gd2l0aG91dCBwcmUtcGFyc2luZy5cbiAqXG4gKiBSZXR1cm5zIGB7IHBpZWNlcywgZXJyb3JzIH1gIHJhdGhlciB0aGFuIHRocm93aW5nLiBOb24tZmF0YWxcbiAqIHByb2JsZW1zICh1bmtub3duIGJyYWNrZXRlZCB0eXBlLCBleHRyYSByYW5rLCBtYWxmb3JtZWQgZGlnaXQpXG4gKiBwcm9kdWNlIGFuIGVycm9yIG1lc3NhZ2UgYnV0IGRlY29kaW5nIGF0dGVtcHRzIHRvIHJlY292ZXIgZm9yIHRoZVxuICogcmVzdCBvZiB0aGUgYm9hcmQgd2hlcmUgcG9zc2libGUuIEFuIGVtcHR5IGBlcnJvcnNgIGFycmF5IG1lYW5zXG4gKiB0aGUgRkVOIHdhcyBmdWxseSB1bmRlcnN0b29kLlxuICpcbiAqIENhbGxlciB0eXBpY2FsbHkgdHJlYXRzIGFueSBgZXJyb3JzLmxlbmd0aCA+IDBgIGFzIFwicmVqZWN0IHRoaXNcbiAqIGlucHV0XCIg4oCUIHBhcnRpYWwgZGVjb2RlcyBleGlzdCBwdXJlbHkgdG8gaGVscCB0aGUgZWRpdG9yIHN1cmZhY2VcbiAqIHNwZWNpZmljIG1lc3NhZ2VzIChlLmcuIFwiVW5rbm93biBwaWVjZSB7Zm9vfSBvbiBlNFwiKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21GZW4oZmVuOiBzdHJpbmcpOiB7XG4gIHBpZWNlczogUGllY2VQbGFjZW1lbnRbXTtcbiAgZXJyb3JzOiBzdHJpbmdbXTtcbn0ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHRyaW1tZWQgPSBmZW4udHJpbSgpO1xuICBpZiAodHJpbW1lZCA9PT0gXCJcIikge1xuICAgIHJldHVybiB7IHBpZWNlczogW10sIGVycm9yczogW1wiRW1wdHkgRkVOIHN0cmluZy5cIl0gfTtcbiAgfVxuXG4gIC8vIFRha2Ugb25seSB0aGUgZmlyc3Qgd2hpdGVzcGFjZS1kZWxpbWl0ZWQgdG9rZW4gKHBpZWNlIHBsYWNlbWVudCkuXG4gIGNvbnN0IHBsYWNlbWVudEZpZWxkID0gdHJpbW1lZC5zcGxpdCgvXFxzKy8pWzBdID8/IFwiXCI7XG4gIGNvbnN0IHJhbmtUb2tlbnMgPSBwbGFjZW1lbnRGaWVsZC5zcGxpdChcIi9cIik7XG4gIGlmIChyYW5rVG9rZW5zLmxlbmd0aCAhPT0gQk9BUkRfUkFOS1MpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBFeHBlY3RlZCAke0JPQVJEX1JBTktTfSByYW5rcyBzZXBhcmF0ZWQgYnkgJy8nLCBnb3QgJHtyYW5rVG9rZW5zLmxlbmd0aH0uYCxcbiAgICApO1xuICAgIC8vIFN0aWxsIHRyeSDigJQgcmFua3MgYmV5b25kIDggYXJlIGRyb3BwZWQsIG1pc3NpbmcgcmFua3Mgc3RheSBlbXB0eS5cbiAgfVxuXG4gIGNvbnN0IHBpZWNlczogUGllY2VQbGFjZW1lbnRbXSA9IFtdO1xuXG4gIC8vIEZFTiByYW5rIG9yZGVyOiB0b2tlbiAwID0gcmFuayA4ICh0b3ApLCB0b2tlbiA3ID0gcmFuayAxIChib3R0b20pLlxuICBmb3IgKFxuICAgIGxldCB0b2tlbklkeCA9IDA7XG4gICAgdG9rZW5JZHggPCBNYXRoLm1pbihyYW5rVG9rZW5zLmxlbmd0aCwgQk9BUkRfUkFOS1MpO1xuICAgIHRva2VuSWR4KytcbiAgKSB7XG4gICAgY29uc3QgcmFua0Zyb21Ub3AgPSB0b2tlbklkeDsgLy8gMC4uN1xuICAgIGNvbnN0IHJhbmtJZHggPSBCT0FSRF9SQU5LUyAtIDEgLSByYW5rRnJvbVRvcDsgLy8gNy4uMCDihpIgc3F1YXJlIHJhbmtcbiAgICBjb25zdCB0b2tlbiA9IHJhbmtUb2tlbnNbdG9rZW5JZHhdITtcblxuICAgIGxldCBmaWxlID0gMDtcbiAgICBsZXQgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCB0b2tlbi5sZW5ndGgpIHtcbiAgICAgIGlmIChmaWxlID49IEJPQVJEX0ZJTEVTKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgIGBSYW5rICR7cmFua0lkeCArIDF9OiBtb3JlIHRoYW4gJHtCT0FSRF9GSUxFU30gc3F1YXJlcyBkZXNjcmliZWQuYCxcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNoID0gdG9rZW5baV0hO1xuXG4gICAgICAvLyBEaWdpdCA9IHJ1biBvZiBlbXB0eSBzcXVhcmVzLlxuICAgICAgaWYgKC9bMS04XS8udGVzdChjaCkpIHtcbiAgICAgICAgZmlsZSArPSBOdW1iZXIucGFyc2VJbnQoY2gsIDEwKTtcbiAgICAgICAgaSsrO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQnJhY2tldGVkIGN1c3RvbSBwaWVjZS5cbiAgICAgIGlmIChjaCA9PT0gXCJ7XCIpIHtcbiAgICAgICAgY29uc3QgY2xvc2UgPSB0b2tlbi5pbmRleE9mKFwifVwiLCBpICsgMSk7XG4gICAgICAgIGlmIChjbG9zZSA9PT0gLTEpIHtcbiAgICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICAgIGBSYW5rICR7cmFua0lkeCArIDF9OiB1bnRlcm1pbmF0ZWQgJ3snIGF0IHBvc2l0aW9uICR7aX0uYCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlubmVyID0gdG9rZW4uc2xpY2UoaSArIDEsIGNsb3NlKTtcbiAgICAgICAgY29uc3QgaXNXaGl0ZSA9IGlubmVyLmxlbmd0aCA+IDAgJiYgL1tBLVpdLy50ZXN0KGlubmVyWzBdISk7XG4gICAgICAgIGNvbnN0IHR5cGVJZCA9IGlubmVyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHBpZWNlcy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiB0eXBlSWQgYXMgUGllY2VUeXBlLCAvLyBjYWxsZXIgcmVzb2x2ZXMgdmlhIFBJRUNFX1RZUEVfUkVHSVNUUllcbiAgICAgICAgICBjb2xvcjogaXNXaGl0ZSA/IFwid2hpdGVcIiA6IFwiYmxhY2tcIixcbiAgICAgICAgICBzcXVhcmU6IChyYW5rSWR4ICogQk9BUkRfRklMRVMgKyBmaWxlKSBhcyBTcXVhcmUsXG4gICAgICAgIH0pO1xuICAgICAgICBmaWxlKys7XG4gICAgICAgIGkgPSBjbG9zZSArIDE7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBGSURFIGxldHRlci5cbiAgICAgIGNvbnN0IGxvd2VyID0gY2gudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IHR5cGUgPSBUWVBFX09GX0ZJREVfTEVUVEVSLmdldChsb3dlcik7XG4gICAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgIGBSYW5rICR7cmFua0lkeCArIDF9OiB1bmtub3duIEZFTiBzeW1ib2wgJyR7Y2h9JyBhdCBwb3NpdGlvbiAke2l9LmAsXG4gICAgICAgICk7XG4gICAgICAgIGkrKztcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBpc1doaXRlID0gY2ggPT09IGNoLnRvVXBwZXJDYXNlKCk7XG4gICAgICBwaWVjZXMucHVzaCh7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIGNvbG9yOiBpc1doaXRlID8gXCJ3aGl0ZVwiIDogXCJibGFja1wiLFxuICAgICAgICBzcXVhcmU6IChyYW5rSWR4ICogQk9BUkRfRklMRVMgKyBmaWxlKSBhcyBTcXVhcmUsXG4gICAgICB9KTtcbiAgICAgIGZpbGUrKztcbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICBpZiAoZmlsZSAhPT0gQk9BUkRfRklMRVMgJiYgZXJyb3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gT25seSBzdXJmYWNlIHRoZSBcImZld2VyIHRoYW4gOFwiIHdhcm5pbmcgd2hlbiB3ZSBoYXZlbid0IGFscmVhZHlcbiAgICAgIC8vIGNvbXBsYWluZWQgYWJvdXQgb3Zlci1ydW4g4oCUIG90aGVyd2lzZSB3ZSdkIGRvdWJsZS1yZXBvcnQuXG4gICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgYFJhbmsgJHtyYW5rSWR4ICsgMX06IGRlc2NyaWJlZCAke2ZpbGV9IHNxdWFyZXMsIGV4cGVjdGVkICR7Qk9BUkRfRklMRVN9LmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IHBpZWNlcywgZXJyb3JzIH07XG59XG4iXSwiZmlsZSI6Ii9zcmMvbGF5b3V0cy9mZW4udHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/a2397fb9c27e85416333624c5be5dc87765ef2e4 b/7xOfJqsDU787fe61oSCq1/web/a2397fb9c27e85416333624c5be5dc87765ef2e4 deleted file mode 100644 index 938a6f0..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/a2397fb9c27e85416333624c5be5dc87765ef2e4 +++ /dev/null @@ -1,144 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/rules/pawn.ts", {"importedNames":["getLegalPawnMoves"]}); -function setupSession() { - return new __vite_ssr_import_1__.Session({ autoFire: false }); -} -function insertPiece(session, id, type, color, square) { - const eid = id; - session.insert(eid, "PieceType", type); - session.insert(eid, "Color", color); - session.insert(eid, "Position", square); - return eid; -} -(0,__vite_ssr_import_0__.describe)("getLegalPawnMoves — white pawn", () => { - (0,__vite_ssr_import_0__.it)("pawn at e2 (12) can move to e3 (20) and e4 (28)", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 12); - const moves = (0,__vite_ssr_import_2__.getLegalPawnMoves)(session, pawn); - const tos = moves.map((m) => m.to).sort((a, b) => a - b); - (0,__vite_ssr_import_0__.expect)(tos).toEqual([20, 28]); - (0,__vite_ssr_import_0__.expect)(moves.every((m) => !m.isCapture)).toBe(true); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(2); - }); - (0,__vite_ssr_import_0__.it)("pawn at e3 (20) can only move to e4 (28) — no double advance off home rank", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 20); - const moves = (0,__vite_ssr_import_2__.getLegalPawnMoves)(session, pawn); - (0,__vite_ssr_import_0__.expect)(moves.map((m) => m.to)).toEqual([28]); - }); - (0,__vite_ssr_import_0__.it)("pawn at e2 blocked on e3 has zero moves (no jumping)", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 12); - insertPiece(session, 2, "rook", "black", 20); - const moves = (0,__vite_ssr_import_2__.getLegalPawnMoves)(session, pawn); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("pawn at e2 with e3 clear but e4 blocked: only single advance allowed", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 12); - insertPiece(session, 2, "rook", "black", 28); - const moves = (0,__vite_ssr_import_2__.getLegalPawnMoves)(session, pawn); - (0,__vite_ssr_import_0__.expect)(moves.map((m) => m.to)).toEqual([20]); - }); - (0,__vite_ssr_import_0__.it)("pawn can capture diagonally when enemy present on both diagonals", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 28); - insertPiece(session, 2, "pawn", "black", 35); - insertPiece(session, 3, "pawn", "black", 37); - const moves = (0,__vite_ssr_import_2__.getLegalPawnMoves)(session, pawn); - const captures = moves.filter((m) => m.isCapture); - (0,__vite_ssr_import_0__.expect)(captures).toHaveLength(2); - (0,__vite_ssr_import_0__.expect)(captures.map((m) => m.to).sort((a, b) => a - b)).toEqual([35, 37]); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.to === 36 && !m.isCapture)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("pawn cannot capture diagonally without an enemy", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 28); - const moves = (0,__vite_ssr_import_2__.getLegalPawnMoves)(session, pawn); - (0,__vite_ssr_import_0__.expect)(moves.filter((m) => m.isCapture)).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("pawn cannot capture own piece", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 28); - insertPiece(session, 2, "knight", "white", 35); - const moves = (0,__vite_ssr_import_2__.getLegalPawnMoves)(session, pawn); - (0,__vite_ssr_import_0__.expect)(moves.filter((m) => m.to === 35)).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("edge-file pawn has only one capture diagonal (a-file)", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 24); - insertPiece(session, 2, "pawn", "black", 33); - const moves = (0,__vite_ssr_import_2__.getLegalPawnMoves)(session, pawn); - const captures = moves.filter((m) => m.isCapture); - (0,__vite_ssr_import_0__.expect)(captures).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(captures[0].to).toBe(33); - }); - (0,__vite_ssr_import_0__.it)("edge-file pawn has only one capture diagonal (h-file)", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 31); - insertPiece(session, 2, "pawn", "black", 38); - const moves = (0,__vite_ssr_import_2__.getLegalPawnMoves)(session, pawn); - const captures = moves.filter((m) => m.isCapture); - (0,__vite_ssr_import_0__.expect)(captures).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(captures[0].to).toBe(38); - }); - (0,__vite_ssr_import_0__.it)("returns LegalMove objects carrying pieceId and from square", () => { - const session = setupSession(); - const pawn = insertPiece(session, 7, "pawn", "white", 12); - const moves = (0,__vite_ssr_import_2__.getLegalPawnMoves)(session, pawn); - for (const m of moves) { - (0,__vite_ssr_import_0__.expect)(m.pieceId).toBe(pawn); - (0,__vite_ssr_import_0__.expect)(m.from).toBe(12); - } - }); -}); -(0,__vite_ssr_import_0__.describe)("getLegalPawnMoves — black pawn", () => { - (0,__vite_ssr_import_0__.it)("black pawn at e7 (52) can move to e6 (44) and e5 (36)", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "black", 52); - const moves = (0,__vite_ssr_import_2__.getLegalPawnMoves)(session, pawn); - const tos = moves.map((m) => m.to).sort((a, b) => a - b); - (0,__vite_ssr_import_0__.expect)(tos).toEqual([36, 44]); - (0,__vite_ssr_import_0__.expect)(moves.every((m) => !m.isCapture)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("black pawn at e6 (44) has only single advance to e5 (36)", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "black", 44); - const moves = (0,__vite_ssr_import_2__.getLegalPawnMoves)(session, pawn); - (0,__vite_ssr_import_0__.expect)(moves.map((m) => m.to)).toEqual([36]); - }); - (0,__vite_ssr_import_0__.it)("black pawn can capture diagonally (moves down the board)", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "black", 36); - insertPiece(session, 2, "pawn", "white", 27); - insertPiece(session, 3, "pawn", "white", 29); - const moves = (0,__vite_ssr_import_2__.getLegalPawnMoves)(session, pawn); - const captures = moves.filter((m) => m.isCapture); - (0,__vite_ssr_import_0__.expect)(captures.map((m) => m.to).sort((a, b) => a - b)).toEqual([27, 29]); - }); - (0,__vite_ssr_import_0__.it)("black pawn blocked on e6 from e7 produces no moves", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "black", 52); - insertPiece(session, 2, "rook", "white", 44); - const moves = (0,__vite_ssr_import_2__.getLegalPawnMoves)(session, pawn); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(0); - }); -}); -(0,__vite_ssr_import_0__.describe)("getLegalPawnMoves — degenerate inputs", () => { - (0,__vite_ssr_import_0__.it)("returns [] for an unknown piece id", () => { - const session = setupSession(); - const moves = (0,__vite_ssr_import_2__.getLegalPawnMoves)(session, 999); - (0,__vite_ssr_import_0__.expect)(moves).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("returns [] when piece has Position but no Color", () => { - const session = setupSession(); - const eid = 1; - session.insert(eid, "Position", 12); - const moves = (0,__vite_ssr_import_2__.getLegalPawnMoves)(session, eid); - (0,__vite_ssr_import_0__.expect)(moves).toEqual([]); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQUEsRUFDMUIsQ0FBQztBQUNILENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInBhd24udGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgaXQsIGV4cGVjdCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB7IFNlc3Npb24sIHR5cGUgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB7IGdldExlZ2FsUGF3bk1vdmVzIH0gZnJvbSBcIi4vcGF3bi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQaWVjZUNvbG9yLCBQaWVjZVR5cGUsIFNxdWFyZSB9IGZyb20gXCIuLi9zY2hlbWEuanNcIjtcblxuZnVuY3Rpb24gc2V0dXBTZXNzaW9uKCk6IFNlc3Npb24ge1xuICByZXR1cm4gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG59XG5cbmZ1bmN0aW9uIGluc2VydFBpZWNlKFxuICBzZXNzaW9uOiBTZXNzaW9uLFxuICBpZDogbnVtYmVyLFxuICB0eXBlOiBQaWVjZVR5cGUsXG4gIGNvbG9yOiBQaWVjZUNvbG9yLFxuICBzcXVhcmU6IFNxdWFyZSxcbik6IEVudGl0eUlkIHtcbiAgY29uc3QgZWlkID0gaWQgYXMgRW50aXR5SWQ7XG4gIHNlc3Npb24uaW5zZXJ0KGVpZCwgXCJQaWVjZVR5cGVcIiwgdHlwZSk7XG4gIHNlc3Npb24uaW5zZXJ0KGVpZCwgXCJDb2xvclwiLCBjb2xvcik7XG4gIHNlc3Npb24uaW5zZXJ0KGVpZCwgXCJQb3NpdGlvblwiLCBzcXVhcmUpO1xuICByZXR1cm4gZWlkO1xufVxuXG4vLyDilIDilIDilIAgV2hpdGUgcGF3biDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZGVzY3JpYmUoXCJnZXRMZWdhbFBhd25Nb3ZlcyDigJQgd2hpdGUgcGF3blwiLCAoKSA9PiB7XG4gIGl0KFwicGF3biBhdCBlMiAoMTIpIGNhbiBtb3ZlIHRvIGUzICgyMCkgYW5kIGU0ICgyOClcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZXR1cFNlc3Npb24oKTtcbiAgICBjb25zdCBwYXduID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJwYXduXCIsIFwid2hpdGVcIiwgMTIpOyAvLyBlMlxuICAgIGNvbnN0IG1vdmVzID0gZ2V0TGVnYWxQYXduTW92ZXMoc2Vzc2lvbiwgcGF3bik7XG4gICAgY29uc3QgdG9zID0gbW92ZXMubWFwKG0gPT4gbS50bykuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgIGV4cGVjdCh0b3MpLnRvRXF1YWwoWzIwLCAyOF0pO1xuICAgIGV4cGVjdChtb3Zlcy5ldmVyeShtID0+ICFtLmlzQ2FwdHVyZSkpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KG1vdmVzKS50b0hhdmVMZW5ndGgoMik7XG4gIH0pO1xuXG4gIGl0KFwicGF3biBhdCBlMyAoMjApIGNhbiBvbmx5IG1vdmUgdG8gZTQgKDI4KSDigJQgbm8gZG91YmxlIGFkdmFuY2Ugb2ZmIGhvbWUgcmFua1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IHBhd24gPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCAyMCk7IC8vIGUzXG4gICAgY29uc3QgbW92ZXMgPSBnZXRMZWdhbFBhd25Nb3ZlcyhzZXNzaW9uLCBwYXduKTtcbiAgICBleHBlY3QobW92ZXMubWFwKG0gPT4gbS50bykpLnRvRXF1YWwoWzI4XSk7XG4gIH0pO1xuXG4gIGl0KFwicGF3biBhdCBlMiBibG9ja2VkIG9uIGUzIGhhcyB6ZXJvIG1vdmVzIChubyBqdW1waW5nKVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IHBhd24gPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCAxMik7IC8vIGUyXG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMiwgXCJyb29rXCIsIFwiYmxhY2tcIiwgMjApOyAvLyBlMyBibG9ja2VyXG4gICAgY29uc3QgbW92ZXMgPSBnZXRMZWdhbFBhd25Nb3ZlcyhzZXNzaW9uLCBwYXduKTtcbiAgICBleHBlY3QobW92ZXMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG5cbiAgaXQoXCJwYXduIGF0IGUyIHdpdGggZTMgY2xlYXIgYnV0IGU0IGJsb2NrZWQ6IG9ubHkgc2luZ2xlIGFkdmFuY2UgYWxsb3dlZFwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IHBhd24gPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCAxMik7IC8vIGUyXG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMiwgXCJyb29rXCIsIFwiYmxhY2tcIiwgMjgpOyAvLyBlNCBibG9ja2VyXG4gICAgY29uc3QgbW92ZXMgPSBnZXRMZWdhbFBhd25Nb3ZlcyhzZXNzaW9uLCBwYXduKTtcbiAgICBleHBlY3QobW92ZXMubWFwKG0gPT4gbS50bykpLnRvRXF1YWwoWzIwXSk7XG4gIH0pO1xuXG4gIGl0KFwicGF3biBjYW4gY2FwdHVyZSBkaWFnb25hbGx5IHdoZW4gZW5lbXkgcHJlc2VudCBvbiBib3RoIGRpYWdvbmFsc1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IHBhd24gPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCAyOCk7IC8vIGU0XG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMiwgXCJwYXduXCIsIFwiYmxhY2tcIiwgMzUpOyAvLyBkNVxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDMsIFwicGF3blwiLCBcImJsYWNrXCIsIDM3KTsgLy8gZjVcbiAgICBjb25zdCBtb3ZlcyA9IGdldExlZ2FsUGF3bk1vdmVzKHNlc3Npb24sIHBhd24pO1xuICAgIGNvbnN0IGNhcHR1cmVzID0gbW92ZXMuZmlsdGVyKG0gPT4gbS5pc0NhcHR1cmUpO1xuICAgIGV4cGVjdChjYXB0dXJlcykudG9IYXZlTGVuZ3RoKDIpO1xuICAgIGV4cGVjdChjYXB0dXJlcy5tYXAobSA9PiBtLnRvKS5zb3J0KChhLCBiKSA9PiBhIC0gYikpLnRvRXF1YWwoWzM1LCAzN10pO1xuICAgIC8vIGZvcndhcmQgcHVzaCB0byBlNSAoMzYpIHN0aWxsIGFsbG93ZWQg4oCUIG5vIGJsb2NrZXJcbiAgICBleHBlY3QobW92ZXMuc29tZShtID0+IG0udG8gPT09IDM2ICYmICFtLmlzQ2FwdHVyZSkpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwicGF3biBjYW5ub3QgY2FwdHVyZSBkaWFnb25hbGx5IHdpdGhvdXQgYW4gZW5lbXlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZXR1cFNlc3Npb24oKTtcbiAgICBjb25zdCBwYXduID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJwYXduXCIsIFwid2hpdGVcIiwgMjgpOyAvLyBlNFxuICAgIGNvbnN0IG1vdmVzID0gZ2V0TGVnYWxQYXduTW92ZXMoc2Vzc2lvbiwgcGF3bik7XG4gICAgZXhwZWN0KG1vdmVzLmZpbHRlcihtID0+IG0uaXNDYXB0dXJlKSkudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcblxuICBpdChcInBhd24gY2Fubm90IGNhcHR1cmUgb3duIHBpZWNlXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gc2V0dXBTZXNzaW9uKCk7XG4gICAgY29uc3QgcGF3biA9IGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwicGF3blwiLCBcIndoaXRlXCIsIDI4KTsgLy8gZTRcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAyLCBcImtuaWdodFwiLCBcIndoaXRlXCIsIDM1KTsgLy8gYWxseSBhdCBkNVxuICAgIGNvbnN0IG1vdmVzID0gZ2V0TGVnYWxQYXduTW92ZXMoc2Vzc2lvbiwgcGF3bik7XG4gICAgZXhwZWN0KG1vdmVzLmZpbHRlcihtID0+IG0udG8gPT09IDM1KSkudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcblxuICBpdChcImVkZ2UtZmlsZSBwYXduIGhhcyBvbmx5IG9uZSBjYXB0dXJlIGRpYWdvbmFsIChhLWZpbGUpXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gc2V0dXBTZXNzaW9uKCk7XG4gICAgY29uc3QgcGF3biA9IGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwicGF3blwiLCBcIndoaXRlXCIsIDI0KTsgLy8gYTRcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAyLCBcInBhd25cIiwgXCJibGFja1wiLCAzMyk7IC8vIGI1XG4gICAgY29uc3QgbW92ZXMgPSBnZXRMZWdhbFBhd25Nb3ZlcyhzZXNzaW9uLCBwYXduKTtcbiAgICBjb25zdCBjYXB0dXJlcyA9IG1vdmVzLmZpbHRlcihtID0+IG0uaXNDYXB0dXJlKTtcbiAgICBleHBlY3QoY2FwdHVyZXMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICBleHBlY3QoY2FwdHVyZXNbMF0hLnRvKS50b0JlKDMzKTtcbiAgfSk7XG5cbiAgaXQoXCJlZGdlLWZpbGUgcGF3biBoYXMgb25seSBvbmUgY2FwdHVyZSBkaWFnb25hbCAoaC1maWxlKVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IHBhd24gPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCAzMSk7IC8vIGg0XG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMiwgXCJwYXduXCIsIFwiYmxhY2tcIiwgMzgpOyAvLyBnNVxuICAgIGNvbnN0IG1vdmVzID0gZ2V0TGVnYWxQYXduTW92ZXMoc2Vzc2lvbiwgcGF3bik7XG4gICAgY29uc3QgY2FwdHVyZXMgPSBtb3Zlcy5maWx0ZXIobSA9PiBtLmlzQ2FwdHVyZSk7XG4gICAgZXhwZWN0KGNhcHR1cmVzKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgZXhwZWN0KGNhcHR1cmVzWzBdIS50bykudG9CZSgzOCk7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyBMZWdhbE1vdmUgb2JqZWN0cyBjYXJyeWluZyBwaWVjZUlkIGFuZCBmcm9tIHNxdWFyZVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IHBhd24gPSBpbnNlcnRQaWVjZShzZXNzaW9uLCA3LCBcInBhd25cIiwgXCJ3aGl0ZVwiLCAxMik7IC8vIGUyXG4gICAgY29uc3QgbW92ZXMgPSBnZXRMZWdhbFBhd25Nb3ZlcyhzZXNzaW9uLCBwYXduKTtcbiAgICBmb3IgKGNvbnN0IG0gb2YgbW92ZXMpIHtcbiAgICAgIGV4cGVjdChtLnBpZWNlSWQpLnRvQmUocGF3bik7XG4gICAgICBleHBlY3QobS5mcm9tKS50b0JlKDEyKTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbi8vIOKUgOKUgOKUgCBCbGFjayBwYXduIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5kZXNjcmliZShcImdldExlZ2FsUGF3bk1vdmVzIOKAlCBibGFjayBwYXduXCIsICgpID0+IHtcbiAgaXQoXCJibGFjayBwYXduIGF0IGU3ICg1MikgY2FuIG1vdmUgdG8gZTYgKDQ0KSBhbmQgZTUgKDM2KVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IHBhd24gPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInBhd25cIiwgXCJibGFja1wiLCA1Mik7IC8vIGU3XG4gICAgY29uc3QgbW92ZXMgPSBnZXRMZWdhbFBhd25Nb3ZlcyhzZXNzaW9uLCBwYXduKTtcbiAgICBjb25zdCB0b3MgPSBtb3Zlcy5tYXAobSA9PiBtLnRvKS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgZXhwZWN0KHRvcykudG9FcXVhbChbMzYsIDQ0XSk7XG4gICAgZXhwZWN0KG1vdmVzLmV2ZXJ5KG0gPT4gIW0uaXNDYXB0dXJlKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJibGFjayBwYXduIGF0IGU2ICg0NCkgaGFzIG9ubHkgc2luZ2xlIGFkdmFuY2UgdG8gZTUgKDM2KVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IHBhd24gPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInBhd25cIiwgXCJibGFja1wiLCA0NCk7XG4gICAgY29uc3QgbW92ZXMgPSBnZXRMZWdhbFBhd25Nb3ZlcyhzZXNzaW9uLCBwYXduKTtcbiAgICBleHBlY3QobW92ZXMubWFwKG0gPT4gbS50bykpLnRvRXF1YWwoWzM2XSk7XG4gIH0pO1xuXG4gIGl0KFwiYmxhY2sgcGF3biBjYW4gY2FwdHVyZSBkaWFnb25hbGx5IChtb3ZlcyBkb3duIHRoZSBib2FyZClcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZXR1cFNlc3Npb24oKTtcbiAgICBjb25zdCBwYXduID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJwYXduXCIsIFwiYmxhY2tcIiwgMzYpOyAvLyBlNVxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDIsIFwicGF3blwiLCBcIndoaXRlXCIsIDI3KTsgLy8gZDRcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAzLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCAyOSk7IC8vIGY0XG4gICAgY29uc3QgbW92ZXMgPSBnZXRMZWdhbFBhd25Nb3ZlcyhzZXNzaW9uLCBwYXduKTtcbiAgICBjb25zdCBjYXB0dXJlcyA9IG1vdmVzLmZpbHRlcihtID0+IG0uaXNDYXB0dXJlKTtcbiAgICBleHBlY3QoY2FwdHVyZXMubWFwKG0gPT4gbS50bykuc29ydCgoYSwgYikgPT4gYSAtIGIpKS50b0VxdWFsKFsyNywgMjldKTtcbiAgfSk7XG5cbiAgaXQoXCJibGFjayBwYXduIGJsb2NrZWQgb24gZTYgZnJvbSBlNyBwcm9kdWNlcyBubyBtb3Zlc1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IHBhd24gPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInBhd25cIiwgXCJibGFja1wiLCA1Mik7IC8vIGU3XG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMiwgXCJyb29rXCIsIFwid2hpdGVcIiwgNDQpOyAvLyBlNiBibG9ja2VyXG4gICAgY29uc3QgbW92ZXMgPSBnZXRMZWdhbFBhd25Nb3ZlcyhzZXNzaW9uLCBwYXduKTtcbiAgICBleHBlY3QobW92ZXMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG59KTtcblxuLy8g4pSA4pSA4pSAIERlZ2VuZXJhdGUgaW5wdXRzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5kZXNjcmliZShcImdldExlZ2FsUGF3bk1vdmVzIOKAlCBkZWdlbmVyYXRlIGlucHV0c1wiLCAoKSA9PiB7XG4gIGl0KFwicmV0dXJucyBbXSBmb3IgYW4gdW5rbm93biBwaWVjZSBpZFwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IG1vdmVzID0gZ2V0TGVnYWxQYXduTW92ZXMoc2Vzc2lvbiwgOTk5IGFzIEVudGl0eUlkKTtcbiAgICBleHBlY3QobW92ZXMpLnRvRXF1YWwoW10pO1xuICB9KTtcblxuICBpdChcInJldHVybnMgW10gd2hlbiBwaWVjZSBoYXMgUG9zaXRpb24gYnV0IG5vIENvbG9yXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gc2V0dXBTZXNzaW9uKCk7XG4gICAgY29uc3QgZWlkID0gMSBhcyBFbnRpdHlJZDtcbiAgICBzZXNzaW9uLmluc2VydChlaWQsIFwiUG9zaXRpb25cIiwgMTIpO1xuICAgIGNvbnN0IG1vdmVzID0gZ2V0TGVnYWxQYXduTW92ZXMoc2Vzc2lvbiwgZWlkKTtcbiAgICBleHBlY3QobW92ZXMpLnRvRXF1YWwoW10pO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL2NoZXNzL3NyYy9ydWxlcy9wYXduLnRlc3QudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/a318a3d11b180ee6cf058027db65ed98aaeccfa9 b/7xOfJqsDU787fe61oSCq1/web/a318a3d11b180ee6cf058027db65ed98aaeccfa9 deleted file mode 100644 index f92a772..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/a318a3d11b180ee6cf058027db65ed98aaeccfa9 +++ /dev/null @@ -1,32 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "DAMAGE_RESISTANCE_DESCRIPTOR", { enumerable: true, configurable: true, get(){ try { return DAMAGE_RESISTANCE_DESCRIPTOR } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "applyResistance", { enumerable: true, configurable: true, get(){ try { return applyResistance } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "stackResistances", { enumerable: true, configurable: true, get(){ try { return stackResistances } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/zod@4.3.6/node_modules/zod/index.js", {"importedNames":["z"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/modifiers/registry.ts", {"importedNames":["MODIFIER_REGISTRY"]}); -const schema = __vite_ssr_import_0__.z.number().min(0).max(1); -const DAMAGE_RESISTANCE_DESCRIPTOR = { - id: "damage-resistance", - attrName: "DamageResistance", - label: "Damage Resistance", - valueSchema: schema, - stackingRule: "multiplicative", - uiForm: "percentage", - apply(session, pieceId, effectiveValue) { - session.insert(pieceId, "DamageResistance", effectiveValue); - }, - describe(value) { - return `${Math.round(value * 100)}% damage resistance`; - } -}; -__vite_ssr_import_1__.MODIFIER_REGISTRY.register(DAMAGE_RESISTANCE_DESCRIPTOR); -function applyResistance(amount, resistance) { - return Math.max(0, amount * (1 - resistance)); -}; -function stackResistances(resistances) { - if (resistances.length === 0) return 0; - const product = resistances.reduce((acc, r) => acc * (1 - r), 1); - return Math.max(0, Math.min(1, 1 - product)); -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFFQTtBQUlBLE1BQU0sU0FBUyx3QkFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBRy9CLE1BQU0sK0JBQTBEO0FBQUEsRUFDckUsSUFBSTtBQUFBLEVBQ0osVUFBVTtBQUFBLEVBQ1YsT0FBTztBQUFBLEVBQ1AsYUFBYTtBQUFBLEVBQ2IsY0FBYztBQUFBLEVBQ2QsUUFBUTtBQUFBLEVBQ1IsTUFBTSxTQUFrQixTQUFtQixnQkFBNkI7QUFDdEUsWUFBUSxPQUFPLFNBQVMsb0JBQW9CLGNBQWM7QUFBQSxFQUM1RDtBQUFBLEVBQ0EsU0FBUyxPQUFzQjtBQUM3QixXQUFPLEdBQUcsS0FBSyxNQUFNLFFBQVEsR0FBRyxDQUFDO0FBQUEsRUFDbkM7QUFDRjtBQUVBLHdDQUFrQixTQUFTLDRCQUE0QjtBQVdoRCxTQUFTLGdCQUFnQixRQUFnQixZQUE0QjtBQUMxRSxTQUFPLEtBQUssSUFBSSxHQUFHLFVBQVUsSUFBSSxXQUFXO0FBQzlDO0FBT08sU0FBUyxpQkFBaUIsYUFBd0M7QUFDdkUsTUFBSSxZQUFZLFdBQVcsRUFBRyxRQUFPO0FBQ3JDLFFBQU0sVUFBVSxZQUFZLE9BQU8sQ0FBQyxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQztBQUMvRCxTQUFPLEtBQUssSUFBSSxHQUFHLEtBQUssSUFBSSxHQUFHLElBQUksT0FBTyxDQUFDO0FBQzdDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJkYW1hZ2UtcmVzaXN0YW5jZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyBTZXNzaW9uLCBFbnRpdHlJZCB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuaW1wb3J0IHsgTU9ESUZJRVJfUkVHSVNUUlkgfSBmcm9tIFwiLi4vcmVnaXN0cnkuanNcIjtcbmltcG9ydCB0eXBlIHsgTW9kaWZpZXJEZXNjcmlwdG9yIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5cbi8vIFJlc2lzdGFuY2U6IDAgPSBubyByZXNpc3RhbmNlLCAxID0gaW1tdW5lICgxMDAlIGRhbWFnZSByZWR1Y3Rpb24pXG5jb25zdCBzY2hlbWEgPSB6Lm51bWJlcigpLm1pbigwKS5tYXgoMSk7XG50eXBlIFZhbHVlID0gei5pbmZlcjx0eXBlb2Ygc2NoZW1hPjtcblxuZXhwb3J0IGNvbnN0IERBTUFHRV9SRVNJU1RBTkNFX0RFU0NSSVBUT1I6IE1vZGlmaWVyRGVzY3JpcHRvcjxWYWx1ZT4gPSB7XG4gIGlkOiBcImRhbWFnZS1yZXNpc3RhbmNlXCIsXG4gIGF0dHJOYW1lOiBcIkRhbWFnZVJlc2lzdGFuY2VcIixcbiAgbGFiZWw6IFwiRGFtYWdlIFJlc2lzdGFuY2VcIixcbiAgdmFsdWVTY2hlbWE6IHNjaGVtYSxcbiAgc3RhY2tpbmdSdWxlOiBcIm11bHRpcGxpY2F0aXZlXCIsXG4gIHVpRm9ybTogXCJwZXJjZW50YWdlXCIsXG4gIGFwcGx5KHNlc3Npb246IFNlc3Npb24sIHBpZWNlSWQ6IEVudGl0eUlkLCBlZmZlY3RpdmVWYWx1ZTogVmFsdWUpOiB2b2lkIHtcbiAgICBzZXNzaW9uLmluc2VydChwaWVjZUlkLCBcIkRhbWFnZVJlc2lzdGFuY2VcIiwgZWZmZWN0aXZlVmFsdWUpO1xuICB9LFxuICBkZXNjcmliZSh2YWx1ZTogVmFsdWUpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtNYXRoLnJvdW5kKHZhbHVlICogMTAwKX0lIGRhbWFnZSByZXNpc3RhbmNlYDtcbiAgfSxcbn07XG5cbk1PRElGSUVSX1JFR0lTVFJZLnJlZ2lzdGVyKERBTUFHRV9SRVNJU1RBTkNFX0RFU0NSSVBUT1IpO1xuXG4vKipcbiAqIEFwcGx5IGRhbWFnZSByZXNpc3RhbmNlIHRvIGFuIGluY29taW5nIGRhbWFnZSBhbW91bnQuXG4gKiBSZXR1cm5zIHRoZSBlZmZlY3RpdmUgZGFtYWdlIGFmdGVyIGFwcGx5aW5nIHJlc2lzdGFuY2UuXG4gKiBSZXN1bHQgaXMgYWx3YXlzIOKJpSAwLlxuICpcbiAqIEZvcm11bGEgKGZyb20gQURSLTQgc3RhY2tpbmcpOiBlZmZlY3RpdmUgcmVzaXN0YW5jZSBhbHJlYWR5IHN0YWNrZWRcbiAqIG11bHRpcGxpY2F0aXZlbHkgYmVmb3JlIGJlaW5nIHNlZWRlZCBpbiBEYW1hZ2VSZXNpc3RhbmNlIGZhY3QuXG4gKiBTbzogZWZmZWN0aXZlRGFtYWdlID0gYW1vdW50ICogKDEgLSByZXNpc3RhbmNlKSwgY2xhbXBlZCB0byBbMCwg4oieKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UmVzaXN0YW5jZShhbW91bnQ6IG51bWJlciwgcmVzaXN0YW5jZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIGFtb3VudCAqICgxIC0gcmVzaXN0YW5jZSkpO1xufVxuXG4vKipcbiAqIENvbXB1dGUgc3RhY2tlZCByZXNpc3RhbmNlIGZyb20gbXVsdGlwbGUgc291cmNlcyB1c2luZyBtdWx0aXBsaWNhdGl2ZSBmb3JtdWxhLlxuICogQURSLTQ6IGVmZmVjdGl2ZVJlc2lzdGFuY2UgPSAxIC0g4oiPKDEgLSByX2kpXG4gKiBSZXN1bHQgY2xhbXBlZCB0byBbMCwgMV0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFja1Jlc2lzdGFuY2VzKHJlc2lzdGFuY2VzOiByZWFkb25seSBudW1iZXJbXSk6IG51bWJlciB7XG4gIGlmIChyZXNpc3RhbmNlcy5sZW5ndGggPT09IDApIHJldHVybiAwO1xuICBjb25zdCBwcm9kdWN0ID0gcmVzaXN0YW5jZXMucmVkdWNlKChhY2MsIHIpID0+IGFjYyAqICgxIC0gciksIDEpO1xuICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgMSAtIHByb2R1Y3QpKTtcbn1cbiJdLCJmaWxlIjoiL3NyYy9tb2RpZmllcnMvZGVzY3JpcHRvcnMvZGFtYWdlLXJlc2lzdGFuY2UudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/a3e5117daf14c606399875ff9e0ddafdb1023b59 b/7xOfJqsDU787fe61oSCq1/web/a3e5117daf14c606399875ff9e0ddafdb1023b59 deleted file mode 100644 index 1354efa..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/a3e5117daf14c606399875ff9e0ddafdb1023b59 +++ /dev/null @@ -1,36 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "v", { enumerable: true, configurable: true, get(){ try { return v } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "defineRule", { enumerable: true, configurable: true, get(){ try { return defineRule } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/registry.js", {"importedNames":["HandlerRegistry"]}); -/** Create a variable binding. */ -function v(name) { - return { __type: "variable", name }; -}; -/** - * Define a rule, validating that all referenced handlers are registered. - */ -function defineRule(opts) { - // Validate handler registration - opts.registry.verify([opts.handler]); - const conditions = opts.what.map((w) => { - const base = { - id: w.id ?? null, - attr: w.attr, - binding: w.binding ?? null, - }; - return w.idBinding !== undefined - ? { ...base, idBinding: w.idBinding } - : base; - }); - const base = { - name: opts.name, - salience: opts.salience ?? 0, - conditions, - handler: opts.handler, - }; - return opts.handlerArgs !== undefined - ? { ...base, handlerArgs: opts.handlerArgs } - : base; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7QUFNQTtBQVFBO0FBQ00sU0FBVSxDQUFDLENBQUMsSUFBWTtJQUM1QixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7QUFDckM7QUFxQ0E7OztBQUdNLFNBQVUsVUFBVSxDQUFDLElBQW9CO0lBQzdDO0lBQ0EsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFcEMsTUFBTSxVQUFVLEdBQW9CLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDdEQsTUFBTSxJQUFJLEdBQUc7WUFDWCxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJO1lBQ2hCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtZQUNaLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUk7U0FDM0I7UUFDRCxPQUFPLENBQUMsQ0FBQyxTQUFTLEtBQUs7WUFDckIsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTO1lBQ25DLENBQUMsQ0FBQyxJQUFJO0lBQ1YsQ0FBQyxDQUFDO0lBRUYsTUFBTSxJQUFJLEdBQUc7UUFDWCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7UUFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDO1FBQzVCLFVBQVU7UUFDVixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87S0FDdEI7SUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUs7UUFDMUIsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1FBQzFDLENBQUMsQ0FBQyxJQUFJO0FBQ1YiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUnVsZSBidWlsZGVyIOKAlCBmbHVlbnQgQVBJIGZvciBkZWZpbmluZyBSZXRlIHByb2R1Y3Rpb25zLlxuICogUGVyIFNQRUMubWQgwqdKU09OIFJ1bGUgU2NoZW1hLlxuICovXG5pbXBvcnQgdHlwZSB7IEVudGl0eUlkIH0gZnJvbSBcIi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEF0dHJLZXkgfSBmcm9tIFwiLi93bS5qc1wiO1xuaW1wb3J0IHsgSGFuZGxlclJlZ2lzdHJ5IH0gZnJvbSBcIi4vcmVnaXN0cnkuanNcIjtcblxuLyoqIFZhcmlhYmxlIGJpbmRpbmcgZGVzY3JpcHRvciDigJQgdXNlZCBpbiBydWxlIGNvbmRpdGlvbnMuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhcmlhYmxlRGVzY3JpcHRvciB7XG4gIHJlYWRvbmx5IF9fdHlwZTogXCJ2YXJpYWJsZVwiO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKiBDcmVhdGUgYSB2YXJpYWJsZSBiaW5kaW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHYobmFtZTogc3RyaW5nKTogVmFyaWFibGVEZXNjcmlwdG9yIHtcbiAgcmV0dXJuIHsgX190eXBlOiBcInZhcmlhYmxlXCIsIG5hbWUgfTtcbn1cblxuLyoqIEEgY29uZGl0aW9uIGluIGEgcnVsZSdzIExIUyAod2hhdCBibG9jaykuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVDb25kaXRpb24ge1xuICAvKiogRW50aXR5IGlkIHRvIG1hdGNoLCBudWxsID0gd2lsZGNhcmQuICovXG4gIHJlYWRvbmx5IGlkOiBFbnRpdHlJZCB8IG51bGw7XG4gIC8qKiBBdHRyaWJ1dGUga2V5IHRvIG1hdGNoLiAqL1xuICByZWFkb25seSBhdHRyOiBBdHRyS2V5O1xuICAvKiogVmFyaWFibGUgbmFtZSB0byBiaW5kIHRoZSBWQUxVRSB0by4gKi9cbiAgcmVhZG9ubHkgYmluZGluZzogVmFyaWFibGVEZXNjcmlwdG9yIHwgbnVsbDtcbiAgLyoqIFZhcmlhYmxlIG5hbWUgdG8gYmluZCB0aGUgRU5USVRZIElEIHRvLiAqL1xuICByZWFkb25seSBpZEJpbmRpbmc/OiBWYXJpYWJsZURlc2NyaXB0b3I7XG59XG5cbi8qKiBGdWxseS1yZXNvbHZlZCBydWxlIGRlZmluaXRpb24gcHJvZHVjZWQgYnkgZGVmaW5lUnVsZSgpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdWxlRGVmaW5pdGlvbiB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgc2FsaWVuY2U6IG51bWJlcjtcbiAgcmVhZG9ubHkgY29uZGl0aW9uczogcmVhZG9ubHkgUnVsZUNvbmRpdGlvbltdO1xuICByZWFkb25seSBoYW5kbGVyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGhhbmRsZXJBcmdzPzogcmVhZG9ubHkgdW5rbm93bltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlZmluZVJ1bGVPcHRzIHtcbiAgbmFtZTogc3RyaW5nO1xuICBzYWxpZW5jZT86IG51bWJlcjtcbiAgd2hhdDogQXJyYXk8e1xuICAgIGlkOiBFbnRpdHlJZCB8IG51bGw7XG4gICAgYXR0cjogQXR0cktleTtcbiAgICBiaW5kaW5nPzogVmFyaWFibGVEZXNjcmlwdG9yO1xuICAgIGlkQmluZGluZz86IFZhcmlhYmxlRGVzY3JpcHRvcjtcbiAgfT47XG4gIGhhbmRsZXI6IHN0cmluZztcbiAgaGFuZGxlckFyZ3M/OiByZWFkb25seSB1bmtub3duW107XG4gIHJlZ2lzdHJ5OiBIYW5kbGVyUmVnaXN0cnk7XG59XG5cbi8qKlxuICogRGVmaW5lIGEgcnVsZSwgdmFsaWRhdGluZyB0aGF0IGFsbCByZWZlcmVuY2VkIGhhbmRsZXJzIGFyZSByZWdpc3RlcmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lUnVsZShvcHRzOiBEZWZpbmVSdWxlT3B0cyk6IFJ1bGVEZWZpbml0aW9uIHtcbiAgLy8gVmFsaWRhdGUgaGFuZGxlciByZWdpc3RyYXRpb25cbiAgb3B0cy5yZWdpc3RyeS52ZXJpZnkoW29wdHMuaGFuZGxlcl0pO1xuXG4gIGNvbnN0IGNvbmRpdGlvbnM6IFJ1bGVDb25kaXRpb25bXSA9IG9wdHMud2hhdC5tYXAoKHcpID0+IHtcbiAgICBjb25zdCBiYXNlID0ge1xuICAgICAgaWQ6IHcuaWQgPz8gbnVsbCxcbiAgICAgIGF0dHI6IHcuYXR0cixcbiAgICAgIGJpbmRpbmc6IHcuYmluZGluZyA/PyBudWxsLFxuICAgIH07XG4gICAgcmV0dXJuIHcuaWRCaW5kaW5nICE9PSB1bmRlZmluZWRcbiAgICAgID8geyAuLi5iYXNlLCBpZEJpbmRpbmc6IHcuaWRCaW5kaW5nIH1cbiAgICAgIDogYmFzZTtcbiAgfSk7XG5cbiAgY29uc3QgYmFzZSA9IHtcbiAgICBuYW1lOiBvcHRzLm5hbWUsXG4gICAgc2FsaWVuY2U6IG9wdHMuc2FsaWVuY2UgPz8gMCxcbiAgICBjb25kaXRpb25zLFxuICAgIGhhbmRsZXI6IG9wdHMuaGFuZGxlcixcbiAgfTtcbiAgcmV0dXJuIG9wdHMuaGFuZGxlckFyZ3MgIT09IHVuZGVmaW5lZFxuICAgID8geyAuLi5iYXNlLCBoYW5kbGVyQXJnczogb3B0cy5oYW5kbGVyQXJncyB9XG4gICAgOiBiYXNlO1xufVxuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvZGlzdC9idWlsZGVyLmpzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/a54a30811b10c6f8e965b4e67f5e8e3671234ffe b/7xOfJqsDU787fe61oSCq1/web/a54a30811b10c6f8e965b4e67f5e8e3671234ffe deleted file mode 100644 index 0031c85..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/a54a30811b10c6f8e965b4e67f5e8e3671234ffe +++ /dev/null @@ -1,85 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "DIRECTION_ADDITIONS_DESCRIPTOR", { enumerable: true, configurable: true, get(){ try { return DIRECTION_ADDITIONS_DESCRIPTOR } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "generateDirectionMoves", { enumerable: true, configurable: true, get(){ try { return generateDirectionMoves } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/zod@4.3.6/node_modules/zod/index.js", {"importedNames":["z"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/modifiers/registry.ts", {"importedNames":["MODIFIER_REGISTRY"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["fileOf","rankOf","isOnBoard","squareOf"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/rules/board-queries.ts", {"importedNames":["getPiecePosition","getPieceColor","isPieceAt"]}); - - - - -const schema = __vite_ssr_import_0__.z.array( - __vite_ssr_import_0__.z.enum([ - "forward", - "backward", - "left", - "right", - "diagonal-fl", - "diagonal-fr", - "diagonal-bl", - "diagonal-br" - ]) -); -function directionDelta(dir, color) { - const forward = color === "white" ? 1 : -1; - switch (dir) { - case "forward": - return { df: 0, dr: forward }; - case "backward": - return { df: 0, dr: -forward }; - case "left": - return { df: -1, dr: 0 }; - // always toward a-file - case "right": - return { df: 1, dr: 0 }; - // always toward h-file - case "diagonal-fl": - return { df: -1, dr: forward }; - // forward + toward a-file - case "diagonal-fr": - return { df: 1, dr: forward }; - // forward + toward h-file - case "diagonal-bl": - return { df: -1, dr: -forward }; - // backward + toward a-file - case "diagonal-br": - return { df: 1, dr: -forward }; - } -} -const DIRECTION_ADDITIONS_DESCRIPTOR = { - id: "direction-additions", - attrName: "DirectionAdditions", - label: "Direction Additions", - valueSchema: schema, - stackingRule: "union", - uiForm: "direction-set", - apply(session, pieceId, effectiveValue) { - session.insert(pieceId, "DirectionAdditions", effectiveValue); - }, - describe(value) { - return `+Directions: ${value.join(", ")}`; - } -}; -__vite_ssr_import_1__.MODIFIER_REGISTRY.register(DIRECTION_ADDITIONS_DESCRIPTOR); -function generateDirectionMoves(session, pieceId) { - const directions = session.get(pieceId, "DirectionAdditions"); - if (!directions || directions.length === 0) return []; - const from = (0,__vite_ssr_import_3__.getPiecePosition)(session, pieceId); - const color = (0,__vite_ssr_import_3__.getPieceColor)(session, pieceId); - if (from === null || color === null) return []; - const moves = []; - for (const dir of directions) { - const { df, dr } = directionDelta(dir, color); - const toFile = (0,__vite_ssr_import_2__.fileOf)(from) + df; - const toRank = (0,__vite_ssr_import_2__.rankOf)(from) + dr; - if (!(0,__vite_ssr_import_2__.isOnBoard)(toFile, toRank)) continue; - const to = (0,__vite_ssr_import_2__.squareOf)(toFile, toRank); - if (!(0,__vite_ssr_import_3__.isPieceAt)(session, to)) { - moves.push({ pieceId, from, to, isCapture: false }); - } - }; - return moves; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUVBO0FBR0E7QUFDQTs7Ozs7QUFPQSxNQUFNLFNBQVMsd0JBQUU7QUFBQSxFQUNmLHdCQUFFLEtBQUs7QUFBQSxJQUNMO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsQ0FBQztBQUNIO0FBU0EsU0FBUyxlQUFlLEtBQWdCLE9BQStDO0FBRXJGLFFBQU0sVUFBVSxVQUFVLFVBQVUsSUFBSTtBQUN4QyxVQUFRLEtBQUs7QUFBQSxJQUNYLEtBQUs7QUFBZ0IsYUFBTyxFQUFFLElBQUksR0FBSSxJQUFJLFFBQVE7QUFBQSxJQUNsRCxLQUFLO0FBQWdCLGFBQU8sRUFBRSxJQUFJLEdBQUksSUFBSSxDQUFDLFFBQVE7QUFBQSxJQUNuRCxLQUFLO0FBQWdCLGFBQU8sRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFO0FBQUE7QUFBQSxJQUM1QyxLQUFLO0FBQWdCLGFBQU8sRUFBRSxJQUFJLEdBQUksSUFBSSxFQUFFO0FBQUE7QUFBQSxJQUM1QyxLQUFLO0FBQWdCLGFBQU8sRUFBRSxJQUFJLElBQUksSUFBSSxRQUFRO0FBQUE7QUFBQSxJQUNsRCxLQUFLO0FBQWdCLGFBQU8sRUFBRSxJQUFJLEdBQUksSUFBSSxRQUFRO0FBQUE7QUFBQSxJQUNsRCxLQUFLO0FBQWdCLGFBQU8sRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVE7QUFBQTtBQUFBLElBQ25ELEtBQUs7QUFBZ0IsYUFBTyxFQUFFLElBQUksR0FBSSxJQUFJLENBQUMsUUFBUTtBQUFBLEVBQ3JEO0FBQ0Y7QUFFTyxNQUFNLGlDQUE0RDtBQUFBLEVBQ3ZFLElBQUk7QUFBQSxFQUNKLFVBQVU7QUFBQSxFQUNWLE9BQU87QUFBQSxFQUNQLGFBQWE7QUFBQSxFQUNiLGNBQWM7QUFBQSxFQUNkLFFBQVE7QUFBQSxFQUNSLE1BQU0sU0FBa0IsU0FBbUIsZ0JBQTZCO0FBQ3RFLFlBQVEsT0FBTyxTQUFTLHNCQUFzQixjQUFjO0FBQUEsRUFDOUQ7QUFBQSxFQUNBLFNBQVMsT0FBc0I7QUFDN0IsV0FBTyxnQkFBZ0IsTUFBTSxLQUFLLElBQUksQ0FBQztBQUFBLEVBQ3pDO0FBQ0Y7QUFFQSx3Q0FBa0IsU0FBUyw4QkFBOEI7QUFlbEQsU0FBUyx1QkFDZCxTQUNBLFNBQ2E7QUFDYixRQUFNLGFBQWEsUUFBUSxJQUFJLFNBQVMsb0JBQW9CO0FBQzVELE1BQUksQ0FBQyxjQUFjLFdBQVcsV0FBVyxFQUFHLFFBQU8sQ0FBQztBQUVwRCxRQUFNLFVBQU8sd0NBQWlCLFNBQVMsT0FBTztBQUM5QyxRQUFNLFdBQVEscUNBQWMsU0FBUyxPQUFPO0FBQzVDLE1BQUksU0FBUyxRQUFRLFVBQVUsS0FBTSxRQUFPLENBQUM7QUFFN0MsUUFBTSxRQUFxQixDQUFDO0FBQzVCLGFBQVcsT0FBTyxZQUEyQjtBQUMzQyxVQUFNLEVBQUUsSUFBSSxHQUFHLElBQUksZUFBZSxLQUFLLEtBQUs7QUFDNUMsVUFBTSxZQUFTLDhCQUFPLElBQWMsSUFBSTtBQUN4QyxVQUFNLFlBQVMsOEJBQU8sSUFBYyxJQUFJO0FBQ3hDLFFBQUksSUFBQyxpQ0FBVSxRQUFRLE1BQU0sRUFBRztBQUNoQyxVQUFNLFFBQUssZ0NBQVMsUUFBUSxNQUFNO0FBQ2xDLFFBQUksSUFBQyxpQ0FBVSxTQUFTLEVBQUUsR0FBRztBQUMzQixZQUFNLEtBQUssRUFBRSxTQUFTLE1BQXNCLElBQUksV0FBVyxNQUFNLENBQUM7QUFBQSxJQUNwRTtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1QiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImRpcmVjdGlvbi1hZGRpdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgU2Vzc2lvbiwgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB7IE1PRElGSUVSX1JFR0lTVFJZIH0gZnJvbSBcIi4uL3JlZ2lzdHJ5LmpzXCI7XG5pbXBvcnQgdHlwZSB7IE1vZGlmaWVyRGVzY3JpcHRvciwgRGlyZWN0aW9uIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBpZWNlQ29sb3IsIFNxdWFyZSB9IGZyb20gXCIuLi8uLi9zY2hlbWEuanNcIjtcbmltcG9ydCB7IGZpbGVPZiwgcmFua09mLCBpc09uQm9hcmQsIHNxdWFyZU9mIH0gZnJvbSBcIi4uLy4uL2Nvb3JkLmpzXCI7XG5pbXBvcnQge1xuICBnZXRQaWVjZVBvc2l0aW9uLFxuICBnZXRQaWVjZUNvbG9yLFxuICBpc1BpZWNlQXQsXG59IGZyb20gXCIuLi8uLi9ydWxlcy9ib2FyZC1xdWVyaWVzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IExlZ2FsTW92ZSB9IGZyb20gXCIuLi8uLi9ydWxlcy90eXBlcy5qc1wiO1xuXG5jb25zdCBzY2hlbWEgPSB6LmFycmF5KFxuICB6LmVudW0oW1xuICAgIFwiZm9yd2FyZFwiLFxuICAgIFwiYmFja3dhcmRcIixcbiAgICBcImxlZnRcIixcbiAgICBcInJpZ2h0XCIsXG4gICAgXCJkaWFnb25hbC1mbFwiLFxuICAgIFwiZGlhZ29uYWwtZnJcIixcbiAgICBcImRpYWdvbmFsLWJsXCIsXG4gICAgXCJkaWFnb25hbC1iclwiLFxuICBdKSxcbik7XG50eXBlIFZhbHVlID0gei5pbmZlcjx0eXBlb2Ygc2NoZW1hPjtcblxuLyoqXG4gKiBDb21wdXRlIGZpbGUrcmFuayBkZWx0YSBmb3IgYSBuYW1lZCBkaXJlY3Rpb24gZnJvbSBhIHBpZWNlJ3MgcGVyc3BlY3RpdmUuXG4gKiBmb3J3YXJkL2JhY2t3YXJkIGFyZSBjb2xvci1yZWxhdGl2ZSAodG93YXJkL2F3YXkgZnJvbSBvcHBvbmVudCdzIGJhY2sgcmFuaykuXG4gKiBsZWZ0L3JpZ2h0IGFyZSBib2FyZC1hYnNvbHV0ZSAodG93YXJkIGEtZmlsZSAvIGgtZmlsZSByZXNwZWN0aXZlbHkpLlxuICogRGlhZ29uYWxzIGNvbWJpbmUgdGhlIHR3byBheGVzIGFjY29yZGluZ2x5LlxuICovXG5mdW5jdGlvbiBkaXJlY3Rpb25EZWx0YShkaXI6IERpcmVjdGlvbiwgY29sb3I6IFBpZWNlQ29sb3IpOiB7IGRmOiBudW1iZXI7IGRyOiBudW1iZXIgfSB7XG4gIC8vICsxID0gd2hpdGUgYWR2YW5jZXMgdXAgcmFua3M7IC0xID0gYmxhY2sgYWR2YW5jZXMgZG93biByYW5rc1xuICBjb25zdCBmb3J3YXJkID0gY29sb3IgPT09IFwid2hpdGVcIiA/IDEgOiAtMTtcbiAgc3dpdGNoIChkaXIpIHtcbiAgICBjYXNlIFwiZm9yd2FyZFwiOiAgICAgIHJldHVybiB7IGRmOiAwLCAgZHI6IGZvcndhcmQgfTtcbiAgICBjYXNlIFwiYmFja3dhcmRcIjogICAgIHJldHVybiB7IGRmOiAwLCAgZHI6IC1mb3J3YXJkIH07XG4gICAgY2FzZSBcImxlZnRcIjogICAgICAgICByZXR1cm4geyBkZjogLTEsIGRyOiAwIH07ICAgICAgICAvLyBhbHdheXMgdG93YXJkIGEtZmlsZVxuICAgIGNhc2UgXCJyaWdodFwiOiAgICAgICAgcmV0dXJuIHsgZGY6IDEsICBkcjogMCB9OyAgICAgICAgLy8gYWx3YXlzIHRvd2FyZCBoLWZpbGVcbiAgICBjYXNlIFwiZGlhZ29uYWwtZmxcIjogIHJldHVybiB7IGRmOiAtMSwgZHI6IGZvcndhcmQgfTsgIC8vIGZvcndhcmQgKyB0b3dhcmQgYS1maWxlXG4gICAgY2FzZSBcImRpYWdvbmFsLWZyXCI6ICByZXR1cm4geyBkZjogMSwgIGRyOiBmb3J3YXJkIH07ICAvLyBmb3J3YXJkICsgdG93YXJkIGgtZmlsZVxuICAgIGNhc2UgXCJkaWFnb25hbC1ibFwiOiAgcmV0dXJuIHsgZGY6IC0xLCBkcjogLWZvcndhcmQgfTsgLy8gYmFja3dhcmQgKyB0b3dhcmQgYS1maWxlXG4gICAgY2FzZSBcImRpYWdvbmFsLWJyXCI6ICByZXR1cm4geyBkZjogMSwgIGRyOiAtZm9yd2FyZCB9OyAvLyBiYWNrd2FyZCArIHRvd2FyZCBoLWZpbGVcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgRElSRUNUSU9OX0FERElUSU9OU19ERVNDUklQVE9SOiBNb2RpZmllckRlc2NyaXB0b3I8VmFsdWU+ID0ge1xuICBpZDogXCJkaXJlY3Rpb24tYWRkaXRpb25zXCIsXG4gIGF0dHJOYW1lOiBcIkRpcmVjdGlvbkFkZGl0aW9uc1wiLFxuICBsYWJlbDogXCJEaXJlY3Rpb24gQWRkaXRpb25zXCIsXG4gIHZhbHVlU2NoZW1hOiBzY2hlbWEsXG4gIHN0YWNraW5nUnVsZTogXCJ1bmlvblwiLFxuICB1aUZvcm06IFwiZGlyZWN0aW9uLXNldFwiLFxuICBhcHBseShzZXNzaW9uOiBTZXNzaW9uLCBwaWVjZUlkOiBFbnRpdHlJZCwgZWZmZWN0aXZlVmFsdWU6IFZhbHVlKTogdm9pZCB7XG4gICAgc2Vzc2lvbi5pbnNlcnQocGllY2VJZCwgXCJEaXJlY3Rpb25BZGRpdGlvbnNcIiwgZWZmZWN0aXZlVmFsdWUpO1xuICB9LFxuICBkZXNjcmliZSh2YWx1ZTogVmFsdWUpOiBzdHJpbmcge1xuICAgIHJldHVybiBgK0RpcmVjdGlvbnM6ICR7dmFsdWUuam9pbihcIiwgXCIpfWA7XG4gIH0sXG59O1xuXG5NT0RJRklFUl9SRUdJU1RSWS5yZWdpc3RlcihESVJFQ1RJT05fQURESVRJT05TX0RFU0NSSVBUT1IpO1xuXG4vKipcbiAqIEdlbmVyYXRlIDEtc3F1YXJlIG5vbi1jYXB0dXJlIG1vdmVzIGluIGFsbCBkaXJlY3Rpb25zIGxpc3RlZCBpbiB0aGVcbiAqIHBpZWNlJ3MgYERpcmVjdGlvbkFkZGl0aW9uc2AgZmFjdC5cbiAqXG4gKiBTZW1hbnRpY3M6XG4gKiAgLSBTdGVwLXBpZWNlIG9ubHk6IGV4YWN0bHkgMSBzcXVhcmUgcGVyIGRpcmVjdGlvbiAobm8gc2xpZGluZykuXG4gKiAgLSBOb24tY2FwdHVyZSBvbmx5OiBza2lwcyBzcXVhcmVzIG9jY3VwaWVkIGJ5IGFueSBwaWVjZS5cbiAqICAgIENhcHR1cmUgc2VtYW50aWNzIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkgYnkgQ2FwdHVyZUZsYWdzLlxuICogIC0gT3V0LW9mLWJvYXJkIHRhcmdldHMgYXJlIHNpbGVudGx5IHNraXBwZWQuXG4gKlxuICogQ2FsbGVkIGJ5IHRoZSBlbmdpbmUgaW50ZWdyYXRpb24gbGF5ZXIgKFQxNCkgYWZ0ZXIgdGhlIG1vZGlmaWVyIHByb2ZpbGVcbiAqIGhhcyBzZWVkZWQgYERpcmVjdGlvbkFkZGl0aW9uc2Agb24gdGhlIHBpZWNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVEaXJlY3Rpb25Nb3ZlcyhcbiAgc2Vzc2lvbjogU2Vzc2lvbixcbiAgcGllY2VJZDogRW50aXR5SWQsXG4pOiBMZWdhbE1vdmVbXSB7XG4gIGNvbnN0IGRpcmVjdGlvbnMgPSBzZXNzaW9uLmdldChwaWVjZUlkLCBcIkRpcmVjdGlvbkFkZGl0aW9uc1wiKSBhcyByZWFkb25seSBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgaWYgKCFkaXJlY3Rpb25zIHx8IGRpcmVjdGlvbnMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG5cbiAgY29uc3QgZnJvbSA9IGdldFBpZWNlUG9zaXRpb24oc2Vzc2lvbiwgcGllY2VJZCk7XG4gIGNvbnN0IGNvbG9yID0gZ2V0UGllY2VDb2xvcihzZXNzaW9uLCBwaWVjZUlkKTtcbiAgaWYgKGZyb20gPT09IG51bGwgfHwgY29sb3IgPT09IG51bGwpIHJldHVybiBbXTtcblxuICBjb25zdCBtb3ZlczogTGVnYWxNb3ZlW10gPSBbXTtcbiAgZm9yIChjb25zdCBkaXIgb2YgZGlyZWN0aW9ucyBhcyBEaXJlY3Rpb25bXSkge1xuICAgIGNvbnN0IHsgZGYsIGRyIH0gPSBkaXJlY3Rpb25EZWx0YShkaXIsIGNvbG9yKTtcbiAgICBjb25zdCB0b0ZpbGUgPSBmaWxlT2YoZnJvbSBhcyBTcXVhcmUpICsgZGY7XG4gICAgY29uc3QgdG9SYW5rID0gcmFua09mKGZyb20gYXMgU3F1YXJlKSArIGRyO1xuICAgIGlmICghaXNPbkJvYXJkKHRvRmlsZSwgdG9SYW5rKSkgY29udGludWU7XG4gICAgY29uc3QgdG8gPSBzcXVhcmVPZih0b0ZpbGUsIHRvUmFuayk7XG4gICAgaWYgKCFpc1BpZWNlQXQoc2Vzc2lvbiwgdG8pKSB7XG4gICAgICBtb3Zlcy5wdXNoKHsgcGllY2VJZCwgZnJvbTogZnJvbSBhcyBTcXVhcmUsIHRvLCBpc0NhcHR1cmU6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbW92ZXM7XG59XG4iXSwiZmlsZSI6Ii9zcmMvbW9kaWZpZXJzL2Rlc2NyaXB0b3JzL2RpcmVjdGlvbi1hZGRpdGlvbnMudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/a7924c57f97592e4fe37cc13ea6732b04b6d91ed b/7xOfJqsDU787fe61oSCq1/web/a7924c57f97592e4fe37cc13ea6732b04b6d91ed deleted file mode 100644 index 5fe5f17..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/a7924c57f97592e4fe37cc13ea6732b04b6d91ed +++ /dev/null @@ -1,23 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "PIECE_TYPE_REGISTRY", { enumerable: true, configurable: true, get(){ try { return PIECE_TYPE_REGISTRY } catch {} }}); -class PieceTypeRegistryClass { - #byId = /* @__PURE__ */ new Map(); - register(def) { - this.#byId.set(def.id, def); - } - get(id) { - return this.#byId.get(id); - } - has(id) { - return this.#byId.has(id); - } - getAll() { - return [...this.#byId.values()]; - } - ids() { - return [...this.#byId.keys()]; - } -} -const PIECE_TYPE_REGISTRY = new PieceTypeRegistryClass(); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQTZFQSxNQUFNLHVCQUF1QjtBQUFBLEVBQ2xCLFFBQVEsb0JBQUksSUFBMEI7QUFBQSxFQUUvQyxTQUFTLEtBQXlCO0FBQ2hDLFNBQUssTUFBTSxJQUFJLElBQUksSUFBSSxHQUFHO0FBQUEsRUFDNUI7QUFBQSxFQUVBLElBQUksSUFBc0M7QUFDeEMsV0FBTyxLQUFLLE1BQU0sSUFBSSxFQUFFO0FBQUEsRUFDMUI7QUFBQSxFQUVBLElBQUksSUFBcUI7QUFDdkIsV0FBTyxLQUFLLE1BQU0sSUFBSSxFQUFFO0FBQUEsRUFDMUI7QUFBQSxFQUVBLFNBQXlCO0FBQ3ZCLFdBQU8sQ0FBQyxHQUFHLEtBQUssTUFBTSxPQUFPLENBQUM7QUFBQSxFQUNoQztBQUFBLEVBRUEsTUFBZ0I7QUFDZCxXQUFPLENBQUMsR0FBRyxLQUFLLE1BQU0sS0FBSyxDQUFDO0FBQUEsRUFDOUI7QUFDRjtBQUVPLE1BQU0sc0JBQXNCLElBQUksdUJBQXVCIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJwaWVjZS10eXBlLXJlZ2lzdHJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUnVudGltZSByZWdpc3RyeSBvZiBwaWVjZSB0eXBlcy5cbiAqXG4gKiBQaWVjZSB0eXBlcyBhcmUgbm8gbG9uZ2VyIGEgY2xvc2VkIFR5cGVTY3JpcHQgdW5pb24g4oCUIG5ldyB0eXBlc1xuICogKENhbm5vbiwgQW1hem9uLCBOaWdodHJpZGVyLCBmYW50YXN5IHZhcmlhbnRzKSByZWdpc3RlciBoZXJlIGFuZFxuICogcGFydGljaXBhdGUgaW4gbW92ZSBnZW5lcmF0aW9uLCBhdHRhY2sgZGV0ZWN0aW9uLCBVSSByZW5kZXJpbmcsIGFuZFxuICogc2F2ZS1zdGF0ZSBzZXJpYWxpemF0aW9uIHdpdGhvdXQgYW55IGNvcmUgZW5naW5lIGVkaXQuXG4gKlxuICogIyMgUmVnaXN0cmF0aW9uXG4gKlxuICogQ29yZSBGSURFIHR5cGVzIChwYXduLCBrbmlnaHQsIGJpc2hvcCwgcm9vaywgcXVlZW4sIGtpbmcpIHJlZ2lzdGVyXG4gKiB0aGVtc2VsdmVzIGZyb20gYC4vY29yZS1waWVjZS10eXBlcy50c2AsIHdoaWNoIGlzIGltcG9ydGVkIG9uY2UgYXRcbiAqIHRoZSB0b3Agb2YgdGhlIHByZXNldHMgYmFycmVsLiBDdXN0b20gdHlwZXMgcmVnaXN0ZXIgdmlhIGEgcHJlc2V0J3NcbiAqIHNpZGUtZWZmZWN0IGltcG9ydCwgc2FtZSBwYXR0ZXJuIGFzIHByZXNldCBydWxlIHJlZ2lzdHJhdGlvbi5cbiAqXG4gKiAjIyBBY2Nlc3NcbiAqXG4gKiBFbmdpbmUgZGlzcGF0Y2ggdGFibGVzIChgUElFQ0VfTU9WRV9HRVRURVJTYCwgYEFUVEFDS19QUk9CRVNgLFxuICogYE1PVkVfR0VUVEVSU2AgaW4gcnVsZXMvY2hlY2ttYXRlLnRzICsgcnVsZXMvc3RhbGVtYXRlLnRzKSBxdWVyeVxuICogdGhlIHJlZ2lzdHJ5IHJhdGhlciB0aGFuIGhvbGRpbmcgdGhlaXIgb3duIGhhcmRjb2RlZCBtYXBzLiBVSVxuICogYDxQaWVjZT5gIGxvb2tzIHVwIFNWRyBhc3NldHMgaGVyZSB0b28uXG4gKlxuICogIyMgV2h5IHN0cmluZ3MgaW5zdGVhZCBvZiBhIGJyYW5kZWQgdHlwZVxuICpcbiAqIFBpZWNlLXR5cGUgaWRzIGFyZSBwbGFpbiBzdHJpbmdzIHNvIHRoaXJkLXBhcnR5IHByZXNldCBwYWNrYWdlc1xuICogZG9uJ3QgbmVlZCB0byBjb2xsYWJvcmF0ZSBvbiBhIHNoYXJlZCB1bmlvbi4gVGhlIHJlZ2lzdHJ5J3MgcnVudGltZVxuICogY2hlY2sgaXMgdGhlIHNvdXJjZSBvZiB0cnV0aCDigJQgdW5rbm93biBpZHMgdGhyb3cuIEV4aGF1c3RpdmVuZXNzXG4gKiBjaGVja3Mgb24gRklERS1vbmx5IGxvZ2ljIHN0aWxsIHdvcmsgYnkgbmFycm93aW5nIHRvIHRoZSBidWlsdC1pblxuICogc3RyaW5nLWxpdGVyYWwgdW5pb24gd2hlcmUgbmVlZGVkLlxuICovXG5pbXBvcnQgdHlwZSB7IFNlc3Npb24sIEVudGl0eUlkIH0gZnJvbSBcIkBwYXJhdHlwZS9yZXRlXCI7XG5pbXBvcnQgdHlwZSB7IExlZ2FsTW92ZSB9IGZyb20gXCIuLi9ydWxlcy90eXBlcy5qc1wiO1xuXG4vKipcbiAqIEEgcGllY2UgdHlwZSdzIG1vdmUgZ2VuZXJhdG9yOiBnaXZlbiB0aGUgY3VycmVudCBXTSArIGEgcGllY2UgaWRcbiAqIG9mIHRoaXMgdHlwZSwgcmV0dXJuIGV2ZXJ5IHBzZXVkby1sZWdhbCBtb3ZlLiBcIlBzZXVkby1sZWdhbFwiIG1lYW5zXG4gKiBnZW9tZXRyeSArIGJsb2NrZXJzIGFyZSBob25vcmVkOyBzZWxmLWNoZWNrIGZpbHRlcmluZyBoYXBwZW5zXG4gKiBsYXRlciBpbiB0aGUgZW5naW5lLlxuICovXG5leHBvcnQgdHlwZSBQaWVjZU1vdmVHZW5lcmF0b3IgPSAoXG4gIHNlc3Npb246IFNlc3Npb24sXG4gIHBpZWNlSWQ6IEVudGl0eUlkLFxuKSA9PiBMZWdhbE1vdmVbXTtcblxuLyoqXG4gKiBBIHBpZWNlIHR5cGUncyBhdHRhY2sgcHJvYmU6IFwiZG9lcyB0aGlzIHBpZWNlIGF0dGFjayBgdGFyZ2V0YD9cIlxuICogVXNlZCBmb3IgY2hlY2sgZGV0ZWN0aW9uLiBEaWZmZXJlbnQgZnJvbSB0aGUgbW92ZSBnZW5lcmF0b3JcbiAqIGJlY2F1c2UgcGF3bnMgYXR0YWNrIGRpYWdvbmFsbHkgd2l0aG91dCBuZWVkaW5nIGFuIGVuZW15IHRoZXJlIOKAlFxuICogYSBraW5nIHN0aWxsIGNhbid0IHN0ZXAgb250byB0aGF0IHNxdWFyZS5cbiAqL1xuZXhwb3J0IHR5cGUgUGllY2VBdHRhY2tQcm9iZSA9IChcbiAgc2Vzc2lvbjogU2Vzc2lvbixcbiAgcGllY2VJZDogRW50aXR5SWQsXG4gIHRhcmdldDogbnVtYmVyLFxuKSA9PiBib29sZWFuO1xuXG4vKipcbiAqIFNWRyBhc3NldCBVUkxzIHBlciBjb2xvci4gVGhlIFVJJ3MgYDxQaWVjZT5gIGNvbXBvbmVudCByZWFkcyB0aGVzZVxuICogdG8gcmVuZGVyIHRoZSBwaWVjZS4gQnVuZGxlZCB2aWEgVml0ZSBgP3VybGAgaW1wb3J0cyBzbyBlYWNoIFNWR1xuICogYmVjb21lcyBhIFVSTCBzdHJpbmcgYXQgYnVpbGQgdGltZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaWVjZVR5cGVBc3NldHMge1xuICByZWFkb25seSB3aGl0ZTogc3RyaW5nO1xuICByZWFkb25seSBibGFjazogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZ1bGwgZGVmaW5pdGlvbiBvZiBhIHJlZ2lzdGVyZWQgcGllY2UgdHlwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaWVjZVR5cGVEZWYge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICByZWFkb25seSBtb3ZlR2VuZXJhdG9yOiBQaWVjZU1vdmVHZW5lcmF0b3I7XG4gIHJlYWRvbmx5IGF0dGFja1Byb2JlOiBQaWVjZUF0dGFja1Byb2JlO1xuICByZWFkb25seSBhc3NldHM6IFBpZWNlVHlwZUFzc2V0cztcbn1cblxuY2xhc3MgUGllY2VUeXBlUmVnaXN0cnlDbGFzcyB7XG4gIHJlYWRvbmx5ICNieUlkID0gbmV3IE1hcDxzdHJpbmcsIFBpZWNlVHlwZURlZj4oKTtcblxuICByZWdpc3RlcihkZWY6IFBpZWNlVHlwZURlZik6IHZvaWQge1xuICAgIHRoaXMuI2J5SWQuc2V0KGRlZi5pZCwgZGVmKTtcbiAgfVxuXG4gIGdldChpZDogc3RyaW5nKTogUGllY2VUeXBlRGVmIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jYnlJZC5nZXQoaWQpO1xuICB9XG5cbiAgaGFzKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jYnlJZC5oYXMoaWQpO1xuICB9XG5cbiAgZ2V0QWxsKCk6IFBpZWNlVHlwZURlZltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuI2J5SWQudmFsdWVzKCldO1xuICB9XG5cbiAgaWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuI2J5SWQua2V5cygpXTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgUElFQ0VfVFlQRV9SRUdJU1RSWSA9IG5ldyBQaWVjZVR5cGVSZWdpc3RyeUNsYXNzKCk7XG4iXSwiZmlsZSI6Ii9zcmMvcHJlc2V0cy9waWVjZS10eXBlLXJlZ2lzdHJ5LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/a8cdfcd90e80afdd2ed30a5af912bd845278b3cc b/7xOfJqsDU787fe61oSCq1/web/a8cdfcd90e80afdd2ed30a5af912bd845278b3cc deleted file mode 100644 index 3041346..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/a8cdfcd90e80afdd2ed30a5af912bd845278b3cc +++ /dev/null @@ -1,84 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/engine.ts", {"importedNames":["ChessEngine"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/pgn.ts", {"importedNames":["parseSanMove"]}); -function resolveMove(engine, san) { - const parsed = (0,__vite_ssr_import_2__.parseSanMove)(san); - const legalMoves = engine.getAllLegalMoves(); - if (parsed.isCastlingKingside || parsed.isCastlingQueenside) { - const m = legalMoves.find( - (mv) => mv.isCastling === true && (parsed.isCastlingKingside && mv.side === "kingside" || parsed.isCastlingQueenside && mv.side === "queenside") - ); - if (!m) { - throw new Error( - `Castling not available for "${san}" (turn=${engine.getCurrentTurn()})` - ); - }; - return m; - }; - const facts = engine.session.allFacts(); - const candidates = legalMoves.filter((mv) => { - if (mv.to !== parsed.to) return false; - const typeFact = facts.find( - (f) => f.id === mv.pieceId && f.attr === "PieceType" - ); - if (typeFact?.value !== parsed.pieceType) return false; - if (parsed.from !== void 0 && mv.from !== parsed.from) return false; - if (parsed.fromFile !== void 0 && mv.from % 8 !== parsed.fromFile) { - return false; - }; - if (parsed.fromRank !== void 0 && Math.floor(mv.from / 8) !== parsed.fromRank) { - return false; - }; - return true; - }); - if (candidates.length === 0) { - const turn = engine.getCurrentTurn(); - const allMovesSummary = legalMoves.slice(0, 8).map((mv) => `${mv.from}→${mv.to}`).join(", "); - throw new Error( - `No legal move found for "${san}" (to=${parsed.to}, type=${parsed.pieceType}, turn=${turn}). First 8 legal moves: ${allMovesSummary}` - ); - }; - if (parsed.promoteTo) { - const promo = candidates.find((mv) => mv.promoteTo === parsed.promoteTo); - if (promo) return promo; - }; - return candidates[0]; -} -function playGame(moves) { - const engine = new __vite_ssr_import_1__.ChessEngine(); - let result = "ongoing"; - for (const san of moves) { - const move = resolveMove(engine, san); - result = engine.applyMove(move, move.promoteTo ?? "queen"); - }; - return { engine, result }; -} -(0,__vite_ssr_import_0__.describe)("Classic chess games — FIDE replay (P2.23)", () => { - (0,__vite_ssr_import_0__.it)("Fool's Mate (2 white moves, white checkmated)", () => { - const { result } = playGame(["f3", "e5", "g4", "Qh4"]); - (0,__vite_ssr_import_0__.expect)(result).toBe("checkmate"); - }); - (0,__vite_ssr_import_0__.it)("Scholar's Mate (4 moves, black checkmated)", () => { - const { result } = playGame(["e4", "e5", "Bc4", "Nc6", "Qh5", "Nf6", "Qxf7"]); - (0,__vite_ssr_import_0__.expect)(result).toBe("checkmate"); - }); - (0,__vite_ssr_import_0__.it)("Ruy López opening plays 6 moves without error", () => { - const { engine, result } = playGame(["e4", "e5", "Nf3", "Nc6", "Bb5", "a6"]); - (0,__vite_ssr_import_0__.expect)(result).toBe("ongoing"); - (0,__vite_ssr_import_0__.expect)(engine.getCurrentTurn()).toBe("white"); - }); - (0,__vite_ssr_import_0__.it)("Sicilian Defense — pawn capture cxd4 on move 3", () => { - const { engine, result } = playGame(["e4", "c5", "Nf3", "d6", "d4", "cxd4"]); - (0,__vite_ssr_import_0__.expect)(result).toBe("ongoing"); - (0,__vite_ssr_import_0__.expect)(engine.getCurrentTurn()).toBe("white"); - }); - (0,__vite_ssr_import_0__.it)("Italian Game / Evans Gambit opening — 10 moves, bishop capture", () => { - const moves = ["e4", "e5", "Nf3", "Nc6", "Bc4", "Bc5", "b4", "Bxb4", "c3", "Ba5"]; - const { engine, result } = playGame(moves); - (0,__vite_ssr_import_0__.expect)(result).toBe("ongoing"); - (0,__vite_ssr_import_0__.expect)(engine.getCurrentTurn()).toBe("white"); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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TUFBTSxNQUFNLE9BQU8sT0FBTyxPQUFPLElBQUksQ0FBQztBQUMzRSxxQ0FBTyxNQUFNLEVBQUUsS0FBSyxTQUFTO0FBRTdCLHFDQUFPLE9BQU8sZUFBZSxDQUFDLEVBQUUsS0FBSyxPQUFPO0FBQUEsRUFDOUMsQ0FBQztBQUdELCtCQUFHLGtEQUFrRCxNQUFNO0FBRXpELFVBQU0sRUFBRSxRQUFRLE9BQU8sSUFBSSxTQUFTLENBQUMsTUFBTSxNQUFNLE9BQU8sTUFBTSxNQUFNLE1BQU0sQ0FBQztBQUMzRSxxQ0FBTyxNQUFNLEVBQUUsS0FBSyxTQUFTO0FBRTdCLHFDQUFPLE9BQU8sZUFBZSxDQUFDLEVBQUUsS0FBSyxPQUFPO0FBQUEsRUFDOUMsQ0FBQztBQUdELCtCQUFHLGtFQUFrRSxNQUFNO0FBRXpFLFVBQU0sUUFBUSxDQUFDLE1BQU0sTUFBTSxPQUFPLE9BQU8sT0FBTyxPQUFPLE1BQU0sUUFBUSxNQUFNLEtBQUs7QUFDaEYsVUFBTSxFQUFFLFFBQVEsT0FBTyxJQUFJLFNBQVMsS0FBSztBQUN6QyxxQ0FBTyxNQUFNLEVBQUUsS0FBSyxTQUFTO0FBRTdCLHFDQUFPLE9BQU8sZUFBZSxDQUFDLEVBQUUsS0FBSyxPQUFPO0FBQUEsRUFDOUMsQ0FBQztBQUNILENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImNsYXNzaWMtZ2FtZXMudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZJREUgZ2FtZSByZXBsYXkgaW50ZWdyYXRpb24gdGVzdHMgKFAyLjIzKS5cbiAqXG4gKiBFYWNoIHRlc3QgcmVwbGF5cyBhIHJlYWwgY2hlc3MgZ2FtZSAob3Igb3BlbmluZyBzZXF1ZW5jZSkgdGhyb3VnaCB0aGVcbiAqIHJ1bGVzIGVuZ2luZSwgYXNzZXJ0aW5nIHRoYXQgZXZlcnkgbW92ZSBpcyBhY2NlcHRlZCB3aXRob3V0IGVycm9yIGFuZFxuICogdGhhdCB0aGUgY29ycmVjdCB0ZXJtaW5hbCBzdGF0ZSBpcyBkZXRlY3RlZC5cbiAqL1xuaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgeyBDaGVzc0VuZ2luZSwgdHlwZSBHYW1lUmVzdWx0IH0gZnJvbSBcIi4uLy4uL3NyYy9lbmdpbmUuanNcIjtcbmltcG9ydCB7IHBhcnNlU2FuTW92ZSB9IGZyb20gXCIuLi8uLi9zcmMvcGduLmpzXCI7XG5pbXBvcnQgdHlwZSB7IExlZ2FsTW92ZSB9IGZyb20gXCIuLi8uLi9zcmMvcnVsZXMvdHlwZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgQ2FzdGxpbmdNb3ZlIH0gZnJvbSBcIi4uLy4uL3NyYy9ydWxlcy9jYXN0bGluZy5qc1wiO1xuXG4vLyDilIDilIAgTW92ZSByZXNvbHV0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFJlc29sdmUgYSBTQU4gc3RyaW5nIGFnYWluc3QgdGhlIGVuZ2luZSdzIGN1cnJlbnQgbGVnYWwgbW92ZXMuXG4gKiBVc2VzIHBpZWNlLXR5cGUsIHRhcmdldCBzcXVhcmUsIGFuZCBhdmFpbGFibGUgZGlzYW1iaWd1YXRpb24gZmllbGRzXG4gKiAoZnVsbCBmcm9tLXNxdWFyZSwgZmlsZSBoaW50LCByYW5rIGhpbnQpIHRvIGlkZW50aWZ5IHRoZSB1bmlxdWUgbGVnYWwgbW92ZS5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU1vdmUoZW5naW5lOiBDaGVzc0VuZ2luZSwgc2FuOiBzdHJpbmcpOiBMZWdhbE1vdmUge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZVNhbk1vdmUoc2FuKTtcbiAgY29uc3QgbGVnYWxNb3ZlcyA9IGVuZ2luZS5nZXRBbGxMZWdhbE1vdmVzKCk7XG5cbiAgLy8g4pSA4pSAIENhc3RsaW5nIOKUgOKUgFxuICBpZiAocGFyc2VkLmlzQ2FzdGxpbmdLaW5nc2lkZSB8fCBwYXJzZWQuaXNDYXN0bGluZ1F1ZWVuc2lkZSkge1xuICAgIGNvbnN0IG0gPSBsZWdhbE1vdmVzLmZpbmQoXG4gICAgICBtdiA9PlxuICAgICAgICAobXYgYXMgQ2FzdGxpbmdNb3ZlKS5pc0Nhc3RsaW5nID09PSB0cnVlICYmXG4gICAgICAgICgocGFyc2VkLmlzQ2FzdGxpbmdLaW5nc2lkZSAmJiAobXYgYXMgQ2FzdGxpbmdNb3ZlKS5zaWRlID09PSBcImtpbmdzaWRlXCIpIHx8XG4gICAgICAgICAgKHBhcnNlZC5pc0Nhc3RsaW5nUXVlZW5zaWRlICYmIChtdiBhcyBDYXN0bGluZ01vdmUpLnNpZGUgPT09IFwicXVlZW5zaWRlXCIpKSxcbiAgICApO1xuICAgIGlmICghbSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2FzdGxpbmcgbm90IGF2YWlsYWJsZSBmb3IgXCIke3Nhbn1cIiAodHVybj0ke2VuZ2luZS5nZXRDdXJyZW50VHVybigpfSlgLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG07XG4gIH1cblxuICAvLyDilIDilIAgUGllY2UvcGF3biBtb3ZlcyDilIDilIBcbiAgY29uc3QgZmFjdHMgPSBlbmdpbmUuc2Vzc2lvbi5hbGxGYWN0cygpO1xuXG4gIGNvbnN0IGNhbmRpZGF0ZXMgPSBsZWdhbE1vdmVzLmZpbHRlcihtdiA9PiB7XG4gICAgLy8gRmlsdGVyIGJ5IHRhcmdldCBzcXVhcmVcbiAgICBpZiAobXYudG8gIT09IHBhcnNlZC50bykgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gRmlsdGVyIGJ5IHBpZWNlIHR5cGVcbiAgICBjb25zdCB0eXBlRmFjdCA9IGZhY3RzLmZpbmQoXG4gICAgICBmID0+IGYuaWQgPT09IG12LnBpZWNlSWQgJiYgZi5hdHRyID09PSBcIlBpZWNlVHlwZVwiLFxuICAgICk7XG4gICAgaWYgKHR5cGVGYWN0Py52YWx1ZSAhPT0gcGFyc2VkLnBpZWNlVHlwZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gRGlzYW1iaWd1YXRpb246IGZ1bGwgZnJvbS1zcXVhcmVcbiAgICBpZiAocGFyc2VkLmZyb20gIT09IHVuZGVmaW5lZCAmJiBtdi5mcm9tICE9PSBwYXJzZWQuZnJvbSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gRGlzYW1iaWd1YXRpb246IGZpbGUgaGludFxuICAgIGlmIChwYXJzZWQuZnJvbUZpbGUgIT09IHVuZGVmaW5lZCAmJiAobXYuZnJvbSAlIDgpICE9PSBwYXJzZWQuZnJvbUZpbGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBEaXNhbWJpZ3VhdGlvbjogcmFuayBoaW50XG4gICAgaWYgKFxuICAgICAgcGFyc2VkLmZyb21SYW5rICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIE1hdGguZmxvb3IobXYuZnJvbSAvIDgpICE9PSBwYXJzZWQuZnJvbVJhbmtcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG5cbiAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc3QgdHVybiA9IGVuZ2luZS5nZXRDdXJyZW50VHVybigpO1xuICAgIGNvbnN0IGFsbE1vdmVzU3VtbWFyeSA9IGxlZ2FsTW92ZXNcbiAgICAgIC5zbGljZSgwLCA4KVxuICAgICAgLm1hcChtdiA9PiBgJHttdi5mcm9tfeKGkiR7bXYudG99YClcbiAgICAgIC5qb2luKFwiLCBcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYE5vIGxlZ2FsIG1vdmUgZm91bmQgZm9yIFwiJHtzYW59XCIgYCArXG4gICAgICAgIGAodG89JHtwYXJzZWQudG99LCB0eXBlPSR7cGFyc2VkLnBpZWNlVHlwZX0sIHR1cm49JHt0dXJufSkuIGAgK1xuICAgICAgICBgRmlyc3QgOCBsZWdhbCBtb3ZlczogJHthbGxNb3Zlc1N1bW1hcnl9YCxcbiAgICApO1xuICB9XG5cbiAgLy8gSWYgcHJvbW90aW9uLCBwcmVmZXIgdGhlIG1hdGNoaW5nIHByb21vdGVUbyB2YXJpYW50XG4gIGlmIChwYXJzZWQucHJvbW90ZVRvKSB7XG4gICAgY29uc3QgcHJvbW8gPSBjYW5kaWRhdGVzLmZpbmQobXYgPT4gbXYucHJvbW90ZVRvID09PSBwYXJzZWQucHJvbW90ZVRvKTtcbiAgICBpZiAocHJvbW8pIHJldHVybiBwcm9tbztcbiAgfVxuXG4gIHJldHVybiBjYW5kaWRhdGVzWzBdITtcbn1cblxuLyoqXG4gKiBQbGF5IGEgc2VxdWVuY2Ugb2YgU0FOIG1vdmVzIG9uIGEgZnJlc2ggZW5naW5lLlxuICogUmV0dXJucyB0aGUgZW5naW5lIGFuZCB0aGUgcmVzdWx0IHN0cmluZyBhZnRlciB0aGUgbGFzdCBtb3ZlLlxuICovXG5mdW5jdGlvbiBwbGF5R2FtZShtb3Zlczogc3RyaW5nW10pOiB7IGVuZ2luZTogQ2hlc3NFbmdpbmU7IHJlc3VsdDogR2FtZVJlc3VsdCB9IHtcbiAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gIGxldCByZXN1bHQ6IEdhbWVSZXN1bHQgPSBcIm9uZ29pbmdcIjtcbiAgZm9yIChjb25zdCBzYW4gb2YgbW92ZXMpIHtcbiAgICBjb25zdCBtb3ZlID0gcmVzb2x2ZU1vdmUoZW5naW5lLCBzYW4pO1xuICAgIHJlc3VsdCA9IGVuZ2luZS5hcHBseU1vdmUobW92ZSwgbW92ZS5wcm9tb3RlVG8gPz8gXCJxdWVlblwiKTtcbiAgfVxuICByZXR1cm4geyBlbmdpbmUsIHJlc3VsdCB9O1xufVxuXG4vLyDilIDilIAgVGVzdHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmRlc2NyaWJlKFwiQ2xhc3NpYyBjaGVzcyBnYW1lcyDigJQgRklERSByZXBsYXkgKFAyLjIzKVwiLCAoKSA9PiB7XG4gIC8vIOKUgOKUgCAxLiBGb29sJ3MgTWF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy8gU2hvcnRlc3QgcG9zc2libGUgY2hlY2ttYXRlOiB3aGl0ZSBzZWxmLWRlc3RydWN0cyBpbiAyIG1vdmVzLlxuICBpdChcIkZvb2wncyBNYXRlICgyIHdoaXRlIG1vdmVzLCB3aGl0ZSBjaGVja21hdGVkKVwiLCAoKSA9PiB7XG4gICAgLy8gMS4gZjMgZTUgMi4gZzQgUWg0I1xuICAgIGNvbnN0IHsgcmVzdWx0IH0gPSBwbGF5R2FtZShbXCJmM1wiLCBcImU1XCIsIFwiZzRcIiwgXCJRaDRcIl0pO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoXCJjaGVja21hdGVcIik7XG4gIH0pO1xuXG4gIC8vIOKUgOKUgCAyLiBTY2hvbGFyJ3MgTWF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy8gQ2xhc3NpYyA0LW1vdmUgY2hlY2ttYXRlIGFnYWluc3QgYSBjYXJlbGVzcyBibGFjay5cbiAgaXQoXCJTY2hvbGFyJ3MgTWF0ZSAoNCBtb3ZlcywgYmxhY2sgY2hlY2ttYXRlZClcIiwgKCkgPT4ge1xuICAgIC8vIDEuIGU0IGU1IDIuIEJjNCBOYzYgMy4gUWg1IE5mNj8/IDQuIFF4ZjcjXG4gICAgY29uc3QgeyByZXN1bHQgfSA9IHBsYXlHYW1lKFtcImU0XCIsIFwiZTVcIiwgXCJCYzRcIiwgXCJOYzZcIiwgXCJRaDVcIiwgXCJOZjZcIiwgXCJReGY3XCJdKTtcbiAgICBleHBlY3QocmVzdWx0KS50b0JlKFwiY2hlY2ttYXRlXCIpO1xuICB9KTtcblxuICAvLyDilIDilIAgMy4gUnV5IEzDs3BleiBvcGVuaW5nICg2IG1vdmVzKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgaXQoXCJSdXkgTMOzcGV6IG9wZW5pbmcgcGxheXMgNiBtb3ZlcyB3aXRob3V0IGVycm9yXCIsICgpID0+IHtcbiAgICAvLyAxLiBlNCBlNSAyLiBOZjMgTmM2IDMuIEJiNSBhNlxuICAgIGNvbnN0IHsgZW5naW5lLCByZXN1bHQgfSA9IHBsYXlHYW1lKFtcImU0XCIsIFwiZTVcIiwgXCJOZjNcIiwgXCJOYzZcIiwgXCJCYjVcIiwgXCJhNlwiXSk7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9CZShcIm9uZ29pbmdcIik7XG4gICAgLy8gQWZ0ZXIgNiBoYWxmLW1vdmVzICgzIGZ1bGwpLCB3aGl0ZSB0byBtb3ZlXG4gICAgZXhwZWN0KGVuZ2luZS5nZXRDdXJyZW50VHVybigpKS50b0JlKFwid2hpdGVcIik7XG4gIH0pO1xuXG4gIC8vIOKUgOKUgCA0LiBTaWNpbGlhbiBEZWZlbnNlIOKAlCBjYXB0dXJlIG9uIGQ0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBpdChcIlNpY2lsaWFuIERlZmVuc2Ug4oCUIHBhd24gY2FwdHVyZSBjeGQ0IG9uIG1vdmUgM1wiLCAoKSA9PiB7XG4gICAgLy8gMS4gZTQgYzUgMi4gTmYzIGQ2IDMuIGQ0IGN4ZDRcbiAgICBjb25zdCB7IGVuZ2luZSwgcmVzdWx0IH0gPSBwbGF5R2FtZShbXCJlNFwiLCBcImM1XCIsIFwiTmYzXCIsIFwiZDZcIiwgXCJkNFwiLCBcImN4ZDRcIl0pO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoXCJvbmdvaW5nXCIpO1xuICAgIC8vIDYgaGFsZi1tb3ZlcyBwbGF5ZWQ7IHdoaXRlIHRvIG1vdmVcbiAgICBleHBlY3QoZW5naW5lLmdldEN1cnJlbnRUdXJuKCkpLnRvQmUoXCJ3aGl0ZVwiKTtcbiAgfSk7XG5cbiAgLy8g4pSA4pSAIDUuIEl0YWxpYW4gR2FtZSDigJQgMTAgbW92ZXMgd2l0aCBiaXNob3AgY2FwdHVyZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgaXQoXCJJdGFsaWFuIEdhbWUgLyBFdmFucyBHYW1iaXQgb3BlbmluZyDigJQgMTAgbW92ZXMsIGJpc2hvcCBjYXB0dXJlXCIsICgpID0+IHtcbiAgICAvLyAxLiBlNCBlNSAyLiBOZjMgTmM2IDMuIEJjNCBCYzUgNC4gYjQgQnhiNCA1LiBjMyBCYTVcbiAgICBjb25zdCBtb3ZlcyA9IFtcImU0XCIsIFwiZTVcIiwgXCJOZjNcIiwgXCJOYzZcIiwgXCJCYzRcIiwgXCJCYzVcIiwgXCJiNFwiLCBcIkJ4YjRcIiwgXCJjM1wiLCBcIkJhNVwiXTtcbiAgICBjb25zdCB7IGVuZ2luZSwgcmVzdWx0IH0gPSBwbGF5R2FtZShtb3Zlcyk7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9CZShcIm9uZ29pbmdcIik7XG4gICAgLy8gMTAgaGFsZi1tb3ZlcyAoNSBmdWxsKSwgd2hpdGUgdG8gbW92ZVxuICAgIGV4cGVjdChlbmdpbmUuZ2V0Q3VycmVudFR1cm4oKSkudG9CZShcIndoaXRlXCIpO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL2NoZXNzL3Rlc3RzL2ZpZGUtZ2FtZXMvY2xhc3NpYy1nYW1lcy50ZXN0LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/abaa22879be648e77307809e2fed3e33788b7d38 b/7xOfJqsDU787fe61oSCq1/web/abaa22879be648e77307809e2fed3e33788b7d38 deleted file mode 100644 index d0bcb75..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/abaa22879be648e77307809e2fed3e33788b7d38 +++ /dev/null @@ -1,47 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["fileOf","rankOf","squareOf","isOnBoard"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/rules/board-queries.ts", {"importedNames":["isAllyAt","isPieceAt"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/presets/registry.ts", {"importedNames":["PRESET_REGISTRY"]}); -const ORTHOGONAL_DELTAS = [ - [1, 0], - [-1, 0], - [0, 1], - [0, -1] -]; -__vite_ssr_import_2__.PRESET_REGISTRY.register({ - id: "bishops-ignore-color", - name: "Colour-Blind Bishops", - description: "Bishops may additionally step one square orthogonally to an empty or enemy-occupied square.", - incompatibleWith: [], - requires: [], - getExtraMoves: (engine, pieceId) => { - const session = engine.session; - const facts = session.allFacts(); - const typeFact = facts.find((f) => f.id === pieceId && f.attr === "PieceType"); - if (!typeFact || typeFact.value !== "bishop") return []; - const colorFact = facts.find((f) => f.id === pieceId && f.attr === "Color"); - const posFact = facts.find((f) => f.id === pieceId && f.attr === "Position"); - if (!colorFact || !posFact) return []; - const color = colorFact.value; - const from = posFact.value; - const file = (0,__vite_ssr_import_0__.fileOf)(from); - const rank = (0,__vite_ssr_import_0__.rankOf)(from); - const moves = []; - for (const [df, dr] of ORTHOGONAL_DELTAS) { - const nf = file + df; - const nr = rank + dr; - if (!(0,__vite_ssr_import_0__.isOnBoard)(nf, nr)) continue; - const to = (0,__vite_ssr_import_0__.squareOf)(nf, nr); - if ((0,__vite_ssr_import_1__.isAllyAt)(session, to, color)) continue; - moves.push({ - pieceId, - from, - to, - isCapture: (0,__vite_ssr_import_1__.isPieceAt)(session, to) - }); - }; - return moves; - } -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBUUE7QUFDQTtBQUNBO0FBRUEsTUFBTSxvQkFBOEQ7QUFBQSxFQUNsRSxDQUFDLEdBQUcsQ0FBQztBQUFBLEVBQ0wsQ0FBQyxJQUFJLENBQUM7QUFBQSxFQUNOLENBQUMsR0FBRyxDQUFDO0FBQUEsRUFDTCxDQUFDLEdBQUcsRUFBRTtBQUNSO0FBRUEsc0NBQWdCLFNBQVM7QUFBQSxFQUN2QixJQUFJO0FBQUEsRUFDSixNQUFNO0FBQUEsRUFDTixhQUFhO0FBQUEsRUFDYixrQkFBa0IsQ0FBQztBQUFBLEVBQ25CLFVBQVUsQ0FBQztBQUFBLEVBQ1gsZUFBZSxDQUFDLFFBQVEsWUFBWTtBQUNsQyxVQUFNLFVBQVUsT0FBTztBQUN2QixVQUFNLFFBQVEsUUFBUSxTQUFTO0FBRS9CLFVBQU0sV0FBVyxNQUFNLEtBQUssT0FBSyxFQUFFLE9BQU8sV0FBVyxFQUFFLFNBQVMsV0FBVztBQUMzRSxRQUFJLENBQUMsWUFBWSxTQUFTLFVBQVUsU0FBVSxRQUFPLENBQUM7QUFFdEQsVUFBTSxZQUFZLE1BQU0sS0FBSyxPQUFLLEVBQUUsT0FBTyxXQUFXLEVBQUUsU0FBUyxPQUFPO0FBQ3hFLFVBQU0sVUFBVSxNQUFNLEtBQUssT0FBSyxFQUFFLE9BQU8sV0FBVyxFQUFFLFNBQVMsVUFBVTtBQUN6RSxRQUFJLENBQUMsYUFBYSxDQUFDLFFBQVMsUUFBTyxDQUFDO0FBRXBDLFVBQU0sUUFBUSxVQUFVO0FBQ3hCLFVBQU0sT0FBTyxRQUFRO0FBQ3JCLFVBQU0sVUFBTyw4QkFBTyxJQUFJO0FBQ3hCLFVBQU0sVUFBTyw4QkFBTyxJQUFJO0FBRXhCLFVBQU0sUUFBUSxDQUFDO0FBQ2YsZUFBVyxDQUFDLElBQUksRUFBRSxLQUFLLG1CQUFtQjtBQUN4QyxZQUFNLEtBQUssT0FBTztBQUNsQixZQUFNLEtBQUssT0FBTztBQUNsQixVQUFJLElBQUMsaUNBQVUsSUFBSSxFQUFFLEVBQUc7QUFDeEIsWUFBTSxRQUFLLGdDQUFTLElBQUksRUFBRTtBQUMxQixhQUFJLGdDQUFTLFNBQVMsSUFBSSxLQUFLLEVBQUc7QUFDbEMsWUFBTSxLQUFLO0FBQUEsUUFDVDtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxjQUFXLGlDQUFVLFNBQVMsRUFBRTtBQUFBLE1BQ2xDLENBQUM7QUFBQSxJQUNIO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFDRixDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJiaXNob3BzLWlnbm9yZS1jb2xvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByZXNldDogYGJpc2hvcHMtaWdub3JlLWNvbG9yYCAoUlVMRVMubWQgcnVsZSAjNSlcbiAqXG4gKiBJbiBhZGRpdGlvbiB0byB0aGVpciBub3JtYWwgZGlhZ29uYWwgc2xpZGVzLCBiaXNob3BzIG1heSBtYWtlIGEgc2luZ2xlXG4gKiBvbmUtc3F1YXJlIG9ydGhvZ29uYWwgKE4vUy9FL1cpIHN0ZXAgdG8gYW4gZW1wdHkgb3IgZW5lbXktb2NjdXBpZWQgc3F1YXJlLlxuICogVGhpcyBhbGxvd3MgYSBiaXNob3AgdG8gZXZlbnR1YWxseSByZWFjaCBzcXVhcmVzIG9mIGVpdGhlciBjb2xvci5cbiAqL1xuaW1wb3J0IHR5cGUgeyBQaWVjZUNvbG9yIH0gZnJvbSBcIi4uL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHsgZmlsZU9mLCByYW5rT2YsIHNxdWFyZU9mLCBpc09uQm9hcmQgfSBmcm9tIFwiLi4vY29vcmQuanNcIjtcbmltcG9ydCB7IGlzQWxseUF0LCBpc1BpZWNlQXQgfSBmcm9tIFwiLi4vcnVsZXMvYm9hcmQtcXVlcmllcy5qc1wiO1xuaW1wb3J0IHsgUFJFU0VUX1JFR0lTVFJZIH0gZnJvbSBcIi4vcmVnaXN0cnkuanNcIjtcblxuY29uc3QgT1JUSE9HT05BTF9ERUxUQVM6IFJlYWRvbmx5QXJyYXk8cmVhZG9ubHkgW251bWJlciwgbnVtYmVyXT4gPSBbXG4gIFsxLCAwXSxcbiAgWy0xLCAwXSxcbiAgWzAsIDFdLFxuICBbMCwgLTFdLFxuXTtcblxuUFJFU0VUX1JFR0lTVFJZLnJlZ2lzdGVyKHtcbiAgaWQ6IFwiYmlzaG9wcy1pZ25vcmUtY29sb3JcIixcbiAgbmFtZTogXCJDb2xvdXItQmxpbmQgQmlzaG9wc1wiLFxuICBkZXNjcmlwdGlvbjogXCJCaXNob3BzIG1heSBhZGRpdGlvbmFsbHkgc3RlcCBvbmUgc3F1YXJlIG9ydGhvZ29uYWxseSB0byBhbiBlbXB0eSBvciBlbmVteS1vY2N1cGllZCBzcXVhcmUuXCIsXG4gIGluY29tcGF0aWJsZVdpdGg6IFtdLFxuICByZXF1aXJlczogW10sXG4gIGdldEV4dHJhTW92ZXM6IChlbmdpbmUsIHBpZWNlSWQpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gZW5naW5lLnNlc3Npb247XG4gICAgY29uc3QgZmFjdHMgPSBzZXNzaW9uLmFsbEZhY3RzKCk7XG5cbiAgICBjb25zdCB0eXBlRmFjdCA9IGZhY3RzLmZpbmQoZiA9PiBmLmlkID09PSBwaWVjZUlkICYmIGYuYXR0ciA9PT0gXCJQaWVjZVR5cGVcIik7XG4gICAgaWYgKCF0eXBlRmFjdCB8fCB0eXBlRmFjdC52YWx1ZSAhPT0gXCJiaXNob3BcIikgcmV0dXJuIFtdO1xuXG4gICAgY29uc3QgY29sb3JGYWN0ID0gZmFjdHMuZmluZChmID0+IGYuaWQgPT09IHBpZWNlSWQgJiYgZi5hdHRyID09PSBcIkNvbG9yXCIpO1xuICAgIGNvbnN0IHBvc0ZhY3QgPSBmYWN0cy5maW5kKGYgPT4gZi5pZCA9PT0gcGllY2VJZCAmJiBmLmF0dHIgPT09IFwiUG9zaXRpb25cIik7XG4gICAgaWYgKCFjb2xvckZhY3QgfHwgIXBvc0ZhY3QpIHJldHVybiBbXTtcblxuICAgIGNvbnN0IGNvbG9yID0gY29sb3JGYWN0LnZhbHVlIGFzIFBpZWNlQ29sb3I7XG4gICAgY29uc3QgZnJvbSA9IHBvc0ZhY3QudmFsdWUgYXMgbnVtYmVyO1xuICAgIGNvbnN0IGZpbGUgPSBmaWxlT2YoZnJvbSk7XG4gICAgY29uc3QgcmFuayA9IHJhbmtPZihmcm9tKTtcblxuICAgIGNvbnN0IG1vdmVzID0gW107XG4gICAgZm9yIChjb25zdCBbZGYsIGRyXSBvZiBPUlRIT0dPTkFMX0RFTFRBUykge1xuICAgICAgY29uc3QgbmYgPSBmaWxlICsgZGY7XG4gICAgICBjb25zdCBuciA9IHJhbmsgKyBkcjtcbiAgICAgIGlmICghaXNPbkJvYXJkKG5mLCBucikpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgdG8gPSBzcXVhcmVPZihuZiwgbnIpO1xuICAgICAgaWYgKGlzQWxseUF0KHNlc3Npb24sIHRvLCBjb2xvcikpIGNvbnRpbnVlO1xuICAgICAgbW92ZXMucHVzaCh7XG4gICAgICAgIHBpZWNlSWQsXG4gICAgICAgIGZyb20sXG4gICAgICAgIHRvLFxuICAgICAgICBpc0NhcHR1cmU6IGlzUGllY2VBdChzZXNzaW9uLCB0byksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG1vdmVzO1xuICB9LFxufSk7XG4iXSwiZmlsZSI6Ii9zcmMvcHJlc2V0cy9iaXNob3BzLWlnbm9yZS1jb2xvci50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/ae1c000fe4a4312428fdec8d424d2ab5555add5b b/7xOfJqsDU787fe61oSCq1/web/ae1c000fe4a4312428fdec8d424d2ab5555add5b deleted file mode 100644 index 976734b..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/ae1c000fe4a4312428fdec8d424d2ab5555add5b +++ /dev/null @@ -1,439 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect","beforeEach"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/net/client.ts", {"importedNames":["GameClient"]}); -class MockWebSocket { - // Constants matched to the lib.dom.d.ts shape (numeric states). - static CONNECTING = 0; - static OPEN = 1; - static CLOSING = 2; - static CLOSED = 3; - readyState = MockWebSocket.CONNECTING; - url; - // Event handlers — the client assigns these after construction. - onopen = null; - onmessage = null; - onerror = null; - onclose = null; - // Recorded traffic (outgoing frames the client sent). - sent = []; - // Intercepted close calls (so tests can assert the client closed voluntarily). - closeCalled = 0; - constructor(url) { - this.url = url; - MockWebSocket.instances.push(this); - } - static instances = []; - static reset() { - MockWebSocket.instances = []; - } - static latest() { - const inst = MockWebSocket.instances.at(-1); - if (!inst) throw new Error("MockWebSocket: no instances yet"); - return inst; - } - // --- Outbound (client → server) --- - send(data) { - let parsed = {}; - try { - const raw = JSON.parse(data); - if (raw !== null && typeof raw === "object" && !Array.isArray(raw)) { - parsed = raw; - } - } catch { - }; - this.sent.push({ raw: data, parsed }); - } - close() { - this.closeCalled += 1; - if (this.readyState !== MockWebSocket.CLOSED) { - this.readyState = MockWebSocket.CLOSED; - this.onclose?.(new CloseEvent("close")); - } - } - // --- Inbound lifecycle helpers (driven by tests) --- - simulateOpen() { - this.readyState = MockWebSocket.OPEN; - this.onopen?.(new Event("open")); - } - simulateMessage(msg) { - const data = JSON.stringify(msg); - this.onmessage?.(new MessageEvent("message", { data })); - } - simulateRawMessage(raw) { - this.onmessage?.(new MessageEvent("message", { data: raw })); - } - simulateError() { - this.onerror?.(new Event("error")); - } - simulateClose() { - this.readyState = MockWebSocket.CLOSED; - this.onclose?.(new CloseEvent("close")); - } -} -class MockScheduler { - nextId = 1; - scheduled = []; - schedule = (cb, ms) => { - const entry = { id: this.nextId++, cb, delay: ms, cancelled: false }; - this.scheduled.push(entry); - return entry.id; - }; - cancel = (handle) => { - if (typeof handle !== "number") return; - const hit = this.scheduled.find((s) => s.id === handle); - if (hit) hit.cancelled = true; - }; - /** Run every pending (non-cancelled) callback, in insertion order. */ - flush() { - const pending = this.scheduled.splice(0, this.scheduled.length); - for (const entry of pending) { - if (!entry.cancelled) entry.cb(); - } - } -} -function makeClient(options) { - const scheduler = new MockScheduler(); - const client = new __vite_ssr_import_1__.GameClient("ws://test.local/ws", { - WebSocketCtor: MockWebSocket, - setTimeoutFn: scheduler.schedule, - clearTimeoutFn: scheduler.cancel, - baseReconnectDelayMs: 1e3, - maxReconnectDelayMs: 3e4, - maxReconnectAttempts: options?.maxReconnectAttempts ?? 10 - }); - return { client, scheduler }; -} -(0,__vite_ssr_import_0__.beforeEach)(() => { - MockWebSocket.reset(); -}); -(0,__vite_ssr_import_0__.describe)("GameClient — connect()", () => { - (0,__vite_ssr_import_0__.it)("opens a WebSocket to the configured URL", async () => { - const { client } = makeClient(); - const pending = client.connect("ABC123", "tok-1"); - const socket = MockWebSocket.latest(); - (0,__vite_ssr_import_0__.expect)(socket.url).toBe("ws://test.local/ws"); - socket.simulateOpen(); - await (0,__vite_ssr_import_0__.expect)(pending).resolves.toBeUndefined(); - }); - (0,__vite_ssr_import_0__.it)("sends room.join with token after open", async () => { - const { client } = makeClient(); - const pending = client.connect("ABC123", "tok-1"); - const socket = MockWebSocket.latest(); - socket.simulateOpen(); - await pending; - (0,__vite_ssr_import_0__.expect)(socket.sent).toHaveLength(1); - const frame = socket.sent[0].parsed; - (0,__vite_ssr_import_0__.expect)(frame["type"]).toBe("room.join"); - (0,__vite_ssr_import_0__.expect)(frame["token"]).toBe("tok-1"); - (0,__vite_ssr_import_0__.expect)(frame["v"]).toBe(1); - (0,__vite_ssr_import_0__.expect)(frame["seq"]).toBe(1); - (0,__vite_ssr_import_0__.expect)(typeof frame["ts"]).toBe("number"); - (0,__vite_ssr_import_0__.expect)(frame["payload"]).toEqual({ code: "ABC123" }); - }); - (0,__vite_ssr_import_0__.it)('emits "connected" on open', async () => { - const { client } = makeClient(); - const seen = []; - client.on("connected", () => seen.push("connected")); - const pending = client.connect("ABC123", "tok-1"); - MockWebSocket.latest().simulateOpen(); - await pending; - (0,__vite_ssr_import_0__.expect)(seen).toEqual(["connected"]); - }); - (0,__vite_ssr_import_0__.it)("rejects the connect promise if the socket errors before open", async () => { - const { client } = makeClient(); - const pending = client.connect("ABC123", "tok-1"); - MockWebSocket.latest().simulateError(); - await (0,__vite_ssr_import_0__.expect)(pending).rejects.toThrow(/WebSocket/i); - }); -}); -(0,__vite_ssr_import_0__.describe)("GameClient — inbound messages", () => { - (0,__vite_ssr_import_0__.it)('fires "game.state" with the payload', async () => { - const { client } = makeClient(); - const received = []; - client.on("game.state", (ev) => received.push(ev.payload)); - const pending = client.connect("ABC123", "tok-1"); - const socket = MockWebSocket.latest(); - socket.simulateOpen(); - await pending; - const payload = { - facts: [{ id: 1, attr: "PieceType", value: "pawn" }], - turn: "white", - lastSeq: 5, - moveHistory: ["e2-e4"], - activeRules: [], - fen: "startpos" - }; - socket.simulateMessage({ - v: 1, - seq: 5, - ts: Date.now(), - type: "game.state", - payload - }); - (0,__vite_ssr_import_0__.expect)(received).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(received[0]).toEqual(payload); - (0,__vite_ssr_import_0__.expect)(client.currentSeq).toBe(5); - }); - (0,__vite_ssr_import_0__.it)('fires "game.delta" with the payload', async () => { - const { client } = makeClient(); - const received = []; - client.on("game.delta", (ev) => received.push(ev.payload)); - const pending = client.connect("ABC123", "tok-1"); - MockWebSocket.latest().simulateOpen(); - await pending; - const payload = { - inserted: [{ id: 1, attr: "Position", value: 28 }], - retracted: [{ id: 1, attr: "Position", value: 12 }], - moveNotation: "e2e4", - turn: "black", - gameOver: null - }; - MockWebSocket.latest().simulateMessage({ - v: 1, - seq: 6, - ts: Date.now(), - type: "game.delta", - payload - }); - (0,__vite_ssr_import_0__.expect)(received).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(received[0]).toEqual(payload); - (0,__vite_ssr_import_0__.expect)(client.currentSeq).toBe(6); - }); - (0,__vite_ssr_import_0__.it)("captures token on room.joined and uses it for subsequent sends", async () => { - const { client } = makeClient(); - const pending = client.connect("ABC123", "initial-tok"); - const socket = MockWebSocket.latest(); - socket.simulateOpen(); - await pending; - const joinedPayload = { - code: "ABC123", - token: "server-issued-tok", - color: "black", - activeRules: [] - }; - socket.simulateMessage({ - v: 1, - seq: 1, - ts: Date.now(), - type: "room.joined", - payload: joinedPayload - }); - (0,__vite_ssr_import_0__.expect)(client.currentToken).toBe("server-issued-tok"); - client.sendMove("e2", "e4"); - const move = socket.sent.at(-1).parsed; - (0,__vite_ssr_import_0__.expect)(move["token"]).toBe("server-issued-tok"); - (0,__vite_ssr_import_0__.expect)(move["type"]).toBe("game.move"); - (0,__vite_ssr_import_0__.expect)(move["payload"]).toEqual({ from: "e2", to: "e4" }); - }); - (0,__vite_ssr_import_0__.it)("ignores malformed JSON frames", async () => { - const { client } = makeClient(); - const seen = []; - client.on("game.state", (ev) => seen.push(ev.payload)); - const pending = client.connect("ABC123", "tok-1"); - MockWebSocket.latest().simulateOpen(); - await pending; - (0,__vite_ssr_import_0__.expect)( - () => MockWebSocket.latest().simulateRawMessage("{not json") - ).not.toThrow(); - (0,__vite_ssr_import_0__.expect)(seen).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("ignores unknown message types without throwing", async () => { - const { client } = makeClient(); - const pending = client.connect("ABC123", "tok-1"); - MockWebSocket.latest().simulateOpen(); - await pending; - (0,__vite_ssr_import_0__.expect)( - () => MockWebSocket.latest().simulateMessage({ - v: 1, - seq: 1, - ts: Date.now(), - type: "some.future.type", - payload: {} - }) - ).not.toThrow(); - }); -}); -(0,__vite_ssr_import_0__.describe)("GameClient — sendMove()", () => { - (0,__vite_ssr_import_0__.it)("sends a well-formed game.move message", async () => { - const { client } = makeClient(); - const pending = client.connect("ABC123", "tok-1"); - const socket = MockWebSocket.latest(); - socket.simulateOpen(); - await pending; - client.sendMove("e2", "e4"); - const move = socket.sent.at(-1).parsed; - (0,__vite_ssr_import_0__.expect)(move["v"]).toBe(1); - (0,__vite_ssr_import_0__.expect)(move["type"]).toBe("game.move"); - (0,__vite_ssr_import_0__.expect)(move["token"]).toBe("tok-1"); - (0,__vite_ssr_import_0__.expect)(move["payload"]).toEqual({ from: "e2", to: "e4" }); - (0,__vite_ssr_import_0__.expect)(move["seq"]).toBe(2); - }); - (0,__vite_ssr_import_0__.it)("includes promoteTo only when provided", async () => { - const { client } = makeClient(); - const pending = client.connect("ABC123", "tok-1"); - MockWebSocket.latest().simulateOpen(); - await pending; - client.sendMove("e7", "e8", "queen"); - const move = MockWebSocket.latest().sent.at(-1).parsed; - (0,__vite_ssr_import_0__.expect)(move["payload"]).toEqual({ from: "e7", to: "e8", promoteTo: "queen" }); - }); - (0,__vite_ssr_import_0__.it)("drops sends when the socket is not open", async () => { - const { client } = makeClient(); - void client.connect("ABC123", "tok-1"); - client.sendMove("e2", "e4"); - (0,__vite_ssr_import_0__.expect)(MockWebSocket.latest().sent).toHaveLength(0); - }); -}); -(0,__vite_ssr_import_0__.describe)("GameClient — disconnect & reconnect", () => { - (0,__vite_ssr_import_0__.it)('fires "disconnected" with willReconnect: true on unexpected close', async () => { - const { client } = makeClient(); - const events = []; - client.on("disconnected", (ev) => events.push({ willReconnect: ev.willReconnect })); - const pending = client.connect("ABC123", "tok-1"); - const socket = MockWebSocket.latest(); - socket.simulateOpen(); - await pending; - socket.simulateClose(); - (0,__vite_ssr_import_0__.expect)(events).toEqual([{ willReconnect: true }]); - }); - (0,__vite_ssr_import_0__.it)("schedules a reconnect attempt with exponential backoff", async () => { - const { client, scheduler } = makeClient(); - const pending = client.connect("ABC123", "tok-1"); - MockWebSocket.latest().simulateOpen(); - await pending; - MockWebSocket.latest().simulateClose(); - (0,__vite_ssr_import_0__.expect)(scheduler.scheduled).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(scheduler.scheduled[0].delay).toBe(1e3); - const before = MockWebSocket.instances.length; - scheduler.flush(); - (0,__vite_ssr_import_0__.expect)(MockWebSocket.instances.length).toBe(before + 1); - MockWebSocket.latest().simulateOpen(); - MockWebSocket.latest().simulateClose(); - (0,__vite_ssr_import_0__.expect)(scheduler.scheduled).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(scheduler.scheduled[0].delay).toBe(1e3); - }); - (0,__vite_ssr_import_0__.it)("applies exponential backoff across consecutive failures", async () => { - const { client, scheduler } = makeClient(); - const pending = client.connect("ABC123", "tok-1"); - MockWebSocket.latest().simulateOpen(); - await pending; - MockWebSocket.latest().simulateClose(); - (0,__vite_ssr_import_0__.expect)(scheduler.scheduled.at(-1).delay).toBe(1e3); - scheduler.flush(); - MockWebSocket.latest().simulateClose(); - (0,__vite_ssr_import_0__.expect)(scheduler.scheduled.at(-1).delay).toBe(2e3); - scheduler.flush(); - MockWebSocket.latest().simulateClose(); - (0,__vite_ssr_import_0__.expect)(scheduler.scheduled.at(-1).delay).toBe(4e3); - }); - (0,__vite_ssr_import_0__.it)("caps the backoff at maxReconnectDelayMs", async () => { - const { client, scheduler } = makeClient(); - const pending = client.connect("ABC123", "tok-1"); - MockWebSocket.latest().simulateOpen(); - await pending; - for (let i = 0; i < 6; i++) { - MockWebSocket.latest().simulateClose(); - scheduler.flush(); - }; - MockWebSocket.latest().simulateClose(); - const latest = scheduler.scheduled.at(-1); - (0,__vite_ssr_import_0__.expect)(latest.delay).toBe(3e4); - }); - (0,__vite_ssr_import_0__.it)("emits willReconnect: false after max attempts", async () => { - const { client, scheduler } = makeClient({ maxReconnectAttempts: 2 }); - const events = []; - client.on("disconnected", (ev) => events.push({ willReconnect: ev.willReconnect })); - const pending = client.connect("ABC123", "tok-1"); - MockWebSocket.latest().simulateOpen(); - await pending; - MockWebSocket.latest().simulateClose(); - scheduler.flush(); - MockWebSocket.latest().simulateClose(); - scheduler.flush(); - MockWebSocket.latest().simulateClose(); - (0,__vite_ssr_import_0__.expect)(events.map((e) => e.willReconnect)).toEqual([true, true, false]); - (0,__vite_ssr_import_0__.expect)(scheduler.scheduled).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("close() prevents reconnect", async () => { - const { client, scheduler } = makeClient(); - const events = []; - client.on("disconnected", (ev) => events.push({ willReconnect: ev.willReconnect })); - const pending = client.connect("ABC123", "tok-1"); - MockWebSocket.latest().simulateOpen(); - await pending; - client.close(); - (0,__vite_ssr_import_0__.expect)(events).toEqual([{ willReconnect: false }]); - (0,__vite_ssr_import_0__.expect)(scheduler.scheduled.filter((s) => !s.cancelled)).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("re-sends room.join on reconnect attempt", async () => { - const { client, scheduler } = makeClient(); - const pending = client.connect("ABC123", "tok-1"); - MockWebSocket.latest().simulateOpen(); - await pending; - const firstSocket = MockWebSocket.latest(); - firstSocket.simulateClose(); - scheduler.flush(); - const secondSocket = MockWebSocket.latest(); - (0,__vite_ssr_import_0__.expect)(secondSocket).not.toBe(firstSocket); - secondSocket.simulateOpen(); - const joinFrame = secondSocket.sent[0].parsed; - (0,__vite_ssr_import_0__.expect)(joinFrame["type"]).toBe("room.join"); - (0,__vite_ssr_import_0__.expect)(joinFrame["token"]).toBe("tok-1"); - (0,__vite_ssr_import_0__.expect)(joinFrame["payload"]).toEqual({ code: "ABC123" }); - }); -}); -(0,__vite_ssr_import_0__.describe)("GameClient — sequence tracking", () => { - (0,__vite_ssr_import_0__.it)("tracks the highest server seq seen", async () => { - const { client } = makeClient(); - const pending = client.connect("ABC123", "tok-1"); - MockWebSocket.latest().simulateOpen(); - await pending; - const socket = MockWebSocket.latest(); - socket.simulateMessage({ - v: 1, - seq: 5, - ts: Date.now(), - type: "game.state", - payload: { facts: [], turn: "white", lastSeq: 5, moveHistory: [], activeRules: [], fen: "" } - }); - (0,__vite_ssr_import_0__.expect)(client.currentSeq).toBe(5); - socket.simulateMessage({ - v: 1, - seq: 8, - ts: Date.now(), - type: "game.delta", - payload: { inserted: [], retracted: [], moveNotation: "e2e4", turn: "black", gameOver: null } - }); - (0,__vite_ssr_import_0__.expect)(client.currentSeq).toBe(8); - socket.simulateMessage({ - v: 1, - seq: 6, - ts: Date.now(), - type: "game.delta", - payload: { inserted: [], retracted: [], moveNotation: "e7e5", turn: "white", gameOver: null } - }); - (0,__vite_ssr_import_0__.expect)(client.currentSeq).toBe(8); - }); -}); -(0,__vite_ssr_import_0__.describe)("GameClient — listener management", () => { - (0,__vite_ssr_import_0__.it)("off() removes a listener", async () => { - const { client } = makeClient(); - const seen = []; - const listener = () => seen.push(1); - client.on("game.state", listener); - const pending = client.connect("ABC123", "tok-1"); - MockWebSocket.latest().simulateOpen(); - await pending; - client.off("game.state", listener); - MockWebSocket.latest().simulateMessage({ - v: 1, - seq: 1, - ts: Date.now(), - type: "game.state", - payload: { facts: [], turn: "white", lastSeq: 1, moveHistory: [], activeRules: [], fen: "" } - }); - (0,__vite_ssr_import_0__.expect)(seen).toEqual([]); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEVBQ2xDLENBQUM7QUFDSCxDQUFDO0dBRUQsZ0NBQVMsb0NBQW9DLE1BQU07QUFDakQsK0JBQUcsNEJBQTRCLFlBQVk7QUFDekMsVUFBTSxFQUFFLE9BQU8sSUFBSSxXQUFXO0FBQzlCLFVBQU0sT0FBaUIsQ0FBQztBQUN4QixVQUFNLFdBQVcsTUFBTSxLQUFLLEtBQUssQ0FBQztBQUNsQyxXQUFPLEdBQUcsY0FBYyxRQUFRO0FBQ2hDLFVBQU0sVUFBVSxPQUFPLFFBQVEsVUFBVSxPQUFPO0FBQ2hELGtCQUFjLE9BQU8sRUFBRSxhQUFhO0FBQ3BDLFVBQU07QUFFTixXQUFPLElBQUksY0FBYyxRQUFRO0FBQ2pDLGtCQUFjLE9BQU8sRUFBRSxnQkFBZ0I7QUFBQSxNQUNyQyxHQUFHO0FBQUEsTUFBRyxLQUFLO0FBQUEsTUFBRyxJQUFJLEtBQUssSUFBSTtBQUFBLE1BQUcsTUFBTTtBQUFBLE1BQ3BDLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxNQUFNLFNBQVMsU0FBUyxHQUFHLGFBQWEsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxHQUFHLEtBQUssR0FBRztBQUFBLElBQzdGLENBQUM7QUFDRCxxQ0FBTyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFBQSxFQUN6QixDQUFDO0FBQ0gsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiY2xpZW50LnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGVzdHMgZm9yIEdhbWVDbGllbnQuIFdlIGluamVjdCBhIG1vY2sgV2ViU29ja2V0IGNvbnN0cnVjdG9yICsgYSBtb2NrXG4vLyBzY2hlZHVsZXIgc28gZXZlcnkgYXNzZXJ0aW9uIGlzIGRldGVybWluaXN0aWMgKG5vIHJlYWwgc29ja2V0cywgbm8gcmVhbFxuLy8gdGltZXJzKS4gVGhlIG1vY2sgaXMgZGVmaW5lZCBpbmxpbmUg4oCUIG5vIGV4dGVybmFsIGxpYnJhcmllcy5cblxuaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QsIGJlZm9yZUVhY2ggfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgeyBHYW1lQ2xpZW50IH0gZnJvbSBcIi4vY2xpZW50LmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEdhbWVEZWx0YVBheWxvYWQsXG4gIEdhbWVTdGF0ZVBheWxvYWQsXG4gIFJvb21Kb2luZWRQYXlsb2FkLFxufSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1vY2sgV2ViU29ja2V0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vXG4vLyBBIFdlYlNvY2tldC1zaGFwZWQgZG91YmxlLiBUZXN0cyBkcml2ZSBsaWZlY3ljbGUgZXhwbGljaXRseSB2aWEgc2ltdWxhdGUqXG4vLyBtZXRob2RzIHNvIHRpbWluZyBpcyAxMDAlIGRldGVybWluaXN0aWMuIFdlIGRvbid0IGV4dGVuZCB0aGUgZ2xvYmFsXG4vLyBXZWJTb2NrZXQgYmVjYXVzZSB3ZSB3YW50IHRvIGNvbnN0cnVjdCB0aGUgbW9jayB3aXRoIGBuZXdgIGZyb20gdGhlIGNsaWVudC5cblxuaW50ZXJmYWNlIFNlbnRGcmFtZSB7XG4gIHJhdzogc3RyaW5nO1xuICBwYXJzZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5jbGFzcyBNb2NrV2ViU29ja2V0IHtcbiAgLy8gQ29uc3RhbnRzIG1hdGNoZWQgdG8gdGhlIGxpYi5kb20uZC50cyBzaGFwZSAobnVtZXJpYyBzdGF0ZXMpLlxuICBzdGF0aWMgQ09OTkVDVElORyA9IDAgYXMgY29uc3Q7XG4gIHN0YXRpYyBPUEVOID0gMSBhcyBjb25zdDtcbiAgc3RhdGljIENMT1NJTkcgPSAyIGFzIGNvbnN0O1xuICBzdGF0aWMgQ0xPU0VEID0gMyBhcyBjb25zdDtcblxuICByZWFkeVN0YXRlOiBudW1iZXIgPSBNb2NrV2ViU29ja2V0LkNPTk5FQ1RJTkc7XG4gIHVybDogc3RyaW5nO1xuXG4gIC8vIEV2ZW50IGhhbmRsZXJzIOKAlCB0aGUgY2xpZW50IGFzc2lnbnMgdGhlc2UgYWZ0ZXIgY29uc3RydWN0aW9uLlxuICBvbm9wZW46ICgoZXY6IEV2ZW50KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBvbm1lc3NhZ2U6ICgoZXY6IE1lc3NhZ2VFdmVudCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgb25lcnJvcjogKChldjogRXZlbnQpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gIG9uY2xvc2U6ICgoZXY6IENsb3NlRXZlbnQpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gUmVjb3JkZWQgdHJhZmZpYyAob3V0Z29pbmcgZnJhbWVzIHRoZSBjbGllbnQgc2VudCkuXG4gIHJlYWRvbmx5IHNlbnQ6IFNlbnRGcmFtZVtdID0gW107XG4gIC8vIEludGVyY2VwdGVkIGNsb3NlIGNhbGxzIChzbyB0ZXN0cyBjYW4gYXNzZXJ0IHRoZSBjbGllbnQgY2xvc2VkIHZvbHVudGFyaWx5KS5cbiAgY2xvc2VDYWxsZWQgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHVybDogc3RyaW5nKSB7XG4gICAgdGhpcy51cmwgPSB1cmw7XG4gICAgLy8gVHJhY2sgZXZlcnkgY29uc3RydWN0ZWQgaW5zdGFuY2Ugc28gdGVzdHMgY2FuIHJlYWNoIHRoZSBsYXRlc3Qgb25lLlxuICAgIE1vY2tXZWJTb2NrZXQuaW5zdGFuY2VzLnB1c2godGhpcyk7XG4gIH1cblxuICBzdGF0aWMgaW5zdGFuY2VzOiBNb2NrV2ViU29ja2V0W10gPSBbXTtcbiAgc3RhdGljIHJlc2V0KCk6IHZvaWQge1xuICAgIE1vY2tXZWJTb2NrZXQuaW5zdGFuY2VzID0gW107XG4gIH1cbiAgc3RhdGljIGxhdGVzdCgpOiBNb2NrV2ViU29ja2V0IHtcbiAgICBjb25zdCBpbnN0ID0gTW9ja1dlYlNvY2tldC5pbnN0YW5jZXMuYXQoLTEpO1xuICAgIGlmICghaW5zdCkgdGhyb3cgbmV3IEVycm9yKFwiTW9ja1dlYlNvY2tldDogbm8gaW5zdGFuY2VzIHlldFwiKTtcbiAgICByZXR1cm4gaW5zdDtcbiAgfVxuXG4gIC8vIC0tLSBPdXRib3VuZCAoY2xpZW50IOKGkiBzZXJ2ZXIpIC0tLVxuICBzZW5kKGRhdGE6IHN0cmluZyk6IHZvaWQge1xuICAgIGxldCBwYXJzZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJhdyA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICBpZiAocmF3ICE9PSBudWxsICYmIHR5cGVvZiByYXcgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkocmF3KSkge1xuICAgICAgICBwYXJzZWQgPSByYXcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBMZWF2ZSBwYXJzZWQgYXMgYW4gZW1wdHkgb2JqZWN0OyB0ZXN0cyBjYW4gc3RpbGwgaW5zcGVjdCBgcmF3YC5cbiAgICB9XG4gICAgdGhpcy5zZW50LnB1c2goeyByYXc6IGRhdGEsIHBhcnNlZCB9KTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VDYWxsZWQgKz0gMTtcbiAgICAvLyBNaXJyb3IgcmVhbCBXZWJTb2NrZXQ6IGNsb3NlKCkgcHV0cyB1cyBpbnRvIENMT1NFRCBhbmQgZmlyZXMgb25jbG9zZS5cbiAgICBpZiAodGhpcy5yZWFkeVN0YXRlICE9PSBNb2NrV2ViU29ja2V0LkNMT1NFRCkge1xuICAgICAgdGhpcy5yZWFkeVN0YXRlID0gTW9ja1dlYlNvY2tldC5DTE9TRUQ7XG4gICAgICB0aGlzLm9uY2xvc2U/LihuZXcgQ2xvc2VFdmVudChcImNsb3NlXCIpKTtcbiAgICB9XG4gIH1cblxuICAvLyAtLS0gSW5ib3VuZCBsaWZlY3ljbGUgaGVscGVycyAoZHJpdmVuIGJ5IHRlc3RzKSAtLS1cbiAgc2ltdWxhdGVPcGVuKCk6IHZvaWQge1xuICAgIHRoaXMucmVhZHlTdGF0ZSA9IE1vY2tXZWJTb2NrZXQuT1BFTjtcbiAgICB0aGlzLm9ub3Blbj8uKG5ldyBFdmVudChcIm9wZW5cIikpO1xuICB9XG4gIHNpbXVsYXRlTWVzc2FnZShtc2c6IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5zdHJpbmdpZnkobXNnKTtcbiAgICB0aGlzLm9ubWVzc2FnZT8uKG5ldyBNZXNzYWdlRXZlbnQoXCJtZXNzYWdlXCIsIHsgZGF0YSB9KSk7XG4gIH1cbiAgc2ltdWxhdGVSYXdNZXNzYWdlKHJhdzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5vbm1lc3NhZ2U/LihuZXcgTWVzc2FnZUV2ZW50KFwibWVzc2FnZVwiLCB7IGRhdGE6IHJhdyB9KSk7XG4gIH1cbiAgc2ltdWxhdGVFcnJvcigpOiB2b2lkIHtcbiAgICB0aGlzLm9uZXJyb3I/LihuZXcgRXZlbnQoXCJlcnJvclwiKSk7XG4gIH1cbiAgc2ltdWxhdGVDbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlYWR5U3RhdGUgPSBNb2NrV2ViU29ja2V0LkNMT1NFRDtcbiAgICB0aGlzLm9uY2xvc2U/LihuZXcgQ2xvc2VFdmVudChcImNsb3NlXCIpKTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1vY2sgc2NoZWR1bGVyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vXG4vLyBBIGRldGVybWluaXN0aWMgcmVwbGFjZW1lbnQgZm9yIHNldFRpbWVvdXQuIGBzY2hlZHVsZWRgIGhvbGRzIHBlbmRpbmdcbi8vIGNhbGxiYWNrczsgdGVzdHMgYWR2YW5jZSB0aGUgY2xvY2sgYnkgY2FsbGluZyBgZmx1c2goKWAgb3IgYHJ1bk5leHQoKWAuXG5cbmludGVyZmFjZSBTY2hlZHVsZWQge1xuICBpZDogbnVtYmVyO1xuICBjYjogKCkgPT4gdm9pZDtcbiAgZGVsYXk6IG51bWJlcjtcbiAgY2FuY2VsbGVkOiBib29sZWFuO1xufVxuXG5jbGFzcyBNb2NrU2NoZWR1bGVyIHtcbiAgcHJpdmF0ZSBuZXh0SWQgPSAxO1xuICByZWFkb25seSBzY2hlZHVsZWQ6IFNjaGVkdWxlZFtdID0gW107XG5cbiAgc2NoZWR1bGUgPSAoY2I6ICgpID0+IHZvaWQsIG1zOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IGVudHJ5OiBTY2hlZHVsZWQgPSB7IGlkOiB0aGlzLm5leHRJZCsrLCBjYiwgZGVsYXk6IG1zLCBjYW5jZWxsZWQ6IGZhbHNlIH07XG4gICAgdGhpcy5zY2hlZHVsZWQucHVzaChlbnRyeSk7XG4gICAgcmV0dXJuIGVudHJ5LmlkO1xuICB9O1xuXG4gIGNhbmNlbCA9IChoYW5kbGU6IHVua25vd24pOiB2b2lkID0+IHtcbiAgICBpZiAodHlwZW9mIGhhbmRsZSAhPT0gXCJudW1iZXJcIikgcmV0dXJuO1xuICAgIGNvbnN0IGhpdCA9IHRoaXMuc2NoZWR1bGVkLmZpbmQoKHMpID0+IHMuaWQgPT09IGhhbmRsZSk7XG4gICAgaWYgKGhpdCkgaGl0LmNhbmNlbGxlZCA9IHRydWU7XG4gIH07XG5cbiAgLyoqIFJ1biBldmVyeSBwZW5kaW5nIChub24tY2FuY2VsbGVkKSBjYWxsYmFjaywgaW4gaW5zZXJ0aW9uIG9yZGVyLiAqL1xuICBmbHVzaCgpOiB2b2lkIHtcbiAgICAvLyBTbmFwc2hvdCBhbmQgY2xlYXIgc28gY2FsbGJhY2tzIHRoYXQgc2NoZWR1bGUgbW9yZSB3b3JrIGRvbid0IGxvb3AgZm9yZXZlci5cbiAgICBjb25zdCBwZW5kaW5nID0gdGhpcy5zY2hlZHVsZWQuc3BsaWNlKDAsIHRoaXMuc2NoZWR1bGVkLmxlbmd0aCk7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBwZW5kaW5nKSB7XG4gICAgICBpZiAoIWVudHJ5LmNhbmNlbGxlZCkgZW50cnkuY2IoKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGaXh0dXJlIGZhY3Rvcnlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBtYWtlQ2xpZW50KG9wdGlvbnM/OiB7XG4gIG1heFJlY29ubmVjdEF0dGVtcHRzPzogbnVtYmVyO1xufSk6IHsgY2xpZW50OiBHYW1lQ2xpZW50OyBzY2hlZHVsZXI6IE1vY2tTY2hlZHVsZXIgfSB7XG4gIGNvbnN0IHNjaGVkdWxlciA9IG5ldyBNb2NrU2NoZWR1bGVyKCk7XG4gIGNvbnN0IGNsaWVudCA9IG5ldyBHYW1lQ2xpZW50KFwid3M6Ly90ZXN0LmxvY2FsL3dzXCIsIHtcbiAgICBXZWJTb2NrZXRDdG9yOiBNb2NrV2ViU29ja2V0IGFzIHVua25vd24gYXMgdHlwZW9mIFdlYlNvY2tldCxcbiAgICBzZXRUaW1lb3V0Rm46IHNjaGVkdWxlci5zY2hlZHVsZSxcbiAgICBjbGVhclRpbWVvdXRGbjogc2NoZWR1bGVyLmNhbmNlbCxcbiAgICBiYXNlUmVjb25uZWN0RGVsYXlNczogMTAwMCxcbiAgICBtYXhSZWNvbm5lY3REZWxheU1zOiAzMF8wMDAsXG4gICAgbWF4UmVjb25uZWN0QXR0ZW1wdHM6IG9wdGlvbnM/Lm1heFJlY29ubmVjdEF0dGVtcHRzID8/IDEwLFxuICB9KTtcbiAgcmV0dXJuIHsgY2xpZW50LCBzY2hlZHVsZXIgfTtcbn1cblxuYmVmb3JlRWFjaCgoKSA9PiB7XG4gIE1vY2tXZWJTb2NrZXQucmVzZXQoKTtcbn0pO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRlc3RzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZGVzY3JpYmUoXCJHYW1lQ2xpZW50IOKAlCBjb25uZWN0KClcIiwgKCkgPT4ge1xuICBpdChcIm9wZW5zIGEgV2ViU29ja2V0IHRvIHRoZSBjb25maWd1cmVkIFVSTFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBjbGllbnQgfSA9IG1ha2VDbGllbnQoKTtcbiAgICBjb25zdCBwZW5kaW5nID0gY2xpZW50LmNvbm5lY3QoXCJBQkMxMjNcIiwgXCJ0b2stMVwiKTtcbiAgICBjb25zdCBzb2NrZXQgPSBNb2NrV2ViU29ja2V0LmxhdGVzdCgpO1xuICAgIGV4cGVjdChzb2NrZXQudXJsKS50b0JlKFwid3M6Ly90ZXN0LmxvY2FsL3dzXCIpO1xuICAgIHNvY2tldC5zaW11bGF0ZU9wZW4oKTtcbiAgICBhd2FpdCBleHBlY3QocGVuZGluZykucmVzb2x2ZXMudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcblxuICBpdChcInNlbmRzIHJvb20uam9pbiB3aXRoIHRva2VuIGFmdGVyIG9wZW5cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY2xpZW50IH0gPSBtYWtlQ2xpZW50KCk7XG4gICAgY29uc3QgcGVuZGluZyA9IGNsaWVudC5jb25uZWN0KFwiQUJDMTIzXCIsIFwidG9rLTFcIik7XG4gICAgY29uc3Qgc29ja2V0ID0gTW9ja1dlYlNvY2tldC5sYXRlc3QoKTtcbiAgICBzb2NrZXQuc2ltdWxhdGVPcGVuKCk7XG4gICAgYXdhaXQgcGVuZGluZztcbiAgICBleHBlY3Qoc29ja2V0LnNlbnQpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICBjb25zdCBmcmFtZSA9IHNvY2tldC5zZW50WzBdIS5wYXJzZWQ7XG4gICAgZXhwZWN0KGZyYW1lW1widHlwZVwiXSkudG9CZShcInJvb20uam9pblwiKTtcbiAgICBleHBlY3QoZnJhbWVbXCJ0b2tlblwiXSkudG9CZShcInRvay0xXCIpO1xuICAgIGV4cGVjdChmcmFtZVtcInZcIl0pLnRvQmUoMSk7XG4gICAgZXhwZWN0KGZyYW1lW1wic2VxXCJdKS50b0JlKDEpO1xuICAgIGV4cGVjdCh0eXBlb2YgZnJhbWVbXCJ0c1wiXSkudG9CZShcIm51bWJlclwiKTtcbiAgICBleHBlY3QoZnJhbWVbXCJwYXlsb2FkXCJdKS50b0VxdWFsKHsgY29kZTogXCJBQkMxMjNcIiB9KTtcbiAgfSk7XG5cbiAgaXQoJ2VtaXRzIFwiY29ubmVjdGVkXCIgb24gb3BlbicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGNsaWVudCB9ID0gbWFrZUNsaWVudCgpO1xuICAgIGNvbnN0IHNlZW46IHN0cmluZ1tdID0gW107XG4gICAgY2xpZW50Lm9uKFwiY29ubmVjdGVkXCIsICgpID0+IHNlZW4ucHVzaChcImNvbm5lY3RlZFwiKSk7XG4gICAgY29uc3QgcGVuZGluZyA9IGNsaWVudC5jb25uZWN0KFwiQUJDMTIzXCIsIFwidG9rLTFcIik7XG4gICAgTW9ja1dlYlNvY2tldC5sYXRlc3QoKS5zaW11bGF0ZU9wZW4oKTtcbiAgICBhd2FpdCBwZW5kaW5nO1xuICAgIGV4cGVjdChzZWVuKS50b0VxdWFsKFtcImNvbm5lY3RlZFwiXSk7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyB0aGUgY29ubmVjdCBwcm9taXNlIGlmIHRoZSBzb2NrZXQgZXJyb3JzIGJlZm9yZSBvcGVuXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGNsaWVudCB9ID0gbWFrZUNsaWVudCgpO1xuICAgIGNvbnN0IHBlbmRpbmcgPSBjbGllbnQuY29ubmVjdChcIkFCQzEyM1wiLCBcInRvay0xXCIpO1xuICAgIE1vY2tXZWJTb2NrZXQubGF0ZXN0KCkuc2ltdWxhdGVFcnJvcigpO1xuICAgIGF3YWl0IGV4cGVjdChwZW5kaW5nKS5yZWplY3RzLnRvVGhyb3coL1dlYlNvY2tldC9pKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJHYW1lQ2xpZW50IOKAlCBpbmJvdW5kIG1lc3NhZ2VzXCIsICgpID0+IHtcbiAgaXQoJ2ZpcmVzIFwiZ2FtZS5zdGF0ZVwiIHdpdGggdGhlIHBheWxvYWQnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBjbGllbnQgfSA9IG1ha2VDbGllbnQoKTtcbiAgICBjb25zdCByZWNlaXZlZDogR2FtZVN0YXRlUGF5bG9hZFtdID0gW107XG4gICAgY2xpZW50Lm9uKFwiZ2FtZS5zdGF0ZVwiLCAoZXYpID0+IHJlY2VpdmVkLnB1c2goZXYucGF5bG9hZCkpO1xuICAgIGNvbnN0IHBlbmRpbmcgPSBjbGllbnQuY29ubmVjdChcIkFCQzEyM1wiLCBcInRvay0xXCIpO1xuICAgIGNvbnN0IHNvY2tldCA9IE1vY2tXZWJTb2NrZXQubGF0ZXN0KCk7XG4gICAgc29ja2V0LnNpbXVsYXRlT3BlbigpO1xuICAgIGF3YWl0IHBlbmRpbmc7XG5cbiAgICBjb25zdCBwYXlsb2FkOiBHYW1lU3RhdGVQYXlsb2FkID0ge1xuICAgICAgZmFjdHM6IFt7IGlkOiAxLCBhdHRyOiBcIlBpZWNlVHlwZVwiLCB2YWx1ZTogXCJwYXduXCIgfV0sXG4gICAgICB0dXJuOiBcIndoaXRlXCIsXG4gICAgICBsYXN0U2VxOiA1LFxuICAgICAgbW92ZUhpc3Rvcnk6IFtcImUyLWU0XCJdLFxuICAgICAgYWN0aXZlUnVsZXM6IFtdLFxuICAgICAgZmVuOiBcInN0YXJ0cG9zXCIsXG4gICAgfTtcbiAgICBzb2NrZXQuc2ltdWxhdGVNZXNzYWdlKHtcbiAgICAgIHY6IDEsIHNlcTogNSwgdHM6IERhdGUubm93KCksIHR5cGU6IFwiZ2FtZS5zdGF0ZVwiLCBwYXlsb2FkLFxuICAgIH0pO1xuICAgIGV4cGVjdChyZWNlaXZlZCkudG9IYXZlTGVuZ3RoKDEpO1xuICAgIGV4cGVjdChyZWNlaXZlZFswXSkudG9FcXVhbChwYXlsb2FkKTtcbiAgICBleHBlY3QoY2xpZW50LmN1cnJlbnRTZXEpLnRvQmUoNSk7XG4gIH0pO1xuXG4gIGl0KCdmaXJlcyBcImdhbWUuZGVsdGFcIiB3aXRoIHRoZSBwYXlsb2FkJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY2xpZW50IH0gPSBtYWtlQ2xpZW50KCk7XG4gICAgY29uc3QgcmVjZWl2ZWQ6IEdhbWVEZWx0YVBheWxvYWRbXSA9IFtdO1xuICAgIGNsaWVudC5vbihcImdhbWUuZGVsdGFcIiwgKGV2KSA9PiByZWNlaXZlZC5wdXNoKGV2LnBheWxvYWQpKTtcbiAgICBjb25zdCBwZW5kaW5nID0gY2xpZW50LmNvbm5lY3QoXCJBQkMxMjNcIiwgXCJ0b2stMVwiKTtcbiAgICBNb2NrV2ViU29ja2V0LmxhdGVzdCgpLnNpbXVsYXRlT3BlbigpO1xuICAgIGF3YWl0IHBlbmRpbmc7XG5cbiAgICBjb25zdCBwYXlsb2FkOiBHYW1lRGVsdGFQYXlsb2FkID0ge1xuICAgICAgaW5zZXJ0ZWQ6IFt7IGlkOiAxLCBhdHRyOiBcIlBvc2l0aW9uXCIsIHZhbHVlOiAyOCB9XSxcbiAgICAgIHJldHJhY3RlZDogW3sgaWQ6IDEsIGF0dHI6IFwiUG9zaXRpb25cIiwgdmFsdWU6IDEyIH1dLFxuICAgICAgbW92ZU5vdGF0aW9uOiBcImUyZTRcIixcbiAgICAgIHR1cm46IFwiYmxhY2tcIixcbiAgICAgIGdhbWVPdmVyOiBudWxsLFxuICAgIH07XG4gICAgTW9ja1dlYlNvY2tldC5sYXRlc3QoKS5zaW11bGF0ZU1lc3NhZ2Uoe1xuICAgICAgdjogMSwgc2VxOiA2LCB0czogRGF0ZS5ub3coKSwgdHlwZTogXCJnYW1lLmRlbHRhXCIsIHBheWxvYWQsXG4gICAgfSk7XG4gICAgZXhwZWN0KHJlY2VpdmVkKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgZXhwZWN0KHJlY2VpdmVkWzBdKS50b0VxdWFsKHBheWxvYWQpO1xuICAgIGV4cGVjdChjbGllbnQuY3VycmVudFNlcSkudG9CZSg2KTtcbiAgfSk7XG5cbiAgaXQoXCJjYXB0dXJlcyB0b2tlbiBvbiByb29tLmpvaW5lZCBhbmQgdXNlcyBpdCBmb3Igc3Vic2VxdWVudCBzZW5kc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBjbGllbnQgfSA9IG1ha2VDbGllbnQoKTtcbiAgICBjb25zdCBwZW5kaW5nID0gY2xpZW50LmNvbm5lY3QoXCJBQkMxMjNcIiwgXCJpbml0aWFsLXRva1wiKTtcbiAgICBjb25zdCBzb2NrZXQgPSBNb2NrV2ViU29ja2V0LmxhdGVzdCgpO1xuICAgIHNvY2tldC5zaW11bGF0ZU9wZW4oKTtcbiAgICBhd2FpdCBwZW5kaW5nO1xuXG4gICAgY29uc3Qgam9pbmVkUGF5bG9hZDogUm9vbUpvaW5lZFBheWxvYWQgPSB7XG4gICAgICBjb2RlOiBcIkFCQzEyM1wiLFxuICAgICAgdG9rZW46IFwic2VydmVyLWlzc3VlZC10b2tcIixcbiAgICAgIGNvbG9yOiBcImJsYWNrXCIsXG4gICAgICBhY3RpdmVSdWxlczogW10sXG4gICAgfTtcbiAgICBzb2NrZXQuc2ltdWxhdGVNZXNzYWdlKHtcbiAgICAgIHY6IDEsIHNlcTogMSwgdHM6IERhdGUubm93KCksIHR5cGU6IFwicm9vbS5qb2luZWRcIiwgcGF5bG9hZDogam9pbmVkUGF5bG9hZCxcbiAgICB9KTtcbiAgICBleHBlY3QoY2xpZW50LmN1cnJlbnRUb2tlbikudG9CZShcInNlcnZlci1pc3N1ZWQtdG9rXCIpO1xuXG4gICAgLy8gTmV4dCBzZW5kIHNob3VsZCB1c2UgdGhlIGNhcHR1cmVkIHRva2VuLlxuICAgIGNsaWVudC5zZW5kTW92ZShcImUyXCIsIFwiZTRcIik7XG4gICAgY29uc3QgbW92ZSA9IHNvY2tldC5zZW50LmF0KC0xKSEucGFyc2VkO1xuICAgIGV4cGVjdChtb3ZlW1widG9rZW5cIl0pLnRvQmUoXCJzZXJ2ZXItaXNzdWVkLXRva1wiKTtcbiAgICBleHBlY3QobW92ZVtcInR5cGVcIl0pLnRvQmUoXCJnYW1lLm1vdmVcIik7XG4gICAgZXhwZWN0KG1vdmVbXCJwYXlsb2FkXCJdKS50b0VxdWFsKHsgZnJvbTogXCJlMlwiLCB0bzogXCJlNFwiIH0pO1xuICB9KTtcblxuICBpdChcImlnbm9yZXMgbWFsZm9ybWVkIEpTT04gZnJhbWVzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGNsaWVudCB9ID0gbWFrZUNsaWVudCgpO1xuICAgIGNvbnN0IHNlZW46IHVua25vd25bXSA9IFtdO1xuICAgIGNsaWVudC5vbihcImdhbWUuc3RhdGVcIiwgKGV2KSA9PiBzZWVuLnB1c2goZXYucGF5bG9hZCkpO1xuICAgIGNvbnN0IHBlbmRpbmcgPSBjbGllbnQuY29ubmVjdChcIkFCQzEyM1wiLCBcInRvay0xXCIpO1xuICAgIE1vY2tXZWJTb2NrZXQubGF0ZXN0KCkuc2ltdWxhdGVPcGVuKCk7XG4gICAgYXdhaXQgcGVuZGluZztcbiAgICBleHBlY3QoKCkgPT5cbiAgICAgIE1vY2tXZWJTb2NrZXQubGF0ZXN0KCkuc2ltdWxhdGVSYXdNZXNzYWdlKFwie25vdCBqc29uXCIpLFxuICAgICkubm90LnRvVGhyb3coKTtcbiAgICBleHBlY3Qoc2VlbikudG9FcXVhbChbXSk7XG4gIH0pO1xuXG4gIGl0KFwiaWdub3JlcyB1bmtub3duIG1lc3NhZ2UgdHlwZXMgd2l0aG91dCB0aHJvd2luZ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBjbGllbnQgfSA9IG1ha2VDbGllbnQoKTtcbiAgICBjb25zdCBwZW5kaW5nID0gY2xpZW50LmNvbm5lY3QoXCJBQkMxMjNcIiwgXCJ0b2stMVwiKTtcbiAgICBNb2NrV2ViU29ja2V0LmxhdGVzdCgpLnNpbXVsYXRlT3BlbigpO1xuICAgIGF3YWl0IHBlbmRpbmc7XG4gICAgZXhwZWN0KCgpID0+XG4gICAgICBNb2NrV2ViU29ja2V0LmxhdGVzdCgpLnNpbXVsYXRlTWVzc2FnZSh7XG4gICAgICAgIHY6IDEsIHNlcTogMSwgdHM6IERhdGUubm93KCksIHR5cGU6IFwic29tZS5mdXR1cmUudHlwZVwiLCBwYXlsb2FkOiB7fSxcbiAgICAgIH0pLFxuICAgICkubm90LnRvVGhyb3coKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJHYW1lQ2xpZW50IOKAlCBzZW5kTW92ZSgpXCIsICgpID0+IHtcbiAgaXQoXCJzZW5kcyBhIHdlbGwtZm9ybWVkIGdhbWUubW92ZSBtZXNzYWdlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGNsaWVudCB9ID0gbWFrZUNsaWVudCgpO1xuICAgIGNvbnN0IHBlbmRpbmcgPSBjbGllbnQuY29ubmVjdChcIkFCQzEyM1wiLCBcInRvay0xXCIpO1xuICAgIGNvbnN0IHNvY2tldCA9IE1vY2tXZWJTb2NrZXQubGF0ZXN0KCk7XG4gICAgc29ja2V0LnNpbXVsYXRlT3BlbigpO1xuICAgIGF3YWl0IHBlbmRpbmc7XG5cbiAgICBjbGllbnQuc2VuZE1vdmUoXCJlMlwiLCBcImU0XCIpO1xuICAgIGNvbnN0IG1vdmUgPSBzb2NrZXQuc2VudC5hdCgtMSkhLnBhcnNlZDtcbiAgICBleHBlY3QobW92ZVtcInZcIl0pLnRvQmUoMSk7XG4gICAgZXhwZWN0KG1vdmVbXCJ0eXBlXCJdKS50b0JlKFwiZ2FtZS5tb3ZlXCIpO1xuICAgIGV4cGVjdChtb3ZlW1widG9rZW5cIl0pLnRvQmUoXCJ0b2stMVwiKTtcbiAgICBleHBlY3QobW92ZVtcInBheWxvYWRcIl0pLnRvRXF1YWwoeyBmcm9tOiBcImUyXCIsIHRvOiBcImU0XCIgfSk7XG4gICAgLy8gU2VxIGlzIG1vbm90b25pYyDigJQgcm9vbS5qb2luIHdhcyAxLCB0aGlzIG9uZSBtdXN0IGJlIDIuXG4gICAgZXhwZWN0KG1vdmVbXCJzZXFcIl0pLnRvQmUoMik7XG4gIH0pO1xuXG4gIGl0KFwiaW5jbHVkZXMgcHJvbW90ZVRvIG9ubHkgd2hlbiBwcm92aWRlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBjbGllbnQgfSA9IG1ha2VDbGllbnQoKTtcbiAgICBjb25zdCBwZW5kaW5nID0gY2xpZW50LmNvbm5lY3QoXCJBQkMxMjNcIiwgXCJ0b2stMVwiKTtcbiAgICBNb2NrV2ViU29ja2V0LmxhdGVzdCgpLnNpbXVsYXRlT3BlbigpO1xuICAgIGF3YWl0IHBlbmRpbmc7XG5cbiAgICBjbGllbnQuc2VuZE1vdmUoXCJlN1wiLCBcImU4XCIsIFwicXVlZW5cIik7XG4gICAgY29uc3QgbW92ZSA9IE1vY2tXZWJTb2NrZXQubGF0ZXN0KCkuc2VudC5hdCgtMSkhLnBhcnNlZDtcbiAgICBleHBlY3QobW92ZVtcInBheWxvYWRcIl0pLnRvRXF1YWwoeyBmcm9tOiBcImU3XCIsIHRvOiBcImU4XCIsIHByb21vdGVUbzogXCJxdWVlblwiIH0pO1xuICB9KTtcblxuICBpdChcImRyb3BzIHNlbmRzIHdoZW4gdGhlIHNvY2tldCBpcyBub3Qgb3BlblwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBjbGllbnQgfSA9IG1ha2VDbGllbnQoKTtcbiAgICAvLyBOZXZlciBzaW11bGF0ZU9wZW4oKTsgcmVhZHlTdGF0ZSBzdGF5cyBDT05ORUNUSU5HLlxuICAgIHZvaWQgY2xpZW50LmNvbm5lY3QoXCJBQkMxMjNcIiwgXCJ0b2stMVwiKTtcbiAgICBjbGllbnQuc2VuZE1vdmUoXCJlMlwiLCBcImU0XCIpO1xuICAgIGV4cGVjdChNb2NrV2ViU29ja2V0LmxhdGVzdCgpLnNlbnQpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJHYW1lQ2xpZW50IOKAlCBkaXNjb25uZWN0ICYgcmVjb25uZWN0XCIsICgpID0+IHtcbiAgaXQoJ2ZpcmVzIFwiZGlzY29ubmVjdGVkXCIgd2l0aCB3aWxsUmVjb25uZWN0OiB0cnVlIG9uIHVuZXhwZWN0ZWQgY2xvc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBjbGllbnQgfSA9IG1ha2VDbGllbnQoKTtcbiAgICBjb25zdCBldmVudHM6IEFycmF5PHsgd2lsbFJlY29ubmVjdDogYm9vbGVhbiB9PiA9IFtdO1xuICAgIGNsaWVudC5vbihcImRpc2Nvbm5lY3RlZFwiLCAoZXYpID0+IGV2ZW50cy5wdXNoKHsgd2lsbFJlY29ubmVjdDogZXYud2lsbFJlY29ubmVjdCB9KSk7XG4gICAgY29uc3QgcGVuZGluZyA9IGNsaWVudC5jb25uZWN0KFwiQUJDMTIzXCIsIFwidG9rLTFcIik7XG4gICAgY29uc3Qgc29ja2V0ID0gTW9ja1dlYlNvY2tldC5sYXRlc3QoKTtcbiAgICBzb2NrZXQuc2ltdWxhdGVPcGVuKCk7XG4gICAgYXdhaXQgcGVuZGluZztcblxuICAgIHNvY2tldC5zaW11bGF0ZUNsb3NlKCk7XG4gICAgZXhwZWN0KGV2ZW50cykudG9FcXVhbChbeyB3aWxsUmVjb25uZWN0OiB0cnVlIH1dKTtcbiAgfSk7XG5cbiAgaXQoXCJzY2hlZHVsZXMgYSByZWNvbm5lY3QgYXR0ZW1wdCB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmZcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY2xpZW50LCBzY2hlZHVsZXIgfSA9IG1ha2VDbGllbnQoKTtcbiAgICBjb25zdCBwZW5kaW5nID0gY2xpZW50LmNvbm5lY3QoXCJBQkMxMjNcIiwgXCJ0b2stMVwiKTtcbiAgICBNb2NrV2ViU29ja2V0LmxhdGVzdCgpLnNpbXVsYXRlT3BlbigpO1xuICAgIGF3YWl0IHBlbmRpbmc7XG5cbiAgICBNb2NrV2ViU29ja2V0LmxhdGVzdCgpLnNpbXVsYXRlQ2xvc2UoKTtcbiAgICAvLyBPbmUgdGltZXIgc2hvdWxkIGJlIHNjaGVkdWxlZCB3aXRoIHRoZSBiYXNlIGRlbGF5ICgxMDAwbXMpLlxuICAgIGV4cGVjdChzY2hlZHVsZXIuc2NoZWR1bGVkKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgZXhwZWN0KHNjaGVkdWxlci5zY2hlZHVsZWRbMF0hLmRlbGF5KS50b0JlKDEwMDApO1xuXG4gICAgLy8gRmx1c2hpbmcgY3JlYXRlcyBhIG5ldyBtb2NrIHNvY2tldC5cbiAgICBjb25zdCBiZWZvcmUgPSBNb2NrV2ViU29ja2V0Lmluc3RhbmNlcy5sZW5ndGg7XG4gICAgc2NoZWR1bGVyLmZsdXNoKCk7XG4gICAgZXhwZWN0KE1vY2tXZWJTb2NrZXQuaW5zdGFuY2VzLmxlbmd0aCkudG9CZShiZWZvcmUgKyAxKTtcblxuICAgIC8vIFNlY29uZCBjbG9zZSDihpIgc2Vjb25kIHNjaGVkdWxlZCBkZWxheSBzaG91bGQgYmUgMjAwMG1zICgyXjEpLlxuICAgIE1vY2tXZWJTb2NrZXQubGF0ZXN0KCkuc2ltdWxhdGVPcGVuKCk7XG4gICAgTW9ja1dlYlNvY2tldC5sYXRlc3QoKS5zaW11bGF0ZUNsb3NlKCk7XG4gICAgLy8gQWZ0ZXIgcmVjb25uZWN0aW5nIHN1Y2Nlc3NmdWxseSwgcmVjb25uZWN0QXR0ZW1wdHMgd2FzIHJlc2V0IHRvIDAgb24gb3Blbi5cbiAgICAvLyBUaGUgZnJlc2ggY2xvc2Ugc3RhcnRzIHRoZSBjb3VudGVyIG92ZXIgYXQgMTAwMG1zLlxuICAgIGV4cGVjdChzY2hlZHVsZXIuc2NoZWR1bGVkKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgZXhwZWN0KHNjaGVkdWxlci5zY2hlZHVsZWRbMF0hLmRlbGF5KS50b0JlKDEwMDApO1xuICB9KTtcblxuICBpdChcImFwcGxpZXMgZXhwb25lbnRpYWwgYmFja29mZiBhY3Jvc3MgY29uc2VjdXRpdmUgZmFpbHVyZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY2xpZW50LCBzY2hlZHVsZXIgfSA9IG1ha2VDbGllbnQoKTtcbiAgICBjb25zdCBwZW5kaW5nID0gY2xpZW50LmNvbm5lY3QoXCJBQkMxMjNcIiwgXCJ0b2stMVwiKTtcbiAgICBNb2NrV2ViU29ja2V0LmxhdGVzdCgpLnNpbXVsYXRlT3BlbigpO1xuICAgIGF3YWl0IHBlbmRpbmc7XG5cbiAgICAvLyBDbG9zZSB3aXRob3V0IHJlLW9wZW5pbmcg4oaSIGVhY2ggcmV0cnkgYXR0ZW1wdCBncm93cyB0aGUgZGVsYXkuXG4gICAgTW9ja1dlYlNvY2tldC5sYXRlc3QoKS5zaW11bGF0ZUNsb3NlKCk7XG4gICAgZXhwZWN0KHNjaGVkdWxlci5zY2hlZHVsZWQuYXQoLTEpIS5kZWxheSkudG9CZSgxMDAwKTtcbiAgICBzY2hlZHVsZXIuZmx1c2goKTtcblxuICAgIC8vIE5ldyBzb2NrZXQgbmV2ZXIgb3BlbnMg4oaSIGNsb3NlIGl0IGltbWVkaWF0ZWx5LlxuICAgIE1vY2tXZWJTb2NrZXQubGF0ZXN0KCkuc2ltdWxhdGVDbG9zZSgpO1xuICAgIGV4cGVjdChzY2hlZHVsZXIuc2NoZWR1bGVkLmF0KC0xKSEuZGVsYXkpLnRvQmUoMjAwMCk7XG4gICAgc2NoZWR1bGVyLmZsdXNoKCk7XG5cbiAgICBNb2NrV2ViU29ja2V0LmxhdGVzdCgpLnNpbXVsYXRlQ2xvc2UoKTtcbiAgICBleHBlY3Qoc2NoZWR1bGVyLnNjaGVkdWxlZC5hdCgtMSkhLmRlbGF5KS50b0JlKDQwMDApO1xuICB9KTtcblxuICBpdChcImNhcHMgdGhlIGJhY2tvZmYgYXQgbWF4UmVjb25uZWN0RGVsYXlNc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBjbGllbnQsIHNjaGVkdWxlciB9ID0gbWFrZUNsaWVudCgpO1xuICAgIGNvbnN0IHBlbmRpbmcgPSBjbGllbnQuY29ubmVjdChcIkFCQzEyM1wiLCBcInRvay0xXCIpO1xuICAgIE1vY2tXZWJTb2NrZXQubGF0ZXN0KCkuc2ltdWxhdGVPcGVuKCk7XG4gICAgYXdhaXQgcGVuZGluZztcblxuICAgIC8vIEJ1cm4gdGhyb3VnaCA2IGZhaWxlZCByZWNvbm5lY3RzOiAxcywgMnMsIDRzLCA4cywgMTZzLCAzMHMgKGNhcHBlZCkuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcbiAgICAgIE1vY2tXZWJTb2NrZXQubGF0ZXN0KCkuc2ltdWxhdGVDbG9zZSgpO1xuICAgICAgc2NoZWR1bGVyLmZsdXNoKCk7XG4gICAgfVxuICAgIC8vIFRoZSA2dGggc2NoZWR1bGVkIGRlbGF5IGlzIGF0IHRoZSBjYXAgKDJeNT0zMnMg4oaSIGNhcHBlZCB0byAzMHMpLlxuICAgIE1vY2tXZWJTb2NrZXQubGF0ZXN0KCkuc2ltdWxhdGVDbG9zZSgpO1xuICAgIGNvbnN0IGxhdGVzdCA9IHNjaGVkdWxlci5zY2hlZHVsZWQuYXQoLTEpITtcbiAgICBleHBlY3QobGF0ZXN0LmRlbGF5KS50b0JlKDMwXzAwMCk7XG4gIH0pO1xuXG4gIGl0KCdlbWl0cyB3aWxsUmVjb25uZWN0OiBmYWxzZSBhZnRlciBtYXggYXR0ZW1wdHMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBjbGllbnQsIHNjaGVkdWxlciB9ID0gbWFrZUNsaWVudCh7IG1heFJlY29ubmVjdEF0dGVtcHRzOiAyIH0pO1xuICAgIGNvbnN0IGV2ZW50czogQXJyYXk8eyB3aWxsUmVjb25uZWN0OiBib29sZWFuIH0+ID0gW107XG4gICAgY2xpZW50Lm9uKFwiZGlzY29ubmVjdGVkXCIsIChldikgPT4gZXZlbnRzLnB1c2goeyB3aWxsUmVjb25uZWN0OiBldi53aWxsUmVjb25uZWN0IH0pKTtcbiAgICBjb25zdCBwZW5kaW5nID0gY2xpZW50LmNvbm5lY3QoXCJBQkMxMjNcIiwgXCJ0b2stMVwiKTtcbiAgICBNb2NrV2ViU29ja2V0LmxhdGVzdCgpLnNpbXVsYXRlT3BlbigpO1xuICAgIGF3YWl0IHBlbmRpbmc7XG5cbiAgICAvLyBhdHRlbXB0IDFcbiAgICBNb2NrV2ViU29ja2V0LmxhdGVzdCgpLnNpbXVsYXRlQ2xvc2UoKTtcbiAgICBzY2hlZHVsZXIuZmx1c2goKTtcbiAgICAvLyBhdHRlbXB0IDJcbiAgICBNb2NrV2ViU29ja2V0LmxhdGVzdCgpLnNpbXVsYXRlQ2xvc2UoKTtcbiAgICBzY2hlZHVsZXIuZmx1c2goKTtcbiAgICAvLyBhdHRlbXB0IDMg4oCUIHRoaXMgb25lIGV4Y2VlZHMgdGhlIGNhcCwgc28gd2lsbFJlY29ubmVjdCBpcyBmYWxzZS5cbiAgICBNb2NrV2ViU29ja2V0LmxhdGVzdCgpLnNpbXVsYXRlQ2xvc2UoKTtcblxuICAgIGV4cGVjdChldmVudHMubWFwKChlKSA9PiBlLndpbGxSZWNvbm5lY3QpKS50b0VxdWFsKFt0cnVlLCB0cnVlLCBmYWxzZV0pO1xuICAgIC8vIEFuZCBubyBmdXJ0aGVyIHRpbWVyIHNob3VsZCBiZSBzY2hlZHVsZWQuXG4gICAgZXhwZWN0KHNjaGVkdWxlci5zY2hlZHVsZWQpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG5cbiAgaXQoXCJjbG9zZSgpIHByZXZlbnRzIHJlY29ubmVjdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBjbGllbnQsIHNjaGVkdWxlciB9ID0gbWFrZUNsaWVudCgpO1xuICAgIGNvbnN0IGV2ZW50czogQXJyYXk8eyB3aWxsUmVjb25uZWN0OiBib29sZWFuIH0+ID0gW107XG4gICAgY2xpZW50Lm9uKFwiZGlzY29ubmVjdGVkXCIsIChldikgPT4gZXZlbnRzLnB1c2goeyB3aWxsUmVjb25uZWN0OiBldi53aWxsUmVjb25uZWN0IH0pKTtcbiAgICBjb25zdCBwZW5kaW5nID0gY2xpZW50LmNvbm5lY3QoXCJBQkMxMjNcIiwgXCJ0b2stMVwiKTtcbiAgICBNb2NrV2ViU29ja2V0LmxhdGVzdCgpLnNpbXVsYXRlT3BlbigpO1xuICAgIGF3YWl0IHBlbmRpbmc7XG5cbiAgICBjbGllbnQuY2xvc2UoKTtcbiAgICBleHBlY3QoZXZlbnRzKS50b0VxdWFsKFt7IHdpbGxSZWNvbm5lY3Q6IGZhbHNlIH1dKTtcbiAgICBleHBlY3Qoc2NoZWR1bGVyLnNjaGVkdWxlZC5maWx0ZXIoKHMpID0+ICFzLmNhbmNlbGxlZCkpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG5cbiAgaXQoXCJyZS1zZW5kcyByb29tLmpvaW4gb24gcmVjb25uZWN0IGF0dGVtcHRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY2xpZW50LCBzY2hlZHVsZXIgfSA9IG1ha2VDbGllbnQoKTtcbiAgICBjb25zdCBwZW5kaW5nID0gY2xpZW50LmNvbm5lY3QoXCJBQkMxMjNcIiwgXCJ0b2stMVwiKTtcbiAgICBNb2NrV2ViU29ja2V0LmxhdGVzdCgpLnNpbXVsYXRlT3BlbigpO1xuICAgIGF3YWl0IHBlbmRpbmc7XG5cbiAgICBjb25zdCBmaXJzdFNvY2tldCA9IE1vY2tXZWJTb2NrZXQubGF0ZXN0KCk7XG4gICAgZmlyc3RTb2NrZXQuc2ltdWxhdGVDbG9zZSgpO1xuICAgIHNjaGVkdWxlci5mbHVzaCgpO1xuXG4gICAgY29uc3Qgc2Vjb25kU29ja2V0ID0gTW9ja1dlYlNvY2tldC5sYXRlc3QoKTtcbiAgICBleHBlY3Qoc2Vjb25kU29ja2V0KS5ub3QudG9CZShmaXJzdFNvY2tldCk7XG4gICAgc2Vjb25kU29ja2V0LnNpbXVsYXRlT3BlbigpO1xuICAgIC8vIEFmdGVyIHRoZSByZWNvbm5lY3RlZCBzb2NrZXQgb3BlbnMgaXQgc2hvdWxkIGFsc28gc2VuZCByb29tLmpvaW4uXG4gICAgY29uc3Qgam9pbkZyYW1lID0gc2Vjb25kU29ja2V0LnNlbnRbMF0hLnBhcnNlZDtcbiAgICBleHBlY3Qoam9pbkZyYW1lW1widHlwZVwiXSkudG9CZShcInJvb20uam9pblwiKTtcbiAgICBleHBlY3Qoam9pbkZyYW1lW1widG9rZW5cIl0pLnRvQmUoXCJ0b2stMVwiKTtcbiAgICBleHBlY3Qoam9pbkZyYW1lW1wicGF5bG9hZFwiXSkudG9FcXVhbCh7IGNvZGU6IFwiQUJDMTIzXCIgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiR2FtZUNsaWVudCDigJQgc2VxdWVuY2UgdHJhY2tpbmdcIiwgKCkgPT4ge1xuICBpdChcInRyYWNrcyB0aGUgaGlnaGVzdCBzZXJ2ZXIgc2VxIHNlZW5cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY2xpZW50IH0gPSBtYWtlQ2xpZW50KCk7XG4gICAgY29uc3QgcGVuZGluZyA9IGNsaWVudC5jb25uZWN0KFwiQUJDMTIzXCIsIFwidG9rLTFcIik7XG4gICAgTW9ja1dlYlNvY2tldC5sYXRlc3QoKS5zaW11bGF0ZU9wZW4oKTtcbiAgICBhd2FpdCBwZW5kaW5nO1xuICAgIGNvbnN0IHNvY2tldCA9IE1vY2tXZWJTb2NrZXQubGF0ZXN0KCk7XG5cbiAgICBzb2NrZXQuc2ltdWxhdGVNZXNzYWdlKHtcbiAgICAgIHY6IDEsIHNlcTogNSwgdHM6IERhdGUubm93KCksIHR5cGU6IFwiZ2FtZS5zdGF0ZVwiLFxuICAgICAgcGF5bG9hZDogeyBmYWN0czogW10sIHR1cm46IFwid2hpdGVcIiwgbGFzdFNlcTogNSwgbW92ZUhpc3Rvcnk6IFtdLCBhY3RpdmVSdWxlczogW10sIGZlbjogXCJcIiB9LFxuICAgIH0pO1xuICAgIGV4cGVjdChjbGllbnQuY3VycmVudFNlcSkudG9CZSg1KTtcblxuICAgIHNvY2tldC5zaW11bGF0ZU1lc3NhZ2Uoe1xuICAgICAgdjogMSwgc2VxOiA4LCB0czogRGF0ZS5ub3coKSwgdHlwZTogXCJnYW1lLmRlbHRhXCIsXG4gICAgICBwYXlsb2FkOiB7IGluc2VydGVkOiBbXSwgcmV0cmFjdGVkOiBbXSwgbW92ZU5vdGF0aW9uOiBcImUyZTRcIiwgdHVybjogXCJibGFja1wiLCBnYW1lT3ZlcjogbnVsbCB9LFxuICAgIH0pO1xuICAgIGV4cGVjdChjbGllbnQuY3VycmVudFNlcSkudG9CZSg4KTtcblxuICAgIC8vIE91dC1vZi1vcmRlciBvbGRlciBtZXNzYWdlIHNob3VsZCBOT1QgbG93ZXIgdGhlIHNlcS5cbiAgICBzb2NrZXQuc2ltdWxhdGVNZXNzYWdlKHtcbiAgICAgIHY6IDEsIHNlcTogNiwgdHM6IERhdGUubm93KCksIHR5cGU6IFwiZ2FtZS5kZWx0YVwiLFxuICAgICAgcGF5bG9hZDogeyBpbnNlcnRlZDogW10sIHJldHJhY3RlZDogW10sIG1vdmVOb3RhdGlvbjogXCJlN2U1XCIsIHR1cm46IFwid2hpdGVcIiwgZ2FtZU92ZXI6IG51bGwgfSxcbiAgICB9KTtcbiAgICBleHBlY3QoY2xpZW50LmN1cnJlbnRTZXEpLnRvQmUoOCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiR2FtZUNsaWVudCDigJQgbGlzdGVuZXIgbWFuYWdlbWVudFwiLCAoKSA9PiB7XG4gIGl0KFwib2ZmKCkgcmVtb3ZlcyBhIGxpc3RlbmVyXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGNsaWVudCB9ID0gbWFrZUNsaWVudCgpO1xuICAgIGNvbnN0IHNlZW46IG51bWJlcltdID0gW107XG4gICAgY29uc3QgbGlzdGVuZXIgPSAoKSA9PiBzZWVuLnB1c2goMSk7XG4gICAgY2xpZW50Lm9uKFwiZ2FtZS5zdGF0ZVwiLCBsaXN0ZW5lcik7XG4gICAgY29uc3QgcGVuZGluZyA9IGNsaWVudC5jb25uZWN0KFwiQUJDMTIzXCIsIFwidG9rLTFcIik7XG4gICAgTW9ja1dlYlNvY2tldC5sYXRlc3QoKS5zaW11bGF0ZU9wZW4oKTtcbiAgICBhd2FpdCBwZW5kaW5nO1xuXG4gICAgY2xpZW50Lm9mZihcImdhbWUuc3RhdGVcIiwgbGlzdGVuZXIpO1xuICAgIE1vY2tXZWJTb2NrZXQubGF0ZXN0KCkuc2ltdWxhdGVNZXNzYWdlKHtcbiAgICAgIHY6IDEsIHNlcTogMSwgdHM6IERhdGUubm93KCksIHR5cGU6IFwiZ2FtZS5zdGF0ZVwiLFxuICAgICAgcGF5bG9hZDogeyBmYWN0czogW10sIHR1cm46IFwid2hpdGVcIiwgbGFzdFNlcTogMSwgbW92ZUhpc3Rvcnk6IFtdLCBhY3RpdmVSdWxlczogW10sIGZlbjogXCJcIiB9LFxuICAgIH0pO1xuICAgIGV4cGVjdChzZWVuKS50b0VxdWFsKFtdKTtcbiAgfSk7XG59KTtcbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9jaGVzcy9zcmMvbmV0L2NsaWVudC50ZXN0LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/af573d81d2a257160d0f3fc85c8298ce8fbc7be3 b/7xOfJqsDU787fe61oSCq1/web/af573d81d2a257160d0f3fc85c8298ce8fbc7be3 deleted file mode 100644 index 650cdde..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/af573d81d2a257160d0f3fc85c8298ce8fbc7be3 +++ /dev/null @@ -1,76 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/presets/piece-type-registry.ts", {"importedNames":["PIECE_TYPE_REGISTRY"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/rules/pawn.ts", {"importedNames":["getLegalPawnMoves"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/rules/knight.ts", {"importedNames":["getLegalKnightMoves"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/rules/sliding.ts", {"importedNames":["getLegalRookMoves","getLegalBishopMoves","getLegalQueenMoves"]}); - - - - -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/rules/king.ts", {"importedNames":["getLegalKingMoves"]}); -const __vite_ssr_import_5__ = await __vite_ssr_import__("/src/rules/board-queries.ts", {"importedNames":["getPiecePosition"]}); -const __vite_ssr_import_6__ = await __vite_ssr_import__("/src/rules/primitives.ts", {"importedNames":["pawnCaptureSqares"]}); -const __vite_ssr_import_7__ = await __vite_ssr_import__("/src/assets/pieces/index.ts", {"importedNames":["pieceAssets"]}); -function movesAttackProbe(getter) { - return (session, pieceId, target) => { - for (const m of getter(session, pieceId)) { - if (m.to === target) return true; - }; - return false; - }; -} -const pawnAttackProbe = (session, pieceId, target) => { - const from = (0,__vite_ssr_import_5__.getPiecePosition)(session, pieceId); - if (from === null) return false; - const colorVal = session.get(pieceId, "Color"); - if (colorVal === void 0) return false; - const color = colorVal; - for (const sq of (0,__vite_ssr_import_6__.pawnCaptureSqares)(from, color)) { - if (sq === target) return true; - }; - return false; -}; -__vite_ssr_import_0__.PIECE_TYPE_REGISTRY.register({ - id: "pawn", - displayName: "Pawn", - moveGenerator: __vite_ssr_import_1__.getLegalPawnMoves, - attackProbe: pawnAttackProbe, - assets: { white: __vite_ssr_import_7__.pieceAssets.white.pawn, black: __vite_ssr_import_7__.pieceAssets.black.pawn } -}); -__vite_ssr_import_0__.PIECE_TYPE_REGISTRY.register({ - id: "knight", - displayName: "Knight", - moveGenerator: __vite_ssr_import_2__.getLegalKnightMoves, - attackProbe: movesAttackProbe((0,__vite_ssr_import_2__.getLegalKnightMoves)), - assets: { white: __vite_ssr_import_7__.pieceAssets.white.knight, black: __vite_ssr_import_7__.pieceAssets.black.knight } -}); -__vite_ssr_import_0__.PIECE_TYPE_REGISTRY.register({ - id: "bishop", - displayName: "Bishop", - moveGenerator: __vite_ssr_import_3__.getLegalBishopMoves, - attackProbe: movesAttackProbe((0,__vite_ssr_import_3__.getLegalBishopMoves)), - assets: { white: __vite_ssr_import_7__.pieceAssets.white.bishop, black: __vite_ssr_import_7__.pieceAssets.black.bishop } -}); -__vite_ssr_import_0__.PIECE_TYPE_REGISTRY.register({ - id: "rook", - displayName: "Rook", - moveGenerator: __vite_ssr_import_3__.getLegalRookMoves, - attackProbe: movesAttackProbe((0,__vite_ssr_import_3__.getLegalRookMoves)), - assets: { white: __vite_ssr_import_7__.pieceAssets.white.rook, black: __vite_ssr_import_7__.pieceAssets.black.rook } -}); -__vite_ssr_import_0__.PIECE_TYPE_REGISTRY.register({ - id: "queen", - displayName: "Queen", - moveGenerator: __vite_ssr_import_3__.getLegalQueenMoves, - attackProbe: movesAttackProbe((0,__vite_ssr_import_3__.getLegalQueenMoves)), - assets: { white: __vite_ssr_import_7__.pieceAssets.white.queen, black: __vite_ssr_import_7__.pieceAssets.black.queen } -}); -__vite_ssr_import_0__.PIECE_TYPE_REGISTRY.register({ - id: "king", - displayName: "King", - moveGenerator: __vite_ssr_import_4__.getLegalKingMoves, - attackProbe: movesAttackProbe((0,__vite_ssr_import_4__.getLegalKingMoves)), - assets: { white: __vite_ssr_import_7__.pieceAssets.white.king, black: __vite_ssr_import_7__.pieceAssets.black.king } -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBaUJBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBU0EsU0FBUyxpQkFBaUIsUUFBOEM7QUFDdEUsU0FBTyxDQUFDLFNBQVMsU0FBUyxXQUFXO0FBQ25DLGVBQVcsS0FBSyxPQUFPLFNBQVMsT0FBTyxHQUFHO0FBQ3hDLFVBQUksRUFBRSxPQUFPLE9BQVEsUUFBTztBQUFBLElBQzlCO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFDRjtBQUdBLE1BQU0sa0JBQW9DLENBQUMsU0FBUyxTQUFTLFdBQVc7QUFDdEUsUUFBTSxVQUFPLHdDQUFpQixTQUFTLE9BQU87QUFDOUMsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixRQUFNLFdBQVcsUUFBUSxJQUFJLFNBQVMsT0FBTztBQUM3QyxNQUFJLGFBQWEsT0FBVyxRQUFPO0FBQ25DLFFBQU0sUUFBUTtBQUNkLGFBQVcsU0FBTSx5Q0FBa0IsTUFBTSxLQUFLLEdBQUc7QUFDL0MsUUFBSSxPQUFPLE9BQVEsUUFBTztBQUFBLEVBQzVCO0FBQ0EsU0FBTztBQUNUO0FBRUEsMENBQW9CLFNBQVM7QUFBQSxFQUMzQixJQUFJO0FBQUEsRUFDSixhQUFhO0FBQUEsRUFDYixlQUFlO0FBQUEsRUFDZixhQUFhO0FBQUEsRUFDYixRQUFRLEVBQUUsT0FBTyxrQ0FBWSxNQUFNLE1BQU0sT0FBTyxrQ0FBWSxNQUFNLEtBQUs7QUFDekUsQ0FBQztBQUVELDBDQUFvQixTQUFTO0FBQUEsRUFDM0IsSUFBSTtBQUFBLEVBQ0osYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUFBLEVBQ2YsYUFBYSxvQkFBaUIsMENBQW1CO0FBQUEsRUFDakQsUUFBUSxFQUFFLE9BQU8sa0NBQVksTUFBTSxRQUFRLE9BQU8sa0NBQVksTUFBTSxPQUFPO0FBQzdFLENBQUM7QUFFRCwwQ0FBb0IsU0FBUztBQUFBLEVBQzNCLElBQUk7QUFBQSxFQUNKLGFBQWE7QUFBQSxFQUNiLGVBQWU7QUFBQSxFQUNmLGFBQWEsb0JBQWlCLDBDQUFtQjtBQUFBLEVBQ2pELFFBQVEsRUFBRSxPQUFPLGtDQUFZLE1BQU0sUUFBUSxPQUFPLGtDQUFZLE1BQU0sT0FBTztBQUM3RSxDQUFDO0FBRUQsMENBQW9CLFNBQVM7QUFBQSxFQUMzQixJQUFJO0FBQUEsRUFDSixhQUFhO0FBQUEsRUFDYixlQUFlO0FBQUEsRUFDZixhQUFhLG9CQUFpQix3Q0FBaUI7QUFBQSxFQUMvQyxRQUFRLEVBQUUsT0FBTyxrQ0FBWSxNQUFNLE1BQU0sT0FBTyxrQ0FBWSxNQUFNLEtBQUs7QUFDekUsQ0FBQztBQUVELDBDQUFvQixTQUFTO0FBQUEsRUFDM0IsSUFBSTtBQUFBLEVBQ0osYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUFBLEVBQ2YsYUFBYSxvQkFBaUIseUNBQWtCO0FBQUEsRUFDaEQsUUFBUSxFQUFFLE9BQU8sa0NBQVksTUFBTSxPQUFPLE9BQU8sa0NBQVksTUFBTSxNQUFNO0FBQzNFLENBQUM7QUFFRCwwQ0FBb0IsU0FBUztBQUFBLEVBQzNCLElBQUk7QUFBQSxFQUNKLGFBQWE7QUFBQSxFQUNiLGVBQWU7QUFBQSxFQUNmLGFBQWEsb0JBQWlCLHdDQUFpQjtBQUFBLEVBQy9DLFFBQVEsRUFBRSxPQUFPLGtDQUFZLE1BQU0sTUFBTSxPQUFPLGtDQUFZLE1BQU0sS0FBSztBQUN6RSxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJjb3JlLXBpZWNlLXR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVnaXN0cmF0aW9uIG9mIHRoZSBzaXggRklERSBwaWVjZSB0eXBlcyBpbiB0aGUgUGllY2VUeXBlUmVnaXN0cnkuXG4gKlxuICogVGhpcyBtb2R1bGUgaXMgaW1wb3J0ZWQgZnJvbSB0aGUgcHJlc2V0cyBiYXJyZWwgc28gcGllY2UgdHlwZXMgYXJlXG4gKiBhdmFpbGFibGUgYmVmb3JlIGFueSBlbmdpbmUgY29uc3RydWN0cyBhIG1vdmUuXG4gKlxuICogUGllY2UgdHlwZXMgYXJlIHJlZ2lzdGVyZWQgd2l0aDpcbiAqICAgLSBgbW92ZUdlbmVyYXRvcmAg4oCUIHRoZSBwc2V1ZG8tbGVnYWwgbW92ZSBmdW5jdGlvbiBmcm9tIGBydWxlcy9gLlxuICogICAtIGBhdHRhY2tQcm9iZWAg4oCUIFwiZG9lcyB0aGlzIHBpZWNlIGF0dGFjayBgdGFyZ2V0YD9cIiB1c2VkIGZvclxuICogICAgIGNoZWNrIGRldGVjdGlvbi4gRm9yIG1vc3QgdHlwZXMgdGhpcyBpcyBhIHRoaW4gd3JhcHBlciBvdmVyXG4gKiAgICAgdGhlIG1vdmUgZ2VuZXJhdG9yOyBwYXducyBuZWVkIHRoZWlyIG93biBiZWNhdXNlIHRoZXkgYXR0YWNrXG4gKiAgICAgZGlhZ29uYWxseSB3aXRob3V0IGFuIGVuZW15IG9uIHRoZSB0YXJnZXQgc3F1YXJlLlxuICogICAtIGBhc3NldHNgIOKAlCB0aGUgYnVuZGxlZCBTVkcgVVJMcyBwZXIgY29sb3IuXG4gKlxuICogQ3VzdG9tIHBpZWNlIHR5cGVzIChDYW5ub24sIEFtYXpvbiwgZXRjLikgcmVnaXN0ZXIgdGhlbXNlbHZlcyB0aGVcbiAqIHNhbWUgd2F5IOKAlCB0eXBpY2FsbHkgZnJvbSBhIHByZXNldCdzIHNpZGUtZWZmZWN0IGltcG9ydC5cbiAqL1xuaW1wb3J0IHsgUElFQ0VfVFlQRV9SRUdJU1RSWSB9IGZyb20gXCIuL3BpZWNlLXR5cGUtcmVnaXN0cnkuanNcIjtcbmltcG9ydCB7IGdldExlZ2FsUGF3bk1vdmVzIH0gZnJvbSBcIi4uL3J1bGVzL3Bhd24uanNcIjtcbmltcG9ydCB7IGdldExlZ2FsS25pZ2h0TW92ZXMgfSBmcm9tIFwiLi4vcnVsZXMva25pZ2h0LmpzXCI7XG5pbXBvcnQge1xuICBnZXRMZWdhbFJvb2tNb3ZlcyxcbiAgZ2V0TGVnYWxCaXNob3BNb3ZlcyxcbiAgZ2V0TGVnYWxRdWVlbk1vdmVzLFxufSBmcm9tIFwiLi4vcnVsZXMvc2xpZGluZy5qc1wiO1xuaW1wb3J0IHsgZ2V0TGVnYWxLaW5nTW92ZXMgfSBmcm9tIFwiLi4vcnVsZXMva2luZy5qc1wiO1xuaW1wb3J0IHsgZ2V0UGllY2VQb3NpdGlvbiB9IGZyb20gXCIuLi9ydWxlcy9ib2FyZC1xdWVyaWVzLmpzXCI7XG5pbXBvcnQgeyBwYXduQ2FwdHVyZVNxYXJlcyB9IGZyb20gXCIuLi9ydWxlcy9wcmltaXRpdmVzLmpzXCI7XG5pbXBvcnQgeyBwaWVjZUFzc2V0cyB9IGZyb20gXCIuLi9hc3NldHMvcGllY2VzL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBpZWNlQXR0YWNrUHJvYmUsIFBpZWNlTW92ZUdlbmVyYXRvciB9IGZyb20gXCIuL3BpZWNlLXR5cGUtcmVnaXN0cnkuanNcIjtcbmltcG9ydCB0eXBlIHsgUGllY2VDb2xvciB9IGZyb20gXCIuLi9zY2hlbWEuanNcIjtcblxuLyoqXG4gKiBEZXJpdmUgYSBcImRvZXMgdGhpcyBwaWVjZSBhdHRhY2sgYHRhcmdldGA/XCIgcHJvYmUgZnJvbSBpdHMgbW92ZVxuICogZ2VuZXJhdG9yLiBXb3JrcyBmb3IgYW55IHBpZWNlIHR5cGUgd2hvc2UgYXR0YWNrIGdlb21ldHJ5IEVRVUFMU1xuICogaXRzIG1vdmUgZ2VvbWV0cnkuIFBhd25zIGFyZSB0aGUgc29sZSBleGNlcHRpb24gKHNlZSBiZWxvdykuXG4gKi9cbmZ1bmN0aW9uIG1vdmVzQXR0YWNrUHJvYmUoZ2V0dGVyOiBQaWVjZU1vdmVHZW5lcmF0b3IpOiBQaWVjZUF0dGFja1Byb2JlIHtcbiAgcmV0dXJuIChzZXNzaW9uLCBwaWVjZUlkLCB0YXJnZXQpID0+IHtcbiAgICBmb3IgKGNvbnN0IG0gb2YgZ2V0dGVyKHNlc3Npb24sIHBpZWNlSWQpKSB7XG4gICAgICBpZiAobS50byA9PT0gdGFyZ2V0KSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xufVxuXG4vKiogUGF3bnMgYXR0YWNrIGRpYWdvbmFsbHkgcmVnYXJkbGVzcyBvZiB3aGF0IChvciBub3RoaW5nKSBpcyB0aGVyZS4gKi9cbmNvbnN0IHBhd25BdHRhY2tQcm9iZTogUGllY2VBdHRhY2tQcm9iZSA9IChzZXNzaW9uLCBwaWVjZUlkLCB0YXJnZXQpID0+IHtcbiAgY29uc3QgZnJvbSA9IGdldFBpZWNlUG9zaXRpb24oc2Vzc2lvbiwgcGllY2VJZCk7XG4gIGlmIChmcm9tID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGNvbG9yVmFsID0gc2Vzc2lvbi5nZXQocGllY2VJZCwgXCJDb2xvclwiKTtcbiAgaWYgKGNvbG9yVmFsID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgY29sb3IgPSBjb2xvclZhbCBhcyBQaWVjZUNvbG9yO1xuICBmb3IgKGNvbnN0IHNxIG9mIHBhd25DYXB0dXJlU3FhcmVzKGZyb20sIGNvbG9yKSkge1xuICAgIGlmIChzcSA9PT0gdGFyZ2V0KSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5QSUVDRV9UWVBFX1JFR0lTVFJZLnJlZ2lzdGVyKHtcbiAgaWQ6IFwicGF3blwiLFxuICBkaXNwbGF5TmFtZTogXCJQYXduXCIsXG4gIG1vdmVHZW5lcmF0b3I6IGdldExlZ2FsUGF3bk1vdmVzLFxuICBhdHRhY2tQcm9iZTogcGF3bkF0dGFja1Byb2JlLFxuICBhc3NldHM6IHsgd2hpdGU6IHBpZWNlQXNzZXRzLndoaXRlLnBhd24sIGJsYWNrOiBwaWVjZUFzc2V0cy5ibGFjay5wYXduIH0sXG59KTtcblxuUElFQ0VfVFlQRV9SRUdJU1RSWS5yZWdpc3Rlcih7XG4gIGlkOiBcImtuaWdodFwiLFxuICBkaXNwbGF5TmFtZTogXCJLbmlnaHRcIixcbiAgbW92ZUdlbmVyYXRvcjogZ2V0TGVnYWxLbmlnaHRNb3ZlcyxcbiAgYXR0YWNrUHJvYmU6IG1vdmVzQXR0YWNrUHJvYmUoZ2V0TGVnYWxLbmlnaHRNb3ZlcyksXG4gIGFzc2V0czogeyB3aGl0ZTogcGllY2VBc3NldHMud2hpdGUua25pZ2h0LCBibGFjazogcGllY2VBc3NldHMuYmxhY2sua25pZ2h0IH0sXG59KTtcblxuUElFQ0VfVFlQRV9SRUdJU1RSWS5yZWdpc3Rlcih7XG4gIGlkOiBcImJpc2hvcFwiLFxuICBkaXNwbGF5TmFtZTogXCJCaXNob3BcIixcbiAgbW92ZUdlbmVyYXRvcjogZ2V0TGVnYWxCaXNob3BNb3ZlcyxcbiAgYXR0YWNrUHJvYmU6IG1vdmVzQXR0YWNrUHJvYmUoZ2V0TGVnYWxCaXNob3BNb3ZlcyksXG4gIGFzc2V0czogeyB3aGl0ZTogcGllY2VBc3NldHMud2hpdGUuYmlzaG9wLCBibGFjazogcGllY2VBc3NldHMuYmxhY2suYmlzaG9wIH0sXG59KTtcblxuUElFQ0VfVFlQRV9SRUdJU1RSWS5yZWdpc3Rlcih7XG4gIGlkOiBcInJvb2tcIixcbiAgZGlzcGxheU5hbWU6IFwiUm9va1wiLFxuICBtb3ZlR2VuZXJhdG9yOiBnZXRMZWdhbFJvb2tNb3ZlcyxcbiAgYXR0YWNrUHJvYmU6IG1vdmVzQXR0YWNrUHJvYmUoZ2V0TGVnYWxSb29rTW92ZXMpLFxuICBhc3NldHM6IHsgd2hpdGU6IHBpZWNlQXNzZXRzLndoaXRlLnJvb2ssIGJsYWNrOiBwaWVjZUFzc2V0cy5ibGFjay5yb29rIH0sXG59KTtcblxuUElFQ0VfVFlQRV9SRUdJU1RSWS5yZWdpc3Rlcih7XG4gIGlkOiBcInF1ZWVuXCIsXG4gIGRpc3BsYXlOYW1lOiBcIlF1ZWVuXCIsXG4gIG1vdmVHZW5lcmF0b3I6IGdldExlZ2FsUXVlZW5Nb3ZlcyxcbiAgYXR0YWNrUHJvYmU6IG1vdmVzQXR0YWNrUHJvYmUoZ2V0TGVnYWxRdWVlbk1vdmVzKSxcbiAgYXNzZXRzOiB7IHdoaXRlOiBwaWVjZUFzc2V0cy53aGl0ZS5xdWVlbiwgYmxhY2s6IHBpZWNlQXNzZXRzLmJsYWNrLnF1ZWVuIH0sXG59KTtcblxuUElFQ0VfVFlQRV9SRUdJU1RSWS5yZWdpc3Rlcih7XG4gIGlkOiBcImtpbmdcIixcbiAgZGlzcGxheU5hbWU6IFwiS2luZ1wiLFxuICBtb3ZlR2VuZXJhdG9yOiBnZXRMZWdhbEtpbmdNb3ZlcyxcbiAgYXR0YWNrUHJvYmU6IG1vdmVzQXR0YWNrUHJvYmUoZ2V0TGVnYWxLaW5nTW92ZXMpLFxuICBhc3NldHM6IHsgd2hpdGU6IHBpZWNlQXNzZXRzLndoaXRlLmtpbmcsIGJsYWNrOiBwaWVjZUFzc2V0cy5ibGFjay5raW5nIH0sXG59KTtcbiJdLCJmaWxlIjoiL3NyYy9wcmVzZXRzL2NvcmUtcGllY2UtdHlwZXMudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/b0b8b391e4ef158458cc7b93c3c059b81387582e b/7xOfJqsDU787fe61oSCq1/web/b0b8b391e4ef158458cc7b93c3c059b81387582e deleted file mode 100644 index 52b9468..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/b0b8b391e4ef158458cc7b93c3c059b81387582e +++ /dev/null @@ -1,88 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/rules/checkmate.ts", {"importedNames":["isCheckmate"]}); -const mkId = (n) => n; -function insertPiece(s, id, type, color, sq) { - const eid = mkId(id); - s.insert(eid, "PieceType", type); - s.insert(eid, "Color", color); - s.insert(eid, "Position", sq); - return eid; -} -(0,__vite_ssr_import_0__.describe)("isCheckmate — positive cases", () => { - (0,__vite_ssr_import_0__.it)("back-rank mate: king walled in by own pawns, rook on back rank", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "king", "white", 6); - insertPiece(session, 2, "pawn", "white", 13); - insertPiece(session, 3, "pawn", "white", 14); - insertPiece(session, 4, "pawn", "white", 15); - insertPiece(session, 5, "rook", "black", 0); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isCheckmate)(session, "white")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("Fool's Mate: white king mated by Qh4 along the h4–e1 diagonal", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "king", "white", 4); - insertPiece(session, 2, "queen", "white", 3); - insertPiece(session, 3, "bishop", "white", 5); - insertPiece(session, 4, "pawn", "white", 11); - insertPiece(session, 5, "pawn", "white", 12); - insertPiece(session, 6, "knight", "white", 6); - insertPiece(session, 7, "pawn", "white", 21); - insertPiece(session, 8, "queen", "black", 31); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isCheckmate)(session, "white")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("Scholar's Mate: black king mated by Qxf7 defended by bishop", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "king", "black", 60); - insertPiece(session, 2, "queen", "black", 59); - insertPiece(session, 3, "bishop", "black", 61); - insertPiece(session, 4, "knight", "black", 42); - insertPiece(session, 5, "knight", "black", 45); - insertPiece(session, 6, "queen", "white", 53); - insertPiece(session, 7, "bishop", "white", 26); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isCheckmate)(session, "black")).toBe(true); - }); -}); -(0,__vite_ssr_import_0__.describe)("isCheckmate — negative cases", () => { - (0,__vite_ssr_import_0__.it)("check with a flight square available is NOT mate", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "king", "white", 4); - insertPiece(session, 2, "rook", "black", 60); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isCheckmate)(session, "white")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("check that can be blocked is NOT mate", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "king", "white", 4); - insertPiece(session, 2, "rook", "white", 16); - insertPiece(session, 3, "rook", "black", 60); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isCheckmate)(session, "white")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("check that can be captured is NOT mate", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "king", "white", 6); - insertPiece(session, 2, "pawn", "white", 13); - insertPiece(session, 3, "pawn", "white", 14); - insertPiece(session, 4, "pawn", "white", 15); - insertPiece(session, 5, "rook", "black", 62); - insertPiece(session, 6, "rook", "white", 54); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isCheckmate)(session, "white")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("not in check → not checkmate (lone king on empty board)", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "king", "white", 4); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isCheckmate)(session, "white")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("opposite color's checkmate doesn't report for our color", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "king", "white", 6); - insertPiece(session, 2, "pawn", "white", 13); - insertPiece(session, 3, "pawn", "white", 14); - insertPiece(session, 4, "pawn", "white", 15); - insertPiece(session, 5, "rook", "black", 0); - insertPiece(session, 6, "king", "black", 63); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.isCheckmate)(session, "black")).toBe(false); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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USxTQUFTLEVBQUU7QUFDM0Msd0NBQU8sbUNBQVksU0FBUyxPQUFPLENBQUMsRUFBRSxLQUFLLEtBQUs7QUFBQSxFQUNsRCxDQUFDO0FBQ0gsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiY2hlY2ttYXRlLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUZXN0cyBmb3IgY2hlY2ttYXRlIGRldGVjdGlvbiAoUDIuMTkpLlxuICpcbiAqIFNxdWFyZSBpbmRleGluZyAocGVyIHNjaGVtYS50cyk6XG4gKiAgIHNxdWFyZSA9IHJhbmsgKiA4ICsgZmlsZSwgIGZpbGUgMD1hLCByYW5rIDA9cmFuazFcbiAqICAgYTE9MCwgZTE9NCwgaDE9NywgYTI9OCwgaDI9MTUsIGU0PTI4LCBlOD02MCwgaDg9NjNcbiAqXG4gKiBXZSBjb25zdHJ1Y3QgbWluaW1hbCBwb3NpdGlvbnMgcmF0aGVyIHRoYW4gZnVsbCBhcm1pZXM6IG9ubHkgdGhlXG4gKiBwaWVjZXMgcmVsZXZhbnQgdG8gdGhlIG1hdGluZyBwYXR0ZXJuIGFyZSBwbGFjZWQuIGBpc0luQ2hlY2tgIGFuZFxuICogYGZpbHRlclNlbGZDaGVja01vdmVzYCBncmFjZWZ1bGx5IGhhbmRsZSBwYXJ0aWFsIHBvc2l0aW9ucyAobWlzc2luZ1xuICogZW5lbXkga2luZywgZXRjLikuXG4gKi9cbmltcG9ydCB7IGRlc2NyaWJlLCBpdCwgZXhwZWN0IH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuaW1wb3J0IHsgaXNDaGVja21hdGUgfSBmcm9tIFwiLi9jaGVja21hdGUuanNcIjtcblxuY29uc3QgbWtJZCA9IChuOiBudW1iZXIpID0+IG4gYXMgRW50aXR5SWQ7XG5cbmZ1bmN0aW9uIGluc2VydFBpZWNlKFxuICBzOiBTZXNzaW9uLFxuICBpZDogbnVtYmVyLFxuICB0eXBlOiBzdHJpbmcsXG4gIGNvbG9yOiBzdHJpbmcsXG4gIHNxOiBudW1iZXIsXG4pOiBFbnRpdHlJZCB7XG4gIGNvbnN0IGVpZCA9IG1rSWQoaWQpO1xuICBzLmluc2VydChlaWQsIFwiUGllY2VUeXBlXCIsIHR5cGUpO1xuICBzLmluc2VydChlaWQsIFwiQ29sb3JcIiwgY29sb3IpO1xuICBzLmluc2VydChlaWQsIFwiUG9zaXRpb25cIiwgc3EpO1xuICByZXR1cm4gZWlkO1xufVxuXG5kZXNjcmliZShcImlzQ2hlY2ttYXRlIOKAlCBwb3NpdGl2ZSBjYXNlc1wiLCAoKSA9PiB7XG4gIGl0KFwiYmFjay1yYW5rIG1hdGU6IGtpbmcgd2FsbGVkIGluIGJ5IG93biBwYXducywgcm9vayBvbiBiYWNrIHJhbmtcIiwgKCkgPT4ge1xuICAgIC8vIFdoaXRlIEsgb24gZzEgKDYpLiBPd24gcGF3bnMgb24gZjIoMTMpLCBnMigxNCksIGgyKDE1KSBibG9jayBldmVyeVxuICAgIC8vIHNlY29uZC1yYW5rIGVzY2FwZS4gQmxhY2sgcm9vayBvbiBhMSgwKSByYWtlcyB0aGUgZW50aXJlIDFzdCByYW5rLFxuICAgIC8vIGF0dGFja2luZyBnMSAoY2hlY2spIGFuZCBhbHNvIGNvdmVyaW5nIGYxKDUpIGFuZCBoMSg3KSDigJQgdGhlIG9ubHlcbiAgICAvLyBvdGhlciBlc2NhcGUgc3F1YXJlcy4gS2luZyBoYXMgbm8gcGllY2UgdG8gY2FwdHVyZSBvciBibG9jayB3aXRoLlxuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcImtpbmdcIiwgXCJ3aGl0ZVwiLCA2KTsgICAvLyBnMVxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDIsIFwicGF3blwiLCBcIndoaXRlXCIsIDEzKTsgIC8vIGYyXG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMywgXCJwYXduXCIsIFwid2hpdGVcIiwgMTQpOyAgLy8gZzJcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCA0LCBcInBhd25cIiwgXCJ3aGl0ZVwiLCAxNSk7ICAvLyBoMlxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDUsIFwicm9va1wiLCBcImJsYWNrXCIsIDApOyAgIC8vIGExIOKAlCBkZWxpdmVycyBjaGVjayBvbiByYW5rIDFcbiAgICBleHBlY3QoaXNDaGVja21hdGUoc2Vzc2lvbiwgXCJ3aGl0ZVwiKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJGb29sJ3MgTWF0ZTogd2hpdGUga2luZyBtYXRlZCBieSBRaDQgYWxvbmcgdGhlIGg04oCTZTEgZGlhZ29uYWxcIiwgKCkgPT4ge1xuICAgIC8vIFJlcHJvZHVjZXMgdGhlIHBvc2l0aW9uIGFmdGVyIDEuZjMgZTUgMi5nNCBRaDQjLiBPbmx5IHRoZSBwaWVjZXNcbiAgICAvLyBuZWVkZWQgdG8gcHJvdmUgbWF0ZSBhcmUgcGxhY2VkOiB0aGUga2luZywgdGhlIGJsb2NrZXJzIHRoYXRcbiAgICAvLyBvY2N1cHkgZDEvZjEvZDIvZTIsIGFuZCB0aGUgYmxhY2sgcXVlZW4gb24gaDQuIGYyIGlzIGVtcHR5IGJ1dFxuICAgIC8vIGF0dGFja2VkIGJ5IHRoZSBxdWVlbiBhbG9uZyBoNC1nMy1mMi1lMTsgbm8gd2hpdGUgcGllY2UgY2FuXG4gICAgLy8gaW50ZXJwb3NlIG9uIGczL2YyIG9yIGNhcHR1cmUgdGhlIHF1ZWVuIGluIG9uZSBtb3ZlLlxuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcImtpbmdcIiwgXCJ3aGl0ZVwiLCA0KTsgICAgLy8gZTFcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAyLCBcInF1ZWVuXCIsIFwid2hpdGVcIiwgMyk7ICAgLy8gZDEgIChibG9ja3MgZDEgZXNjYXBlKVxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDMsIFwiYmlzaG9wXCIsIFwid2hpdGVcIiwgNSk7ICAvLyBmMSAgKGJsb2NrcyBmMSBlc2NhcGUpXG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgNCwgXCJwYXduXCIsIFwid2hpdGVcIiwgMTEpOyAgIC8vIGQyICAoYmxvY2tzIGQyIGVzY2FwZSlcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCA1LCBcInBhd25cIiwgXCJ3aGl0ZVwiLCAxMik7ICAgLy8gZTIgIChibG9ja3MgZTIgZXNjYXBlKVxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDYsIFwia25pZ2h0XCIsIFwid2hpdGVcIiwgNik7ICAvLyBnMVxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDcsIFwicGF3blwiLCBcIndoaXRlXCIsIDIxKTsgICAvLyBmMyAgKGJsb2NrcyBOZzEtZjMgZGVmZW5zZSlcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCA4LCBcInF1ZWVuXCIsIFwiYmxhY2tcIiwgMzEpOyAgLy8gaDQgIOKAlCBjaGVja3MgYWxvbmcgaDQtZTEgZGlhZ1xuICAgIGV4cGVjdChpc0NoZWNrbWF0ZShzZXNzaW9uLCBcIndoaXRlXCIpKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcIlNjaG9sYXIncyBNYXRlOiBibGFjayBraW5nIG1hdGVkIGJ5IFF4ZjcgZGVmZW5kZWQgYnkgYmlzaG9wXCIsICgpID0+IHtcbiAgICAvLyBGaW5hbCBwb3NpdGlvbiBvZiAxLmU0IGU1IDIuQmM0IE5jNiAzLlFoNSBOZjY/PyA0LlF4ZjcjLlxuICAgIC8vIEJsYWNrIEsgb24gZTgoNjApLiBXaGl0ZSBRIG9uIGY3KDUzKSwgZGVmZW5kZWQgYnkgQiBvbiBjNCgyNilcbiAgICAvLyBhbG9uZyB0aGUgYzQtZDUtZTYtZjcgZGlhZ29uYWwuIFRoZSBxdWVlbiBhdHRhY2tzIGU4IChhZGphY2VudCArXG4gICAgLy8gZGlhZ29uYWwpLCBwbHVzIGU3KDUyKSBhbmQgZDcoNTEpIGFsb25nIHJhbmsgNyDigJQgc28gdGhlIGtpbmdcbiAgICAvLyBjYW5ub3Qgc3RlcCB0byB0aG9zZSBzcXVhcmVzLiBPd24gUWQ4IGFuZCBCZjggYmxvY2sgZDgvZjguIFRoZVxuICAgIC8vIHF1ZWVuIGlzIGRlZmVuZGVkLCBzbyBLeGY3IGxvc2VzIHRoZSBraW5nLiBObyBibGFjayBwaWVjZSBjYW5cbiAgICAvLyBjYXB0dXJlIGY3IG9yIGludGVycG9zZSAocXVlZW4gaXMgYWRqYWNlbnQgdG8ga2luZykuXG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwia2luZ1wiLCBcImJsYWNrXCIsIDYwKTsgICAgLy8gZThcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAyLCBcInF1ZWVuXCIsIFwiYmxhY2tcIiwgNTkpOyAgIC8vIGQ4IChibG9ja3MgZDggZXNjYXBlKVxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDMsIFwiYmlzaG9wXCIsIFwiYmxhY2tcIiwgNjEpOyAgLy8gZjggKGJsb2NrcyBmOCBlc2NhcGUpXG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgNCwgXCJrbmlnaHRcIiwgXCJibGFja1wiLCA0Mik7ICAvLyBjNiDigJQgY2FuJ3QgcmVhY2ggZjdcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCA1LCBcImtuaWdodFwiLCBcImJsYWNrXCIsIDQ1KTsgIC8vIGY2IOKAlCBjYW4ndCByZWFjaCBmN1xuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDYsIFwicXVlZW5cIiwgXCJ3aGl0ZVwiLCA1Myk7ICAgLy8gZjcg4oCUIGRlbGl2ZXJzIGNoZWNrXG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgNywgXCJiaXNob3BcIiwgXCJ3aGl0ZVwiLCAyNik7ICAvLyBjNCDigJQgZGVmZW5kcyBmN1xuICAgIGV4cGVjdChpc0NoZWNrbWF0ZShzZXNzaW9uLCBcImJsYWNrXCIpKS50b0JlKHRydWUpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImlzQ2hlY2ttYXRlIOKAlCBuZWdhdGl2ZSBjYXNlc1wiLCAoKSA9PiB7XG4gIGl0KFwiY2hlY2sgd2l0aCBhIGZsaWdodCBzcXVhcmUgYXZhaWxhYmxlIGlzIE5PVCBtYXRlXCIsICgpID0+IHtcbiAgICAvLyBMb25lIHdoaXRlIGtpbmcgb24gZTEsIGJsYWNrIHJvb2sgb24gZTggZ2l2ZXMgY2hlY2suIEVzY2FwZSBzcXVhcmVzXG4gICAgLy8gZDEsIGYxLCBkMiwgZTIsIGYyIGFyZSBhbGwgZW1wdHkgYW5kIHVuYXR0YWNrZWQg4oaSIGtpbmcgd2Fsa3MuXG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwia2luZ1wiLCBcIndoaXRlXCIsIDQpOyAgIC8vIGUxXG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMiwgXCJyb29rXCIsIFwiYmxhY2tcIiwgNjApOyAgLy8gZThcbiAgICBleHBlY3QoaXNDaGVja21hdGUoc2Vzc2lvbiwgXCJ3aGl0ZVwiKSkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwiY2hlY2sgdGhhdCBjYW4gYmUgYmxvY2tlZCBpcyBOT1QgbWF0ZVwiLCAoKSA9PiB7XG4gICAgLy8gQmxhY2sgcm9vayBvbiBlOCBjaGVja3Mgd2hpdGUga2luZyBvbiBlMS4gV2hpdGUgcm9vayBvbiBhMyBjYW5cbiAgICAvLyBpbnRlcnBvc2UgYXQgZTMoMjApIOKAlCB0aGUgc2xpZGUgYTMtZTMgKHNhbWUgcmFuaykgaXMgdW5vYnN0cnVjdGVkLlxuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcImtpbmdcIiwgXCJ3aGl0ZVwiLCA0KTsgICAvLyBlMVxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDIsIFwicm9va1wiLCBcIndoaXRlXCIsIDE2KTsgIC8vIGEzIOKAlCBjYW4gYmxvY2sgYXQgZTNcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAzLCBcInJvb2tcIiwgXCJibGFja1wiLCA2MCk7ICAvLyBlOCDigJQgZ2l2ZXMgY2hlY2tcbiAgICAvLyAoTm8gYmxvY2tlcnMgbmVhciB0aGUga2luZywgc28ga2luZyBjb3VsZCBhbHNvIGZsZWUg4oCUIHRoYXQncyBmaW5lLFxuICAgIC8vICB3ZSBqdXN0IG5lZWQgYXQgbGVhc3Qgb25lIGxlZ2FsIG1vdmUuKVxuICAgIGV4cGVjdChpc0NoZWNrbWF0ZShzZXNzaW9uLCBcIndoaXRlXCIpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJjaGVjayB0aGF0IGNhbiBiZSBjYXB0dXJlZCBpcyBOT1QgbWF0ZVwiLCAoKSA9PiB7XG4gICAgLy8gUm9vay1kZWxpdmVyZWQgY2hlY2sgb24gYmFjayByYW5rIHdpdGgga2luZyBib3hlZCBpbiBieSBwYXducywgQlVUXG4gICAgLy8gYSBkZWZlbmRpbmcgcm9vayBvbiBhMSBjYW4gY2FwdHVyZSB0aGUgY2hlY2tlci4gU2FtZSBza2VsZXRvbiBhc1xuICAgIC8vIHRoZSBiYWNrLXJhbmsgbWF0ZSBhYm92ZSBidXQgd2l0aCBhIGRlZmVuZGVyIGFkZGVkLlxuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcImtpbmdcIiwgXCJ3aGl0ZVwiLCA2KTsgICAgLy8gZzFcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAyLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCAxMyk7ICAgLy8gZjJcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAzLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCAxNCk7ICAgLy8gZzJcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCA0LCBcInBhd25cIiwgXCJ3aGl0ZVwiLCAxNSk7ICAgLy8gaDJcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCA1LCBcInJvb2tcIiwgXCJibGFja1wiLCA2Mik7ICAgLy8gZzgg4oCUIGNoZWNrcyBkb3duIGctZmlsZVxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDYsIFwicm9va1wiLCBcIndoaXRlXCIsIDU0KTsgICAvLyBnNyDigJQgY2FwdHVyZXMgUmc4XG4gICAgZXhwZWN0KGlzQ2hlY2ttYXRlKHNlc3Npb24sIFwid2hpdGVcIikpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcIm5vdCBpbiBjaGVjayDihpIgbm90IGNoZWNrbWF0ZSAobG9uZSBraW5nIG9uIGVtcHR5IGJvYXJkKVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwia2luZ1wiLCBcIndoaXRlXCIsIDQpO1xuICAgIGV4cGVjdChpc0NoZWNrbWF0ZShzZXNzaW9uLCBcIndoaXRlXCIpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJvcHBvc2l0ZSBjb2xvcidzIGNoZWNrbWF0ZSBkb2Vzbid0IHJlcG9ydCBmb3Igb3VyIGNvbG9yXCIsICgpID0+IHtcbiAgICAvLyBCdWlsZCB0aGUgYmFjay1yYW5rIG1hdGUgYWdhaW5zdCB3aGl0ZTsgYXNraW5nIGFib3V0IGJsYWNrIG11c3RcbiAgICAvLyByZXR1cm4gZmFsc2UgKGJsYWNrIGlzIHRoZSBzaWRlIGRlbGl2ZXJpbmcgbWF0ZSwgbm90IHJlY2VpdmluZyBpdCkuXG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwia2luZ1wiLCBcIndoaXRlXCIsIDYpO1xuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDIsIFwicGF3blwiLCBcIndoaXRlXCIsIDEzKTtcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAzLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCAxNCk7XG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgNCwgXCJwYXduXCIsIFwid2hpdGVcIiwgMTUpO1xuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDUsIFwicm9va1wiLCBcImJsYWNrXCIsIDApO1xuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDYsIFwia2luZ1wiLCBcImJsYWNrXCIsIDYzKTsgIC8vIGg4LCBzYWZlXG4gICAgZXhwZWN0KGlzQ2hlY2ttYXRlKHNlc3Npb24sIFwiYmxhY2tcIikpLnRvQmUoZmFsc2UpO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL2NoZXNzL3NyYy9ydWxlcy9jaGVja21hdGUudGVzdC50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/b351db6f7cf25266048a8501818cf309a7c849f7 b/7xOfJqsDU787fe61oSCq1/web/b351db6f7cf25266048a8501818cf309a7c849f7 deleted file mode 100644 index 6d063aa..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/b351db6f7cf25266048a8501818cf309a7c849f7 +++ /dev/null @@ -1,29 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "orderActivations", { enumerable: true, configurable: true, get(){ try { return orderActivations } catch {} }}); -/** - * Return a new array of activations in firing order. - * - * Pure; input is not mutated. See module-level doc for the three ordering - * keys. Implemented via a single `Array#sort` with a lexicographic - * comparator — `Array#sort` in V8/JSC is guaranteed stable since ES2019, - * but this comparator already yields a total order so stability is - * redundant. - */ -function orderActivations(activations) { - return [...activations].sort((a, b) => { - // 1. Salience descending (higher salience sorts earlier). - if (b.rule.salience !== a.rule.salience) { - return b.rule.salience - a.rule.salience; - }; - // 2. Specificity (number of LHS conditions) descending. - const specA = a.rule.conditions.length; - const specB = b.rule.conditions.length; - if (specB !== specA) { - return specB - specA; - }; - // 3. Insertion order ascending (earlier-registered rule wins). - return a.rule.addedAt - b.rule.addedAt; - }); -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQXdEQTs7Ozs7Ozs7O0FBU00sU0FBVSxnQkFBZ0IsQ0FDOUIsV0FBa0M7SUFFbEMsT0FBTyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3BDO1FBQ0EsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUN2QyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUTtRQUMxQztRQUNBO1FBQ0EsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTtRQUN0QyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNO1FBQ3RDLElBQUksS0FBSyxLQUFLLEtBQUssRUFBRTtZQUNuQixPQUFPLEtBQUssR0FBRyxLQUFLO1FBQ3RCO1FBQ0E7UUFDQSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTztJQUN4QyxDQUFDLENBQUM7QUFDSiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZsaWN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGV0ZXJtaW5pc3RpYyBjb25mbGljdCByZXNvbHV0aW9uIGZvciB0aGUgUmV0ZSBhZ2VuZGEuXG4gKlxuICogUGVyIGBwYWNrYWdlcy9yZXRlL1NQRUMubWQgwqdDb25mbGljdCBSZXNvbHV0aW9uYCwgcGVuZGluZyBydWxlIGFjdGl2YXRpb25zXG4gKiBtdXN0IGZpcmUgaW4gYSBzdGFibGUsIHJlcHJvZHVjaWJsZSBvcmRlciBkZXRlcm1pbmVkIGJ5IHRocmVlIGtleXMsIGFwcGxpZWRcbiAqIGluIHN0cmljdCBwcmlvcml0eTpcbiAqXG4gKiAgIDEuICoqU2FsaWVuY2UgZGVzY2VuZGluZyoqIOKAlCBoaWdoZXIgc2FsaWVuY2UgZmlyZXMgYmVmb3JlIGxvd2VyLlxuICogICAyLiAqKlNwZWNpZmljaXR5IGRlc2NlbmRpbmcqKiDigJQgdGhlIHJ1bGUgd2l0aCBtb3JlIExIUyBjb25kaXRpb25zIGZpcmVzXG4gKiAgICAgIGZpcnN0IHdoZW4gc2FsaWVuY2UgdGllcy4gVGhpcyBtYXRjaGVzIENMSVBTL0plc3MgY29udmVudGlvbnM6IGEgbW9yZVxuICogICAgICBzcGVjaWZpYyBtYXRjaCBpcyBwcmVmZXJyZWQgb3ZlciBhIGdlbmVyYWwgb25lLlxuICogICAzLiAqKkluc2VydGlvbiBvcmRlciBhc2NlbmRpbmcqKiDigJQgd2hlbiBzYWxpZW5jZSAqYW5kKiBzcGVjaWZpY2l0eSB0aWUsXG4gKiAgICAgIHRoZSBydWxlIHJlZ2lzdGVyZWQgZWFybGllc3Qgd2l0aCB0aGUgc2Vzc2lvbiB3aW5zLiBgYWRkZWRBdGAgaXNcbiAqICAgICAgdGhlIHplcm8tYmFzZWQgaW5kZXggYXNzaWduZWQgYnkge0BsaW5rIFNlc3Npb24uYWRkfSBhdCByZWdpc3RyYXRpb25cbiAqICAgICAgdGltZS5cbiAqXG4gKiBUaGUgb3JkZXJpbmcgaXMgYSB0b3RhbCBvcmRlciDigJQgbm8ga2V5IHBlcm1pdHMgdGllcywgc28gdHdvIGFjdGl2YXRpb25zXG4gKiBjYW4gb25seSBjb21wYXJlIGVxdWFsIGlmIHRoZXkgc2hhcmUgc2FsaWVuY2UsIHNwZWNpZmljaXR5LCBBTkQgYWRkZWRBdCxcbiAqIHdoaWNoIGlzIGZvcmJpZGRlbiBhdCB0aGUgc2Vzc2lvbiBsZXZlbCAoZWFjaCBydWxlIGdldHMgYSB1bmlxdWUgaW5kZXgpLlxuICogRG93bnN0cmVhbSBjYWxsZXJzIHRoZXJlZm9yZSBkbyBub3QgbmVlZCBgQXJyYXkjc29ydGAgc3RhYmlsaXR5IGd1YXJhbnRlZXMuXG4gKlxuICoge0BsaW5rIG9yZGVyQWN0aXZhdGlvbnN9IGlzIGEgcHVyZSBmdW5jdGlvbjogaXQgYWxsb2NhdGVzIGEgZnJlc2ggYXJyYXlcbiAqIGFuZCBuZXZlciBtdXRhdGVzIGl0cyBpbnB1dC4gVGhpcyBpcyBsb2FkLWJlYXJpbmcgZm9yIHRoZSBpbnRlZ3JhdGlvblxuICogd2l0aCB0aGUgYWdlbmRhLCB3aGljaCBrZWVwcyB0aGUgcmF3IGFjdGl2YXRpb24gbGlzdCBhcm91bmQgYW5kIHJlcGVhdGVkbHlcbiAqIHJlLW9yZGVycyBhIHNuYXBzaG90LlxuICovXG5pbXBvcnQgdHlwZSB7IFRva2VuIH0gZnJvbSBcIi4vYmV0YS5qc1wiO1xuXG4vKipcbiAqIEEgcnVsZSBzaGFwZSBhY2NlcHRlZCBieSB7QGxpbmsgb3JkZXJBY3RpdmF0aW9uc30uXG4gKlxuICogVGhpcyBpbnRlbnRpb25hbGx5IG1pcnJvcnMge0BsaW5rIFJ1bGVEZWZpbml0aW9ufSBmcm9tIGBidWlsZGVyLnRzYCBidXRcbiAqIHRhZ3Mgb24gdGhlIGBhZGRlZEF0YCBpbnNlcnRpb24gaW5kZXggYXNzaWduZWQgYnkge0BsaW5rIFNlc3Npb24uYWRkfS5cbiAqIEl0IGlzIGtlcHQgc3RydWN0dXJhbGx5IGluZGVwZW5kZW50IG9mIGBSdWxlRGVmaW5pdGlvbmAgc28gdGhlIGNvbmZsaWN0XG4gKiBtb2R1bGUgaGFzIG5vIGNpcmN1bGFyIGRlcGVuZGVuY3kgb24gdGhlIGJ1aWxkZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3JkZXJhYmxlUnVsZSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgc2FsaWVuY2U6IG51bWJlcjtcbiAgcmVhZG9ubHkgY29uZGl0aW9uczogcmVhZG9ubHkgdW5rbm93bltdO1xuICByZWFkb25seSBoYW5kbGVyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFkZGVkQXQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBIHBlbmRpbmcgcnVsZSBmaXJpbmc6IHRoZSBydWxlIHRoYXQgbWF0Y2hlZCBwbHVzIHRoZSBmdWxsLW1hdGNoIHRva2VuLlxuICpcbiAqIEFjdGl2YXRpb25zIGFyZSBvcGFxdWUgdG8gdGhlIG9yZGVyaW5nIGZ1bmN0aW9uIOKAlCBvbmx5IGZpZWxkcyBvbiBgcnVsZWBcbiAqIGFyZSBpbnNwZWN0ZWQuIFRoZSBgdG9rZW5gIGlzIGNhcnJpZWQgdGhyb3VnaCBzbyB0aGUgYWdlbmRhIGNhbiBsYXRlclxuICogaW52b2tlIHRoZSBydWxlJ3MgaGFuZGxlciB3aXRoIHRoZSBjb3JyZWN0IGJpbmRpbmdzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjdGl2YXRpb24ge1xuICByZWFkb25seSBydWxlOiBPcmRlcmFibGVSdWxlO1xuICByZWFkb25seSB0b2tlbjogVG9rZW47XG59XG5cbi8qKlxuICogUmV0dXJuIGEgbmV3IGFycmF5IG9mIGFjdGl2YXRpb25zIGluIGZpcmluZyBvcmRlci5cbiAqXG4gKiBQdXJlOyBpbnB1dCBpcyBub3QgbXV0YXRlZC4gU2VlIG1vZHVsZS1sZXZlbCBkb2MgZm9yIHRoZSB0aHJlZSBvcmRlcmluZ1xuICoga2V5cy4gSW1wbGVtZW50ZWQgdmlhIGEgc2luZ2xlIGBBcnJheSNzb3J0YCB3aXRoIGEgbGV4aWNvZ3JhcGhpY1xuICogY29tcGFyYXRvciDigJQgYEFycmF5I3NvcnRgIGluIFY4L0pTQyBpcyBndWFyYW50ZWVkIHN0YWJsZSBzaW5jZSBFUzIwMTksXG4gKiBidXQgdGhpcyBjb21wYXJhdG9yIGFscmVhZHkgeWllbGRzIGEgdG90YWwgb3JkZXIgc28gc3RhYmlsaXR5IGlzXG4gKiByZWR1bmRhbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcmRlckFjdGl2YXRpb25zKFxuICBhY3RpdmF0aW9uczogcmVhZG9ubHkgQWN0aXZhdGlvbltdLFxuKTogQWN0aXZhdGlvbltdIHtcbiAgcmV0dXJuIFsuLi5hY3RpdmF0aW9uc10uc29ydCgoYSwgYikgPT4ge1xuICAgIC8vIDEuIFNhbGllbmNlIGRlc2NlbmRpbmcgKGhpZ2hlciBzYWxpZW5jZSBzb3J0cyBlYXJsaWVyKS5cbiAgICBpZiAoYi5ydWxlLnNhbGllbmNlICE9PSBhLnJ1bGUuc2FsaWVuY2UpIHtcbiAgICAgIHJldHVybiBiLnJ1bGUuc2FsaWVuY2UgLSBhLnJ1bGUuc2FsaWVuY2U7XG4gICAgfVxuICAgIC8vIDIuIFNwZWNpZmljaXR5IChudW1iZXIgb2YgTEhTIGNvbmRpdGlvbnMpIGRlc2NlbmRpbmcuXG4gICAgY29uc3Qgc3BlY0EgPSBhLnJ1bGUuY29uZGl0aW9ucy5sZW5ndGg7XG4gICAgY29uc3Qgc3BlY0IgPSBiLnJ1bGUuY29uZGl0aW9ucy5sZW5ndGg7XG4gICAgaWYgKHNwZWNCICE9PSBzcGVjQSkge1xuICAgICAgcmV0dXJuIHNwZWNCIC0gc3BlY0E7XG4gICAgfVxuICAgIC8vIDMuIEluc2VydGlvbiBvcmRlciBhc2NlbmRpbmcgKGVhcmxpZXItcmVnaXN0ZXJlZCBydWxlIHdpbnMpLlxuICAgIHJldHVybiBhLnJ1bGUuYWRkZWRBdCAtIGIucnVsZS5hZGRlZEF0O1xuICB9KTtcbn1cbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9yZXRlL2Rpc3QvY29uZmxpY3QuanMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/b3a2c20e27082adb17db9af4c128a010accfd8a3 b/7xOfJqsDU787fe61oSCq1/web/b3a2c20e27082adb17db9af4c128a010accfd8a3 deleted file mode 100644 index d92dfc4..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/b3a2c20e27082adb17db9af4c128a010accfd8a3 +++ /dev/null @@ -1,109 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "getCastlingMoves", { enumerable: true, configurable: true, get(){ try { return getCastlingMoves } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "applyCastlingMove", { enumerable: true, configurable: true, get(){ try { return applyCastlingMove } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/schema.ts", {"importedNames":["oppositeColor"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/rules/board-queries.ts", {"importedNames":["getPiecePosition","getPieceColor","isPieceAt","getPieceAt"]}); - - - - - -const neverAttacked = () => false; -const CASTLING_CONFIGS = { - white: { - kingside: { - kingFrom: 4, - kingTo: 6, - rookFrom: 7, - rookTo: 5, - between: [5, 6], - kingTransit: [5, 6] - }, - queenside: { - kingFrom: 4, - kingTo: 2, - rookFrom: 0, - rookTo: 3, - between: [1, 2, 3], - kingTransit: [3, 2] - } - }, - black: { - kingside: { - kingFrom: 60, - kingTo: 62, - rookFrom: 63, - rookTo: 61, - between: [61, 62], - kingTransit: [61, 62] - }, - queenside: { - kingFrom: 60, - kingTo: 58, - rookFrom: 56, - rookTo: 59, - between: [57, 58, 59], - kingTransit: [59, 58] - } - } -}; -function getCastlingMoves(session, kingId, isSquareAttacked = neverAttacked) { - const from = (0,__vite_ssr_import_1__.getPiecePosition)(session, kingId); - const color = (0,__vite_ssr_import_1__.getPieceColor)(session, kingId); - if (from === null || color === null) return []; - if (session.get(kingId, "HasMoved") !== false) return []; - const configs = CASTLING_CONFIGS[color]; - const enemyColor = (0,__vite_ssr_import_0__.oppositeColor)(color); - const moves = []; - const entries = [ - ["kingside", configs.kingside], - ["queenside", configs.queenside] - ]; - for (const [side, cfg] of entries) { - if (from !== cfg.kingFrom) continue; - const rookId = (0,__vite_ssr_import_1__.getPieceAt)(session, cfg.rookFrom); - if (rookId === null) continue; - const rookType = session.get(rookId, "PieceType"); - const rookColor = session.get(rookId, "Color"); - if (rookType !== "rook" || rookColor !== color) continue; - if (session.get(rookId, "HasMoved") !== false) continue; - let blocked = false; - for (const sq of cfg.between) { - if ((0,__vite_ssr_import_1__.isPieceAt)(session, sq)) { - blocked = true; - break; - } - }; - if (blocked) continue; - if (isSquareAttacked(session, from, enemyColor)) continue; - let passesAttackedSquare = false; - for (const sq of cfg.kingTransit) { - if (isSquareAttacked(session, sq, enemyColor)) { - passesAttackedSquare = true; - break; - } - }; - if (passesAttackedSquare) continue; - moves.push({ - pieceId: kingId, - from: cfg.kingFrom, - to: cfg.kingTo, - isCapture: false, - isCastling: true, - rookFrom: cfg.rookFrom, - rookTo: cfg.rookTo, - side - }); - }; - return moves; -}; -function applyCastlingMove(session, move) { - const rookId = (0,__vite_ssr_import_1__.getPieceAt)(session, move.rookFrom); - if (rookId === null) return; - session.insert(move.pieceId, "Position", move.to); - session.insert(move.pieceId, "HasMoved", true); - session.insert(rookId, "Position", move.rookTo); - session.insert(rookId, "HasMoved", true); -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SUFBSTtBQUFBLE1BQ1o7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNIO0FBRUEsU0FBTztBQUNUO0FBTU8sU0FBUyxrQkFBa0IsU0FBa0IsTUFBMEI7QUFDNUUsUUFBTSxZQUFTLGtDQUFXLFNBQVMsS0FBSyxRQUFRO0FBQ2hELE1BQUksV0FBVyxLQUFNO0FBR3JCLFVBQVEsT0FBTyxLQUFLLFNBQVMsWUFBWSxLQUFLLEVBQUU7QUFDaEQsVUFBUSxPQUFPLEtBQUssU0FBUyxZQUFZLElBQUk7QUFHN0MsVUFBUSxPQUFPLFFBQVEsWUFBWSxLQUFLLE1BQU07QUFDOUMsVUFBUSxPQUFPLFFBQVEsWUFBWSxJQUFJO0FBQ3pDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJjYXN0bGluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENhc3RsaW5nIHJ1bGVzIGZvciBAcGFyYXR5cGUvY2hlc3MuXG4gKlxuICogRklERSBjYXN0bGluZyBjb25kaXRpb25zOlxuICogICAxLiBLaW5nIGhhcyBOT1QgbW92ZWQgKEhhc01vdmVkID09PSBmYWxzZSlcbiAqICAgMi4gVGhlIHJlbGV2YW50IFJvb2sgaGFzIE5PVCBtb3ZlZCAoSGFzTW92ZWQgPT09IGZhbHNlKVxuICogICAzLiBObyBwaWVjZXMgYmV0d2VlbiBraW5nIGFuZCByb29rXG4gKiAgIDQuIEtpbmcgaXMgTk9UIGN1cnJlbnRseSBpbiBjaGVja1xuICogICA1LiBLaW5nIGRvZXMgTk9UIHBhc3MgdGhyb3VnaCBhbiBhdHRhY2tlZCBzcXVhcmVcbiAqICAgNi4gS2luZyBkb2VzIE5PVCBsYW5kIG9uIGFuIGF0dGFja2VkIHNxdWFyZVxuICpcbiAqIENvbmRpdGlvbnMgNC02IHJlcXVpcmUgY2hlY2stZGV0ZWN0aW9uIChQMi4xOCkuIFdlIGFjY2VwdCBhbiBgaXNTcXVhcmVBdHRhY2tlZGBcbiAqIGNhbGxiYWNrIHNvIHRoYXQgdGhpcyBtb2R1bGUgY2FuIGJlIHdpcmVkIHVwIG9uY2UgY2hlY2stZGV0ZWN0aW9uIGxhbmRzLiBCeVxuICogZGVmYXVsdCB0aGUgY2FsbGJhY2sgdHJlYXRzIGFsbCBzcXVhcmVzIGFzIHVuLWF0dGFja2VkLCBzbyBQaGFzZSAyIHByZS1pbnRlZ3JhdGlvblxuICogb25seSBlbmZvcmNlcyBjb25kaXRpb25zIDEtMy5cbiAqL1xuaW1wb3J0IHR5cGUgeyBTZXNzaW9uLCBFbnRpdHlJZCB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuaW1wb3J0IHR5cGUgeyBQaWVjZUNvbG9yLCBTcXVhcmUgfSBmcm9tIFwiLi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgeyBvcHBvc2l0ZUNvbG9yIH0gZnJvbSBcIi4uL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBMZWdhbE1vdmUgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuaW1wb3J0IHtcbiAgZ2V0UGllY2VQb3NpdGlvbixcbiAgZ2V0UGllY2VDb2xvcixcbiAgaXNQaWVjZUF0LFxuICBnZXRQaWVjZUF0LFxufSBmcm9tIFwiLi9ib2FyZC1xdWVyaWVzLmpzXCI7XG5cbi8qKiBDYWxsYmFjayB0aGF0IHJlcG9ydHMgd2hldGhlciBgc3F1YXJlYCBpcyBhdHRhY2tlZCBieSBgYnlDb2xvcmAuICovXG5leHBvcnQgdHlwZSBJc1NxdWFyZUF0dGFja2VkID0gKFxuICBzZXNzaW9uOiBTZXNzaW9uLFxuICBzcXVhcmU6IFNxdWFyZSxcbiAgYnlDb2xvcjogUGllY2VDb2xvcixcbikgPT4gYm9vbGVhbjtcblxuLyoqIERlZmF1bHQ6IG5vIHNxdWFyZXMgZXZlciBhdHRhY2tlZCAodXNlZCB1bnRpbCBQMi4xOCBpbnRlZ3JhdGVzIGNoZWNrIGRldGVjdGlvbikuICovXG5jb25zdCBuZXZlckF0dGFja2VkOiBJc1NxdWFyZUF0dGFja2VkID0gKCkgPT4gZmFsc2U7XG5cbmludGVyZmFjZSBDYXN0bGluZ0NvbmZpZyB7XG4gIC8qKiBLaW5nJ3Mgc3RhcnRpbmcgc3F1YXJlIChtdXN0IG1hdGNoIGN1cnJlbnQga2luZyBwb3NpdGlvbikuICovXG4gIHJlYWRvbmx5IGtpbmdGcm9tOiBTcXVhcmU7XG4gIC8qKiBLaW5nJ3MgZGVzdGluYXRpb24gc3F1YXJlLiAqL1xuICByZWFkb25seSBraW5nVG86IFNxdWFyZTtcbiAgLyoqIFJvb2sncyBzdGFydGluZyBzcXVhcmUuICovXG4gIHJlYWRvbmx5IHJvb2tGcm9tOiBTcXVhcmU7XG4gIC8qKiBSb29rJ3MgZGVzdGluYXRpb24gc3F1YXJlLiAqL1xuICByZWFkb25seSByb29rVG86IFNxdWFyZTtcbiAgLyoqIFNxdWFyZXMgYmV0d2VlbiBraW5nIGFuZCByb29rIHRoYXQgbXVzdCBiZSBlbXB0eS4gKi9cbiAgcmVhZG9ubHkgYmV0d2VlbjogUmVhZG9ubHlBcnJheTxTcXVhcmU+O1xuICAvKiogU3F1YXJlcyB0aGUga2luZyBwYXNzZXMgdGhyb3VnaCAoaW5jbHVkaW5nIGRlc3RpbmF0aW9uKSDigJQgbXVzdCBub3QgYmUgYXR0YWNrZWQuICovXG4gIHJlYWRvbmx5IGtpbmdUcmFuc2l0OiBSZWFkb25seUFycmF5PFNxdWFyZT47XG59XG5cbmNvbnN0IENBU1RMSU5HX0NPTkZJR1M6IFJlY29yZDxcbiAgUGllY2VDb2xvcixcbiAgeyByZWFkb25seSBraW5nc2lkZTogQ2FzdGxpbmdDb25maWc7IHJlYWRvbmx5IHF1ZWVuc2lkZTogQ2FzdGxpbmdDb25maWcgfVxuPiA9IHtcbiAgd2hpdGU6IHtcbiAgICBraW5nc2lkZToge1xuICAgICAga2luZ0Zyb206IDQsIGtpbmdUbzogNiwgcm9va0Zyb206IDcsIHJvb2tUbzogNSxcbiAgICAgIGJldHdlZW46IFs1LCA2XSwga2luZ1RyYW5zaXQ6IFs1LCA2XSxcbiAgICB9LFxuICAgIHF1ZWVuc2lkZToge1xuICAgICAga2luZ0Zyb206IDQsIGtpbmdUbzogMiwgcm9va0Zyb206IDAsIHJvb2tUbzogMyxcbiAgICAgIGJldHdlZW46IFsxLCAyLCAzXSwga2luZ1RyYW5zaXQ6IFszLCAyXSxcbiAgICB9LFxuICB9LFxuICBibGFjazoge1xuICAgIGtpbmdzaWRlOiB7XG4gICAgICBraW5nRnJvbTogNjAsIGtpbmdUbzogNjIsIHJvb2tGcm9tOiA2Mywgcm9va1RvOiA2MSxcbiAgICAgIGJldHdlZW46IFs2MSwgNjJdLCBraW5nVHJhbnNpdDogWzYxLCA2Ml0sXG4gICAgfSxcbiAgICBxdWVlbnNpZGU6IHtcbiAgICAgIGtpbmdGcm9tOiA2MCwga2luZ1RvOiA1OCwgcm9va0Zyb206IDU2LCByb29rVG86IDU5LFxuICAgICAgYmV0d2VlbjogWzU3LCA1OCwgNTldLCBraW5nVHJhbnNpdDogWzU5LCA1OF0sXG4gICAgfSxcbiAgfSxcbn07XG5cbi8qKiBBIGNhc3RsaW5nIG1vdmUg4oCUIGV4dGVuZHMgTGVnYWxNb3ZlIHdpdGggcm9vay1tb3ZlIG1ldGFkYXRhLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXN0bGluZ01vdmUgZXh0ZW5kcyBMZWdhbE1vdmUge1xuICByZWFkb25seSBpc0Nhc3RsaW5nOiB0cnVlO1xuICByZWFkb25seSByb29rRnJvbTogU3F1YXJlO1xuICByZWFkb25seSByb29rVG86IFNxdWFyZTtcbiAgcmVhZG9ubHkgc2lkZTogXCJraW5nc2lkZVwiIHwgXCJxdWVlbnNpZGVcIjtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYWxsIGN1cnJlbnRseS1sZWdhbCBjYXN0bGluZyBtb3ZlcyBmb3IgYGtpbmdJZGAgKDAsIDEgb3IgMikuXG4gKlxuICogRW5mb3JjZXMgRklERSBjb25kaXRpb25zIDEtMyB1bmNvbmRpdGlvbmFsbHkuIENvbmRpdGlvbnMgNC02IGFyZSBvbmx5IGVuZm9yY2VkXG4gKiB3aGVuIGEgbm9uLWRlZmF1bHQgYGlzU3F1YXJlQXR0YWNrZWRgIGNhbGxiYWNrIGlzIHN1cHBsaWVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FzdGxpbmdNb3ZlcyhcbiAgc2Vzc2lvbjogU2Vzc2lvbixcbiAga2luZ0lkOiBFbnRpdHlJZCxcbiAgaXNTcXVhcmVBdHRhY2tlZDogSXNTcXVhcmVBdHRhY2tlZCA9IG5ldmVyQXR0YWNrZWQsXG4pOiBDYXN0bGluZ01vdmVbXSB7XG4gIGNvbnN0IGZyb20gPSBnZXRQaWVjZVBvc2l0aW9uKHNlc3Npb24sIGtpbmdJZCk7XG4gIGNvbnN0IGNvbG9yID0gZ2V0UGllY2VDb2xvcihzZXNzaW9uLCBraW5nSWQpO1xuICBpZiAoZnJvbSA9PT0gbnVsbCB8fCBjb2xvciA9PT0gbnVsbCkgcmV0dXJuIFtdO1xuXG4gIC8vIENvbmRpdGlvbiAxOiBLaW5nIG11c3Qgbm90IGhhdmUgbW92ZWQuXG4gIGlmIChzZXNzaW9uLmdldChraW5nSWQsIFwiSGFzTW92ZWRcIikgIT09IGZhbHNlKSByZXR1cm4gW107XG5cbiAgY29uc3QgY29uZmlncyA9IENBU1RMSU5HX0NPTkZJR1NbY29sb3JdO1xuICBjb25zdCBlbmVteUNvbG9yID0gb3Bwb3NpdGVDb2xvcihjb2xvcik7XG4gIGNvbnN0IG1vdmVzOiBDYXN0bGluZ01vdmVbXSA9IFtdO1xuXG4gIGNvbnN0IGVudHJpZXM6IFJlYWRvbmx5QXJyYXk8cmVhZG9ubHkgW1wia2luZ3NpZGVcIiB8IFwicXVlZW5zaWRlXCIsIENhc3RsaW5nQ29uZmlnXT4gPSBbXG4gICAgW1wia2luZ3NpZGVcIiwgY29uZmlncy5raW5nc2lkZV0sXG4gICAgW1wicXVlZW5zaWRlXCIsIGNvbmZpZ3MucXVlZW5zaWRlXSxcbiAgXTtcblxuICBmb3IgKGNvbnN0IFtzaWRlLCBjZmddIG9mIGVudHJpZXMpIHtcbiAgICAvLyBLaW5nIG11c3QgY3VycmVudGx5IHN0YW5kIG9uIHRoZSBjYXN0bGluZyBvcmlnaW4uXG4gICAgaWYgKGZyb20gIT09IGNmZy5raW5nRnJvbSkgY29udGludWU7XG5cbiAgICAvLyBDb25kaXRpb24gMmE6IFJvb2sgbXVzdCBleGlzdCBhdCByb29rRnJvbS5cbiAgICBjb25zdCByb29rSWQgPSBnZXRQaWVjZUF0KHNlc3Npb24sIGNmZy5yb29rRnJvbSk7XG4gICAgaWYgKHJvb2tJZCA9PT0gbnVsbCkgY29udGludWU7XG5cbiAgICAvLyBWZXJpZnkgdGhlIHBpZWNlIGF0IHJvb2tGcm9tIGFjdHVhbGx5IGlzIGEgZnJpZW5kbHkgcm9vay5cbiAgICBjb25zdCByb29rVHlwZSA9IHNlc3Npb24uZ2V0KHJvb2tJZCwgXCJQaWVjZVR5cGVcIik7XG4gICAgY29uc3Qgcm9va0NvbG9yID0gc2Vzc2lvbi5nZXQocm9va0lkLCBcIkNvbG9yXCIpO1xuICAgIGlmIChyb29rVHlwZSAhPT0gXCJyb29rXCIgfHwgcm9va0NvbG9yICE9PSBjb2xvcikgY29udGludWU7XG5cbiAgICAvLyBDb25kaXRpb24gMmI6IFJvb2sgbXVzdCBub3QgaGF2ZSBtb3ZlZC5cbiAgICBpZiAoc2Vzc2lvbi5nZXQocm9va0lkLCBcIkhhc01vdmVkXCIpICE9PSBmYWxzZSkgY29udGludWU7XG5cbiAgICAvLyBDb25kaXRpb24gMzogQWxsIHNxdWFyZXMgYmV0d2VlbiBraW5nIGFuZCByb29rIG11c3QgYmUgZW1wdHkuXG4gICAgbGV0IGJsb2NrZWQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHNxIG9mIGNmZy5iZXR3ZWVuKSB7XG4gICAgICBpZiAoaXNQaWVjZUF0KHNlc3Npb24sIHNxKSkgeyBibG9ja2VkID0gdHJ1ZTsgYnJlYWs7IH1cbiAgICB9XG4gICAgaWYgKGJsb2NrZWQpIGNvbnRpbnVlO1xuXG4gICAgLy8gQ29uZGl0aW9uIDQ6IEtpbmcgbXVzdCBub3QgY3VycmVudGx5IGJlIGluIGNoZWNrLlxuICAgIGlmIChpc1NxdWFyZUF0dGFja2VkKHNlc3Npb24sIGZyb20sIGVuZW15Q29sb3IpKSBjb250aW51ZTtcblxuICAgIC8vIENvbmRpdGlvbnMgNSAmIDY6IEV2ZXJ5IHNxdWFyZSB0aGUga2luZyBwYXNzZXMgdGhyb3VnaCAoYW5kIGxhbmRzIG9uKSBtdXN0IGJlIHNhZmUuXG4gICAgbGV0IHBhc3Nlc0F0dGFja2VkU3F1YXJlID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBzcSBvZiBjZmcua2luZ1RyYW5zaXQpIHtcbiAgICAgIGlmIChpc1NxdWFyZUF0dGFja2VkKHNlc3Npb24sIHNxLCBlbmVteUNvbG9yKSkge1xuICAgICAgICBwYXNzZXNBdHRhY2tlZFNxdWFyZSA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocGFzc2VzQXR0YWNrZWRTcXVhcmUpIGNvbnRpbnVlO1xuXG4gICAgbW92ZXMucHVzaCh7XG4gICAgICBwaWVjZUlkOiBraW5nSWQsXG4gICAgICBmcm9tOiBjZmcua2luZ0Zyb20sXG4gICAgICB0bzogY2ZnLmtpbmdUbyxcbiAgICAgIGlzQ2FwdHVyZTogZmFsc2UsXG4gICAgICBpc0Nhc3RsaW5nOiB0cnVlLFxuICAgICAgcm9va0Zyb206IGNmZy5yb29rRnJvbSxcbiAgICAgIHJvb2tUbzogY2ZnLnJvb2tUbyxcbiAgICAgIHNpZGUsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbW92ZXM7XG59XG5cbi8qKlxuICogQXBwbHkgYSBjYXN0bGluZyBtb3ZlOiBtb3ZlIGJvdGgga2luZyBhbmQgcm9vaywgYW5kIG1hcmsgYm90aCBhcyBoYXZpbmcgbW92ZWQuXG4gKiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHBhc3NpbmcgYSBgQ2FzdGxpbmdNb3ZlYCByZXR1cm5lZCBieSBgZ2V0Q2FzdGxpbmdNb3Zlc2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUNhc3RsaW5nTW92ZShzZXNzaW9uOiBTZXNzaW9uLCBtb3ZlOiBDYXN0bGluZ01vdmUpOiB2b2lkIHtcbiAgY29uc3Qgcm9va0lkID0gZ2V0UGllY2VBdChzZXNzaW9uLCBtb3ZlLnJvb2tGcm9tKTtcbiAgaWYgKHJvb2tJZCA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gIC8vIE1vdmUga2luZy5cbiAgc2Vzc2lvbi5pbnNlcnQobW92ZS5waWVjZUlkLCBcIlBvc2l0aW9uXCIsIG1vdmUudG8pO1xuICBzZXNzaW9uLmluc2VydChtb3ZlLnBpZWNlSWQsIFwiSGFzTW92ZWRcIiwgdHJ1ZSk7XG5cbiAgLy8gTW92ZSByb29rLlxuICBzZXNzaW9uLmluc2VydChyb29rSWQsIFwiUG9zaXRpb25cIiwgbW92ZS5yb29rVG8pO1xuICBzZXNzaW9uLmluc2VydChyb29rSWQsIFwiSGFzTW92ZWRcIiwgdHJ1ZSk7XG59XG4iXSwiZmlsZSI6Ii9zcmMvcnVsZXMvY2FzdGxpbmcudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/b60bc9eae8425a9fca19f536c7f2dc7b4af54bc0 b/7xOfJqsDU787fe61oSCq1/web/b60bc9eae8425a9fca19f536c7f2dc7b4af54bc0 deleted file mode 100644 index 0125a56..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/b60bc9eae8425a9fca19f536c7f2dc7b4af54bc0 +++ /dev/null @@ -1,117 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "buildChess960Layout", { enumerable: true, configurable: true, get(){ try { return buildChess960Layout } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "CHESS960_SHIM", { enumerable: true, configurable: true, get(){ try { return CHESS960_SHIM } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/layouts/registry.ts", {"importedNames":["LAYOUT_REGISTRY"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["squareOf"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/layouts/_helpers.ts", {"importedNames":["fideSideOf"]}); -const CHESS960_COUNT = 960; -function chess960BackRank(id) { - const n = (id % CHESS960_COUNT + CHESS960_COUNT) % CHESS960_COUNT; - const back = new Array(8).fill(null); - const lightBishopFile = n % 4 * 2 + 1; - back[lightBishopFile] = "bishop"; - const darkBishopFile = Math.floor(n / 4) % 4 * 2; - back[darkBishopFile] = "bishop"; - const queenIdx = Math.floor(n / 16) % 6; - let queenPlaced = false; - for (let file = 0, emptyCount = 0; file < 8; file++) { - if (back[file] === null) { - if (emptyCount === queenIdx) { - back[file] = "queen"; - queenPlaced = true; - break; - }; - emptyCount++; - } - }; - if (!queenPlaced) { - throw new Error(`Chess960: failed to place queen for id=${id}`); - }; - const knightPatterns = [ - [0, 1], - [0, 2], - [0, 3], - [0, 4], - [1, 2], - [1, 3], - [1, 4], - [2, 3], - [2, 4], - [3, 4] - ]; - const patternIdx = Math.floor(n / 96) % 10; - const pattern = knightPatterns[patternIdx]; - const empties = []; - for (let file = 0; file < 8; file++) { - if (back[file] === null) empties.push(file); - }; - if (empties.length !== 5) { - throw new Error( - `Chess960: expected 5 empty files for knight placement, got ${empties.length}` - ); - }; - back[empties[pattern[0]]] = "knight"; - back[empties[pattern[1]]] = "knight"; - const finalEmpties = []; - for (let file = 0; file < 8; file++) { - if (back[file] === null) finalEmpties.push(file); - }; - if (finalEmpties.length !== 3) { - throw new Error( - `Chess960: expected 3 empty files for R-K-R placement, got ${finalEmpties.length}` - ); - }; - back[finalEmpties[0]] = "rook"; - back[finalEmpties[1]] = "king"; - back[finalEmpties[2]] = "rook"; - return back; -} -function buildChess960Layout(id) { - const whiteBack = chess960BackRank(id); - const pieces = []; - for (let file = 0; file < 8; file++) { - pieces.push({ - type: whiteBack[file], - color: "white", - square: (0,__vite_ssr_import_1__.squareOf)(file, 0) - }); - pieces.push({ - type: "pawn", - color: "white", - square: (0,__vite_ssr_import_1__.squareOf)(file, 1) - }); - }; - for (let file = 0; file < 8; file++) { - pieces.push({ - type: whiteBack[file], - color: "black", - square: (0,__vite_ssr_import_1__.squareOf)(file, 7) - }); - pieces.push({ - type: "pawn", - color: "black", - square: (0,__vite_ssr_import_1__.squareOf)(file, 6) - }); - }; - const wrappedId = (id % CHESS960_COUNT + CHESS960_COUNT) % CHESS960_COUNT; - return { - id: "chess960", - name: `Chess960 (#${wrappedId})`, - description: "Fischer Random Chess. Back rank randomized with bishops on opposite colors and king between the rooks. Position number shown in the name.", - pieces, - suggestedPresets: [], - source: "premade" - }; -}; -const CHESS960_SHIM = { - id: "chess960", - name: "Chess960 (Fischer Random)", - description: "Fischer Random Chess. Randomized back rank. Selecting this layout generates a new random position on each pick.", - // Default display uses the FIDE back rank (position 518). - pieces: [...(0,__vite_ssr_import_2__.fideSideOf)("white"), ...(0,__vite_ssr_import_2__.fideSideOf)("black")], - suggestedPresets: [], - source: "premade" -}; -__vite_ssr_import_0__.LAYOUT_REGISTRY.register(CHESS960_SHIM); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Z0NBQVMsTUFBTSxDQUFDO0FBQUEsSUFDMUIsQ0FBQztBQUFBLEVBQ0g7QUFHQSxXQUFTLE9BQU8sR0FBRyxPQUFPLEdBQUcsUUFBUTtBQUNuQyxXQUFPLEtBQUs7QUFBQSxNQUNWLE1BQU0sVUFBVSxJQUFJO0FBQUEsTUFDcEIsT0FBTztBQUFBLE1BQ1AsV0FBUSxnQ0FBUyxNQUFNLENBQUM7QUFBQSxJQUMxQixDQUFDO0FBQ0QsV0FBTyxLQUFLO0FBQUEsTUFDVixNQUFNO0FBQUEsTUFDTixPQUFPO0FBQUEsTUFDUCxXQUFRLGdDQUFTLE1BQU0sQ0FBQztBQUFBLElBQzFCLENBQUM7QUFBQSxFQUNIO0FBRUEsUUFBTSxhQUFjLEtBQUssaUJBQWtCLGtCQUFrQjtBQUM3RCxTQUFPO0FBQUEsSUFDTCxJQUFJO0FBQUEsSUFDSixNQUFNLGNBQWMsU0FBUztBQUFBLElBQzdCLGFBQ0U7QUFBQSxJQUNGO0FBQUEsSUFDQSxrQkFBa0IsQ0FBQztBQUFBLElBQ25CLFFBQVE7QUFBQSxFQUNWO0FBQ0Y7QUFTTyxNQUFNLGdCQUFnQztBQUFBLEVBQzNDLElBQUk7QUFBQSxFQUNKLE1BQU07QUFBQSxFQUNOLGFBQ0U7QUFBQTtBQUFBLEVBRUYsUUFBUSxDQUFDLE1BQUcsa0NBQVcsT0FBTyxHQUFHLE1BQUcsa0NBQVcsT0FBTyxDQUFDO0FBQUEsRUFDdkQsa0JBQWtCLENBQUM7QUFBQSxFQUNuQixRQUFRO0FBQ1Y7QUFFQSxzQ0FBZ0IsU0FBUyxhQUFhIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJjaGVzczk2MC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExheW91dDogQ2hlc3M5NjAgKEZpc2NoZXIgUmFuZG9tIENoZXNzKS5cbiAqXG4gKiBUaGUgYmFjayByYW5rIGlzIHJhbmRvbWl6ZWQgc3ViamVjdCB0byB0aHJlZSBjb25zdHJhaW50czpcbiAqXG4gKiAgIDEuIEJpc2hvcHMgb24gb3Bwb3NpdGUtY29sb3Igc3F1YXJlcy5cbiAqICAgMi4gVGhlIGtpbmcgc2l0cyBCRVRXRUVOIHRoZSB0d28gcm9va3MgKHNvIGNhc3RsaW5nIGRpcmVjdGlvblxuICogICAgICBpcyB1bmFtYmlndW91cykuXG4gKiAgIDMuIEJsYWNrJ3MgYmFjayByYW5rIG1pcnJvcnMgd2hpdGUncy5cbiAqXG4gKiBUaGVyZSBhcmUgZXhhY3RseSA5NjAgbGVnYWwgc3RhcnRpbmcgcG9zaXRpb25zIChoZW5jZSB0aGUgbmFtZSkuXG4gKiBQb3NpdGlvbiA1MTggaGFwcGVucyB0byBiZSBzdGFuZGFyZCBGSURFLlxuICpcbiAqIFRoaXMgZmlsZSBpcyB1bnVzdWFsIGFtb25nIGxheW91dHM6IGBidWlsZENoZXNzOTYwTGF5b3V0KHNlZWQpYCBpc1xuICogYSBGQUNUT1JZIHRoYXQgcHJvZHVjZXMgYSBmcmVzaCBgU3RhcnRpbmdMYXlvdXRgIGVhY2ggY2FsbC4gVGhlXG4gKiB2YWx1ZSByZWdpc3RlcmVkIGluIGBMQVlPVVRfUkVHSVNUUllgIGlzIGEgcGxhY2Vob2xkZXIgc2hpbSDigJRcbiAqIHNlbGVjdGluZyBpdCBpbiB0aGUgTGF5b3V0UGlja2VyIHRyaWdnZXJzIGEgcmFuZG9tIHNlZWQgc2VsZWN0aW9uXG4gKiBhbmQgbWF0ZXJpYWxpemF0aW9uIG9mIHRoZSByZWFsIGxheW91dCBvbi10aGUtZmx5LiBUaGUgc2hpbSdzXG4gKiBgcGllY2VzYCBmaWVsZCBtYXRjaGVzIGEgZGVmYXVsdCBzZWVkICg1MTggPSBGSURFKSBzbyBjb2RlIHRoYXRcbiAqIGRvZXNuJ3Qga25vdyBhYm91dCB0aGUgc2hpbSB0cmVhdG1lbnQgc3RpbGwgZ2V0cyBhIHBsYXlhYmxlIHNldHVwLlxuICpcbiAqICMjIFNlZWQg4oaSIHBvc2l0aW9uXG4gKlxuICogV2UgdXNlIHRoZSBzdGFuZGFyZCBTY2hhcm5hZ2wgbnVtYmVyaW5nICgwLi45NTkpLiBQb3NpdGlvbiA1MTggaXNcbiAqIHRoZSBGSURFIHN0YXJ0aW5nIHBvc2l0aW9uLiBUaGUgc2VlZCBpcyBhbiBpbnRlZ2VyOyBwYXNzaW5nIGFcbiAqIHZhbHVlIG91dHNpZGUgWzAsIDk1OV0gd3JhcHMgdmlhIG1vZHVsbyBzbyBiYWQgaW5wdXRzIHN0aWxsXG4gKiBwcm9kdWNlIGEgdmFsaWQgbGF5b3V0LlxuICpcbiAqIFJlZmVyZW5jZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlzY2hlcl9yYW5kb21fY2hlc3NfbnVtYmVyaW5nX3NjaGVtZVxuICovXG5pbXBvcnQgdHlwZSB7IFN0YXJ0aW5nTGF5b3V0LCBQaWVjZVBsYWNlbWVudCB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBMQVlPVVRfUkVHSVNUUlkgfSBmcm9tIFwiLi9yZWdpc3RyeS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQaWVjZVR5cGUgfSBmcm9tIFwiLi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgeyBzcXVhcmVPZiB9IGZyb20gXCIuLi9jb29yZC5qc1wiO1xuaW1wb3J0IHsgZmlkZVNpZGVPZiB9IGZyb20gXCIuL19oZWxwZXJzLmpzXCI7XG5cbmNvbnN0IENIRVNTOTYwX0NPVU5UID0gOTYwO1xuXG4vKipcbiAqIEJ1aWxkIHRoZSA4LXBpZWNlIGJhY2sgcmFuayBmb3IgYSBDaGVzczk2MCBwb3NpdGlvbiBudW1iZXJlZCBgaWRgLlxuICpcbiAqIFVzZXMgUmVpbmhhcmQgU2NoYXJuYWdsJ3Mgc3RhbmRhcmQgbnVtYmVyaW5nIHNjaGVtZSAoaWQgMC4uOTU5LFxuICogaWQgNTE4ID0gRklERSkuIFJldHVybnMgYW4gOC1lbGVtZW50IGFycmF5IG9mIHBpZWNlIHR5cGVzIGF0XG4gKiBmaWxlcyBhLi5oLlxuICpcbiAqIFRoZSBhbGdvcml0aG06XG4gKiAgIDEuIGlkIG1vZCA0IOKGkiBsaWdodC1zcXVhcmUgYmlzaG9wIGZpbGUgcG9zaXRpb24gKGFtb25nIDQpLlxuICogICAyLiAoaWQgLyA0KSBtb2QgNCDihpIgZGFyay1zcXVhcmUgYmlzaG9wIGZpbGUgcG9zaXRpb24uXG4gKiAgIDMuIChpZCAvIDE2KSBtb2QgNiDihpIgcXVlZW4gZmlsZSBwb3NpdGlvbiAoYW1vbmcgNiByZW1haW5pbmcpLlxuICogICA0LiAoaWQgLyA5NikgbW9kIDEwIOKGkiBrbmlnaHQgcGxhY2VtZW50IHBhdHRlcm4gKHRoZSBOeCBudW1iZXIsXG4gKiAgICAgIHBpY2tpbmcgMiBvZiA1IHJlbWFpbmluZyBzcXVhcmVzKS5cbiAqICAgNS4gUmVtYWluaW5nIDMgc3F1YXJlcyBnZXQgcm9vay1raW5nLXJvb2sgaW4gdGhhdCBvcmRlci5cbiAqL1xuZnVuY3Rpb24gY2hlc3M5NjBCYWNrUmFuayhpZDogbnVtYmVyKTogUGllY2VUeXBlW10ge1xuICBjb25zdCBuID0gKChpZCAlIENIRVNTOTYwX0NPVU5UKSArIENIRVNTOTYwX0NPVU5UKSAlIENIRVNTOTYwX0NPVU5UO1xuXG4gIGNvbnN0IGJhY2s6IChQaWVjZVR5cGUgfCBudWxsKVtdID0gbmV3IEFycmF5KDgpLmZpbGwobnVsbCk7XG5cbiAgLy8gU3RlcCAxOiBiaXNob3Agb24gYSBsaWdodCBzcXVhcmUgKHNxdWFyZXMgMSwgMywgNSwgNyBpbmRleGVkXG4gIC8vIGZyb20gYT0wKS4gaWQgbW9kIDQgcGlja3Mgb25lIG9mIHRoZXNlLlxuICBjb25zdCBsaWdodEJpc2hvcEZpbGUgPSAobiAlIDQpICogMiArIDE7XG4gIGJhY2tbbGlnaHRCaXNob3BGaWxlXSA9IFwiYmlzaG9wXCI7XG5cbiAgLy8gU3RlcCAyOiBiaXNob3Agb24gYSBkYXJrIHNxdWFyZSAoc3F1YXJlcyAwLCAyLCA0LCA2KS5cbiAgY29uc3QgZGFya0Jpc2hvcEZpbGUgPSAoTWF0aC5mbG9vcihuIC8gNCkgJSA0KSAqIDI7XG4gIGJhY2tbZGFya0Jpc2hvcEZpbGVdID0gXCJiaXNob3BcIjtcblxuICAvLyBTdGVwIDM6IHF1ZWVuIOKAlCBvbmUgb2YgNiByZW1haW5pbmcgZW1wdHkgZmlsZXMuXG4gIGNvbnN0IHF1ZWVuSWR4ID0gTWF0aC5mbG9vcihuIC8gMTYpICUgNjtcbiAgbGV0IHF1ZWVuUGxhY2VkID0gZmFsc2U7XG4gIGZvciAobGV0IGZpbGUgPSAwLCBlbXB0eUNvdW50ID0gMDsgZmlsZSA8IDg7IGZpbGUrKykge1xuICAgIGlmIChiYWNrW2ZpbGVdID09PSBudWxsKSB7XG4gICAgICBpZiAoZW1wdHlDb3VudCA9PT0gcXVlZW5JZHgpIHtcbiAgICAgICAgYmFja1tmaWxlXSA9IFwicXVlZW5cIjtcbiAgICAgICAgcXVlZW5QbGFjZWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGVtcHR5Q291bnQrKztcbiAgICB9XG4gIH1cbiAgaWYgKCFxdWVlblBsYWNlZCkge1xuICAgIC8vIFVucmVhY2hhYmxlIHVuZGVyIHZhbGlkIGlucHV0LCBidXQga2VlcCBUUyBoYXBweS5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYENoZXNzOTYwOiBmYWlsZWQgdG8gcGxhY2UgcXVlZW4gZm9yIGlkPSR7aWR9YCk7XG4gIH1cblxuICAvLyBTdGVwIDQ6IGtuaWdodHMg4oCUIG9uZSBvZiAxMCBwYXR0ZXJucyBwbGFjaW5nIE4gYXQgMiBvZiA1XG4gIC8vIHJlbWFpbmluZyBwb3NpdGlvbnMuIFRhYmxlOiAoa25pZ2h0MV9vZmZzZXQsIGtuaWdodDJfb2Zmc2V0KVxuICAvLyB3aGVyZSBvZmZzZXRzIGluZGV4IGludG8gdGhlIGxpc3Qgb2Ygc3RpbGwtZW1wdHkgZmlsZXMuXG4gIGNvbnN0IGtuaWdodFBhdHRlcm5zOiBSZWFkb25seUFycmF5PHJlYWRvbmx5IFtudW1iZXIsIG51bWJlcl0+ID0gW1xuICAgIFswLCAxXSxcbiAgICBbMCwgMl0sXG4gICAgWzAsIDNdLFxuICAgIFswLCA0XSxcbiAgICBbMSwgMl0sXG4gICAgWzEsIDNdLFxuICAgIFsxLCA0XSxcbiAgICBbMiwgM10sXG4gICAgWzIsIDRdLFxuICAgIFszLCA0XSxcbiAgXTtcbiAgY29uc3QgcGF0dGVybklkeCA9IE1hdGguZmxvb3IobiAvIDk2KSAlIDEwO1xuICBjb25zdCBwYXR0ZXJuID0ga25pZ2h0UGF0dGVybnNbcGF0dGVybklkeF0hO1xuXG4gIC8vIEVudW1lcmF0ZSBlbXB0eSBmaWxlcyBsZWZ0LXRvLXJpZ2h0LlxuICBjb25zdCBlbXB0aWVzOiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBmaWxlID0gMDsgZmlsZSA8IDg7IGZpbGUrKykge1xuICAgIGlmIChiYWNrW2ZpbGVdID09PSBudWxsKSBlbXB0aWVzLnB1c2goZmlsZSk7XG4gIH1cbiAgaWYgKGVtcHRpZXMubGVuZ3RoICE9PSA1KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYENoZXNzOTYwOiBleHBlY3RlZCA1IGVtcHR5IGZpbGVzIGZvciBrbmlnaHQgcGxhY2VtZW50LCBnb3QgJHtlbXB0aWVzLmxlbmd0aH1gLFxuICAgICk7XG4gIH1cbiAgYmFja1tlbXB0aWVzW3BhdHRlcm5bMF1dIV0gPSBcImtuaWdodFwiO1xuICBiYWNrW2VtcHRpZXNbcGF0dGVyblsxXV0hXSA9IFwia25pZ2h0XCI7XG5cbiAgLy8gU3RlcCA1OiByZW1haW5pbmcgMyBlbXB0eSBmaWxlcyBnZXQgcm9vay1raW5nLXJvb2sgaW4gb3JkZXIuXG4gIGNvbnN0IGZpbmFsRW1wdGllczogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgZmlsZSA9IDA7IGZpbGUgPCA4OyBmaWxlKyspIHtcbiAgICBpZiAoYmFja1tmaWxlXSA9PT0gbnVsbCkgZmluYWxFbXB0aWVzLnB1c2goZmlsZSk7XG4gIH1cbiAgaWYgKGZpbmFsRW1wdGllcy5sZW5ndGggIT09IDMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ2hlc3M5NjA6IGV4cGVjdGVkIDMgZW1wdHkgZmlsZXMgZm9yIFItSy1SIHBsYWNlbWVudCwgZ290ICR7ZmluYWxFbXB0aWVzLmxlbmd0aH1gLFxuICAgICk7XG4gIH1cbiAgYmFja1tmaW5hbEVtcHRpZXNbMF0hXSA9IFwicm9va1wiO1xuICBiYWNrW2ZpbmFsRW1wdGllc1sxXSFdID0gXCJraW5nXCI7XG4gIGJhY2tbZmluYWxFbXB0aWVzWzJdIV0gPSBcInJvb2tcIjtcblxuICByZXR1cm4gYmFjayBhcyBQaWVjZVR5cGVbXTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIGZ1bGwgYFN0YXJ0aW5nTGF5b3V0YCBmb3IgQ2hlc3M5NjAgcG9zaXRpb24gYGlkYC5cbiAqXG4gKiBXaGl0ZSdzIGJhY2sgcmFuayBmb2xsb3dzIHRoZSBTY2hhcm5hZ2wgZm9ybXVsYTsgYmxhY2sgbWlycm9ycy5cbiAqIFBhd25zIGdvIG9uIHJhbmsgMiAod2hpdGUpIC8gcmFuayA3IChibGFjaykgaWRlbnRpY2FsbHkgdG8gRklERS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ2hlc3M5NjBMYXlvdXQoaWQ6IG51bWJlcik6IFN0YXJ0aW5nTGF5b3V0IHtcbiAgY29uc3Qgd2hpdGVCYWNrID0gY2hlc3M5NjBCYWNrUmFuayhpZCk7XG4gIGNvbnN0IHBpZWNlczogUGllY2VQbGFjZW1lbnRbXSA9IFtdO1xuXG4gIC8vIFdoaXRlIGJhY2sgcmFuayArIHBhd25zLlxuICBmb3IgKGxldCBmaWxlID0gMDsgZmlsZSA8IDg7IGZpbGUrKykge1xuICAgIHBpZWNlcy5wdXNoKHtcbiAgICAgIHR5cGU6IHdoaXRlQmFja1tmaWxlXSEsXG4gICAgICBjb2xvcjogXCJ3aGl0ZVwiLFxuICAgICAgc3F1YXJlOiBzcXVhcmVPZihmaWxlLCAwKSxcbiAgICB9KTtcbiAgICBwaWVjZXMucHVzaCh7XG4gICAgICB0eXBlOiBcInBhd25cIixcbiAgICAgIGNvbG9yOiBcIndoaXRlXCIsXG4gICAgICBzcXVhcmU6IHNxdWFyZU9mKGZpbGUsIDEpLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQmxhY2sgYmFjayByYW5rIChtaXJyb3Igd2hpdGUpICsgcGF3bnMuXG4gIGZvciAobGV0IGZpbGUgPSAwOyBmaWxlIDwgODsgZmlsZSsrKSB7XG4gICAgcGllY2VzLnB1c2goe1xuICAgICAgdHlwZTogd2hpdGVCYWNrW2ZpbGVdISxcbiAgICAgIGNvbG9yOiBcImJsYWNrXCIsXG4gICAgICBzcXVhcmU6IHNxdWFyZU9mKGZpbGUsIDcpLFxuICAgIH0pO1xuICAgIHBpZWNlcy5wdXNoKHtcbiAgICAgIHR5cGU6IFwicGF3blwiLFxuICAgICAgY29sb3I6IFwiYmxhY2tcIixcbiAgICAgIHNxdWFyZTogc3F1YXJlT2YoZmlsZSwgNiksXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCB3cmFwcGVkSWQgPSAoKGlkICUgQ0hFU1M5NjBfQ09VTlQpICsgQ0hFU1M5NjBfQ09VTlQpICUgQ0hFU1M5NjBfQ09VTlQ7XG4gIHJldHVybiB7XG4gICAgaWQ6IFwiY2hlc3M5NjBcIixcbiAgICBuYW1lOiBgQ2hlc3M5NjAgKCMke3dyYXBwZWRJZH0pYCxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiRmlzY2hlciBSYW5kb20gQ2hlc3MuIEJhY2sgcmFuayByYW5kb21pemVkIHdpdGggYmlzaG9wcyBvbiBvcHBvc2l0ZSBjb2xvcnMgYW5kIGtpbmcgYmV0d2VlbiB0aGUgcm9va3MuIFBvc2l0aW9uIG51bWJlciBzaG93biBpbiB0aGUgbmFtZS5cIixcbiAgICBwaWVjZXMsXG4gICAgc3VnZ2VzdGVkUHJlc2V0czogW10sXG4gICAgc291cmNlOiBcInByZW1hZGVcIixcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGUgcmVnaXN0cnkgU0hJTSBmb3IgQ2hlc3M5NjAuIGBwaWVjZXNgIGlzIHRoZSBGSURFIGRlZmF1bHRcbiAqIChwb3NpdGlvbiA1MTgpIHNvIGNvZGUgdGhhdCBzZWxlY3RzIENoZXNzOTYwIHdpdGhvdXQgZnVydGhlclxuICogaGFuZGxpbmcgc3RpbGwgZ2V0cyBhIHBsYXlhYmxlIGJvYXJkLiBUaGUgTGF5b3V0UGlja2VyIGRldGVjdHNcbiAqIHRoaXMgaWQgYW5kIGNhbGxzIGBidWlsZENoZXNzOTYwTGF5b3V0KHJhbmRvbVNlZWQpYCB0byBwcm9kdWNlIGFcbiAqIGZyZXNoIHJhbmRvbSBwb3NpdGlvbiB3aGVuZXZlciB0aGUgdXNlciByZS1zZWxlY3RzIGl0LlxuICovXG5leHBvcnQgY29uc3QgQ0hFU1M5NjBfU0hJTTogU3RhcnRpbmdMYXlvdXQgPSB7XG4gIGlkOiBcImNoZXNzOTYwXCIsXG4gIG5hbWU6IFwiQ2hlc3M5NjAgKEZpc2NoZXIgUmFuZG9tKVwiLFxuICBkZXNjcmlwdGlvbjpcbiAgICBcIkZpc2NoZXIgUmFuZG9tIENoZXNzLiBSYW5kb21pemVkIGJhY2sgcmFuay4gU2VsZWN0aW5nIHRoaXMgbGF5b3V0IGdlbmVyYXRlcyBhIG5ldyByYW5kb20gcG9zaXRpb24gb24gZWFjaCBwaWNrLlwiLFxuICAvLyBEZWZhdWx0IGRpc3BsYXkgdXNlcyB0aGUgRklERSBiYWNrIHJhbmsgKHBvc2l0aW9uIDUxOCkuXG4gIHBpZWNlczogWy4uLmZpZGVTaWRlT2YoXCJ3aGl0ZVwiKSwgLi4uZmlkZVNpZGVPZihcImJsYWNrXCIpXSxcbiAgc3VnZ2VzdGVkUHJlc2V0czogW10sXG4gIHNvdXJjZTogXCJwcmVtYWRlXCIsXG59O1xuXG5MQVlPVVRfUkVHSVNUUlkucmVnaXN0ZXIoQ0hFU1M5NjBfU0hJTSk7XG4iXSwiZmlsZSI6Ii9zcmMvbGF5b3V0cy9jaGVzczk2MC50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/b61ad0b545d4fdc57294ac57c8420113df2b682d b/7xOfJqsDU787fe61oSCq1/web/b61ad0b545d4fdc57294ac57c8420113df2b682d deleted file mode 100644 index e477194..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/b61ad0b545d4fdc57294ac57c8420113df2b682d +++ /dev/null @@ -1,63 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "getLegalBishopMoves", { enumerable: true, configurable: true, get(){ try { return getLegalBishopMoves } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "getLegalRookMoves", { enumerable: true, configurable: true, get(){ try { return getLegalRookMoves } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "getLegalQueenMoves", { enumerable: true, configurable: true, get(){ try { return getLegalQueenMoves } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/rules/primitives.ts", {"importedNames":["rookCandidates","bishopCandidates","queenCandidates"]}); - - - - -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/rules/board-queries.ts", {"importedNames":["getPiecePosition","getPieceColor","isAllyAt","isEnemyAt"]}); - - - - - -const BASE_RANGE = 7; -function getRangeMaxSteps(session, pieceId) { - const value = session.get(pieceId, "RangeBonus"); - const rangeBonus = value !== void 0 ? value : 0; - return Math.min(BASE_RANGE, Math.max(0, BASE_RANGE + rangeBonus)); -} -function getSlidingMoves(session, pieceId, from, color, rays, maxSteps) { - const moves = []; - for (const ray of rays) { - let steps = 0; - for (const to of ray) { - if (steps >= maxSteps) break; - steps++; - if ((0,__vite_ssr_import_1__.isAllyAt)(session, to, color)) { - break; - }; - if ((0,__vite_ssr_import_1__.isEnemyAt)(session, to, color)) { - moves.push({ pieceId, from, to, isCapture: true }); - break; - }; - moves.push({ pieceId, from, to, isCapture: false }); - } - }; - return moves; -} -function getLegalBishopMoves(session, pieceId) { - const from = (0,__vite_ssr_import_1__.getPiecePosition)(session, pieceId); - const color = (0,__vite_ssr_import_1__.getPieceColor)(session, pieceId); - if (from === null || color === null) return []; - const maxSteps = getRangeMaxSteps(session, pieceId); - return getSlidingMoves(session, pieceId, from, color, (0,__vite_ssr_import_0__.bishopCandidates)(from), maxSteps); -}; -function getLegalRookMoves(session, pieceId) { - const from = (0,__vite_ssr_import_1__.getPiecePosition)(session, pieceId); - const color = (0,__vite_ssr_import_1__.getPieceColor)(session, pieceId); - if (from === null || color === null) return []; - const maxSteps = getRangeMaxSteps(session, pieceId); - return getSlidingMoves(session, pieceId, from, color, (0,__vite_ssr_import_0__.rookCandidates)(from), maxSteps); -}; -function getLegalQueenMoves(session, pieceId) { - const from = (0,__vite_ssr_import_1__.getPiecePosition)(session, pieceId); - const color = (0,__vite_ssr_import_1__.getPieceColor)(session, pieceId); - if (from === null || color === null) return []; - const maxSteps = getRangeMaxSteps(session, pieceId); - return getSlidingMoves(session, pieceId, from, color, (0,__vite_ssr_import_0__.queenCandidates)(from), maxSteps); -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7O0FBc0JBOzs7OztBQU1BOzs7Ozs7QUFRQSxNQUFNLGFBQWE7QUFPbkIsU0FBUyxpQkFBaUIsU0FBa0IsU0FBMkI7QUFDckUsUUFBTSxRQUFRLFFBQVEsSUFBSSxTQUFTLFlBQVk7QUFDL0MsUUFBTSxhQUFhLFVBQVUsU0FBYSxRQUFtQjtBQUM3RCxTQUFPLEtBQUssSUFBSSxZQUFZLEtBQUssSUFBSSxHQUFHLGFBQWEsVUFBVSxDQUFDO0FBQ2xFO0FBTUEsU0FBUyxnQkFDUCxTQUNBLFNBQ0EsTUFDQSxPQUNBLE1BQ0EsVUFDYTtBQUNiLFFBQU0sUUFBcUIsQ0FBQztBQUM1QixhQUFXLE9BQU8sTUFBTTtBQUN0QixRQUFJLFFBQVE7QUFDWixlQUFXLE1BQU0sS0FBSztBQUNwQixVQUFJLFNBQVMsU0FBVTtBQUN2QjtBQUNBLGFBQUksZ0NBQVMsU0FBUyxJQUFJLEtBQUssR0FBRztBQUVoQztBQUFBLE1BQ0Y7QUFDQSxhQUFJLGlDQUFVLFNBQVMsSUFBSSxLQUFLLEdBQUc7QUFFakMsY0FBTSxLQUFLLEVBQUUsU0FBUyxNQUFNLElBQUksV0FBVyxLQUFLLENBQUM7QUFDakQ7QUFBQSxNQUNGO0FBRUEsWUFBTSxLQUFLLEVBQUUsU0FBUyxNQUFNLElBQUksV0FBVyxNQUFNLENBQUM7QUFBQSxJQUNwRDtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFHTyxTQUFTLG9CQUNkLFNBQ0EsU0FDYTtBQUNiLFFBQU0sVUFBTyx3Q0FBaUIsU0FBUyxPQUFPO0FBQzlDLFFBQU0sV0FBUSxxQ0FBYyxTQUFTLE9BQU87QUFDNUMsTUFBSSxTQUFTLFFBQVEsVUFBVSxLQUFNLFFBQU8sQ0FBQztBQUM3QyxRQUFNLFdBQVcsaUJBQWlCLFNBQVMsT0FBTztBQUNsRCxTQUFPLGdCQUFnQixTQUFTLFNBQVMsTUFBTSxVQUFPLHdDQUFpQixJQUFJLEdBQUcsUUFBUTtBQUN4RjtBQUdPLFNBQVMsa0JBQ2QsU0FDQSxTQUNhO0FBQ2IsUUFBTSxVQUFPLHdDQUFpQixTQUFTLE9BQU87QUFDOUMsUUFBTSxXQUFRLHFDQUFjLFNBQVMsT0FBTztBQUM1QyxNQUFJLFNBQVMsUUFBUSxVQUFVLEtBQU0sUUFBTyxDQUFDO0FBQzdDLFFBQU0sV0FBVyxpQkFBaUIsU0FBUyxPQUFPO0FBQ2xELFNBQU8sZ0JBQWdCLFNBQVMsU0FBUyxNQUFNLFVBQU8sc0NBQWUsSUFBSSxHQUFHLFFBQVE7QUFDdEY7QUFHTyxTQUFTLG1CQUNkLFNBQ0EsU0FDYTtBQUNiLFFBQU0sVUFBTyx3Q0FBaUIsU0FBUyxPQUFPO0FBQzlDLFFBQU0sV0FBUSxxQ0FBYyxTQUFTLE9BQU87QUFDNUMsTUFBSSxTQUFTLFFBQVEsVUFBVSxLQUFNLFFBQU8sQ0FBQztBQUM3QyxRQUFNLFdBQVcsaUJBQWlCLFNBQVMsT0FBTztBQUNsRCxTQUFPLGdCQUFnQixTQUFTLFNBQVMsTUFBTSxVQUFPLHVDQUFnQixJQUFJLEdBQUcsUUFBUTtBQUN2RiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsic2xpZGluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNsaWRpbmcgcGllY2UgcnVsZXM6IGJpc2hvcCwgcm9vaywgcXVlZW4gKFAyLjExKS5cbiAqXG4gKiBFYWNoIHNsaWRpbmcgcGllY2Ugd2Fsa3MgYWxvbmcgYSBzZXQgb2YgcmF5cyBlbWl0dGVkIGJ5IHRoZVxuICogY29ycmVzcG9uZGluZyBjYW5kaWRhdGUgaGVscGVyIGluIHByaW1pdGl2ZXMudHMuIEZvciBldmVyeSByYXkgd2VcbiAqIGl0ZXJhdGUgc3F1YXJlcyBmcm9tIHRoZSBwaWVjZSBvdXR3YXJkIGFuZCBhcHBseSBibG9ja2VyIGxvZ2ljOlxuICpcbiAqICAgMS4gRW1wdHkgc3F1YXJlICAgICAgICDihpIgbGVnYWwgbm9uLWNhcHR1cmUgbW92ZSwga2VlcCB3YWxraW5nXG4gKiAgIDIuIEFsbHktb2NjdXBpZWQgICAgICAg4oaSIHN0b3AgaW1tZWRpYXRlbHkgKHNxdWFyZSBOT1QgaW5jbHVkZWQpXG4gKiAgIDMuIEVuZW15LW9jY3VwaWVkICAgICAg4oaSIGxlZ2FsIGNhcHR1cmUsIHRoZW4gc3RvcFxuICpcbiAqIFJhbmdlQm9udXMgZmFjdCAoc2VlZGVkIGJ5IHRoZSByYW5nZS1ib251cyBtb2RpZmllciBkZXNjcmlwdG9yKSBleHRlbmRzXG4gKiBvciBsaW1pdHMgaG93IG1hbnkgc3F1YXJlcyBhIHBpZWNlIG1heSB0cmF2ZWwgcGVyIHJheS4gVGhlIGVmZmVjdGl2ZVxuICogbWF4U3RlcHMgaXMgY2xhbXBlZCB0byBbMCwgN10g4oCUIHRoZSBuYXR1cmFsIGJvYXJkLWdlb21ldHJ5IGNlaWxpbmcgb25cbiAqIGFuIDjDlzggYm9hcmQuIEZvciBzdGFuZGFyZCBjaGVzcyAoZnVsbCByYW5nZSksIFJhbmdlQm9udXM9MCBpcyB0aGVcbiAqIGRlZmF1bHQgYW5kIGJlaGF2aW91ciBpcyBpZGVudGljYWwgdG8gdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIEludGVudGlvbmFsbHkgTk9UIGhhbmRsZWQgaGVyZSAoc2VlIGxhdGVyIHBoYXNlcyk6XG4gKiAgIC0gY2hlY2sgZmlsdGVyaW5nICDihpIgUDIuMThcbiAqICAgLSB0dXJuIG9yZGVyICAgICAgIOKGkiBQMi4xM1xuICovXG5pbXBvcnQgdHlwZSB7IFNlc3Npb24sIEVudGl0eUlkIH0gZnJvbSBcIkBwYXJhdHlwZS9yZXRlXCI7XG5pbXBvcnQge1xuICByb29rQ2FuZGlkYXRlcyxcbiAgYmlzaG9wQ2FuZGlkYXRlcyxcbiAgcXVlZW5DYW5kaWRhdGVzLFxufSBmcm9tIFwiLi9wcmltaXRpdmVzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IExlZ2FsTW92ZSB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5pbXBvcnQge1xuICBnZXRQaWVjZVBvc2l0aW9uLFxuICBnZXRQaWVjZUNvbG9yLFxuICBpc0FsbHlBdCxcbiAgaXNFbmVteUF0LFxufSBmcm9tIFwiLi9ib2FyZC1xdWVyaWVzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBpZWNlQ29sb3IsIFNxdWFyZSB9IGZyb20gXCIuLi9zY2hlbWEuanNcIjtcblxuY29uc3QgQkFTRV9SQU5HRSA9IDc7XG5cbi8qKlxuICogUmVhZCB0aGUgUmFuZ2VCb251cyBmYWN0IGZvciBhIHBpZWNlIGFuZCBjb21wdXRlIHRoZSBlZmZlY3RpdmUgbWF4U3RlcHNcbiAqIHBlciByYXkuIFRoZSBib251cyBpcyBjbGFtcGVkIHNvIG1heFN0ZXBzIHN0YXlzIHdpdGhpbiBbMCwgQkFTRV9SQU5HRV0uXG4gKiBBYnNlbnQgZmFjdCDihpIgYm9udXMgb2YgMCDihpIgbWF4U3RlcHMgPSBCQVNFX1JBTkdFIChzdGFuZGFyZCBmdWxsIHJhbmdlKS5cbiAqL1xuZnVuY3Rpb24gZ2V0UmFuZ2VNYXhTdGVwcyhzZXNzaW9uOiBTZXNzaW9uLCBwaWVjZUlkOiBFbnRpdHlJZCk6IG51bWJlciB7XG4gIGNvbnN0IHZhbHVlID0gc2Vzc2lvbi5nZXQocGllY2VJZCwgXCJSYW5nZUJvbnVzXCIpO1xuICBjb25zdCByYW5nZUJvbnVzID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/ICh2YWx1ZSBhcyBudW1iZXIpIDogMDtcbiAgcmV0dXJuIE1hdGgubWluKEJBU0VfUkFOR0UsIE1hdGgubWF4KDAsIEJBU0VfUkFOR0UgKyByYW5nZUJvbnVzKSk7XG59XG5cbi8qKlxuICogV2FsayBlYWNoIHJheSBpbiBgcmF5c2AgZnJvbSB0aGUgcGllY2Ugb3V0d2FyZCwgZW1pdHRpbmcgbGVnYWwgbW92ZXNcbiAqIHVudGlsIGEgYmxvY2tlciBpcyBoaXQgb3IgbWF4U3RlcHMgc3F1YXJlcyBoYXZlIGJlZW4gdHJhdmVyc2VkLlxuICovXG5mdW5jdGlvbiBnZXRTbGlkaW5nTW92ZXMoXG4gIHNlc3Npb246IFNlc3Npb24sXG4gIHBpZWNlSWQ6IEVudGl0eUlkLFxuICBmcm9tOiBTcXVhcmUsXG4gIGNvbG9yOiBQaWVjZUNvbG9yLFxuICByYXlzOiBTcXVhcmVbXVtdLFxuICBtYXhTdGVwczogbnVtYmVyLFxuKTogTGVnYWxNb3ZlW10ge1xuICBjb25zdCBtb3ZlczogTGVnYWxNb3ZlW10gPSBbXTtcbiAgZm9yIChjb25zdCByYXkgb2YgcmF5cykge1xuICAgIGxldCBzdGVwcyA9IDA7XG4gICAgZm9yIChjb25zdCB0byBvZiByYXkpIHtcbiAgICAgIGlmIChzdGVwcyA+PSBtYXhTdGVwcykgYnJlYWs7XG4gICAgICBzdGVwcysrO1xuICAgICAgaWYgKGlzQWxseUF0KHNlc3Npb24sIHRvLCBjb2xvcikpIHtcbiAgICAgICAgLy8gT3duIHBpZWNlIGJsb2NrcyDigJQgZG8gbm90IGluY2x1ZGUgdGhpcyBzcXVhcmUsIHN0b3AgdGhlIHJheS5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoaXNFbmVteUF0KHNlc3Npb24sIHRvLCBjb2xvcikpIHtcbiAgICAgICAgLy8gRW5lbXkgcGllY2Ug4oCUIGxlZ2FsIGNhcHR1cmUsIHRoZW4gc3RvcC5cbiAgICAgICAgbW92ZXMucHVzaCh7IHBpZWNlSWQsIGZyb20sIHRvLCBpc0NhcHR1cmU6IHRydWUgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgLy8gRW1wdHkgc3F1YXJlIOKAlCBsZWdhbCBub24tY2FwdHVyZSBtb3ZlLCBrZWVwIHdhbGtpbmcuXG4gICAgICBtb3Zlcy5wdXNoKHsgcGllY2VJZCwgZnJvbSwgdG8sIGlzQ2FwdHVyZTogZmFsc2UgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBtb3Zlcztcbn1cblxuLyoqIEdldCBhbGwgbGVnYWwgYmlzaG9wIG1vdmVzIGZvciB0aGUgZ2l2ZW4gYmlzaG9wIGVudGl0eS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMZWdhbEJpc2hvcE1vdmVzKFxuICBzZXNzaW9uOiBTZXNzaW9uLFxuICBwaWVjZUlkOiBFbnRpdHlJZCxcbik6IExlZ2FsTW92ZVtdIHtcbiAgY29uc3QgZnJvbSA9IGdldFBpZWNlUG9zaXRpb24oc2Vzc2lvbiwgcGllY2VJZCk7XG4gIGNvbnN0IGNvbG9yID0gZ2V0UGllY2VDb2xvcihzZXNzaW9uLCBwaWVjZUlkKTtcbiAgaWYgKGZyb20gPT09IG51bGwgfHwgY29sb3IgPT09IG51bGwpIHJldHVybiBbXTtcbiAgY29uc3QgbWF4U3RlcHMgPSBnZXRSYW5nZU1heFN0ZXBzKHNlc3Npb24sIHBpZWNlSWQpO1xuICByZXR1cm4gZ2V0U2xpZGluZ01vdmVzKHNlc3Npb24sIHBpZWNlSWQsIGZyb20sIGNvbG9yLCBiaXNob3BDYW5kaWRhdGVzKGZyb20pLCBtYXhTdGVwcyk7XG59XG5cbi8qKiBHZXQgYWxsIGxlZ2FsIHJvb2sgbW92ZXMgZm9yIHRoZSBnaXZlbiByb29rIGVudGl0eS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMZWdhbFJvb2tNb3ZlcyhcbiAgc2Vzc2lvbjogU2Vzc2lvbixcbiAgcGllY2VJZDogRW50aXR5SWQsXG4pOiBMZWdhbE1vdmVbXSB7XG4gIGNvbnN0IGZyb20gPSBnZXRQaWVjZVBvc2l0aW9uKHNlc3Npb24sIHBpZWNlSWQpO1xuICBjb25zdCBjb2xvciA9IGdldFBpZWNlQ29sb3Ioc2Vzc2lvbiwgcGllY2VJZCk7XG4gIGlmIChmcm9tID09PSBudWxsIHx8IGNvbG9yID09PSBudWxsKSByZXR1cm4gW107XG4gIGNvbnN0IG1heFN0ZXBzID0gZ2V0UmFuZ2VNYXhTdGVwcyhzZXNzaW9uLCBwaWVjZUlkKTtcbiAgcmV0dXJuIGdldFNsaWRpbmdNb3ZlcyhzZXNzaW9uLCBwaWVjZUlkLCBmcm9tLCBjb2xvciwgcm9va0NhbmRpZGF0ZXMoZnJvbSksIG1heFN0ZXBzKTtcbn1cblxuLyoqIEdldCBhbGwgbGVnYWwgcXVlZW4gbW92ZXMgZm9yIHRoZSBnaXZlbiBxdWVlbiBlbnRpdHkuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGVnYWxRdWVlbk1vdmVzKFxuICBzZXNzaW9uOiBTZXNzaW9uLFxuICBwaWVjZUlkOiBFbnRpdHlJZCxcbik6IExlZ2FsTW92ZVtdIHtcbiAgY29uc3QgZnJvbSA9IGdldFBpZWNlUG9zaXRpb24oc2Vzc2lvbiwgcGllY2VJZCk7XG4gIGNvbnN0IGNvbG9yID0gZ2V0UGllY2VDb2xvcihzZXNzaW9uLCBwaWVjZUlkKTtcbiAgaWYgKGZyb20gPT09IG51bGwgfHwgY29sb3IgPT09IG51bGwpIHJldHVybiBbXTtcbiAgY29uc3QgbWF4U3RlcHMgPSBnZXRSYW5nZU1heFN0ZXBzKHNlc3Npb24sIHBpZWNlSWQpO1xuICByZXR1cm4gZ2V0U2xpZGluZ01vdmVzKHNlc3Npb24sIHBpZWNlSWQsIGZyb20sIGNvbG9yLCBxdWVlbkNhbmRpZGF0ZXMoZnJvbSksIG1heFN0ZXBzKTtcbn1cbiJdLCJmaWxlIjoiL3NyYy9ydWxlcy9zbGlkaW5nLnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/bb1f31d584d3ea42861de5c8fe2f01e6ed2e1916 b/7xOfJqsDU787fe61oSCq1/web/bb1f31d584d3ea42861de5c8fe2f01e6ed2e1916 deleted file mode 100644 index 9595c10..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/bb1f31d584d3ea42861de5c8fe2f01e6ed2e1916 +++ /dev/null @@ -1,48 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "FIDE_BACK_RANK", { enumerable: true, configurable: true, get(){ try { return FIDE_BACK_RANK } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "fideSideOf", { enumerable: true, configurable: true, get(){ try { return fideSideOf } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "pawnsOnRanks", { enumerable: true, configurable: true, get(){ try { return pawnsOnRanks } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["squareOf"]}); -const FIDE_BACK_RANK = [ - "rook", - "knight", - "bishop", - "queen", - "king", - "bishop", - "knight", - "rook" -]; -function fideSideOf(color) { - const backRank = color === "white" ? 0 : 7; - const pawnRank = color === "white" ? 1 : 6; - const pieces = []; - for (let file = 0; file < 8; file++) { - pieces.push({ - type: FIDE_BACK_RANK[file], - color, - square: (0,__vite_ssr_import_0__.squareOf)(file, backRank) - }); - pieces.push({ - type: "pawn", - color, - square: (0,__vite_ssr_import_0__.squareOf)(file, pawnRank) - }); - }; - return pieces; -}; -function pawnsOnRanks(color, ranks) { - const pieces = []; - for (const rank of ranks) { - for (let file = 0; file < 8; file++) { - pieces.push({ - type: "pawn", - color, - square: (0,__vite_ssr_import_0__.squareOf)(file, rank) - }); - } - }; - return pieces; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7O0FBWUE7QUFHTyxNQUFNLGlCQUF1QztBQUFBLEVBQ2xEO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGO0FBUU8sU0FBUyxXQUFXLE9BQXFDO0FBQzlELFFBQU0sV0FBVyxVQUFVLFVBQVUsSUFBSTtBQUN6QyxRQUFNLFdBQVcsVUFBVSxVQUFVLElBQUk7QUFDekMsUUFBTSxTQUEyQixDQUFDO0FBQ2xDLFdBQVMsT0FBTyxHQUFHLE9BQU8sR0FBRyxRQUFRO0FBQ25DLFdBQU8sS0FBSztBQUFBLE1BQ1YsTUFBTSxlQUFlLElBQUk7QUFBQSxNQUN6QjtBQUFBLE1BQ0EsV0FBUSxnQ0FBUyxNQUFNLFFBQVE7QUFBQSxJQUNqQyxDQUFDO0FBQ0QsV0FBTyxLQUFLO0FBQUEsTUFDVixNQUFNO0FBQUEsTUFDTjtBQUFBLE1BQ0EsV0FBUSxnQ0FBUyxNQUFNLFFBQVE7QUFBQSxJQUNqQyxDQUFDO0FBQUEsRUFDSDtBQUNBLFNBQU87QUFDVDtBQVFPLFNBQVMsYUFDZCxPQUNBLE9BQ2tCO0FBQ2xCLFFBQU0sU0FBMkIsQ0FBQztBQUNsQyxhQUFXLFFBQVEsT0FBTztBQUN4QixhQUFTLE9BQU8sR0FBRyxPQUFPLEdBQUcsUUFBUTtBQUNuQyxhQUFPLEtBQUs7QUFBQSxRQUNWLE1BQU07QUFBQSxRQUNOO0FBQUEsUUFDQSxXQUFRLGdDQUFTLE1BQU0sSUFBSTtBQUFBLE1BQzdCLENBQUM7QUFBQSxJQUNIO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVCIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiX2hlbHBlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBJbnRlcm5hbCBoZWxwZXJzIGZvciBjb21wb3NpbmcgcHJlbWFkZSBsYXlvdXRzLlxuICpcbiAqIE5PVCBwYXJ0IG9mIHRoZSBwdWJsaWMgbGF5b3V0cyBBUEkuIFByZW1hZGVzIHVzZSB0aGVzZSB0byBjb21wb3NlXG4gKiBcIkZJREUgYmFjayByYW5rICsgcGF3biByYW5rIGZvciBvbmUgY29sb3JcIiBzdWJzZXRzIHdpdGhvdXRcbiAqIGR1cGxpY2F0aW5nIHRoZSBgUGllY2VUeXBlW11gIGFycmF5IGluIGV2ZXJ5IGZpbGUuXG4gKlxuICogTmFtaW5nOiB1bmRlcnNjb3JlIHByZWZpeCBtYXJrcyB0aGlzIGFzIGEgbW9kdWxlLXByaXZhdGUgaGVscGVyLFxuICogbm90IGxpc3RlZCBpbiB0aGUgbGF5b3V0cyBiYXJyZWwncyBwdWJsaWMgcmUtZXhwb3J0cy5cbiAqL1xuaW1wb3J0IHR5cGUgeyBQaWVjZVR5cGUsIFBpZWNlQ29sb3IsIFNxdWFyZSB9IGZyb20gXCIuLi9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgUGllY2VQbGFjZW1lbnQgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgc3F1YXJlT2YgfSBmcm9tIFwiLi4vY29vcmQuanNcIjtcblxuLyoqIFN0YW5kYXJkIEZJREUgYmFjay1yYW5rIHBpZWNlIG9yZGVyLCBmaWxlIDAgKGEpIHRocm91Z2ggZmlsZSA3IChoKS4gKi9cbmV4cG9ydCBjb25zdCBGSURFX0JBQ0tfUkFOSzogcmVhZG9ubHkgUGllY2VUeXBlW10gPSBbXG4gIFwicm9va1wiLFxuICBcImtuaWdodFwiLFxuICBcImJpc2hvcFwiLFxuICBcInF1ZWVuXCIsXG4gIFwia2luZ1wiLFxuICBcImJpc2hvcFwiLFxuICBcImtuaWdodFwiLFxuICBcInJvb2tcIixcbl07XG5cbi8qKlxuICogQnVpbGQgdGhlIDE2LXBpZWNlIEZJREUgc2V0dXAgZm9yIG9uZSBjb2xvci5cbiAqXG4gKiAgIC0gV2hpdGU6IGJhY2sgcmFuayBvbiByYW5rIDAgKHJhbmsgMSBpbiBhbGdlYnJhaWMpLCBwYXducyBvbiByYW5rIDEuXG4gKiAgIC0gQmxhY2s6IGJhY2sgcmFuayBvbiByYW5rIDcgKHJhbmsgOCBpbiBhbGdlYnJhaWMpLCBwYXducyBvbiByYW5rIDYuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWRlU2lkZU9mKGNvbG9yOiBQaWVjZUNvbG9yKTogUGllY2VQbGFjZW1lbnRbXSB7XG4gIGNvbnN0IGJhY2tSYW5rID0gY29sb3IgPT09IFwid2hpdGVcIiA/IDAgOiA3O1xuICBjb25zdCBwYXduUmFuayA9IGNvbG9yID09PSBcIndoaXRlXCIgPyAxIDogNjtcbiAgY29uc3QgcGllY2VzOiBQaWVjZVBsYWNlbWVudFtdID0gW107XG4gIGZvciAobGV0IGZpbGUgPSAwOyBmaWxlIDwgODsgZmlsZSsrKSB7XG4gICAgcGllY2VzLnB1c2goe1xuICAgICAgdHlwZTogRklERV9CQUNLX1JBTktbZmlsZV0hLFxuICAgICAgY29sb3IsXG4gICAgICBzcXVhcmU6IHNxdWFyZU9mKGZpbGUsIGJhY2tSYW5rKSBhcyBTcXVhcmUsXG4gICAgfSk7XG4gICAgcGllY2VzLnB1c2goe1xuICAgICAgdHlwZTogXCJwYXduXCIsXG4gICAgICBjb2xvcixcbiAgICAgIHNxdWFyZTogc3F1YXJlT2YoZmlsZSwgcGF3blJhbmspIGFzIFNxdWFyZSxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcGllY2VzO1xufVxuXG4vKipcbiAqIEJ1aWxkIHBhd25zIGZvciBvbmUgY29sb3IgZmlsbGluZyBldmVyeSBzcXVhcmUgb24gYHJhbmtzYC5cbiAqXG4gKiBVc2VkIGJ5IER1bnNhbnkgKHdoaXRlIHBhd25zIG9uIHJhbmtzIDAtMykgYW5kIEhvcmRlICh3aGl0ZSBwYXduc1xuICogb24gcmFua3MgMC0zIHdpdGggc3BlY2lmaWMgZ2FwcykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXduc09uUmFua3MoXG4gIGNvbG9yOiBQaWVjZUNvbG9yLFxuICByYW5rczogcmVhZG9ubHkgbnVtYmVyW10sXG4pOiBQaWVjZVBsYWNlbWVudFtdIHtcbiAgY29uc3QgcGllY2VzOiBQaWVjZVBsYWNlbWVudFtdID0gW107XG4gIGZvciAoY29uc3QgcmFuayBvZiByYW5rcykge1xuICAgIGZvciAobGV0IGZpbGUgPSAwOyBmaWxlIDwgODsgZmlsZSsrKSB7XG4gICAgICBwaWVjZXMucHVzaCh7XG4gICAgICAgIHR5cGU6IFwicGF3blwiLFxuICAgICAgICBjb2xvcixcbiAgICAgICAgc3F1YXJlOiBzcXVhcmVPZihmaWxlLCByYW5rKSBhcyBTcXVhcmUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBpZWNlcztcbn1cbiJdLCJmaWxlIjoiL3NyYy9sYXlvdXRzL19oZWxwZXJzLnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/bd91a864a2be3e44d4272bc457bbd94eaa647a40 b/7xOfJqsDU787fe61oSCq1/web/bd91a864a2be3e44d4272bc457bbd94eaa647a40 deleted file mode 100644 index 5208cb2..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/bd91a864a2be3e44d4272bc457bbd94eaa647a40 +++ /dev/null @@ -1,46 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "isInsufficientMaterial", { enumerable: true, configurable: true, get(){ try { return isInsufficientMaterial } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["squareColor"]}); -function getPieces(session) { - const facts = session.allFacts(); - const typeFacts = facts.filter((f) => f.attr === "PieceType" && f.id > 0); - const out = []; - for (const tf of typeFacts) { - const colorFact = facts.find((c) => c.id === tf.id && c.attr === "Color"); - const posFact = facts.find((p) => p.id === tf.id && p.attr === "Position"); - if (!colorFact || !posFact) continue; - out.push({ - id: tf.id, - type: tf.value, - color: colorFact.value, - square: posFact.value - }); - }; - return out; -} -function isInsufficientMaterial(session) { - const pieces = getPieces(session); - const white = pieces.filter((p) => p.color === "white"); - const black = pieces.filter((p) => p.color === "black"); - const nonKingWhite = white.filter((p) => p.type !== "king"); - const nonKingBlack = black.filter((p) => p.type !== "king"); - if (nonKingWhite.length === 0 && nonKingBlack.length === 0) return true; - if (nonKingWhite.length === 0 && nonKingBlack.length === 1) { - const p = nonKingBlack[0]; - if (p.type === "bishop" || p.type === "knight") return true; - }; - if (nonKingBlack.length === 0 && nonKingWhite.length === 1) { - const p = nonKingWhite[0]; - if (p.type === "bishop" || p.type === "knight") return true; - }; - if (nonKingWhite.length === 1 && nonKingBlack.length === 1) { - const wb = nonKingWhite[0]; - const bb = nonKingBlack[0]; - if (wb.type === "bishop" && bb.type === "bishop") { - return (0,__vite_ssr_import_0__.squareColor)(wb.square) === (0,__vite_ssr_import_0__.squareColor)(bb.square); - } - }; - return false; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQWtCQTtBQWFBLFNBQVMsVUFBVSxTQUErQjtBQUNoRCxRQUFNLFFBQVEsUUFBUSxTQUFTO0FBQy9CLFFBQU0sWUFBWSxNQUFNLE9BQU8sQ0FBQyxNQUFNLEVBQUUsU0FBUyxlQUFlLEVBQUUsS0FBSyxDQUFDO0FBQ3hFLFFBQU0sTUFBbUIsQ0FBQztBQUMxQixhQUFXLE1BQU0sV0FBVztBQUMxQixVQUFNLFlBQVksTUFBTSxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sR0FBRyxNQUFNLEVBQUUsU0FBUyxPQUFPO0FBQ3hFLFVBQU0sVUFBVSxNQUFNLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxHQUFHLE1BQU0sRUFBRSxTQUFTLFVBQVU7QUFDekUsUUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFTO0FBQzVCLFFBQUksS0FBSztBQUFBLE1BQ1AsSUFBSSxHQUFHO0FBQUEsTUFDUCxNQUFNLEdBQUc7QUFBQSxNQUNULE9BQU8sVUFBVTtBQUFBLE1BQ2pCLFFBQVEsUUFBUTtBQUFBLElBQ2xCLENBQUM7QUFBQSxFQUNIO0FBQ0EsU0FBTztBQUNUO0FBTU8sU0FBUyx1QkFBdUIsU0FBMkI7QUFDaEUsUUFBTSxTQUFTLFVBQVUsT0FBTztBQUVoQyxRQUFNLFFBQVEsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLFVBQVUsT0FBTztBQUN0RCxRQUFNLFFBQVEsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLFVBQVUsT0FBTztBQUV0RCxRQUFNLGVBQWUsTUFBTSxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsTUFBTTtBQUMxRCxRQUFNLGVBQWUsTUFBTSxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsTUFBTTtBQUcxRCxNQUFJLGFBQWEsV0FBVyxLQUFLLGFBQWEsV0FBVyxFQUFHLFFBQU87QUFHbkUsTUFBSSxhQUFhLFdBQVcsS0FBSyxhQUFhLFdBQVcsR0FBRztBQUMxRCxVQUFNLElBQUksYUFBYSxDQUFDO0FBQ3hCLFFBQUksRUFBRSxTQUFTLFlBQVksRUFBRSxTQUFTLFNBQVUsUUFBTztBQUFBLEVBQ3pEO0FBQ0EsTUFBSSxhQUFhLFdBQVcsS0FBSyxhQUFhLFdBQVcsR0FBRztBQUMxRCxVQUFNLElBQUksYUFBYSxDQUFDO0FBQ3hCLFFBQUksRUFBRSxTQUFTLFlBQVksRUFBRSxTQUFTLFNBQVUsUUFBTztBQUFBLEVBQ3pEO0FBS0EsTUFBSSxhQUFhLFdBQVcsS0FBSyxhQUFhLFdBQVcsR0FBRztBQUMxRCxVQUFNLEtBQUssYUFBYSxDQUFDO0FBQ3pCLFVBQU0sS0FBSyxhQUFhLENBQUM7QUFDekIsUUFBSSxHQUFHLFNBQVMsWUFBWSxHQUFHLFNBQVMsVUFBVTtBQUNoRCxnQkFBTyxtQ0FBWSxHQUFHLE1BQU0sU0FBTSxtQ0FBWSxHQUFHLE1BQU07QUFBQSxJQUN6RDtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1QiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImluc3VmZmljaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEluc3VmZmljaWVudCBtYXRlcmlhbCBkcmF3IGRldGVjdGlvbiAoUDIuMjIpLlxuICpcbiAqIEZJREUgZHJhdyBieSBpbnN1ZmZpY2llbnQgbWF0ZXJpYWwg4oCUIG5laXRoZXIgc2lkZSByZXRhaW5zIGEgZm9yY2luZ1xuICogY2hlY2ttYXRlIHBhdHRlcm4gd2l0aCBvbmx5IHRoZXNlIHBpZWNlczpcbiAqICAgMS4gSyB2cyBLXG4gKiAgIDIuIEsgKyBCIHZzIEtcbiAqICAgMy4gSyArIE4gdnMgS1xuICogICA0LiBLICsgQiB2cyBLICsgQiwgd2hlcmUgYm90aCBiaXNob3BzIGxpdmUgb24gdGhlIFNBTUUgY29sb3Igc3F1YXJlXG4gKlxuICogSyArIE4gKyBOIHZzIEsgaXMgdGVjaG5pY2FsbHkgYSBkcmF3IHVuZGVyIEZJREUgdG9vLCBidXQgaXRzIHJhcml0eVxuICogKGFuZCB0aGF0IGl0IGNhbiBiZSBmb3JjZWQgdG8gbWF0ZSBpbiBjb250cml2ZWQgcG9zaXRpb25zKSBwbGFjZXMgaXRcbiAqIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgcGxhbi4gT3Bwb3NpdGUtY29sb3IgYmlzaG9wIGVuZGluZ3MgYXJlXG4gKiBORVZFUiBkZXRlY3RlZCBhcyBhIGRyYXcgaGVyZSDigJQgdGhleSBjYW4gcHJvZHVjZSBjaGVja21hdGUgcG9zaXRpb25zXG4gKiBhbmQgbXVzdCBiZSByZXNvbHZlZCBieSBzdGFsZW1hdGUgLyA1MC1tb3ZlIC8gcmVwZXRpdGlvbiBpbnN0ZWFkLlxuICovXG5pbXBvcnQgdHlwZSB7IFNlc3Npb24sIEVudGl0eUlkIH0gZnJvbSBcIkBwYXJhdHlwZS9yZXRlXCI7XG5pbXBvcnQgdHlwZSB7IFBpZWNlVHlwZSwgUGllY2VDb2xvciwgU3F1YXJlIH0gZnJvbSBcIi4uL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHsgc3F1YXJlQ29sb3IgfSBmcm9tIFwiLi4vY29vcmQuanNcIjtcblxuaW50ZXJmYWNlIFBpZWNlSW5mbyB7XG4gIHJlYWRvbmx5IGlkOiBFbnRpdHlJZDtcbiAgcmVhZG9ubHkgdHlwZTogUGllY2VUeXBlO1xuICByZWFkb25seSBjb2xvcjogUGllY2VDb2xvcjtcbiAgcmVhZG9ubHkgc3F1YXJlOiBTcXVhcmU7XG59XG5cbi8qKlxuICogUHJvamVjdCBhbGwgcGllY2VzIChpZCA+IDAgZmlsdGVyIHNraXBzIHRoZSBHQU1FX0VOVElUWS1zaWRlXG4gKiBnYW1lLWxldmVsIGZhY3RzKSBpbnRvIGEgY29tcGFjdCB7dHlwZSwgY29sb3IsIHNxdWFyZX0gdmlldy5cbiAqL1xuZnVuY3Rpb24gZ2V0UGllY2VzKHNlc3Npb246IFNlc3Npb24pOiBQaWVjZUluZm9bXSB7XG4gIGNvbnN0IGZhY3RzID0gc2Vzc2lvbi5hbGxGYWN0cygpO1xuICBjb25zdCB0eXBlRmFjdHMgPSBmYWN0cy5maWx0ZXIoKGYpID0+IGYuYXR0ciA9PT0gXCJQaWVjZVR5cGVcIiAmJiBmLmlkID4gMCk7XG4gIGNvbnN0IG91dDogUGllY2VJbmZvW10gPSBbXTtcbiAgZm9yIChjb25zdCB0ZiBvZiB0eXBlRmFjdHMpIHtcbiAgICBjb25zdCBjb2xvckZhY3QgPSBmYWN0cy5maW5kKChjKSA9PiBjLmlkID09PSB0Zi5pZCAmJiBjLmF0dHIgPT09IFwiQ29sb3JcIik7XG4gICAgY29uc3QgcG9zRmFjdCA9IGZhY3RzLmZpbmQoKHApID0+IHAuaWQgPT09IHRmLmlkICYmIHAuYXR0ciA9PT0gXCJQb3NpdGlvblwiKTtcbiAgICBpZiAoIWNvbG9yRmFjdCB8fCAhcG9zRmFjdCkgY29udGludWU7XG4gICAgb3V0LnB1c2goe1xuICAgICAgaWQ6IHRmLmlkLFxuICAgICAgdHlwZTogdGYudmFsdWUgYXMgUGllY2VUeXBlLFxuICAgICAgY29sb3I6IGNvbG9yRmFjdC52YWx1ZSBhcyBQaWVjZUNvbG9yLFxuICAgICAgc3F1YXJlOiBwb3NGYWN0LnZhbHVlIGFzIFNxdWFyZSxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBtYXRlcmlhbCBjb25maWd1cmF0aW9uIG1hdGNoZXMgb25lIG9mIHRoZVxuICogZm91ciBGSURFIGluc3VmZmljaWVudC1tYXRlcmlhbCBjYXNlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW5zdWZmaWNpZW50TWF0ZXJpYWwoc2Vzc2lvbjogU2Vzc2lvbik6IGJvb2xlYW4ge1xuICBjb25zdCBwaWVjZXMgPSBnZXRQaWVjZXMoc2Vzc2lvbik7XG5cbiAgY29uc3Qgd2hpdGUgPSBwaWVjZXMuZmlsdGVyKChwKSA9PiBwLmNvbG9yID09PSBcIndoaXRlXCIpO1xuICBjb25zdCBibGFjayA9IHBpZWNlcy5maWx0ZXIoKHApID0+IHAuY29sb3IgPT09IFwiYmxhY2tcIik7XG5cbiAgY29uc3Qgbm9uS2luZ1doaXRlID0gd2hpdGUuZmlsdGVyKChwKSA9PiBwLnR5cGUgIT09IFwia2luZ1wiKTtcbiAgY29uc3Qgbm9uS2luZ0JsYWNrID0gYmxhY2suZmlsdGVyKChwKSA9PiBwLnR5cGUgIT09IFwia2luZ1wiKTtcblxuICAvLyBDYXNlIDE6IEsgdnMgS1xuICBpZiAobm9uS2luZ1doaXRlLmxlbmd0aCA9PT0gMCAmJiBub25LaW5nQmxhY2subGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcblxuICAvLyBDYXNlIDI6IEsgdnMgSyArIG1pbm9yIChiaXNob3Agb3Iga25pZ2h0KVxuICBpZiAobm9uS2luZ1doaXRlLmxlbmd0aCA9PT0gMCAmJiBub25LaW5nQmxhY2subGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3QgcCA9IG5vbktpbmdCbGFja1swXSE7XG4gICAgaWYgKHAudHlwZSA9PT0gXCJiaXNob3BcIiB8fCBwLnR5cGUgPT09IFwia25pZ2h0XCIpIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChub25LaW5nQmxhY2subGVuZ3RoID09PSAwICYmIG5vbktpbmdXaGl0ZS5sZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBwID0gbm9uS2luZ1doaXRlWzBdITtcbiAgICBpZiAocC50eXBlID09PSBcImJpc2hvcFwiIHx8IHAudHlwZSA9PT0gXCJrbmlnaHRcIikgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBDYXNlIDQgKGFrYSBcIkNhc2UgM1wiIGluIEZJREUgb3JkZXJpbmcpOiBLICsgQiB2cyBLICsgQiDigJQgZHJhdyBpZmZcbiAgLy8gYmlzaG9wcyBzaGFyZSBzcXVhcmUgY29sb3IuIE9wcG9zaXRlLWNvbG9yIGJpc2hvcHMgQ0FOIHN0aWxsIG1hdGVcbiAgLy8gaW4gY29udHJpdmVkIHBvc2l0aW9ucyAodGhvdWdoIG5vdCBieSBmb3JjZSksIHNvIG5vdCBhIGRyYXcgaGVyZS5cbiAgaWYgKG5vbktpbmdXaGl0ZS5sZW5ndGggPT09IDEgJiYgbm9uS2luZ0JsYWNrLmxlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IHdiID0gbm9uS2luZ1doaXRlWzBdITtcbiAgICBjb25zdCBiYiA9IG5vbktpbmdCbGFja1swXSE7XG4gICAgaWYgKHdiLnR5cGUgPT09IFwiYmlzaG9wXCIgJiYgYmIudHlwZSA9PT0gXCJiaXNob3BcIikge1xuICAgICAgcmV0dXJuIHNxdWFyZUNvbG9yKHdiLnNxdWFyZSkgPT09IHNxdWFyZUNvbG9yKGJiLnNxdWFyZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuIl0sImZpbGUiOiIvc3JjL3J1bGVzL2luc3VmZmljaWVudC50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/bf253a878189638f5cb2cd1e83a924434129e36b b/7xOfJqsDU787fe61oSCq1/web/bf253a878189638f5cb2cd1e83a924434129e36b deleted file mode 100644 index 7c9e130..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/bf253a878189638f5cb2cd1e83a924434129e36b +++ /dev/null @@ -1,35 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "CAPTURE_FLAGS_DESCRIPTOR", { enumerable: true, configurable: true, get(){ try { return CAPTURE_FLAGS_DESCRIPTOR } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "hasCaptureFlag", { enumerable: true, configurable: true, get(){ try { return hasCaptureFlag } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/zod@4.3.6/node_modules/zod/index.js", {"importedNames":["z"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/modifiers/registry.ts", {"importedNames":["MODIFIER_REGISTRY"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/schema.ts", {"importedNames":["CaptureFlag"]}); -const MAX_FLAGS = __vite_ssr_import_2__.CaptureFlag.CAN_CAPTURE_OWN | __vite_ssr_import_2__.CaptureFlag.CANNOT_BE_CAPTURED | __vite_ssr_import_2__.CaptureFlag.EN_PASSANT; -const schema = __vite_ssr_import_0__.z.number().int().min(0).max(MAX_FLAGS); -function describeFlags(value) { - const parts = []; - if (value & __vite_ssr_import_2__.CaptureFlag.CAN_CAPTURE_OWN) parts.push("can-capture-own"); - if (value & __vite_ssr_import_2__.CaptureFlag.CANNOT_BE_CAPTURED) parts.push("cannot-be-captured"); - if (value & __vite_ssr_import_2__.CaptureFlag.EN_PASSANT) parts.push("en-passant"); - return parts.length > 0 ? parts.join(", ") : "no flags"; -} -const CAPTURE_FLAGS_DESCRIPTOR = { - id: "capture-flags", - attrName: "CaptureFlags", - label: "Capture Behavior", - valueSchema: schema, - stackingRule: "union", - // bitwise OR for stacking - uiForm: "capture-flags", - apply(session, pieceId, effectiveValue) { - session.insert(pieceId, "CaptureFlags", effectiveValue); - }, - describe: describeFlags -}; -__vite_ssr_import_1__.MODIFIER_REGISTRY.register(CAPTURE_FLAGS_DESCRIPTOR); -function hasCaptureFlag(session, pieceId, flag) { - const flags = session.get(pieceId, "CaptureFlags"); - return typeof flags === "number" && (flags & flag) !== 0; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUVBO0FBRUE7QUFHQSxNQUFNLFlBQVksa0NBQVksa0JBQWtCLGtDQUFZLHFCQUFxQixrQ0FBWTtBQUM3RixNQUFNLFNBQVMsd0JBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLFNBQVM7QUFHcEQsU0FBUyxjQUFjLE9BQXNCO0FBQzNDLFFBQU0sUUFBa0IsQ0FBQztBQUN6QixNQUFJLFFBQVEsa0NBQVksZ0JBQWlCLE9BQU0sS0FBSyxpQkFBaUI7QUFDckUsTUFBSSxRQUFRLGtDQUFZLG1CQUFvQixPQUFNLEtBQUssb0JBQW9CO0FBQzNFLE1BQUksUUFBUSxrQ0FBWSxXQUFZLE9BQU0sS0FBSyxZQUFZO0FBQzNELFNBQU8sTUFBTSxTQUFTLElBQUksTUFBTSxLQUFLLElBQUksSUFBSTtBQUMvQztBQUVPLE1BQU0sMkJBQXNEO0FBQUEsRUFDakUsSUFBSTtBQUFBLEVBQ0osVUFBVTtBQUFBLEVBQ1YsT0FBTztBQUFBLEVBQ1AsYUFBYTtBQUFBLEVBQ2IsY0FBYztBQUFBO0FBQUEsRUFDZCxRQUFRO0FBQUEsRUFDUixNQUFNLFNBQWtCLFNBQW1CLGdCQUE2QjtBQUN0RSxZQUFRLE9BQU8sU0FBUyxnQkFBZ0IsY0FBYztBQUFBLEVBQ3hEO0FBQUEsRUFDQSxVQUFVO0FBQ1o7QUFFQSx3Q0FBa0IsU0FBUyx3QkFBd0I7QUFHNUMsU0FBUyxlQUFlLFNBQWtCLFNBQW1CLE1BQXVCO0FBQ3pGLFFBQU0sUUFBUSxRQUFRLElBQUksU0FBUyxjQUFjO0FBQ2pELFNBQU8sT0FBTyxVQUFVLGFBQWEsUUFBUSxVQUFVO0FBQ3pEIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJjYXB0dXJlLWZsYWdzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgdHlwZSB7IFNlc3Npb24sIEVudGl0eUlkIH0gZnJvbSBcIkBwYXJhdHlwZS9yZXRlXCI7XG5pbXBvcnQgeyBNT0RJRklFUl9SRUdJU1RSWSB9IGZyb20gXCIuLi9yZWdpc3RyeS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBNb2RpZmllckRlc2NyaXB0b3IgfSBmcm9tIFwiLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IENhcHR1cmVGbGFnIH0gZnJvbSBcIi4uLy4uL3NjaGVtYS5qc1wiO1xuXG4vLyBCaXRmbGFnIHZhbGlkYXRpb246IHZhbGlkIHZhbHVlcyBhcmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSAzIGZsYWdzXG5jb25zdCBNQVhfRkxBR1MgPSBDYXB0dXJlRmxhZy5DQU5fQ0FQVFVSRV9PV04gfCBDYXB0dXJlRmxhZy5DQU5OT1RfQkVfQ0FQVFVSRUQgfCBDYXB0dXJlRmxhZy5FTl9QQVNTQU5UO1xuY29uc3Qgc2NoZW1hID0gei5udW1iZXIoKS5pbnQoKS5taW4oMCkubWF4KE1BWF9GTEFHUyk7XG50eXBlIFZhbHVlID0gei5pbmZlcjx0eXBlb2Ygc2NoZW1hPjtcblxuZnVuY3Rpb24gZGVzY3JpYmVGbGFncyh2YWx1ZTogVmFsdWUpOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgaWYgKHZhbHVlICYgQ2FwdHVyZUZsYWcuQ0FOX0NBUFRVUkVfT1dOKSBwYXJ0cy5wdXNoKFwiY2FuLWNhcHR1cmUtb3duXCIpO1xuICBpZiAodmFsdWUgJiBDYXB0dXJlRmxhZy5DQU5OT1RfQkVfQ0FQVFVSRUQpIHBhcnRzLnB1c2goXCJjYW5ub3QtYmUtY2FwdHVyZWRcIik7XG4gIGlmICh2YWx1ZSAmIENhcHR1cmVGbGFnLkVOX1BBU1NBTlQpIHBhcnRzLnB1c2goXCJlbi1wYXNzYW50XCIpO1xuICByZXR1cm4gcGFydHMubGVuZ3RoID4gMCA/IHBhcnRzLmpvaW4oXCIsIFwiKSA6IFwibm8gZmxhZ3NcIjtcbn1cblxuZXhwb3J0IGNvbnN0IENBUFRVUkVfRkxBR1NfREVTQ1JJUFRPUjogTW9kaWZpZXJEZXNjcmlwdG9yPFZhbHVlPiA9IHtcbiAgaWQ6IFwiY2FwdHVyZS1mbGFnc1wiLFxuICBhdHRyTmFtZTogXCJDYXB0dXJlRmxhZ3NcIixcbiAgbGFiZWw6IFwiQ2FwdHVyZSBCZWhhdmlvclwiLFxuICB2YWx1ZVNjaGVtYTogc2NoZW1hLFxuICBzdGFja2luZ1J1bGU6IFwidW5pb25cIiwgIC8vIGJpdHdpc2UgT1IgZm9yIHN0YWNraW5nXG4gIHVpRm9ybTogXCJjYXB0dXJlLWZsYWdzXCIsXG4gIGFwcGx5KHNlc3Npb246IFNlc3Npb24sIHBpZWNlSWQ6IEVudGl0eUlkLCBlZmZlY3RpdmVWYWx1ZTogVmFsdWUpOiB2b2lkIHtcbiAgICBzZXNzaW9uLmluc2VydChwaWVjZUlkLCBcIkNhcHR1cmVGbGFnc1wiLCBlZmZlY3RpdmVWYWx1ZSk7XG4gIH0sXG4gIGRlc2NyaWJlOiBkZXNjcmliZUZsYWdzLFxufTtcblxuTU9ESUZJRVJfUkVHSVNUUlkucmVnaXN0ZXIoQ0FQVFVSRV9GTEFHU19ERVNDUklQVE9SKTtcblxuLyoqIENoZWNrIGlmIGEgcGllY2UgaGFzIGEgc3BlY2lmaWMgY2FwdHVyZSBmbGFnIHNldC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNDYXB0dXJlRmxhZyhzZXNzaW9uOiBTZXNzaW9uLCBwaWVjZUlkOiBFbnRpdHlJZCwgZmxhZzogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGNvbnN0IGZsYWdzID0gc2Vzc2lvbi5nZXQocGllY2VJZCwgXCJDYXB0dXJlRmxhZ3NcIik7XG4gIHJldHVybiB0eXBlb2YgZmxhZ3MgPT09IFwibnVtYmVyXCIgJiYgKGZsYWdzICYgZmxhZykgIT09IDA7XG59XG4iXSwiZmlsZSI6Ii9zcmMvbW9kaWZpZXJzL2Rlc2NyaXB0b3JzL2NhcHR1cmUtZmxhZ3MudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/bf4236e14121cc1c3653c6bb560b81d033db9116 b/7xOfJqsDU787fe61oSCq1/web/bf4236e14121cc1c3653c6bb560b81d033db9116 deleted file mode 100644 index 8da9651..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/bf4236e14121cc1c3653c6bb560b81d033db9116 +++ /dev/null @@ -1,270 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "GameClient", { enumerable: true, configurable: true, get(){ try { return GameClient } catch {} }}); -const PROTOCOL_VERSION = 1; -class GameClient { - // Configuration (immutable after construction). - url; - maxReconnectAttempts; - baseReconnectDelayMs; - maxReconnectDelayMs; - WSCtor; - scheduleTimer; - cancelTimer; - // Session state. - ws = null; - code = null; - token = null; - lastSeq = 0; - clientSeq = 0; - reconnectAttempts = 0; - reconnectTimer = null; - // `closed` is set when close() is called: it suppresses auto-reconnect. - closed = false; - // Listeners keyed by event type. - listeners = /* @__PURE__ */ new Map(); - constructor(url, options = {}) { - this.url = url; - this.maxReconnectAttempts = options.maxReconnectAttempts ?? 10; - this.baseReconnectDelayMs = options.baseReconnectDelayMs ?? 1e3; - this.maxReconnectDelayMs = options.maxReconnectDelayMs ?? 3e4; - const wsCtor = options.WebSocketCtor ?? globalThis.WebSocket; - if (typeof wsCtor !== "function") { - throw new Error( - "GameClient: no WebSocket constructor available (pass WebSocketCtor in options)" - ); - }; - this.WSCtor = wsCtor; - this.scheduleTimer = options.setTimeoutFn ?? ((cb, ms) => globalThis.setTimeout(cb, ms)); - this.cancelTimer = options.clearTimeoutFn ?? ((handle) => { - globalThis.clearTimeout(handle); - }); - } - // ------------------------------------------------------------------------- - // Event API - // ------------------------------------------------------------------------- - on(type, listener) { - const arr = this.listeners.get(type); - const cast = listener; - if (arr) arr.push(cast); - else this.listeners.set(type, [cast]); - } - off(type, listener) { - const arr = this.listeners.get(type); - if (!arr) return; - const cast = listener; - const idx = arr.indexOf(cast); - if (idx >= 0) arr.splice(idx, 1); - } - // ------------------------------------------------------------------------- - // Connection API - // ------------------------------------------------------------------------- - /** - * Open a WebSocket, send `room.join` with the given token, and resolve once - * the socket is open. The promise rejects only if the FIRST connection - * attempt fails (subsequent drops trigger the reconnect state machine). - * - * Callers who don't yet have a token (creating a fresh room) can call - * `connectAndCreate()` instead. - */ - async connect(code, token) { - this.code = code; - this.token = token; - this.closed = false; - this.reconnectAttempts = 0; - return this.openConnection({ autoJoin: true }); - } - /** - * Open a WebSocket and send `room.create` without a token. The resulting - * `room.created` event will carry the server-issued token; consumers should - * listen for that to capture it (or use `connect()` once they have one). - */ - async connectAndCreate(rulesetIds = []) { - this.code = null; - this.token = null; - this.closed = false; - this.reconnectAttempts = 0; - return this.openConnection({ autoCreate: rulesetIds }); - } - /** - * Close the socket permanently. Suppresses auto-reconnect. - */ - close() { - this.closed = true; - if (this.reconnectTimer !== null) { - this.cancelTimer(this.reconnectTimer); - this.reconnectTimer = null; - }; - this.ws?.close(); - this.ws = null; - } - // ------------------------------------------------------------------------- - // Send API - // ------------------------------------------------------------------------- - /** - * Send a raw client message. The envelope (v/seq/ts) is added automatically. - * Messages sent while the socket is not OPEN are silently dropped; callers - * that need durability should queue at a higher layer. - */ - send(partial, token) { - const socket = this.ws; - if (!socket || socket.readyState !== this.WSCtor.OPEN) return; - const effectiveToken = token ?? this.token ?? void 0; - const envelope = { - v: PROTOCOL_VERSION, - seq: ++this.clientSeq, - ts: Date.now(), - type: partial.type, - payload: partial.payload, - ...effectiveToken !== void 0 ? { token: effectiveToken } : {} - }; - socket.send(JSON.stringify(envelope)); - } - /** Convenience: send a `game.move` with the stored token. */ - sendMove(from, to, promoteTo) { - const payload = promoteTo !== void 0 ? { from, to, promoteTo } : { from, to }; - this.send({ type: "game.move", payload }); - } - /** - * Convenience: send `room.setPresets` to replace the room's entire - * active preset set. The server validates and — on success — - * broadcasts `game.presets` to both players; on failure the caller - * gets a non-fatal `error` event with `INVALID_MESSAGE`. - */ - sendSetPresets(activations) { - const payload = { activations }; - this.send({ type: "room.setPresets", payload }); - } - // ------------------------------------------------------------------------- - // Accessors (primarily for tests & reconnect logic) - // ------------------------------------------------------------------------- - get currentSeq() { - return this.lastSeq; - } - get isConnected() { - return this.ws !== null && this.ws.readyState === this.WSCtor.OPEN; - } - get currentToken() { - return this.token; - } - get currentCode() { - return this.code; - } - // ------------------------------------------------------------------------- - // Internals - // ------------------------------------------------------------------------- - openConnection(bootstrap = {}) { - return new Promise((resolve, reject) => { - let settled = false; - const ws = new this.WSCtor(this.url); - this.ws = ws; - ws.onopen = () => { - this.reconnectAttempts = 0; - this.emit({ type: "connected" }); - if (!settled) { - settled = true; - resolve(); - }; - if (bootstrap.autoJoin && this.code !== null) { - this.send( - { type: "room.join", payload: { code: this.code } }, - this.token ?? void 0 - ); - } else if (bootstrap.autoCreate !== void 0) { - const payload = bootstrap.autoCreate.length > 0 ? { rulesetIds: bootstrap.autoCreate } : {}; - this.send({ type: "room.create", payload }); - } - }; - ws.onmessage = (event) => { - const data = event.data; - if (typeof data === "string") this.handleIncoming(data); - }; - ws.onerror = () => { - if (!settled) { - settled = true; - reject(new Error("WebSocket connection failed")); - } - }; - ws.onclose = () => { - const willReconnect = !this.closed && this.reconnectAttempts < this.maxReconnectAttempts; - this.emit({ type: "disconnected", willReconnect }); - this.ws = null; - if (willReconnect) this.scheduleReconnect(); - }; - }); - } - scheduleReconnect() { - if (this.closed) return; - if (this.reconnectAttempts >= this.maxReconnectAttempts) return; - const attempt = this.reconnectAttempts; - this.reconnectAttempts += 1; - const delay = Math.min( - this.baseReconnectDelayMs * Math.pow(2, attempt), - this.maxReconnectDelayMs - ); - this.reconnectTimer = this.scheduleTimer(() => { - this.reconnectTimer = null; - if (this.closed) return; - if (this.code === null) return; - this.openConnection({ autoJoin: true }).catch(() => { - }); - }, delay); - } - handleIncoming(raw) { - let parsed; - try { - parsed = JSON.parse(raw); - } catch { - return; - }; - if (typeof parsed !== "object" || parsed === null) return; - const msg = parsed; - if (typeof msg.seq === "number" && msg.seq > this.lastSeq) { - this.lastSeq = msg.seq; - }; - if (typeof msg.type !== "string") return; - this.captureAuth(msg); - this.dispatchServerMessage(msg.type, msg.payload); - } - captureAuth(msg) { - if (msg.type !== "room.created" && msg.type !== "room.joined") return; - const p = msg.payload; - if (typeof p !== "object" || p === null) return; - const rec = p; - if (typeof rec.code === "string") this.code = rec.code; - if (typeof rec.token === "string") this.token = rec.token; - } - dispatchServerMessage(type, payload) { - switch (type) { - case "game.state": - this.emit({ type, payload }); - return; - case "game.delta": - this.emit({ type, payload }); - return; - case "game.end": - this.emit({ type, payload }); - return; - case "game.presets": - this.emit({ type, payload }); - return; - case "room.created": - this.emit({ type, payload }); - return; - case "room.joined": - this.emit({ type, payload }); - return; - case "error": - this.emit({ type, payload }); - return; - default: - return; - } - } - emit(event) { - const arr = this.listeners.get(event.type); - if (!arr) return; - for (const listener of arr.slice()) listener(event); - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFzQixNQUFjLFNBQXdCO0FBSWxFLFlBQVEsTUFBTTtBQUFBLE1BQ1osS0FBSztBQUNILGFBQUssS0FBSyxFQUFFLE1BQU0sUUFBcUMsQ0FBQztBQUN4RDtBQUFBLE1BQ0YsS0FBSztBQUNILGFBQUssS0FBSyxFQUFFLE1BQU0sUUFBcUMsQ0FBQztBQUN4RDtBQUFBLE1BQ0YsS0FBSztBQUNILGFBQUssS0FBSyxFQUFFLE1BQU0sUUFBbUMsQ0FBQztBQUN0RDtBQUFBLE1BQ0YsS0FBSztBQUNILGFBQUssS0FBSyxFQUFFLE1BQU0sUUFBdUMsQ0FBQztBQUMxRDtBQUFBLE1BQ0YsS0FBSztBQUNILGFBQUssS0FBSyxFQUFFLE1BQU0sUUFBdUMsQ0FBQztBQUMxRDtBQUFBLE1BQ0YsS0FBSztBQUNILGFBQUssS0FBSyxFQUFFLE1BQU0sUUFBc0MsQ0FBQztBQUN6RDtBQUFBLE1BQ0YsS0FBSztBQUNILGFBQUssS0FBSyxFQUFFLE1BQU0sUUFBaUMsQ0FBQztBQUNwRDtBQUFBLE1BQ0Y7QUFHRTtBQUFBLElBQ0o7QUFBQSxFQUNGO0FBQUEsRUFLUSxLQUFLLE9BQThCO0FBQ3pDLFVBQU0sTUFBTSxLQUFLLFVBQVUsSUFBSSxNQUFNLElBQUk7QUFDekMsUUFBSSxDQUFDLElBQUs7QUFHVixlQUFXLFlBQVksSUFBSSxNQUFNLEVBQUcsVUFBUyxLQUFLO0FBQUEsRUFDcEQ7QUFDRiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiY2xpZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFdlYlNvY2tldCBjbGllbnQgbGlicmFyeSBmb3IgdGhlIGNoZXNzIHNlcnZlci5cbi8vXG4vLyBSZXNwb25zaWJpbGl0aWVzOlxuLy8gICAqIE9wZW4vY2xvc2UgYSBXZWJTb2NrZXQgY29ubmVjdGlvbiB0byB0aGUgZ2FtZSBzZXJ2ZXJcbi8vICAgKiBBdXRoZW50aWNhdGUgdmlhIHJvb20uY3JlYXRlIC8gcm9vbS5qb2luICh0b2tlbiBtYW5hZ2VkIGludGVybmFsbHkpXG4vLyAgICogVHJhY2sgc2VydmVyIGBzZXFgIG51bWJlcnMgZm9yIHJlY29ubmVjdCByZWNvbmNpbGlhdGlvblxuLy8gICAqIEVtaXQgdHlwZWQgZXZlbnRzIGZvciBldmVyeSBzZXJ2ZXIgbWVzc2FnZSArIGNvbm5lY3Rpb24gbGlmZWN5Y2xlXG4vLyAgICogUmVjb25uZWN0IG9uIHVuZXhwZWN0ZWQgY2xvc2Ugd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmXG4vL1xuLy8gVGhlIGNsaWVudCBpcyBpbnRlbnRpb25hbGx5IGR1bWI6IGl0IGRvZXMgTk9UIGtlZXAgZ2FtZSBzdGF0ZSwgaXQgZG9lcyBOT1Rcbi8vIHByZWRpY3QgbW92ZXMgKHRoYXQncyBQNC4xMCkuIEl0IGlzIGEgdGhpbiwgdHlwZWQgdHJhbnNwb3J0LlxuXG5pbXBvcnQgdHlwZSB7XG4gIENsaWVudE1lc3NhZ2UsXG4gIEVycm9yUGF5bG9hZCxcbiAgR2FtZURlbHRhUGF5bG9hZCxcbiAgR2FtZUVuZFBheWxvYWQsXG4gIEdhbWVNb3ZlUGF5bG9hZCxcbiAgR2FtZVByZXNldHNQYXlsb2FkLFxuICBHYW1lU3RhdGVQYXlsb2FkLFxuICBQcmVzZXRBY3RpdmF0aW9uLFxuICBQcm9tb3Rpb25QaWVjZSxcbiAgUm9vbUNyZWF0ZWRQYXlsb2FkLFxuICBSb29tSm9pbmVkUGF5bG9hZCxcbiAgUm9vbVNldFByZXNldHNQYXlsb2FkLFxufSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEV2ZW50IHN1cmZhY2Vcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBHYW1lQ2xpZW50RXZlbnQgPVxuICB8IHsgdHlwZTogXCJnYW1lLnN0YXRlXCI7IHBheWxvYWQ6IEdhbWVTdGF0ZVBheWxvYWQgfVxuICB8IHsgdHlwZTogXCJnYW1lLmRlbHRhXCI7IHBheWxvYWQ6IEdhbWVEZWx0YVBheWxvYWQgfVxuICB8IHsgdHlwZTogXCJnYW1lLmVuZFwiOyBwYXlsb2FkOiBHYW1lRW5kUGF5bG9hZCB9XG4gIHwgeyB0eXBlOiBcImdhbWUucHJlc2V0c1wiOyBwYXlsb2FkOiBHYW1lUHJlc2V0c1BheWxvYWQgfVxuICB8IHsgdHlwZTogXCJyb29tLmNyZWF0ZWRcIjsgcGF5bG9hZDogUm9vbUNyZWF0ZWRQYXlsb2FkIH1cbiAgfCB7IHR5cGU6IFwicm9vbS5qb2luZWRcIjsgcGF5bG9hZDogUm9vbUpvaW5lZFBheWxvYWQgfVxuICB8IHsgdHlwZTogXCJlcnJvclwiOyBwYXlsb2FkOiBFcnJvclBheWxvYWQgfVxuICB8IHsgdHlwZTogXCJjb25uZWN0ZWRcIiB9XG4gIHwgeyB0eXBlOiBcImRpc2Nvbm5lY3RlZFwiOyB3aWxsUmVjb25uZWN0OiBib29sZWFuIH07XG5cbmV4cG9ydCB0eXBlIEdhbWVDbGllbnRFdmVudFR5cGUgPSBHYW1lQ2xpZW50RXZlbnRbXCJ0eXBlXCJdO1xuXG50eXBlIEV2ZW50T2ZUeXBlPFQgZXh0ZW5kcyBHYW1lQ2xpZW50RXZlbnRUeXBlPiA9IEV4dHJhY3Q8XG4gIEdhbWVDbGllbnRFdmVudCxcbiAgeyB0eXBlOiBUIH1cbj47XG5cbnR5cGUgTGlzdGVuZXI8VCBleHRlbmRzIEdhbWVDbGllbnRFdmVudFR5cGU+ID0gKGV2ZW50OiBFdmVudE9mVHlwZTxUPikgPT4gdm9pZDtcblxuLy8gSGV0ZXJvZ2VuZW91cyBpbnRlcm5hbCBsaXN0ZW5lciBtYXAg4oCUIG5hcnJvd2VkIHZpYSB0aGUgcHVibGljIGBvbigpYCBBUEkuXG4vLyBVc2luZyBgdW5rbm93bmAgYXZvaWRzIGBhbnlgIHdoaWxlIHN0aWxsIHBlcm1pdHRpbmcgb25lIG1hcCBmb3IgYWxsIHR5cGVzLlxudHlwZSBBbnlMaXN0ZW5lciA9IChldmVudDogR2FtZUNsaWVudEV2ZW50KSA9PiB2b2lkO1xuXG4vLyBTaGFwZSBlbWl0dGVkIHRvIGxpc3RlbmVycyBvZiBhIGxpZmVjeWNsZS1vbmx5IGV2ZW50LiBXZSBhY2NlcHQgdGhlc2UgdHdvXG4vLyBzaGFwZXMgd2hlbiBjYWxsZXJzIGludm9rZSBgZW1pdCgpYCBzbyB0aGUgY29tcGlsZXIgc3RheXMgaG9uZXN0IGFib3V0IHRoZVxuLy8gZGlzY3JpbWluYXRlZCB1bmlvbiB3aXRob3V0IHJlc29ydGluZyB0byBjYXN0cy5cbmludGVyZmFjZSBMaWZlY3ljbGVDb25uZWN0ZWQge1xuICB0eXBlOiBcImNvbm5lY3RlZFwiO1xufVxuaW50ZXJmYWNlIExpZmVjeWNsZURpc2Nvbm5lY3RlZCB7XG4gIHR5cGU6IFwiZGlzY29ubmVjdGVkXCI7XG4gIHdpbGxSZWNvbm5lY3Q6IGJvb2xlYW47XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ29uZmlndXJhdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgR2FtZUNsaWVudE9wdGlvbnMge1xuICAvKiogTWF4IG51bWJlciBvZiBjb25zZWN1dGl2ZSByZWNvbm5lY3QgYXR0ZW1wdHMgYmVmb3JlIGdpdmluZyB1cC4gKi9cbiAgbWF4UmVjb25uZWN0QXR0ZW1wdHM/OiBudW1iZXI7XG4gIC8qKiBCYXNlIGRlbGF5IGluIG1zIChkb3VibGVkIGVhY2ggYXR0ZW1wdCkuICovXG4gIGJhc2VSZWNvbm5lY3REZWxheU1zPzogbnVtYmVyO1xuICAvKiogVXBwZXIgYm91bmQgb24gYW55IHNpbmdsZSBiYWNrb2ZmIGRlbGF5LiAqL1xuICBtYXhSZWNvbm5lY3REZWxheU1zPzogbnVtYmVyO1xuICAvKiogV2ViU29ja2V0IGNvbnN0cnVjdG9yIHRvIHVzZS4gRGVmYXVsdHMgdG8gZ2xvYmFsVGhpcy5XZWJTb2NrZXQuIFVzZWQgZm9yIHRlc3RzLiAqL1xuICBXZWJTb2NrZXRDdG9yPzogdHlwZW9mIFdlYlNvY2tldDtcbiAgLyoqIFNjaGVkdWxlciBmb3IgZGVsYXllZCByZWNvbm5lY3QuIERlZmF1bHRzIHRvIHNldFRpbWVvdXQuIFVzZWQgZm9yIHRlc3RzLiAqL1xuICBzZXRUaW1lb3V0Rm4/OiAoY2I6ICgpID0+IHZvaWQsIG1zOiBudW1iZXIpID0+IHVua25vd247XG4gIC8qKiBDYW5jZWxsYXRpb24gZm9yIGBzZXRUaW1lb3V0Rm5gLiBEZWZhdWx0cyB0byBjbGVhclRpbWVvdXQuIFVzZWQgZm9yIHRlc3RzLiAqL1xuICBjbGVhclRpbWVvdXRGbj86IChoYW5kbGU6IHVua25vd24pID0+IHZvaWQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRW52ZWxvcGUgZmFjdG9yeVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IFBST1RPQ09MX1ZFUlNJT04gPSAxIGFzIGNvbnN0O1xuXG5pbnRlcmZhY2UgT3V0Z29pbmdFbnZlbG9wZSB7XG4gIHY6IDE7XG4gIHNlcTogbnVtYmVyO1xuICB0czogbnVtYmVyO1xuICB0eXBlOiBzdHJpbmc7XG4gIHRva2VuPzogc3RyaW5nO1xuICBwYXlsb2FkOiB1bmtub3duO1xufVxuXG4vLyBNaW5pbWFsIHNlcnZlci1tZXNzYWdlIHNoYXBlIHdlIGFjdHVhbGx5IHJlYWQgYXQgdGhpcyBsYXllci4gRnVsbCB2YWxpZGF0aW9uXG4vLyBpcyBub3QgcmUtZG9uZSBvbiB0aGUgY2xpZW50IOKAlCB0aGUgc2VydmVyIGlzIGF1dGhvcml0YXRpdmUgYW5kIHNjaGVtYS1cbi8vIGNoZWNrZWQ7IHRoZSBjbGllbnQgdHJ1c3RzIGB0eXBlYC9gcGF5bG9hZGAvYHNlcWAgcHJlc2VuY2UgYW5kIGZvcndhcmRzLlxuaW50ZXJmYWNlIEluY29taW5nRW52ZWxvcGUge1xuICB0eXBlPzogdW5rbm93bjtcbiAgc2VxPzogdW5rbm93bjtcbiAgcGF5bG9hZD86IHVua25vd247XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gR2FtZUNsaWVudFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjbGFzcyBHYW1lQ2xpZW50IHtcbiAgLy8gQ29uZmlndXJhdGlvbiAoaW1tdXRhYmxlIGFmdGVyIGNvbnN0cnVjdGlvbikuXG4gIHByaXZhdGUgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4UmVjb25uZWN0QXR0ZW1wdHM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBiYXNlUmVjb25uZWN0RGVsYXlNczogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IG1heFJlY29ubmVjdERlbGF5TXM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBXU0N0b3I6IHR5cGVvZiBXZWJTb2NrZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2NoZWR1bGVUaW1lcjogKGNiOiAoKSA9PiB2b2lkLCBtczogbnVtYmVyKSA9PiB1bmtub3duO1xuICBwcml2YXRlIHJlYWRvbmx5IGNhbmNlbFRpbWVyOiAoaGFuZGxlOiB1bmtub3duKSA9PiB2b2lkO1xuXG4gIC8vIFNlc3Npb24gc3RhdGUuXG4gIHByaXZhdGUgd3M6IFdlYlNvY2tldCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNvZGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBsYXN0U2VxID0gMDtcbiAgcHJpdmF0ZSBjbGllbnRTZXEgPSAwO1xuICBwcml2YXRlIHJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgcHJpdmF0ZSByZWNvbm5lY3RUaW1lcjogdW5rbm93biA9IG51bGw7XG4gIC8vIGBjbG9zZWRgIGlzIHNldCB3aGVuIGNsb3NlKCkgaXMgY2FsbGVkOiBpdCBzdXBwcmVzc2VzIGF1dG8tcmVjb25uZWN0LlxuICBwcml2YXRlIGNsb3NlZCA9IGZhbHNlO1xuXG4gIC8vIExpc3RlbmVycyBrZXllZCBieSBldmVudCB0eXBlLlxuICBwcml2YXRlIHJlYWRvbmx5IGxpc3RlbmVycyA9IG5ldyBNYXA8R2FtZUNsaWVudEV2ZW50VHlwZSwgQW55TGlzdGVuZXJbXT4oKTtcblxuICBjb25zdHJ1Y3Rvcih1cmw6IHN0cmluZywgb3B0aW9uczogR2FtZUNsaWVudE9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMudXJsID0gdXJsO1xuICAgIHRoaXMubWF4UmVjb25uZWN0QXR0ZW1wdHMgPSBvcHRpb25zLm1heFJlY29ubmVjdEF0dGVtcHRzID8/IDEwO1xuICAgIHRoaXMuYmFzZVJlY29ubmVjdERlbGF5TXMgPSBvcHRpb25zLmJhc2VSZWNvbm5lY3REZWxheU1zID8/IDEwMDA7XG4gICAgdGhpcy5tYXhSZWNvbm5lY3REZWxheU1zID0gb3B0aW9ucy5tYXhSZWNvbm5lY3REZWxheU1zID8/IDMwXzAwMDtcblxuICAgIC8vIFJlc29sdmUgV2ViU29ja2V0IC8gdGltZXIgcHJpbWl0aXZlcyBmcm9tIG9wdGlvbnMgd2l0aCBzZW5zaWJsZSBnbG9iYWxcbiAgICAvLyBmYWxsYmFja3MuIFRoaXMgaXMgdGhlIGluamVjdGlvbiBzZWFtIHVzZWQgYnkgdGhlIHRlc3QgaGFybmVzcy5cbiAgICBjb25zdCB3c0N0b3IgPSBvcHRpb25zLldlYlNvY2tldEN0b3IgPz8gZ2xvYmFsVGhpcy5XZWJTb2NrZXQ7XG4gICAgaWYgKHR5cGVvZiB3c0N0b3IgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkdhbWVDbGllbnQ6IG5vIFdlYlNvY2tldCBjb25zdHJ1Y3RvciBhdmFpbGFibGUgKHBhc3MgV2ViU29ja2V0Q3RvciBpbiBvcHRpb25zKVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5XU0N0b3IgPSB3c0N0b3I7XG4gICAgdGhpcy5zY2hlZHVsZVRpbWVyID1cbiAgICAgIG9wdGlvbnMuc2V0VGltZW91dEZuID8/XG4gICAgICAoKGNiLCBtcykgPT4gZ2xvYmFsVGhpcy5zZXRUaW1lb3V0KGNiLCBtcykgYXMgdW5rbm93bik7XG4gICAgdGhpcy5jYW5jZWxUaW1lciA9XG4gICAgICBvcHRpb25zLmNsZWFyVGltZW91dEZuID8/XG4gICAgICAoKGhhbmRsZSkgPT4ge1xuICAgICAgICBnbG9iYWxUaGlzLmNsZWFyVGltZW91dChoYW5kbGUgYXMgUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4pO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEV2ZW50IEFQSVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgb248VCBleHRlbmRzIEdhbWVDbGllbnRFdmVudFR5cGU+KHR5cGU6IFQsIGxpc3RlbmVyOiBMaXN0ZW5lcjxUPik6IHZvaWQge1xuICAgIGNvbnN0IGFyciA9IHRoaXMubGlzdGVuZXJzLmdldCh0eXBlKTtcbiAgICAvLyBXZSB1cC1jYXN0IHRvIEFueUxpc3RlbmVyIGhlcmUgYmVjYXVzZSB0aGUgbWFwIGlzIGhldGVyb2dlbmVvdXM7IHRoZVxuICAgIC8vIHB1YmxpYyBgb25gIHNpZ25hdHVyZSBndWFyYW50ZWVzIGVhY2ggbGlzdGVuZXIgb25seSBldmVyIHJlY2VpdmVzIGl0c1xuICAgIC8vIG93biBkaXNjcmltaW5hdGVkIHZhcmlhbnQsIHdoaWNoIHdlIGVuZm9yY2UgYXQgYGVtaXQoKWAgc2l0ZXMuXG4gICAgY29uc3QgY2FzdCA9IGxpc3RlbmVyIGFzIHVua25vd24gYXMgQW55TGlzdGVuZXI7XG4gICAgaWYgKGFycikgYXJyLnB1c2goY2FzdCk7XG4gICAgZWxzZSB0aGlzLmxpc3RlbmVycy5zZXQodHlwZSwgW2Nhc3RdKTtcbiAgfVxuXG4gIG9mZjxUIGV4dGVuZHMgR2FtZUNsaWVudEV2ZW50VHlwZT4odHlwZTogVCwgbGlzdGVuZXI6IExpc3RlbmVyPFQ+KTogdm9pZCB7XG4gICAgY29uc3QgYXJyID0gdGhpcy5saXN0ZW5lcnMuZ2V0KHR5cGUpO1xuICAgIGlmICghYXJyKSByZXR1cm47XG4gICAgY29uc3QgY2FzdCA9IGxpc3RlbmVyIGFzIHVua25vd24gYXMgQW55TGlzdGVuZXI7XG4gICAgY29uc3QgaWR4ID0gYXJyLmluZGV4T2YoY2FzdCk7XG4gICAgaWYgKGlkeCA+PSAwKSBhcnIuc3BsaWNlKGlkeCwgMSk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIENvbm5lY3Rpb24gQVBJXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogT3BlbiBhIFdlYlNvY2tldCwgc2VuZCBgcm9vbS5qb2luYCB3aXRoIHRoZSBnaXZlbiB0b2tlbiwgYW5kIHJlc29sdmUgb25jZVxuICAgKiB0aGUgc29ja2V0IGlzIG9wZW4uIFRoZSBwcm9taXNlIHJlamVjdHMgb25seSBpZiB0aGUgRklSU1QgY29ubmVjdGlvblxuICAgKiBhdHRlbXB0IGZhaWxzIChzdWJzZXF1ZW50IGRyb3BzIHRyaWdnZXIgdGhlIHJlY29ubmVjdCBzdGF0ZSBtYWNoaW5lKS5cbiAgICpcbiAgICogQ2FsbGVycyB3aG8gZG9uJ3QgeWV0IGhhdmUgYSB0b2tlbiAoY3JlYXRpbmcgYSBmcmVzaCByb29tKSBjYW4gY2FsbFxuICAgKiBgY29ubmVjdEFuZENyZWF0ZSgpYCBpbnN0ZWFkLlxuICAgKi9cbiAgYXN5bmMgY29ubmVjdChjb2RlOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIHJldHVybiB0aGlzLm9wZW5Db25uZWN0aW9uKHsgYXV0b0pvaW46IHRydWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbiBhIFdlYlNvY2tldCBhbmQgc2VuZCBgcm9vbS5jcmVhdGVgIHdpdGhvdXQgYSB0b2tlbi4gVGhlIHJlc3VsdGluZ1xuICAgKiBgcm9vbS5jcmVhdGVkYCBldmVudCB3aWxsIGNhcnJ5IHRoZSBzZXJ2ZXItaXNzdWVkIHRva2VuOyBjb25zdW1lcnMgc2hvdWxkXG4gICAqIGxpc3RlbiBmb3IgdGhhdCB0byBjYXB0dXJlIGl0IChvciB1c2UgYGNvbm5lY3QoKWAgb25jZSB0aGV5IGhhdmUgb25lKS5cbiAgICovXG4gIGFzeW5jIGNvbm5lY3RBbmRDcmVhdGUocnVsZXNldElkczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY29kZSA9IG51bGw7XG4gICAgdGhpcy50b2tlbiA9IG51bGw7XG4gICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAvLyBVc2UgYSBvbmUtc2hvdCBib290c3RyYXAgdGhhdCBmaXJlcyByb29tLmNyZWF0ZSBpbnN0ZWFkIG9mIHJvb20uam9pblxuICAgIC8vIGFmdGVyIHRoZSBzb2NrZXQgb3BlbnMuIFdlIGtlZXAgdGhlIGJvb3RzdHJhcCBsb2NhbCB0byBhdm9pZCBsZWFraW5nXG4gICAgLy8gY3JlYXRlLW9ubHkgc3RhdGUgb250byB0aGUgaW5zdGFuY2UuIERlZmF1bHQgdG8gW10gKG5vdCB1bmRlZmluZWQpIHNvXG4gICAgLy8gYG9wZW5Db25uZWN0aW9uYCdzIGBhdXRvQ3JlYXRlICE9PSB1bmRlZmluZWRgIGdhdGUgZmlyZXMgb24gZW1wdHktYXJncy5cbiAgICByZXR1cm4gdGhpcy5vcGVuQ29ubmVjdGlvbih7IGF1dG9DcmVhdGU6IHJ1bGVzZXRJZHMgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgdGhlIHNvY2tldCBwZXJtYW5lbnRseS4gU3VwcHJlc3NlcyBhdXRvLXJlY29ubmVjdC5cbiAgICovXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5yZWNvbm5lY3RUaW1lciAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5jYW5jZWxUaW1lcih0aGlzLnJlY29ubmVjdFRpbWVyKTtcbiAgICAgIHRoaXMucmVjb25uZWN0VGltZXIgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLndzPy5jbG9zZSgpO1xuICAgIHRoaXMud3MgPSBudWxsO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBTZW5kIEFQSVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFNlbmQgYSByYXcgY2xpZW50IG1lc3NhZ2UuIFRoZSBlbnZlbG9wZSAodi9zZXEvdHMpIGlzIGFkZGVkIGF1dG9tYXRpY2FsbHkuXG4gICAqIE1lc3NhZ2VzIHNlbnQgd2hpbGUgdGhlIHNvY2tldCBpcyBub3QgT1BFTiBhcmUgc2lsZW50bHkgZHJvcHBlZDsgY2FsbGVyc1xuICAgKiB0aGF0IG5lZWQgZHVyYWJpbGl0eSBzaG91bGQgcXVldWUgYXQgYSBoaWdoZXIgbGF5ZXIuXG4gICAqL1xuICBzZW5kKHBhcnRpYWw6IHsgdHlwZTogc3RyaW5nOyBwYXlsb2FkOiB1bmtub3duIH0sIHRva2VuPzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgc29ja2V0ID0gdGhpcy53cztcbiAgICBpZiAoIXNvY2tldCB8fCBzb2NrZXQucmVhZHlTdGF0ZSAhPT0gdGhpcy5XU0N0b3IuT1BFTikgcmV0dXJuO1xuICAgIGNvbnN0IGVmZmVjdGl2ZVRva2VuID0gdG9rZW4gPz8gdGhpcy50b2tlbiA/PyB1bmRlZmluZWQ7XG4gICAgY29uc3QgZW52ZWxvcGU6IE91dGdvaW5nRW52ZWxvcGUgPSB7XG4gICAgICB2OiBQUk9UT0NPTF9WRVJTSU9OLFxuICAgICAgc2VxOiArK3RoaXMuY2xpZW50U2VxLFxuICAgICAgdHM6IERhdGUubm93KCksXG4gICAgICB0eXBlOiBwYXJ0aWFsLnR5cGUsXG4gICAgICBwYXlsb2FkOiBwYXJ0aWFsLnBheWxvYWQsXG4gICAgICAuLi4oZWZmZWN0aXZlVG9rZW4gIT09IHVuZGVmaW5lZCA/IHsgdG9rZW46IGVmZmVjdGl2ZVRva2VuIH0gOiB7fSksXG4gICAgfTtcbiAgICBzb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeShlbnZlbG9wZSkpO1xuICB9XG5cbiAgLyoqIENvbnZlbmllbmNlOiBzZW5kIGEgYGdhbWUubW92ZWAgd2l0aCB0aGUgc3RvcmVkIHRva2VuLiAqL1xuICBzZW5kTW92ZShmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcsIHByb21vdGVUbz86IFByb21vdGlvblBpZWNlKTogdm9pZCB7XG4gICAgY29uc3QgcGF5bG9hZDogR2FtZU1vdmVQYXlsb2FkID0gcHJvbW90ZVRvICE9PSB1bmRlZmluZWRcbiAgICAgID8geyBmcm9tLCB0bywgcHJvbW90ZVRvIH1cbiAgICAgIDogeyBmcm9tLCB0byB9O1xuICAgIHRoaXMuc2VuZCh7IHR5cGU6IFwiZ2FtZS5tb3ZlXCIsIHBheWxvYWQgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2U6IHNlbmQgYHJvb20uc2V0UHJlc2V0c2AgdG8gcmVwbGFjZSB0aGUgcm9vbSdzIGVudGlyZVxuICAgKiBhY3RpdmUgcHJlc2V0IHNldC4gVGhlIHNlcnZlciB2YWxpZGF0ZXMgYW5kIOKAlCBvbiBzdWNjZXNzIOKAlFxuICAgKiBicm9hZGNhc3RzIGBnYW1lLnByZXNldHNgIHRvIGJvdGggcGxheWVyczsgb24gZmFpbHVyZSB0aGUgY2FsbGVyXG4gICAqIGdldHMgYSBub24tZmF0YWwgYGVycm9yYCBldmVudCB3aXRoIGBJTlZBTElEX01FU1NBR0VgLlxuICAgKi9cbiAgc2VuZFNldFByZXNldHMoYWN0aXZhdGlvbnM6IFByZXNldEFjdGl2YXRpb25bXSk6IHZvaWQge1xuICAgIGNvbnN0IHBheWxvYWQ6IFJvb21TZXRQcmVzZXRzUGF5bG9hZCA9IHsgYWN0aXZhdGlvbnMgfTtcbiAgICB0aGlzLnNlbmQoeyB0eXBlOiBcInJvb20uc2V0UHJlc2V0c1wiLCBwYXlsb2FkIH0pO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBBY2Nlc3NvcnMgKHByaW1hcmlseSBmb3IgdGVzdHMgJiByZWNvbm5lY3QgbG9naWMpXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBnZXQgY3VycmVudFNlcSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmxhc3RTZXE7XG4gIH1cblxuICBnZXQgaXNDb25uZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMud3MgIT09IG51bGwgJiYgdGhpcy53cy5yZWFkeVN0YXRlID09PSB0aGlzLldTQ3Rvci5PUEVOO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbjtcbiAgfVxuXG4gIGdldCBjdXJyZW50Q29kZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jb2RlO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBJbnRlcm5hbHNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgb3BlbkNvbm5lY3Rpb24oXG4gICAgYm9vdHN0cmFwOiB7XG4gICAgICBhdXRvSm9pbj86IGJvb2xlYW47XG4gICAgICBhdXRvQ3JlYXRlPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgfSA9IHt9LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbGV0IHNldHRsZWQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHdzID0gbmV3IHRoaXMuV1NDdG9yKHRoaXMudXJsKTtcbiAgICAgIHRoaXMud3MgPSB3cztcblxuICAgICAgd3Mub25vcGVuID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgdGhpcy5lbWl0KHsgdHlwZTogXCJjb25uZWN0ZWRcIiB9KTtcbiAgICAgICAgaWYgKCFzZXR0bGVkKSB7XG4gICAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZpcmUgdGhlIGJvb3RzdHJhcCBtZXNzYWdlIEFGVEVSIHJlc29sdmluZyBzbyBjYWxsZXJzIHRoYXQgYXdhaXRcbiAgICAgICAgLy8gYGNvbm5lY3QoKWAgc2VlIHRoZSBvcGVuIHN0YXRlIHdoZW4gdGhlaXIgYXdhaXRlciBydW5zLlxuICAgICAgICBpZiAoYm9vdHN0cmFwLmF1dG9Kb2luICYmIHRoaXMuY29kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuc2VuZChcbiAgICAgICAgICAgIHsgdHlwZTogXCJyb29tLmpvaW5cIiwgcGF5bG9hZDogeyBjb2RlOiB0aGlzLmNvZGUgfSB9LFxuICAgICAgICAgICAgdGhpcy50b2tlbiA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChib290c3RyYXAuYXV0b0NyZWF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgcGF5bG9hZCA9XG4gICAgICAgICAgICBib290c3RyYXAuYXV0b0NyZWF0ZS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8geyBydWxlc2V0SWRzOiBib290c3RyYXAuYXV0b0NyZWF0ZSB9XG4gICAgICAgICAgICAgIDoge307XG4gICAgICAgICAgdGhpcy5zZW5kKHsgdHlwZTogXCJyb29tLmNyZWF0ZVwiLCBwYXlsb2FkIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB3cy5vbm1lc3NhZ2UgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgICAvLyBgZXZlbnQuZGF0YWAgaXMgdHlwZWQgYXMgYGFueWAgYnkgbGliLmRvbSDigJQgbmFycm93IGRlZmVuc2l2ZWx5LlxuICAgICAgICBjb25zdCBkYXRhID0gZXZlbnQuZGF0YTtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB0aGlzLmhhbmRsZUluY29taW5nKGRhdGEpO1xuICAgICAgfTtcblxuICAgICAgd3Mub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFzZXR0bGVkKSB7XG4gICAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIldlYlNvY2tldCBjb25uZWN0aW9uIGZhaWxlZFwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm9uLWluaXRpYWwgZXJyb3JzIGFyZSBoYW5kbGVkIHZpYSBvbmNsb3NlIChicm93c2VycyBmaXJlIGNsb3NlXG4gICAgICAgIC8vIGFmdGVyIGVycm9yIGZvciBhbnkgZmFpbGVkIGNvbm5lY3Rpb24pLiBObyBleHRyYSB3b3JrIGhlcmUuXG4gICAgICB9O1xuXG4gICAgICB3cy5vbmNsb3NlID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB3aWxsUmVjb25uZWN0ID1cbiAgICAgICAgICAhdGhpcy5jbG9zZWQgJiYgdGhpcy5yZWNvbm5lY3RBdHRlbXB0cyA8IHRoaXMubWF4UmVjb25uZWN0QXR0ZW1wdHM7XG4gICAgICAgIHRoaXMuZW1pdCh7IHR5cGU6IFwiZGlzY29ubmVjdGVkXCIsIHdpbGxSZWNvbm5lY3QgfSk7XG4gICAgICAgIC8vIFJlbGVhc2UgdGhlIHNvY2tldCBCRUZPUkUgc2NoZWR1bGluZyB0aGUgbmV4dCBhdHRlbXB0IHNvXG4gICAgICAgIC8vIGBpc0Nvbm5lY3RlZGAgcmVwb3J0cyBmYWxzZSBpbiBsaXN0ZW5lciBjYWxsYmFja3MuXG4gICAgICAgIHRoaXMud3MgPSBudWxsO1xuICAgICAgICBpZiAod2lsbFJlY29ubmVjdCkgdGhpcy5zY2hlZHVsZVJlY29ubmVjdCgpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2NoZWR1bGVSZWNvbm5lY3QoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMucmVjb25uZWN0QXR0ZW1wdHMgPj0gdGhpcy5tYXhSZWNvbm5lY3RBdHRlbXB0cykgcmV0dXJuO1xuICAgIGNvbnN0IGF0dGVtcHQgPSB0aGlzLnJlY29ubmVjdEF0dGVtcHRzO1xuICAgIHRoaXMucmVjb25uZWN0QXR0ZW1wdHMgKz0gMTtcbiAgICBjb25zdCBkZWxheSA9IE1hdGgubWluKFxuICAgICAgdGhpcy5iYXNlUmVjb25uZWN0RGVsYXlNcyAqIE1hdGgucG93KDIsIGF0dGVtcHQpLFxuICAgICAgdGhpcy5tYXhSZWNvbm5lY3REZWxheU1zLFxuICAgICk7XG4gICAgdGhpcy5yZWNvbm5lY3RUaW1lciA9IHRoaXMuc2NoZWR1bGVUaW1lcigoKSA9PiB7XG4gICAgICB0aGlzLnJlY29ubmVjdFRpbWVyID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgICAgLy8gUmVjb25uZWN0cyBhbHdheXMgcmUtc2VuZCByb29tLmpvaW4gd2l0aCB0aGUgc3RvcmVkIHRva2VuIOKAlCBhXG4gICAgICAvLyBjcmVhdGUtb25seSBjbGllbnQgdGhhdCBuZXZlciBjYXB0dXJlZCBhIHRva2VuIGNhbm5vdCBtZWFuaW5nZnVsbHlcbiAgICAgIC8vIHJlY29ubmVjdCwgc28gd2UgcmVxdWlyZSBgY29kZWAgdG8gYmUgc2V0LlxuICAgICAgaWYgKHRoaXMuY29kZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgdGhpcy5vcGVuQ29ubmVjdGlvbih7IGF1dG9Kb2luOiB0cnVlIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgLy8gRmFpbHVyZSBoZXJlIHdpbGwgaXRzZWxmIGZpcmUgb25jbG9zZSDihpIgcmVzY2hlZHVsZS4gU3dhbGxvd2luZ1xuICAgICAgICAvLyBhdm9pZHMgYW4gdW5oYW5kbGVkIHJlamVjdGlvbiBvbiBldmVyeSByZXRyeS5cbiAgICAgIH0pO1xuICAgIH0sIGRlbGF5KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlSW5jb21pbmcocmF3OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsZXQgcGFyc2VkOiB1bmtub3duO1xuICAgIHRyeSB7XG4gICAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47IC8vIE1hbGZvcm1lZCBmcmFtZXMgYXJlIHNpbGVudGx5IGlnbm9yZWQgYXQgdGhpcyBsYXllci5cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwYXJzZWQgIT09IFwib2JqZWN0XCIgfHwgcGFyc2VkID09PSBudWxsKSByZXR1cm47XG4gICAgY29uc3QgbXNnID0gcGFyc2VkIGFzIEluY29taW5nRW52ZWxvcGU7XG5cbiAgICBpZiAodHlwZW9mIG1zZy5zZXEgPT09IFwibnVtYmVyXCIgJiYgbXNnLnNlcSA+IHRoaXMubGFzdFNlcSkge1xuICAgICAgdGhpcy5sYXN0U2VxID0gbXNnLnNlcTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG1zZy50eXBlICE9PSBcInN0cmluZ1wiKSByZXR1cm47XG4gICAgLy8gQ2FwdHVyZSB0aGUgc2VydmVyLWlzc3VlZCB0b2tlbiBvbiByb29tLmNyZWF0ZWQgLyByb29tLmpvaW5lZCBzbyB0aGF0XG4gICAgLy8gc3Vic2VxdWVudCBzZW5kcyBhbmQgcmVjb25uZWN0cyBhcmUgYXV0aGVudGljYXRlZCB3aXRob3V0IHRoZSBjYWxsZXJcbiAgICAvLyBoYXZpbmcgdG8gd2lyZSBpdCB1cCBtYW51YWxseS5cbiAgICB0aGlzLmNhcHR1cmVBdXRoKG1zZyk7XG5cbiAgICB0aGlzLmRpc3BhdGNoU2VydmVyTWVzc2FnZShtc2cudHlwZSwgbXNnLnBheWxvYWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYXB0dXJlQXV0aChtc2c6IEluY29taW5nRW52ZWxvcGUpOiB2b2lkIHtcbiAgICBpZiAobXNnLnR5cGUgIT09IFwicm9vbS5jcmVhdGVkXCIgJiYgbXNnLnR5cGUgIT09IFwicm9vbS5qb2luZWRcIikgcmV0dXJuO1xuICAgIGNvbnN0IHAgPSBtc2cucGF5bG9hZDtcbiAgICBpZiAodHlwZW9mIHAgIT09IFwib2JqZWN0XCIgfHwgcCA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIGNvbnN0IHJlYyA9IHAgYXMgeyBjb2RlPzogdW5rbm93bjsgdG9rZW4/OiB1bmtub3duIH07XG4gICAgaWYgKHR5cGVvZiByZWMuY29kZSA9PT0gXCJzdHJpbmdcIikgdGhpcy5jb2RlID0gcmVjLmNvZGU7XG4gICAgaWYgKHR5cGVvZiByZWMudG9rZW4gPT09IFwic3RyaW5nXCIpIHRoaXMudG9rZW4gPSByZWMudG9rZW47XG4gIH1cblxuICBwcml2YXRlIGRpc3BhdGNoU2VydmVyTWVzc2FnZSh0eXBlOiBzdHJpbmcsIHBheWxvYWQ6IHVua25vd24pOiB2b2lkIHtcbiAgICAvLyBUaGUgY2xpZW50IHRydXN0cyB0aGUgc2VydmVyJ3Mgc2NoZW1hOyB3ZSBkb24ndCByZXZhbGlkYXRlIGhlcmUuXG4gICAgLy8gRWFjaCBicmFuY2ggbmFycm93cyBgcGF5bG9hZGAgd2l0aCBhIGNhc3QgdGhhdCdzIHNwZWNpZmljIHRvIHRoZVxuICAgIC8vIGV2ZW50IHR5cGUgd2UncmUgY29uc3RydWN0aW5nLCBrZWVwaW5nIHRoZSB1bmlvbiBzb3VuZCBhdCBlbWl0IHNpdGVzLlxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcImdhbWUuc3RhdGVcIjpcbiAgICAgICAgdGhpcy5lbWl0KHsgdHlwZSwgcGF5bG9hZDogcGF5bG9hZCBhcyBHYW1lU3RhdGVQYXlsb2FkIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIFwiZ2FtZS5kZWx0YVwiOlxuICAgICAgICB0aGlzLmVtaXQoeyB0eXBlLCBwYXlsb2FkOiBwYXlsb2FkIGFzIEdhbWVEZWx0YVBheWxvYWQgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgXCJnYW1lLmVuZFwiOlxuICAgICAgICB0aGlzLmVtaXQoeyB0eXBlLCBwYXlsb2FkOiBwYXlsb2FkIGFzIEdhbWVFbmRQYXlsb2FkIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIFwiZ2FtZS5wcmVzZXRzXCI6XG4gICAgICAgIHRoaXMuZW1pdCh7IHR5cGUsIHBheWxvYWQ6IHBheWxvYWQgYXMgR2FtZVByZXNldHNQYXlsb2FkIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIFwicm9vbS5jcmVhdGVkXCI6XG4gICAgICAgIHRoaXMuZW1pdCh7IHR5cGUsIHBheWxvYWQ6IHBheWxvYWQgYXMgUm9vbUNyZWF0ZWRQYXlsb2FkIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIFwicm9vbS5qb2luZWRcIjpcbiAgICAgICAgdGhpcy5lbWl0KHsgdHlwZSwgcGF5bG9hZDogcGF5bG9hZCBhcyBSb29tSm9pbmVkUGF5bG9hZCB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBcImVycm9yXCI6XG4gICAgICAgIHRoaXMuZW1pdCh7IHR5cGUsIHBheWxvYWQ6IHBheWxvYWQgYXMgRXJyb3JQYXlsb2FkIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBVbmtub3duIG1lc3NhZ2UgdHlwZXMgYXJlIGlnbm9yZWQgKGZvcndhcmQtY29tcGF0aWJsZSB3aXRoIHNlcnZlcnNcbiAgICAgICAgLy8gdGhhdCBhZGQgbmV3IG1lc3NhZ2UgdHlwZXMg4oCUIHRoZXkncmUgYSBuby1vcCBvbiBvbGQgY2xpZW50cykuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVtaXQoZXZlbnQ6IEdhbWVDbGllbnRFdmVudCk6IHZvaWQ7XG4gIHByaXZhdGUgZW1pdChldmVudDogTGlmZWN5Y2xlQ29ubmVjdGVkKTogdm9pZDtcbiAgcHJpdmF0ZSBlbWl0KGV2ZW50OiBMaWZlY3ljbGVEaXNjb25uZWN0ZWQpOiB2b2lkO1xuICBwcml2YXRlIGVtaXQoZXZlbnQ6IEdhbWVDbGllbnRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGFyciA9IHRoaXMubGlzdGVuZXJzLmdldChldmVudC50eXBlKTtcbiAgICBpZiAoIWFycikgcmV0dXJuO1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhIGNvcHkgc28gbGlzdGVuZXJzIHRoYXQgY2FsbCBgb2ZmKClgIG1pZC1kaXNwYXRjaCBkb24ndFxuICAgIC8vIHNraXAgc3Vic2VxdWVudCBsaXN0ZW5lcnMuXG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBhcnIuc2xpY2UoKSkgbGlzdGVuZXIoZXZlbnQpO1xuICB9XG59XG5cbi8vIFJlLWV4cG9ydCB0aGUgQ2xpZW50TWVzc2FnZSB0eXBlIGZvciBjb252ZW5pZW5jZSAodW51c2VkIHJlLWV4cG9ydCBndWFyZGVkXG4vLyBieSB2ZXJiYXRpbU1vZHVsZVN5bnRheCB2aWEgYGV4cG9ydCB0eXBlYCkuXG5leHBvcnQgdHlwZSB7IENsaWVudE1lc3NhZ2UgfTtcbiJdLCJmaWxlIjoiL3NyYy9uZXQvY2xpZW50LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/bf4815f872de80b2dac8d80cf0878f2d60301520 b/7xOfJqsDU787fe61oSCq1/web/bf4815f872de80b2dac8d80cf0878f2d60301520 deleted file mode 100644 index b134d7c..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/bf4815f872de80b2dac8d80cf0878f2d60301520 +++ /dev/null @@ -1,186 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/presets/index.ts", {"importedNames":["PRESET_REGISTRY"]}); -const mkId = (n) => n; -function mkEngine(session) { - return { session }; -} -function getPreset(id) { - const found = __vite_ssr_import_2__.PRESET_REGISTRY.getAll().find((p) => p.id === id); - if (!found) throw new Error(`preset '${id}' not registered`); - return found; -} -function runExtras(preset, session, pieceId) { - return preset.getExtraMoves(mkEngine(session), pieceId); -} -function insertPiece(session, id, type, color, square) { - const eid = mkId(id); - session.insert(eid, "PieceType", type); - session.insert(eid, "Color", color); - session.insert(eid, "Position", square); - return eid; -} -(0,__vite_ssr_import_0__.describe)("Preset registry (P3.5)", () => { - (0,__vite_ssr_import_0__.it)("has at least 6 presets registered after loading index.ts", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.PRESET_REGISTRY.getAll().length).toBeGreaterThanOrEqual(6); - }); - (0,__vite_ssr_import_0__.it)("contains the three new presets", () => { - const ids = new Set(__vite_ssr_import_2__.PRESET_REGISTRY.getAll().map((p) => p.id)); - (0,__vite_ssr_import_0__.expect)(ids.has("knights-leap-twice")).toBe(true); - (0,__vite_ssr_import_0__.expect)(ids.has("bishops-ignore-color")).toBe(true); - (0,__vite_ssr_import_0__.expect)(ids.has("rook-warp")).toBe(true); - }); -}); -(0,__vite_ssr_import_0__.describe)("Preset: knights-leap-twice", () => { - const preset = getPreset("knights-leap-twice"); - (0,__vite_ssr_import_0__.it)("is registered with the expected metadata", () => { - (0,__vite_ssr_import_0__.expect)(preset).toBeDefined(); - (0,__vite_ssr_import_0__.expect)(preset.incompatibleWith).toEqual([]); - (0,__vite_ssr_import_0__.expect)(preset.requires).toEqual([]); - (0,__vite_ssr_import_0__.expect)(preset.getExtraMoves).toBeDefined(); - }); - (0,__vite_ssr_import_0__.it)("returns no extras for non-knight pieces", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const bishop = insertPiece(session, 1, "bishop", "white", 28); - const extras = runExtras(preset, session, bishop); - (0,__vite_ssr_import_0__.expect)(extras).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("knight on empty board gets extra two-leap destinations", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const knight = insertPiece(session, 1, "knight", "white", 28); - const extras = runExtras(preset, session, knight); - (0,__vite_ssr_import_0__.expect)(extras.length).toBeGreaterThan(0); - (0,__vite_ssr_import_0__.expect)(extras.every((m) => m.to !== 28)).toBe(true); - const singleLeaps = /* @__PURE__ */ new Set([11, 13, 18, 22, 34, 38, 43, 45]); - (0,__vite_ssr_import_0__.expect)(extras.every((m) => !singleLeaps.has(m.to))).toBe(true); - (0,__vite_ssr_import_0__.expect)(extras.every((m) => m.pieceId === knight && m.from === 28)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("skips routes whose intermediate square is occupied", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const knight = insertPiece(session, 1, "knight", "white", 1); - insertPiece(session, 2, "pawn", "white", 16); - const extras = runExtras(preset, session, knight); - (0,__vite_ssr_import_0__.expect)(extras.length).toBeGreaterThan(0); - }); - (0,__vite_ssr_import_0__.it)("two-leap extra that lands on an enemy is marked as capture", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const knight = insertPiece(session, 1, "knight", "white", 1); - insertPiece(session, 2, "rook", "black", 33); - const extras = runExtras(preset, session, knight); - const hit = extras.find((m) => m.to === 33); - (0,__vite_ssr_import_0__.expect)(hit).toBeDefined(); - (0,__vite_ssr_import_0__.expect)(hit.isCapture).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("two-leap cannot land on an ally", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const knight = insertPiece(session, 1, "knight", "white", 1); - insertPiece(session, 2, "rook", "white", 33); - const extras = runExtras(preset, session, knight); - (0,__vite_ssr_import_0__.expect)(extras.find((m) => m.to === 33)).toBeUndefined(); - }); -}); -(0,__vite_ssr_import_0__.describe)("Preset: bishops-ignore-color", () => { - const preset = getPreset("bishops-ignore-color"); - (0,__vite_ssr_import_0__.it)("is registered with the expected metadata", () => { - (0,__vite_ssr_import_0__.expect)(preset).toBeDefined(); - (0,__vite_ssr_import_0__.expect)(preset.incompatibleWith).toEqual([]); - (0,__vite_ssr_import_0__.expect)(preset.requires).toEqual([]); - (0,__vite_ssr_import_0__.expect)(preset.getExtraMoves).toBeDefined(); - }); - (0,__vite_ssr_import_0__.it)("returns no extras for non-bishop pieces", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const rook = insertPiece(session, 1, "rook", "white", 28); - (0,__vite_ssr_import_0__.expect)(runExtras(preset, session, rook)).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("bishop in centre gets exactly four orthogonal-step extras", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const bishop = insertPiece(session, 1, "bishop", "white", 28); - const extras = runExtras(preset, session, bishop); - (0,__vite_ssr_import_0__.expect)(extras).toHaveLength(4); - const targets = extras.map((m) => m.to).sort((a, b) => a - b); - (0,__vite_ssr_import_0__.expect)(targets).toEqual([20, 27, 29, 36]); - (0,__vite_ssr_import_0__.expect)(extras.every((m) => !m.isCapture)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("bishop in corner has fewer orthogonal-step extras", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const bishop = insertPiece(session, 1, "bishop", "white", 0); - const extras = runExtras(preset, session, bishop); - (0,__vite_ssr_import_0__.expect)(extras).toHaveLength(2); - const targets = extras.map((m) => m.to).sort((a, b) => a - b); - (0,__vite_ssr_import_0__.expect)(targets).toEqual([1, 8]); - }); - (0,__vite_ssr_import_0__.it)("orthogonal step onto ally is disallowed", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const bishop = insertPiece(session, 1, "bishop", "white", 28); - insertPiece(session, 2, "pawn", "white", 29); - const extras = runExtras(preset, session, bishop); - (0,__vite_ssr_import_0__.expect)(extras.find((m) => m.to === 29)).toBeUndefined(); - (0,__vite_ssr_import_0__.expect)(extras).toHaveLength(3); - }); - (0,__vite_ssr_import_0__.it)("orthogonal step onto enemy is a capture", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const bishop = insertPiece(session, 1, "bishop", "white", 28); - insertPiece(session, 2, "pawn", "black", 29); - const extras = runExtras(preset, session, bishop); - const capture = extras.find((m) => m.to === 29); - (0,__vite_ssr_import_0__.expect)(capture).toBeDefined(); - (0,__vite_ssr_import_0__.expect)(capture.isCapture).toBe(true); - }); -}); -(0,__vite_ssr_import_0__.describe)("Preset: rook-warp", () => { - const preset = getPreset("rook-warp"); - (0,__vite_ssr_import_0__.it)("is registered with the expected metadata", () => { - (0,__vite_ssr_import_0__.expect)(preset).toBeDefined(); - (0,__vite_ssr_import_0__.expect)(preset.incompatibleWith).toContain("wrap-board"); - (0,__vite_ssr_import_0__.expect)(preset.requires).toEqual([]); - (0,__vite_ssr_import_0__.expect)(preset.getExtraMoves).toBeDefined(); - }); - (0,__vite_ssr_import_0__.it)("returns no extras for non-rook pieces", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const queen = insertPiece(session, 1, "queen", "white", 0); - (0,__vite_ssr_import_0__.expect)(runExtras(preset, session, queen)).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("rook at a1 on empty board has no warp extras (already at edges)", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const rook = insertPiece(session, 1, "rook", "white", 0); - const extras = runExtras(preset, session, rook); - (0,__vite_ssr_import_0__.expect)(extras).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("rook at d4 on empty board warps to four edges", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const rook = insertPiece(session, 1, "rook", "white", 27); - const extras = runExtras(preset, session, rook); - const targets = extras.map((m) => m.to).sort((a, b) => a - b); - (0,__vite_ssr_import_0__.expect)(targets).toEqual([19, 26, 28, 35]); - (0,__vite_ssr_import_0__.expect)(extras.every((m) => !m.isCapture)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("warp path blocked by friendly piece at edge yields no destination", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const rook = insertPiece(session, 1, "rook", "white", 27); - insertPiece(session, 2, "pawn", "white", 24); - const extras = runExtras(preset, session, rook); - (0,__vite_ssr_import_0__.expect)(extras.find((m) => m.to === 24)).toBeUndefined(); - }); - (0,__vite_ssr_import_0__.it)("warp captures first enemy encountered on path", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const rook = insertPiece(session, 1, "rook", "white", 27); - insertPiece(session, 2, "pawn", "black", 24); - const extras = runExtras(preset, session, rook); - const cap = extras.find((m) => m.to === 24); - (0,__vite_ssr_import_0__.expect)(cap).toBeDefined(); - (0,__vite_ssr_import_0__.expect)(cap.isCapture).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("warp blocked when forward path to edge is obstructed", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const rook = insertPiece(session, 1, "rook", "white", 27); - insertPiece(session, 2, "pawn", "white", 28); - const extras = runExtras(preset, session, rook); - const rightDests = /* @__PURE__ */ new Set([24, 25, 26]); - (0,__vite_ssr_import_0__.expect)(extras.every((m) => !rightDests.has(m.to))).toBe(true); - (0,__vite_ssr_import_0__.expect)(extras.find((m) => m.to === 19)).toBeDefined(); - (0,__vite_ssr_import_0__.expect)(extras.find((m) => m.to === 35)).toBeDefined(); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SyxJQUFJO0FBRTFELHFDQUFPLE9BQU8sS0FBSyxPQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxZQUFZO0FBQ2xELHFDQUFPLE9BQU8sS0FBSyxPQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxZQUFZO0FBQUEsRUFDcEQsQ0FBQztBQUNILENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImtuaWdodHMtYmlzaG9wLXJvb2sudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRlc3RzIGZvciBwcmVzZXQgcnVsZXMgNC02IChQMy41KToga25pZ2h0cy1sZWFwLXR3aWNlLCBiaXNob3BzLWlnbm9yZS1jb2xvciwgcm9vay13YXJwLlxuICovXG5pbXBvcnQgeyBkZXNjcmliZSwgaXQsIGV4cGVjdCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB7IFNlc3Npb24gfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB7IFBSRVNFVF9SRUdJU1RSWSwgdHlwZSBQcmVzZXREZWYgfSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBDaGVzc0VuZ2luZSB9IGZyb20gXCIuLi9lbmdpbmUuanNcIjtcbmltcG9ydCB0eXBlIHsgTGVnYWxNb3ZlIH0gZnJvbSBcIi4uL3J1bGVzL3R5cGVzLmpzXCI7XG5cbmNvbnN0IG1rSWQgPSAobjogbnVtYmVyKSA9PiBuIGFzIEVudGl0eUlkO1xuXG5mdW5jdGlvbiBta0VuZ2luZShzZXNzaW9uOiBTZXNzaW9uKTogQ2hlc3NFbmdpbmUge1xuICAvLyBUaGUgcHJlc2V0IGhvb2tzIG9ubHkgdG91Y2ggYGVuZ2luZS5zZXNzaW9uYCwgc28gYSBtaW5pbWFsIHN0dWIgaXMgZW5vdWdoLlxuICByZXR1cm4geyBzZXNzaW9uIH0gYXMgdW5rbm93biBhcyBDaGVzc0VuZ2luZTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJlc2V0KGlkOiBzdHJpbmcpOiBQcmVzZXREZWYge1xuICBjb25zdCBmb3VuZCA9IFBSRVNFVF9SRUdJU1RSWS5nZXRBbGwoKS5maW5kKHAgPT4gcC5pZCA9PT0gaWQpO1xuICBpZiAoIWZvdW5kKSB0aHJvdyBuZXcgRXJyb3IoYHByZXNldCAnJHtpZH0nIG5vdCByZWdpc3RlcmVkYCk7XG4gIHJldHVybiBmb3VuZDtcbn1cblxuZnVuY3Rpb24gcnVuRXh0cmFzKHByZXNldDogUHJlc2V0RGVmLCBzZXNzaW9uOiBTZXNzaW9uLCBwaWVjZUlkOiBFbnRpdHlJZCk6IExlZ2FsTW92ZVtdIHtcbiAgcmV0dXJuIHByZXNldC5nZXRFeHRyYU1vdmVzIShta0VuZ2luZShzZXNzaW9uKSwgcGllY2VJZCk7XG59XG5cbmZ1bmN0aW9uIGluc2VydFBpZWNlKFxuICBzZXNzaW9uOiBTZXNzaW9uLFxuICBpZDogbnVtYmVyLFxuICB0eXBlOiBzdHJpbmcsXG4gIGNvbG9yOiBzdHJpbmcsXG4gIHNxdWFyZTogbnVtYmVyLFxuKTogRW50aXR5SWQge1xuICBjb25zdCBlaWQgPSBta0lkKGlkKTtcbiAgc2Vzc2lvbi5pbnNlcnQoZWlkLCBcIlBpZWNlVHlwZVwiLCB0eXBlKTtcbiAgc2Vzc2lvbi5pbnNlcnQoZWlkLCBcIkNvbG9yXCIsIGNvbG9yKTtcbiAgc2Vzc2lvbi5pbnNlcnQoZWlkLCBcIlBvc2l0aW9uXCIsIHNxdWFyZSk7XG4gIHJldHVybiBlaWQ7XG59XG5cbi8vIOKUgOKUgOKUgCBSZWdpc3RyeSBzaXplIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5kZXNjcmliZShcIlByZXNldCByZWdpc3RyeSAoUDMuNSlcIiwgKCkgPT4ge1xuICBpdChcImhhcyBhdCBsZWFzdCA2IHByZXNldHMgcmVnaXN0ZXJlZCBhZnRlciBsb2FkaW5nIGluZGV4LnRzXCIsICgpID0+IHtcbiAgICBleHBlY3QoUFJFU0VUX1JFR0lTVFJZLmdldEFsbCgpLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuT3JFcXVhbCg2KTtcbiAgfSk7XG5cbiAgaXQoXCJjb250YWlucyB0aGUgdGhyZWUgbmV3IHByZXNldHNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGlkcyA9IG5ldyBTZXQoUFJFU0VUX1JFR0lTVFJZLmdldEFsbCgpLm1hcChwID0+IHAuaWQpKTtcbiAgICBleHBlY3QoaWRzLmhhcyhcImtuaWdodHMtbGVhcC10d2ljZVwiKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QoaWRzLmhhcyhcImJpc2hvcHMtaWdub3JlLWNvbG9yXCIpKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChpZHMuaGFzKFwicm9vay13YXJwXCIpKS50b0JlKHRydWUpO1xuICB9KTtcbn0pO1xuXG4vLyDilIDilIDilIAga25pZ2h0cy1sZWFwLXR3aWNlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5kZXNjcmliZShcIlByZXNldDoga25pZ2h0cy1sZWFwLXR3aWNlXCIsICgpID0+IHtcbiAgY29uc3QgcHJlc2V0ID0gZ2V0UHJlc2V0KFwia25pZ2h0cy1sZWFwLXR3aWNlXCIpO1xuXG4gIGl0KFwiaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBleHBlY3RlZCBtZXRhZGF0YVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHByZXNldCkudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3QocHJlc2V0LmluY29tcGF0aWJsZVdpdGgpLnRvRXF1YWwoW10pO1xuICAgIGV4cGVjdChwcmVzZXQucmVxdWlyZXMpLnRvRXF1YWwoW10pO1xuICAgIGV4cGVjdChwcmVzZXQuZ2V0RXh0cmFNb3ZlcykudG9CZURlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIG5vIGV4dHJhcyBmb3Igbm9uLWtuaWdodCBwaWVjZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBjb25zdCBiaXNob3AgPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcImJpc2hvcFwiLCBcIndoaXRlXCIsIDI4KTtcbiAgICBjb25zdCBleHRyYXMgPSBydW5FeHRyYXMocHJlc2V0LCBzZXNzaW9uLCBiaXNob3ApO1xuICAgIGV4cGVjdChleHRyYXMpLnRvRXF1YWwoW10pO1xuICB9KTtcblxuICBpdChcImtuaWdodCBvbiBlbXB0eSBib2FyZCBnZXRzIGV4dHJhIHR3by1sZWFwIGRlc3RpbmF0aW9uc1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGNvbnN0IGtuaWdodCA9IGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwia25pZ2h0XCIsIFwid2hpdGVcIiwgMjgpOyAvLyBlNFxuICAgIGNvbnN0IGV4dHJhcyA9IHJ1bkV4dHJhcyhwcmVzZXQsIHNlc3Npb24sIGtuaWdodCk7XG4gICAgLy8gT24gZW1wdHkgYm9hcmQsIHR3by1sZWFwIHJlYWNoZXMgbWFueSBzcXVhcmVzIGJleW9uZCB0aGUgOCBzaW5nbGUtbGVhcCB0YXJnZXRzLlxuICAgIGV4cGVjdChleHRyYXMubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMCk7XG4gICAgLy8gTXVzdCBub3QgaW5jbHVkZSB0aGUgc3RhcnRpbmcgc3F1YXJlLlxuICAgIGV4cGVjdChleHRyYXMuZXZlcnkobSA9PiBtLnRvICE9PSAyOCkpLnRvQmUodHJ1ZSk7XG4gICAgLy8gTXVzdCBub3QgZHVwbGljYXRlIHNpbmdsZS1sZWFwIHRhcmdldHMgKHRob3NlIGFyZSBiYXNlLXJ1bGUgdGVycml0b3J5KS5cbiAgICBjb25zdCBzaW5nbGVMZWFwcyA9IG5ldyBTZXQoWzExLCAxMywgMTgsIDIyLCAzNCwgMzgsIDQzLCA0NV0pO1xuICAgIGV4cGVjdChleHRyYXMuZXZlcnkobSA9PiAhc2luZ2xlTGVhcHMuaGFzKG0udG8pKSkudG9CZSh0cnVlKTtcbiAgICAvLyBBbGwgZXh0cmFzIG9yaWdpbmF0ZSBmcm9tIHRoaXMga25pZ2h0LlxuICAgIGV4cGVjdChleHRyYXMuZXZlcnkobSA9PiBtLnBpZWNlSWQgPT09IGtuaWdodCAmJiBtLmZyb20gPT09IDI4KSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJza2lwcyByb3V0ZXMgd2hvc2UgaW50ZXJtZWRpYXRlIHNxdWFyZSBpcyBvY2N1cGllZFwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGNvbnN0IGtuaWdodCA9IGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwia25pZ2h0XCIsIFwid2hpdGVcIiwgMSk7IC8vIGIxXG4gICAgLy8gUGxhY2UgYW4gYWxseSBvbiBhMyAoPTE2KSDigJQgb25lIGtuaWdodC1sZWFwIGZyb20gYjEuXG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMiwgXCJwYXduXCIsIFwid2hpdGVcIiwgMTYpO1xuICAgIGNvbnN0IGV4dHJhcyA9IHJ1bkV4dHJhcyhwcmVzZXQsIHNlc3Npb24sIGtuaWdodCk7XG4gICAgLy8gVGhlIHByZXNlbmNlIG9mIHRoZSBhbGx5IG9uIGEzIGVsaW1pbmF0ZXMgYTMtdHJhbnNpdCByb3V0ZXMsIGJ1dCBvdGhlclxuICAgIC8vIGludGVybWVkaWF0ZSBzcXVhcmVzIChjMywgZDIpIHN0aWxsIHlpZWxkIG1hbnkgdHdvLWxlYXAgZGVzdGluYXRpb25zLlxuICAgIGV4cGVjdChleHRyYXMubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMCk7XG4gICAgLy8gU3BlY2lmaWNhbGx5LCBjNCAoPTI2KSBpcyByZWFjaGFibGUgdmlhIGIx4oaSYzPihpI/IOKAlCBub3QgZGlyZWN0bHkgcmVsZXZhbnQsXG4gICAgLy8gYnV0IGIx4oaSYTPihpJjNCBpcyBibG9ja2VkOyBiMeKGkmMz4oaSYTQgb3IgYjHihpJjM+KGkmI1IHJlbWFpbiBsZWdhbCB3aGVuIGVtcHR5LlxuICB9KTtcblxuICBpdChcInR3by1sZWFwIGV4dHJhIHRoYXQgbGFuZHMgb24gYW4gZW5lbXkgaXMgbWFya2VkIGFzIGNhcHR1cmVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBjb25zdCBrbmlnaHQgPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcImtuaWdodFwiLCBcIndoaXRlXCIsIDEpOyAvLyBiMVxuICAgIC8vIEVuZW15IG9uIGMzICg9MTgpIGlzIGEgc2luZ2xlLWxlYXAgdGFyZ2V0IChub3QgYW4gZXh0cmEpLCBzbyBwbGFjZSBlbmVteVxuICAgIC8vIG9uIGEgc3F1YXJlIG9ubHkgcmVhY2hhYmxlIHZpYSB0d28gbGVhcHM6IGUuZy4gYjHihpJjM+KGkmI1ICg9MzMpLlxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDIsIFwicm9va1wiLCBcImJsYWNrXCIsIDMzKTsgLy8gYjVcbiAgICBjb25zdCBleHRyYXMgPSBydW5FeHRyYXMocHJlc2V0LCBzZXNzaW9uLCBrbmlnaHQpO1xuICAgIGNvbnN0IGhpdCA9IGV4dHJhcy5maW5kKG0gPT4gbS50byA9PT0gMzMpO1xuICAgIGV4cGVjdChoaXQpLnRvQmVEZWZpbmVkKCk7XG4gICAgZXhwZWN0KGhpdCEuaXNDYXB0dXJlKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcInR3by1sZWFwIGNhbm5vdCBsYW5kIG9uIGFuIGFsbHlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBjb25zdCBrbmlnaHQgPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcImtuaWdodFwiLCBcIndoaXRlXCIsIDEpOyAvLyBiMVxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDIsIFwicm9va1wiLCBcIndoaXRlXCIsIDMzKTsgLy8gYWxseSBvbiBiNSAodHdvLWxlYXAgdGFyZ2V0KVxuICAgIGNvbnN0IGV4dHJhcyA9IHJ1bkV4dHJhcyhwcmVzZXQsIHNlc3Npb24sIGtuaWdodCk7XG4gICAgZXhwZWN0KGV4dHJhcy5maW5kKG0gPT4gbS50byA9PT0gMzMpKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xufSk7XG5cbi8vIOKUgOKUgOKUgCBiaXNob3BzLWlnbm9yZS1jb2xvciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZGVzY3JpYmUoXCJQcmVzZXQ6IGJpc2hvcHMtaWdub3JlLWNvbG9yXCIsICgpID0+IHtcbiAgY29uc3QgcHJlc2V0ID0gZ2V0UHJlc2V0KFwiYmlzaG9wcy1pZ25vcmUtY29sb3JcIik7XG5cbiAgaXQoXCJpcyByZWdpc3RlcmVkIHdpdGggdGhlIGV4cGVjdGVkIG1ldGFkYXRhXCIsICgpID0+IHtcbiAgICBleHBlY3QocHJlc2V0KS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChwcmVzZXQuaW5jb21wYXRpYmxlV2l0aCkudG9FcXVhbChbXSk7XG4gICAgZXhwZWN0KHByZXNldC5yZXF1aXJlcykudG9FcXVhbChbXSk7XG4gICAgZXhwZWN0KHByZXNldC5nZXRFeHRyYU1vdmVzKS50b0JlRGVmaW5lZCgpO1xuICB9KTtcblxuICBpdChcInJldHVybnMgbm8gZXh0cmFzIGZvciBub24tYmlzaG9wIHBpZWNlc1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGNvbnN0IHJvb2sgPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInJvb2tcIiwgXCJ3aGl0ZVwiLCAyOCk7XG4gICAgZXhwZWN0KHJ1bkV4dHJhcyhwcmVzZXQsIHNlc3Npb24sIHJvb2spKS50b0VxdWFsKFtdKTtcbiAgfSk7XG5cbiAgaXQoXCJiaXNob3AgaW4gY2VudHJlIGdldHMgZXhhY3RseSBmb3VyIG9ydGhvZ29uYWwtc3RlcCBleHRyYXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBjb25zdCBiaXNob3AgPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcImJpc2hvcFwiLCBcIndoaXRlXCIsIDI4KTsgLy8gZTRcbiAgICBjb25zdCBleHRyYXMgPSBydW5FeHRyYXMocHJlc2V0LCBzZXNzaW9uLCBiaXNob3ApO1xuICAgIGV4cGVjdChleHRyYXMpLnRvSGF2ZUxlbmd0aCg0KTtcbiAgICBjb25zdCB0YXJnZXRzID0gZXh0cmFzLm1hcChtID0+IG0udG8pLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICAvLyBlMz0yMCwgZDQ9MjcsIGY0PTI5LCBlNT0zNlxuICAgIGV4cGVjdCh0YXJnZXRzKS50b0VxdWFsKFsyMCwgMjcsIDI5LCAzNl0pO1xuICAgIGV4cGVjdChleHRyYXMuZXZlcnkobSA9PiAhbS5pc0NhcHR1cmUpKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcImJpc2hvcCBpbiBjb3JuZXIgaGFzIGZld2VyIG9ydGhvZ29uYWwtc3RlcCBleHRyYXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBjb25zdCBiaXNob3AgPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcImJpc2hvcFwiLCBcIndoaXRlXCIsIDApOyAvLyBhMVxuICAgIGNvbnN0IGV4dHJhcyA9IHJ1bkV4dHJhcyhwcmVzZXQsIHNlc3Npb24sIGJpc2hvcCk7XG4gICAgLy8gYTEgaGFzIG9ubHkgYjEgKD0xKSBhbmQgYTIgKD04KSBhcyBvcnRob2dvbmFsIG5laWdoYm91cnMuXG4gICAgZXhwZWN0KGV4dHJhcykudG9IYXZlTGVuZ3RoKDIpO1xuICAgIGNvbnN0IHRhcmdldHMgPSBleHRyYXMubWFwKG0gPT4gbS50bykuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgIGV4cGVjdCh0YXJnZXRzKS50b0VxdWFsKFsxLCA4XSk7XG4gIH0pO1xuXG4gIGl0KFwib3J0aG9nb25hbCBzdGVwIG9udG8gYWxseSBpcyBkaXNhbGxvd2VkXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgY29uc3QgYmlzaG9wID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJiaXNob3BcIiwgXCJ3aGl0ZVwiLCAyOCk7XG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMiwgXCJwYXduXCIsIFwid2hpdGVcIiwgMjkpOyAvLyBhbGx5IG9uIGY0XG4gICAgY29uc3QgZXh0cmFzID0gcnVuRXh0cmFzKHByZXNldCwgc2Vzc2lvbiwgYmlzaG9wKTtcbiAgICBleHBlY3QoZXh0cmFzLmZpbmQobSA9PiBtLnRvID09PSAyOSkpLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3QoZXh0cmFzKS50b0hhdmVMZW5ndGgoMyk7XG4gIH0pO1xuXG4gIGl0KFwib3J0aG9nb25hbCBzdGVwIG9udG8gZW5lbXkgaXMgYSBjYXB0dXJlXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgY29uc3QgYmlzaG9wID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJiaXNob3BcIiwgXCJ3aGl0ZVwiLCAyOCk7XG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMiwgXCJwYXduXCIsIFwiYmxhY2tcIiwgMjkpOyAvLyBlbmVteSBvbiBmNFxuICAgIGNvbnN0IGV4dHJhcyA9IHJ1bkV4dHJhcyhwcmVzZXQsIHNlc3Npb24sIGJpc2hvcCk7XG4gICAgY29uc3QgY2FwdHVyZSA9IGV4dHJhcy5maW5kKG0gPT4gbS50byA9PT0gMjkpO1xuICAgIGV4cGVjdChjYXB0dXJlKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChjYXB0dXJlIS5pc0NhcHR1cmUpLnRvQmUodHJ1ZSk7XG4gIH0pO1xufSk7XG5cbi8vIOKUgOKUgOKUgCByb29rLXdhcnAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmRlc2NyaWJlKFwiUHJlc2V0OiByb29rLXdhcnBcIiwgKCkgPT4ge1xuICBjb25zdCBwcmVzZXQgPSBnZXRQcmVzZXQoXCJyb29rLXdhcnBcIik7XG5cbiAgaXQoXCJpcyByZWdpc3RlcmVkIHdpdGggdGhlIGV4cGVjdGVkIG1ldGFkYXRhXCIsICgpID0+IHtcbiAgICBleHBlY3QocHJlc2V0KS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChwcmVzZXQuaW5jb21wYXRpYmxlV2l0aCkudG9Db250YWluKFwid3JhcC1ib2FyZFwiKTtcbiAgICBleHBlY3QocHJlc2V0LnJlcXVpcmVzKS50b0VxdWFsKFtdKTtcbiAgICBleHBlY3QocHJlc2V0LmdldEV4dHJhTW92ZXMpLnRvQmVEZWZpbmVkKCk7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyBubyBleHRyYXMgZm9yIG5vbi1yb29rIHBpZWNlc1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGNvbnN0IHF1ZWVuID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJxdWVlblwiLCBcIndoaXRlXCIsIDApO1xuICAgIGV4cGVjdChydW5FeHRyYXMocHJlc2V0LCBzZXNzaW9uLCBxdWVlbikpLnRvRXF1YWwoW10pO1xuICB9KTtcblxuICBpdChcInJvb2sgYXQgYTEgb24gZW1wdHkgYm9hcmQgaGFzIG5vIHdhcnAgZXh0cmFzIChhbHJlYWR5IGF0IGVkZ2VzKVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGNvbnN0IHJvb2sgPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInJvb2tcIiwgXCJ3aGl0ZVwiLCAwKTsgLy8gYTFcbiAgICBjb25zdCBleHRyYXMgPSBydW5FeHRyYXMocHJlc2V0LCBzZXNzaW9uLCByb29rKTtcbiAgICAvLyBhMSBpcyBhdCBmaWxlIDAgYW5kIHJhbmsgMDogbm8gXCJyaWdodCB3cmFwXCIgKGJlY2F1c2UgZmlsZTw3IGFsbG93cyB3YXJwXG4gICAgLy8gZnJvbSBmaWxlIDAsIGJ1dCBmaWxlPTAgc28gcGF0aCBpcyBlbXB0eTsgc2ltaWxhcmx5IGZvciB1cCBkaXJlY3Rpb24pLlxuICAgIC8vIFRoZSBmaWxlPDcgYnJhbmNoIHJ1bnMgYnV0IHBhdGggbGVuZ3RoIDAg4oaSIG5vIGRlc3RpbmF0aW9uLlxuICAgIC8vIFNvOiBubyB3YXJwIGNhbmRpZGF0ZXMgb24gYW4gZW1wdHkgYm9hcmQuXG4gICAgZXhwZWN0KGV4dHJhcykudG9FcXVhbChbXSk7XG4gIH0pO1xuXG4gIGl0KFwicm9vayBhdCBkNCBvbiBlbXB0eSBib2FyZCB3YXJwcyB0byBmb3VyIGVkZ2VzXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgY29uc3Qgcm9vayA9IGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwicm9va1wiLCBcIndoaXRlXCIsIDI3KTsgLy8gZDRcbiAgICBjb25zdCBleHRyYXMgPSBydW5FeHRyYXMocHJlc2V0LCBzZXNzaW9uLCByb29rKTtcbiAgICAvLyBXaXRoIGVtcHR5IGJvYXJkLCBlYWNoIGRpcmVjdGlvbidzIHBhdGggZW5kcyBhdCB0aGUgc3F1YXJlIGp1c3QgYmVmb3JlXG4gICAgLy8gdGhlIHJvb2sgb24gdGhlIG9wcG9zaXRlIHNpZGU6XG4gICAgLy8gICByaWdodCAoZmlsZSsgd3JhcHMgdG8gZmlsZSAwLi4yKTogbGFzdCBlbXB0eSA9IGM0ICg9MjYpXG4gICAgLy8gICBsZWZ0ICAoZmlsZS0gd3JhcHMgdG8gZmlsZSA3Li40KTogbGFzdCBlbXB0eSA9IGU0ICg9MjgpXG4gICAgLy8gICB1cCAgICAocmFuaysgd3JhcHMgdG8gcmFuayAwLi4yKTogbGFzdCBlbXB0eSA9IGQzICg9MTkpXG4gICAgLy8gICBkb3duICAocmFuay0gd3JhcHMgdG8gcmFuayA3Li40KTogbGFzdCBlbXB0eSA9IGQ1ICg9MzUpXG4gICAgY29uc3QgdGFyZ2V0cyA9IGV4dHJhcy5tYXAobSA9PiBtLnRvKS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgZXhwZWN0KHRhcmdldHMpLnRvRXF1YWwoWzE5LCAyNiwgMjgsIDM1XSk7XG4gICAgZXhwZWN0KGV4dHJhcy5ldmVyeShtID0+ICFtLmlzQ2FwdHVyZSkpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwid2FycCBwYXRoIGJsb2NrZWQgYnkgZnJpZW5kbHkgcGllY2UgYXQgZWRnZSB5aWVsZHMgbm8gZGVzdGluYXRpb25cIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBjb25zdCByb29rID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJyb29rXCIsIFwid2hpdGVcIiwgMjcpOyAvLyBkNFxuICAgIC8vIFBsYWNlIGFsbHkgb24gYTQgKD0yNCk6IHJpZ2h0d2FyZCB3YXJwIHBhdGggc3RhcnRzIGF0IGZpbGUgMCA9IGE0LlxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDIsIFwicGF3blwiLCBcIndoaXRlXCIsIDI0KTtcbiAgICBjb25zdCBleHRyYXMgPSBydW5FeHRyYXMocHJlc2V0LCBzZXNzaW9uLCByb29rKTtcbiAgICAvLyBSaWdodC13cmFwIHBhdGggYTTihpJiNOKGkmM0IGlzIGJsb2NrZWQgaW1tZWRpYXRlbHkgYXQgYTQgKGFsbHkpIOKGkiBubyByaWdodC13YXJwLlxuICAgIGV4cGVjdChleHRyYXMuZmluZChtID0+IG0udG8gPT09IDI0KSkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcblxuICBpdChcIndhcnAgY2FwdHVyZXMgZmlyc3QgZW5lbXkgZW5jb3VudGVyZWQgb24gcGF0aFwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGNvbnN0IHJvb2sgPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInJvb2tcIiwgXCJ3aGl0ZVwiLCAyNyk7IC8vIGQ0XG4gICAgLy8gUGxhY2UgZW5lbXkgb24gYTQgKD0yNCk6IHJpZ2h0LXdyYXAgc3RhcnRzIHRoZXJlLlxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDIsIFwicGF3blwiLCBcImJsYWNrXCIsIDI0KTtcbiAgICBjb25zdCBleHRyYXMgPSBydW5FeHRyYXMocHJlc2V0LCBzZXNzaW9uLCByb29rKTtcbiAgICBjb25zdCBjYXAgPSBleHRyYXMuZmluZChtID0+IG0udG8gPT09IDI0KTtcbiAgICBleHBlY3QoY2FwKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChjYXAhLmlzQ2FwdHVyZSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJ3YXJwIGJsb2NrZWQgd2hlbiBmb3J3YXJkIHBhdGggdG8gZWRnZSBpcyBvYnN0cnVjdGVkXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgY29uc3Qgcm9vayA9IGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwicm9va1wiLCBcIndoaXRlXCIsIDI3KTsgLy8gZDRcbiAgICAvLyBCbG9jayB0aGUgcmlnaHQtZm9yd2FyZCBwYXRoIGF0IGU0ICg9MjgpIOKAlCByb29rIGNhbid0IHJlYWNoIHRoZSBlYXN0IGVkZ2UuXG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMiwgXCJwYXduXCIsIFwid2hpdGVcIiwgMjgpO1xuICAgIGNvbnN0IGV4dHJhcyA9IHJ1bkV4dHJhcyhwcmVzZXQsIHNlc3Npb24sIHJvb2spO1xuICAgIC8vIFJpZ2h0LXdhcnAgKHdoaWNoIHdyYXBzIG92ZXIgdGhlIGgtZWRnZSBiYWNrIHRvIGEuLmMgb24gcmFuayA0KSBpc1xuICAgIC8vIGRpc2FibGVkIGJlY2F1c2UgdGhlIHJvb2sgY2FuJ3Qgc2xpZGUgdGhyb3VnaCBlNCB0byByZWFjaCB0aGUgaCBlZGdlLlxuICAgIGNvbnN0IHJpZ2h0RGVzdHMgPSBuZXcgU2V0KFsyNCwgMjUsIDI2XSk7XG4gICAgZXhwZWN0KGV4dHJhcy5ldmVyeShtID0+ICFyaWdodERlc3RzLmhhcyhtLnRvKSkpLnRvQmUodHJ1ZSk7XG4gICAgLy8gVmVydGljYWwgd2FycHMgcmVtYWluIGF2YWlsYWJsZSAodGhleSBkb24ndCBkZXBlbmQgb24gcmFuay00IGZpbGUgcGF0aCkuXG4gICAgZXhwZWN0KGV4dHJhcy5maW5kKG0gPT4gbS50byA9PT0gMTkpKS50b0JlRGVmaW5lZCgpOyAvLyBkMyB2aWEgdXAtd2FycFxuICAgIGV4cGVjdChleHRyYXMuZmluZChtID0+IG0udG8gPT09IDM1KSkudG9CZURlZmluZWQoKTsgLy8gZDUgdmlhIGRvd24td2FycFxuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL2NoZXNzL3NyYy9wcmVzZXRzL2tuaWdodHMtYmlzaG9wLXJvb2sudGVzdC50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/bfe37ee30c4fd16bd9dfead2c5e64e0aa91786ef b/7xOfJqsDU787fe61oSCq1/web/bfe37ee30c4fd16bd9dfead2c5e64e0aa91786ef deleted file mode 100644 index 80720c3..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/bfe37ee30c4fd16bd9dfead2c5e64e0aa91786ef +++ /dev/null @@ -1,188 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/starting-position.ts", {"importedNames":["CLASSIC_LAYOUT","applyLayout","generateStartingPosition","STARTING_PIECES_DEF"]}); - - - - - -const __vite_ssr_import_2__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/schema.ts", {"importedNames":["GAME_ENTITY"]}); -(0,__vite_ssr_import_0__.describe)("generateStartingPosition()", () => { - (0,__vite_ssr_import_0__.it)("inserts exactly 32 piece entities", () => { - const session = new __vite_ssr_import_2__.Session({ autoFire: false }); - const ids = (0,__vite_ssr_import_1__.generateStartingPosition)(session); - (0,__vite_ssr_import_0__.expect)(ids).toHaveLength(32); - (0,__vite_ssr_import_0__.expect)(new Set(ids).size).toBe(32); - }); - (0,__vite_ssr_import_0__.it)("inserts 4 facts per piece (PieceType, Color, Position, HasMoved)", () => { - const session = new __vite_ssr_import_2__.Session({ autoFire: false }); - (0,__vite_ssr_import_1__.generateStartingPosition)(session); - const facts = session.allFacts(); - const pieceFacts = facts.filter((f) => f.id !== __vite_ssr_import_3__.GAME_ENTITY); - (0,__vite_ssr_import_0__.expect)(pieceFacts).toHaveLength(128); - }); - (0,__vite_ssr_import_0__.it)("has exactly 8 white pawns on rank 2 (squares 8-15)", () => { - const session = new __vite_ssr_import_2__.Session({ autoFire: false }); - (0,__vite_ssr_import_1__.generateStartingPosition)(session); - const facts = session.allFacts(); - const whitePawnPositions = facts.filter((f) => f.attr === "Position" && f.id !== __vite_ssr_import_3__.GAME_ENTITY).map((f) => { - const colorFact = facts.find( - (c) => c.id === f.id && c.attr === "Color" - ); - const typeFact = facts.find((t) => t.id === f.id && t.attr === "PieceType"); - return { - position: f.value, - color: colorFact?.value, - type: typeFact?.value - }; - }).filter((p) => p.color === "white" && p.type === "pawn").map((p) => p.position); - (0,__vite_ssr_import_0__.expect)(whitePawnPositions).toHaveLength(8); - (0,__vite_ssr_import_0__.expect)(whitePawnPositions.every((sq) => sq >= 8 && sq <= 15)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("white king is on e1 (square 4)", () => { - const session = new __vite_ssr_import_2__.Session({ autoFire: false }); - (0,__vite_ssr_import_1__.generateStartingPosition)(session); - const facts = session.allFacts(); - const kingEntity = facts.find((f) => { - if (f.attr !== "PieceType" || f.value !== "king" || f.id === __vite_ssr_import_3__.GAME_ENTITY) { - return false; - }; - const colorFact = facts.find((c) => c.id === f.id && c.attr === "Color"); - return colorFact?.value === "white"; - })?.id; - (0,__vite_ssr_import_0__.expect)(kingEntity).toBeDefined(); - const kingPos = facts.find((f) => f.id === kingEntity && f.attr === "Position")?.value; - (0,__vite_ssr_import_0__.expect)(kingPos).toBe(4); - }); - (0,__vite_ssr_import_0__.it)("game-level Turn is white initially", () => { - const session = new __vite_ssr_import_2__.Session({ autoFire: false }); - (0,__vite_ssr_import_1__.generateStartingPosition)(session); - const turnFact = session.get((0,__vite_ssr_import_3__.GAME_ENTITY), "Turn"); - (0,__vite_ssr_import_0__.expect)(turnFact).toBe("white"); - }); - (0,__vite_ssr_import_0__.it)("HasMoved is false for all pieces initially", () => { - const session = new __vite_ssr_import_2__.Session({ autoFire: false }); - (0,__vite_ssr_import_1__.generateStartingPosition)(session); - const facts = session.allFacts(); - const movedFacts = facts.filter( - (f) => f.attr === "HasMoved" && f.id !== __vite_ssr_import_3__.GAME_ENTITY - ); - (0,__vite_ssr_import_0__.expect)(movedFacts).toHaveLength(32); - (0,__vite_ssr_import_0__.expect)(movedFacts.every((f) => f.value === false)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("black king is on e8 (square 60)", () => { - const session = new __vite_ssr_import_2__.Session({ autoFire: false }); - (0,__vite_ssr_import_1__.generateStartingPosition)(session); - const facts = session.allFacts(); - const kingEntity = facts.find((f) => { - if (f.attr !== "PieceType" || f.value !== "king" || f.id === __vite_ssr_import_3__.GAME_ENTITY) { - return false; - }; - const colorFact = facts.find((c) => c.id === f.id && c.attr === "Color"); - return colorFact?.value === "black"; - })?.id; - (0,__vite_ssr_import_0__.expect)(kingEntity).toBeDefined(); - const kingPos = facts.find((f) => f.id === kingEntity && f.attr === "Position")?.value; - (0,__vite_ssr_import_0__.expect)(kingPos).toBe(60); - }); - (0,__vite_ssr_import_0__.it)("STARTING_PIECES_DEF has 32 entries", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.STARTING_PIECES_DEF)).toHaveLength(32); - }); - (0,__vite_ssr_import_0__.it)("game-level facts are correctly initialized", () => { - const session = new __vite_ssr_import_2__.Session({ autoFire: false }); - (0,__vite_ssr_import_1__.generateStartingPosition)(session); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_3__.GAME_ENTITY), "Turn")).toBe("white"); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_3__.GAME_ENTITY), "HalfmoveClock")).toBe(0); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_3__.GAME_ENTITY), "FullmoveNumber")).toBe(1); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_3__.GAME_ENTITY), "EnPassantTarget")).toBe(null); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_3__.GAME_ENTITY), "GameStatus")).toBe("active"); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_3__.GAME_ENTITY), "Winner")).toBe(null); - }); -}); -(0,__vite_ssr_import_0__.describe)("applyLayout()", () => { - (0,__vite_ssr_import_0__.it)("applying CLASSIC_LAYOUT matches generateStartingPosition's piece count (32)", () => { - const a = new __vite_ssr_import_2__.Session({ autoFire: false }); - const b = new __vite_ssr_import_2__.Session({ autoFire: false }); - const idsA = (0,__vite_ssr_import_1__.applyLayout)(a, (0,__vite_ssr_import_1__.CLASSIC_LAYOUT)); - const idsB = (0,__vite_ssr_import_1__.generateStartingPosition)(b); - (0,__vite_ssr_import_0__.expect)(idsA).toHaveLength(32); - (0,__vite_ssr_import_0__.expect)(idsB).toHaveLength(32); - (0,__vite_ssr_import_0__.expect)(idsA).toEqual(idsB); - }); - (0,__vite_ssr_import_0__.it)("applying CLASSIC_LAYOUT produces the same piece facts as generateStartingPosition", () => { - const a = new __vite_ssr_import_2__.Session({ autoFire: false }); - const b = new __vite_ssr_import_2__.Session({ autoFire: false }); - (0,__vite_ssr_import_1__.applyLayout)(a, (0,__vite_ssr_import_1__.CLASSIC_LAYOUT)); - (0,__vite_ssr_import_1__.generateStartingPosition)(b); - const factKey = (f) => `${f.id}|${f.attr}|${String(f.value)}`; - const factsA = new Set( - a.allFacts().filter((f) => f.id !== __vite_ssr_import_3__.GAME_ENTITY).map(factKey) - ); - const factsB = new Set( - b.allFacts().filter((f) => f.id !== __vite_ssr_import_3__.GAME_ENTITY).map(factKey) - ); - (0,__vite_ssr_import_0__.expect)(factsA).toEqual(factsB); - }); - (0,__vite_ssr_import_0__.it)("empty layout inserts zero piece facts but still seeds game-level facts", () => { - const empty = { - id: "test-empty", - name: "Test Empty", - description: "zero pieces", - pieces: [], - source: "custom" - }; - const session = new __vite_ssr_import_2__.Session({ autoFire: false }); - const ids = (0,__vite_ssr_import_1__.applyLayout)(session, empty); - (0,__vite_ssr_import_0__.expect)(ids).toHaveLength(0); - const pieceFacts = session.allFacts().filter((f) => f.id !== __vite_ssr_import_3__.GAME_ENTITY); - (0,__vite_ssr_import_0__.expect)(pieceFacts).toHaveLength(0); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_3__.GAME_ENTITY), "Turn")).toBe("white"); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_3__.GAME_ENTITY), "GameStatus")).toBe("active"); - }); - (0,__vite_ssr_import_0__.it)("placement.hasMoved=true is honored (pre-revokes castling rights)", () => { - const layout = { - id: "test-moved", - name: "Test Moved King", - description: "single king with hasMoved=true", - pieces: [ - { type: "king", color: "white", square: 4, hasMoved: true }, - { type: "king", color: "black", square: 60 } - ], - source: "custom" - }; - const session = new __vite_ssr_import_2__.Session({ autoFire: false }); - const ids = (0,__vite_ssr_import_1__.applyLayout)(session, layout); - (0,__vite_ssr_import_0__.expect)(ids).toHaveLength(2); - const whiteKingMoved = session.get(ids[0], "HasMoved"); - const blackKingMoved = session.get(ids[1], "HasMoved"); - (0,__vite_ssr_import_0__.expect)(whiteKingMoved).toBe(true); - (0,__vite_ssr_import_0__.expect)(blackKingMoved).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("CLASSIC_LAYOUT is registered with source='premade' and id='classic'", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_1__.CLASSIC_LAYOUT.id).toBe("classic"); - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_1__.CLASSIC_LAYOUT.source).toBe("premade"); - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_1__.CLASSIC_LAYOUT.pieces).toHaveLength(32); - }); - (0,__vite_ssr_import_0__.it)("pieces are inserted in layout.pieces order (EntityId sequence matches)", () => { - const layout = { - id: "test-order", - name: "Test Order", - description: "two pieces in specific order", - pieces: [ - { type: "rook", color: "white", square: 0 }, - { type: "king", color: "white", square: 4 } - ], - source: "custom" - }; - const session = new __vite_ssr_import_2__.Session({ autoFire: false }); - const ids = (0,__vite_ssr_import_1__.applyLayout)(session, layout); - (0,__vite_ssr_import_0__.expect)(ids).toHaveLength(2); - (0,__vite_ssr_import_0__.expect)(session.get(ids[0], "PieceType")).toBe("rook"); - (0,__vite_ssr_import_0__.expect)(session.get(ids[0], "Position")).toBe(0); - (0,__vite_ssr_import_0__.expect)(session.get(ids[1], "PieceType")).toBe("king"); - (0,__vite_ssr_import_0__.expect)(session.get(ids[1], "Position")).toBe(4); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LElBQUksSUFBSSxDQUFDLEdBQUksV0FBVyxDQUFDLEVBQUUsS0FBSyxNQUFNO0FBQ3JELHFDQUFPLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBSSxVQUFVLENBQUMsRUFBRSxLQUFLLENBQUM7QUFDL0MscUNBQU8sUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFJLFdBQVcsQ0FBQyxFQUFFLEtBQUssTUFBTTtBQUNyRCxxQ0FBTyxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUksVUFBVSxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQUEsRUFDakQsQ0FBQztBQUNILENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInN0YXJ0aW5nLXBvc2l0aW9uLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQge1xuICBDTEFTU0lDX0xBWU9VVCxcbiAgYXBwbHlMYXlvdXQsXG4gIGdlbmVyYXRlU3RhcnRpbmdQb3NpdGlvbixcbiAgU1RBUlRJTkdfUElFQ0VTX0RFRixcbn0gZnJvbSBcIi4vc3RhcnRpbmctcG9zaXRpb24uanNcIjtcbmltcG9ydCB7IFNlc3Npb24gfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB7IEdBTUVfRU5USVRZIH0gZnJvbSBcIi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFN0YXJ0aW5nTGF5b3V0IH0gZnJvbSBcIi4vbGF5b3V0cy90eXBlcy5qc1wiO1xuXG5kZXNjcmliZShcImdlbmVyYXRlU3RhcnRpbmdQb3NpdGlvbigpXCIsICgpID0+IHtcbiAgaXQoXCJpbnNlcnRzIGV4YWN0bHkgMzIgcGllY2UgZW50aXRpZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBjb25zdCBpZHMgPSBnZW5lcmF0ZVN0YXJ0aW5nUG9zaXRpb24oc2Vzc2lvbik7XG4gICAgZXhwZWN0KGlkcykudG9IYXZlTGVuZ3RoKDMyKTtcbiAgICBleHBlY3QobmV3IFNldChpZHMpLnNpemUpLnRvQmUoMzIpOyAvLyBhbGwgdW5pcXVlXG4gIH0pO1xuXG4gIGl0KFwiaW5zZXJ0cyA0IGZhY3RzIHBlciBwaWVjZSAoUGllY2VUeXBlLCBDb2xvciwgUG9zaXRpb24sIEhhc01vdmVkKVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGdlbmVyYXRlU3RhcnRpbmdQb3NpdGlvbihzZXNzaW9uKTtcbiAgICBjb25zdCBmYWN0cyA9IHNlc3Npb24uYWxsRmFjdHMoKTtcblxuICAgIC8vIENvdW50IHBpZWNlIGZhY3RzIChleGNsdWRlIGdhbWUtbGV2ZWwgZmFjdHMgb24gR0FNRV9FTlRJVFkpXG4gICAgY29uc3QgcGllY2VGYWN0cyA9IGZhY3RzLmZpbHRlcigoZikgPT4gZi5pZCAhPT0gR0FNRV9FTlRJVFkpO1xuICAgIC8vIDMyIHBpZWNlcyDDlyA0IGF0dHJzIHBlciBwaWVjZVxuICAgIGV4cGVjdChwaWVjZUZhY3RzKS50b0hhdmVMZW5ndGgoMTI4KTtcbiAgfSk7XG5cbiAgaXQoXCJoYXMgZXhhY3RseSA4IHdoaXRlIHBhd25zIG9uIHJhbmsgMiAoc3F1YXJlcyA4LTE1KVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGdlbmVyYXRlU3RhcnRpbmdQb3NpdGlvbihzZXNzaW9uKTtcbiAgICBjb25zdCBmYWN0cyA9IHNlc3Npb24uYWxsRmFjdHMoKTtcblxuICAgIGNvbnN0IHdoaXRlUGF3blBvc2l0aW9ucyA9IGZhY3RzXG4gICAgICAuZmlsdGVyKChmKSA9PiBmLmF0dHIgPT09IFwiUG9zaXRpb25cIiAmJiBmLmlkICE9PSBHQU1FX0VOVElUWSlcbiAgICAgIC5tYXAoKGYpID0+IHtcbiAgICAgICAgY29uc3QgY29sb3JGYWN0ID0gZmFjdHMuZmluZChcbiAgICAgICAgICAoYykgPT4gYy5pZCA9PT0gZi5pZCAmJiBjLmF0dHIgPT09IFwiQ29sb3JcIlxuICAgICAgICApO1xuICAgICAgICBjb25zdCB0eXBlRmFjdCA9IGZhY3RzLmZpbmQoKHQpID0+IHQuaWQgPT09IGYuaWQgJiYgdC5hdHRyID09PSBcIlBpZWNlVHlwZVwiKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwb3NpdGlvbjogZi52YWx1ZSBhcyBudW1iZXIsXG4gICAgICAgICAgY29sb3I6IGNvbG9yRmFjdD8udmFsdWUsXG4gICAgICAgICAgdHlwZTogdHlwZUZhY3Q/LnZhbHVlLFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKHApID0+IHAuY29sb3IgPT09IFwid2hpdGVcIiAmJiBwLnR5cGUgPT09IFwicGF3blwiKVxuICAgICAgLm1hcCgocCkgPT4gcC5wb3NpdGlvbik7XG5cbiAgICBleHBlY3Qod2hpdGVQYXduUG9zaXRpb25zKS50b0hhdmVMZW5ndGgoOCk7XG4gICAgZXhwZWN0KHdoaXRlUGF3blBvc2l0aW9ucy5ldmVyeSgoc3EpID0+IHNxID49IDggJiYgc3EgPD0gMTUpKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcIndoaXRlIGtpbmcgaXMgb24gZTEgKHNxdWFyZSA0KVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGdlbmVyYXRlU3RhcnRpbmdQb3NpdGlvbihzZXNzaW9uKTtcbiAgICBjb25zdCBmYWN0cyA9IHNlc3Npb24uYWxsRmFjdHMoKTtcblxuICAgIGNvbnN0IGtpbmdFbnRpdHkgPSBmYWN0cy5maW5kKChmKSA9PiB7XG4gICAgICBpZiAoZi5hdHRyICE9PSBcIlBpZWNlVHlwZVwiIHx8IGYudmFsdWUgIT09IFwia2luZ1wiIHx8IGYuaWQgPT09IEdBTUVfRU5USVRZKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbG9yRmFjdCA9IGZhY3RzLmZpbmQoKGMpID0+IGMuaWQgPT09IGYuaWQgJiYgYy5hdHRyID09PSBcIkNvbG9yXCIpO1xuICAgICAgcmV0dXJuIGNvbG9yRmFjdD8udmFsdWUgPT09IFwid2hpdGVcIjtcbiAgICB9KT8uaWQ7XG5cbiAgICBleHBlY3Qoa2luZ0VudGl0eSkudG9CZURlZmluZWQoKTtcbiAgICBjb25zdCBraW5nUG9zID0gZmFjdHMuZmluZCgoZikgPT4gZi5pZCA9PT0ga2luZ0VudGl0eSAmJiBmLmF0dHIgPT09IFwiUG9zaXRpb25cIik/LnZhbHVlO1xuICAgIGV4cGVjdChraW5nUG9zKS50b0JlKDQpOyAvLyBlMVxuICB9KTtcblxuICBpdChcImdhbWUtbGV2ZWwgVHVybiBpcyB3aGl0ZSBpbml0aWFsbHlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBnZW5lcmF0ZVN0YXJ0aW5nUG9zaXRpb24oc2Vzc2lvbik7XG4gICAgY29uc3QgdHVybkZhY3QgPSBzZXNzaW9uLmdldChHQU1FX0VOVElUWSwgXCJUdXJuXCIpO1xuICAgIGV4cGVjdCh0dXJuRmFjdCkudG9CZShcIndoaXRlXCIpO1xuICB9KTtcblxuICBpdChcIkhhc01vdmVkIGlzIGZhbHNlIGZvciBhbGwgcGllY2VzIGluaXRpYWxseVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGdlbmVyYXRlU3RhcnRpbmdQb3NpdGlvbihzZXNzaW9uKTtcbiAgICBjb25zdCBmYWN0cyA9IHNlc3Npb24uYWxsRmFjdHMoKTtcblxuICAgIGNvbnN0IG1vdmVkRmFjdHMgPSBmYWN0cy5maWx0ZXIoXG4gICAgICAoZikgPT4gZi5hdHRyID09PSBcIkhhc01vdmVkXCIgJiYgZi5pZCAhPT0gR0FNRV9FTlRJVFlcbiAgICApO1xuICAgIGV4cGVjdChtb3ZlZEZhY3RzKS50b0hhdmVMZW5ndGgoMzIpO1xuICAgIGV4cGVjdChtb3ZlZEZhY3RzLmV2ZXJ5KChmKSA9PiBmLnZhbHVlID09PSBmYWxzZSkpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwiYmxhY2sga2luZyBpcyBvbiBlOCAoc3F1YXJlIDYwKVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGdlbmVyYXRlU3RhcnRpbmdQb3NpdGlvbihzZXNzaW9uKTtcbiAgICBjb25zdCBmYWN0cyA9IHNlc3Npb24uYWxsRmFjdHMoKTtcblxuICAgIGNvbnN0IGtpbmdFbnRpdHkgPSBmYWN0cy5maW5kKChmKSA9PiB7XG4gICAgICBpZiAoZi5hdHRyICE9PSBcIlBpZWNlVHlwZVwiIHx8IGYudmFsdWUgIT09IFwia2luZ1wiIHx8IGYuaWQgPT09IEdBTUVfRU5USVRZKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbG9yRmFjdCA9IGZhY3RzLmZpbmQoKGMpID0+IGMuaWQgPT09IGYuaWQgJiYgYy5hdHRyID09PSBcIkNvbG9yXCIpO1xuICAgICAgcmV0dXJuIGNvbG9yRmFjdD8udmFsdWUgPT09IFwiYmxhY2tcIjtcbiAgICB9KT8uaWQ7XG5cbiAgICBleHBlY3Qoa2luZ0VudGl0eSkudG9CZURlZmluZWQoKTtcbiAgICBjb25zdCBraW5nUG9zID0gZmFjdHMuZmluZCgoZikgPT4gZi5pZCA9PT0ga2luZ0VudGl0eSAmJiBmLmF0dHIgPT09IFwiUG9zaXRpb25cIik/LnZhbHVlO1xuICAgIGV4cGVjdChraW5nUG9zKS50b0JlKDYwKTsgLy8gZThcbiAgfSk7XG5cbiAgaXQoXCJTVEFSVElOR19QSUVDRVNfREVGIGhhcyAzMiBlbnRyaWVzXCIsICgpID0+IHtcbiAgICBleHBlY3QoU1RBUlRJTkdfUElFQ0VTX0RFRikudG9IYXZlTGVuZ3RoKDMyKTtcbiAgfSk7XG5cbiAgaXQoXCJnYW1lLWxldmVsIGZhY3RzIGFyZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBnZW5lcmF0ZVN0YXJ0aW5nUG9zaXRpb24oc2Vzc2lvbik7XG5cbiAgICBleHBlY3Qoc2Vzc2lvbi5nZXQoR0FNRV9FTlRJVFksIFwiVHVyblwiKSkudG9CZShcIndoaXRlXCIpO1xuICAgIGV4cGVjdChzZXNzaW9uLmdldChHQU1FX0VOVElUWSwgXCJIYWxmbW92ZUNsb2NrXCIpKS50b0JlKDApO1xuICAgIGV4cGVjdChzZXNzaW9uLmdldChHQU1FX0VOVElUWSwgXCJGdWxsbW92ZU51bWJlclwiKSkudG9CZSgxKTtcbiAgICBleHBlY3Qoc2Vzc2lvbi5nZXQoR0FNRV9FTlRJVFksIFwiRW5QYXNzYW50VGFyZ2V0XCIpKS50b0JlKG51bGwpO1xuICAgIGV4cGVjdChzZXNzaW9uLmdldChHQU1FX0VOVElUWSwgXCJHYW1lU3RhdHVzXCIpKS50b0JlKFwiYWN0aXZlXCIpO1xuICAgIGV4cGVjdChzZXNzaW9uLmdldChHQU1FX0VOVElUWSwgXCJXaW5uZXJcIikpLnRvQmUobnVsbCk7XG4gIH0pO1xufSk7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gYXBwbHlMYXlvdXQoKSDigJQgdGhlIHBhcmFtZXRyaXplZCBzcGF3biBwYXRoXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZGVzY3JpYmUoXCJhcHBseUxheW91dCgpXCIsICgpID0+IHtcbiAgaXQoXCJhcHBseWluZyBDTEFTU0lDX0xBWU9VVCBtYXRjaGVzIGdlbmVyYXRlU3RhcnRpbmdQb3NpdGlvbidzIHBpZWNlIGNvdW50ICgzMilcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGEgPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBjb25zdCBiID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgY29uc3QgaWRzQSA9IGFwcGx5TGF5b3V0KGEsIENMQVNTSUNfTEFZT1VUKTtcbiAgICBjb25zdCBpZHNCID0gZ2VuZXJhdGVTdGFydGluZ1Bvc2l0aW9uKGIpO1xuICAgIGV4cGVjdChpZHNBKS50b0hhdmVMZW5ndGgoMzIpO1xuICAgIGV4cGVjdChpZHNCKS50b0hhdmVMZW5ndGgoMzIpO1xuICAgIGV4cGVjdChpZHNBKS50b0VxdWFsKGlkc0IpOyAvLyBzYW1lIEVudGl0eUlkIHNlcXVlbmNlIChzZXNzaW9ucyBzdGFydCBmcmVzaClcbiAgfSk7XG5cbiAgaXQoXCJhcHBseWluZyBDTEFTU0lDX0xBWU9VVCBwcm9kdWNlcyB0aGUgc2FtZSBwaWVjZSBmYWN0cyBhcyBnZW5lcmF0ZVN0YXJ0aW5nUG9zaXRpb25cIiwgKCkgPT4ge1xuICAgIGNvbnN0IGEgPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBjb25zdCBiID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgYXBwbHlMYXlvdXQoYSwgQ0xBU1NJQ19MQVlPVVQpO1xuICAgIGdlbmVyYXRlU3RhcnRpbmdQb3NpdGlvbihiKTtcblxuICAgIC8vIENvbXBhcmUgcGllY2UgZmFjdHMgKGlnbm9yZSBnYW1lLWxldmVsIG9uZXM7IGJvdGggcGF0aHMgaW5zZXJ0XG4gICAgLy8gaWRlbnRpY2FsIGdhbWUtbGV2ZWwgZmFjdHMpLlxuICAgIGNvbnN0IGZhY3RLZXkgPSAoZjogeyBpZDogbnVtYmVyOyBhdHRyOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0pID0+XG4gICAgICBgJHtmLmlkfXwke2YuYXR0cn18JHtTdHJpbmcoZi52YWx1ZSl9YDtcbiAgICBjb25zdCBmYWN0c0EgPSBuZXcgU2V0KFxuICAgICAgYS5hbGxGYWN0cygpLmZpbHRlcigoZikgPT4gZi5pZCAhPT0gR0FNRV9FTlRJVFkpLm1hcChmYWN0S2V5KSxcbiAgICApO1xuICAgIGNvbnN0IGZhY3RzQiA9IG5ldyBTZXQoXG4gICAgICBiLmFsbEZhY3RzKCkuZmlsdGVyKChmKSA9PiBmLmlkICE9PSBHQU1FX0VOVElUWSkubWFwKGZhY3RLZXkpLFxuICAgICk7XG4gICAgZXhwZWN0KGZhY3RzQSkudG9FcXVhbChmYWN0c0IpO1xuICB9KTtcblxuICBpdChcImVtcHR5IGxheW91dCBpbnNlcnRzIHplcm8gcGllY2UgZmFjdHMgYnV0IHN0aWxsIHNlZWRzIGdhbWUtbGV2ZWwgZmFjdHNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVtcHR5OiBTdGFydGluZ0xheW91dCA9IHtcbiAgICAgIGlkOiBcInRlc3QtZW1wdHlcIixcbiAgICAgIG5hbWU6IFwiVGVzdCBFbXB0eVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiemVybyBwaWVjZXNcIixcbiAgICAgIHBpZWNlczogW10sXG4gICAgICBzb3VyY2U6IFwiY3VzdG9tXCIsXG4gICAgfTtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgY29uc3QgaWRzID0gYXBwbHlMYXlvdXQoc2Vzc2lvbiwgZW1wdHkpO1xuICAgIGV4cGVjdChpZHMpLnRvSGF2ZUxlbmd0aCgwKTtcblxuICAgIGNvbnN0IHBpZWNlRmFjdHMgPSBzZXNzaW9uXG4gICAgICAuYWxsRmFjdHMoKVxuICAgICAgLmZpbHRlcigoZikgPT4gZi5pZCAhPT0gR0FNRV9FTlRJVFkpO1xuICAgIGV4cGVjdChwaWVjZUZhY3RzKS50b0hhdmVMZW5ndGgoMCk7XG5cbiAgICAvLyBHYW1lIGZhY3RzIHN0aWxsIHNlZWRlZC5cbiAgICBleHBlY3Qoc2Vzc2lvbi5nZXQoR0FNRV9FTlRJVFksIFwiVHVyblwiKSkudG9CZShcIndoaXRlXCIpO1xuICAgIGV4cGVjdChzZXNzaW9uLmdldChHQU1FX0VOVElUWSwgXCJHYW1lU3RhdHVzXCIpKS50b0JlKFwiYWN0aXZlXCIpO1xuICB9KTtcblxuICBpdChcInBsYWNlbWVudC5oYXNNb3ZlZD10cnVlIGlzIGhvbm9yZWQgKHByZS1yZXZva2VzIGNhc3RsaW5nIHJpZ2h0cylcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGxheW91dDogU3RhcnRpbmdMYXlvdXQgPSB7XG4gICAgICBpZDogXCJ0ZXN0LW1vdmVkXCIsXG4gICAgICBuYW1lOiBcIlRlc3QgTW92ZWQgS2luZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IFwic2luZ2xlIGtpbmcgd2l0aCBoYXNNb3ZlZD10cnVlXCIsXG4gICAgICBwaWVjZXM6IFtcbiAgICAgICAgeyB0eXBlOiBcImtpbmdcIiwgY29sb3I6IFwid2hpdGVcIiwgc3F1YXJlOiA0LCBoYXNNb3ZlZDogdHJ1ZSB9LFxuICAgICAgICB7IHR5cGU6IFwia2luZ1wiLCBjb2xvcjogXCJibGFja1wiLCBzcXVhcmU6IDYwIH0sXG4gICAgICBdLFxuICAgICAgc291cmNlOiBcImN1c3RvbVwiLFxuICAgIH07XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGNvbnN0IGlkcyA9IGFwcGx5TGF5b3V0KHNlc3Npb24sIGxheW91dCk7XG4gICAgZXhwZWN0KGlkcykudG9IYXZlTGVuZ3RoKDIpO1xuXG4gICAgLy8gV2hpdGUga2luZyBoYXMgSGFzTW92ZWQ9dHJ1ZTsgYmxhY2sga2luZyBkZWZhdWx0cyB0byBmYWxzZS5cbiAgICBjb25zdCB3aGl0ZUtpbmdNb3ZlZCA9IHNlc3Npb24uZ2V0KGlkc1swXSEsIFwiSGFzTW92ZWRcIik7XG4gICAgY29uc3QgYmxhY2tLaW5nTW92ZWQgPSBzZXNzaW9uLmdldChpZHNbMV0hLCBcIkhhc01vdmVkXCIpO1xuICAgIGV4cGVjdCh3aGl0ZUtpbmdNb3ZlZCkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QoYmxhY2tLaW5nTW92ZWQpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcIkNMQVNTSUNfTEFZT1VUIGlzIHJlZ2lzdGVyZWQgd2l0aCBzb3VyY2U9J3ByZW1hZGUnIGFuZCBpZD0nY2xhc3NpYydcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChDTEFTU0lDX0xBWU9VVC5pZCkudG9CZShcImNsYXNzaWNcIik7XG4gICAgZXhwZWN0KENMQVNTSUNfTEFZT1VULnNvdXJjZSkudG9CZShcInByZW1hZGVcIik7XG4gICAgZXhwZWN0KENMQVNTSUNfTEFZT1VULnBpZWNlcykudG9IYXZlTGVuZ3RoKDMyKTtcbiAgfSk7XG5cbiAgaXQoXCJwaWVjZXMgYXJlIGluc2VydGVkIGluIGxheW91dC5waWVjZXMgb3JkZXIgKEVudGl0eUlkIHNlcXVlbmNlIG1hdGNoZXMpXCIsICgpID0+IHtcbiAgICBjb25zdCBsYXlvdXQ6IFN0YXJ0aW5nTGF5b3V0ID0ge1xuICAgICAgaWQ6IFwidGVzdC1vcmRlclwiLFxuICAgICAgbmFtZTogXCJUZXN0IE9yZGVyXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJ0d28gcGllY2VzIGluIHNwZWNpZmljIG9yZGVyXCIsXG4gICAgICBwaWVjZXM6IFtcbiAgICAgICAgeyB0eXBlOiBcInJvb2tcIiwgY29sb3I6IFwid2hpdGVcIiwgc3F1YXJlOiAwIH0sXG4gICAgICAgIHsgdHlwZTogXCJraW5nXCIsIGNvbG9yOiBcIndoaXRlXCIsIHNxdWFyZTogNCB9LFxuICAgICAgXSxcbiAgICAgIHNvdXJjZTogXCJjdXN0b21cIixcbiAgICB9O1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBjb25zdCBpZHMgPSBhcHBseUxheW91dChzZXNzaW9uLCBsYXlvdXQpO1xuICAgIGV4cGVjdChpZHMpLnRvSGF2ZUxlbmd0aCgyKTtcblxuICAgIC8vIEZpcnN0IGlkIOKGkiByb29rIGF0IHNxdWFyZSAwLCBzZWNvbmQgaWQg4oaSIGtpbmcgYXQgc3F1YXJlIDQuXG4gICAgZXhwZWN0KHNlc3Npb24uZ2V0KGlkc1swXSEsIFwiUGllY2VUeXBlXCIpKS50b0JlKFwicm9va1wiKTtcbiAgICBleHBlY3Qoc2Vzc2lvbi5nZXQoaWRzWzBdISwgXCJQb3NpdGlvblwiKSkudG9CZSgwKTtcbiAgICBleHBlY3Qoc2Vzc2lvbi5nZXQoaWRzWzFdISwgXCJQaWVjZVR5cGVcIikpLnRvQmUoXCJraW5nXCIpO1xuICAgIGV4cGVjdChzZXNzaW9uLmdldChpZHNbMV0hLCBcIlBvc2l0aW9uXCIpKS50b0JlKDQpO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL2NoZXNzL3NyYy9zdGFydGluZy1wb3NpdGlvbi50ZXN0LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/c20ac38ed840ff4e3504dcaaf1345e147f142c29 b/7xOfJqsDU787fe61oSCq1/web/c20ac38ed840ff4e3504dcaaf1345e147f142c29 deleted file mode 100644 index 5587eb0..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/c20ac38ed840ff4e3504dcaaf1345e147f142c29 +++ /dev/null @@ -1,135 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/presets/registry.ts", {"importedNames":["PRESET_REGISTRY"]}); -const DEFAULT_HP = 2; -function iteratePieceIds(session) { - const facts = session.allFacts(); - const ids = /* @__PURE__ */ new Set(); - for (const f of facts) { - if (f.attr === "PieceType" && f.id > 0) { - ids.add(f.id); - } - }; - return [...ids]; -} -__vite_ssr_import_0__.PRESET_REGISTRY.register({ - id: "piece-hp", - name: "Hit Points", - description: "Every piece has 2 HP. Damage (capture, explosion, poison…) deals 1 HP instead of immediately killing. A piece only dies when its HP hits 0; until then the attacker doesn't advance — the hit becomes a 'poke'.", - incompatibleWith: [], - requires: [], - // We OWN the Hp attribute. The engine unions this into - // effectivePieceAttrs while we're active, so the default damage - // retract path cleans Hp facts up automatically when pieces die - // from causes other than our own onDamage path (belt-and-suspenders - // — today we always self-retract on lethal damage, but if a future - // preset ever calls engine.dealDamage with an Hp we didn't seed, - // it'd still get cleaned up). - pieceAttributes: ["Hp"], - onActivate({ engine }) { - const session = engine.session; - for (const id of iteratePieceIds(session)) { - if (session.contains(id, "Hp")) continue; - session.insert(id, "Hp", DEFAULT_HP); - } - }, - /** - * Seed Hp on newly spawned pieces. Runs for every spawn reason — - * promotion, fission, summon, resurrection. The idempotence guard - * from `onActivate` is preserved here so callers that set Hp - * before calling spawnPiece (e.g. "spawn at half HP") can opt out - * by pre-inserting Hp before this hook fires. (Today nothing - * does that, but the guarantee lets future tuning opt in.) - */ - onPieceSpawn(ctx) { - const { engine, pieceId } = ctx; - if (engine.session.contains(pieceId, "Hp")) return; - engine.session.insert(pieceId, "Hp", DEFAULT_HP); - }, - onDeactivate({ engine }) { - const session = engine.session; - for (const id of iteratePieceIds(session)) { - if (session.contains(id, "Hp")) { - session.retract(id, "Hp"); - } - } - }, - /** - * The damage pipeline's single consumer. Every damage event — whether - * from a capture, an AoE explosion, a poisoned square, or something - * not yet invented — comes through here when HP is active. - * - * `amount` is respected: a hit for 2 from a hypothetical "heavy - * attack" preset would kill a 2-HP piece in one blow. This makes - * piece-hp composable with damage sources that vary in strength - * without needing per-source special cases. - */ - onDamage({ engine, target, amount }) { - if (amount <= 0) return { consume: true, died: false }; - const session = engine.session; - const current = session.contains(target, "Hp") ? session.get(target, "Hp") : DEFAULT_HP; - const next = current - amount; - if (next > 0) { - session.insert(target, "Hp", next); - return { consume: true, died: false }; - }; - for (const attr of engine.effectivePieceAttrs) { - if (session.contains(target, attr)) session.retract(target, attr); - }; - return { consume: true, died: true }; - }, - /** - * Opt out of the engine's default self-check filter. With HP active, - * being "in check" just means your next hit costs you 1 HP — it - * doesn't end the game, and it shouldn't force you to respond. This - * lets players move freely even while their king is under attack, - * and lets them deliberately move their king into an attacked - * square (paying HP when the attacker follows through). - */ - shouldFilterSelfCheck() { - return false; - }, - /** - * Terminal-state override: whoever lost their king LOSES. - * - * Without HP, the king is never literally captured — the self-check - * filter prevents any move that would let it be. With HP and no - * self-check filter, a king CAN be captured (its HP hits 0 via - * `onBeforeCapture` and the default capture path retracts it). The - * moment that happens, the opposite color wins; standard - * checkmate/stalemate logic becomes meaningless because a king that - * can be "in check" forever isn't a terminal condition any more. - * - * Returning `undefined` here means "no preset-level verdict yet — - * run the default logic". Once a king is gone we return the winner - * directly. - */ - onCheckGameResult({ engine }) { - const session = engine.session; - const colors = kingsPresent(session); - if (!colors.white && colors.black) return "black-wins"; - if (colors.white && !colors.black) return "white-wins"; - if (!colors.white && !colors.black) { - const turn = engine.getCurrentTurn(); - return turn === "white" ? "black-wins" : "white-wins"; - }; - return "ongoing"; - } -}); -function kingsPresent(session) { - const facts = session.allFacts(); - let white = false; - let black = false; - for (const f of facts) { - if (f.attr !== "PieceType" || f.value !== "king") continue; - const alive = facts.some( - (p) => p.id === f.id && p.attr === "Position" - ); - if (!alive) continue; - const colorFact = facts.find((c) => c.id === f.id && c.attr === "Color"); - if (colorFact?.value === "white") white = true; - else if (colorFact?.value === "black") black = true; - }; - return { white, black }; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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TyxPQUFPO0FBU2xDLFlBQU0sT0FBTyxPQUFPLGVBQWU7QUFDbkMsYUFBTyxTQUFTLFVBQVUsZUFBZTtBQUFBLElBQzNDO0FBYUEsV0FBTztBQUFBLEVBQ1Q7QUFDRixDQUFDO0FBT0QsU0FBUyxhQUFhLFNBQXNEO0FBQzFFLFFBQU0sUUFBUSxRQUFRLFNBQVM7QUFDL0IsTUFBSSxRQUFRO0FBQ1osTUFBSSxRQUFRO0FBQ1osYUFBVyxLQUFLLE9BQU87QUFDckIsUUFBSSxFQUFFLFNBQVMsZUFBZSxFQUFFLFVBQVUsT0FBUTtBQUVsRCxVQUFNLFFBQVEsTUFBTTtBQUFBLE1BQ2xCLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUztBQUFBLElBQ3JDO0FBQ0EsUUFBSSxDQUFDLE1BQU87QUFDWixVQUFNLFlBQVksTUFBTSxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxPQUFPO0FBQ3ZFLFFBQUksV0FBVyxVQUFVLFFBQVMsU0FBUTtBQUFBLGFBQ2pDLFdBQVcsVUFBVSxRQUFTLFNBQVE7QUFBQSxFQUNqRDtBQUNBLFNBQU8sRUFBRSxPQUFPLE1BQU07QUFDeEIiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInBpZWNlLWhwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHJlc2V0OiBgcGllY2UtaHBgIChIaXQgUG9pbnRzLCBSVUxFUy5tZCBydWxlICMxMylcbiAqXG4gKiBFdmVyeSBwaWVjZSBzdGFydHMgd2l0aCAyIEhQLiBBIGRhbWFnZSBldmVudCBkZWFscyAxIEhQOyB0aGUgdGFyZ2V0XG4gKiBvbmx5IGRpZXMgKGlzIHJldHJhY3RlZCBmcm9tIHRoZSBib2FyZCkgd2hlbiBpdHMgSFAgaGl0cyAwLiBUaGVcbiAqIGVuZ2luZSdzIGNhcHR1cmUtcGF0aCBhbHJlYWR5IHJvdXRlcyBjYXB0dXJlcyB0aHJvdWdoIGBkZWFsRGFtYWdlYCxcbiAqIHNvIFwiY2FwdHVyaW5nIGEgcGllY2VcIiBhbmQgXCJ0YWtpbmcgcG9pc29uL2V4cGxvc2lvbiBkYW1hZ2VcIiBhbGxcbiAqIGZsb3cgdGhyb3VnaCB0aGUgc2FtZSBob29rIOKAlCBwaWVjZS1ocCBpcyB0aGUgc29sZSBhcmJpdGVyIG9mXG4gKiBkYW1hZ2UtdG8tZGVhdGggZm9yIHRoZSB3aG9sZSBnYW1lLlxuICpcbiAqIEhvdyBpdCBpbnRlZ3JhdGVzXG4gKiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAqICAtIG9uQWN0aXZhdGU6IGFzc2VydCBgSHAgPSAyYCBvbiBldmVyeSBleGlzdGluZyBlbnRpdHkgb24gdGhlXG4gKiAgICBib2FyZC4gSWRlbXBvdGVudDogb25seSBhc3NpZ25zIHRvIGVudGl0aWVzIHRoYXQgZG9uJ3QgYWxyZWFkeVxuICogICAgaGF2ZSBhbiBIcCBmYWN0LCBzbyByZXBsYXlpbmcgYWN0aXZhdGUgb24gYW4gYWxyZWFkeS1IUC1sb2FkZWRcbiAqICAgIHNlc3Npb24gKGUuZy4gYWZ0ZXIgbG9hZGluZyBzZXJ2ZXIgc3RhdGUgdGhhdCBpbmNsdWRlZCBIcClcbiAqICAgIGRvZXNuJ3QgcmVzZXQgZXZlcnlvbmUuXG4gKlxuICogIC0gb25EZWFjdGl2YXRlOiByZXRyYWN0IEhwIGZyb20gZXZlcnkgZW50aXR5LiBTeW1tZXRyaWMgY2xlYW51cCBzb1xuICogICAgdG9nZ2xpbmcgdGhlIHByZXNldCBvZmYgbWlkLWdhbWUgcmV0dXJucyB0aGUgYm9hcmQgdG8gc3RhbmRhcmRcbiAqICAgIFwiZGFtYWdlIGtpbGxzXCIgYmVoYXZpb3VyIHdpdGhvdXQgbGVhdmluZyBzdGFsZSBhdHRyaWJ1dGVzLlxuICpcbiAqICAtIG9uRGFtYWdlOiBkZWNyZW1lbnQgdGhlIHRhcmdldCdzIEhwIGJ5IGBhbW91bnRgLiBJZiB0aGUgbmV3IEhwXG4gKiAgICBpcyBzdGlsbCBwb3NpdGl2ZSwgcmV0dXJuIGB7IGNvbnN1bWU6IHRydWUsIGRpZWQ6IGZhbHNlIH1gIOKAlCB0aGVcbiAqICAgIGRhbWFnZSBwaXBlbGluZSByZXBvcnRzIFwidGFyZ2V0IHN1cnZpdmVkXCIgc28gdGhlIGVuZ2luZSBrbm93c1xuICogICAgbm90IHRvIGFkdmFuY2UgdGhlIGF0dGFja2VyIChjYXB0dXJlID0gcG9rZSkuIElmIEhwIHdvdWxkIGdvIHRvXG4gKiAgICAwIG9yIGJlbG93LCByZXRyYWN0IHRoZSB0YXJnZXQgb3Vyc2VsdmVzIGFuZCByZXR1cm4gYHsgY29uc3VtZTpcbiAqICAgIHRydWUsIGRpZWQ6IHRydWUgfWAgc28gdGhlIGVuZ2luZSBhZHZhbmNlcyB0aGUgYXR0YWNrZXIgYXNcbiAqICAgIG5vcm1hbC5cbiAqXG4gKiAgICBXZSBETyBjb25zdW1lIHRoZSBsZXRoYWwgY2FzZSByYXRoZXIgdGhhbiBmYWxsaW5nIHRocm91Z2ggdG8gdGhlXG4gKiAgICBlbmdpbmUncyBkZWZhdWx0IHJldHJhY3QsIGJlY2F1c2UgaWYgd2UgZGlkbid0LCB0aGUgZGVmYXVsdCBwYXRoXG4gKiAgICB3b3VsZCBhbHNvIHJldHJhY3QgYW5kIHdlJ2QgZW5kIHVwIHdpdGggdHdvIHJldHJhY3QgcGFzc2VzIChzYWZlXG4gKiAgICBidXQgd2FzdGVmdWwpIEFORCBgZGllZGAgc2VtYW50aWNzIHdvdWxkIGJlIGZyYWdpbGUg4oCUIG90aGVyXG4gKiAgICBwcmVzZXRzIHRoYXQgcmVhZCBkaWVkIHRvIGNhc2NhZGUgdHJpZ2dlcnMgKGZpc3Npb24sIGV0Yykgd291bGRcbiAqICAgIHNlZSBgZGllZD10cnVlYCBjb21pbmcgZnJvbSB0aGUgZW5naW5lJ3MgZmFsbGJhY2sgcmF0aGVyIHRoYW5cbiAqICAgIGZyb20gSFAncyBleHBsaWNpdCBkZWNpc2lvbi5cbiAqXG4gKiAgLSBzaG91bGRGaWx0ZXJTZWxmQ2hlY2s6IG9wdCBvdXQgb2YgdGhlIGVuZ2luZSdzIFwieW91IGNhbid0IGxlYXZlXG4gKiAgICB5b3VyIGtpbmcgaW4gY2hlY2tcIiBtb3ZlIGZpbHRlci4gV2l0aCBIUCBhY3RpdmUsIGJlaW5nIGluIGNoZWNrXG4gKiAgICBqdXN0IG1lYW5zIHlvdXIgbmV4dCBoaXQgY29zdHMgSFAg4oCUIG1vdmVzIHRoYXQgaWdub3JlIHRoZSBjaGVja1xuICogICAgYXJlIGxlZ2FsIChzZWUgUkVBRE1FIGZvciB0aGUgZnVsbCB2YXJpYW50IHJ1bGVzZXQpLlxuICpcbiAqICAtIG9uQ2hlY2tHYW1lUmVzdWx0OiBkZWNsYXJlIHRlcm1pbmFsIGdhbWUgcmVzdWx0IGJhc2VkIG9uIHdoZXRoZXJcbiAqICAgIGEga2luZyBoYXMgYmVlbiByZXRyYWN0ZWQgKHdvbiDihpIgYnkgdGhlIGNvbG9yIHdob3NlIGtpbmcgcmVtYWlucykuXG4gKiAgICBTdXBwcmVzc2VzIGRlZmF1bHQgY2hlY2ttYXRlL3N0YWxlbWF0ZSBiZWNhdXNlIHRob3NlIGFyZW4ndFxuICogICAgbWVhbmluZ2Z1bCB3aGVuIGtpbmdzIGNhbiBzdGFuZCBpbiBjaGVjay5cbiAqXG4gKiBDb21wYXRpYmlsaXR5OiBub3cgcGxheXMgbmljZWx5IHdpdGggZXZlcnkgb3RoZXIgZGFtYWdlLWRlYWxpbmdcbiAqIHByZXNldCAoZXhwbG9zaXZlLXJvb2ssIHF1ZWVuLXNwbGl0cywgcG9pc29uZWQtc3F1YXJlcywgLi4uKSBiZWNhdXNlXG4gKiB0aGV5IGFsbCB1c2UgdGhlIGRhbWFnZSBwaXBlbGluZS4gTm8gbW9yZSBoYXJkY29kZWQgaW5jb21wYXRpYmlsaXRpZXMuXG4gKi9cbmltcG9ydCB7IFBSRVNFVF9SRUdJU1RSWSB9IGZyb20gXCIuL3JlZ2lzdHJ5LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEdhbWVSZXN1bHQgfSBmcm9tIFwiLi4vZW5naW5lLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNlc3Npb24sIEVudGl0eUlkIH0gZnJvbSBcIkBwYXJhdHlwZS9yZXRlXCI7XG5cbi8qKiBTdGFydGluZyBIUCBmb3IgZXZlcnkgcGllY2UuIEZ1dHVyZSB3b3JrOiBtYWtlIHRoaXMgcGVyLXR5cGUgc29cbiAqICBwYXducyBoYXZlIDEgSFAgYW5kIHF1ZWVucyBoYXZlIDMsIGV0Yy4gKi9cbmNvbnN0IERFRkFVTFRfSFAgPSAyO1xuXG4vKiogRmluZCBldmVyeSBlbnRpdHkgb24gdGhlIGJvYXJkIHRoYXQgY291bGQgcmVhc29uYWJseSBiZSBhIHBpZWNlXG4gKiAgKGhhcyBQaWVjZVR5cGUgKyBDb2xvciArIFBvc2l0aW9uKS4gR2FtZS1sZXZlbCBlbnRpdHkgKGlkIDApIGlzXG4gKiAgZXhjbHVkZWQuICovXG5mdW5jdGlvbiBpdGVyYXRlUGllY2VJZHMoc2Vzc2lvbjogU2Vzc2lvbik6IEVudGl0eUlkW10ge1xuICBjb25zdCBmYWN0cyA9IHNlc3Npb24uYWxsRmFjdHMoKTtcbiAgY29uc3QgaWRzID0gbmV3IFNldDxFbnRpdHlJZD4oKTtcbiAgZm9yIChjb25zdCBmIG9mIGZhY3RzKSB7XG4gICAgaWYgKGYuYXR0ciA9PT0gXCJQaWVjZVR5cGVcIiAmJiAoZi5pZCBhcyBudW1iZXIpID4gMCkge1xuICAgICAgaWRzLmFkZChmLmlkKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFsuLi5pZHNdO1xufVxuXG5QUkVTRVRfUkVHSVNUUlkucmVnaXN0ZXIoe1xuICBpZDogXCJwaWVjZS1ocFwiLFxuICBuYW1lOiBcIkhpdCBQb2ludHNcIixcbiAgZGVzY3JpcHRpb246XG4gICAgXCJFdmVyeSBwaWVjZSBoYXMgMiBIUC4gRGFtYWdlIChjYXB0dXJlLCBleHBsb3Npb24sIHBvaXNvbuKApikgZGVhbHMgMSBIUCBpbnN0ZWFkIG9mIGltbWVkaWF0ZWx5IGtpbGxpbmcuIEEgcGllY2Ugb25seSBkaWVzIHdoZW4gaXRzIEhQIGhpdHMgMDsgdW50aWwgdGhlbiB0aGUgYXR0YWNrZXIgZG9lc24ndCBhZHZhbmNlIOKAlCB0aGUgaGl0IGJlY29tZXMgYSAncG9rZScuXCIsXG4gIGluY29tcGF0aWJsZVdpdGg6IFtdLFxuICByZXF1aXJlczogW10sXG4gIC8vIFdlIE9XTiB0aGUgSHAgYXR0cmlidXRlLiBUaGUgZW5naW5lIHVuaW9ucyB0aGlzIGludG9cbiAgLy8gZWZmZWN0aXZlUGllY2VBdHRycyB3aGlsZSB3ZSdyZSBhY3RpdmUsIHNvIHRoZSBkZWZhdWx0IGRhbWFnZVxuICAvLyByZXRyYWN0IHBhdGggY2xlYW5zIEhwIGZhY3RzIHVwIGF1dG9tYXRpY2FsbHkgd2hlbiBwaWVjZXMgZGllXG4gIC8vIGZyb20gY2F1c2VzIG90aGVyIHRoYW4gb3VyIG93biBvbkRhbWFnZSBwYXRoIChiZWx0LWFuZC1zdXNwZW5kZXJzXG4gIC8vIOKAlCB0b2RheSB3ZSBhbHdheXMgc2VsZi1yZXRyYWN0IG9uIGxldGhhbCBkYW1hZ2UsIGJ1dCBpZiBhIGZ1dHVyZVxuICAvLyBwcmVzZXQgZXZlciBjYWxscyBlbmdpbmUuZGVhbERhbWFnZSB3aXRoIGFuIEhwIHdlIGRpZG4ndCBzZWVkLFxuICAvLyBpdCdkIHN0aWxsIGdldCBjbGVhbmVkIHVwKS5cbiAgcGllY2VBdHRyaWJ1dGVzOiBbXCJIcFwiXSxcblxuICBvbkFjdGl2YXRlKHsgZW5naW5lIH0pIHtcbiAgICBjb25zdCBzZXNzaW9uID0gZW5naW5lLnNlc3Npb247XG4gICAgZm9yIChjb25zdCBpZCBvZiBpdGVyYXRlUGllY2VJZHMoc2Vzc2lvbikpIHtcbiAgICAgIC8vIElkZW1wb3RlbnQ6IHNraXAgZW50aXRpZXMgdGhhdCBhbHJlYWR5IGhhdmUgYW4gSHAgZmFjdCwgc29cbiAgICAgIC8vIHN5bmNpbmcgZnJvbSBzZXJ2ZXIgc3RhdGUgdGhhdCBhbHJlYWR5IGluY2x1ZGVzIEhwIGRvZXNuJ3RcbiAgICAgIC8vIHN0b21wIG9uIHRoZSBhdXRob3JpdGF0aXZlIHZhbHVlcy5cbiAgICAgIGlmIChzZXNzaW9uLmNvbnRhaW5zKGlkLCBcIkhwXCIpKSBjb250aW51ZTtcbiAgICAgIHNlc3Npb24uaW5zZXJ0KGlkLCBcIkhwXCIsIERFRkFVTFRfSFApO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogU2VlZCBIcCBvbiBuZXdseSBzcGF3bmVkIHBpZWNlcy4gUnVucyBmb3IgZXZlcnkgc3Bhd24gcmVhc29uIOKAlFxuICAgKiBwcm9tb3Rpb24sIGZpc3Npb24sIHN1bW1vbiwgcmVzdXJyZWN0aW9uLiBUaGUgaWRlbXBvdGVuY2UgZ3VhcmRcbiAgICogZnJvbSBgb25BY3RpdmF0ZWAgaXMgcHJlc2VydmVkIGhlcmUgc28gY2FsbGVycyB0aGF0IHNldCBIcFxuICAgKiBiZWZvcmUgY2FsbGluZyBzcGF3blBpZWNlIChlLmcuIFwic3Bhd24gYXQgaGFsZiBIUFwiKSBjYW4gb3B0IG91dFxuICAgKiBieSBwcmUtaW5zZXJ0aW5nIEhwIGJlZm9yZSB0aGlzIGhvb2sgZmlyZXMuIChUb2RheSBub3RoaW5nXG4gICAqIGRvZXMgdGhhdCwgYnV0IHRoZSBndWFyYW50ZWUgbGV0cyBmdXR1cmUgdHVuaW5nIG9wdCBpbi4pXG4gICAqL1xuICBvblBpZWNlU3Bhd24oY3R4KSB7XG4gICAgY29uc3QgeyBlbmdpbmUsIHBpZWNlSWQgfSA9IGN0eDtcbiAgICBpZiAoZW5naW5lLnNlc3Npb24uY29udGFpbnMocGllY2VJZCwgXCJIcFwiKSkgcmV0dXJuO1xuICAgIGVuZ2luZS5zZXNzaW9uLmluc2VydChwaWVjZUlkLCBcIkhwXCIsIERFRkFVTFRfSFApO1xuICB9LFxuXG4gIG9uRGVhY3RpdmF0ZSh7IGVuZ2luZSB9KSB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGVuZ2luZS5zZXNzaW9uO1xuICAgIGZvciAoY29uc3QgaWQgb2YgaXRlcmF0ZVBpZWNlSWRzKHNlc3Npb24pKSB7XG4gICAgICBpZiAoc2Vzc2lvbi5jb250YWlucyhpZCwgXCJIcFwiKSkge1xuICAgICAgICBzZXNzaW9uLnJldHJhY3QoaWQsIFwiSHBcIik7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBUaGUgZGFtYWdlIHBpcGVsaW5lJ3Mgc2luZ2xlIGNvbnN1bWVyLiBFdmVyeSBkYW1hZ2UgZXZlbnQg4oCUIHdoZXRoZXJcbiAgICogZnJvbSBhIGNhcHR1cmUsIGFuIEFvRSBleHBsb3Npb24sIGEgcG9pc29uZWQgc3F1YXJlLCBvciBzb21ldGhpbmdcbiAgICogbm90IHlldCBpbnZlbnRlZCDigJQgY29tZXMgdGhyb3VnaCBoZXJlIHdoZW4gSFAgaXMgYWN0aXZlLlxuICAgKlxuICAgKiBgYW1vdW50YCBpcyByZXNwZWN0ZWQ6IGEgaGl0IGZvciAyIGZyb20gYSBoeXBvdGhldGljYWwgXCJoZWF2eVxuICAgKiBhdHRhY2tcIiBwcmVzZXQgd291bGQga2lsbCBhIDItSFAgcGllY2UgaW4gb25lIGJsb3cuIFRoaXMgbWFrZXNcbiAgICogcGllY2UtaHAgY29tcG9zYWJsZSB3aXRoIGRhbWFnZSBzb3VyY2VzIHRoYXQgdmFyeSBpbiBzdHJlbmd0aFxuICAgKiB3aXRob3V0IG5lZWRpbmcgcGVyLXNvdXJjZSBzcGVjaWFsIGNhc2VzLlxuICAgKi9cbiAgb25EYW1hZ2UoeyBlbmdpbmUsIHRhcmdldCwgYW1vdW50IH0pIHtcbiAgICAvLyBUaGUgZW5naW5lIHNob3J0LWNpcmN1aXRzIGFtb3VudDw9MCBiZWZvcmUgd2UgZXZlciBnZXQgaGVyZSxcbiAgICAvLyBidXQgYmUgZGVmZW5zaXZlOiBpZiBzb21laG93IGludm9rZWQgd2l0aCAwLCB0cmVhdCBpdCBhcyBhXG4gICAgLy8gbm8tb3Agc3Vydml2YWwuXG4gICAgaWYgKGFtb3VudCA8PSAwKSByZXR1cm4geyBjb25zdW1lOiB0cnVlLCBkaWVkOiBmYWxzZSB9O1xuXG4gICAgY29uc3Qgc2Vzc2lvbiA9IGVuZ2luZS5zZXNzaW9uO1xuICAgIGNvbnN0IGN1cnJlbnQgPSBzZXNzaW9uLmNvbnRhaW5zKHRhcmdldCwgXCJIcFwiKVxuICAgICAgPyAoc2Vzc2lvbi5nZXQodGFyZ2V0LCBcIkhwXCIpIGFzIG51bWJlcilcbiAgICAgIDogREVGQVVMVF9IUDtcbiAgICBjb25zdCBuZXh0ID0gY3VycmVudCAtIGFtb3VudDtcblxuICAgIGlmIChuZXh0ID4gMCkge1xuICAgICAgc2Vzc2lvbi5pbnNlcnQodGFyZ2V0LCBcIkhwXCIsIG5leHQpO1xuICAgICAgcmV0dXJuIHsgY29uc3VtZTogdHJ1ZSwgZGllZDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICAvLyBMZXRoYWwuIFJldHJhY3QgYWxsIGVmZmVjdGl2ZSBwaWVjZSBhdHRycyBvdXJzZWx2ZXMgKGNvcmUgK1xuICAgIC8vIHdoYXRldmVyIG90aGVyIHByZXNldHMgZGVjbGFyZWQpIHNvIG5vdGhpbmcgaXMgbGVmdCBiZWhpbmQuXG4gICAgLy8gUmV0dXJuaW5nIGRpZWQ6dHJ1ZSB0ZWxscyB1cHN0cmVhbSBjYWxsZXJzIChjYXB0dXJlIHBhdGgpIHRoYXRcbiAgICAvLyB0aGUgYXR0YWNrZXIgc2hvdWxkIGFkdmFuY2UuXG4gICAgZm9yIChjb25zdCBhdHRyIG9mIGVuZ2luZS5lZmZlY3RpdmVQaWVjZUF0dHJzKSB7XG4gICAgICBpZiAoc2Vzc2lvbi5jb250YWlucyh0YXJnZXQsIGF0dHIpKSBzZXNzaW9uLnJldHJhY3QodGFyZ2V0LCBhdHRyKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgY29uc3VtZTogdHJ1ZSwgZGllZDogdHJ1ZSB9O1xuICB9LFxuXG4gIC8qKlxuICAgKiBPcHQgb3V0IG9mIHRoZSBlbmdpbmUncyBkZWZhdWx0IHNlbGYtY2hlY2sgZmlsdGVyLiBXaXRoIEhQIGFjdGl2ZSxcbiAgICogYmVpbmcgXCJpbiBjaGVja1wiIGp1c3QgbWVhbnMgeW91ciBuZXh0IGhpdCBjb3N0cyB5b3UgMSBIUCDigJQgaXRcbiAgICogZG9lc24ndCBlbmQgdGhlIGdhbWUsIGFuZCBpdCBzaG91bGRuJ3QgZm9yY2UgeW91IHRvIHJlc3BvbmQuIFRoaXNcbiAgICogbGV0cyBwbGF5ZXJzIG1vdmUgZnJlZWx5IGV2ZW4gd2hpbGUgdGhlaXIga2luZyBpcyB1bmRlciBhdHRhY2ssXG4gICAqIGFuZCBsZXRzIHRoZW0gZGVsaWJlcmF0ZWx5IG1vdmUgdGhlaXIga2luZyBpbnRvIGFuIGF0dGFja2VkXG4gICAqIHNxdWFyZSAocGF5aW5nIEhQIHdoZW4gdGhlIGF0dGFja2VyIGZvbGxvd3MgdGhyb3VnaCkuXG4gICAqL1xuICBzaG91bGRGaWx0ZXJTZWxmQ2hlY2soKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBUZXJtaW5hbC1zdGF0ZSBvdmVycmlkZTogd2hvZXZlciBsb3N0IHRoZWlyIGtpbmcgTE9TRVMuXG4gICAqXG4gICAqIFdpdGhvdXQgSFAsIHRoZSBraW5nIGlzIG5ldmVyIGxpdGVyYWxseSBjYXB0dXJlZCDigJQgdGhlIHNlbGYtY2hlY2tcbiAgICogZmlsdGVyIHByZXZlbnRzIGFueSBtb3ZlIHRoYXQgd291bGQgbGV0IGl0IGJlLiBXaXRoIEhQIGFuZCBub1xuICAgKiBzZWxmLWNoZWNrIGZpbHRlciwgYSBraW5nIENBTiBiZSBjYXB0dXJlZCAoaXRzIEhQIGhpdHMgMCB2aWFcbiAgICogYG9uQmVmb3JlQ2FwdHVyZWAgYW5kIHRoZSBkZWZhdWx0IGNhcHR1cmUgcGF0aCByZXRyYWN0cyBpdCkuIFRoZVxuICAgKiBtb21lbnQgdGhhdCBoYXBwZW5zLCB0aGUgb3Bwb3NpdGUgY29sb3Igd2luczsgc3RhbmRhcmRcbiAgICogY2hlY2ttYXRlL3N0YWxlbWF0ZSBsb2dpYyBiZWNvbWVzIG1lYW5pbmdsZXNzIGJlY2F1c2UgYSBraW5nIHRoYXRcbiAgICogY2FuIGJlIFwiaW4gY2hlY2tcIiBmb3JldmVyIGlzbid0IGEgdGVybWluYWwgY29uZGl0aW9uIGFueSBtb3JlLlxuICAgKlxuICAgKiBSZXR1cm5pbmcgYHVuZGVmaW5lZGAgaGVyZSBtZWFucyBcIm5vIHByZXNldC1sZXZlbCB2ZXJkaWN0IHlldCDigJRcbiAgICogcnVuIHRoZSBkZWZhdWx0IGxvZ2ljXCIuIE9uY2UgYSBraW5nIGlzIGdvbmUgd2UgcmV0dXJuIHRoZSB3aW5uZXJcbiAgICogZGlyZWN0bHkuXG4gICAqL1xuICBvbkNoZWNrR2FtZVJlc3VsdCh7IGVuZ2luZSB9KTogR2FtZVJlc3VsdCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGVuZ2luZS5zZXNzaW9uO1xuICAgIGNvbnN0IGNvbG9ycyA9IGtpbmdzUHJlc2VudChzZXNzaW9uKTtcbiAgICBpZiAoIWNvbG9ycy53aGl0ZSAmJiBjb2xvcnMuYmxhY2spIHJldHVybiBcImJsYWNrLXdpbnNcIjtcbiAgICBpZiAoY29sb3JzLndoaXRlICYmICFjb2xvcnMuYmxhY2spIHJldHVybiBcIndoaXRlLXdpbnNcIjtcbiAgICBpZiAoIWNvbG9ycy53aGl0ZSAmJiAhY29sb3JzLmJsYWNrKSB7XG4gICAgICAvLyBCb3RoIGtpbmdzIGRlYWQgaW4gdGhlIHNhbWUgaGFsZi1tb3ZlIChlLmcuIGFuIEFvRSBwcmVzZXRcbiAgICAgIC8vIHRoYXQga2lsbHMgdGhyb3VnaCB0aGUgYXR0YWNrZXIgdG9vKS4gSW4gcHJhY3RpY2UgdGhpcyBpc1xuICAgICAgLy8gdW5yZWFjaGFibGUgdGhyb3VnaCBub3JtYWwgY2FwdHVyZXMgYmVjYXVzZSBjYXB0dXJpbmcgaXMgYVxuICAgICAgLy8gc2luZ2xlIGFjdGlvbiBwZXIgbW92ZS4gSWYgaXQgZG9lcyBoYXBwZW4sIHdob2V2ZXIncyB0dXJuIGl0XG4gICAgICAvLyBpcyBqdXN0IGZpbmlzaGVkIOKAlCBzbyB0aGUgcHJldmlvdXMgbW92ZXIgZGVsaXZlcmVkIHRoZVxuICAgICAgLy8gZG91YmxlLWtpbGwuIFdpdGhvdXQgdHJhY2tpbmcgdGhhdCBoZXJlIHdlIGF3YXJkIGl0IHRvIHRoZVxuICAgICAgLy8gb3Bwb25lbnQgb2YgdGhlIGN1cnJlbnQgc2lkZSB0byBtb3ZlICh0aGUgc2lkZSB0aGF0IGp1c3RcbiAgICAgIC8vIHBsYXllZCkuXG4gICAgICBjb25zdCB0dXJuID0gZW5naW5lLmdldEN1cnJlbnRUdXJuKCk7XG4gICAgICByZXR1cm4gdHVybiA9PT0gXCJ3aGl0ZVwiID8gXCJibGFjay13aW5zXCIgOiBcIndoaXRlLXdpbnNcIjtcbiAgICB9XG4gICAgLy8gQm90aCBraW5ncyBvbiB0aGUgYm9hcmQg4oaSIGdhbWUgY29udGludWVzLCBkZWZhdWx0IHJ1bGVzIHRha2Ugb3Zlci5cbiAgICAvLyBCdXQgd2UgYWxzbyBuZWVkIHRvIFNVUFBSRVNTIHRoZSBkZWZhdWx0IGNoZWNrbWF0ZS9zdGFsZW1hdGVcbiAgICAvLyB2ZXJkaWN0IChhIGtpbmcgXCJpbiBjaGVja1wiIHdpdGggSFAgbGVmdCBpc24ndCBjaGVja21hdGVkKS4gV2UgZG9cbiAgICAvLyB0aGF0IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIFwib25nb2luZ1wiIHNvIHRoZSBlbmdpbmUgc2hvcnQtXG4gICAgLy8gY2lyY3VpdHMgYmVmb3JlIHRoZSBkZWZhdWx0IGlzQ2hlY2ttYXRlL2lzU3RhbGVtYXRlIGNoZWNrLlxuICAgIC8vXG4gICAgLy8gVGhlIGRlZmF1bHQgZHJhdyBydWxlcyAoNTAtbW92ZSwgM2ZvbGQsIGluc3VmZmljaWVudCBtYXRlcmlhbClcbiAgICAvLyBhcmUgbGVzcyBtZWFuaW5nZnVsIHdoZW4gSFAgaXMgYWN0aXZlIOKAlCBpbnN1ZmZpY2llbnQgbWF0ZXJpYWxcbiAgICAvLyBlc3BlY2lhbGx5LCBzaW5jZSBhIHJvb2sgd2l0aCBIUCBjYW4gc3RpbGwgbG9zZSB0byBhIGtpbmcg4oCUIGJ1dFxuICAgIC8vIGxlYXZpbmcgdGhlbSBvbiBpcyBoYXJtbGVzcyBzaW5jZSB0aGV5IHJlcXVpcmUgYSBsb3Qgb2YgbW92ZXNcbiAgICAvLyB0byB0cmlnZ2VyLiBXZSBsZXQgdGhlIGVuZ2luZSBydW4gdGhlbSBhZnRlciB3ZSByZXR1cm5cbiAgICAvLyBcIm9uZ29pbmdcIi5cbiAgICByZXR1cm4gXCJvbmdvaW5nXCI7XG4gIH0sXG59KTtcblxuLyoqXG4gKiBDaGVjayB3aGljaCBjb2xvcnMgc3RpbGwgaGF2ZSBhIGtpbmcgb24gdGhlIGJvYXJkLiBBIGtpbmcgXCJvbiB0aGVcbiAqIGJvYXJkXCIgPSB0aGVyZSdzIGFuIGVudGl0eSB3aXRoIFBpZWNlVHlwZT1raW5nIEFORCBhIFBvc2l0aW9uIGZhY3RcbiAqICh0aGUgY2FwdHVyZSBwYXRoIHJldHJhY3RzIFBvc2l0aW9uIGFsb25nc2lkZSBldmVyeXRoaW5nIGVsc2UpLlxuICovXG5mdW5jdGlvbiBraW5nc1ByZXNlbnQoc2Vzc2lvbjogU2Vzc2lvbik6IHsgd2hpdGU6IGJvb2xlYW47IGJsYWNrOiBib29sZWFuIH0ge1xuICBjb25zdCBmYWN0cyA9IHNlc3Npb24uYWxsRmFjdHMoKTtcbiAgbGV0IHdoaXRlID0gZmFsc2U7XG4gIGxldCBibGFjayA9IGZhbHNlO1xuICBmb3IgKGNvbnN0IGYgb2YgZmFjdHMpIHtcbiAgICBpZiAoZi5hdHRyICE9PSBcIlBpZWNlVHlwZVwiIHx8IGYudmFsdWUgIT09IFwia2luZ1wiKSBjb250aW51ZTtcbiAgICAvLyBDb25maXJtIHRoZSBraW5nIGlzIHN0aWxsIEFMSVZFIGJ5IGNoZWNraW5nIGZvciBhIFBvc2l0aW9uIGZhY3QuXG4gICAgY29uc3QgYWxpdmUgPSBmYWN0cy5zb21lKFxuICAgICAgKHApID0+IHAuaWQgPT09IGYuaWQgJiYgcC5hdHRyID09PSBcIlBvc2l0aW9uXCIsXG4gICAgKTtcbiAgICBpZiAoIWFsaXZlKSBjb250aW51ZTtcbiAgICBjb25zdCBjb2xvckZhY3QgPSBmYWN0cy5maW5kKChjKSA9PiBjLmlkID09PSBmLmlkICYmIGMuYXR0ciA9PT0gXCJDb2xvclwiKTtcbiAgICBpZiAoY29sb3JGYWN0Py52YWx1ZSA9PT0gXCJ3aGl0ZVwiKSB3aGl0ZSA9IHRydWU7XG4gICAgZWxzZSBpZiAoY29sb3JGYWN0Py52YWx1ZSA9PT0gXCJibGFja1wiKSBibGFjayA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIHsgd2hpdGUsIGJsYWNrIH07XG59XG4iXSwiZmlsZSI6Ii9zcmMvcHJlc2V0cy9waWVjZS1ocC50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/c31f6f8adb7e31e865857e8fd64fc172d0566ac8 b/7xOfJqsDU787fe61oSCq1/web/c31f6f8adb7e31e865857e8fd64fc172d0566ac8 deleted file mode 100644 index 3e616bf..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/c31f6f8adb7e31e865857e8fd64fc172d0566ac8 +++ /dev/null @@ -1,325 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/presets/index.ts"); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/engine.ts", {"importedNames":["ChessEngine"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["algebraicToSquare","squareOf"]}); -function pieceAt(engine, sq) { - const target = (0,__vite_ssr_import_3__.algebraicToSquare)(sq); - for (const f of engine.session.allFacts()) { - if (f.attr === "Position" && f.value === target) return f.id; - }; - return null; -} -function typeOf(engine, id) { - if (!engine.session.contains(id, "PieceType")) return null; - return engine.session.get(id, "PieceType"); -} -function hpOf(engine, id) { - if (!engine.session.contains(id, "Hp")) return null; - return engine.session.get(id, "Hp"); -} -function clearRank(engine, rank) { - const retractIds = []; - for (const f of engine.session.allFacts()) { - if (f.attr !== "Position") continue; - if (Math.floor(f.value / 8) !== rank) continue; - retractIds.push(f.id); - }; - for (const id of retractIds) { - for (const attr of ["PieceType", "Color", "Position", "HasMoved", "Hp"]) { - if (engine.session.contains(id, attr)) engine.session.retract(id, attr); - } - } -} -(0,__vite_ssr_import_0__.describe)("king-heals", () => { - (0,__vite_ssr_import_0__.it)("heals the non-mover's king by 1 HP (max 3) per half-move when not in check", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null }, - { id: "king-heals", scope: "both", turnsRemaining: null } - ]); - const blackKing = pieceAt(engine, "e8"); - engine.session.insert(blackKing, "Hp", 1); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e2"), (0,__vite_ssr_import_3__.algebraicToSquare)("e4")) - ); - (0,__vite_ssr_import_0__.expect)(hpOf(engine, blackKing)).toBe(2); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e7"), (0,__vite_ssr_import_3__.algebraicToSquare)("e5")) - ); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("a2"), (0,__vite_ssr_import_3__.algebraicToSquare)("a3")) - ); - (0,__vite_ssr_import_0__.expect)(hpOf(engine, blackKing)).toBe(3); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("a7"), (0,__vite_ssr_import_3__.algebraicToSquare)("a6")) - ); - engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("h2"), (0,__vite_ssr_import_3__.algebraicToSquare)("h3")) - ); - (0,__vite_ssr_import_0__.expect)(hpOf(engine, blackKing)).toBe(3); - }); - (0,__vite_ssr_import_0__.it)("does not heal a king currently in check", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null }, - { id: "king-heals", scope: "both", turnsRemaining: null } - ]); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e2"), (0,__vite_ssr_import_3__.algebraicToSquare)("e4"))); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("d7"), (0,__vite_ssr_import_3__.algebraicToSquare)("d5"))); - const whiteKing = pieceAt(engine, "e1"); - const blackKing = pieceAt(engine, "e8"); - engine.session.insert(whiteKing, "Hp", 1); - engine.session.insert(blackKing, "Hp", 1); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e4"), (0,__vite_ssr_import_3__.algebraicToSquare)("d5"))); - (0,__vite_ssr_import_0__.expect)(hpOf(engine, blackKing)).toBe(2); - }); -}); -(0,__vite_ssr_import_0__.describe)("poisoned-squares", () => { - (0,__vite_ssr_import_0__.it)("damages a piece ending a half-move on d4/e4/d5/e5", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null }, - { id: "poisoned-squares", scope: "both", turnsRemaining: null } - ]); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e2"), (0,__vite_ssr_import_3__.algebraicToSquare)("e4"))); - const e4Pawn = pieceAt(engine, "e4"); - (0,__vite_ssr_import_0__.expect)(hpOf(engine, e4Pawn)).toBe(1); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("a7"), (0,__vite_ssr_import_3__.algebraicToSquare)("a6"))); - (0,__vite_ssr_import_0__.expect)(pieceAt(engine, "e4")).toBeNull(); - }); - (0,__vite_ssr_import_0__.it)("does not damage pieces NOT on a poisoned square", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null }, - { id: "poisoned-squares", scope: "both", turnsRemaining: null } - ]); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("a2"), (0,__vite_ssr_import_3__.algebraicToSquare)("a3"))); - const a3Pawn = pieceAt(engine, "a3"); - (0,__vite_ssr_import_0__.expect)(hpOf(engine, a3Pawn)).toBe(2); - }); -}); -(0,__vite_ssr_import_0__.describe)("capture-to-win", () => { - (0,__vite_ssr_import_0__.it)("first capture ends the game with the capturer winning", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "capture-to-win", scope: "both", turnsRemaining: null } - ]); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e2"), (0,__vite_ssr_import_3__.algebraicToSquare)("e4"))); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("d7"), (0,__vite_ssr_import_3__.algebraicToSquare)("d5"))); - const result = engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e4"), (0,__vite_ssr_import_3__.algebraicToSquare)("d5")) - ); - (0,__vite_ssr_import_0__.expect)(result).toBe("white-wins"); - }); - (0,__vite_ssr_import_0__.it)("game stays ongoing until any capture occurs", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "capture-to-win", scope: "both", turnsRemaining: null } - ]); - const r1 = engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e2"), (0,__vite_ssr_import_3__.algebraicToSquare)("e4")) - ); - (0,__vite_ssr_import_0__.expect)(r1).toBe("ongoing"); - const r2 = engine.applyMove( - engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e7"), (0,__vite_ssr_import_3__.algebraicToSquare)("e5")) - ); - (0,__vite_ssr_import_0__.expect)(r2).toBe("ongoing"); - }); -}); -(0,__vite_ssr_import_0__.describe)("last-piece-standing", () => { - (0,__vite_ssr_import_0__.it)("game stays ongoing until one color has 0 pieces", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "last-piece-standing", scope: "both", turnsRemaining: null } - ]); - (0,__vite_ssr_import_0__.expect)(engine.checkGameResult()).toBe("ongoing"); - }); - (0,__vite_ssr_import_0__.it)("white wins when black has no pieces left", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "last-piece-standing", scope: "both", turnsRemaining: null } - ]); - const blackIds = []; - for (const f of engine.session.allFacts()) { - if (f.attr !== "Color" || f.value !== "black") continue; - if (f.id <= 0) continue; - blackIds.push(f.id); - }; - for (const id of blackIds) { - for (const attr of ["PieceType", "Color", "Position", "HasMoved"]) { - if (engine.session.contains(id, attr)) engine.session.retract(id, attr); - } - }; - (0,__vite_ssr_import_0__.expect)(engine.checkGameResult()).toBe("white-wins"); - }); - (0,__vite_ssr_import_0__.it)("overrides default checkmate: cornered king is NOT game-over", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "last-piece-standing", scope: "both", turnsRemaining: null } - ]); - (0,__vite_ssr_import_0__.expect)(engine.checkGameResult()).toBe("ongoing"); - }); -}); -(0,__vite_ssr_import_0__.describe)("explosive-rook", () => { - (0,__vite_ssr_import_0__.it)("rook capture detonates orthogonal neighbours within distance 2", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "explosive-rook", scope: "both", turnsRemaining: null } - ]); - clearRank(engine, 3); - clearRank(engine, 4); - clearRank(engine, 5); - const whiteRook = pieceAt(engine, "a1"); - engine.session.insert(whiteRook, "Position", (0,__vite_ssr_import_3__.squareOf)(0, 3)); - const blackPawns = []; - for (const f of engine.session.allFacts()) { - if (f.attr !== "PieceType" || f.value !== "pawn") continue; - const cfact = engine.session.allFacts().find((x) => x.id === f.id && x.attr === "Color"); - if (cfact?.value === "black") blackPawns.push(f.id); - }; - engine.session.insert(blackPawns[0], "Position", (0,__vite_ssr_import_3__.squareOf)(3, 3)); - engine.session.insert(blackPawns[1], "Position", (0,__vite_ssr_import_3__.squareOf)(5, 3)); - engine.session.insert(blackPawns[2], "Position", (0,__vite_ssr_import_3__.squareOf)(1, 4)); - const capture = engine.findMove( - (0,__vite_ssr_import_3__.algebraicToSquare)("a4"), - (0,__vite_ssr_import_3__.algebraicToSquare)("d4") - ); - (0,__vite_ssr_import_0__.expect)(capture).not.toBeNull(); - engine.applyMove(capture); - (0,__vite_ssr_import_0__.expect)(pieceAt(engine, "d4")).toBe(whiteRook); - (0,__vite_ssr_import_0__.expect)(pieceAt(engine, "f4")).toBeNull(); - (0,__vite_ssr_import_0__.expect)(pieceAt(engine, "b5")).not.toBeNull(); - }); - (0,__vite_ssr_import_0__.it)("non-rook captures are unaffected (default capture runs)", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "explosive-rook", scope: "both", turnsRemaining: null } - ]); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e2"), (0,__vite_ssr_import_3__.algebraicToSquare)("e4"))); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("d7"), (0,__vite_ssr_import_3__.algebraicToSquare)("d5"))); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e4"), (0,__vite_ssr_import_3__.algebraicToSquare)("d5"))); - (0,__vite_ssr_import_0__.expect)(typeOf(engine, pieceAt(engine, "d5"))).toBe("pawn"); - (0,__vite_ssr_import_0__.expect)(pieceAt(engine, "e7")).not.toBeNull(); - }); -}); -(0,__vite_ssr_import_0__.describe)("queen-splits", () => { - (0,__vite_ssr_import_0__.it)("queen capture spawns a rook on target and a bishop on an empty neighbour", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "queen-splits", scope: "both", turnsRemaining: null } - ]); - clearRank(engine, 3); - clearRank(engine, 4); - const whiteQueen = pieceAt(engine, "d1"); - engine.session.insert(whiteQueen, "Position", (0,__vite_ssr_import_3__.squareOf)(3, 3)); - const blackPawns = []; - for (const f of engine.session.allFacts()) { - if (f.attr !== "PieceType" || f.value !== "pawn") continue; - const cfact = engine.session.allFacts().find((x) => x.id === f.id && x.attr === "Color"); - if (cfact?.value === "black") blackPawns.push(f.id); - }; - engine.session.insert(blackPawns[0], "Position", (0,__vite_ssr_import_3__.squareOf)(4, 4)); - const capture = engine.findMove( - (0,__vite_ssr_import_3__.algebraicToSquare)("d4"), - (0,__vite_ssr_import_3__.algebraicToSquare)("e5") - ); - (0,__vite_ssr_import_0__.expect)(capture).not.toBeNull(); - engine.applyMove(capture); - (0,__vite_ssr_import_0__.expect)(engine.session.contains(whiteQueen, "Position")).toBe(false); - (0,__vite_ssr_import_0__.expect)(pieceAt(engine, "e5")).not.toBe(blackPawns[0]); - const onE5 = pieceAt(engine, "e5"); - (0,__vite_ssr_import_0__.expect)(typeOf(engine, onE5)).toBe("rook"); - (0,__vite_ssr_import_0__.expect)(engine.session.get(onE5, "Color")).toBe("white"); - const neighborFiles = [-1, 0, 1]; - const neighborRanks = [-1, 0, 1]; - let bishopFound = false; - for (const df of neighborFiles) { - for (const dr of neighborRanks) { - if (df === 0 && dr === 0) continue; - const sq = (0,__vite_ssr_import_3__.squareOf)(4 + df, 4 + dr); - if (sq < 0 || sq > 63) continue; - const id = pieceAt( - engine, - String.fromCharCode(97 + 4 + df) + (5 + dr) - ); - if (id === null) continue; - if (typeOf(engine, id) === "bishop") { - bishopFound = true; - break; - } - }; - if (bishopFound) break; - }; - (0,__vite_ssr_import_0__.expect)(bishopFound).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("non-queen captures are unaffected", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "queen-splits", scope: "both", turnsRemaining: null } - ]); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e2"), (0,__vite_ssr_import_3__.algebraicToSquare)("e4"))); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("d7"), (0,__vite_ssr_import_3__.algebraicToSquare)("d5"))); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e4"), (0,__vite_ssr_import_3__.algebraicToSquare)("d5"))); - const onD5 = pieceAt(engine, "d5"); - (0,__vite_ssr_import_0__.expect)(typeOf(engine, onD5)).toBe("pawn"); - }); -}); -(0,__vite_ssr_import_0__.describe)("piece-hp: self-check filter override", () => { - (0,__vite_ssr_import_0__.it)("with HP active, moves that leave the king in check are legal", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null } - ]); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e2"), (0,__vite_ssr_import_3__.algebraicToSquare)("e4"))); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("a7"), (0,__vite_ssr_import_3__.algebraicToSquare)("a6"))); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("d1"), (0,__vite_ssr_import_3__.algebraicToSquare)("h5"))); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("a6"), (0,__vite_ssr_import_3__.algebraicToSquare)("a5"))); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("f1"), (0,__vite_ssr_import_3__.algebraicToSquare)("c4"))); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("a5"), (0,__vite_ssr_import_3__.algebraicToSquare)("a4"))); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("h5"), (0,__vite_ssr_import_3__.algebraicToSquare)("f7"))); - const a4Square = (0,__vite_ssr_import_3__.algebraicToSquare)("a4"); - const a3Square = (0,__vite_ssr_import_3__.algebraicToSquare)("a3"); - const blackMoves = engine.getAllLegalMoves(); - const a4Push = blackMoves.find( - (m) => m.from === a4Square && m.to === a3Square - ); - (0,__vite_ssr_import_0__.expect)(a4Push).toBeDefined(); - }); - (0,__vite_ssr_import_0__.it)("the game is not declared checkmate just because the king is attacked", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null } - ]); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("f2"), (0,__vite_ssr_import_3__.algebraicToSquare)("f3"))); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e7"), (0,__vite_ssr_import_3__.algebraicToSquare)("e5"))); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("g2"), (0,__vite_ssr_import_3__.algebraicToSquare)("g4"))); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("d8"), (0,__vite_ssr_import_3__.algebraicToSquare)("h4"))); - (0,__vite_ssr_import_0__.expect)(engine.checkGameResult()).toBe("ongoing"); - }); - (0,__vite_ssr_import_0__.it)("capturing the enemy king ends the game (white-wins / black-wins)", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null } - ]); - const blackKing = pieceAt(engine, "e8"); - engine.session.insert(blackKing, "Hp", 1); - for (const attr of ["PieceType", "Color", "Position", "HasMoved", "Hp"]) { - const occupant = engine.session.allFacts().find((f) => f.attr === "Position" && f.value === (0,__vite_ssr_import_3__.algebraicToSquare)("d8")); - if (!occupant) break; - if (engine.session.contains(occupant.id, attr)) { - engine.session.retract(occupant.id, attr); - } - }; - const whiteQueen = pieceAt(engine, "d1"); - engine.session.insert(whiteQueen, "Position", (0,__vite_ssr_import_3__.algebraicToSquare)("d8")); - const capture = engine.getAllLegalMoves().find( - (m) => m.pieceId === whiteQueen && m.to === (0,__vite_ssr_import_3__.algebraicToSquare)("e8") && m.isCapture - ); - (0,__vite_ssr_import_0__.expect)(capture).toBeDefined(); - const result = engine.applyMove(capture); - (0,__vite_ssr_import_0__.expect)(result).toBe("white-wins"); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QVkseUNBQWtCLElBQUksQ0FBQztBQUdyRSxVQUFNLFVBQVUsT0FDYixpQkFBaUIsRUFDakI7QUFBQSxNQUNDLENBQUMsTUFDQyxFQUFFLFlBQVksY0FDZCxFQUFFLFVBQU8seUNBQWtCLElBQUksS0FDL0IsRUFBRTtBQUFBLElBQ047QUFDRixxQ0FBTyxPQUFPLEVBQUUsWUFBWTtBQUM1QixVQUFNLFNBQVMsT0FBTyxVQUFVLE9BQVE7QUFDeEMscUNBQU8sTUFBTSxFQUFFLEtBQUssWUFBWTtBQUFBLEVBQ2xDLENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJmbGVzaGVkLXByZXNldHMudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEludGVncmF0aW9uIHRlc3RzIGZvciBwcmVzZXRzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHN0dWJzOlxuICogICAtIGtpbmctaGVhbHMgICAgICAgICAgKG9uQWZ0ZXJNb3ZlKVxuICogICAtIHBvaXNvbmVkLXNxdWFyZXMgICAgKG9uQWZ0ZXJNb3ZlKVxuICogICAtIGNhcHR1cmUtdG8td2luICAgICAgKG9uQmVmb3JlQ2FwdHVyZSArIG9uQ2hlY2tHYW1lUmVzdWx0KVxuICogICAtIGxhc3QtcGllY2Utc3RhbmRpbmcgKG9uQ2hlY2tHYW1lUmVzdWx0KVxuICogICAtIGV4cGxvc2l2ZS1yb29rICAgICAgKG9uQmVmb3JlQ2FwdHVyZSB3aXRoIGNvbnN1bWUpXG4gKiAgIC0gcXVlZW4tc3BsaXRzICAgICAgICAob25CZWZvcmVDYXB0dXJlIHdpdGggY29uc3VtZSwgc3Bhd25pbmcpXG4gKlxuICogRWFjaCBibG9jayB0ZXN0cyBvbmUgcHJlc2V0J3MgbWVjaGFuaWMgZW5kLXRvLWVuZCB0aHJvdWdoIHRoZVxuICogQ2hlc3NFbmdpbmUgc28gd2UgY2F0Y2ggYW55IGhvb2std2lyaW5nIHJlZ3Jlc3Npb25zLlxuICovXG5pbXBvcnQgeyBkZXNjcmliZSwgaXQsIGV4cGVjdCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCBcIi4vaW5kZXguanNcIjtcbmltcG9ydCB7IENoZXNzRW5naW5lIH0gZnJvbSBcIi4uL2VuZ2luZS5qc1wiO1xuaW1wb3J0IHsgYWxnZWJyYWljVG9TcXVhcmUsIHNxdWFyZU9mIH0gZnJvbSBcIi4uL2Nvb3JkLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eUlkIH0gZnJvbSBcIkBwYXJhdHlwZS9yZXRlXCI7XG5pbXBvcnQgdHlwZSB7IFNxdWFyZSB9IGZyb20gXCIuLi9zY2hlbWEuanNcIjtcblxuZnVuY3Rpb24gcGllY2VBdChlbmdpbmU6IENoZXNzRW5naW5lLCBzcTogc3RyaW5nKTogRW50aXR5SWQgfCBudWxsIHtcbiAgY29uc3QgdGFyZ2V0ID0gYWxnZWJyYWljVG9TcXVhcmUoc3EpO1xuICBmb3IgKGNvbnN0IGYgb2YgZW5naW5lLnNlc3Npb24uYWxsRmFjdHMoKSkge1xuICAgIGlmIChmLmF0dHIgPT09IFwiUG9zaXRpb25cIiAmJiBmLnZhbHVlID09PSB0YXJnZXQpIHJldHVybiBmLmlkO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiB0eXBlT2YoZW5naW5lOiBDaGVzc0VuZ2luZSwgaWQ6IEVudGl0eUlkKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICghZW5naW5lLnNlc3Npb24uY29udGFpbnMoaWQsIFwiUGllY2VUeXBlXCIpKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIGVuZ2luZS5zZXNzaW9uLmdldChpZCwgXCJQaWVjZVR5cGVcIikgYXMgc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBocE9mKGVuZ2luZTogQ2hlc3NFbmdpbmUsIGlkOiBFbnRpdHlJZCk6IG51bWJlciB8IG51bGwge1xuICBpZiAoIWVuZ2luZS5zZXNzaW9uLmNvbnRhaW5zKGlkLCBcIkhwXCIpKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIGVuZ2luZS5zZXNzaW9uLmdldChpZCwgXCJIcFwiKSBhcyBudW1iZXI7XG59XG5cbi8qKiBDbGVhciBhIHJhbmsgb2YgYWxsIHBpZWNlcy4gVXNlZCB0byBzY3VscHQgYm9hcmQgcG9zaXRpb25zIGNoZWFwbHkuICovXG5mdW5jdGlvbiBjbGVhclJhbmsoZW5naW5lOiBDaGVzc0VuZ2luZSwgcmFuazogbnVtYmVyKTogdm9pZCB7XG4gIGNvbnN0IHJldHJhY3RJZHM6IEVudGl0eUlkW10gPSBbXTtcbiAgZm9yIChjb25zdCBmIG9mIGVuZ2luZS5zZXNzaW9uLmFsbEZhY3RzKCkpIHtcbiAgICBpZiAoZi5hdHRyICE9PSBcIlBvc2l0aW9uXCIpIGNvbnRpbnVlO1xuICAgIGlmIChNYXRoLmZsb29yKChmLnZhbHVlIGFzIG51bWJlcikgLyA4KSAhPT0gcmFuaykgY29udGludWU7XG4gICAgcmV0cmFjdElkcy5wdXNoKGYuaWQpO1xuICB9XG4gIGZvciAoY29uc3QgaWQgb2YgcmV0cmFjdElkcykge1xuICAgIGZvciAoY29uc3QgYXR0ciBvZiBbXCJQaWVjZVR5cGVcIiwgXCJDb2xvclwiLCBcIlBvc2l0aW9uXCIsIFwiSGFzTW92ZWRcIiwgXCJIcFwiXSBhcyBjb25zdCkge1xuICAgICAgaWYgKGVuZ2luZS5zZXNzaW9uLmNvbnRhaW5zKGlkLCBhdHRyKSkgZW5naW5lLnNlc3Npb24ucmV0cmFjdChpZCwgYXR0cik7XG4gICAgfVxuICB9XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8ga2luZy1oZWFsc1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmRlc2NyaWJlKFwia2luZy1oZWFsc1wiLCAoKSA9PiB7XG4gIGl0KFwiaGVhbHMgdGhlIG5vbi1tb3ZlcidzIGtpbmcgYnkgMSBIUCAobWF4IDMpIHBlciBoYWxmLW1vdmUgd2hlbiBub3QgaW4gY2hlY2tcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGVuZ2luZS5zZXRBY3RpdmVQcmVzZXRzKFtcbiAgICAgIHsgaWQ6IFwicGllY2UtaHBcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgICAgeyBpZDogXCJraW5nLWhlYWxzXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcblxuICAgIC8vIERhbWFnZSBibGFjayBraW5nIHRvIDEgSFAgc28gd2UgY2FuIG9ic2VydmUgaGVhbGluZy5cbiAgICBjb25zdCBibGFja0tpbmcgPSBwaWVjZUF0KGVuZ2luZSwgXCJlOFwiKSE7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KGJsYWNrS2luZywgXCJIcFwiLCAxKTtcblxuICAgIC8vIFdoaXRlIHBsYXlzIGEgbmV1dHJhbCBtb3ZlLiBvbkFmdGVyTW92ZSBmaXJlcywgc2VlcyBibGFjayBraW5nXG4gICAgLy8gbm90IGluIGNoZWNrLCBoZWFscyArMSDihpIgSFAgMi5cbiAgICBlbmdpbmUuYXBwbHlNb3ZlKFxuICAgICAgZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZTJcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiZTRcIikpISxcbiAgICApO1xuICAgIGV4cGVjdChocE9mKGVuZ2luZSwgYmxhY2tLaW5nKSkudG9CZSgyKTtcblxuICAgIC8vIEJsYWNrIHBsYXlzOyB3aGl0ZSdzIGtpbmcgd2Fzbid0IGRhbWFnZWQgc28gaGVhbCBpcyBhIG5vLW9wXG4gICAgLy8gKGFscmVhZHkgYXQgZnVsbCAyIOKAlCB1bmxlc3Mgd2UgYWxzbyBkYW1hZ2UgaXQsIGJ1dCBsZWF2ZSBpdCkuXG4gICAgLy8gVGhlbiB3aGl0ZSBwbGF5cyBhZ2FpbiDihpIgYmxhY2sga2luZyBoZWFscyB0byAzIChjYXApLlxuICAgIGVuZ2luZS5hcHBseU1vdmUoXG4gICAgICBlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJlN1wiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJlNVwiKSkhLFxuICAgICk7XG4gICAgZW5naW5lLmFwcGx5TW92ZShcbiAgICAgIGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImEyXCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImEzXCIpKSEsXG4gICAgKTtcbiAgICBleHBlY3QoaHBPZihlbmdpbmUsIGJsYWNrS2luZykpLnRvQmUoMyk7XG5cbiAgICAvLyBGdXJ0aGVyIGhlYWxzIHN0b3AgYXQgdGhlIGNhcC5cbiAgICBlbmdpbmUuYXBwbHlNb3ZlKFxuICAgICAgZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiYTdcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiYTZcIikpISxcbiAgICApO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoXG4gICAgICBlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJoMlwiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJoM1wiKSkhLFxuICAgICk7XG4gICAgZXhwZWN0KGhwT2YoZW5naW5lLCBibGFja0tpbmcpKS50b0JlKDMpO1xuICB9KTtcblxuICBpdChcImRvZXMgbm90IGhlYWwgYSBraW5nIGN1cnJlbnRseSBpbiBjaGVja1wiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgZW5naW5lLnNldEFjdGl2ZVByZXNldHMoW1xuICAgICAgeyBpZDogXCJwaWVjZS1ocFwiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgICB7IGlkOiBcImtpbmctaGVhbHNcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuXG4gICAgLy8gU2Nob2xhcidzLU1hdGUtc2V0dXAgdG8gZ2V0IGJsYWNrIGtpbmcgaW4gY2hlY2sgYWZ0ZXIgUWg1LlxuICAgIC8vIDEuIGU0IGU1ICAyLiBCYzQgTmM2ICAzLiBRaDUg4oCUIHRocmVhdGVucyBReGY3IyB3aGljaCBpcyBjaGVjay5cbiAgICAvLyBBY3R1YWxseSBRaDUgZG9lc24ndCBjaGVjazsgd2Ugd2FudCBzb21ldGhpbmcgdGhhdCBjaGVja3MuIFVzZVxuICAgIC8vIDEuIGU0IGQ1ICAyLiBleGQ1ICAzLiBRaDUrIOKAlCBub3cgYmxhY2sga2luZyBpcyBpbiBjaGVjay5cbiAgICBlbmdpbmUuYXBwbHlNb3ZlKGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImUyXCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImU0XCIpKSEpO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZDdcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiZDVcIikpISk7XG4gICAgLy8gRGFtYWdlIGJvdGgga2luZ3MgdG8gMSBzbyB3ZSBjYW4gb2JzZXJ2ZSBkaWZmZXJlbnRpYWwgaGVhbGluZy5cbiAgICBjb25zdCB3aGl0ZUtpbmcgPSBwaWVjZUF0KGVuZ2luZSwgXCJlMVwiKSE7XG4gICAgY29uc3QgYmxhY2tLaW5nID0gcGllY2VBdChlbmdpbmUsIFwiZThcIikhO1xuICAgIGVuZ2luZS5zZXNzaW9uLmluc2VydCh3aGl0ZUtpbmcsIFwiSHBcIiwgMSk7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KGJsYWNrS2luZywgXCJIcFwiLCAxKTtcblxuICAgIC8vIFdoaXRlJ3MgbW92ZSB0cmlnZ2VycyBoZWFsIG9uIEJMQUNLIGtpbmcgKG5vbi1tb3ZlcikuIEJsYWNrIG5vdFxuICAgIC8vIGluIGNoZWNrIOKGkiBoZWFscyB0byAyLlxuICAgIGVuZ2luZS5hcHBseU1vdmUoZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZTRcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiZDVcIikpISk7XG4gICAgZXhwZWN0KGhwT2YoZW5naW5lLCBibGFja0tpbmcpKS50b0JlKDIpO1xuICB9KTtcbn0pO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIHBvaXNvbmVkLXNxdWFyZXNcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5kZXNjcmliZShcInBvaXNvbmVkLXNxdWFyZXNcIiwgKCkgPT4ge1xuICBpdChcImRhbWFnZXMgYSBwaWVjZSBlbmRpbmcgYSBoYWxmLW1vdmUgb24gZDQvZTQvZDUvZTVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGVuZ2luZS5zZXRBY3RpdmVQcmVzZXRzKFtcbiAgICAgIHsgaWQ6IFwicGllY2UtaHBcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgICAgeyBpZDogXCJwb2lzb25lZC1zcXVhcmVzXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcblxuICAgIC8vIDEuIGU0IOKAlCB3aGl0ZSBwYXduIGxhbmRzIG9uIGU0IHdoaWNoIGlzIHBvaXNvbmVkLiBBZnRlciB3aGl0ZSdzXG4gICAgLy8gbW92ZSBvbkFmdGVyTW92ZSBmaXJlcywgcG9pc29uIGRhbWFnZSBhcHBsaWVzIOKGkiBwYXduIGdvZXMgZnJvbVxuICAgIC8vIEhQIDIgdG8gSFAgMS5cbiAgICBlbmdpbmUuYXBwbHlNb3ZlKGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImUyXCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImU0XCIpKSEpO1xuICAgIGNvbnN0IGU0UGF3biA9IHBpZWNlQXQoZW5naW5lLCBcImU0XCIpITtcbiAgICBleHBlY3QoaHBPZihlbmdpbmUsIGU0UGF3bikpLnRvQmUoMSk7XG5cbiAgICAvLyBCbGFjayBwbGF5cyBub24tcG9pc29uZWQgbW92ZSDigJQgZTQgcGF3biBnZXRzIGRhbWFnZWQgQUdBSU5cbiAgICAvLyBiZWNhdXNlIGl0J3Mgc3RpbGwgb24gdGhlIHBvaXNvbmVkIHNxdWFyZSBhdCBlbmQgb2YgaGFsZi1tb3ZlLlxuICAgIGVuZ2luZS5hcHBseU1vdmUoZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiYTdcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiYTZcIikpISk7XG4gICAgZXhwZWN0KHBpZWNlQXQoZW5naW5lLCBcImU0XCIpKS50b0JlTnVsbCgpOyAvLyBwYXduIHJldHJhY3RlZCBhdCBIUCAwXG4gIH0pO1xuXG4gIGl0KFwiZG9lcyBub3QgZGFtYWdlIHBpZWNlcyBOT1Qgb24gYSBwb2lzb25lZCBzcXVhcmVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGVuZ2luZS5zZXRBY3RpdmVQcmVzZXRzKFtcbiAgICAgIHsgaWQ6IFwicGllY2UtaHBcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgICAgeyBpZDogXCJwb2lzb25lZC1zcXVhcmVzXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcblxuICAgIGVuZ2luZS5hcHBseU1vdmUoZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiYTJcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiYTNcIikpISk7XG4gICAgY29uc3QgYTNQYXduID0gcGllY2VBdChlbmdpbmUsIFwiYTNcIikhO1xuICAgIGV4cGVjdChocE9mKGVuZ2luZSwgYTNQYXduKSkudG9CZSgyKTtcbiAgfSk7XG59KTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBjYXB0dXJlLXRvLXdpblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmRlc2NyaWJlKFwiY2FwdHVyZS10by13aW5cIiwgKCkgPT4ge1xuICBpdChcImZpcnN0IGNhcHR1cmUgZW5kcyB0aGUgZ2FtZSB3aXRoIHRoZSBjYXB0dXJlciB3aW5uaW5nXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiBcImNhcHR1cmUtdG8td2luXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcblxuICAgIC8vIDEuIGU0IGQ1ICAyLiBleGQ1IOKAlCB3aGl0ZSBjYXB0dXJlcyBmaXJzdC5cbiAgICBlbmdpbmUuYXBwbHlNb3ZlKGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImUyXCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImU0XCIpKSEpO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZDdcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiZDVcIikpISk7XG4gICAgY29uc3QgcmVzdWx0ID0gZW5naW5lLmFwcGx5TW92ZShcbiAgICAgIGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImU0XCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImQ1XCIpKSEsXG4gICAgKTtcbiAgICBleHBlY3QocmVzdWx0KS50b0JlKFwid2hpdGUtd2luc1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJnYW1lIHN0YXlzIG9uZ29pbmcgdW50aWwgYW55IGNhcHR1cmUgb2NjdXJzXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiBcImNhcHR1cmUtdG8td2luXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcbiAgICBjb25zdCByMSA9IGVuZ2luZS5hcHBseU1vdmUoXG4gICAgICBlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJlMlwiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJlNFwiKSkhLFxuICAgICk7XG4gICAgZXhwZWN0KHIxKS50b0JlKFwib25nb2luZ1wiKTtcbiAgICBjb25zdCByMiA9IGVuZ2luZS5hcHBseU1vdmUoXG4gICAgICBlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJlN1wiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJlNVwiKSkhLFxuICAgICk7XG4gICAgZXhwZWN0KHIyKS50b0JlKFwib25nb2luZ1wiKTtcbiAgfSk7XG59KTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBsYXN0LXBpZWNlLXN0YW5kaW5nXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZGVzY3JpYmUoXCJsYXN0LXBpZWNlLXN0YW5kaW5nXCIsICgpID0+IHtcbiAgaXQoXCJnYW1lIHN0YXlzIG9uZ29pbmcgdW50aWwgb25lIGNvbG9yIGhhcyAwIHBpZWNlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgZW5naW5lLnNldEFjdGl2ZVByZXNldHMoW1xuICAgICAgeyBpZDogXCJsYXN0LXBpZWNlLXN0YW5kaW5nXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcbiAgICBleHBlY3QoZW5naW5lLmNoZWNrR2FtZVJlc3VsdCgpKS50b0JlKFwib25nb2luZ1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJ3aGl0ZSB3aW5zIHdoZW4gYmxhY2sgaGFzIG5vIHBpZWNlcyBsZWZ0XCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiBcImxhc3QtcGllY2Utc3RhbmRpbmdcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuXG4gICAgLy8gU2NvcmNoZWQtZWFydGg6IHJldHJhY3QgZXZlcnkgYmxhY2sgcGllY2UuXG4gICAgY29uc3QgYmxhY2tJZHM6IEVudGl0eUlkW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGYgb2YgZW5naW5lLnNlc3Npb24uYWxsRmFjdHMoKSkge1xuICAgICAgaWYgKGYuYXR0ciAhPT0gXCJDb2xvclwiIHx8IGYudmFsdWUgIT09IFwiYmxhY2tcIikgY29udGludWU7XG4gICAgICBpZiAoKGYuaWQgYXMgbnVtYmVyKSA8PSAwKSBjb250aW51ZTtcbiAgICAgIGJsYWNrSWRzLnB1c2goZi5pZCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaWQgb2YgYmxhY2tJZHMpIHtcbiAgICAgIGZvciAoY29uc3QgYXR0ciBvZiBbXCJQaWVjZVR5cGVcIiwgXCJDb2xvclwiLCBcIlBvc2l0aW9uXCIsIFwiSGFzTW92ZWRcIl0gYXMgY29uc3QpIHtcbiAgICAgICAgaWYgKGVuZ2luZS5zZXNzaW9uLmNvbnRhaW5zKGlkLCBhdHRyKSkgZW5naW5lLnNlc3Npb24ucmV0cmFjdChpZCwgYXR0cik7XG4gICAgICB9XG4gICAgfVxuICAgIGV4cGVjdChlbmdpbmUuY2hlY2tHYW1lUmVzdWx0KCkpLnRvQmUoXCJ3aGl0ZS13aW5zXCIpO1xuICB9KTtcblxuICBpdChcIm92ZXJyaWRlcyBkZWZhdWx0IGNoZWNrbWF0ZTogY29ybmVyZWQga2luZyBpcyBOT1QgZ2FtZS1vdmVyXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiBcImxhc3QtcGllY2Utc3RhbmRpbmdcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuICAgIC8vIEZyb20gdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIHRoZSBiYXNlIGVuZ2luZSBpc24ndCBuZWFyIGNoZWNrbWF0ZVxuICAgIC8vIHlldCwgYnV0IHRoZSBrZXkgcG9pbnQgaXMgY2hlY2tHYW1lUmVzdWx0IG5ldmVyIHJldHVybnNcbiAgICAvLyBcImNoZWNrbWF0ZVwiIHdoaWxlIGxhc3QtcGllY2Utc3RhbmRpbmcgaXMgYWN0aXZlLiBTYW5pdHkgY2hlY2suXG4gICAgZXhwZWN0KGVuZ2luZS5jaGVja0dhbWVSZXN1bHQoKSkudG9CZShcIm9uZ29pbmdcIik7XG4gIH0pO1xufSk7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gZXhwbG9zaXZlLXJvb2tcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5kZXNjcmliZShcImV4cGxvc2l2ZS1yb29rXCIsICgpID0+IHtcbiAgaXQoXCJyb29rIGNhcHR1cmUgZGV0b25hdGVzIG9ydGhvZ29uYWwgbmVpZ2hib3VycyB3aXRoaW4gZGlzdGFuY2UgMlwiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgZW5naW5lLnNldEFjdGl2ZVByZXNldHMoW1xuICAgICAgeyBpZDogXCJleHBsb3NpdmUtcm9va1wiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgXSk7XG5cbiAgICAvLyBTY3VscHQgYSBjb250cm9sbGVkIGJvYXJkOiBjbGVhciBldmVyeXRoaW5nIGZyb20gcmFuayA0IHNvIHdlXG4gICAgLy8gY2FuIHBsYW50IGEgcm9vayArIHRhcmdldCArIGJ5c3RhbmRlcnMuXG4gICAgY2xlYXJSYW5rKGVuZ2luZSwgMyk7XG4gICAgY2xlYXJSYW5rKGVuZ2luZSwgNCk7XG4gICAgY2xlYXJSYW5rKGVuZ2luZSwgNSk7XG5cbiAgICAvLyBXaGl0ZSByb29rIG9uIGE0IChmaWxlIDAsIHJhbmsgMykuIEJsYWNrIHBhd24gb24gZDQgKHRhcmdldCkuXG4gICAgLy8gQmxhY2sgcGF3biBvbiBmNCAoZGlzdGFuY2UgMiwgc3Vydml2ZXM/IE5vIOKAlCBmNCBpcyBmaWxlIDUsIGQ0XG4gICAgLy8gaXMgZmlsZSAzLCBDaGVieXNoZXYgYWxvbmcgZmlsZSA9IDIsIHNvIGY0IElTIGluIHJhbmdlKS5cbiAgICAvLyBCbGFjayBwYXduIG9uIGI1IChkaWFnb25hbCwgc2hvdWxkIFNVUlZJVkUgZXhwbG9zaW9uKS5cbiAgICAvLyBXaGl0ZSBwYXduIG9uIGQyIChkaXN0YW5jZSAyIG9uIGZpbGUsIHNob3VsZCBiZSBkZXRvbmF0ZWQpLlxuICAgIGNvbnN0IHdoaXRlUm9vayA9IHBpZWNlQXQoZW5naW5lLCBcImExXCIpITtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQod2hpdGVSb29rLCBcIlBvc2l0aW9uXCIsIHNxdWFyZU9mKDAsIDMpKTsgLy8gYTRcblxuICAgIC8vIEZpbmQgYW55IGJsYWNrIHBhd24gYW5kIHJlcG9zaXRpb247IG5lZWQgNCBibGFjayBwYXducyBmb3IgdGhlIHRlc3QuXG4gICAgY29uc3QgYmxhY2tQYXduczogRW50aXR5SWRbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZiBvZiBlbmdpbmUuc2Vzc2lvbi5hbGxGYWN0cygpKSB7XG4gICAgICBpZiAoZi5hdHRyICE9PSBcIlBpZWNlVHlwZVwiIHx8IGYudmFsdWUgIT09IFwicGF3blwiKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGNmYWN0ID0gZW5naW5lLnNlc3Npb24uYWxsRmFjdHMoKS5maW5kKHggPT4geC5pZCA9PT0gZi5pZCAmJiB4LmF0dHIgPT09IFwiQ29sb3JcIik7XG4gICAgICBpZiAoY2ZhY3Q/LnZhbHVlID09PSBcImJsYWNrXCIpIGJsYWNrUGF3bnMucHVzaChmLmlkKTtcbiAgICB9XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KGJsYWNrUGF3bnNbMF0hLCBcIlBvc2l0aW9uXCIsIHNxdWFyZU9mKDMsIDMpKTsgLy8gZDQgdGFyZ2V0XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KGJsYWNrUGF3bnNbMV0hLCBcIlBvc2l0aW9uXCIsIHNxdWFyZU9mKDUsIDMpKTsgLy8gZjQgaW4tcmFuZ2VcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQoYmxhY2tQYXduc1syXSEsIFwiUG9zaXRpb25cIiwgc3F1YXJlT2YoMSwgNCkpOyAvLyBiNSBkaWFnb25hbFxuXG4gICAgLy8gV2hpdGUgcm9vayBjYXB0dXJlcyBvbiBkNC5cbiAgICBjb25zdCBjYXB0dXJlID0gZW5naW5lLmZpbmRNb3ZlKFxuICAgICAgYWxnZWJyYWljVG9TcXVhcmUoXCJhNFwiKSxcbiAgICAgIGFsZ2VicmFpY1RvU3F1YXJlKFwiZDRcIiksXG4gICAgKTtcbiAgICBleHBlY3QoY2FwdHVyZSkubm90LnRvQmVOdWxsKCk7XG4gICAgZW5naW5lLmFwcGx5TW92ZShjYXB0dXJlISk7XG5cbiAgICAvLyBkNCB0YXJnZXQ6IGdvbmUuXG4gICAgLy8gZjQ6IGdvbmUgKGZpbGUgMyAtPiA1IGlzIGRpc3RhbmNlIDIgb24gZmlsZSwgcmFuayB1bmNoYW5nZWQpLlxuICAgIC8vIGI1OiBzdXJ2aXZlcyAoZGlhZ29uYWwgbmVpZ2hib3VyLCBub3Qgb24gZDQncyByYW5rIG9yIGZpbGUpLlxuICAgIGV4cGVjdChwaWVjZUF0KGVuZ2luZSwgXCJkNFwiKSkudG9CZSh3aGl0ZVJvb2spOyAvLyByb29rIG1vdmVkIGhlcmVcbiAgICBleHBlY3QocGllY2VBdChlbmdpbmUsIFwiZjRcIikpLnRvQmVOdWxsKCk7XG4gICAgZXhwZWN0KHBpZWNlQXQoZW5naW5lLCBcImI1XCIpKS5ub3QudG9CZU51bGwoKTsgLy8gZGlhZ29uYWwgc3Vydml2ZXNcbiAgfSk7XG5cbiAgaXQoXCJub24tcm9vayBjYXB0dXJlcyBhcmUgdW5hZmZlY3RlZCAoZGVmYXVsdCBjYXB0dXJlIHJ1bnMpXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiBcImV4cGxvc2l2ZS1yb29rXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcblxuICAgIC8vIDEuIGU0IGQ1ICAyLiBleGQ1IOKAlCBwYXduIGNhcHR1cmUsIG5vIGRldG9uYXRpb24uXG4gICAgZW5naW5lLmFwcGx5TW92ZShlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJlMlwiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJlNFwiKSkhKTtcbiAgICBlbmdpbmUuYXBwbHlNb3ZlKGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImQ3XCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImQ1XCIpKSEpO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZTRcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiZDVcIikpISk7XG4gICAgLy8gZDUgaG9sZHMgdGhlIHdoaXRlIHBhd24uIE5vIGFkamFjZW50IHBpZWNlcyBhZmZlY3RlZC5cbiAgICBleHBlY3QodHlwZU9mKGVuZ2luZSwgcGllY2VBdChlbmdpbmUsIFwiZDVcIikhKSkudG9CZShcInBhd25cIik7XG4gICAgZXhwZWN0KHBpZWNlQXQoZW5naW5lLCBcImU3XCIpKS5ub3QudG9CZU51bGwoKTsgLy8gYmxhY2sgcGF3biBpbnRhY3RcbiAgfSk7XG59KTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBxdWVlbi1zcGxpdHNcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5kZXNjcmliZShcInF1ZWVuLXNwbGl0c1wiLCAoKSA9PiB7XG4gIGl0KFwicXVlZW4gY2FwdHVyZSBzcGF3bnMgYSByb29rIG9uIHRhcmdldCBhbmQgYSBiaXNob3Agb24gYW4gZW1wdHkgbmVpZ2hib3VyXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiBcInF1ZWVuLXNwbGl0c1wiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgXSk7XG5cbiAgICAvLyBTY3VscHQ6IHdoaXRlIHF1ZWVuIG9uIGQ0LCBibGFjayBwYXduIG9uIGU1IChkaWFnb25hbCBjYXB0dXJlKS5cbiAgICAvLyBOZWlnaGJvdXJzIG9mIGU1OiBkNiwgZTYsIGY2LCBmNSwgZjQsIGU0LCBkNCAoV0hJVEUgUVVFRU4hKSwgZDUuXG4gICAgLy8gQ2xvY2t3aXNlIGZyb20gTjogZTYg4oaSIGY2IOKGkiBmNSDihpIgZjQg4oaSIGU0IOKGkiBkNCAocXVlZW4g4oCUIGdvbmVcbiAgICAvLyBhZnRlciBmaXNzaW9uLCBidXQgYXQgdGhlIG1vbWVudCBvZiB0aGUgY2xvY2t3aXNlIHNjYW4gaXQnc1xuICAgIC8vIGFscmVhZHkgcmV0cmFjdGVkKSDihpIgZDUg4oaSIGQ2LiBTbyB0aGUgZmlyc3QgZW1wdHkgbmVpZ2hib3VyXG4gICAgLy8gYWZ0ZXIgY2FwdHVyZSB3aWxsIGJlIGU2IChlbXB0eSBpbiBzdGFydGluZyBwb3NpdGlvbikuXG4gICAgY2xlYXJSYW5rKGVuZ2luZSwgMyk7XG4gICAgY2xlYXJSYW5rKGVuZ2luZSwgNCk7XG4gICAgY29uc3Qgd2hpdGVRdWVlbiA9IHBpZWNlQXQoZW5naW5lLCBcImQxXCIpITtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQod2hpdGVRdWVlbiwgXCJQb3NpdGlvblwiLCBzcXVhcmVPZigzLCAzKSk7IC8vIGQ0XG5cbiAgICBjb25zdCBibGFja1Bhd25zOiBFbnRpdHlJZFtdID0gW107XG4gICAgZm9yIChjb25zdCBmIG9mIGVuZ2luZS5zZXNzaW9uLmFsbEZhY3RzKCkpIHtcbiAgICAgIGlmIChmLmF0dHIgIT09IFwiUGllY2VUeXBlXCIgfHwgZi52YWx1ZSAhPT0gXCJwYXduXCIpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgY2ZhY3QgPSBlbmdpbmUuc2Vzc2lvbi5hbGxGYWN0cygpLmZpbmQoeCA9PiB4LmlkID09PSBmLmlkICYmIHguYXR0ciA9PT0gXCJDb2xvclwiKTtcbiAgICAgIGlmIChjZmFjdD8udmFsdWUgPT09IFwiYmxhY2tcIikgYmxhY2tQYXducy5wdXNoKGYuaWQpO1xuICAgIH1cbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQoYmxhY2tQYXduc1swXSEsIFwiUG9zaXRpb25cIiwgc3F1YXJlT2YoNCwgNCkpOyAvLyBlNVxuXG4gICAgY29uc3QgY2FwdHVyZSA9IGVuZ2luZS5maW5kTW92ZShcbiAgICAgIGFsZ2VicmFpY1RvU3F1YXJlKFwiZDRcIiksXG4gICAgICBhbGdlYnJhaWNUb1NxdWFyZShcImU1XCIpLFxuICAgICk7XG4gICAgZXhwZWN0KGNhcHR1cmUpLm5vdC50b0JlTnVsbCgpO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoY2FwdHVyZSEpO1xuXG4gICAgLy8gUXVlZW4gaXMgZ29uZS5cbiAgICBleHBlY3QoZW5naW5lLnNlc3Npb24uY29udGFpbnMod2hpdGVRdWVlbiwgXCJQb3NpdGlvblwiKSkudG9CZShmYWxzZSk7XG5cbiAgICAvLyBUYXJnZXQgcGF3biBpcyBnb25lLlxuICAgIGV4cGVjdChwaWVjZUF0KGVuZ2luZSwgXCJlNVwiKSkubm90LnRvQmUoYmxhY2tQYXduc1swXSEpO1xuXG4gICAgLy8gQSB3aGl0ZSByb29rIHNpdHMgb24gZTUgKHRhcmdldCBzcXVhcmUpLlxuICAgIGNvbnN0IG9uRTUgPSBwaWVjZUF0KGVuZ2luZSwgXCJlNVwiKSE7XG4gICAgZXhwZWN0KHR5cGVPZihlbmdpbmUsIG9uRTUpKS50b0JlKFwicm9va1wiKTtcbiAgICBleHBlY3QoZW5naW5lLnNlc3Npb24uZ2V0KG9uRTUsIFwiQ29sb3JcIikpLnRvQmUoXCJ3aGl0ZVwiKTtcblxuICAgIC8vIEEgd2hpdGUgYmlzaG9wIHNpdHMgb24gb25lIG9mIGU1J3MgY2xvY2t3aXNlLU4tZmlyc3QgZW1wdHlcbiAgICAvLyBuZWlnaGJvdXJzLiBTdGFydGluZyBwb3NpdGlvbiBoYXMgYmxhY2sgcGF3bnMgb24gcmFuayA3IHdoaWNoXG4gICAgLy8gaXMgYWxsIG9jY3VwaWVkIGZyb20gZTggZG93biB0byByYW5rIDfigKYgd2FpdCwgZTUncyBOIGlzIGU2XG4gICAgLy8gd2hpY2ggaXMgZW1wdHkuIEFzc2VydCB3ZSBmaW5kIGEgYmlzaG9wIGFkamFjZW50LlxuICAgIGNvbnN0IG5laWdoYm9yRmlsZXMgPSBbLTEsIDAsIDFdO1xuICAgIGNvbnN0IG5laWdoYm9yUmFua3MgPSBbLTEsIDAsIDFdO1xuICAgIGxldCBiaXNob3BGb3VuZCA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgZGYgb2YgbmVpZ2hib3JGaWxlcykge1xuICAgICAgZm9yIChjb25zdCBkciBvZiBuZWlnaGJvclJhbmtzKSB7XG4gICAgICAgIGlmIChkZiA9PT0gMCAmJiBkciA9PT0gMCkgY29udGludWU7XG4gICAgICAgIGNvbnN0IHNxID0gc3F1YXJlT2YoNCArIGRmLCA0ICsgZHIpIGFzIFNxdWFyZTtcbiAgICAgICAgaWYgKHNxIDwgMCB8fCBzcSA+IDYzKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgaWQgPSBwaWVjZUF0KFxuICAgICAgICAgIGVuZ2luZSxcbiAgICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKDk3ICsgNCArIGRmKSArICg1ICsgZHIpLFxuICAgICAgICApO1xuICAgICAgICBpZiAoaWQgPT09IG51bGwpIGNvbnRpbnVlO1xuICAgICAgICBpZiAodHlwZU9mKGVuZ2luZSwgaWQpID09PSBcImJpc2hvcFwiKSB7XG4gICAgICAgICAgYmlzaG9wRm91bmQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYmlzaG9wRm91bmQpIGJyZWFrO1xuICAgIH1cbiAgICBleHBlY3QoYmlzaG9wRm91bmQpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwibm9uLXF1ZWVuIGNhcHR1cmVzIGFyZSB1bmFmZmVjdGVkXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiBcInF1ZWVuLXNwbGl0c1wiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgXSk7XG4gICAgZW5naW5lLmFwcGx5TW92ZShlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJlMlwiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJlNFwiKSkhKTtcbiAgICBlbmdpbmUuYXBwbHlNb3ZlKGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImQ3XCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImQ1XCIpKSEpO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZTRcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiZDVcIikpISk7XG4gICAgLy8gUGF3biBzdGF5cyBhIHBhd24g4oCUIG5vIGZpc3Npb24uXG4gICAgY29uc3Qgb25ENSA9IHBpZWNlQXQoZW5naW5lLCBcImQ1XCIpITtcbiAgICBleHBlY3QodHlwZU9mKGVuZ2luZSwgb25ENSkpLnRvQmUoXCJwYXduXCIpO1xuICB9KTtcbn0pO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIHBpZWNlLWhwICsgc2VsZi1jaGVjayBvdmVycmlkZVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmRlc2NyaWJlKFwicGllY2UtaHA6IHNlbGYtY2hlY2sgZmlsdGVyIG92ZXJyaWRlXCIsICgpID0+IHtcbiAgaXQoXCJ3aXRoIEhQIGFjdGl2ZSwgbW92ZXMgdGhhdCBsZWF2ZSB0aGUga2luZyBpbiBjaGVjayBhcmUgbGVnYWxcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGVuZ2luZS5zZXRBY3RpdmVQcmVzZXRzKFtcbiAgICAgIHsgaWQ6IFwicGllY2UtaHBcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuXG4gICAgLy8gQnVpbGQgYSBjaGVjayBzY2VuYXJpbzogMS4gZTQgZTUgMi4gTmYzIE5jNiAzLiBCYjUg4oCUIG5vdyBCYjUgcGluc1xuICAgIC8vIE5jNiBhZ2FpbnN0IGJsYWNrJ3Mga2luZy4gU3RhbmRhcmQgY2hlc3Mgd291bGQgZm9yYmlkIE5jNnhCYjUnc1xuICAgIC8vIG1vdmUtcGFydG5lcnMgKG5vdCBhcHBsaWNhYmxlIGhlcmUg4oCUIHdlIG5lZWQgdG8gc2hvdyBtb3ZlcyBOT1RcbiAgICAvLyBhZGRyZXNzaW5nIHRoZSBjaGVjayBhcmUgYWxsb3dlZCkuIEVhc2llcjogc2V0IHVwIGFuIGV4cGxpY2l0XG4gICAgLy8gY2hlY2sgd2l0aCBhbiB1bnJlbGF0ZWQgbGVnYWwgYmxhY2sgbW92ZSBhdmFpbGFibGUuXG4gICAgLy9cbiAgICAvLyAxLiBlNCAuLi4gMi4gUWg1IC4uLiAzLiBCYzQgLi4uIDQuIFF4ZjcrIHB1dHMgYmxhY2sgaW4gY2hlY2suXG4gICAgZW5naW5lLmFwcGx5TW92ZShlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJlMlwiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJlNFwiKSkhKTtcbiAgICBlbmdpbmUuYXBwbHlNb3ZlKGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImE3XCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImE2XCIpKSEpO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZDFcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiaDVcIikpISk7XG4gICAgZW5naW5lLmFwcGx5TW92ZShlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJhNlwiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJhNVwiKSkhKTtcbiAgICBlbmdpbmUuYXBwbHlNb3ZlKGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImYxXCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImM0XCIpKSEpO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiYTVcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiYTRcIikpISk7XG4gICAgZW5naW5lLmFwcGx5TW92ZShlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJoNVwiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJmN1wiKSkhKTtcbiAgICAvLyBCbGFjayBpcyBub3cgXCJpbiBjaGVja1wiIGZyb20gUWY3IGJ1dCB0aGUgcXVlZW4gaGFzIG9ubHkgZGVhbHQgMSBIUFxuICAgIC8vIGRhbWFnZSAoa2luZyBzdGlsbCBoYXMgMSBIUCBsZWZ0KS4gU3RhbmRhcmQgY2hlc3Mgd291bGQgZm9yY2VcbiAgICAvLyBibGFjayB0byBhZGRyZXNzIGNoZWNrIOKAlCB3aXRoIEhQLCBibGFjayBzaG91bGQgYmUgZnJlZSB0byBtYWtlXG4gICAgLy8gYW55IGxlZ2FsLWJ5LWdlb21ldHJ5IG1vdmUsIGluY2x1ZGluZyBvbmUgdGhhdCBpZ25vcmVzIHRoZSBjaGVja1xuICAgIC8vIGFuZCBkb2Vzbid0IGJsb2NrL2VzY2FwZS9jYXB0dXJlIHRoZSBhdHRhY2tlci5cblxuICAgIGNvbnN0IGE0U3F1YXJlID0gYWxnZWJyYWljVG9TcXVhcmUoXCJhNFwiKTtcbiAgICBjb25zdCBhM1NxdWFyZSA9IGFsZ2VicmFpY1RvU3F1YXJlKFwiYTNcIik7XG4gICAgY29uc3QgYmxhY2tNb3ZlcyA9IGVuZ2luZS5nZXRBbGxMZWdhbE1vdmVzKCk7XG4gICAgLy8gRmluZCB0aGUgYTQtcGF3bidzIG1vdmVzIOKAlCBub3JtYWxseSBibG9ja2VkIGJ5IHNlbGYtY2hlY2sgZmlsdGVyXG4gICAgLy8gYmVjYXVzZSBwdXNoaW5nIHRoZSBwYXduIGRvZXNuJ3QgYWRkcmVzcyB0aGUgY2hlY2sgb24gZTguXG4gICAgY29uc3QgYTRQdXNoID0gYmxhY2tNb3Zlcy5maW5kKFxuICAgICAgKG0pID0+IG0uZnJvbSA9PT0gYTRTcXVhcmUgJiYgbS50byA9PT0gYTNTcXVhcmUsXG4gICAgKTtcbiAgICBleHBlY3QoYTRQdXNoKS50b0JlRGVmaW5lZCgpO1xuICB9KTtcblxuICBpdChcInRoZSBnYW1lIGlzIG5vdCBkZWNsYXJlZCBjaGVja21hdGUganVzdCBiZWNhdXNlIHRoZSBraW5nIGlzIGF0dGFja2VkXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiBcInBpZWNlLWhwXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcblxuICAgIC8vIFN0YW5kYXJkIGJhY2stcmFuayBtYXRlIHNldHVwIGRvZXNuJ3QgYXBwbHkgc2luY2UgZGVmZW5kZXJzIGNhblxuICAgIC8vIGp1c3QgdGFuayB0aGUgaGl0LiBGb29sJ3MgTWF0ZSBhbG1vc3Q6IDEuIGYzIGU1IDIuIGc0IFFoNCMuXG4gICAgLy8gTm9ybWFsbHkgdGhpcyBpcyBjaGVja21hdGU7IHdpdGggSFAgaXQgc2hvdWxkIE5PVCBiZS5cbiAgICBlbmdpbmUuYXBwbHlNb3ZlKGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImYyXCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImYzXCIpKSEpO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZTdcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiZTVcIikpISk7XG4gICAgZW5naW5lLmFwcGx5TW92ZShlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJnMlwiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJnNFwiKSkhKTtcbiAgICBlbmdpbmUuYXBwbHlNb3ZlKGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImQ4XCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImg0XCIpKSEpO1xuICAgIGV4cGVjdChlbmdpbmUuY2hlY2tHYW1lUmVzdWx0KCkpLnRvQmUoXCJvbmdvaW5nXCIpO1xuICB9KTtcblxuICBpdChcImNhcHR1cmluZyB0aGUgZW5lbXkga2luZyBlbmRzIHRoZSBnYW1lICh3aGl0ZS13aW5zIC8gYmxhY2std2lucylcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGVuZ2luZS5zZXRBY3RpdmVQcmVzZXRzKFtcbiAgICAgIHsgaWQ6IFwicGllY2UtaHBcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuXG4gICAgLy8gU2hvcnRjdXQ6IGRpcmVjdGx5IHJlZHVjZSBibGFjaydzIGtpbmcgdG8gMSBIUCBhbmQgY2FwdHVyZSBpdC5cbiAgICBjb25zdCBibGFja0tpbmcgPSBwaWVjZUF0KGVuZ2luZSwgXCJlOFwiKSE7XG4gICAgZW5naW5lLnNlc3Npb24uaW5zZXJ0KGJsYWNrS2luZywgXCJIcFwiLCAxKTtcbiAgICAvLyBQdXQgYSB3aGl0ZSBxdWVlbiBuZXh0IHRvIGJsYWNrJ3Mga2luZyBvbiBkOCBzbyBpdCBjYW4gY2FwdHVyZS5cbiAgICAvLyBDbGVhciBkOCBmaXJzdC5cbiAgICBmb3IgKGNvbnN0IGF0dHIgb2YgW1wiUGllY2VUeXBlXCIsIFwiQ29sb3JcIiwgXCJQb3NpdGlvblwiLCBcIkhhc01vdmVkXCIsIFwiSHBcIl0gYXMgY29uc3QpIHtcbiAgICAgIGNvbnN0IG9jY3VwYW50ID0gZW5naW5lLnNlc3Npb25cbiAgICAgICAgLmFsbEZhY3RzKClcbiAgICAgICAgLmZpbmQoKGYpID0+IGYuYXR0ciA9PT0gXCJQb3NpdGlvblwiICYmIGYudmFsdWUgPT09IGFsZ2VicmFpY1RvU3F1YXJlKFwiZDhcIikpO1xuICAgICAgaWYgKCFvY2N1cGFudCkgYnJlYWs7XG4gICAgICBpZiAoZW5naW5lLnNlc3Npb24uY29udGFpbnMob2NjdXBhbnQuaWQsIGF0dHIpKSB7XG4gICAgICAgIGVuZ2luZS5zZXNzaW9uLnJldHJhY3Qob2NjdXBhbnQuaWQsIGF0dHIpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBXaGl0ZSBxdWVlbiBvbiBkMSDihpIgbW92ZSB0byBkOCB2aWEgdGVsZXBvcnQgYnkgc2V0dGluZyBQb3NpdGlvbi5cbiAgICBjb25zdCB3aGl0ZVF1ZWVuID0gcGllY2VBdChlbmdpbmUsIFwiZDFcIikhO1xuICAgIGVuZ2luZS5zZXNzaW9uLmluc2VydCh3aGl0ZVF1ZWVuLCBcIlBvc2l0aW9uXCIsIGFsZ2VicmFpY1RvU3F1YXJlKFwiZDhcIikpO1xuICAgIC8vIE5vdyBpdCdzIHN0aWxsIHdoaXRlJ3MgdHVybiAod2UgZGlkbid0IGNhbGwgYXBwbHlNb3ZlKS4gRmluZCB0aGVcbiAgICAvLyBReGU4IGNhcHR1cmUgbW92ZS5cbiAgICBjb25zdCBjYXB0dXJlID0gZW5naW5lXG4gICAgICAuZ2V0QWxsTGVnYWxNb3ZlcygpXG4gICAgICAuZmluZChcbiAgICAgICAgKG0pID0+XG4gICAgICAgICAgbS5waWVjZUlkID09PSB3aGl0ZVF1ZWVuICYmXG4gICAgICAgICAgbS50byA9PT0gYWxnZWJyYWljVG9TcXVhcmUoXCJlOFwiKSAmJlxuICAgICAgICAgIG0uaXNDYXB0dXJlLFxuICAgICAgKTtcbiAgICBleHBlY3QoY2FwdHVyZSkudG9CZURlZmluZWQoKTtcbiAgICBjb25zdCByZXN1bHQgPSBlbmdpbmUuYXBwbHlNb3ZlKGNhcHR1cmUhKTtcbiAgICBleHBlY3QocmVzdWx0KS50b0JlKFwid2hpdGUtd2luc1wiKTtcbiAgfSk7XG59KTtcbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9jaGVzcy9zcmMvcHJlc2V0cy9mbGVzaGVkLXByZXNldHMudGVzdC50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/c3f222a70c1ae9a31e31e75d274f5c7fd112e9a6 b/7xOfJqsDU787fe61oSCq1/web/c3f222a70c1ae9a31e31e75d274f5c7fd112e9a6 deleted file mode 100644 index 00ce71d..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/c3f222a70c1ae9a31e31e75d274f5c7fd112e9a6 +++ /dev/null @@ -1,172 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "PredictionManager", { enumerable: true, configurable: true, get(){ try { return PredictionManager } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/engine.ts", {"importedNames":["ChessEngine"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["squareToAlgebraic"]}); -class PredictionManager { - /** Authoritative state mirrored from the server (last confirmed). */ - baseEngine; - /** Locally-predicted state applied on top of `baseEngine`. Null when no prediction is in flight. */ - predictedEngine = null; - /** Moves issued optimistically and awaiting server confirmation. */ - pendingMoves = []; - client; - onStateChange; - constructor(client, onStateChange) { - this.client = client; - this.onStateChange = onStateChange; - this.baseEngine = freshEngine(); - this.attachListeners(); - } - // ------------------------------------------------------------------------- - // Public API - // ------------------------------------------------------------------------- - /** - * Apply a user move optimistically and notify the server. Returns true iff - * the move is legal against the current (predicted or base) engine state. - * Illegal moves are dropped silently (no send, no state change). - */ - applyPrediction(from, to, promoteTo) { - const engine = this.predictedEngine ?? cloneEngine(this.baseEngine); - const move = engine.findMove(from, to, promoteTo); - if (!move) return false; - engine.applyMove(move, promoteTo ?? "queen"); - this.predictedEngine = engine; - this.pendingMoves = [...this.pendingMoves, { from, to, ...promoteTo !== void 0 ? { promoteTo } : {} }]; - this.onStateChange(engine); - this.client.sendMove( - (0,__vite_ssr_import_1__.squareToAlgebraic)(from), - (0,__vite_ssr_import_1__.squareToAlgebraic)(to), - promoteTo - ); - return true; - } - /** Engine the UI should render (predicted if available, else authoritative). */ - getCurrentEngine() { - return this.predictedEngine ?? this.baseEngine; - } - /** Authoritative engine (last confirmed server state). Primarily for tests. */ - getBaseEngine() { - return this.baseEngine; - } - /** Pending-move queue snapshot. Primarily for tests. */ - getPendingMoves() { - return this.pendingMoves; - } - // ------------------------------------------------------------------------- - // Server-event handlers - // ------------------------------------------------------------------------- - attachListeners() { - this.client.on("game.state", (e) => this.applyFullState(e.payload)); - this.client.on("game.delta", (e) => this.reconcile(e.payload)); - this.client.on("game.presets", (e) => this.applyPresets(e.payload)); - this.client.on("error", (e) => { - if (!e.payload.fatal) this.rollback(); - }); - } - /** - * Sync the authoritative preset set onto the base engine. Any current - * prediction is discarded: the preset change might invalidate - * previously-legal optimistic moves, and re-validating them here would - * duplicate server logic. Simpler to let the next user action - * re-predict against the freshly-synced base. - * - * We route through `setActivePresets` (not bare `activePresets.replaceAll`) - * so preset `onActivate` / `onDeactivate` lifecycle hooks fire on the - * client's base engine. That's essential for rules like `piece-hp` - * which install per-piece state (Hp facts) from onActivate — without - * this the client would know the preset is active but have no Hp - * facts to render, because `game.presets` carries only the - * activation list, not the resulting facts. - * - * Idempotence guarantee: preset hooks are expected to be idempotent - * (piece-hp.onActivate only inserts Hp when absent). Server and - * client run the same hook logic, so both arrive at the same state. - * The next `game.state` or `game.delta` reconciles any drift. - */ - applyPresets(payload) { - try { - this.baseEngine.setActivePresets(payload.activations); - } catch { - this.baseEngine.activePresets.clear(); - }; - this.predictedEngine = null; - this.pendingMoves = []; - this.onStateChange(this.baseEngine); - } - /** The current authoritative preset activation list. Used by hooks to - * surface it to the UI. */ - getPresetActivations() { - return this.baseEngine.activePresets.list(); - } - applyFullState(state) { - const next = freshEngine(); - loadFacts(next, state.facts); - if (Array.isArray(state.activations)) { - try { - next.activePresets.replaceAll(state.activations); - } catch { - next.activePresets.clear(); - } - }; - this.baseEngine = next; - this.predictedEngine = null; - this.pendingMoves = []; - this.onStateChange(this.baseEngine); - } - reconcile(delta) { - applyDeltaToEngine(this.baseEngine, delta); - this.predictedEngine = null; - this.pendingMoves = []; - this.onStateChange(this.baseEngine); - } - rollback() { - this.predictedEngine = null; - this.pendingMoves = []; - this.onStateChange(this.baseEngine); - } -}; -function freshEngine() { - const engine = new __vite_ssr_import_0__.ChessEngine(); - clearSession(engine); - return engine; -} -function cloneEngine(src) { - const next = freshEngine(); - loadFacts(next, src.session.allFacts().map((f) => ({ - id: f.id, - attr: f.attr, - value: f.value - }))); - next.activePresets.replaceAll(src.activePresets.list()); - return next; -} -function clearSession(engine) { - const existing = engine.session.allFacts().slice(); - for (const f of existing) { - engine.session.retract(f.id, f.attr); - } -} -function loadFacts(engine, facts) { - clearSession(engine); - for (const f of facts) { - engine.session.insert( - f.id, - f.attr, - f.value - ); - } -} -function applyDeltaToEngine(engine, delta) { - for (const f of delta.retracted) { - engine.session.retract(f.id, f.attr); - }; - for (const f of delta.inserted) { - engine.session.insert( - f.id, - f.attr, - f.value - ); - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQWlCQTtBQUNBO0FBb0JPLE1BQU0sa0JBQWtCO0FBQUE7QUFBQSxFQUVyQjtBQUFBO0FBQUEsRUFFQSxrQkFBc0M7QUFBQTtBQUFBLEVBRXRDLGVBQThCLENBQUM7QUFBQSxFQUV0QjtBQUFBLEVBQ0E7QUFBQSxFQUVqQixZQUFZLFFBQW9CLGVBQW9DO0FBQ2xFLFNBQUssU0FBUztBQUNkLFNBQUssZ0JBQWdCO0FBQ3JCLFNBQUssYUFBYSxZQUFZO0FBQzlCLFNBQUssZ0JBQWdCO0FBQUEsRUFDdkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFXQSxnQkFBZ0IsTUFBYyxJQUFZLFdBQXFDO0FBSzdFLFVBQU0sU0FDSixLQUFLLG1CQUFtQixZQUFZLEtBQUssVUFBVTtBQUVyRCxVQUFNLE9BQU8sT0FBTyxTQUFTLE1BQU0sSUFBSSxTQUFrQztBQUN6RSxRQUFJLENBQUMsS0FBTSxRQUFPO0FBRWxCLFdBQU8sVUFBVSxNQUFPLGFBQXVDLE9BQU87QUFFdEUsU0FBSyxrQkFBa0I7QUFDdkIsU0FBSyxlQUFlLENBQUMsR0FBRyxLQUFLLGNBQWMsRUFBRSxNQUFNLElBQUksR0FBSSxjQUFjLFNBQVksRUFBRSxVQUFVLElBQUksQ0FBQyxFQUFHLENBQUM7QUFFMUcsU0FBSyxjQUFjLE1BQU07QUFLekIsU0FBSyxPQUFPO0FBQUEsU0FDVix5Q0FBa0IsSUFBYztBQUFBLFNBQ2hDLHlDQUFrQixFQUFZO0FBQUEsTUFDOUI7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFBQTtBQUFBLEVBR0EsbUJBQWdDO0FBQzlCLFdBQU8sS0FBSyxtQkFBbUIsS0FBSztBQUFBLEVBQ3RDO0FBQUE7QUFBQSxFQUdBLGdCQUE2QjtBQUMzQixXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUE7QUFBQSxFQUdBLGtCQUEwQztBQUN4QyxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNUSxrQkFBd0I7QUFDOUIsU0FBSyxPQUFPLEdBQUcsY0FBYyxDQUFDLE1BQU0sS0FBSyxlQUFlLEVBQUUsT0FBTyxDQUFDO0FBQ2xFLFNBQUssT0FBTyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFLE9BQU8sQ0FBQztBQUM3RCxTQUFLLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssYUFBYSxFQUFFLE9BQU8sQ0FBQztBQUNsRSxTQUFLLE9BQU8sR0FBRyxTQUFTLENBQUMsTUFBTTtBQUs3QixVQUFJLENBQUMsRUFBRSxRQUFRLE1BQU8sTUFBSyxTQUFTO0FBQUEsSUFDdEMsQ0FBQztBQUFBLEVBQ0g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFzQlEsYUFBYSxTQUFtQztBQUN0RCxRQUFJO0FBQ0YsV0FBSyxXQUFXLGlCQUFpQixRQUFRLFdBQVc7QUFBQSxJQUN0RCxRQUFRO0FBSU4sV0FBSyxXQUFXLGNBQWMsTUFBTTtBQUFBLElBQ3RDO0FBQ0EsU0FBSyxrQkFBa0I7QUFDdkIsU0FBSyxlQUFlLENBQUM7QUFDckIsU0FBSyxjQUFjLEtBQUssVUFBVTtBQUFBLEVBQ3BDO0FBQUE7QUFBQTtBQUFBLEVBSUEsdUJBQW9EO0FBQ2xELFdBQU8sS0FBSyxXQUFXLGNBQWMsS0FBSztBQUFBLEVBQzVDO0FBQUEsRUFFUSxlQUFlLE9BQStCO0FBSXBELFVBQU0sT0FBTyxZQUFZO0FBQ3pCLGNBQVUsTUFBTSxNQUFNLEtBQUs7QUFJM0IsUUFBSSxNQUFNLFFBQVEsTUFBTSxXQUFXLEdBQUc7QUFDcEMsVUFBSTtBQUNGLGFBQUssY0FBYyxXQUFXLE1BQU0sV0FBVztBQUFBLE1BQ2pELFFBQVE7QUFDTixhQUFLLGNBQWMsTUFBTTtBQUFBLE1BQzNCO0FBQUEsSUFDRjtBQUNBLFNBQUssYUFBYTtBQUNsQixTQUFLLGtCQUFrQjtBQUN2QixTQUFLLGVBQWUsQ0FBQztBQUNyQixTQUFLLGNBQWMsS0FBSyxVQUFVO0FBQUEsRUFDcEM7QUFBQSxFQUVRLFVBQVUsT0FBK0I7QUFJL0MsdUJBQW1CLEtBQUssWUFBWSxLQUFLO0FBQ3pDLFNBQUssa0JBQWtCO0FBQ3ZCLFNBQUssZUFBZSxDQUFDO0FBQ3JCLFNBQUssY0FBYyxLQUFLLFVBQVU7QUFBQSxFQUNwQztBQUFBLEVBRVEsV0FBaUI7QUFHdkIsU0FBSyxrQkFBa0I7QUFDdkIsU0FBSyxlQUFlLENBQUM7QUFDckIsU0FBSyxjQUFjLEtBQUssVUFBVTtBQUFBLEVBQ3BDO0FBQ0Y7QUFXQSxTQUFTLGNBQTJCO0FBQ2xDLFFBQU0sU0FBUyxJQUFJLGtDQUFZO0FBQy9CLGVBQWEsTUFBTTtBQUNuQixTQUFPO0FBQ1Q7QUFPQSxTQUFTLFlBQVksS0FBK0I7QUFDbEQsUUFBTSxPQUFPLFlBQVk7QUFDekIsWUFBVSxNQUFNLElBQUksUUFBUSxTQUFTLEVBQUUsSUFBSSxRQUFNO0FBQUEsSUFDL0MsSUFBSSxFQUFFO0FBQUEsSUFDTixNQUFNLEVBQUU7QUFBQSxJQUNSLE9BQU8sRUFBRTtBQUFBLEVBQ1gsRUFBRSxDQUFDO0FBS0gsT0FBSyxjQUFjLFdBQVcsSUFBSSxjQUFjLEtBQUssQ0FBQztBQUN0RCxTQUFPO0FBQ1Q7QUFFQSxTQUFTLGFBQWEsUUFBMkI7QUFFL0MsUUFBTSxXQUFXLE9BQU8sUUFBUSxTQUFTLEVBQUUsTUFBTTtBQUNqRCxhQUFXLEtBQUssVUFBVTtBQUN4QixXQUFPLFFBQVEsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFlO0FBQUEsRUFDaEQ7QUFDRjtBQUVBLFNBQVMsVUFBVSxRQUFxQixPQUFxQjtBQUMzRCxlQUFhLE1BQU07QUFDbkIsYUFBVyxLQUFLLE9BQU87QUFDckIsV0FBTyxRQUFRO0FBQUEsTUFDYixFQUFFO0FBQUEsTUFDRixFQUFFO0FBQUEsTUFDRixFQUFFO0FBQUEsSUFDSjtBQUFBLEVBQ0Y7QUFDRjtBQUVBLFNBQVMsbUJBQ1AsUUFDQSxPQUNNO0FBSU4sYUFBVyxLQUFLLE1BQU0sV0FBVztBQUMvQixXQUFPLFFBQVEsUUFBUSxFQUFFLElBQWdCLEVBQUUsSUFBZTtBQUFBLEVBQzVEO0FBQ0EsYUFBVyxLQUFLLE1BQU0sVUFBVTtBQUM5QixXQUFPLFFBQVE7QUFBQSxNQUNiLEVBQUU7QUFBQSxNQUNGLEVBQUU7QUFBQSxNQUNGLEVBQUU7QUFBQSxJQUNKO0FBQUEsRUFDRjtBQUNGIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJwcmVkaWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENsaWVudCBwcmVkaWN0aW9uICsgc2VydmVyIHJlY29uY2lsaWF0aW9uIGZvciBAcGFyYXR5cGUvY2hlc3MuXG4vL1xuLy8gUmVzcG9uc2liaWxpdGllczpcbi8vICAgKiBBcHBseSBtb3ZlcyBvcHRpbWlzdGljYWxseSB0byBhIExPQ0FMIGNsb25lIG9mIHRoZSBsYXN0IGNvbmZpcm1lZFxuLy8gICAgIHNlcnZlciBzdGF0ZSAoc28gVUkgZmVlbHMgaW5zdGFudCBvbiBkcmFnLWRyb3ApLlxuLy8gICAqIEtlZXAgYXV0aG9yaXRhdGl2ZSBgYmFzZUVuZ2luZWAgc3RhdGUgaW4gc3luYyB3aXRoIHNlcnZlciBldmVudHM6XG4vLyAgICAgICAtIGBnYW1lLnN0YXRlYCAg4oCUIGZ1bGwgc25hcHNob3Q7IHJlcGxhY2VzIGJhc2Ugc3RhdGUgZW50aXJlbHkuXG4vLyAgICAgICAtIGBnYW1lLmRlbHRhYCAg4oCUIGluY3JlbWVudGFsIEVBViBwYXRjaDsgYXBwbGllZCB0byBiYXNlIHN0YXRlLlxuLy8gICAgICAgLSBgZXJyb3JgICAgICAgIOKAlCAobm9uLWZhdGFsKSBtZWFucyB0aGUgcGVuZGluZyBvcHRpbWlzdGljIG1vdmUgd2FzXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3RlZCBieSB0aGUgc2VydmVyIOKGkiByb2xsIGJhY2sgdG8gYmFzZSBzdGF0ZS5cbi8vICAgKiBFeHBvc2UgdGhlIGVuZ2luZSB0aGUgVUkgc2hvdWxkIHJlbmRlcjogcHJlZGljdGVkIHdoZW4gd2UgaGF2ZSBhblxuLy8gICAgIGluLWZsaWdodCBwcmVkaWN0aW9uLCBvdGhlcndpc2UgYmFzZS5cbi8vXG4vLyBUaGlzIG1vZHVsZSBpcyBpbnRlbnRpb25hbGx5IGRlY291cGxlZCBmcm9tIFJlYWN0LiBgdXNlQ2hlc3NFbmdpbmVgIGFuZFxuLy8gZnJpZW5kcyBjb25zdW1lIGl0IHZpYSB0aGUgYG9uU3RhdGVDaGFuZ2VgIGNhbGxiYWNrLlxuXG5pbXBvcnQgdHlwZSB7IEF0dHJLZXksIEVudGl0eUlkLCBGYWN0VmFsdWUgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB7IENoZXNzRW5naW5lIH0gZnJvbSBcIi4uL2VuZ2luZS5qc1wiO1xuaW1wb3J0IHsgc3F1YXJlVG9BbGdlYnJhaWMgfSBmcm9tIFwiLi4vY29vcmQuanNcIjtcbmltcG9ydCB0eXBlIHsgUGllY2VUeXBlLCBTcXVhcmUgfSBmcm9tIFwiLi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEdhbWVDbGllbnQgfSBmcm9tIFwiLi9jbGllbnQuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgRmFjdCxcbiAgR2FtZURlbHRhUGF5bG9hZCxcbiAgR2FtZVByZXNldHNQYXlsb2FkLFxuICBHYW1lU3RhdGVQYXlsb2FkLFxuICBQcmVzZXRBY3RpdmF0aW9uLFxuICBQcm9tb3Rpb25QaWVjZSxcbn0gZnJvbSBcIi4vdHlwZXMuanNcIjtcblxuaW50ZXJmYWNlIFBlbmRpbmdNb3ZlIHtcbiAgcmVhZG9ubHkgZnJvbTogbnVtYmVyO1xuICByZWFkb25seSB0bzogbnVtYmVyO1xuICByZWFkb25seSBwcm9tb3RlVG8/OiBQcm9tb3Rpb25QaWVjZTtcbn1cblxuZXhwb3J0IHR5cGUgU3RhdGVDaGFuZ2VMaXN0ZW5lciA9IChlbmdpbmU6IENoZXNzRW5naW5lKSA9PiB2b2lkO1xuXG5leHBvcnQgY2xhc3MgUHJlZGljdGlvbk1hbmFnZXIge1xuICAvKiogQXV0aG9yaXRhdGl2ZSBzdGF0ZSBtaXJyb3JlZCBmcm9tIHRoZSBzZXJ2ZXIgKGxhc3QgY29uZmlybWVkKS4gKi9cbiAgcHJpdmF0ZSBiYXNlRW5naW5lOiBDaGVzc0VuZ2luZTtcbiAgLyoqIExvY2FsbHktcHJlZGljdGVkIHN0YXRlIGFwcGxpZWQgb24gdG9wIG9mIGBiYXNlRW5naW5lYC4gTnVsbCB3aGVuIG5vIHByZWRpY3Rpb24gaXMgaW4gZmxpZ2h0LiAqL1xuICBwcml2YXRlIHByZWRpY3RlZEVuZ2luZTogQ2hlc3NFbmdpbmUgfCBudWxsID0gbnVsbDtcbiAgLyoqIE1vdmVzIGlzc3VlZCBvcHRpbWlzdGljYWxseSBhbmQgYXdhaXRpbmcgc2VydmVyIGNvbmZpcm1hdGlvbi4gKi9cbiAgcHJpdmF0ZSBwZW5kaW5nTW92ZXM6IFBlbmRpbmdNb3ZlW10gPSBbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudDogR2FtZUNsaWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBvblN0YXRlQ2hhbmdlOiBTdGF0ZUNoYW5nZUxpc3RlbmVyO1xuXG4gIGNvbnN0cnVjdG9yKGNsaWVudDogR2FtZUNsaWVudCwgb25TdGF0ZUNoYW5nZTogU3RhdGVDaGFuZ2VMaXN0ZW5lcikge1xuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIHRoaXMub25TdGF0ZUNoYW5nZSA9IG9uU3RhdGVDaGFuZ2U7XG4gICAgdGhpcy5iYXNlRW5naW5lID0gZnJlc2hFbmdpbmUoKTtcbiAgICB0aGlzLmF0dGFjaExpc3RlbmVycygpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBQdWJsaWMgQVBJXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQXBwbHkgYSB1c2VyIG1vdmUgb3B0aW1pc3RpY2FsbHkgYW5kIG5vdGlmeSB0aGUgc2VydmVyLiBSZXR1cm5zIHRydWUgaWZmXG4gICAqIHRoZSBtb3ZlIGlzIGxlZ2FsIGFnYWluc3QgdGhlIGN1cnJlbnQgKHByZWRpY3RlZCBvciBiYXNlKSBlbmdpbmUgc3RhdGUuXG4gICAqIElsbGVnYWwgbW92ZXMgYXJlIGRyb3BwZWQgc2lsZW50bHkgKG5vIHNlbmQsIG5vIHN0YXRlIGNoYW5nZSkuXG4gICAqL1xuICBhcHBseVByZWRpY3Rpb24oZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyLCBwcm9tb3RlVG8/OiBQcm9tb3Rpb25QaWVjZSk6IGJvb2xlYW4ge1xuICAgIC8vIFByZWRpY3Qgb24gdG9wIG9mIHRoZSBtb3N0IHVwLXRvLWRhdGUgbG9jYWwgdmlldy4gSWYgYSBwcmVkaWN0aW9uIGlzXG4gICAgLy8gYWxyZWFkeSBpbiBmbGlnaHQgd2Ugc3RhY2sgb24gaXQgKHJhcmUgaW4gY2hlc3Mg4oCUIG9uZSBwbGF5ZXIgbW92ZXMgYXRcbiAgICAvLyBhIHRpbWUg4oCUIGJ1dCBjb3JyZWN0IGluIHByaW5jaXBsZSBmb3IgYW55IHJ1bGUgc2V0IHdoZXJlIG11bHRpcGxlXG4gICAgLy8gbW92ZXMgY2FuIGJlIGluIGZsaWdodCBmcm9tIHRoZSBzYW1lIGNsaWVudCkuXG4gICAgY29uc3QgZW5naW5lID1cbiAgICAgIHRoaXMucHJlZGljdGVkRW5naW5lID8/IGNsb25lRW5naW5lKHRoaXMuYmFzZUVuZ2luZSk7XG5cbiAgICBjb25zdCBtb3ZlID0gZW5naW5lLmZpbmRNb3ZlKGZyb20sIHRvLCBwcm9tb3RlVG8gYXMgUGllY2VUeXBlIHwgdW5kZWZpbmVkKTtcbiAgICBpZiAoIW1vdmUpIHJldHVybiBmYWxzZTtcblxuICAgIGVuZ2luZS5hcHBseU1vdmUobW92ZSwgKHByb21vdGVUbyBhcyBQaWVjZVR5cGUgfCB1bmRlZmluZWQpID8/IFwicXVlZW5cIik7XG5cbiAgICB0aGlzLnByZWRpY3RlZEVuZ2luZSA9IGVuZ2luZTtcbiAgICB0aGlzLnBlbmRpbmdNb3ZlcyA9IFsuLi50aGlzLnBlbmRpbmdNb3ZlcywgeyBmcm9tLCB0bywgLi4uKHByb21vdGVUbyAhPT0gdW5kZWZpbmVkID8geyBwcm9tb3RlVG8gfSA6IHt9KSB9XTtcblxuICAgIHRoaXMub25TdGF0ZUNoYW5nZShlbmdpbmUpO1xuXG4gICAgLy8gRmlyZSB0aGUgaW50ZW50IHRvIHRoZSBzZXJ2ZXIuIGBzZW5kTW92ZWAgaXMgYSBuby1vcCBpZiB3ZSBhcmVuJ3RcbiAgICAvLyBjb25uZWN0ZWQ7IGluIHRoYXQgY2FzZSB0aGUgY2FsbGVyJ3MgcmVjb25uZWN0IGxvZ2ljIHdpbGwgcmVzZW5kIHRoZVxuICAgIC8vIGxhc3Qgc3RhdGUgb24gYGdhbWUuc3RhdGVgLCB3aGljaCBjbGVhcnMgYHBlbmRpbmdNb3Zlc2AgYW55d2F5LlxuICAgIHRoaXMuY2xpZW50LnNlbmRNb3ZlKFxuICAgICAgc3F1YXJlVG9BbGdlYnJhaWMoZnJvbSBhcyBTcXVhcmUpLFxuICAgICAgc3F1YXJlVG9BbGdlYnJhaWModG8gYXMgU3F1YXJlKSxcbiAgICAgIHByb21vdGVUbyxcbiAgICApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIEVuZ2luZSB0aGUgVUkgc2hvdWxkIHJlbmRlciAocHJlZGljdGVkIGlmIGF2YWlsYWJsZSwgZWxzZSBhdXRob3JpdGF0aXZlKS4gKi9cbiAgZ2V0Q3VycmVudEVuZ2luZSgpOiBDaGVzc0VuZ2luZSB7XG4gICAgcmV0dXJuIHRoaXMucHJlZGljdGVkRW5naW5lID8/IHRoaXMuYmFzZUVuZ2luZTtcbiAgfVxuXG4gIC8qKiBBdXRob3JpdGF0aXZlIGVuZ2luZSAobGFzdCBjb25maXJtZWQgc2VydmVyIHN0YXRlKS4gUHJpbWFyaWx5IGZvciB0ZXN0cy4gKi9cbiAgZ2V0QmFzZUVuZ2luZSgpOiBDaGVzc0VuZ2luZSB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZUVuZ2luZTtcbiAgfVxuXG4gIC8qKiBQZW5kaW5nLW1vdmUgcXVldWUgc25hcHNob3QuIFByaW1hcmlseSBmb3IgdGVzdHMuICovXG4gIGdldFBlbmRpbmdNb3ZlcygpOiByZWFkb25seSBQZW5kaW5nTW92ZVtdIHtcbiAgICByZXR1cm4gdGhpcy5wZW5kaW5nTW92ZXM7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFNlcnZlci1ldmVudCBoYW5kbGVyc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJpdmF0ZSBhdHRhY2hMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgdGhpcy5jbGllbnQub24oXCJnYW1lLnN0YXRlXCIsIChlKSA9PiB0aGlzLmFwcGx5RnVsbFN0YXRlKGUucGF5bG9hZCkpO1xuICAgIHRoaXMuY2xpZW50Lm9uKFwiZ2FtZS5kZWx0YVwiLCAoZSkgPT4gdGhpcy5yZWNvbmNpbGUoZS5wYXlsb2FkKSk7XG4gICAgdGhpcy5jbGllbnQub24oXCJnYW1lLnByZXNldHNcIiwgKGUpID0+IHRoaXMuYXBwbHlQcmVzZXRzKGUucGF5bG9hZCkpO1xuICAgIHRoaXMuY2xpZW50Lm9uKFwiZXJyb3JcIiwgKGUpID0+IHtcbiAgICAgIC8vIEZhdGFsIGVycm9ycyB0ZWFyIGRvd24gdGhlIHNlc3Npb247IHRoZSBhcHAgcmVzdGFydHMgZnJvbSBhIGZyZXNoXG4gICAgICAvLyBgZ2FtZS5zdGF0ZWAuIE5vbi1mYXRhbCBlcnJvcnMgKElMTEVHQUxfTU9WRSAvIE5PVF9ZT1VSX1RVUk4gLyDigKYpXG4gICAgICAvLyBtZWFuIHRoZSBvcHRpbWlzdGljIG1vdmUgd2FzIHJlamVjdGVkIOKGkiByZXZlcnQgdG8gdGhlIGxhc3QgY29uZmlybWVkXG4gICAgICAvLyBzZXJ2ZXIgc3RhdGUgc28gdGhlIFVJIHN0b3BzIHNob3dpbmcgYSBwaGFudG9tIHBpZWNlLlxuICAgICAgaWYgKCFlLnBheWxvYWQuZmF0YWwpIHRoaXMucm9sbGJhY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jIHRoZSBhdXRob3JpdGF0aXZlIHByZXNldCBzZXQgb250byB0aGUgYmFzZSBlbmdpbmUuIEFueSBjdXJyZW50XG4gICAqIHByZWRpY3Rpb24gaXMgZGlzY2FyZGVkOiB0aGUgcHJlc2V0IGNoYW5nZSBtaWdodCBpbnZhbGlkYXRlXG4gICAqIHByZXZpb3VzbHktbGVnYWwgb3B0aW1pc3RpYyBtb3ZlcywgYW5kIHJlLXZhbGlkYXRpbmcgdGhlbSBoZXJlIHdvdWxkXG4gICAqIGR1cGxpY2F0ZSBzZXJ2ZXIgbG9naWMuIFNpbXBsZXIgdG8gbGV0IHRoZSBuZXh0IHVzZXIgYWN0aW9uXG4gICAqIHJlLXByZWRpY3QgYWdhaW5zdCB0aGUgZnJlc2hseS1zeW5jZWQgYmFzZS5cbiAgICpcbiAgICogV2Ugcm91dGUgdGhyb3VnaCBgc2V0QWN0aXZlUHJlc2V0c2AgKG5vdCBiYXJlIGBhY3RpdmVQcmVzZXRzLnJlcGxhY2VBbGxgKVxuICAgKiBzbyBwcmVzZXQgYG9uQWN0aXZhdGVgIC8gYG9uRGVhY3RpdmF0ZWAgbGlmZWN5Y2xlIGhvb2tzIGZpcmUgb24gdGhlXG4gICAqIGNsaWVudCdzIGJhc2UgZW5naW5lLiBUaGF0J3MgZXNzZW50aWFsIGZvciBydWxlcyBsaWtlIGBwaWVjZS1ocGBcbiAgICogd2hpY2ggaW5zdGFsbCBwZXItcGllY2Ugc3RhdGUgKEhwIGZhY3RzKSBmcm9tIG9uQWN0aXZhdGUg4oCUIHdpdGhvdXRcbiAgICogdGhpcyB0aGUgY2xpZW50IHdvdWxkIGtub3cgdGhlIHByZXNldCBpcyBhY3RpdmUgYnV0IGhhdmUgbm8gSHBcbiAgICogZmFjdHMgdG8gcmVuZGVyLCBiZWNhdXNlIGBnYW1lLnByZXNldHNgIGNhcnJpZXMgb25seSB0aGVcbiAgICogYWN0aXZhdGlvbiBsaXN0LCBub3QgdGhlIHJlc3VsdGluZyBmYWN0cy5cbiAgICpcbiAgICogSWRlbXBvdGVuY2UgZ3VhcmFudGVlOiBwcmVzZXQgaG9va3MgYXJlIGV4cGVjdGVkIHRvIGJlIGlkZW1wb3RlbnRcbiAgICogKHBpZWNlLWhwLm9uQWN0aXZhdGUgb25seSBpbnNlcnRzIEhwIHdoZW4gYWJzZW50KS4gU2VydmVyIGFuZFxuICAgKiBjbGllbnQgcnVuIHRoZSBzYW1lIGhvb2sgbG9naWMsIHNvIGJvdGggYXJyaXZlIGF0IHRoZSBzYW1lIHN0YXRlLlxuICAgKiBUaGUgbmV4dCBgZ2FtZS5zdGF0ZWAgb3IgYGdhbWUuZGVsdGFgIHJlY29uY2lsZXMgYW55IGRyaWZ0LlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseVByZXNldHMocGF5bG9hZDogR2FtZVByZXNldHNQYXlsb2FkKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuYmFzZUVuZ2luZS5zZXRBY3RpdmVQcmVzZXRzKHBheWxvYWQuYWN0aXZhdGlvbnMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gQSBiYWQgc2V0IGZyb20gdGhlIHNlcnZlciBzaG91bGRuJ3QgY3Jhc2ggdGhlIGNsaWVudDsgdGhlIHNlcnZlclxuICAgICAgLy8gYWxyZWFkeSB2YWxpZGF0ZWQsIHNvIHRoaXMgYnJhbmNoIGlzIGRlZmVuc2l2ZSBvbmx5LiBXZSBjbGVhclxuICAgICAgLy8gaW5zdGVhZCBvZiBrZWVwaW5nIHN0YWxlIHJ1bGVzLlxuICAgICAgdGhpcy5iYXNlRW5naW5lLmFjdGl2ZVByZXNldHMuY2xlYXIoKTtcbiAgICB9XG4gICAgdGhpcy5wcmVkaWN0ZWRFbmdpbmUgPSBudWxsO1xuICAgIHRoaXMucGVuZGluZ01vdmVzID0gW107XG4gICAgdGhpcy5vblN0YXRlQ2hhbmdlKHRoaXMuYmFzZUVuZ2luZSk7XG4gIH1cblxuICAvKiogVGhlIGN1cnJlbnQgYXV0aG9yaXRhdGl2ZSBwcmVzZXQgYWN0aXZhdGlvbiBsaXN0LiBVc2VkIGJ5IGhvb2tzIHRvXG4gICAqICBzdXJmYWNlIGl0IHRvIHRoZSBVSS4gKi9cbiAgZ2V0UHJlc2V0QWN0aXZhdGlvbnMoKTogcmVhZG9ubHkgUHJlc2V0QWN0aXZhdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlRW5naW5lLmFjdGl2ZVByZXNldHMubGlzdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUZ1bGxTdGF0ZShzdGF0ZTogR2FtZVN0YXRlUGF5bG9hZCk6IHZvaWQge1xuICAgIC8vIEZ1bGwgc25hcHNob3QgZnJvbSB0aGUgc2VydmVyIChvbiBqb2luIG9yIGFmdGVyIGEgbGFyZ2UgZ2FwKS4gUmVwbGFjZVxuICAgIC8vIGBiYXNlRW5naW5lYCBlbnRpcmVseSBhbmQgZHJvcCBhbnkgb3V0c3RhbmRpbmcgcHJlZGljdGlvbnMg4oCUIHRoZVxuICAgIC8vIHNlcnZlciB2aWV3IHN1cGVyc2VkZXMgZXZlcnl0aGluZy5cbiAgICBjb25zdCBuZXh0ID0gZnJlc2hFbmdpbmUoKTtcbiAgICBsb2FkRmFjdHMobmV4dCwgc3RhdGUuZmFjdHMpO1xuICAgIC8vIEFsc28gYXBwbHkgdGhlIGF1dGhvcml0YXRpdmUgcHJlc2V0IHNldC4gYGFjdGl2YXRpb25zYCBpcyBhIG5ld2VyXG4gICAgLy8gZmllbGQ7IHRvbGVyYXRlIG9sZGVyIHNlcnZlcnMgdGhhdCBkb24ndCBpbmNsdWRlIGl0IGJ5IGRlZmF1bHRpbmdcbiAgICAvLyB0byBhbiBlbXB0eSBzZXQuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUuYWN0aXZhdGlvbnMpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBuZXh0LmFjdGl2ZVByZXNldHMucmVwbGFjZUFsbChzdGF0ZS5hY3RpdmF0aW9ucyk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgbmV4dC5hY3RpdmVQcmVzZXRzLmNsZWFyKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYmFzZUVuZ2luZSA9IG5leHQ7XG4gICAgdGhpcy5wcmVkaWN0ZWRFbmdpbmUgPSBudWxsO1xuICAgIHRoaXMucGVuZGluZ01vdmVzID0gW107XG4gICAgdGhpcy5vblN0YXRlQ2hhbmdlKHRoaXMuYmFzZUVuZ2luZSk7XG4gIH1cblxuICBwcml2YXRlIHJlY29uY2lsZShkZWx0YTogR2FtZURlbHRhUGF5bG9hZCk6IHZvaWQge1xuICAgIC8vIEFwcGx5IHRoZSBhdXRob3JpdGF0aXZlIGRlbHRhIHRvIHRoZSBiYXNlIGVuZ2luZSwgdGhlbiBjbGVhciB0aGVcbiAgICAvLyBwcmVkaWN0aW9uOiB0aGUgc2VydmVyJ3Mgb3V0Y29tZSBpcyBub3cgcmVmbGVjdGVkIGluIGBiYXNlRW5naW5lYCxcbiAgICAvLyBhbmQgYW55IGxvY2FsbHktcHJlZGljdGVkIGZ1dHVyZSBtb3ZlcyBtdXN0IGJlIHJlLWlzc3VlZCBhZ2FpbnN0IGl0LlxuICAgIGFwcGx5RGVsdGFUb0VuZ2luZSh0aGlzLmJhc2VFbmdpbmUsIGRlbHRhKTtcbiAgICB0aGlzLnByZWRpY3RlZEVuZ2luZSA9IG51bGw7XG4gICAgdGhpcy5wZW5kaW5nTW92ZXMgPSBbXTtcbiAgICB0aGlzLm9uU3RhdGVDaGFuZ2UodGhpcy5iYXNlRW5naW5lKTtcbiAgfVxuXG4gIHByaXZhdGUgcm9sbGJhY2soKTogdm9pZCB7XG4gICAgLy8gVGhlIHNlcnZlciByZWplY3RlZCBhIHBlbmRpbmcgbW92ZS4gVGhyb3cgdGhlIHByZWRpY3Rpb24gYXdheTsgdGhlIFVJXG4gICAgLy8gc25hcHMgYmFjayB0byB0aGUgbGFzdCBjb25maXJtZWQgc3RhdGUuXG4gICAgdGhpcy5wcmVkaWN0ZWRFbmdpbmUgPSBudWxsO1xuICAgIHRoaXMucGVuZGluZ01vdmVzID0gW107XG4gICAgdGhpcy5vblN0YXRlQ2hhbmdlKHRoaXMuYmFzZUVuZ2luZSk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBIZWxwZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBBIGJyYW5kLW5ldyBlbmdpbmUgdGhhdCBpcyAqZW1wdHkqIG9mIHRoZSBkZWZhdWx0IHN0YXJ0aW5nIHBvc2l0aW9uLlxuICogYENoZXNzRW5naW5lYCBzZWVkcyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gaW4gaXRzIGNvbnN0cnVjdG9yOyB3ZSByZXRyYWN0XG4gKiB0aG9zZSBmYWN0cyBzbyB0aGUgY2FsbGVyIGNhbiBsb2FkIGFyYml0cmFyeSBzZXJ2ZXIgc3RhdGUgY2xlYW5seS5cbiAqL1xuZnVuY3Rpb24gZnJlc2hFbmdpbmUoKTogQ2hlc3NFbmdpbmUge1xuICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgY2xlYXJTZXNzaW9uKGVuZ2luZSk7XG4gIHJldHVybiBlbmdpbmU7XG59XG5cbi8qKlxuICogQ29weSBgc3JjYCdzIGZhY3RzIGludG8gYSBmcmVzaCBlbmdpbmUgc28gcHJlZGljdGlvbnMgY2FuIG11dGF0ZSB3aXRob3V0XG4gKiBjb3JydXB0aW5nIHRoZSBhdXRob3JpdGF0aXZlIHN0YXRlLiBgQ2hlc3NFbmdpbmVgJ3Mgb25seSBzdGF0ZSBpcyB0aGVcbiAqIEVBViBzZXNzaW9uLCBzbyBhIGZhY3QtbGV2ZWwgY29weSBpcyBhIGNvbXBsZXRlIGNsb25lLlxuICovXG5mdW5jdGlvbiBjbG9uZUVuZ2luZShzcmM6IENoZXNzRW5naW5lKTogQ2hlc3NFbmdpbmUge1xuICBjb25zdCBuZXh0ID0gZnJlc2hFbmdpbmUoKTtcbiAgbG9hZEZhY3RzKG5leHQsIHNyYy5zZXNzaW9uLmFsbEZhY3RzKCkubWFwKGYgPT4gKHtcbiAgICBpZDogZi5pZCBhcyBudW1iZXIsXG4gICAgYXR0cjogZi5hdHRyIGFzIHN0cmluZyxcbiAgICB2YWx1ZTogZi52YWx1ZSxcbiAgfSkpKTtcbiAgLy8gUHJlc2V0IHN0YXRlIG11c3QgYmUgY29waWVkIHNvIHRoZSBwcmVkaWN0aW9uJ3MgdGlja0FmdGVyTW92ZSBvblxuICAvLyBhcHBseU1vdmUgZG9lc24ndCBtdXRhdGUgdGhlIGJhc2UncyBkdXJhdGlvbiBjb3VudGVycy4gYHJlcGxhY2VBbGxgXG4gIC8vIHdpdGggdGhlIGJhc2UncyBjdXJyZW50IGxpc3QgaXMgdGhlIHB1YmxpYyB3YXkgdG8gZG8gdGhpczsgc2luY2VcbiAgLy8gdGhlIGJhc2UncyBsaXN0IGFscmVhZHkgcGFzc2VkIHZhbGlkYXRpb24sIHRoZSBjYWxsIGNhbid0IHRocm93LlxuICBuZXh0LmFjdGl2ZVByZXNldHMucmVwbGFjZUFsbChzcmMuYWN0aXZlUHJlc2V0cy5saXN0KCkpO1xuICByZXR1cm4gbmV4dDtcbn1cblxuZnVuY3Rpb24gY2xlYXJTZXNzaW9uKGVuZ2luZTogQ2hlc3NFbmdpbmUpOiB2b2lkIHtcbiAgLy8gQ29weSBmaXJzdDogcmV0cmFjdGluZyB3aGlsZSBpdGVyYXRpbmcgdGhlIGxpdmUgYXJyYXkgd291bGQgc2tpcCBlbnRyaWVzLlxuICBjb25zdCBleGlzdGluZyA9IGVuZ2luZS5zZXNzaW9uLmFsbEZhY3RzKCkuc2xpY2UoKTtcbiAgZm9yIChjb25zdCBmIG9mIGV4aXN0aW5nKSB7XG4gICAgZW5naW5lLnNlc3Npb24ucmV0cmFjdChmLmlkLCBmLmF0dHIgYXMgQXR0cktleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbG9hZEZhY3RzKGVuZ2luZTogQ2hlc3NFbmdpbmUsIGZhY3RzOiBGYWN0W10pOiB2b2lkIHtcbiAgY2xlYXJTZXNzaW9uKGVuZ2luZSk7XG4gIGZvciAoY29uc3QgZiBvZiBmYWN0cykge1xuICAgIGVuZ2luZS5zZXNzaW9uLmluc2VydChcbiAgICAgIGYuaWQgYXMgRW50aXR5SWQsXG4gICAgICBmLmF0dHIgYXMgQXR0cktleSxcbiAgICAgIGYudmFsdWUgYXMgRmFjdFZhbHVlLFxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlEZWx0YVRvRW5naW5lKFxuICBlbmdpbmU6IENoZXNzRW5naW5lLFxuICBkZWx0YTogR2FtZURlbHRhUGF5bG9hZCxcbik6IHZvaWQge1xuICAvLyBPcmRlciBtYXR0ZXJzOiByZXRyYWN0IGZpcnN0IHNvIHRoYXQgYW4gKGlkLCBhdHRyKSBwYWlyIHJlYXBwZWFyaW5nIGluXG4gIC8vIGBpbnNlcnRlZGAgaXNuJ3QgaW1tZWRpYXRlbHkgcmVtb3ZlZCBieSBhIHN1YnNlcXVlbnQgcmV0cmFjdCBvZiB0aGVcbiAgLy8gc2FtZSBrZXkuIE1hdGNoZXMgdGhlIHNlcnZlcidzIHJlcGxheSBzZW1hbnRpY3MuXG4gIGZvciAoY29uc3QgZiBvZiBkZWx0YS5yZXRyYWN0ZWQpIHtcbiAgICBlbmdpbmUuc2Vzc2lvbi5yZXRyYWN0KGYuaWQgYXMgRW50aXR5SWQsIGYuYXR0ciBhcyBBdHRyS2V5KTtcbiAgfVxuICBmb3IgKGNvbnN0IGYgb2YgZGVsdGEuaW5zZXJ0ZWQpIHtcbiAgICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQoXG4gICAgICBmLmlkIGFzIEVudGl0eUlkLFxuICAgICAgZi5hdHRyIGFzIEF0dHJLZXksXG4gICAgICBmLnZhbHVlIGFzIEZhY3RWYWx1ZSxcbiAgICApO1xuICB9XG59XG4iXSwiZmlsZSI6Ii9zcmMvbmV0L3ByZWRpY3Rpb24udHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/c55659fa7d2a07a1fd702b5ad03d1520967be980 b/7xOfJqsDU787fe61oSCq1/web/c55659fa7d2a07a1fd702b5ad03d1520967be980 deleted file mode 100644 index ef66dce..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/c55659fa7d2a07a1fd702b5ad03d1520967be980 +++ /dev/null @@ -1,43 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "LAYOUT_REGISTRY", { enumerable: true, configurable: true, get(){ try { return LAYOUT_REGISTRY } catch {} }}); -class LayoutRegistryClass { - #byId = /* @__PURE__ */ new Map(); - /** - * Register a layout under its `id`. Throws if the id is already - * taken — a defensive check because silently overwriting would - * create confusing debugging situations (the "last registered - * wins" race depends on module import order). - */ - register(layout) { - if (this.#byId.has(layout.id)) { - throw new Error( - `LayoutRegistry: duplicate layout id "${layout.id}". Each starting layout must have a unique id.` - ); - }; - this.#byId.set(layout.id, layout); - } - /** - * Look up a layout by id. Returns undefined for unknown ids — the - * caller decides whether that's an error (the server rejecting an - * unknown premade in `room.create`) or a benign miss (the lobby - * falling back to "classic"). - */ - get(id) { - return this.#byId.get(id); - } - /** - * All registered layouts, in registration (= import) order. The - * LayoutPicker UI relies on this being a stable order so the - * dropdown doesn't shuffle between renders. - */ - list() { - return [...this.#byId.values()]; - } - /** True if a layout with the given id is registered. */ - has(id) { - return this.#byId.has(id); - } -} -const LAYOUT_REGISTRY = new LayoutRegistryClass(); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQW9CQSxNQUFNLG9CQUFvQjtBQUFBLEVBQ2YsUUFBUSxvQkFBSSxJQUE0QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUWpELFNBQVMsUUFBOEI7QUFDckMsUUFBSSxLQUFLLE1BQU0sSUFBSSxPQUFPLEVBQUUsR0FBRztBQUM3QixZQUFNLElBQUk7QUFBQSxRQUNSLHdDQUF3QyxPQUFPLEVBQUU7QUFBQSxNQUVuRDtBQUFBLElBQ0Y7QUFDQSxTQUFLLE1BQU0sSUFBSSxPQUFPLElBQUksTUFBTTtBQUFBLEVBQ2xDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRQSxJQUFJLElBQXdDO0FBQzFDLFdBQU8sS0FBSyxNQUFNLElBQUksRUFBRTtBQUFBLEVBQzFCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsT0FBa0M7QUFDaEMsV0FBTyxDQUFDLEdBQUcsS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUFBLEVBQ2hDO0FBQUE7QUFBQSxFQUdBLElBQUksSUFBcUI7QUFDdkIsV0FBTyxLQUFLLE1BQU0sSUFBSSxFQUFFO0FBQUEsRUFDMUI7QUFDRjtBQUVPLE1BQU0sa0JBQWtCLElBQUksb0JBQW9CIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJyZWdpc3RyeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0YXJ0aW5nIExheW91dCByZWdpc3RyeS5cbiAqXG4gKiBNaXJyb3JzIHRoZSBzaGFwZSBvZiBgUFJFU0VUX1JFR0lTVFJZYCBhbmQgYFBJRUNFX1RZUEVfUkVHSVNUUllgOlxuICogbGF5b3V0cyByZWdpc3RlciB0aGVtc2VsdmVzIHZpYSBzaWRlLWVmZmVjdCBpbXBvcnRzIGZyb20gdGhlaXIgb3duXG4gKiBtb2R1bGUgZmlsZXMsIGFuZCBgLi9pbmRleC50c2AgaXMgdGhlIGJhcnJlbCB0aGF0IGltcG9ydHMgZXZlcnlcbiAqIHByZW1hZGUuXG4gKlxuICogRHVwbGljYXRlLWlkIHJlZ2lzdHJhdGlvbiB0aHJvd3Mg4oCUIHRoaXMgaXMgdGhlIHNpZ25hbCB0aGF0IHR3b1xuICogZGlmZmVyZW50IG1vZHVsZXMgYXJlIHRyeWluZyB0byBjbGFpbSB0aGUgc2FtZSBsYXlvdXQgaWQsIHdoaWNoXG4gKiB3b3VsZCBzaWxlbnRseSBvdmVyd3JpdGUgaW4gYSBNYXAuIFRocm93aW5nIHN1cmZhY2VzIHRoZSBjb2xsaXNpb25cbiAqIGF0IGxvYWQgdGltZSByYXRoZXIgdGhhbiBhdCBydW50aW1lLlxuICpcbiAqIExheW91dCBkZWZpbml0aW9ucyBhcmUgcmVhZC1vbmx5IG9uY2UgcmVnaXN0ZXJlZDsgdGhlIHJlZ2lzdHJ5XG4gKiBleHBvc2VzIG5vIG11dGF0aW9uIHBhdGhzLiBVc2VyLWF1dGhvcmVkIChcImN1c3RvbVwiKSBsYXlvdXRzIHRyYXZlbFxuICogYnktdmFsdWUgKGluIG5ldHdvcmsgcGF5bG9hZHMsIGVkaXRvciBzdGF0ZSkgYW5kIG5ldmVyIGVudGVyIHRoZVxuICogcmVnaXN0cnkuXG4gKi9cbmltcG9ydCB0eXBlIHsgU3RhcnRpbmdMYXlvdXQgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuXG5jbGFzcyBMYXlvdXRSZWdpc3RyeUNsYXNzIHtcbiAgcmVhZG9ubHkgI2J5SWQgPSBuZXcgTWFwPHN0cmluZywgU3RhcnRpbmdMYXlvdXQ+KCk7XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgbGF5b3V0IHVuZGVyIGl0cyBgaWRgLiBUaHJvd3MgaWYgdGhlIGlkIGlzIGFscmVhZHlcbiAgICogdGFrZW4g4oCUIGEgZGVmZW5zaXZlIGNoZWNrIGJlY2F1c2Ugc2lsZW50bHkgb3ZlcndyaXRpbmcgd291bGRcbiAgICogY3JlYXRlIGNvbmZ1c2luZyBkZWJ1Z2dpbmcgc2l0dWF0aW9ucyAodGhlIFwibGFzdCByZWdpc3RlcmVkXG4gICAqIHdpbnNcIiByYWNlIGRlcGVuZHMgb24gbW9kdWxlIGltcG9ydCBvcmRlcikuXG4gICAqL1xuICByZWdpc3RlcihsYXlvdXQ6IFN0YXJ0aW5nTGF5b3V0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI2J5SWQuaGFzKGxheW91dC5pZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYExheW91dFJlZ2lzdHJ5OiBkdXBsaWNhdGUgbGF5b3V0IGlkIFwiJHtsYXlvdXQuaWR9XCIuIGAgK1xuICAgICAgICAgIGBFYWNoIHN0YXJ0aW5nIGxheW91dCBtdXN0IGhhdmUgYSB1bmlxdWUgaWQuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuI2J5SWQuc2V0KGxheW91dC5pZCwgbGF5b3V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rIHVwIGEgbGF5b3V0IGJ5IGlkLiBSZXR1cm5zIHVuZGVmaW5lZCBmb3IgdW5rbm93biBpZHMg4oCUIHRoZVxuICAgKiBjYWxsZXIgZGVjaWRlcyB3aGV0aGVyIHRoYXQncyBhbiBlcnJvciAodGhlIHNlcnZlciByZWplY3RpbmcgYW5cbiAgICogdW5rbm93biBwcmVtYWRlIGluIGByb29tLmNyZWF0ZWApIG9yIGEgYmVuaWduIG1pc3MgKHRoZSBsb2JieVxuICAgKiBmYWxsaW5nIGJhY2sgdG8gXCJjbGFzc2ljXCIpLlxuICAgKi9cbiAgZ2V0KGlkOiBzdHJpbmcpOiBTdGFydGluZ0xheW91dCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI2J5SWQuZ2V0KGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGwgcmVnaXN0ZXJlZCBsYXlvdXRzLCBpbiByZWdpc3RyYXRpb24gKD0gaW1wb3J0KSBvcmRlci4gVGhlXG4gICAqIExheW91dFBpY2tlciBVSSByZWxpZXMgb24gdGhpcyBiZWluZyBhIHN0YWJsZSBvcmRlciBzbyB0aGVcbiAgICogZHJvcGRvd24gZG9lc24ndCBzaHVmZmxlIGJldHdlZW4gcmVuZGVycy5cbiAgICovXG4gIGxpc3QoKTogcmVhZG9ubHkgU3RhcnRpbmdMYXlvdXRbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLiNieUlkLnZhbHVlcygpXTtcbiAgfVxuXG4gIC8qKiBUcnVlIGlmIGEgbGF5b3V0IHdpdGggdGhlIGdpdmVuIGlkIGlzIHJlZ2lzdGVyZWQuICovXG4gIGhhcyhpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI2J5SWQuaGFzKGlkKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgTEFZT1VUX1JFR0lTVFJZID0gbmV3IExheW91dFJlZ2lzdHJ5Q2xhc3MoKTtcbiJdLCJmaWxlIjoiL3NyYy9sYXlvdXRzL3JlZ2lzdHJ5LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/cccca8a43a3acfc272e308d3ed9cc93a70295919 b/7xOfJqsDU787fe61oSCq1/web/cccca8a43a3acfc272e308d3ed9cc93a70295919 deleted file mode 100644 index e485750..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/cccca8a43a3acfc272e308d3ed9cc93a70295919 +++ /dev/null @@ -1,79 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "WorkingMemory", { enumerable: true, configurable: true, get(){ try { return WorkingMemory } catch {} }}); -class WorkingMemory { - // Map> - #store = new Map(); - #insertListeners = []; - #retractListeners = []; - /** Insert (or update) a fact. On update, fires retract listener for old value first. */ - insert(id, attr, value) { - let attrMap = this.#store.get(id); - if (!attrMap) { - attrMap = new Map(); - this.#store.set(id, attrMap); - }; - // If existing, fire retract for old value (update semantics) - if (attrMap.has(attr)) { - const oldValue = attrMap.get(attr); - for (const listener of this.#retractListeners) { - listener(id, attr, oldValue); - } - }; - attrMap.set(attr, value); - for (const listener of this.#insertListeners) { - listener(id, attr, value); - } - } - /** Retract a fact. Returns true if fact existed, false otherwise. */ - retract(id, attr) { - const attrMap = this.#store.get(id); - if (!attrMap?.has(attr)) - return false; - const oldValue = attrMap.get(attr); - attrMap.delete(attr); - if (attrMap.size === 0) - this.#store.delete(id); - for (const listener of this.#retractListeners) { - listener(id, attr, oldValue); - }; - return true; - } - /** Get the value of a fact, or undefined if not present. */ - get(id, attr) { - return this.#store.get(id)?.get(attr); - } - /** Check if a fact exists. */ - contains(id, attr) { - return this.#store.get(id)?.has(attr) ?? false; - } - /** - * Return all facts as a sorted array. - * Sort order: id asc (numeric), then attr asc (lexicographic). - * Per SPEC.md §Iteration Order — deterministic, never raw Map iteration in hot paths. - */ - allFacts() { - const result = []; - for (const [id, attrMap] of this.#store) { - for (const [attr, value] of attrMap) { - result.push({ id, attr, value }); - } - }; - // Sort: id asc (numeric), then attr asc (lexicographic). - result.sort((a, b) => { - if (a.id !== b.id) - return a.id - b.id; - return a.attr < b.attr ? -1 : a.attr > b.attr ? 1 : 0; - }); - return result; - } - /** Register a listener called after each insert (including update inserts). */ - onInsert(listener) { - this.#insertListeners.push(listener); - } - /** Register a listener called before each retract (including update retracts). */ - onRetract(listener) { - this.#retractListeners.push(listener); - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDO1FBQ0YsT0FBTyxNQUFNO0lBQ2Y7SUFFQTtJQUNBLFFBQVEsQ0FBQyxRQUF3QjtRQUMvQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN0QztJQUVBO0lBQ0EsU0FBUyxDQUFDLFFBQXlCO1FBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyIuLi9zcmMvd20udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXb3JraW5nTWVtb3J5IOKAlCBzdG9yZXMgRUFWIGZhY3RzLlxuICogUGVyIFNQRUMubWQgwqdGYWN0IE1vZGVsIGFuZCDCp0l0ZXJhdGlvbiBPcmRlci5cbiAqL1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuXG5leHBvcnQgdHlwZSBBdHRyS2V5ID0gc3RyaW5nO1xuZXhwb3J0IHR5cGUgRmFjdFZhbHVlID0gdW5rbm93bjtcblxudHlwZSBJbnNlcnRMaXN0ZW5lciA9IChpZDogRW50aXR5SWQsIGF0dHI6IEF0dHJLZXksIHZhbHVlOiBGYWN0VmFsdWUpID0+IHZvaWQ7XG50eXBlIFJldHJhY3RMaXN0ZW5lciA9IChpZDogRW50aXR5SWQsIGF0dHI6IEF0dHJLZXksIG9sZFZhbHVlOiBGYWN0VmFsdWUpID0+IHZvaWQ7XG5cbmV4cG9ydCBjbGFzcyBXb3JraW5nTWVtb3J5IHtcbiAgLy8gTWFwPGVudGl0eUlkLCBNYXA8YXR0cktleSwgdmFsdWU+PlxuICByZWFkb25seSAjc3RvcmUgPSBuZXcgTWFwPEVudGl0eUlkLCBNYXA8QXR0cktleSwgRmFjdFZhbHVlPj4oKTtcbiAgcmVhZG9ubHkgI2luc2VydExpc3RlbmVyczogSW5zZXJ0TGlzdGVuZXJbXSA9IFtdO1xuICByZWFkb25seSAjcmV0cmFjdExpc3RlbmVyczogUmV0cmFjdExpc3RlbmVyW10gPSBbXTtcblxuICAvKiogSW5zZXJ0IChvciB1cGRhdGUpIGEgZmFjdC4gT24gdXBkYXRlLCBmaXJlcyByZXRyYWN0IGxpc3RlbmVyIGZvciBvbGQgdmFsdWUgZmlyc3QuICovXG4gIGluc2VydChpZDogRW50aXR5SWQsIGF0dHI6IEF0dHJLZXksIHZhbHVlOiBGYWN0VmFsdWUpOiB2b2lkIHtcbiAgICBsZXQgYXR0ck1hcCA9IHRoaXMuI3N0b3JlLmdldChpZCk7XG4gICAgaWYgKCFhdHRyTWFwKSB7XG4gICAgICBhdHRyTWFwID0gbmV3IE1hcCgpO1xuICAgICAgdGhpcy4jc3RvcmUuc2V0KGlkLCBhdHRyTWFwKTtcbiAgICB9XG4gICAgLy8gSWYgZXhpc3RpbmcsIGZpcmUgcmV0cmFjdCBmb3Igb2xkIHZhbHVlICh1cGRhdGUgc2VtYW50aWNzKVxuICAgIGlmIChhdHRyTWFwLmhhcyhhdHRyKSkge1xuICAgICAgY29uc3Qgb2xkVmFsdWUgPSBhdHRyTWFwLmdldChhdHRyKTtcbiAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy4jcmV0cmFjdExpc3RlbmVycykge1xuICAgICAgICBsaXN0ZW5lcihpZCwgYXR0ciwgb2xkVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBhdHRyTWFwLnNldChhdHRyLCB2YWx1ZSk7XG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNpbnNlcnRMaXN0ZW5lcnMpIHtcbiAgICAgIGxpc3RlbmVyKGlkLCBhdHRyLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJldHJhY3QgYSBmYWN0LiBSZXR1cm5zIHRydWUgaWYgZmFjdCBleGlzdGVkLCBmYWxzZSBvdGhlcndpc2UuICovXG4gIHJldHJhY3QoaWQ6IEVudGl0eUlkLCBhdHRyOiBBdHRyS2V5KTogYm9vbGVhbiB7XG4gICAgY29uc3QgYXR0ck1hcCA9IHRoaXMuI3N0b3JlLmdldChpZCk7XG4gICAgaWYgKCFhdHRyTWFwPy5oYXMoYXR0cikpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBvbGRWYWx1ZSA9IGF0dHJNYXAuZ2V0KGF0dHIpO1xuICAgIGF0dHJNYXAuZGVsZXRlKGF0dHIpO1xuICAgIGlmIChhdHRyTWFwLnNpemUgPT09IDApIHRoaXMuI3N0b3JlLmRlbGV0ZShpZCk7XG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNyZXRyYWN0TGlzdGVuZXJzKSB7XG4gICAgICBsaXN0ZW5lcihpZCwgYXR0ciwgb2xkVmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIHZhbHVlIG9mIGEgZmFjdCwgb3IgdW5kZWZpbmVkIGlmIG5vdCBwcmVzZW50LiAqL1xuICBnZXQoaWQ6IEVudGl0eUlkLCBhdHRyOiBBdHRyS2V5KTogRmFjdFZhbHVlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jc3RvcmUuZ2V0KGlkKT8uZ2V0KGF0dHIpO1xuICB9XG5cbiAgLyoqIENoZWNrIGlmIGEgZmFjdCBleGlzdHMuICovXG4gIGNvbnRhaW5zKGlkOiBFbnRpdHlJZCwgYXR0cjogQXR0cktleSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNzdG9yZS5nZXQoaWQpPy5oYXMoYXR0cikgPz8gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCBmYWN0cyBhcyBhIHNvcnRlZCBhcnJheS5cbiAgICogU29ydCBvcmRlcjogaWQgYXNjIChudW1lcmljKSwgdGhlbiBhdHRyIGFzYyAobGV4aWNvZ3JhcGhpYykuXG4gICAqIFBlciBTUEVDLm1kIMKnSXRlcmF0aW9uIE9yZGVyIOKAlCBkZXRlcm1pbmlzdGljLCBuZXZlciByYXcgTWFwIGl0ZXJhdGlvbiBpbiBob3QgcGF0aHMuXG4gICAqL1xuICBhbGxGYWN0cygpOiBBcnJheTx7IGlkOiBFbnRpdHlJZDsgYXR0cjogQXR0cktleTsgdmFsdWU6IEZhY3RWYWx1ZSB9PiB7XG4gICAgY29uc3QgcmVzdWx0OiBBcnJheTx7IGlkOiBFbnRpdHlJZDsgYXR0cjogQXR0cktleTsgdmFsdWU6IEZhY3RWYWx1ZSB9PiA9IFtdO1xuICAgIGZvciAoY29uc3QgW2lkLCBhdHRyTWFwXSBvZiB0aGlzLiNzdG9yZSkge1xuICAgICAgZm9yIChjb25zdCBbYXR0ciwgdmFsdWVdIG9mIGF0dHJNYXApIHtcbiAgICAgICAgcmVzdWx0LnB1c2goeyBpZCwgYXR0ciwgdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFNvcnQ6IGlkIGFzYyAobnVtZXJpYyksIHRoZW4gYXR0ciBhc2MgKGxleGljb2dyYXBoaWMpLlxuICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBpZiAoYS5pZCAhPT0gYi5pZCkgcmV0dXJuIChhLmlkIGFzIG51bWJlcikgLSAoYi5pZCBhcyBudW1iZXIpO1xuICAgICAgcmV0dXJuIGEuYXR0ciA8IGIuYXR0ciA/IC0xIDogYS5hdHRyID4gYi5hdHRyID8gMSA6IDA7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKiBSZWdpc3RlciBhIGxpc3RlbmVyIGNhbGxlZCBhZnRlciBlYWNoIGluc2VydCAoaW5jbHVkaW5nIHVwZGF0ZSBpbnNlcnRzKS4gKi9cbiAgb25JbnNlcnQobGlzdGVuZXI6IEluc2VydExpc3RlbmVyKTogdm9pZCB7XG4gICAgdGhpcy4jaW5zZXJ0TGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqIFJlZ2lzdGVyIGEgbGlzdGVuZXIgY2FsbGVkIGJlZm9yZSBlYWNoIHJldHJhY3QgKGluY2x1ZGluZyB1cGRhdGUgcmV0cmFjdHMpLiAqL1xuICBvblJldHJhY3QobGlzdGVuZXI6IFJldHJhY3RMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuI3JldHJhY3RMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cbn1cbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9yZXRlL2Rpc3Qvd20uanMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/cf2245d0d987994e7f7d15a9f1eb343f4e4aca18 b/7xOfJqsDU787fe61oSCq1/web/cf2245d0d987994e7f7d15a9f1eb343f4e4aca18 deleted file mode 100644 index 63afd5e..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/cf2245d0d987994e7f7d15a9f1eb343f4e4aca18 +++ /dev/null @@ -1,192 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect","beforeEach"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/rules/turn.ts", {"importedNames":["registerMoveGenerator","clearMoveGeneratorRegistry","getLegalMovesForColor","getLegalMovesForCurrentTurn","applyMove","isLegalMove"]}); - - - - - - - -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/starting-position.ts", {"importedNames":["generateStartingPosition"]}); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/schema.ts", {"importedNames":["GAME_ENTITY"]}); -const mkId = (n) => n; -function registerStubPawnGenerator() { - (0,__vite_ssr_import_2__.registerMoveGenerator)("pawn", (session, pieceId) => { - const fromRaw = session.get(pieceId, "Position"); - const colorRaw = session.get(pieceId, "Color"); - if (fromRaw === void 0 || colorRaw === void 0) return []; - const from = fromRaw; - const color = colorRaw; - const to = color === "white" ? from + 8 : from - 8; - if (to < 0 || to > 63) return []; - const facts = session.allFacts(); - const occupantPos = facts.find( - (f) => f.attr === "Position" && f.value === to - ); - if (occupantPos === void 0) { - return [{ pieceId, from, to, isCapture: false }]; - }; - const occupantColor = session.get(occupantPos.id, "Color"); - if (occupantColor === color) return []; - return [{ pieceId, from, to, isCapture: true }]; - }); -} -function insertPiece(session, id, type, color, square) { - const eid = mkId(id); - session.insert(eid, "PieceType", type); - session.insert(eid, "Color", color); - session.insert(eid, "Position", square); - session.insert(eid, "HasMoved", false); - return eid; -} -(0,__vite_ssr_import_0__.describe)("applyMove", () => { - (0,__vite_ssr_import_0__.it)("updates piece position and flips turn white→black", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - (0,__vite_ssr_import_3__.generateStartingPosition)(session); - const facts = session.allFacts(); - const e2PawnFact = facts.find( - (f) => f.attr === "Position" && f.value === 12 && session.get(f.id, "Color") === "white" - ); - (0,__vite_ssr_import_0__.expect)(e2PawnFact).toBeDefined(); - const e2Pawn = e2PawnFact.id; - const move = { pieceId: e2Pawn, from: 12, to: 20, isCapture: false }; - (0,__vite_ssr_import_2__.applyMove)(session, move); - (0,__vite_ssr_import_0__.expect)(session.get(e2Pawn, "Position")).toBe(20); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_4__.GAME_ENTITY), "Turn")).toBe("black"); - (0,__vite_ssr_import_0__.expect)(session.get(e2Pawn, "HasMoved")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("capture retracts all attrs of the enemy piece at destination", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const wp = insertPiece(session, 1, "pawn", "white", 28); - const bp = insertPiece(session, 2, "pawn", "black", 35); - session.insert((0,__vite_ssr_import_4__.GAME_ENTITY), "Turn", "white"); - (0,__vite_ssr_import_2__.applyMove)(session, { pieceId: wp, from: 28, to: 35, isCapture: true }); - (0,__vite_ssr_import_0__.expect)(session.get(wp, "Position")).toBe(35); - (0,__vite_ssr_import_0__.expect)(session.contains(bp, "Position")).toBe(false); - (0,__vite_ssr_import_0__.expect)(session.contains(bp, "Color")).toBe(false); - (0,__vite_ssr_import_0__.expect)(session.contains(bp, "PieceType")).toBe(false); - (0,__vite_ssr_import_0__.expect)(session.contains(bp, "HasMoved")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("HasMoved flag becomes true after any move (king example)", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const king = insertPiece(session, 1, "king", "white", 4); - session.insert((0,__vite_ssr_import_4__.GAME_ENTITY), "Turn", "white"); - (0,__vite_ssr_import_2__.applyMove)(session, { pieceId: king, from: 4, to: 5, isCapture: false }); - (0,__vite_ssr_import_0__.expect)(session.get(king, "HasMoved")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("increments HalfmoveClock on every move", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "knight", "white", 1); - session.insert((0,__vite_ssr_import_4__.GAME_ENTITY), "Turn", "white"); - session.insert((0,__vite_ssr_import_4__.GAME_ENTITY), "HalfmoveClock", 0); - session.insert((0,__vite_ssr_import_4__.GAME_ENTITY), "FullmoveNumber", 1); - (0,__vite_ssr_import_2__.applyMove)(session, { - pieceId: mkId(1), - from: 1, - to: 18, - isCapture: false - }); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_4__.GAME_ENTITY), "HalfmoveClock")).toBe(1); - }); - (0,__vite_ssr_import_0__.it)("increments FullmoveNumber after black's move, not after white's", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "knight", "white", 1); - insertPiece(session, 2, "knight", "black", 57); - session.insert((0,__vite_ssr_import_4__.GAME_ENTITY), "Turn", "white"); - session.insert((0,__vite_ssr_import_4__.GAME_ENTITY), "HalfmoveClock", 0); - session.insert((0,__vite_ssr_import_4__.GAME_ENTITY), "FullmoveNumber", 1); - (0,__vite_ssr_import_2__.applyMove)(session, { pieceId: mkId(1), from: 1, to: 18, isCapture: false }); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_4__.GAME_ENTITY), "FullmoveNumber")).toBe(1); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_4__.GAME_ENTITY), "Turn")).toBe("black"); - (0,__vite_ssr_import_2__.applyMove)(session, { pieceId: mkId(2), from: 57, to: 42, isCapture: false }); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_4__.GAME_ENTITY), "FullmoveNumber")).toBe(2); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_4__.GAME_ENTITY), "Turn")).toBe("white"); - }); -}); -(0,__vite_ssr_import_0__.describe)("getLegalMovesForColor + getLegalMovesForCurrentTurn", () => { - (0,__vite_ssr_import_0__.beforeEach)(() => { - (0,__vite_ssr_import_2__.clearMoveGeneratorRegistry)(); - registerStubPawnGenerator(); - }); - (0,__vite_ssr_import_0__.it)("returns only moves for pieces of the requested color", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - (0,__vite_ssr_import_3__.generateStartingPosition)(session); - const white = (0,__vite_ssr_import_2__.getLegalMovesForColor)(session, "white"); - const black = (0,__vite_ssr_import_2__.getLegalMovesForColor)(session, "black"); - (0,__vite_ssr_import_0__.expect)(white.length).toBe(8); - (0,__vite_ssr_import_0__.expect)(black.length).toBe(8); - for (const m of white) { - (0,__vite_ssr_import_0__.expect)(session.get(m.pieceId, "Color")).toBe("white"); - }; - for (const m of black) { - (0,__vite_ssr_import_0__.expect)(session.get(m.pieceId, "Color")).toBe("black"); - } - }); - (0,__vite_ssr_import_0__.it)("getLegalMovesForCurrentTurn respects the Turn fact", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - (0,__vite_ssr_import_3__.generateStartingPosition)(session); - (0,__vite_ssr_import_0__.expect)(session.get((0,__vite_ssr_import_4__.GAME_ENTITY), "Turn")).toBe("white"); - const firstTurn = (0,__vite_ssr_import_2__.getLegalMovesForCurrentTurn)(session); - (0,__vite_ssr_import_0__.expect)(firstTurn.length).toBe(8); - for (const m of firstTurn) { - (0,__vite_ssr_import_0__.expect)(session.get(m.pieceId, "Color")).toBe("white"); - }; - session.insert((0,__vite_ssr_import_4__.GAME_ENTITY), "Turn", "black"); - const secondTurn = (0,__vite_ssr_import_2__.getLegalMovesForCurrentTurn)(session); - for (const m of secondTurn) { - (0,__vite_ssr_import_0__.expect)(session.get(m.pieceId, "Color")).toBe("black"); - } - }); - (0,__vite_ssr_import_0__.it)("pieces without a registered generator contribute zero moves", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "knight", "white", 1); - session.insert((0,__vite_ssr_import_4__.GAME_ENTITY), "Turn", "white"); - const moves = (0,__vite_ssr_import_2__.getLegalMovesForColor)(session, "white"); - (0,__vite_ssr_import_0__.expect)(moves).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("ignores game-level facts (GAME_ENTITY=0)", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - session.insert((0,__vite_ssr_import_4__.GAME_ENTITY), "Turn", "white"); - session.insert((0,__vite_ssr_import_4__.GAME_ENTITY), "HalfmoveClock", 0); - const moves = (0,__vite_ssr_import_2__.getLegalMovesForColor)(session, "white"); - (0,__vite_ssr_import_0__.expect)(moves).toEqual([]); - }); -}); -(0,__vite_ssr_import_0__.describe)("isLegalMove", () => { - (0,__vite_ssr_import_0__.beforeEach)(() => { - (0,__vite_ssr_import_2__.clearMoveGeneratorRegistry)(); - registerStubPawnGenerator(); - }); - (0,__vite_ssr_import_0__.it)("accepts a single-advance pawn move from the starting position", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const p = insertPiece(session, 1, "pawn", "white", 12); - session.insert((0,__vite_ssr_import_4__.GAME_ENTITY), "Turn", "white"); - (0,__vite_ssr_import_0__.expect)( - (0,__vite_ssr_import_2__.isLegalMove)(session, { pieceId: p, from: 12, to: 20, isCapture: false }) - ).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("rejects a move to a square the piece cannot reach", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const p = insertPiece(session, 1, "pawn", "white", 12); - session.insert((0,__vite_ssr_import_4__.GAME_ENTITY), "Turn", "white"); - (0,__vite_ssr_import_0__.expect)( - (0,__vite_ssr_import_2__.isLegalMove)(session, { pieceId: p, from: 12, to: 28, isCapture: false }) - ).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("rejects a move whose pieceId has no Color in WM", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - session.insert((0,__vite_ssr_import_4__.GAME_ENTITY), "Turn", "white"); - (0,__vite_ssr_import_0__.expect)( - (0,__vite_ssr_import_2__.isLegalMove)(session, { - pieceId: mkId(99), - from: 0, - to: 8, - isCapture: false - }) - ).toBe(false); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QU8sb0NBQWEsUUFBUSxPQUFPO0FBQzNDO0FBQUEsU0FDRSxtQ0FBWSxTQUFTO0FBQUEsUUFDbkIsU0FBUyxLQUFLLEVBQUU7QUFBQSxRQUNoQixNQUFNO0FBQUEsUUFDTixJQUFJO0FBQUEsUUFDSixXQUFXO0FBQUEsTUFDYixDQUFDO0FBQUEsSUFDSCxFQUFFLEtBQUssS0FBSztBQUFBLEVBQ2QsQ0FBQztBQUNILENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInR1cm4udGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRlc3RzIGZvciB0dXJuLnRzIChQMi4xMykuXG4gKlxuICogV2UgcmVnaXN0ZXIgYSBtaW5pbWFsIGlubGluZSBwYXduIGdlbmVyYXRvciBzbyB0aGUgdGVzdHMgZG8gbm90IGRlcGVuZFxuICogb24gcGF3bi50cyBiZWluZyBmdWxseSB3aXJlZCB1cCBhdCBtb2R1bGUtbG9hZCB0aW1lIChwYXJhbGxlbC10YXNrXG4gKiByb2J1c3RuZXNzKS4gRWFjaCBkZXNjcmliZS9pdCBibG9jayB0aGF0IG5lZWRzIHRoZSByZWdpc3RyeSBjYWxsc1xuICoge0BsaW5rIGNsZWFyTW92ZUdlbmVyYXRvclJlZ2lzdHJ5fSBmaXJzdCB0byBhdm9pZCBjcm9zcy10ZXN0IHBvbGx1dGlvbi5cbiAqL1xuaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QsIGJlZm9yZUVhY2ggfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgeyBTZXNzaW9uLCB0eXBlIEVudGl0eUlkIH0gZnJvbSBcIkBwYXJhdHlwZS9yZXRlXCI7XG5pbXBvcnQge1xuICByZWdpc3Rlck1vdmVHZW5lcmF0b3IsXG4gIGNsZWFyTW92ZUdlbmVyYXRvclJlZ2lzdHJ5LFxuICBnZXRMZWdhbE1vdmVzRm9yQ29sb3IsXG4gIGdldExlZ2FsTW92ZXNGb3JDdXJyZW50VHVybixcbiAgYXBwbHlNb3ZlLFxuICBpc0xlZ2FsTW92ZSxcbn0gZnJvbSBcIi4vdHVybi5qc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGVTdGFydGluZ1Bvc2l0aW9uIH0gZnJvbSBcIi4uL3N0YXJ0aW5nLXBvc2l0aW9uLmpzXCI7XG5pbXBvcnQgeyBHQU1FX0VOVElUWSwgdHlwZSBQaWVjZUNvbG9yLCB0eXBlIFBpZWNlVHlwZSB9IGZyb20gXCIuLi9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgTGVnYWxNb3ZlIH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcblxuY29uc3QgbWtJZCA9IChuOiBudW1iZXIpID0+IG4gYXMgRW50aXR5SWQ7XG5cbi8qKiBNaW5pbWFsIHNpbmdsZS1hZHZhbmNlIHBhd24gZ2VuZXJhdG9yIOKAlCBzdWZmaWNpZW50IGZvciB0aGVzZSB0ZXN0cy4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyU3R1YlBhd25HZW5lcmF0b3IoKTogdm9pZCB7XG4gIHJlZ2lzdGVyTW92ZUdlbmVyYXRvcihcInBhd25cIiwgKHNlc3Npb24sIHBpZWNlSWQpID0+IHtcbiAgICBjb25zdCBmcm9tUmF3ID0gc2Vzc2lvbi5nZXQocGllY2VJZCwgXCJQb3NpdGlvblwiKTtcbiAgICBjb25zdCBjb2xvclJhdyA9IHNlc3Npb24uZ2V0KHBpZWNlSWQsIFwiQ29sb3JcIik7XG4gICAgaWYgKGZyb21SYXcgPT09IHVuZGVmaW5lZCB8fCBjb2xvclJhdyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gW107XG4gICAgY29uc3QgZnJvbSA9IGZyb21SYXcgYXMgbnVtYmVyO1xuICAgIGNvbnN0IGNvbG9yID0gY29sb3JSYXcgYXMgUGllY2VDb2xvcjtcbiAgICBjb25zdCB0byA9IGNvbG9yID09PSBcIndoaXRlXCIgPyBmcm9tICsgOCA6IGZyb20gLSA4O1xuICAgIGlmICh0byA8IDAgfHwgdG8gPiA2MykgcmV0dXJuIFtdO1xuXG4gICAgLy8gT2NjdXBhbmN5IGNoZWNrLlxuICAgIGNvbnN0IGZhY3RzID0gc2Vzc2lvbi5hbGxGYWN0cygpO1xuICAgIGNvbnN0IG9jY3VwYW50UG9zID0gZmFjdHMuZmluZChcbiAgICAgIChmKSA9PiBmLmF0dHIgPT09IFwiUG9zaXRpb25cIiAmJiBmLnZhbHVlID09PSB0byxcbiAgICApO1xuICAgIGlmIChvY2N1cGFudFBvcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gW3sgcGllY2VJZCwgZnJvbSwgdG8sIGlzQ2FwdHVyZTogZmFsc2UgfV07XG4gICAgfVxuICAgIGNvbnN0IG9jY3VwYW50Q29sb3IgPSBzZXNzaW9uLmdldChvY2N1cGFudFBvcy5pZCwgXCJDb2xvclwiKTtcbiAgICBpZiAob2NjdXBhbnRDb2xvciA9PT0gY29sb3IpIHJldHVybiBbXTsgLy8gYmxvY2tlZCBieSBhbGx5XG4gICAgcmV0dXJuIFt7IHBpZWNlSWQsIGZyb20sIHRvLCBpc0NhcHR1cmU6IHRydWUgfV07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRQaWVjZShcbiAgc2Vzc2lvbjogU2Vzc2lvbixcbiAgaWQ6IG51bWJlcixcbiAgdHlwZTogUGllY2VUeXBlLFxuICBjb2xvcjogUGllY2VDb2xvcixcbiAgc3F1YXJlOiBudW1iZXIsXG4pOiBFbnRpdHlJZCB7XG4gIGNvbnN0IGVpZCA9IG1rSWQoaWQpO1xuICBzZXNzaW9uLmluc2VydChlaWQsIFwiUGllY2VUeXBlXCIsIHR5cGUpO1xuICBzZXNzaW9uLmluc2VydChlaWQsIFwiQ29sb3JcIiwgY29sb3IpO1xuICBzZXNzaW9uLmluc2VydChlaWQsIFwiUG9zaXRpb25cIiwgc3F1YXJlKTtcbiAgc2Vzc2lvbi5pbnNlcnQoZWlkLCBcIkhhc01vdmVkXCIsIGZhbHNlKTtcbiAgcmV0dXJuIGVpZDtcbn1cblxuLy8g4pSA4pSA4pSAIGFwcGx5TW92ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZGVzY3JpYmUoXCJhcHBseU1vdmVcIiwgKCkgPT4ge1xuICBpdChcInVwZGF0ZXMgcGllY2UgcG9zaXRpb24gYW5kIGZsaXBzIHR1cm4gd2hpdGXihpJibGFja1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGdlbmVyYXRlU3RhcnRpbmdQb3NpdGlvbihzZXNzaW9uKTtcblxuICAgIC8vIGUyIHBhd246IHNxdWFyZSAxMiwgd2hpdGUuIFN0YXJ0aW5nLXBvc2l0aW9uIGluc2VydGlvbiBhc3NpZ25zXG4gICAgLy8gaW5jcmVtZW50YWwgaWRzIOKAlCBmaW5kIGJ5IFBvc2l0aW9uL0NvbG9yIHJhdGhlciB0aGFuIGhhcmQtY29kaW5nLlxuICAgIGNvbnN0IGZhY3RzID0gc2Vzc2lvbi5hbGxGYWN0cygpO1xuICAgIGNvbnN0IGUyUGF3bkZhY3QgPSBmYWN0cy5maW5kKFxuICAgICAgKGYpID0+XG4gICAgICAgIGYuYXR0ciA9PT0gXCJQb3NpdGlvblwiICYmXG4gICAgICAgIGYudmFsdWUgPT09IDEyICYmXG4gICAgICAgIHNlc3Npb24uZ2V0KGYuaWQsIFwiQ29sb3JcIikgPT09IFwid2hpdGVcIixcbiAgICApO1xuICAgIGV4cGVjdChlMlBhd25GYWN0KS50b0JlRGVmaW5lZCgpO1xuICAgIGNvbnN0IGUyUGF3biA9IGUyUGF3bkZhY3QhLmlkO1xuXG4gICAgY29uc3QgbW92ZTogTGVnYWxNb3ZlID0geyBwaWVjZUlkOiBlMlBhd24sIGZyb206IDEyLCB0bzogMjAsIGlzQ2FwdHVyZTogZmFsc2UgfTtcbiAgICBhcHBseU1vdmUoc2Vzc2lvbiwgbW92ZSk7XG5cbiAgICBleHBlY3Qoc2Vzc2lvbi5nZXQoZTJQYXduLCBcIlBvc2l0aW9uXCIpKS50b0JlKDIwKTtcbiAgICBleHBlY3Qoc2Vzc2lvbi5nZXQoR0FNRV9FTlRJVFksIFwiVHVyblwiKSkudG9CZShcImJsYWNrXCIpO1xuICAgIGV4cGVjdChzZXNzaW9uLmdldChlMlBhd24sIFwiSGFzTW92ZWRcIikpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwiY2FwdHVyZSByZXRyYWN0cyBhbGwgYXR0cnMgb2YgdGhlIGVuZW15IHBpZWNlIGF0IGRlc3RpbmF0aW9uXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgY29uc3Qgd3AgPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCAyOCk7IC8vIGU0XG4gICAgY29uc3QgYnAgPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAyLCBcInBhd25cIiwgXCJibGFja1wiLCAzNSk7IC8vIGQ1XG4gICAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiVHVyblwiLCBcIndoaXRlXCIpO1xuXG4gICAgYXBwbHlNb3ZlKHNlc3Npb24sIHsgcGllY2VJZDogd3AsIGZyb206IDI4LCB0bzogMzUsIGlzQ2FwdHVyZTogdHJ1ZSB9KTtcblxuICAgIGV4cGVjdChzZXNzaW9uLmdldCh3cCwgXCJQb3NpdGlvblwiKSkudG9CZSgzNSk7XG4gICAgZXhwZWN0KHNlc3Npb24uY29udGFpbnMoYnAsIFwiUG9zaXRpb25cIikpLnRvQmUoZmFsc2UpO1xuICAgIGV4cGVjdChzZXNzaW9uLmNvbnRhaW5zKGJwLCBcIkNvbG9yXCIpKS50b0JlKGZhbHNlKTtcbiAgICBleHBlY3Qoc2Vzc2lvbi5jb250YWlucyhicCwgXCJQaWVjZVR5cGVcIikpLnRvQmUoZmFsc2UpO1xuICAgIGV4cGVjdChzZXNzaW9uLmNvbnRhaW5zKGJwLCBcIkhhc01vdmVkXCIpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJIYXNNb3ZlZCBmbGFnIGJlY29tZXMgdHJ1ZSBhZnRlciBhbnkgbW92ZSAoa2luZyBleGFtcGxlKVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGNvbnN0IGtpbmcgPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcImtpbmdcIiwgXCJ3aGl0ZVwiLCA0KTsgLy8gZTFcbiAgICBzZXNzaW9uLmluc2VydChHQU1FX0VOVElUWSwgXCJUdXJuXCIsIFwid2hpdGVcIik7XG5cbiAgICBhcHBseU1vdmUoc2Vzc2lvbiwgeyBwaWVjZUlkOiBraW5nLCBmcm9tOiA0LCB0bzogNSwgaXNDYXB0dXJlOiBmYWxzZSB9KTtcbiAgICBleHBlY3Qoc2Vzc2lvbi5nZXQoa2luZywgXCJIYXNNb3ZlZFwiKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJpbmNyZW1lbnRzIEhhbGZtb3ZlQ2xvY2sgb24gZXZlcnkgbW92ZVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwia25pZ2h0XCIsIFwid2hpdGVcIiwgMSk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiVHVyblwiLCBcIndoaXRlXCIpO1xuICAgIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIkhhbGZtb3ZlQ2xvY2tcIiwgMCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiRnVsbG1vdmVOdW1iZXJcIiwgMSk7XG5cbiAgICBhcHBseU1vdmUoc2Vzc2lvbiwge1xuICAgICAgcGllY2VJZDogbWtJZCgxKSxcbiAgICAgIGZyb206IDEsXG4gICAgICB0bzogMTgsXG4gICAgICBpc0NhcHR1cmU6IGZhbHNlLFxuICAgIH0pO1xuICAgIGV4cGVjdChzZXNzaW9uLmdldChHQU1FX0VOVElUWSwgXCJIYWxmbW92ZUNsb2NrXCIpKS50b0JlKDEpO1xuICB9KTtcblxuICBpdChcImluY3JlbWVudHMgRnVsbG1vdmVOdW1iZXIgYWZ0ZXIgYmxhY2sncyBtb3ZlLCBub3QgYWZ0ZXIgd2hpdGUnc1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwia25pZ2h0XCIsIFwid2hpdGVcIiwgMSk7XG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMiwgXCJrbmlnaHRcIiwgXCJibGFja1wiLCA1Nyk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiVHVyblwiLCBcIndoaXRlXCIpO1xuICAgIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIkhhbGZtb3ZlQ2xvY2tcIiwgMCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiRnVsbG1vdmVOdW1iZXJcIiwgMSk7XG5cbiAgICBhcHBseU1vdmUoc2Vzc2lvbiwgeyBwaWVjZUlkOiBta0lkKDEpLCBmcm9tOiAxLCB0bzogMTgsIGlzQ2FwdHVyZTogZmFsc2UgfSk7XG4gICAgZXhwZWN0KHNlc3Npb24uZ2V0KEdBTUVfRU5USVRZLCBcIkZ1bGxtb3ZlTnVtYmVyXCIpKS50b0JlKDEpOyAvLyBzdGlsbCAxIGFmdGVyIHdoaXRlXG4gICAgZXhwZWN0KHNlc3Npb24uZ2V0KEdBTUVfRU5USVRZLCBcIlR1cm5cIikpLnRvQmUoXCJibGFja1wiKTtcblxuICAgIGFwcGx5TW92ZShzZXNzaW9uLCB7IHBpZWNlSWQ6IG1rSWQoMiksIGZyb206IDU3LCB0bzogNDIsIGlzQ2FwdHVyZTogZmFsc2UgfSk7XG4gICAgZXhwZWN0KHNlc3Npb24uZ2V0KEdBTUVfRU5USVRZLCBcIkZ1bGxtb3ZlTnVtYmVyXCIpKS50b0JlKDIpOyAvLyBidW1wZWQgYWZ0ZXIgYmxhY2tcbiAgICBleHBlY3Qoc2Vzc2lvbi5nZXQoR0FNRV9FTlRJVFksIFwiVHVyblwiKSkudG9CZShcIndoaXRlXCIpO1xuICB9KTtcbn0pO1xuXG4vLyDilIDilIDilIAgZ2V0TGVnYWxNb3Zlc0ZvckNvbG9yIC8gQ3VycmVudFR1cm4g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmRlc2NyaWJlKFwiZ2V0TGVnYWxNb3Zlc0ZvckNvbG9yICsgZ2V0TGVnYWxNb3Zlc0ZvckN1cnJlbnRUdXJuXCIsICgpID0+IHtcbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgY2xlYXJNb3ZlR2VuZXJhdG9yUmVnaXN0cnkoKTtcbiAgICByZWdpc3RlclN0dWJQYXduR2VuZXJhdG9yKCk7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyBvbmx5IG1vdmVzIGZvciBwaWVjZXMgb2YgdGhlIHJlcXVlc3RlZCBjb2xvclwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGdlbmVyYXRlU3RhcnRpbmdQb3NpdGlvbihzZXNzaW9uKTtcblxuICAgIGNvbnN0IHdoaXRlID0gZ2V0TGVnYWxNb3Zlc0ZvckNvbG9yKHNlc3Npb24sIFwid2hpdGVcIik7XG4gICAgY29uc3QgYmxhY2sgPSBnZXRMZWdhbE1vdmVzRm9yQ29sb3Ioc2Vzc2lvbiwgXCJibGFja1wiKTtcblxuICAgIC8vIFdpdGggdGhlIHN0dWIgc2luZ2xlLWFkdmFuY2UgcGF3biBnZW4sIGVhY2ggc2lkZSBoYXMgOCBwYXduIG1vdmVzXG4gICAgLy8gZnJvbSB0aGUgc3RhcnRpbmcgcG9zaXRpb24gKGtuaWdodHMvYmlzaG9wcy9ldGMuIGhhdmUgbm8gcmVnaXN0ZXJlZFxuICAgIC8vIGdlbmVyYXRvciwgc28gdGhleSBzaWxlbnRseSBjb250cmlidXRlIHplcm8pLlxuICAgIGV4cGVjdCh3aGl0ZS5sZW5ndGgpLnRvQmUoOCk7XG4gICAgZXhwZWN0KGJsYWNrLmxlbmd0aCkudG9CZSg4KTtcbiAgICBmb3IgKGNvbnN0IG0gb2Ygd2hpdGUpIHtcbiAgICAgIGV4cGVjdChzZXNzaW9uLmdldChtLnBpZWNlSWQsIFwiQ29sb3JcIikpLnRvQmUoXCJ3aGl0ZVwiKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBtIG9mIGJsYWNrKSB7XG4gICAgICBleHBlY3Qoc2Vzc2lvbi5nZXQobS5waWVjZUlkLCBcIkNvbG9yXCIpKS50b0JlKFwiYmxhY2tcIik7XG4gICAgfVxuICB9KTtcblxuICBpdChcImdldExlZ2FsTW92ZXNGb3JDdXJyZW50VHVybiByZXNwZWN0cyB0aGUgVHVybiBmYWN0XCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgZ2VuZXJhdGVTdGFydGluZ1Bvc2l0aW9uKHNlc3Npb24pO1xuXG4gICAgZXhwZWN0KHNlc3Npb24uZ2V0KEdBTUVfRU5USVRZLCBcIlR1cm5cIikpLnRvQmUoXCJ3aGl0ZVwiKTtcbiAgICBjb25zdCBmaXJzdFR1cm4gPSBnZXRMZWdhbE1vdmVzRm9yQ3VycmVudFR1cm4oc2Vzc2lvbik7XG4gICAgZXhwZWN0KGZpcnN0VHVybi5sZW5ndGgpLnRvQmUoOCk7XG4gICAgZm9yIChjb25zdCBtIG9mIGZpcnN0VHVybikge1xuICAgICAgZXhwZWN0KHNlc3Npb24uZ2V0KG0ucGllY2VJZCwgXCJDb2xvclwiKSkudG9CZShcIndoaXRlXCIpO1xuICAgIH1cblxuICAgIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIlR1cm5cIiwgXCJibGFja1wiKTtcbiAgICBjb25zdCBzZWNvbmRUdXJuID0gZ2V0TGVnYWxNb3Zlc0ZvckN1cnJlbnRUdXJuKHNlc3Npb24pO1xuICAgIGZvciAoY29uc3QgbSBvZiBzZWNvbmRUdXJuKSB7XG4gICAgICBleHBlY3Qoc2Vzc2lvbi5nZXQobS5waWVjZUlkLCBcIkNvbG9yXCIpKS50b0JlKFwiYmxhY2tcIik7XG4gICAgfVxuICB9KTtcblxuICBpdChcInBpZWNlcyB3aXRob3V0IGEgcmVnaXN0ZXJlZCBnZW5lcmF0b3IgY29udHJpYnV0ZSB6ZXJvIG1vdmVzXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJrbmlnaHRcIiwgXCJ3aGl0ZVwiLCAxKTsgLy8gbm8ga25pZ2h0IGdlbmVyYXRvciByZWdpc3RlcmVkXG4gICAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiVHVyblwiLCBcIndoaXRlXCIpO1xuXG4gICAgY29uc3QgbW92ZXMgPSBnZXRMZWdhbE1vdmVzRm9yQ29sb3Ioc2Vzc2lvbiwgXCJ3aGl0ZVwiKTtcbiAgICBleHBlY3QobW92ZXMpLnRvRXF1YWwoW10pO1xuICB9KTtcblxuICBpdChcImlnbm9yZXMgZ2FtZS1sZXZlbCBmYWN0cyAoR0FNRV9FTlRJVFk9MClcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICAvLyBPbmx5IGdhbWUtbGV2ZWwgZmFjdHMsIG5vIHBpZWNlcy5cbiAgICBzZXNzaW9uLmluc2VydChHQU1FX0VOVElUWSwgXCJUdXJuXCIsIFwid2hpdGVcIik7XG4gICAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiSGFsZm1vdmVDbG9ja1wiLCAwKTtcblxuICAgIGNvbnN0IG1vdmVzID0gZ2V0TGVnYWxNb3Zlc0ZvckNvbG9yKHNlc3Npb24sIFwid2hpdGVcIik7XG4gICAgZXhwZWN0KG1vdmVzKS50b0VxdWFsKFtdKTtcbiAgfSk7XG59KTtcblxuLy8g4pSA4pSA4pSAIGlzTGVnYWxNb3ZlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5kZXNjcmliZShcImlzTGVnYWxNb3ZlXCIsICgpID0+IHtcbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgY2xlYXJNb3ZlR2VuZXJhdG9yUmVnaXN0cnkoKTtcbiAgICByZWdpc3RlclN0dWJQYXduR2VuZXJhdG9yKCk7XG4gIH0pO1xuXG4gIGl0KFwiYWNjZXB0cyBhIHNpbmdsZS1hZHZhbmNlIHBhd24gbW92ZSBmcm9tIHRoZSBzdGFydGluZyBwb3NpdGlvblwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGNvbnN0IHAgPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCAxMik7IC8vIGUyXG4gICAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiVHVyblwiLCBcIndoaXRlXCIpO1xuXG4gICAgZXhwZWN0KFxuICAgICAgaXNMZWdhbE1vdmUoc2Vzc2lvbiwgeyBwaWVjZUlkOiBwLCBmcm9tOiAxMiwgdG86IDIwLCBpc0NhcHR1cmU6IGZhbHNlIH0pLFxuICAgICkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzIGEgbW92ZSB0byBhIHNxdWFyZSB0aGUgcGllY2UgY2Fubm90IHJlYWNoXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgY29uc3QgcCA9IGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwicGF3blwiLCBcIndoaXRlXCIsIDEyKTtcbiAgICBzZXNzaW9uLmluc2VydChHQU1FX0VOVElUWSwgXCJUdXJuXCIsIFwid2hpdGVcIik7XG5cbiAgICAvLyBTdHViIG9ubHkgZ2VuZXJhdGVzIHNpbmdsZS1hZHZhbmNlOyAyOCAoZG91YmxlIGFkdmFuY2UpIGlzIE5PVCBsZWdhbC5cbiAgICBleHBlY3QoXG4gICAgICBpc0xlZ2FsTW92ZShzZXNzaW9uLCB7IHBpZWNlSWQ6IHAsIGZyb206IDEyLCB0bzogMjgsIGlzQ2FwdHVyZTogZmFsc2UgfSksXG4gICAgKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzIGEgbW92ZSB3aG9zZSBwaWVjZUlkIGhhcyBubyBDb2xvciBpbiBXTVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIlR1cm5cIiwgXCJ3aGl0ZVwiKTtcbiAgICBleHBlY3QoXG4gICAgICBpc0xlZ2FsTW92ZShzZXNzaW9uLCB7XG4gICAgICAgIHBpZWNlSWQ6IG1rSWQoOTkpLFxuICAgICAgICBmcm9tOiAwLFxuICAgICAgICB0bzogOCxcbiAgICAgICAgaXNDYXB0dXJlOiBmYWxzZSxcbiAgICAgIH0pLFxuICAgICkudG9CZShmYWxzZSk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvY2hlc3Mvc3JjL3J1bGVzL3R1cm4udGVzdC50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/cfc287e9d02cf31515d555daed467fd70fe79b93 b/7xOfJqsDU787fe61oSCq1/web/cfc287e9d02cf31515d555daed467fd70fe79b93 deleted file mode 100644 index 9816da1..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/cfc287e9d02cf31515d555daed467fd70fe79b93 +++ /dev/null @@ -1,41 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/rules/primitives.ts", {"importedNames":["knightCandidates"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/rules/board-queries.ts", {"importedNames":["isAllyAt","isPieceAt"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/presets/registry.ts", {"importedNames":["PRESET_REGISTRY"]}); -__vite_ssr_import_2__.PRESET_REGISTRY.register({ - id: "knights-leap-twice", - name: "Double-Leap Knights", - description: "Knights move in two consecutive L-shapes in a single turn; the intermediate square must be empty.", - incompatibleWith: [], - requires: [], - getExtraMoves: (engine, pieceId) => { - const session = engine.session; - const facts = session.allFacts(); - const typeFact = facts.find((f) => f.id === pieceId && f.attr === "PieceType"); - if (!typeFact || typeFact.value !== "knight") return []; - const colorFact = facts.find((f) => f.id === pieceId && f.attr === "Color"); - const posFact = facts.find((f) => f.id === pieceId && f.attr === "Position"); - if (!colorFact || !posFact) return []; - const color = colorFact.value; - const from = posFact.value; - const singleLeaps = new Set((0,__vite_ssr_import_0__.knightCandidates)(from)); - const twoLeapDests = /* @__PURE__ */ new Set(); - for (const mid of (0,__vite_ssr_import_0__.knightCandidates)(from)) { - if ((0,__vite_ssr_import_1__.isPieceAt)(session, mid)) continue; - for (const dest of (0,__vite_ssr_import_0__.knightCandidates)(mid)) { - if (dest === from) continue; - if (singleLeaps.has(dest)) continue; - if ((0,__vite_ssr_import_1__.isAllyAt)(session, dest, color)) continue; - twoLeapDests.add(dest); - } - }; - return [...twoLeapDests].map((to) => ({ - pieceId, - from, - to, - isCapture: (0,__vite_ssr_import_1__.isPieceAt)(session, to) - })); - } -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBU0E7QUFDQTtBQUNBO0FBRUEsc0NBQWdCLFNBQVM7QUFBQSxFQUN2QixJQUFJO0FBQUEsRUFDSixNQUFNO0FBQUEsRUFDTixhQUFhO0FBQUEsRUFDYixrQkFBa0IsQ0FBQztBQUFBLEVBQ25CLFVBQVUsQ0FBQztBQUFBLEVBQ1gsZUFBZSxDQUFDLFFBQVEsWUFBWTtBQUNsQyxVQUFNLFVBQVUsT0FBTztBQUN2QixVQUFNLFFBQVEsUUFBUSxTQUFTO0FBRS9CLFVBQU0sV0FBVyxNQUFNLEtBQUssT0FBSyxFQUFFLE9BQU8sV0FBVyxFQUFFLFNBQVMsV0FBVztBQUMzRSxRQUFJLENBQUMsWUFBWSxTQUFTLFVBQVUsU0FBVSxRQUFPLENBQUM7QUFFdEQsVUFBTSxZQUFZLE1BQU0sS0FBSyxPQUFLLEVBQUUsT0FBTyxXQUFXLEVBQUUsU0FBUyxPQUFPO0FBQ3hFLFVBQU0sVUFBVSxNQUFNLEtBQUssT0FBSyxFQUFFLE9BQU8sV0FBVyxFQUFFLFNBQVMsVUFBVTtBQUN6RSxRQUFJLENBQUMsYUFBYSxDQUFDLFFBQVMsUUFBTyxDQUFDO0FBRXBDLFVBQU0sUUFBUSxVQUFVO0FBQ3hCLFVBQU0sT0FBTyxRQUFRO0FBR3JCLFVBQU0sY0FBYyxJQUFJLE9BQVksd0NBQWlCLElBQUksQ0FBQztBQUkxRCxVQUFNLGVBQWUsb0JBQUksSUFBWTtBQUNyQyxlQUFXLFVBQU8sd0NBQWlCLElBQUksR0FBRztBQUV4QyxhQUFJLGlDQUFVLFNBQVMsR0FBRyxFQUFHO0FBQzdCLGlCQUFXLFdBQVEsd0NBQWlCLEdBQUcsR0FBRztBQUN4QyxZQUFJLFNBQVMsS0FBTTtBQUNuQixZQUFJLFlBQVksSUFBSSxJQUFJLEVBQUc7QUFDM0IsZUFBSSxnQ0FBUyxTQUFTLE1BQU0sS0FBSyxFQUFHO0FBQ3BDLHFCQUFhLElBQUksSUFBSTtBQUFBLE1BQ3ZCO0FBQUEsSUFDRjtBQUVBLFdBQU8sQ0FBQyxHQUFHLFlBQVksRUFBRSxJQUFJLFNBQU87QUFBQSxNQUNsQztBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQSxjQUFXLGlDQUFVLFNBQVMsRUFBRTtBQUFBLElBQ2xDLEVBQUU7QUFBQSxFQUNKO0FBQ0YsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsia25pZ2h0cy1sZWFwLXR3aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHJlc2V0OiBga25pZ2h0cy1sZWFwLXR3aWNlYCAoUlVMRVMubWQgcnVsZSAjNClcbiAqXG4gKiBLbmlnaHRzIG1ha2UgdHdvIGNvbnNlY3V0aXZlIEwtc2hhcGVkIGxlYXBzIGluIGEgc2luZ2xlIHR1cm4uIFRoZSBpbnRlcm1lZGlhdGVcbiAqIHNxdWFyZSBtdXN0IGJlIGVtcHR5LiBTaW5nbGUtbGVhcCBkZXN0aW5hdGlvbnMgcmVtYWluIGxlZ2FsIChoYW5kbGVkIGJ5IHRoZVxuICogYmFzZSBGSURFIGtuaWdodCBydWxlKTsgdGhpcyBwcmVzZXQgb25seSBjb250cmlidXRlcyB0aGUgKmFkZGl0aW9uYWwqXG4gKiB0d28tbGVhcCBkZXN0aW5hdGlvbnMuXG4gKi9cbmltcG9ydCB0eXBlIHsgUGllY2VDb2xvciB9IGZyb20gXCIuLi9zY2hlbWEuanNcIjtcbmltcG9ydCB7IGtuaWdodENhbmRpZGF0ZXMgfSBmcm9tIFwiLi4vcnVsZXMvcHJpbWl0aXZlcy5qc1wiO1xuaW1wb3J0IHsgaXNBbGx5QXQsIGlzUGllY2VBdCB9IGZyb20gXCIuLi9ydWxlcy9ib2FyZC1xdWVyaWVzLmpzXCI7XG5pbXBvcnQgeyBQUkVTRVRfUkVHSVNUUlkgfSBmcm9tIFwiLi9yZWdpc3RyeS5qc1wiO1xuXG5QUkVTRVRfUkVHSVNUUlkucmVnaXN0ZXIoe1xuICBpZDogXCJrbmlnaHRzLWxlYXAtdHdpY2VcIixcbiAgbmFtZTogXCJEb3VibGUtTGVhcCBLbmlnaHRzXCIsXG4gIGRlc2NyaXB0aW9uOiBcIktuaWdodHMgbW92ZSBpbiB0d28gY29uc2VjdXRpdmUgTC1zaGFwZXMgaW4gYSBzaW5nbGUgdHVybjsgdGhlIGludGVybWVkaWF0ZSBzcXVhcmUgbXVzdCBiZSBlbXB0eS5cIixcbiAgaW5jb21wYXRpYmxlV2l0aDogW10sXG4gIHJlcXVpcmVzOiBbXSxcbiAgZ2V0RXh0cmFNb3ZlczogKGVuZ2luZSwgcGllY2VJZCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBlbmdpbmUuc2Vzc2lvbjtcbiAgICBjb25zdCBmYWN0cyA9IHNlc3Npb24uYWxsRmFjdHMoKTtcblxuICAgIGNvbnN0IHR5cGVGYWN0ID0gZmFjdHMuZmluZChmID0+IGYuaWQgPT09IHBpZWNlSWQgJiYgZi5hdHRyID09PSBcIlBpZWNlVHlwZVwiKTtcbiAgICBpZiAoIXR5cGVGYWN0IHx8IHR5cGVGYWN0LnZhbHVlICE9PSBcImtuaWdodFwiKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBjb2xvckZhY3QgPSBmYWN0cy5maW5kKGYgPT4gZi5pZCA9PT0gcGllY2VJZCAmJiBmLmF0dHIgPT09IFwiQ29sb3JcIik7XG4gICAgY29uc3QgcG9zRmFjdCA9IGZhY3RzLmZpbmQoZiA9PiBmLmlkID09PSBwaWVjZUlkICYmIGYuYXR0ciA9PT0gXCJQb3NpdGlvblwiKTtcbiAgICBpZiAoIWNvbG9yRmFjdCB8fCAhcG9zRmFjdCkgcmV0dXJuIFtdO1xuXG4gICAgY29uc3QgY29sb3IgPSBjb2xvckZhY3QudmFsdWUgYXMgUGllY2VDb2xvcjtcbiAgICBjb25zdCBmcm9tID0gcG9zRmFjdC52YWx1ZSBhcyBudW1iZXI7XG5cbiAgICAvLyBTaW5nbGUtbGVhcCB0YXJnZXRzICh0byBleGNsdWRlIGZyb20gZXh0cmFzIOKAlCBiYXNlIHJ1bGUgYWxyZWFkeSBlbWl0cyB0aGVzZSkuXG4gICAgY29uc3Qgc2luZ2xlTGVhcHMgPSBuZXcgU2V0PG51bWJlcj4oa25pZ2h0Q2FuZGlkYXRlcyhmcm9tKSk7XG5cbiAgICAvLyBUd28tbGVhcCB0YXJnZXRzOiBmb3IgZWFjaCBpbnRlcm1lZGlhdGUgZW1wdHkgc3F1YXJlIHJlYWNoYWJsZSBieSBvbmUgbGVhcCxcbiAgICAvLyBjb2xsZWN0IGFsbCBrbmlnaHQtbGVhcCB0YXJnZXRzIGZyb20gdGhlcmUuXG4gICAgY29uc3QgdHdvTGVhcERlc3RzID0gbmV3IFNldDxudW1iZXI+KCk7XG4gICAgZm9yIChjb25zdCBtaWQgb2Yga25pZ2h0Q2FuZGlkYXRlcyhmcm9tKSkge1xuICAgICAgLy8gSW50ZXJtZWRpYXRlIHNxdWFyZSBtdXN0IGJlIGVtcHR5IChwZXIgUlVMRVMubWQgwqdEb3VibGUtTGVhcCBLbmlnaHRzKS5cbiAgICAgIGlmIChpc1BpZWNlQXQoc2Vzc2lvbiwgbWlkKSkgY29udGludWU7XG4gICAgICBmb3IgKGNvbnN0IGRlc3Qgb2Yga25pZ2h0Q2FuZGlkYXRlcyhtaWQpKSB7XG4gICAgICAgIGlmIChkZXN0ID09PSBmcm9tKSBjb250aW51ZTsgICAgICAgICAgICAgICAgICAgLy8gbnVsbC1tb3ZlIHBydW5lXG4gICAgICAgIGlmIChzaW5nbGVMZWFwcy5oYXMoZGVzdCkpIGNvbnRpbnVlOyAgICAgICAgICAgLy8gYmFzZSBydWxlIGNvdmVycyBpdFxuICAgICAgICBpZiAoaXNBbGx5QXQoc2Vzc2lvbiwgZGVzdCwgY29sb3IpKSBjb250aW51ZTsgIC8vIGNhbm5vdCBsYW5kIG9uIGFsbHlcbiAgICAgICAgdHdvTGVhcERlc3RzLmFkZChkZXN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gWy4uLnR3b0xlYXBEZXN0c10ubWFwKHRvID0+ICh7XG4gICAgICBwaWVjZUlkLFxuICAgICAgZnJvbSxcbiAgICAgIHRvLFxuICAgICAgaXNDYXB0dXJlOiBpc1BpZWNlQXQoc2Vzc2lvbiwgdG8pLFxuICAgIH0pKTtcbiAgfSxcbn0pO1xuIl0sImZpbGUiOiIvc3JjL3ByZXNldHMva25pZ2h0cy1sZWFwLXR3aWNlLnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/d04f43e85f06e15e6c7b3e5d99011a097c59873f b/7xOfJqsDU787fe61oSCq1/web/d04f43e85f06e15e6c7b3e5d99011a097c59873f deleted file mode 100644 index 26bcd3f..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/d04f43e85f06e15e6c7b3e5d99011a097c59873f +++ /dev/null @@ -1,5 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "default", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_export_default__ } catch {} }}); -const __vite_ssr_export_default__ = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%20width='45'%20height='45'%3e%3cg%20style='fill:none;%20fill-opacity:1;%20fill-rule:evenodd;%20stroke:%23000000;%20stroke-width:1.5;%20stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;%20stroke-dasharray:none;%20stroke-opacity:1;'%3e%3cpath%20d='M%2022.5,11.63%20L%2022.5,6'%20style='fill:none;%20stroke:%23000000;%20stroke-linejoin:miter;'%20id='path6570'/%3e%3cpath%20d='M%2022.5,25%20C%2022.5,25%2027,17.5%2025.5,14.5%20C%2025.5,14.5%2024.5,12%2022.5,12%20C%2020.5,12%2019.5,14.5%2019.5,14.5%20C%2018,17.5%2022.5,25%2022.5,25'%20style='fill:%23000000;fill-opacity:1;%20stroke-linecap:butt;%20stroke-linejoin:miter;'/%3e%3cpath%20d='M%2012.5,37%20C%2018,40.5%2027,40.5%2032.5,37%20L%2032.5,30%20C%2032.5,30%2041.5,25.5%2038.5,19.5%20C%2034.5,13%2025,16%2022.5,23.5%20L%2022.5,27%20L%2022.5,23.5%20C%2020,16%2010.5,13%206.5,19.5%20C%203.5,25.5%2012.5,30%2012.5,30%20L%2012.5,37'%20style='fill:%23000000;%20stroke:%23000000;'/%3e%3cpath%20d='M%2020,8%20L%2025,8'%20style='fill:none;%20stroke:%23000000;%20stroke-linejoin:miter;'/%3e%3cpath%20d='M%2032,29.5%20C%2032,29.5%2040.5,25.5%2038.03,19.85%20C%2034.15,14%2025,18%2022.5,24.5%20L%2022.5,26.6%20L%2022.5,24.5%20C%2020,18%2010.85,14%206.97,19.85%20C%204.5,25.5%2013,29.5%2013,29.5'%20style='fill:none;%20stroke:%23ffffff;'/%3e%3cpath%20d='M%2012.5,30%20C%2018,27%2027,27%2032.5,30%20M%2012.5,33.5%20C%2018,30.5%2027,30.5%2032.5,33.5%20M%2012.5,37%20C%2018,34%2027,34%2032.5,37'%20style='fill:none;%20stroke:%23ffffff;'/%3e%3c/g%3e%3c/svg%3e" - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJsYWNrLWtpbmcuc3ZnIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzYz94bWwlMjB2ZXJzaW9uPScxLjAnJTIwZW5jb2Rpbmc9J1VURi04JyUyMHN0YW5kYWxvbmU9J25vJz8lM2UlM2MhRE9DVFlQRSUyMHN2ZyUyMFBVQkxJQyUyMCctLy9XM0MvL0RURCUyMFNWRyUyMDEuMS8vRU4nJTIwJ2h0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCclM2UlM2NzdmclMjB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTIwdmVyc2lvbj0nMS4xJyUyMHdpZHRoPSc0NSclMjBoZWlnaHQ9JzQ1JyUzZSUzY2clMjBzdHlsZT0nZmlsbDpub25lOyUyMGZpbGwtb3BhY2l0eToxOyUyMGZpbGwtcnVsZTpldmVub2RkOyUyMHN0cm9rZTolMjMwMDAwMDA7JTIwc3Ryb2tlLXdpZHRoOjEuNTslMjBzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDslMjBzdHJva2UtZGFzaGFycmF5Om5vbmU7JTIwc3Ryb2tlLW9wYWNpdHk6MTsnJTNlJTNjcGF0aCUyMGQ9J00lMjAyMi41LDExLjYzJTIwTCUyMDIyLjUsNiclMjBzdHlsZT0nZmlsbDpub25lOyUyMHN0cm9rZTolMjMwMDAwMDA7JTIwc3Ryb2tlLWxpbmVqb2luOm1pdGVyOyclMjBpZD0ncGF0aDY1NzAnLyUzZSUzY3BhdGglMjBkPSdNJTIwMjIuNSwyNSUyMEMlMjAyMi41LDI1JTIwMjcsMTcuNSUyMDI1LjUsMTQuNSUyMEMlMjAyNS41LDE0LjUlMjAyNC41LDEyJTIwMjIuNSwxMiUyMEMlMjAyMC41LDEyJTIwMTkuNSwxNC41JTIwMTkuNSwxNC41JTIwQyUyMDE4LDE3LjUlMjAyMi41LDI1JTIwMjIuNSwyNSclMjBzdHlsZT0nZmlsbDolMjMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7JTIwc3Ryb2tlLWxpbmVjYXA6YnV0dDslMjBzdHJva2UtbGluZWpvaW46bWl0ZXI7Jy8lM2UlM2NwYXRoJTIwZD0nTSUyMDEyLjUsMzclMjBDJTIwMTgsNDAuNSUyMDI3LDQwLjUlMjAzMi41LDM3JTIwTCUyMDMyLjUsMzAlMjBDJTIwMzIuNSwzMCUyMDQxLjUsMjUuNSUyMDM4LjUsMTkuNSUyMEMlMjAzNC41LDEzJTIwMjUsMTYlMjAyMi41LDIzLjUlMjBMJTIwMjIuNSwyNyUyMEwlMjAyMi41LDIzLjUlMjBDJTIwMjAsMTYlMjAxMC41LDEzJTIwNi41LDE5LjUlMjBDJTIwMy41LDI1LjUlMjAxMi41LDMwJTIwMTIuNSwzMCUyMEwlMjAxMi41LDM3JyUyMHN0eWxlPSdmaWxsOiUyMzAwMDAwMDslMjBzdHJva2U6JTIzMDAwMDAwOycvJTNlJTNjcGF0aCUyMGQ9J00lMjAyMCw4JTIwTCUyMDI1LDgnJTIwc3R5bGU9J2ZpbGw6bm9uZTslMjBzdHJva2U6JTIzMDAwMDAwOyUyMHN0cm9rZS1saW5lam9pbjptaXRlcjsnLyUzZSUzY3BhdGglMjBkPSdNJTIwMzIsMjkuNSUyMEMlMjAzMiwyOS41JTIwNDAuNSwyNS41JTIwMzguMDMsMTkuODUlMjBDJTIwMzQuMTUsMTQlMjAyNSwxOCUyMDIyLjUsMjQuNSUyMEwlMjAyMi41LDI2LjYlMjBMJTIwMjIuNSwyNC41JTIwQyUyMDIwLDE4JTIwMTAuODUsMTQlMjA2Ljk3LDE5Ljg1JTIwQyUyMDQuNSwyNS41JTIwMTMsMjkuNSUyMDEzLDI5LjUnJTIwc3R5bGU9J2ZpbGw6bm9uZTslMjBzdHJva2U6JTIzZmZmZmZmOycvJTNlJTNjcGF0aCUyMGQ9J00lMjAxMi41LDMwJTIwQyUyMDE4LDI3JTIwMjcsMjclMjAzMi41LDMwJTIwTSUyMDEyLjUsMzMuNSUyMEMlMjAxOCwzMC41JTIwMjcsMzAuNSUyMDMyLjUsMzMuNSUyME0lMjAxMi41LDM3JTIwQyUyMDE4LDM0JTIwMjcsMzQlMjAzMi41LDM3JyUyMHN0eWxlPSdmaWxsOm5vbmU7JTIwc3Ryb2tlOiUyM2ZmZmZmZjsnLyUzZSUzYy9nJTNlJTNjL3N2ZyUzZVwiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxtQ0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/d10a4779c3f462b401d323acb3c5cdfb4bbf5d9e b/7xOfJqsDU787fe61oSCq1/web/d10a4779c3f462b401d323acb3c5cdfb4bbf5d9e deleted file mode 100644 index cc1c51f..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/d10a4779c3f462b401d323acb3c5cdfb4bbf5d9e +++ /dev/null @@ -1,94 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/layouts/chess960.ts", {"importedNames":["buildChess960Layout"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["fileOf","rankOf"]}); -function whiteBackRank(pieces) { - const row = new Array(8).fill(null); - for (const p of pieces) { - if (p.color !== "white") continue; - if (p.type === "pawn") continue; - const rank = (0,__vite_ssr_import_2__.rankOf)(p.square); - if (rank !== 0) continue; - row[(0,__vite_ssr_import_2__.fileOf)(p.square)] = p.type; - }; - return row; -} -function blackBackRank(pieces) { - const row = new Array(8).fill(null); - for (const p of pieces) { - if (p.color !== "black") continue; - if (p.type === "pawn") continue; - const rank = (0,__vite_ssr_import_2__.rankOf)(p.square); - if (rank !== 7) continue; - row[(0,__vite_ssr_import_2__.fileOf)(p.square)] = p.type; - }; - return row; -} -function checkInvariants(back) { - const nonNull = back.filter((p) => p !== null); - (0,__vite_ssr_import_0__.expect)(nonNull.length).toBe(8); - const bishopFiles = back.map((p, i) => p === "bishop" ? i : -1).filter((i) => i >= 0); - (0,__vite_ssr_import_0__.expect)(bishopFiles.length).toBe(2); - const [b1, b2] = bishopFiles; - (0,__vite_ssr_import_0__.expect)(b1 % 2).not.toBe(b2 % 2); - const kingFile = back.findIndex((p) => p === "king"); - const rookFiles = back.map((p, i) => p === "rook" ? i : -1).filter((i) => i >= 0); - (0,__vite_ssr_import_0__.expect)(kingFile).toBeGreaterThanOrEqual(0); - (0,__vite_ssr_import_0__.expect)(rookFiles.length).toBe(2); - const [r1, r2] = rookFiles; - (0,__vite_ssr_import_0__.expect)(Math.min(r1, r2)).toBeLessThan(kingFile); - (0,__vite_ssr_import_0__.expect)(Math.max(r1, r2)).toBeGreaterThan(kingFile); - const knightCount = back.filter((p) => p === "knight").length; - (0,__vite_ssr_import_0__.expect)(knightCount).toBe(2); - const queenCount = back.filter((p) => p === "queen").length; - (0,__vite_ssr_import_0__.expect)(queenCount).toBe(1); -} -(0,__vite_ssr_import_0__.describe)("buildChess960Layout()", () => { - (0,__vite_ssr_import_0__.it)("all 960 positions satisfy the invariants", () => { - for (let id = 0; id < 960; id++) { - const layout = (0,__vite_ssr_import_1__.buildChess960Layout)(id); - const white = whiteBackRank(layout.pieces); - const black = blackBackRank(layout.pieces); - checkInvariants(white); - checkInvariants(black); - (0,__vite_ssr_import_0__.expect)(white).toEqual(black); - } - }); - (0,__vite_ssr_import_0__.it)("position 518 equals the FIDE starting setup", () => { - const layout = (0,__vite_ssr_import_1__.buildChess960Layout)(518); - const back = whiteBackRank(layout.pieces); - (0,__vite_ssr_import_0__.expect)(back).toEqual([ - "rook", - "knight", - "bishop", - "queen", - "king", - "bishop", - "knight", - "rook" - ]); - }); - (0,__vite_ssr_import_0__.it)("each layout has exactly 32 pieces (8 back + 8 pawns) × 2", () => { - for (const seed of [0, 1, 518, 959]) { - const layout = (0,__vite_ssr_import_1__.buildChess960Layout)(seed); - (0,__vite_ssr_import_0__.expect)(layout.pieces).toHaveLength(32); - const whitePawns = layout.pieces.filter( - (p) => p.type === "pawn" && p.color === "white" - ); - const blackPawns = layout.pieces.filter( - (p) => p.type === "pawn" && p.color === "black" - ); - (0,__vite_ssr_import_0__.expect)(whitePawns).toHaveLength(8); - (0,__vite_ssr_import_0__.expect)(blackPawns).toHaveLength(8); - } - }); - (0,__vite_ssr_import_0__.it)("wraps out-of-range seeds via modulo", () => { - const inRange = (0,__vite_ssr_import_1__.buildChess960Layout)(42); - const wrapped = (0,__vite_ssr_import_1__.buildChess960Layout)(42 + 960); - (0,__vite_ssr_import_0__.expect)(whiteBackRank(wrapped.pieces)).toEqual( - whiteBackRank(inRange.pieces) - ); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUVELCtCQUFHLDREQUE0RCxNQUFNO0FBQ25FLGVBQVcsUUFBUSxDQUFDLEdBQUcsR0FBRyxLQUFLLEdBQUcsR0FBRztBQUNuQyxZQUFNLFlBQVMsMkNBQW9CLElBQUk7QUFDdkMsdUNBQU8sT0FBTyxNQUFNLEVBQUUsYUFBYSxFQUFFO0FBQ3JDLFlBQU0sYUFBYSxPQUFPLE9BQU87QUFBQSxRQUMvQixDQUFDLE1BQU0sRUFBRSxTQUFTLFVBQVUsRUFBRSxVQUFVO0FBQUEsTUFDMUM7QUFDQSxZQUFNLGFBQWEsT0FBTyxPQUFPO0FBQUEsUUFDL0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxVQUFVLEVBQUUsVUFBVTtBQUFBLE1BQzFDO0FBQ0EsdUNBQU8sVUFBVSxFQUFFLGFBQWEsQ0FBQztBQUNqQyx1Q0FBTyxVQUFVLEVBQUUsYUFBYSxDQUFDO0FBQUEsSUFDbkM7QUFBQSxFQUNGLENBQUM7QUFFRCwrQkFBRyx1Q0FBdUMsTUFBTTtBQUM5QyxVQUFNLGFBQVUsMkNBQW9CLEVBQUU7QUFDdEMsVUFBTSxhQUFVLDJDQUFvQixLQUFLLEdBQUc7QUFDNUMscUNBQU8sY0FBYyxRQUFRLE1BQU0sQ0FBQyxFQUFFO0FBQUEsTUFDcEMsY0FBYyxRQUFRLE1BQU07QUFBQSxJQUM5QjtBQUFBLEVBQ0YsQ0FBQztBQUNILENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImNoZXNzOTYwLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgeyBidWlsZENoZXNzOTYwTGF5b3V0IH0gZnJvbSBcIi4vY2hlc3M5NjAuanNcIjtcbmltcG9ydCB7IGZpbGVPZiwgcmFua09mIH0gZnJvbSBcIi4uL2Nvb3JkLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBpZWNlVHlwZSB9IGZyb20gXCIuLi9zY2hlbWEuanNcIjtcblxuLyoqXG4gKiBDaGVzczk2MCBpbnZhcmlhbnRzIChTY2hhcm5hZ2wgc2NoZW1lKTpcbiAqXG4gKiAgIC0gQm90aCBiaXNob3BzIG9uIG9wcG9zaXRlLWNvbG9yIHNxdWFyZXMgKG9uZSBsaWdodCwgb25lIGRhcmspLlxuICogICAtIEtpbmcgaXMgc3RyaWN0bHkgYmV0d2VlbiB0aGUgdHdvIHJvb2tzIG9uIHRoZSBiYWNrIHJhbmsuXG4gKiAgIC0gQmxhY2sgYmFjayByYW5rIG1pcnJvcnMgd2hpdGUuXG4gKiAgIC0gUGllY2UgY291bnQgZXhhY3RseSBtYXRjaGVzIEZJREUgKDggcGF3bnMgKyA4IGJhY2stcmFuayBwZXIgc2lkZSkuXG4gKiAgIC0gUG9zaXRpb24gNTE4IGVxdWFscyBGSURFLlxuICovXG5cbmZ1bmN0aW9uIHdoaXRlQmFja1JhbmsocGllY2VzOiBSZXR1cm5UeXBlPHR5cGVvZiBidWlsZENoZXNzOTYwTGF5b3V0PltcInBpZWNlc1wiXSkge1xuICBjb25zdCByb3c6IChQaWVjZVR5cGUgfCBudWxsKVtdID0gbmV3IEFycmF5KDgpLmZpbGwobnVsbCk7XG4gIGZvciAoY29uc3QgcCBvZiBwaWVjZXMpIHtcbiAgICBpZiAocC5jb2xvciAhPT0gXCJ3aGl0ZVwiKSBjb250aW51ZTtcbiAgICBpZiAocC50eXBlID09PSBcInBhd25cIikgY29udGludWU7XG4gICAgY29uc3QgcmFuayA9IHJhbmtPZihwLnNxdWFyZSk7XG4gICAgaWYgKHJhbmsgIT09IDApIGNvbnRpbnVlO1xuICAgIHJvd1tmaWxlT2YocC5zcXVhcmUpXSA9IHAudHlwZTtcbiAgfVxuICByZXR1cm4gcm93O1xufVxuXG5mdW5jdGlvbiBibGFja0JhY2tSYW5rKHBpZWNlczogUmV0dXJuVHlwZTx0eXBlb2YgYnVpbGRDaGVzczk2MExheW91dD5bXCJwaWVjZXNcIl0pIHtcbiAgY29uc3Qgcm93OiAoUGllY2VUeXBlIHwgbnVsbClbXSA9IG5ldyBBcnJheSg4KS5maWxsKG51bGwpO1xuICBmb3IgKGNvbnN0IHAgb2YgcGllY2VzKSB7XG4gICAgaWYgKHAuY29sb3IgIT09IFwiYmxhY2tcIikgY29udGludWU7XG4gICAgaWYgKHAudHlwZSA9PT0gXCJwYXduXCIpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHJhbmsgPSByYW5rT2YocC5zcXVhcmUpO1xuICAgIGlmIChyYW5rICE9PSA3KSBjb250aW51ZTtcbiAgICByb3dbZmlsZU9mKHAuc3F1YXJlKV0gPSBwLnR5cGU7XG4gIH1cbiAgcmV0dXJuIHJvdztcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnZhcmlhbnRzKGJhY2s6IHJlYWRvbmx5IChQaWVjZVR5cGUgfCBudWxsKVtdKTogdm9pZCB7XG4gIC8vIDggbm9uLW51bGwgcGllY2VzLlxuICBjb25zdCBub25OdWxsID0gYmFjay5maWx0ZXIoKHApID0+IHAgIT09IG51bGwpO1xuICBleHBlY3Qobm9uTnVsbC5sZW5ndGgpLnRvQmUoOCk7XG5cbiAgLy8gQmlzaG9wcyBvbiBvcHBvc2l0ZSBjb2xvcnMuIERhcmsgc3F1YXJlID0gKGZpbGUgKyByYW5rKSBldmVuO1xuICAvLyByYW5rIDAgbWVhbnMgY29sb3IgcGFyaXR5IGZvbGxvd3MgZmlsZSBwYXJpdHkuXG4gIGNvbnN0IGJpc2hvcEZpbGVzID0gYmFja1xuICAgIC5tYXAoKHAsIGkpID0+IChwID09PSBcImJpc2hvcFwiID8gaSA6IC0xKSlcbiAgICAuZmlsdGVyKChpKSA9PiBpID49IDApO1xuICBleHBlY3QoYmlzaG9wRmlsZXMubGVuZ3RoKS50b0JlKDIpO1xuICBjb25zdCBbYjEsIGIyXSA9IGJpc2hvcEZpbGVzIGFzIFtudW1iZXIsIG51bWJlcl07XG4gIGV4cGVjdChiMSAlIDIpLm5vdC50b0JlKGIyICUgMik7XG5cbiAgLy8gS2luZyBiZXR3ZWVuIHJvb2tzLlxuICBjb25zdCBraW5nRmlsZSA9IGJhY2suZmluZEluZGV4KChwKSA9PiBwID09PSBcImtpbmdcIik7XG4gIGNvbnN0IHJvb2tGaWxlcyA9IGJhY2tcbiAgICAubWFwKChwLCBpKSA9PiAocCA9PT0gXCJyb29rXCIgPyBpIDogLTEpKVxuICAgIC5maWx0ZXIoKGkpID0+IGkgPj0gMCk7XG4gIGV4cGVjdChraW5nRmlsZSkudG9CZUdyZWF0ZXJUaGFuT3JFcXVhbCgwKTtcbiAgZXhwZWN0KHJvb2tGaWxlcy5sZW5ndGgpLnRvQmUoMik7XG4gIGNvbnN0IFtyMSwgcjJdID0gcm9va0ZpbGVzIGFzIFtudW1iZXIsIG51bWJlcl07XG4gIGV4cGVjdChNYXRoLm1pbihyMSwgcjIpKS50b0JlTGVzc1RoYW4oa2luZ0ZpbGUpO1xuICBleHBlY3QoTWF0aC5tYXgocjEsIHIyKSkudG9CZUdyZWF0ZXJUaGFuKGtpbmdGaWxlKTtcblxuICAvLyBFeGFjdGx5IDIga25pZ2h0cy5cbiAgY29uc3Qga25pZ2h0Q291bnQgPSBiYWNrLmZpbHRlcigocCkgPT4gcCA9PT0gXCJrbmlnaHRcIikubGVuZ3RoO1xuICBleHBlY3Qoa25pZ2h0Q291bnQpLnRvQmUoMik7XG5cbiAgLy8gRXhhY3RseSAxIHF1ZWVuLlxuICBjb25zdCBxdWVlbkNvdW50ID0gYmFjay5maWx0ZXIoKHApID0+IHAgPT09IFwicXVlZW5cIikubGVuZ3RoO1xuICBleHBlY3QocXVlZW5Db3VudCkudG9CZSgxKTtcbn1cblxuZGVzY3JpYmUoXCJidWlsZENoZXNzOTYwTGF5b3V0KClcIiwgKCkgPT4ge1xuICBpdChcImFsbCA5NjAgcG9zaXRpb25zIHNhdGlzZnkgdGhlIGludmFyaWFudHNcIiwgKCkgPT4ge1xuICAgIC8vIEV4aGF1c3RpdmUgY2hlY2sg4oCUIDk2MCBpcyBzbWFsbC5cbiAgICBmb3IgKGxldCBpZCA9IDA7IGlkIDwgOTYwOyBpZCsrKSB7XG4gICAgICBjb25zdCBsYXlvdXQgPSBidWlsZENoZXNzOTYwTGF5b3V0KGlkKTtcbiAgICAgIGNvbnN0IHdoaXRlID0gd2hpdGVCYWNrUmFuayhsYXlvdXQucGllY2VzKTtcbiAgICAgIGNvbnN0IGJsYWNrID0gYmxhY2tCYWNrUmFuayhsYXlvdXQucGllY2VzKTtcbiAgICAgIGNoZWNrSW52YXJpYW50cyh3aGl0ZSk7XG4gICAgICBjaGVja0ludmFyaWFudHMoYmxhY2spO1xuICAgICAgZXhwZWN0KHdoaXRlKS50b0VxdWFsKGJsYWNrKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwicG9zaXRpb24gNTE4IGVxdWFscyB0aGUgRklERSBzdGFydGluZyBzZXR1cFwiLCAoKSA9PiB7XG4gICAgY29uc3QgbGF5b3V0ID0gYnVpbGRDaGVzczk2MExheW91dCg1MTgpO1xuICAgIGNvbnN0IGJhY2sgPSB3aGl0ZUJhY2tSYW5rKGxheW91dC5waWVjZXMpO1xuICAgIGV4cGVjdChiYWNrKS50b0VxdWFsKFtcbiAgICAgIFwicm9va1wiLFxuICAgICAgXCJrbmlnaHRcIixcbiAgICAgIFwiYmlzaG9wXCIsXG4gICAgICBcInF1ZWVuXCIsXG4gICAgICBcImtpbmdcIixcbiAgICAgIFwiYmlzaG9wXCIsXG4gICAgICBcImtuaWdodFwiLFxuICAgICAgXCJyb29rXCIsXG4gICAgXSk7XG4gIH0pO1xuXG4gIGl0KFwiZWFjaCBsYXlvdXQgaGFzIGV4YWN0bHkgMzIgcGllY2VzICg4IGJhY2sgKyA4IHBhd25zKSDDlyAyXCIsICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IHNlZWQgb2YgWzAsIDEsIDUxOCwgOTU5XSkge1xuICAgICAgY29uc3QgbGF5b3V0ID0gYnVpbGRDaGVzczk2MExheW91dChzZWVkKTtcbiAgICAgIGV4cGVjdChsYXlvdXQucGllY2VzKS50b0hhdmVMZW5ndGgoMzIpO1xuICAgICAgY29uc3Qgd2hpdGVQYXducyA9IGxheW91dC5waWVjZXMuZmlsdGVyKFxuICAgICAgICAocCkgPT4gcC50eXBlID09PSBcInBhd25cIiAmJiBwLmNvbG9yID09PSBcIndoaXRlXCIsXG4gICAgICApO1xuICAgICAgY29uc3QgYmxhY2tQYXducyA9IGxheW91dC5waWVjZXMuZmlsdGVyKFxuICAgICAgICAocCkgPT4gcC50eXBlID09PSBcInBhd25cIiAmJiBwLmNvbG9yID09PSBcImJsYWNrXCIsXG4gICAgICApO1xuICAgICAgZXhwZWN0KHdoaXRlUGF3bnMpLnRvSGF2ZUxlbmd0aCg4KTtcbiAgICAgIGV4cGVjdChibGFja1Bhd25zKS50b0hhdmVMZW5ndGgoOCk7XG4gICAgfVxuICB9KTtcblxuICBpdChcIndyYXBzIG91dC1vZi1yYW5nZSBzZWVkcyB2aWEgbW9kdWxvXCIsICgpID0+IHtcbiAgICBjb25zdCBpblJhbmdlID0gYnVpbGRDaGVzczk2MExheW91dCg0Mik7XG4gICAgY29uc3Qgd3JhcHBlZCA9IGJ1aWxkQ2hlc3M5NjBMYXlvdXQoNDIgKyA5NjApO1xuICAgIGV4cGVjdCh3aGl0ZUJhY2tSYW5rKHdyYXBwZWQucGllY2VzKSkudG9FcXVhbChcbiAgICAgIHdoaXRlQmFja1JhbmsoaW5SYW5nZS5waWVjZXMpLFxuICAgICk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvY2hlc3Mvc3JjL2xheW91dHMvY2hlc3M5NjAudGVzdC50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/d1f50050ce9a51cb0317dd794cca990f7d93c1d1 b/7xOfJqsDU787fe61oSCq1/web/d1f50050ce9a51cb0317dd794cca990f7d93c1d1 deleted file mode 100644 index 69308e6..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/d1f50050ce9a51cb0317dd794cca990f7d93c1d1 +++ /dev/null @@ -1,107 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "SnapshotManager", { enumerable: true, configurable: true, get(){ try { return SnapshotManager } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/immer@10.2.0/node_modules/immer/dist/immer.mjs", {"importedNames":["produce","enableMapSet"]});/** - * SnapshotManager — Immer-backed working-memory snapshots at tick boundaries. - * - * A "tick" is one call to fireRules(). Every N ticks, a structurally-shared - * Immer snapshot of the current fact state is captured for use by time-travel - * / replay / rollback subsystems. - * - * Snapshots are taken only at tick boundaries (after fireRules() resolves), - * never mid-tick. - * - * Per P3.2 — uses Immer's produce() + enableMapSet() for structural sharing - * on Map>. - */ - -// Enable Map/Set support in Immer — must run before any produce() on Maps. -(0,__vite_ssr_import_0__.enableMapSet)(); -class SnapshotManager { - #snapshots = []; - #tickCount = 0; - #interval; - constructor(interval = 30) { - if (interval <= 0 || !Number.isInteger(interval)) { - throw new Error(`SnapshotManager interval must be positive integer, got ${interval}`); - }; - this.#interval = interval; - } - get snapshotCount() { - return this.#snapshots.length; - } - get tickCount() { - return this.#tickCount; - } - get interval() { - return this.#interval; - } - /** - * Call after each fireRules() completes (tick boundary). - * Takes a snapshot when the tick counter hits an interval multiple. - */ - onTick(facts, currentSeq) { - this.#tickCount++; - if (this.#tickCount % this.#interval === 0) { - this.#captureSnapshot(facts, currentSeq); - } - } - /** - * Manually take a snapshot without incrementing the tick counter. - * Useful for session-start baselines or explicit save points. - */ - takeSnapshot(facts, currentSeq) { - this.#captureSnapshot(facts, currentSeq); - } - #captureSnapshot(facts, currentSeq) { - // Build the fact map INSIDE produce() so Immer tracks every nested Map - // and deep-freezes the entire structure. allFacts() input is deterministic - // per SPEC §Iteration Order. Structural sharing across successive snapshots - // still applies for unchanged branches when the same base draft is evolved; - // here we rebuild each time but pay only for the Map allocation, not for - // copying each fact value (values are stored by reference). - const frozen = (0,__vite_ssr_import_0__.produce)(new Map(), (draft) => { - for (const f of facts) { - let attrMap = draft.get(f.id); - if (!attrMap) { - attrMap = new Map(); - draft.set(f.id, attrMap); - }; - attrMap.set(f.attr, f.value); - } - }); - this.#snapshots.push({ - seq: currentSeq, - tick: this.#tickCount, - facts: frozen, - }); - } - /** - * Return the most recent snapshot with seq <= atOrBeforeSeq, or null - * if none exists. Snapshots are appended in seq order, so we scan forward - * and track the last qualifying entry. - */ - getNearestSnapshot(atOrBeforeSeq) { - let best = null; - for (const snap of this.#snapshots) { - if (snap.seq <= atOrBeforeSeq) { - best = snap; - } - else { - // Snapshots are monotonically ordered by seq — stop scanning. - break; - } - }; - return best; - } - /** Return all snapshots in order. Primarily for tests / diagnostics. */ - getAllSnapshots() { - return this.#snapshots; - } - /** Discard all snapshots and reset the tick counter. */ - clear() { - this.#snapshots.length = 0; - this.#tickCount = 0; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQWFBLHdNQWJBOzs7Ozs7Ozs7Ozs7OztBQWlCQTtHQUNBLG1DQUFZLEVBQUU7QUFxQlIsTUFBTyxlQUFlO0lBQ2pCLFVBQVUsR0FBZSxFQUFFO0lBQ3BDLFVBQVUsR0FBRyxDQUFDO0lBQ0wsU0FBUztJQUVsQixZQUFZLFFBQVEsR0FBRyxFQUFFO1FBQ3ZCLElBQUksUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQywwREFBMEQsUUFBUSxFQUFFLENBQUM7UUFDdkY7UUFDQSxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVE7SUFDM0I7SUFFQSxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTtJQUMvQjtJQUVBLElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVU7SUFDeEI7SUFFQSxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTO0lBQ3ZCO0lBRUE7Ozs7SUFJQSxNQUFNLENBQUMsS0FBNEIsRUFBRSxVQUFrQjtRQUNyRCxJQUFJLENBQUMsVUFBVSxFQUFFO1FBQ2pCLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxLQUFLLENBQUMsRUFBRTtZQUMxQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQztRQUMxQztJQUNGO0lBRUE7Ozs7SUFJQSxZQUFZLENBQUMsS0FBNEIsRUFBRSxVQUFrQjtRQUMzRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQztJQUMxQztJQUVBLGdCQUFnQixDQUFDLEtBQTRCLEVBQUUsVUFBa0I7UUFDL0Q7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsTUFBTSxNQUFNLE1BQUcsOEJBQU8sQ0FBQyxJQUFJLEdBQUcsRUFBa0IsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzFELEtBQUssTUFBTSxDQUFDLElBQUksS0FBSyxFQUFFO2dCQUNyQixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQ1osT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFO29CQUNuQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDO2dCQUMxQjtnQkFDQSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUM5QjtRQUNGLENBQUMsQ0FBbUI7UUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDbkIsR0FBRyxFQUFFLFVBQVU7WUFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDckIsS0FBSyxFQUFFLE1BQU07U0FDZCxDQUFDO0lBQ0o7SUFFQTs7Ozs7SUFLQSxrQkFBa0IsQ0FBQyxhQUFxQjtRQUN0QyxJQUFJLElBQUksR0FBb0IsSUFBSTtRQUNoQyxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbEMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLGFBQWEsRUFBRTtnQkFDN0IsSUFBSSxHQUFHLElBQUk7WUFDYjtpQkFBTztnQkFDTDtnQkFDQTtZQUNGO1FBQ0Y7UUFDQSxPQUFPLElBQUk7SUFDYjtJQUVBO0lBQ0EsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLFVBQVU7SUFDeEI7SUFFQTtJQUNBLEtBQUs7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQztJQUNyQiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3NuYXBzaG90LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU25hcHNob3RNYW5hZ2VyIOKAlCBJbW1lci1iYWNrZWQgd29ya2luZy1tZW1vcnkgc25hcHNob3RzIGF0IHRpY2sgYm91bmRhcmllcy5cbiAqXG4gKiBBIFwidGlja1wiIGlzIG9uZSBjYWxsIHRvIGZpcmVSdWxlcygpLiBFdmVyeSBOIHRpY2tzLCBhIHN0cnVjdHVyYWxseS1zaGFyZWRcbiAqIEltbWVyIHNuYXBzaG90IG9mIHRoZSBjdXJyZW50IGZhY3Qgc3RhdGUgaXMgY2FwdHVyZWQgZm9yIHVzZSBieSB0aW1lLXRyYXZlbFxuICogLyByZXBsYXkgLyByb2xsYmFjayBzdWJzeXN0ZW1zLlxuICpcbiAqIFNuYXBzaG90cyBhcmUgdGFrZW4gb25seSBhdCB0aWNrIGJvdW5kYXJpZXMgKGFmdGVyIGZpcmVSdWxlcygpIHJlc29sdmVzKSxcbiAqIG5ldmVyIG1pZC10aWNrLlxuICpcbiAqIFBlciBQMy4yIOKAlCB1c2VzIEltbWVyJ3MgcHJvZHVjZSgpICsgZW5hYmxlTWFwU2V0KCkgZm9yIHN0cnVjdHVyYWwgc2hhcmluZ1xuICogb24gTWFwPEVudGl0eUlkLCBNYXA8QXR0cktleSwgRmFjdFZhbHVlPj4uXG4gKi9cbmltcG9ydCB7IHByb2R1Y2UsIGVuYWJsZU1hcFNldCB9IGZyb20gXCJpbW1lclwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBdHRyS2V5LCBGYWN0VmFsdWUgfSBmcm9tIFwiLi93bS5qc1wiO1xuXG4vLyBFbmFibGUgTWFwL1NldCBzdXBwb3J0IGluIEltbWVyIOKAlCBtdXN0IHJ1biBiZWZvcmUgYW55IHByb2R1Y2UoKSBvbiBNYXBzLlxuZW5hYmxlTWFwU2V0KCk7XG5cbmV4cG9ydCB0eXBlIEltbXV0YWJsZUZhY3RzID0gUmVhZG9ubHlNYXA8RW50aXR5SWQsIFJlYWRvbmx5TWFwPEF0dHJLZXksIEZhY3RWYWx1ZT4+O1xuZXhwb3J0IHR5cGUgTXV0YWJsZUZhY3RzID0gTWFwPEVudGl0eUlkLCBNYXA8QXR0cktleSwgRmFjdFZhbHVlPj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgU25hcHNob3Qge1xuICByZWFkb25seSBzZXE6IG51bWJlcjtcbiAgcmVhZG9ubHkgdGljazogbnVtYmVyO1xuICByZWFkb25seSBmYWN0czogSW1tdXRhYmxlRmFjdHM7XG59XG5cbi8qKlxuICogSW5wdXQgZmFjdCByZWNvcmQg4oCUIG1pcnJvcnMgV29ya2luZ01lbW9yeS5hbGxGYWN0cygpIG91dHB1dCBzbyBjYWxsZXJzXG4gKiBuZXZlciBuZWVkIHRvIGV4cG9zZSBpbnRlcm5hbCBNYXAgc3RhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFjdFJlY29yZCB7XG4gIHJlYWRvbmx5IGlkOiBFbnRpdHlJZDtcbiAgcmVhZG9ubHkgYXR0cjogQXR0cktleTtcbiAgcmVhZG9ubHkgdmFsdWU6IEZhY3RWYWx1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIFNuYXBzaG90TWFuYWdlciB7XG4gIHJlYWRvbmx5ICNzbmFwc2hvdHM6IFNuYXBzaG90W10gPSBbXTtcbiAgI3RpY2tDb3VudCA9IDA7XG4gIHJlYWRvbmx5ICNpbnRlcnZhbDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGludGVydmFsID0gMzApIHtcbiAgICBpZiAoaW50ZXJ2YWwgPD0gMCB8fCAhTnVtYmVyLmlzSW50ZWdlcihpbnRlcnZhbCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU25hcHNob3RNYW5hZ2VyIGludGVydmFsIG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlciwgZ290ICR7aW50ZXJ2YWx9YCk7XG4gICAgfVxuICAgIHRoaXMuI2ludGVydmFsID0gaW50ZXJ2YWw7XG4gIH1cblxuICBnZXQgc25hcHNob3RDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNzbmFwc2hvdHMubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHRpY2tDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiN0aWNrQ291bnQ7XG4gIH1cblxuICBnZXQgaW50ZXJ2YWwoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jaW50ZXJ2YWw7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCBhZnRlciBlYWNoIGZpcmVSdWxlcygpIGNvbXBsZXRlcyAodGljayBib3VuZGFyeSkuXG4gICAqIFRha2VzIGEgc25hcHNob3Qgd2hlbiB0aGUgdGljayBjb3VudGVyIGhpdHMgYW4gaW50ZXJ2YWwgbXVsdGlwbGUuXG4gICAqL1xuICBvblRpY2soZmFjdHM6IHJlYWRvbmx5IEZhY3RSZWNvcmRbXSwgY3VycmVudFNlcTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy4jdGlja0NvdW50Kys7XG4gICAgaWYgKHRoaXMuI3RpY2tDb3VudCAlIHRoaXMuI2ludGVydmFsID09PSAwKSB7XG4gICAgICB0aGlzLiNjYXB0dXJlU25hcHNob3QoZmFjdHMsIGN1cnJlbnRTZXEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYW51YWxseSB0YWtlIGEgc25hcHNob3Qgd2l0aG91dCBpbmNyZW1lbnRpbmcgdGhlIHRpY2sgY291bnRlci5cbiAgICogVXNlZnVsIGZvciBzZXNzaW9uLXN0YXJ0IGJhc2VsaW5lcyBvciBleHBsaWNpdCBzYXZlIHBvaW50cy5cbiAgICovXG4gIHRha2VTbmFwc2hvdChmYWN0czogcmVhZG9ubHkgRmFjdFJlY29yZFtdLCBjdXJyZW50U2VxOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLiNjYXB0dXJlU25hcHNob3QoZmFjdHMsIGN1cnJlbnRTZXEpO1xuICB9XG5cbiAgI2NhcHR1cmVTbmFwc2hvdChmYWN0czogcmVhZG9ubHkgRmFjdFJlY29yZFtdLCBjdXJyZW50U2VxOiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBCdWlsZCB0aGUgZmFjdCBtYXAgSU5TSURFIHByb2R1Y2UoKSBzbyBJbW1lciB0cmFja3MgZXZlcnkgbmVzdGVkIE1hcFxuICAgIC8vIGFuZCBkZWVwLWZyZWV6ZXMgdGhlIGVudGlyZSBzdHJ1Y3R1cmUuIGFsbEZhY3RzKCkgaW5wdXQgaXMgZGV0ZXJtaW5pc3RpY1xuICAgIC8vIHBlciBTUEVDIMKnSXRlcmF0aW9uIE9yZGVyLiBTdHJ1Y3R1cmFsIHNoYXJpbmcgYWNyb3NzIHN1Y2Nlc3NpdmUgc25hcHNob3RzXG4gICAgLy8gc3RpbGwgYXBwbGllcyBmb3IgdW5jaGFuZ2VkIGJyYW5jaGVzIHdoZW4gdGhlIHNhbWUgYmFzZSBkcmFmdCBpcyBldm9sdmVkO1xuICAgIC8vIGhlcmUgd2UgcmVidWlsZCBlYWNoIHRpbWUgYnV0IHBheSBvbmx5IGZvciB0aGUgTWFwIGFsbG9jYXRpb24sIG5vdCBmb3JcbiAgICAvLyBjb3B5aW5nIGVhY2ggZmFjdCB2YWx1ZSAodmFsdWVzIGFyZSBzdG9yZWQgYnkgcmVmZXJlbmNlKS5cbiAgICBjb25zdCBmcm96ZW4gPSBwcm9kdWNlKG5ldyBNYXAoKSBhcyBNdXRhYmxlRmFjdHMsIChkcmFmdCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBmIG9mIGZhY3RzKSB7XG4gICAgICAgIGxldCBhdHRyTWFwID0gZHJhZnQuZ2V0KGYuaWQpO1xuICAgICAgICBpZiAoIWF0dHJNYXApIHtcbiAgICAgICAgICBhdHRyTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICAgIGRyYWZ0LnNldChmLmlkLCBhdHRyTWFwKTtcbiAgICAgICAgfVxuICAgICAgICBhdHRyTWFwLnNldChmLmF0dHIsIGYudmFsdWUpO1xuICAgICAgfVxuICAgIH0pIGFzIEltbXV0YWJsZUZhY3RzO1xuICAgIHRoaXMuI3NuYXBzaG90cy5wdXNoKHtcbiAgICAgIHNlcTogY3VycmVudFNlcSxcbiAgICAgIHRpY2s6IHRoaXMuI3RpY2tDb3VudCxcbiAgICAgIGZhY3RzOiBmcm96ZW4sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBtb3N0IHJlY2VudCBzbmFwc2hvdCB3aXRoIHNlcSA8PSBhdE9yQmVmb3JlU2VxLCBvciBudWxsXG4gICAqIGlmIG5vbmUgZXhpc3RzLiBTbmFwc2hvdHMgYXJlIGFwcGVuZGVkIGluIHNlcSBvcmRlciwgc28gd2Ugc2NhbiBmb3J3YXJkXG4gICAqIGFuZCB0cmFjayB0aGUgbGFzdCBxdWFsaWZ5aW5nIGVudHJ5LlxuICAgKi9cbiAgZ2V0TmVhcmVzdFNuYXBzaG90KGF0T3JCZWZvcmVTZXE6IG51bWJlcik6IFNuYXBzaG90IHwgbnVsbCB7XG4gICAgbGV0IGJlc3Q6IFNuYXBzaG90IHwgbnVsbCA9IG51bGw7XG4gICAgZm9yIChjb25zdCBzbmFwIG9mIHRoaXMuI3NuYXBzaG90cykge1xuICAgICAgaWYgKHNuYXAuc2VxIDw9IGF0T3JCZWZvcmVTZXEpIHtcbiAgICAgICAgYmVzdCA9IHNuYXA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTbmFwc2hvdHMgYXJlIG1vbm90b25pY2FsbHkgb3JkZXJlZCBieSBzZXEg4oCUIHN0b3Agc2Nhbm5pbmcuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmVzdDtcbiAgfVxuXG4gIC8qKiBSZXR1cm4gYWxsIHNuYXBzaG90cyBpbiBvcmRlci4gUHJpbWFyaWx5IGZvciB0ZXN0cyAvIGRpYWdub3N0aWNzLiAqL1xuICBnZXRBbGxTbmFwc2hvdHMoKTogcmVhZG9ubHkgU25hcHNob3RbXSB7XG4gICAgcmV0dXJuIHRoaXMuI3NuYXBzaG90cztcbiAgfVxuXG4gIC8qKiBEaXNjYXJkIGFsbCBzbmFwc2hvdHMgYW5kIHJlc2V0IHRoZSB0aWNrIGNvdW50ZXIuICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuI3NuYXBzaG90cy5sZW5ndGggPSAwO1xuICAgIHRoaXMuI3RpY2tDb3VudCA9IDA7XG4gIH1cbn1cbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9yZXRlL2Rpc3Qvc25hcHNob3QuanMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/d51fa15a7d21af2c8b4eee183f295f74925b021f b/7xOfJqsDU787fe61oSCq1/web/d51fa15a7d21af2c8b4eee183f295f74925b021f deleted file mode 100644 index 332827b..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/d51fa15a7d21af2c8b4eee183f295f74925b021f +++ /dev/null @@ -1,41 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "KNIGHTMATE_LAYOUT", { enumerable: true, configurable: true, get(){ try { return KNIGHTMATE_LAYOUT } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/layouts/registry.ts", {"importedNames":["LAYOUT_REGISTRY"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["squareOf"]}); -function knightmateBackRank(color) { - const rank = color === "white" ? 0 : 7; - return [ - { type: "rook", color, square: (0,__vite_ssr_import_1__.squareOf)(0, rank) }, - { type: "king", color, square: (0,__vite_ssr_import_1__.squareOf)(1, rank) }, - { type: "bishop", color, square: (0,__vite_ssr_import_1__.squareOf)(2, rank) }, - { type: "queen", color, square: (0,__vite_ssr_import_1__.squareOf)(3, rank) }, - { type: "knight", color, square: (0,__vite_ssr_import_1__.squareOf)(4, rank) }, - { type: "bishop", color, square: (0,__vite_ssr_import_1__.squareOf)(5, rank) }, - { type: "king", color, square: (0,__vite_ssr_import_1__.squareOf)(6, rank) }, - { type: "rook", color, square: (0,__vite_ssr_import_1__.squareOf)(7, rank) } - ]; -} -function knightmatePawnRank(color) { - const rank = color === "white" ? 1 : 6; - const pieces = []; - for (let file = 0; file < 8; file++) { - pieces.push({ type: "pawn", color, square: (0,__vite_ssr_import_1__.squareOf)(file, rank) }); - }; - return pieces; -} -const KNIGHTMATE_LAYOUT = { - id: "knightmate", - name: "Knightmate", - description: "Kings and knights swap places — two non-royal kings flank a central knight on each side. Pairs with 'knightmate-rules' so the knight becomes the mating target.", - pieces: [ - ...knightmateBackRank("white"), - ...knightmatePawnRank("white"), - ...knightmateBackRank("black"), - ...knightmatePawnRank("black") - ], - suggestedPresets: ["knightmate-rules"], - source: "premade" -}; -__vite_ssr_import_0__.LAYOUT_REGISTRY.register(KNIGHTMATE_LAYOUT); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQWlCQTtBQUNBO0FBYUEsU0FBUyxtQkFBbUIsT0FBcUM7QUFDL0QsUUFBTSxPQUFPLFVBQVUsVUFBVSxJQUFJO0FBQ3JDLFNBQU87QUFBQSxJQUNMLEVBQUUsTUFBTSxRQUFRLE9BQU8sV0FBUSxnQ0FBUyxHQUFHLElBQUksRUFBRTtBQUFBLElBQ2pELEVBQUUsTUFBTSxRQUFRLE9BQU8sV0FBUSxnQ0FBUyxHQUFHLElBQUksRUFBRTtBQUFBLElBQ2pELEVBQUUsTUFBTSxVQUFVLE9BQU8sV0FBUSxnQ0FBUyxHQUFHLElBQUksRUFBRTtBQUFBLElBQ25ELEVBQUUsTUFBTSxTQUFTLE9BQU8sV0FBUSxnQ0FBUyxHQUFHLElBQUksRUFBRTtBQUFBLElBQ2xELEVBQUUsTUFBTSxVQUFVLE9BQU8sV0FBUSxnQ0FBUyxHQUFHLElBQUksRUFBRTtBQUFBLElBQ25ELEVBQUUsTUFBTSxVQUFVLE9BQU8sV0FBUSxnQ0FBUyxHQUFHLElBQUksRUFBRTtBQUFBLElBQ25ELEVBQUUsTUFBTSxRQUFRLE9BQU8sV0FBUSxnQ0FBUyxHQUFHLElBQUksRUFBRTtBQUFBLElBQ2pELEVBQUUsTUFBTSxRQUFRLE9BQU8sV0FBUSxnQ0FBUyxHQUFHLElBQUksRUFBRTtBQUFBLEVBQ25EO0FBQ0Y7QUFFQSxTQUFTLG1CQUFtQixPQUFxQztBQUMvRCxRQUFNLE9BQU8sVUFBVSxVQUFVLElBQUk7QUFDckMsUUFBTSxTQUEyQixDQUFDO0FBQ2xDLFdBQVMsT0FBTyxHQUFHLE9BQU8sR0FBRyxRQUFRO0FBQ25DLFdBQU8sS0FBSyxFQUFFLE1BQU0sUUFBUSxPQUFPLFdBQVEsZ0NBQVMsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUFBLEVBQ25FO0FBQ0EsU0FBTztBQUNUO0FBRU8sTUFBTSxvQkFBb0M7QUFBQSxFQUMvQyxJQUFJO0FBQUEsRUFDSixNQUFNO0FBQUEsRUFDTixhQUNFO0FBQUEsRUFDRixRQUFRO0FBQUEsSUFDTixHQUFHLG1CQUFtQixPQUFPO0FBQUEsSUFDN0IsR0FBRyxtQkFBbUIsT0FBTztBQUFBLElBQzdCLEdBQUcsbUJBQW1CLE9BQU87QUFBQSxJQUM3QixHQUFHLG1CQUFtQixPQUFPO0FBQUEsRUFDL0I7QUFBQSxFQUNBLGtCQUFrQixDQUFDLGtCQUFrQjtBQUFBLEVBQ3JDLFFBQVE7QUFDVjtBQVdBLHNDQUFnQixTQUFTLGlCQUFpQiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsia25pZ2h0bWF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExheW91dDogS25pZ2h0bWF0ZSAocGllY2UgcGxhY2VtZW50IG9ubHkpLlxuICpcbiAqIEJvdGggc2lkZXMgc3dhcCBraW5ncyBhbmQga25pZ2h0czpcbiAqICAgLSBLaW5ncyBsaXZlIHdoZXJlIGtuaWdodHMgdXN1YWxseSBkbyAoYjEsIGcxLCBiOCwgZzgpLlxuICogICAtIEtuaWdodHMgcmVwbGFjZSB0aGUga2luZyBvbiB0aGUgZS1maWxlIChlMSwgZTgpLlxuICpcbiAqIFJlc3Qgb2YgdGhlIHNldHVwIGlzIEZJREUuIFRoZSBjYW5vbmljYWwgS25pZ2h0bWF0ZSBydWxlIGlzXG4gKiBcImtuaWdodCBpcyB0aGUgcm95YWwgcGllY2Ug4oCUIGNoZWNrbWF0ZSB0aGUga25pZ2h0LCBub3QgdGhlIGtpbmdcIlxuICogd2hpY2ggc2hpcHMgYXMgdGhlIGBrbmlnaHRtYXRlLXJ1bGVzYCBwcmVzZXQgKHNlZSBydWxlLXZhcmlhbnRzXG4gKiBwbGFuKS4gV2l0aG91dCB0aGUgcHJlc2V0LCB0aGlzIGxheW91dCBwbGF5cyBhcyBcIndlaXJkIHBpZWNlc1xuICogb24gdGhlIGJhY2sgcmFua1wiIOKAlCB5b3UgaGF2ZSB0d28gbm9uLXJveWFsIGtpbmdzIGFuZCBvbmUga25pZ2h0XG4gKiBwZXIgc2lkZS4gTm90IHVuc2FmZSwganVzdCB1bnVzdWFsLlxuICpcbiAqIFJlZmVyZW5jZTogaHR0cHM6Ly9ncmVlbmNoZXNzLm5ldC9ydWxlcy5waHA/dj1rbmlnaHRtYXRlXG4gKi9cbmltcG9ydCB0eXBlIHsgU3RhcnRpbmdMYXlvdXQsIFBpZWNlUGxhY2VtZW50IH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IExBWU9VVF9SRUdJU1RSWSB9IGZyb20gXCIuL3JlZ2lzdHJ5LmpzXCI7XG5pbXBvcnQgeyBzcXVhcmVPZiB9IGZyb20gXCIuLi9jb29yZC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQaWVjZUNvbG9yIH0gZnJvbSBcIi4uL3NjaGVtYS5qc1wiO1xuXG4vKipcbiAqIEJ1aWxkIG9uZSBzaWRlJ3MgS25pZ2h0bWF0ZSBiYWNrIHJhbmsgKyBwYXducy5cbiAqXG4gKiBCYWNrLXJhbmsgcGllY2Ugb3JkZXIgKGZpbGVzIDAuLjcpOiBSIE4gQiBRIE4gQiBOIFIgd2l0aCB0aGVcbiAqIGNlbnRyYWwgZS1maWxlIHBpZWNlIGJlaW5nIGEgS05JR0hUIChyb3lhbCB1bmRlciB0aGUgcHJlc2V0KSBhbmRcbiAqIHRoZSBiL2cgc3F1YXJlcyBob2xkaW5nIEtJTkdTIChub24tcm95YWwpLlxuICpcbiAqIFdhaXQg4oCUIHRoYXQgcmVhZHMgYXMgdHdvIGtuaWdodHMgKyBraW5nL2tpbmcuIExldCdzIHNwZWxsIGl0XG4gKiBleHBsaWNpdGx5OiByLWtpbmctYi1xLWtuaWdodC1iLWtpbmctci5cbiAqL1xuZnVuY3Rpb24ga25pZ2h0bWF0ZUJhY2tSYW5rKGNvbG9yOiBQaWVjZUNvbG9yKTogUGllY2VQbGFjZW1lbnRbXSB7XG4gIGNvbnN0IHJhbmsgPSBjb2xvciA9PT0gXCJ3aGl0ZVwiID8gMCA6IDc7XG4gIHJldHVybiBbXG4gICAgeyB0eXBlOiBcInJvb2tcIiwgY29sb3IsIHNxdWFyZTogc3F1YXJlT2YoMCwgcmFuaykgfSxcbiAgICB7IHR5cGU6IFwia2luZ1wiLCBjb2xvciwgc3F1YXJlOiBzcXVhcmVPZigxLCByYW5rKSB9LFxuICAgIHsgdHlwZTogXCJiaXNob3BcIiwgY29sb3IsIHNxdWFyZTogc3F1YXJlT2YoMiwgcmFuaykgfSxcbiAgICB7IHR5cGU6IFwicXVlZW5cIiwgY29sb3IsIHNxdWFyZTogc3F1YXJlT2YoMywgcmFuaykgfSxcbiAgICB7IHR5cGU6IFwia25pZ2h0XCIsIGNvbG9yLCBzcXVhcmU6IHNxdWFyZU9mKDQsIHJhbmspIH0sXG4gICAgeyB0eXBlOiBcImJpc2hvcFwiLCBjb2xvciwgc3F1YXJlOiBzcXVhcmVPZig1LCByYW5rKSB9LFxuICAgIHsgdHlwZTogXCJraW5nXCIsIGNvbG9yLCBzcXVhcmU6IHNxdWFyZU9mKDYsIHJhbmspIH0sXG4gICAgeyB0eXBlOiBcInJvb2tcIiwgY29sb3IsIHNxdWFyZTogc3F1YXJlT2YoNywgcmFuaykgfSxcbiAgXTtcbn1cblxuZnVuY3Rpb24ga25pZ2h0bWF0ZVBhd25SYW5rKGNvbG9yOiBQaWVjZUNvbG9yKTogUGllY2VQbGFjZW1lbnRbXSB7XG4gIGNvbnN0IHJhbmsgPSBjb2xvciA9PT0gXCJ3aGl0ZVwiID8gMSA6IDY7XG4gIGNvbnN0IHBpZWNlczogUGllY2VQbGFjZW1lbnRbXSA9IFtdO1xuICBmb3IgKGxldCBmaWxlID0gMDsgZmlsZSA8IDg7IGZpbGUrKykge1xuICAgIHBpZWNlcy5wdXNoKHsgdHlwZTogXCJwYXduXCIsIGNvbG9yLCBzcXVhcmU6IHNxdWFyZU9mKGZpbGUsIHJhbmspIH0pO1xuICB9XG4gIHJldHVybiBwaWVjZXM7XG59XG5cbmV4cG9ydCBjb25zdCBLTklHSFRNQVRFX0xBWU9VVDogU3RhcnRpbmdMYXlvdXQgPSB7XG4gIGlkOiBcImtuaWdodG1hdGVcIixcbiAgbmFtZTogXCJLbmlnaHRtYXRlXCIsXG4gIGRlc2NyaXB0aW9uOlxuICAgIFwiS2luZ3MgYW5kIGtuaWdodHMgc3dhcCBwbGFjZXMg4oCUIHR3byBub24tcm95YWwga2luZ3MgZmxhbmsgYSBjZW50cmFsIGtuaWdodCBvbiBlYWNoIHNpZGUuIFBhaXJzIHdpdGggJ2tuaWdodG1hdGUtcnVsZXMnIHNvIHRoZSBrbmlnaHQgYmVjb21lcyB0aGUgbWF0aW5nIHRhcmdldC5cIixcbiAgcGllY2VzOiBbXG4gICAgLi4ua25pZ2h0bWF0ZUJhY2tSYW5rKFwid2hpdGVcIiksXG4gICAgLi4ua25pZ2h0bWF0ZVBhd25SYW5rKFwid2hpdGVcIiksXG4gICAgLi4ua25pZ2h0bWF0ZUJhY2tSYW5rKFwiYmxhY2tcIiksXG4gICAgLi4ua25pZ2h0bWF0ZVBhd25SYW5rKFwiYmxhY2tcIiksXG4gIF0sXG4gIHN1Z2dlc3RlZFByZXNldHM6IFtcImtuaWdodG1hdGUtcnVsZXNcIl0sXG4gIHNvdXJjZTogXCJwcmVtYWRlXCIsXG59O1xuXG4vLyBWYWxpZGF0b3IgY3VycmVudGx5IHJlcXVpcmVzIGV4YWN0bHkgMSBraW5nIHBlciBzaWRlOyBLbmlnaHRtYXRlXG4vLyBoYXMgMiBraW5ncyBwZXIgc2lkZS4gTGlrZSBIb3JkZSwgdGhpcyBsYXlvdXQgc2hpcHMgd2l0aCBhIGtub3duXG4vLyB2YWxpZGF0b3ItaW5jb21wYXRpYmlsaXR5IHRoYXQgd2UnbGwgcmVsYXggb25jZSB0aGUgdmFsaWRhdG9yXG4vLyBzdXBwb3J0cyBwZXItbGF5b3V0IGV4ZW1wdGlvbnMgb3IgdGhlIGtuaWdodG1hdGUtcnVsZXMgcHJlc2V0XG4vLyByZWZyYW1lcyBraW5ncyBhcyBub24tcm95YWwuXG4vL1xuLy8gRm9yIHRoaXMgaXRlcmF0aW9uLCByZWdpc3RyYXRpb24gZ29lcyBhaGVhZCBidXQgY3JlYXRpbmcgYSByZWFsXG4vLyBHQU1FIHdpdGggS25pZ2h0bWF0ZSBzZWxlY3RlZCB3aWxsIGZhaWwgdmFsaWRhdGlvbiBhdCB0aGUgc2VydmVyLlxuLy8gVGhlIGZpeCBsYW5kcyBpbiBQaGFzZSBDIHdpdGggc2VydmVyLXNpZGUgdmFsaWRhdG9yIGludGVncmF0aW9uLlxuTEFZT1VUX1JFR0lTVFJZLnJlZ2lzdGVyKEtOSUdIVE1BVEVfTEFZT1VUKTtcblxuLy8gUmUtZXhwb3J0IOKAlCB0aGUgbG9jYWwgYmFjay1yYW5rL3Bhd24tcmFuayBoZWxwZXJzIGFyZW4ndCBwYXJ0IG9mXG4vLyB0aGUgcHVibGljIEFQSTsgdGhleSdyZSBpbnRlcm5hbCB0byB0aGlzIG1vZHVsZS5cbiJdLCJmaWxlIjoiL3NyYy9sYXlvdXRzL2tuaWdodG1hdGUudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/d6a5a867d412f144c6facd61d10de26817b378da b/7xOfJqsDU787fe61oSCq1/web/d6a5a867d412f144c6facd61d10de26817b378da deleted file mode 100644 index b24a9df..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/d6a5a867d412f144c6facd61d10de26817b378da +++ /dev/null @@ -1,28 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "GAME_ENTITY", { enumerable: true, configurable: true, get(){ try { return GAME_ENTITY } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "PRESET_STATE_ENTITY", { enumerable: true, configurable: true, get(){ try { return PRESET_STATE_ENTITY } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "CaptureFlag", { enumerable: true, configurable: true, get(){ try { return CaptureFlag } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "chessFact", { enumerable: true, configurable: true, get(){ try { return chessFact } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "oppositeColor", { enumerable: true, configurable: true, get(){ try { return oppositeColor } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "PROMOTION_PIECES", { enumerable: true, configurable: true, get(){ try { return PROMOTION_PIECES } catch {} }}); -const GAME_ENTITY = 0; -const PRESET_STATE_ENTITY = -1; -const CaptureFlag = { - CAN_CAPTURE_OWN: 1, - CANNOT_BE_CAPTURED: 2, - EN_PASSANT: 4 -}; -function chessFact(id, attr, value) { - return { id, attr, value }; -}; -function oppositeColor(color) { - return color === "white" ? "black" : "white"; -}; -const PROMOTION_PIECES = [ - "queen", - "rook", - "bishop", - "knight" -]; - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBaUJPLE1BQU0sY0FBd0I7QUFZOUIsTUFBTSxzQkFBZ0M7QUFrQ3RDLE1BQU0sY0FBYztBQUFBLEVBQ3pCLGlCQUFpQjtBQUFBLEVBQ2pCLG9CQUFvQjtBQUFBLEVBQ3BCLFlBQVk7QUFDZDtBQVdPLFNBQVMsVUFDZCxJQUNBLE1BQ0EsT0FDYztBQUNkLFNBQU8sRUFBRSxJQUFJLE1BQU0sTUFBTTtBQUMzQjtBQUdPLFNBQVMsY0FBYyxPQUErQjtBQUMzRCxTQUFPLFVBQVUsVUFBVSxVQUFVO0FBQ3ZDO0FBR08sTUFBTSxtQkFBNkM7QUFBQSxFQUN4RDtBQUFBLEVBQVM7QUFBQSxFQUFRO0FBQUEsRUFBVTtBQUM3QiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsic2NoZW1hLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2hlc3MgYXR0cmlidXRlIHNjaGVtYSBmb3IgQHBhcmF0eXBlL2NoZXNzLlxuICogQWxsIEVBViBhdHRyaWJ1dGUgdHlwZXMgZm9yIHRoZSBjaGVzcyBnYW1lLlxuICogU3F1YXJlczogMC4uNjMgd2hlcmUgc3F1YXJlID0gcmFuayAqIDggKyBmaWxlXG4gKiAgIGZpbGU6IDA9YSwgMT1iLCAuLi4sIDc9aFxuICogICByYW5rOiAwPXJhbmsxLCAxPXJhbmsyLCAuLi4sIDc9cmFuazhcbiAqICAgZS5nLiBhMT0wLCBoMT03LCBhOD01NiwgaDg9NjMsIGU0PTI4XG4gKi9cbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcblxuZXhwb3J0IHR5cGUgUGllY2VUeXBlID0gXCJwYXduXCIgfCBcImtuaWdodFwiIHwgXCJiaXNob3BcIiB8IFwicm9va1wiIHwgXCJxdWVlblwiIHwgXCJraW5nXCI7XG5leHBvcnQgdHlwZSBQaWVjZUNvbG9yID0gXCJ3aGl0ZVwiIHwgXCJibGFja1wiO1xuZXhwb3J0IHR5cGUgU3F1YXJlID0gbnVtYmVyOyAvLyAwLi42M1xuZXhwb3J0IHR5cGUgR2FtZVN0YXR1cyA9IFwiYWN0aXZlXCIgfCBcImNoZWNrbWF0ZVwiIHwgXCJzdGFsZW1hdGVcIiB8IFwiZHJhd1wiO1xuZXhwb3J0IHR5cGUgR2FtZVJlc3VsdCA9IFBpZWNlQ29sb3IgfCBcImRyYXdcIjtcblxuLyoqIEVudGl0eUlkIHJlc2VydmVkIGZvciBnYW1lLWxldmVsIGZhY3RzIChUdXJuLCBIYWxmbW92ZUNsb2NrLCBldGMuKS4gKi9cbmV4cG9ydCBjb25zdCBHQU1FX0VOVElUWTogRW50aXR5SWQgPSAwIGFzIEVudGl0eUlkO1xuXG4vKipcbiAqIFJlc2VydmVkIEVudGl0eUlkIGZvciBwcmVzZXQtc3RhdGUgZmFjdHMuIEVhY2ggYWN0aXZlIHByZXNldCBjYW5cbiAqIHN0YXNoIHR5cGVkLCBwZXItZ2FtZSBzdGF0ZSBvbiB0aGlzIGVudGl0eSB2aWFcbiAqIGBDaGVzc0VuZ2luZS5wcmVzZXRTdGF0ZShwcmVzZXRJZClgIOKAlCBhdHRyaWJ1dGVzIGFyZSBuYW1lc3BhY2VkIGJ5XG4gKiBwcmVzZXQgaWQgdG8gcHJldmVudCBjb2xsaXNpb25zLlxuICpcbiAqIFVzaW5nIGEgbmVnYXRpdmUgaWQga2VlcHMgcHJlc2V0LXN0YXRlIGZhY3RzIG91dCBvZiB0aGUgXCJpZCA+IDAgaXNcbiAqIGEgcGllY2VcIiBjb252ZW50aW9uIHVzZWQgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UuIFNlc3Npb24ubmV4dElkKClcbiAqIHN0YXJ0cyBhdCAxLCBzbyAtMSBjYW4gbmV2ZXIgY29sbGlkZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFBSRVNFVF9TVEFURV9FTlRJVFk6IEVudGl0eUlkID0gLTEgYXMgRW50aXR5SWQ7XG5cbi8qKlxuICogTWFwcyBhdHRyaWJ1dGUgbmFtZSB0byBpdHMgVHlwZVNjcmlwdCB0eXBlLlxuICogVXNlZCBmb3IgdHlwZWQgZmFjdCBjb25zdHJ1Y3Rpb24gYW5kIFdNIHF1ZXJpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlc3NBdHRyTWFwIHtcbiAgLy8gUGllY2UgYXR0cmlidXRlc1xuICBQaWVjZVR5cGU6IFBpZWNlVHlwZTtcbiAgQ29sb3I6IFBpZWNlQ29sb3I7XG4gIFBvc2l0aW9uOiBTcXVhcmU7XG4gIEhhc01vdmVkOiBib29sZWFuO1xuICAvLyBHYW1lLWxldmVsIGF0dHJpYnV0ZXNcbiAgVHVybjogUGllY2VDb2xvcjtcbiAgSGFsZm1vdmVDbG9jazogbnVtYmVyO1xuICBGdWxsbW92ZU51bWJlcjogbnVtYmVyO1xuICBFblBhc3NhbnRUYXJnZXQ6IFNxdWFyZSB8IG51bGw7XG4gIEdhbWVTdGF0dXM6IEdhbWVTdGF0dXM7XG4gIFdpbm5lcjogR2FtZVJlc3VsdCB8IG51bGw7XG4gIC8vIEN1c3RvbSBydWxlIGF0dHJpYnV0ZXMgKGZyb20gUlVMRVMubWQgcHJlc2V0cylcbiAgSHA6IG51bWJlcjtcbiAgUG9pc29uZWRTcXVhcmU6IGJvb2xlYW47XG4gIC8vIE1vZGlmaWVyIHByb2ZpbGUgYXR0cmlidXRlc1xuICBIcEJvbnVzOiBudW1iZXI7XG4gIFJhbmdlQm9udXM6IG51bWJlcjtcbiAgRGlyZWN0aW9uQWRkaXRpb25zOiByZWFkb25seSBzdHJpbmdbXTtcbiAgQ2FwdHVyZUZsYWdzOiBudW1iZXI7XG4gIFByb21vdGlvbk92ZXJyaWRlOiBQaWVjZVR5cGUgfCBcImRpc2FibGVkXCI7XG4gIERhbWFnZVJlc2lzdGFuY2U6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgQ2hlc3NBdHRyS2V5ID0ga2V5b2YgQ2hlc3NBdHRyTWFwO1xuXG4vKiogQ2FwdHVyZSBiZWhhdmlvciBiaXRmbGFncyBmb3IgdGhlIENhcHR1cmVGbGFncyBtb2RpZmllciBhdHRyaWJ1dGUuICovXG5leHBvcnQgY29uc3QgQ2FwdHVyZUZsYWcgPSB7XG4gIENBTl9DQVBUVVJFX09XTjogMSxcbiAgQ0FOTk9UX0JFX0NBUFRVUkVEOiAyLFxuICBFTl9QQVNTQU5UOiA0LFxufSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIENhcHR1cmVGbGFnID0gdHlwZW9mIENhcHR1cmVGbGFnW2tleW9mIHR5cGVvZiBDYXB0dXJlRmxhZ107XG5cbi8qKiBBIHR5cGVkIGNoZXNzIGZhY3QgdHJpcGxlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGVzc0ZhY3Q8SyBleHRlbmRzIENoZXNzQXR0cktleSA9IENoZXNzQXR0cktleT4ge1xuICByZWFkb25seSBpZDogRW50aXR5SWQ7XG4gIHJlYWRvbmx5IGF0dHI6IEs7XG4gIHJlYWRvbmx5IHZhbHVlOiBDaGVzc0F0dHJNYXBbS107XG59XG5cbi8qKiBDb25zdHJ1Y3QgYSB0eXBlZCBjaGVzcyBmYWN0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZXNzRmFjdDxLIGV4dGVuZHMgQ2hlc3NBdHRyS2V5PihcbiAgaWQ6IEVudGl0eUlkLFxuICBhdHRyOiBLLFxuICB2YWx1ZTogQ2hlc3NBdHRyTWFwW0tdLFxuKTogQ2hlc3NGYWN0PEs+IHtcbiAgcmV0dXJuIHsgaWQsIGF0dHIsIHZhbHVlIH07XG59XG5cbi8qKiBSZXR1cm4gdGhlIG9wcG9zaXRlIGNvbG9yLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wcG9zaXRlQ29sb3IoY29sb3I6IFBpZWNlQ29sb3IpOiBQaWVjZUNvbG9yIHtcbiAgcmV0dXJuIGNvbG9yID09PSBcIndoaXRlXCIgPyBcImJsYWNrXCIgOiBcIndoaXRlXCI7XG59XG5cbi8qKiBWYWxpZCBwcm9tb3Rpb24gcGllY2UgdHlwZXMgKGV4Y2x1ZGVzIHBhd24gYW5kIGtpbmcpLiAqL1xuZXhwb3J0IGNvbnN0IFBST01PVElPTl9QSUVDRVM6IFJlYWRvbmx5QXJyYXk8UGllY2VUeXBlPiA9IFtcbiAgXCJxdWVlblwiLCBcInJvb2tcIiwgXCJiaXNob3BcIiwgXCJrbmlnaHRcIixcbl07XG4iXSwiZmlsZSI6Ii9zcmMvc2NoZW1hLnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/d764771e3b4a1c5b152bc3e695590281516c06ee b/7xOfJqsDU787fe61oSCq1/web/d764771e3b4a1c5b152bc3e695590281516c06ee deleted file mode 100644 index 4154877..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/d764771e3b4a1c5b152bc3e695590281516c06ee +++ /dev/null @@ -1,49 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "MODIFIER_REGISTRY", { enumerable: true, configurable: true, get(){ try { return MODIFIER_REGISTRY } catch {} }}); -class ModifierRegistryClass { - #byId = /* @__PURE__ */ new Map(); - /** - * Register a descriptor under its `id`. Throws if the id is already - * taken — defensive check because silently overwriting would create - * confusing debugging ("which of my two hp-bonus descriptors won?" - * races on module import order). - * - * Generic over V so descriptors with concrete value types - * (e.g. `ModifierDescriptor`) can be passed without a - * type assertion at the call site. The registry stores them as - * `ModifierDescriptor` — a heterogeneous container that - * loses V intentionally; callers that need the typed value should - * import the descriptor directly from its own module. - */ - register(descriptor) { - if (this.#byId.has(descriptor.id)) { - throw new Error( - `ModifierRegistry: duplicate modifier id "${descriptor.id}". Each modifier descriptor must have a unique id.` - ); - }; - this.#byId.set(descriptor.id, descriptor); - } - /** - * Look up a descriptor by id. Returns undefined for unknown ids — - * the caller decides whether that's an error (validator rejecting a - * profile referencing an unknown modifier kind) or a benign miss. - */ - get(id) { - return this.#byId.get(id); - } - /** - * All registered descriptors, in registration (= import) order. UI - * code iterating descriptors to render form rows relies on this - * being a stable order. - */ - list() { - return [...this.#byId.values()]; - } - /** True if a descriptor with the given id is registered. */ - has(id) { - return this.#byId.has(id); - } -} -const MODIFIER_REGISTRY = new ModifierRegistryClass(); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQXNCQSxNQUFNLHNCQUFzQjtBQUFBLEVBQ2pCLFFBQVEsb0JBQUksSUFBd0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBZTdELFNBQVksWUFBeUM7QUFDbkQsUUFBSSxLQUFLLE1BQU0sSUFBSSxXQUFXLEVBQUUsR0FBRztBQUNqQyxZQUFNLElBQUk7QUFBQSxRQUNSLDRDQUE0QyxXQUFXLEVBQUU7QUFBQSxNQUUzRDtBQUFBLElBQ0Y7QUFJQSxTQUFLLE1BQU0sSUFBSSxXQUFXLElBQUksVUFBMkM7QUFBQSxFQUMzRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQUksSUFBb0Q7QUFDdEQsV0FBTyxLQUFLLE1BQU0sSUFBSSxFQUFFO0FBQUEsRUFDMUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxPQUFzQztBQUNwQyxXQUFPLENBQUMsR0FBRyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQUEsRUFDaEM7QUFBQTtBQUFBLEVBR0EsSUFBSSxJQUE2QjtBQUMvQixXQUFPLEtBQUssTUFBTSxJQUFJLEVBQUU7QUFBQSxFQUMxQjtBQUNGO0FBRU8sTUFBTSxvQkFBb0IsSUFBSSxzQkFBc0IiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInJlZ2lzdHJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kaWZpZXIgZGVzY3JpcHRvciByZWdpc3RyeS5cbiAqXG4gKiBNaXJyb3JzIGBMQVlPVVRfUkVHSVNUUllgOiB0aGUgc2l4IFQxIG1vZGlmaWVyIGNhdGVnb3JpZXMgcmVnaXN0ZXJcbiAqIHRoZW1zZWx2ZXMgdmlhIHNpZGUtZWZmZWN0IGltcG9ydHMgZnJvbSB0aGVpciBvd24gbW9kdWxlIGZpbGVzLCBhbmRcbiAqIGAuL2luZGV4LnRzYCBpcyB0aGUgYmFycmVsIHRoYXQgaW1wb3J0cyBldmVyeSBkZXNjcmlwdG9yIHNvIHRoYXRcbiAqIGNvbnN1bWVycyBnZXQgdGhlbSBhbGwgcmVnaXN0ZXJlZCBieSBpbXBvcnRpbmcgYW55d2hlcmUgZnJvbVxuICogYC4vbW9kaWZpZXJzYC5cbiAqXG4gKiBEdXBsaWNhdGUtaWQgcmVnaXN0cmF0aW9uIHRocm93cyDigJQgdGhpcyBpcyB0aGUgc2lnbmFsIHRoYXQgdHdvXG4gKiBtb2R1bGVzIGFyZSB0cnlpbmcgdG8gY2xhaW0gdGhlIHNhbWUgYE1vZGlmaWVyS2luZElkYCwgd2hpY2ggd291bGRcbiAqIHNpbGVudGx5IG92ZXJ3cml0ZSBpbiBhIE1hcC4gVGhyb3dpbmcgc3VyZmFjZXMgdGhlIGNvbGxpc2lvbiBhdCBsb2FkXG4gKiB0aW1lIHJhdGhlciB0aGFuIGF0IHJ1bnRpbWUgd2hlbiBhIG1vZGlmaWVyIHdvdWxkIG15c3RlcmlvdXNseVxuICogXCJkaXNhcHBlYXJcIiBiZWNhdXNlIGEgbGF0ZXIgaW1wb3J0IGNsb2JiZXJlZCB0aGUgZWFybGllciBkZXNjcmlwdG9yLlxuICpcbiAqIERlc2NyaXB0b3JzIGFyZSByZWFkLW9ubHkgb25jZSByZWdpc3RlcmVkOyB0aGUgcmVnaXN0cnkgZXhwb3NlcyBub1xuICogbXV0YXRpb24gcGF0aHMuIFRoZSBzZXQgb2YgbW9kaWZpZXIga2luZHMgaXMgZml4ZWQgYXQgbW9kdWxlLWxvYWRcbiAqIHRpbWUgKEFEUi04KSDigJQgdGhlcmUncyBubyBydW50aW1lIHJlZ2lzdHJhdGlvbiBvZiBuZXcgbW9kaWZpZXJcbiAqIGNhdGVnb3JpZXMgZnJvbSB1c2VybGFuZC5cbiAqL1xuaW1wb3J0IHR5cGUgeyBNb2RpZmllckRlc2NyaXB0b3IsIE1vZGlmaWVyS2luZElkIH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcblxuY2xhc3MgTW9kaWZpZXJSZWdpc3RyeUNsYXNzIHtcbiAgcmVhZG9ubHkgI2J5SWQgPSBuZXcgTWFwPE1vZGlmaWVyS2luZElkLCBNb2RpZmllckRlc2NyaXB0b3I+KCk7XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgZGVzY3JpcHRvciB1bmRlciBpdHMgYGlkYC4gVGhyb3dzIGlmIHRoZSBpZCBpcyBhbHJlYWR5XG4gICAqIHRha2VuIOKAlCBkZWZlbnNpdmUgY2hlY2sgYmVjYXVzZSBzaWxlbnRseSBvdmVyd3JpdGluZyB3b3VsZCBjcmVhdGVcbiAgICogY29uZnVzaW5nIGRlYnVnZ2luZyAoXCJ3aGljaCBvZiBteSB0d28gaHAtYm9udXMgZGVzY3JpcHRvcnMgd29uP1wiXG4gICAqIHJhY2VzIG9uIG1vZHVsZSBpbXBvcnQgb3JkZXIpLlxuICAgKlxuICAgKiBHZW5lcmljIG92ZXIgViBzbyBkZXNjcmlwdG9ycyB3aXRoIGNvbmNyZXRlIHZhbHVlIHR5cGVzXG4gICAqIChlLmcuIGBNb2RpZmllckRlc2NyaXB0b3I8bnVtYmVyPmApIGNhbiBiZSBwYXNzZWQgd2l0aG91dCBhXG4gICAqIHR5cGUgYXNzZXJ0aW9uIGF0IHRoZSBjYWxsIHNpdGUuIFRoZSByZWdpc3RyeSBzdG9yZXMgdGhlbSBhc1xuICAgKiBgTW9kaWZpZXJEZXNjcmlwdG9yPHVua25vd24+YCDigJQgYSBoZXRlcm9nZW5lb3VzIGNvbnRhaW5lciB0aGF0XG4gICAqIGxvc2VzIFYgaW50ZW50aW9uYWxseTsgY2FsbGVycyB0aGF0IG5lZWQgdGhlIHR5cGVkIHZhbHVlIHNob3VsZFxuICAgKiBpbXBvcnQgdGhlIGRlc2NyaXB0b3IgZGlyZWN0bHkgZnJvbSBpdHMgb3duIG1vZHVsZS5cbiAgICovXG4gIHJlZ2lzdGVyPFY+KGRlc2NyaXB0b3I6IE1vZGlmaWVyRGVzY3JpcHRvcjxWPik6IHZvaWQge1xuICAgIGlmICh0aGlzLiNieUlkLmhhcyhkZXNjcmlwdG9yLmlkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTW9kaWZpZXJSZWdpc3RyeTogZHVwbGljYXRlIG1vZGlmaWVyIGlkIFwiJHtkZXNjcmlwdG9yLmlkfVwiLiBgICtcbiAgICAgICAgICBgRWFjaCBtb2RpZmllciBkZXNjcmlwdG9yIG11c3QgaGF2ZSBhIHVuaXF1ZSBpZC5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgLy8gV2lkZW4gdG8gdGhlIGludGVybmFsIHVua25vd24tdHlwZWQgcmVwcmVzZW50YXRpb24uIFRoZSBkb3VibGUtY2FzdFxuICAgIC8vIHRocm91Z2ggYHVua25vd25gIGlzIGludGVudGlvbmFsOiB0aGUgcmVnaXN0cnkgaXMgYSBoZXRlcm9nZW5lb3VzXG4gICAgLy8gc3RvcmUgYW5kIFYgaXMgaW50ZW50aW9uYWxseSBlcmFzZWQgYXQgc3RvcmFnZSB0aW1lLlxuICAgIHRoaXMuI2J5SWQuc2V0KGRlc2NyaXB0b3IuaWQsIGRlc2NyaXB0b3IgYXMgdW5rbm93biBhcyBNb2RpZmllckRlc2NyaXB0b3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvb2sgdXAgYSBkZXNjcmlwdG9yIGJ5IGlkLiBSZXR1cm5zIHVuZGVmaW5lZCBmb3IgdW5rbm93biBpZHMg4oCUXG4gICAqIHRoZSBjYWxsZXIgZGVjaWRlcyB3aGV0aGVyIHRoYXQncyBhbiBlcnJvciAodmFsaWRhdG9yIHJlamVjdGluZyBhXG4gICAqIHByb2ZpbGUgcmVmZXJlbmNpbmcgYW4gdW5rbm93biBtb2RpZmllciBraW5kKSBvciBhIGJlbmlnbiBtaXNzLlxuICAgKi9cbiAgZ2V0KGlkOiBNb2RpZmllcktpbmRJZCk6IE1vZGlmaWVyRGVzY3JpcHRvciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI2J5SWQuZ2V0KGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGwgcmVnaXN0ZXJlZCBkZXNjcmlwdG9ycywgaW4gcmVnaXN0cmF0aW9uICg9IGltcG9ydCkgb3JkZXIuIFVJXG4gICAqIGNvZGUgaXRlcmF0aW5nIGRlc2NyaXB0b3JzIHRvIHJlbmRlciBmb3JtIHJvd3MgcmVsaWVzIG9uIHRoaXNcbiAgICogYmVpbmcgYSBzdGFibGUgb3JkZXIuXG4gICAqL1xuICBsaXN0KCk6IHJlYWRvbmx5IE1vZGlmaWVyRGVzY3JpcHRvcltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuI2J5SWQudmFsdWVzKCldO1xuICB9XG5cbiAgLyoqIFRydWUgaWYgYSBkZXNjcmlwdG9yIHdpdGggdGhlIGdpdmVuIGlkIGlzIHJlZ2lzdGVyZWQuICovXG4gIGhhcyhpZDogTW9kaWZpZXJLaW5kSWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jYnlJZC5oYXMoaWQpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBNT0RJRklFUl9SRUdJU1RSWSA9IG5ldyBNb2RpZmllclJlZ2lzdHJ5Q2xhc3MoKTtcbiJdLCJmaWxlIjoiL3NyYy9tb2RpZmllcnMvcmVnaXN0cnkudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/d7de857bbe1c4da21f3dc6d028fc7bf45ef42308 b/7xOfJqsDU787fe61oSCq1/web/d7de857bbe1c4da21f3dc6d028fc7bf45ef42308 deleted file mode 100644 index b1141d9..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/d7de857bbe1c4da21f3dc6d028fc7bf45ef42308 +++ /dev/null @@ -1,24 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "RANGE_BONUS_DESCRIPTOR", { enumerable: true, configurable: true, get(){ try { return RANGE_BONUS_DESCRIPTOR } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/zod@4.3.6/node_modules/zod/index.js", {"importedNames":["z"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/modifiers/registry.ts", {"importedNames":["MODIFIER_REGISTRY"]}); -const RANGE_MAX = 7; -const schema = __vite_ssr_import_0__.z.number().int().min(-7).max(7); -const RANGE_BONUS_DESCRIPTOR = { - id: "range-bonus", - attrName: "RangeBonus", - label: "Range Bonus", - valueSchema: schema, - stackingRule: "additive", - uiForm: "number", - apply(session, pieceId, effectiveValue) { - const clamped = Math.max(0, Math.min(RANGE_MAX, effectiveValue)); - session.insert(pieceId, "RangeBonus", clamped); - }, - describe(value) { - return `Range ${value >= 0 ? "+" : ""}${value}`; - } -}; -__vite_ssr_import_1__.MODIFIER_REGISTRY.register(RANGE_BONUS_DESCRIPTOR); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFHQSxNQUFNLFlBQVk7QUFDbEIsTUFBTSxTQUFTLHdCQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDO0FBR3RDLE1BQU0seUJBQW9EO0FBQUEsRUFDL0QsSUFBSTtBQUFBLEVBQ0osVUFBVTtBQUFBLEVBQ1YsT0FBTztBQUFBLEVBQ1AsYUFBYTtBQUFBLEVBQ2IsY0FBYztBQUFBLEVBQ2QsUUFBUTtBQUFBLEVBQ1IsTUFBTSxTQUFTLFNBQVMsZ0JBQWdCO0FBQ3RDLFVBQU0sVUFBVSxLQUFLLElBQUksR0FBRyxLQUFLLElBQUksV0FBVyxjQUFjLENBQUM7QUFDL0QsWUFBUSxPQUFPLFNBQVMsY0FBYyxPQUFPO0FBQUEsRUFDL0M7QUFBQSxFQUNBLFNBQVMsT0FBTztBQUNkLFdBQU8sU0FBUyxTQUFTLElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSztBQUFBLEVBQy9DO0FBQ0Y7QUFFQSx3Q0FBa0IsU0FBUyxzQkFBc0IiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInJhbmdlLWJvbnVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBNT0RJRklFUl9SRUdJU1RSWSB9IGZyb20gXCIuLi9yZWdpc3RyeS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBNb2RpZmllckRlc2NyaXB0b3IgfSBmcm9tIFwiLi4vdHlwZXMuanNcIjtcblxuY29uc3QgUkFOR0VfTUFYID0gNztcbmNvbnN0IHNjaGVtYSA9IHoubnVtYmVyKCkuaW50KCkubWluKC03KS5tYXgoNyk7XG50eXBlIFZhbHVlID0gei5pbmZlcjx0eXBlb2Ygc2NoZW1hPjtcblxuZXhwb3J0IGNvbnN0IFJBTkdFX0JPTlVTX0RFU0NSSVBUT1I6IE1vZGlmaWVyRGVzY3JpcHRvcjxWYWx1ZT4gPSB7XG4gIGlkOiBcInJhbmdlLWJvbnVzXCIsXG4gIGF0dHJOYW1lOiBcIlJhbmdlQm9udXNcIixcbiAgbGFiZWw6IFwiUmFuZ2UgQm9udXNcIixcbiAgdmFsdWVTY2hlbWE6IHNjaGVtYSxcbiAgc3RhY2tpbmdSdWxlOiBcImFkZGl0aXZlXCIsXG4gIHVpRm9ybTogXCJudW1iZXJcIixcbiAgYXBwbHkoc2Vzc2lvbiwgcGllY2VJZCwgZWZmZWN0aXZlVmFsdWUpIHtcbiAgICBjb25zdCBjbGFtcGVkID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oUkFOR0VfTUFYLCBlZmZlY3RpdmVWYWx1ZSkpO1xuICAgIHNlc3Npb24uaW5zZXJ0KHBpZWNlSWQsIFwiUmFuZ2VCb251c1wiLCBjbGFtcGVkKTtcbiAgfSxcbiAgZGVzY3JpYmUodmFsdWUpIHtcbiAgICByZXR1cm4gYFJhbmdlICR7dmFsdWUgPj0gMCA/IFwiK1wiIDogXCJcIn0ke3ZhbHVlfWA7XG4gIH0sXG59O1xuXG5NT0RJRklFUl9SRUdJU1RSWS5yZWdpc3RlcihSQU5HRV9CT05VU19ERVNDUklQVE9SKTtcbiJdLCJmaWxlIjoiL3NyYy9tb2RpZmllcnMvZGVzY3JpcHRvcnMvcmFuZ2UtYm9udXMudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/d9bc0bba74945e5398e70976b2454f20bd6f0529 b/7xOfJqsDU787fe61oSCq1/web/d9bc0bba74945e5398e70976b2454f20bd6f0529 deleted file mode 100644 index e2ba0a0..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/d9bc0bba74945e5398e70976b2454f20bd6f0529 +++ /dev/null @@ -1,202 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/rules/castling.ts", {"importedNames":["getCastlingMoves","applyCastlingMove"]}); -const mkId = (n) => n; -function insertPiece(session, id, type, color, square, hasMoved = false) { - const eid = mkId(id); - session.insert(eid, "PieceType", type); - session.insert(eid, "Color", color); - session.insert(eid, "Position", square); - session.insert(eid, "HasMoved", hasMoved); - return eid; -} -function setupCastlingPosition(color) { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const backRank = color === "white" ? 0 : 56; - const kingId = insertPiece(session, 1, "king", color, backRank + 4); - const kingsideRook = insertPiece(session, 2, "rook", color, backRank + 7); - const queensideRook = insertPiece(session, 3, "rook", color, backRank + 0); - return { session, kingId, kingsideRook, queensideRook }; -} -(0,__vite_ssr_import_0__.describe)("getCastlingMoves - white", () => { - (0,__vite_ssr_import_0__.it)("both castling moves available when path is clear", () => { - const { session, kingId } = setupCastlingPosition("white"); - const moves = (0,__vite_ssr_import_2__.getCastlingMoves)(session, kingId); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(2); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.side === "kingside")).toBe(true); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.side === "queenside")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("kingside target is g1 (6); queenside target is c1 (2)", () => { - const { session, kingId } = setupCastlingPosition("white"); - const moves = (0,__vite_ssr_import_2__.getCastlingMoves)(session, kingId); - const ks = moves.find((m) => m.side === "kingside"); - const qs = moves.find((m) => m.side === "queenside"); - (0,__vite_ssr_import_0__.expect)(ks?.to).toBe(6); - (0,__vite_ssr_import_0__.expect)(ks?.rookFrom).toBe(7); - (0,__vite_ssr_import_0__.expect)(ks?.rookTo).toBe(5); - (0,__vite_ssr_import_0__.expect)(qs?.to).toBe(2); - (0,__vite_ssr_import_0__.expect)(qs?.rookFrom).toBe(0); - (0,__vite_ssr_import_0__.expect)(qs?.rookTo).toBe(3); - }); - (0,__vite_ssr_import_0__.it)("kingside castling only when queenside path blocked by piece on b1", () => { - const { session, kingId } = setupCastlingPosition("white"); - insertPiece(session, 10, "knight", "white", 1); - const moves = (0,__vite_ssr_import_2__.getCastlingMoves)(session, kingId); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(moves[0]?.side).toBe("kingside"); - }); - (0,__vite_ssr_import_0__.it)("queenside castling only when kingside path blocked by piece on f1", () => { - const { session, kingId } = setupCastlingPosition("white"); - insertPiece(session, 10, "bishop", "white", 5); - const moves = (0,__vite_ssr_import_2__.getCastlingMoves)(session, kingId); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(moves[0]?.side).toBe("queenside"); - }); - (0,__vite_ssr_import_0__.it)("enemy piece between king and rook also blocks castling", () => { - const { session, kingId } = setupCastlingPosition("white"); - insertPiece(session, 10, "knight", "black", 6); - const moves = (0,__vite_ssr_import_2__.getCastlingMoves)(session, kingId); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.side === "kingside")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("no castling after king has moved", () => { - const { session, kingId } = setupCastlingPosition("white"); - session.insert(kingId, "HasMoved", true); - const moves = (0,__vite_ssr_import_2__.getCastlingMoves)(session, kingId); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("no kingside castling when kingside rook has moved (but queenside still ok)", () => { - const { session, kingId, kingsideRook } = setupCastlingPosition("white"); - session.insert(kingsideRook, "HasMoved", true); - const moves = (0,__vite_ssr_import_2__.getCastlingMoves)(session, kingId); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.side === "kingside")).toBe(false); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.side === "queenside")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("no castling when no rook present on rook-home square", () => { - const { session, kingId, kingsideRook } = setupCastlingPosition("white"); - session.retract(kingsideRook, "Position"); - const moves = (0,__vite_ssr_import_2__.getCastlingMoves)(session, kingId); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.side === "kingside")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("rejects castling when king is currently in check", () => { - const { session, kingId } = setupCastlingPosition("white"); - const isAttacked = (_s, sq) => sq === 4; - const moves = (0,__vite_ssr_import_2__.getCastlingMoves)(session, kingId, isAttacked); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("rejects castling through check (king passes attacked square)", () => { - const { session, kingId } = setupCastlingPosition("white"); - const isAttacked = (_s, sq) => sq === 5; - const moves = (0,__vite_ssr_import_2__.getCastlingMoves)(session, kingId, isAttacked); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.side === "kingside")).toBe(false); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.side === "queenside")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("rejects castling into check (destination attacked)", () => { - const { session, kingId } = setupCastlingPosition("white"); - const isAttacked = (_s, sq) => sq === 6; - const moves = (0,__vite_ssr_import_2__.getCastlingMoves)(session, kingId, isAttacked); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.side === "kingside")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("b1 being attacked does NOT prevent queenside castling (king doesn't cross b1)", () => { - const { session, kingId } = setupCastlingPosition("white"); - const isAttacked = (_s, sq) => sq === 1; - const moves = (0,__vite_ssr_import_2__.getCastlingMoves)(session, kingId, isAttacked); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.side === "queenside")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("attacker color passed to callback is the opposing color", () => { - const { session, kingId } = setupCastlingPosition("white"); - const seenColors = []; - const spy = (_s, _sq, byColor) => { - seenColors.push(byColor); - return false; - }; - (0,__vite_ssr_import_2__.getCastlingMoves)(session, kingId, spy); - (0,__vite_ssr_import_0__.expect)(seenColors.every((c) => c === "black")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("non-rook piece on rook home square blocks that side", () => { - const { session, kingId, kingsideRook } = setupCastlingPosition("white"); - session.insert(kingsideRook, "PieceType", "queen"); - const moves = (0,__vite_ssr_import_2__.getCastlingMoves)(session, kingId); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.side === "kingside")).toBe(false); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.side === "queenside")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("returns empty list when pieceId has no Position/Color", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.getCastlingMoves)(session, mkId(999))).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("king not on home square yields no castling moves", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - insertPiece(session, 1, "king", "white", 12); - insertPiece(session, 2, "rook", "white", 7); - insertPiece(session, 3, "rook", "white", 0); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.getCastlingMoves)(session, mkId(1))).toHaveLength(0); - }); -}); -(0,__vite_ssr_import_0__.describe)("getCastlingMoves - black", () => { - (0,__vite_ssr_import_0__.it)("both black castling moves available when path clear", () => { - const { session, kingId } = setupCastlingPosition("black"); - const moves = (0,__vite_ssr_import_2__.getCastlingMoves)(session, kingId); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(2); - }); - (0,__vite_ssr_import_0__.it)("black kingside target is g8 (62); queenside target is c8 (58)", () => { - const { session, kingId } = setupCastlingPosition("black"); - const moves = (0,__vite_ssr_import_2__.getCastlingMoves)(session, kingId); - const ks = moves.find((m) => m.side === "kingside"); - const qs = moves.find((m) => m.side === "queenside"); - (0,__vite_ssr_import_0__.expect)(ks?.to).toBe(62); - (0,__vite_ssr_import_0__.expect)(ks?.rookFrom).toBe(63); - (0,__vite_ssr_import_0__.expect)(ks?.rookTo).toBe(61); - (0,__vite_ssr_import_0__.expect)(qs?.to).toBe(58); - (0,__vite_ssr_import_0__.expect)(qs?.rookFrom).toBe(56); - (0,__vite_ssr_import_0__.expect)(qs?.rookTo).toBe(59); - }); - (0,__vite_ssr_import_0__.it)("black rejects castling through check on f8", () => { - const { session, kingId } = setupCastlingPosition("black"); - const isAttacked = (_s, sq) => sq === 61; - const moves = (0,__vite_ssr_import_2__.getCastlingMoves)(session, kingId, isAttacked); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.side === "kingside")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("black attacker color passed to callback is white", () => { - const { session, kingId } = setupCastlingPosition("black"); - const seenColors = []; - const spy = (_s, _sq, byColor) => { - seenColors.push(byColor); - return false; - }; - (0,__vite_ssr_import_2__.getCastlingMoves)(session, kingId, spy); - (0,__vite_ssr_import_0__.expect)(seenColors.every((c) => c === "white")).toBe(true); - }); -}); -(0,__vite_ssr_import_0__.describe)("applyCastlingMove", () => { - (0,__vite_ssr_import_0__.it)("moves white king to g1 and kingside rook to f1", () => { - const { session, kingId, kingsideRook } = setupCastlingPosition("white"); - const moves = (0,__vite_ssr_import_2__.getCastlingMoves)(session, kingId); - const kingside = moves.find((m) => m.side === "kingside"); - (0,__vite_ssr_import_0__.expect)(kingside).toBeDefined(); - (0,__vite_ssr_import_2__.applyCastlingMove)(session, kingside); - (0,__vite_ssr_import_0__.expect)(session.get(kingId, "Position")).toBe(6); - (0,__vite_ssr_import_0__.expect)(session.get(kingsideRook, "Position")).toBe(5); - (0,__vite_ssr_import_0__.expect)(session.get(kingId, "HasMoved")).toBe(true); - (0,__vite_ssr_import_0__.expect)(session.get(kingsideRook, "HasMoved")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("moves white king to c1 and queenside rook to d1", () => { - const { session, kingId, queensideRook } = setupCastlingPosition("white"); - const moves = (0,__vite_ssr_import_2__.getCastlingMoves)(session, kingId); - const queenside = moves.find((m) => m.side === "queenside"); - (0,__vite_ssr_import_0__.expect)(queenside).toBeDefined(); - (0,__vite_ssr_import_2__.applyCastlingMove)(session, queenside); - (0,__vite_ssr_import_0__.expect)(session.get(kingId, "Position")).toBe(2); - (0,__vite_ssr_import_0__.expect)(session.get(queensideRook, "Position")).toBe(3); - }); - (0,__vite_ssr_import_0__.it)("moves black king to g8 and kingside rook to f8", () => { - const { session, kingId, kingsideRook } = setupCastlingPosition("black"); - const moves = (0,__vite_ssr_import_2__.getCastlingMoves)(session, kingId); - const kingside = moves.find((m) => m.side === "kingside"); - (0,__vite_ssr_import_0__.expect)(kingside).toBeDefined(); - (0,__vite_ssr_import_2__.applyCastlingMove)(session, kingside); - (0,__vite_ssr_import_0__.expect)(session.get(kingId, "Position")).toBe(62); - (0,__vite_ssr_import_0__.expect)(session.get(kingsideRook, "Position")).toBe(61); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUM7QUFDOUMscUNBQU8sUUFBUSxJQUFJLGVBQWUsVUFBVSxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQUEsRUFDdkQsQ0FBQztBQUVELCtCQUFHLGtEQUFrRCxNQUFNO0FBQ3pELFVBQU0sRUFBRSxTQUFTLFFBQVEsYUFBYSxJQUFJLHNCQUFzQixPQUFPO0FBQ3ZFLFVBQU0sV0FBUSx3Q0FBaUIsU0FBUyxNQUFNO0FBQzlDLFVBQU0sV0FBVyxNQUFNLEtBQUssT0FBSyxFQUFFLFNBQVMsVUFBVTtBQUN0RCxxQ0FBTyxRQUFRLEVBQUUsWUFBWTtBQUM3QixnREFBa0IsU0FBUyxRQUFTO0FBQ3BDLHFDQUFPLFFBQVEsSUFBSSxRQUFRLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUMvQyxxQ0FBTyxRQUFRLElBQUksY0FBYyxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUU7QUFBQSxFQUN2RCxDQUFDO0FBQ0gsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiY2FzdGxpbmcudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgaXQsIGV4cGVjdCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB7IFNlc3Npb24gfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB7IGdldENhc3RsaW5nTW92ZXMsIGFwcGx5Q2FzdGxpbmdNb3ZlLCB0eXBlIElzU3F1YXJlQXR0YWNrZWQgfSBmcm9tIFwiLi9jYXN0bGluZy5qc1wiO1xuXG5jb25zdCBta0lkID0gKG46IG51bWJlcikgPT4gbiBhcyBFbnRpdHlJZDtcblxuZnVuY3Rpb24gaW5zZXJ0UGllY2UoXG4gIHNlc3Npb246IFNlc3Npb24sXG4gIGlkOiBudW1iZXIsXG4gIHR5cGU6IHN0cmluZyxcbiAgY29sb3I6IHN0cmluZyxcbiAgc3F1YXJlOiBudW1iZXIsXG4gIGhhc01vdmVkID0gZmFsc2UsXG4pOiBFbnRpdHlJZCB7XG4gIGNvbnN0IGVpZCA9IG1rSWQoaWQpO1xuICBzZXNzaW9uLmluc2VydChlaWQsIFwiUGllY2VUeXBlXCIsIHR5cGUpO1xuICBzZXNzaW9uLmluc2VydChlaWQsIFwiQ29sb3JcIiwgY29sb3IpO1xuICBzZXNzaW9uLmluc2VydChlaWQsIFwiUG9zaXRpb25cIiwgc3F1YXJlKTtcbiAgc2Vzc2lvbi5pbnNlcnQoZWlkLCBcIkhhc01vdmVkXCIsIGhhc01vdmVkKTtcbiAgcmV0dXJuIGVpZDtcbn1cblxuLyoqIE1pbmltYWwgY2FzdGxpbmcgcG9zaXRpb246IGEga2luZyBvbiBpdHMgaG9tZSBzcXVhcmUgcGx1cyBib3RoIGhvbWUgcm9va3MuICovXG5mdW5jdGlvbiBzZXR1cENhc3RsaW5nUG9zaXRpb24oY29sb3I6IFwid2hpdGVcIiB8IFwiYmxhY2tcIik6IHtcbiAgc2Vzc2lvbjogU2Vzc2lvbjtcbiAga2luZ0lkOiBFbnRpdHlJZDtcbiAga2luZ3NpZGVSb29rOiBFbnRpdHlJZDtcbiAgcXVlZW5zaWRlUm9vazogRW50aXR5SWQ7XG59IHtcbiAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICBjb25zdCBiYWNrUmFuayA9IGNvbG9yID09PSBcIndoaXRlXCIgPyAwIDogNTY7XG4gIGNvbnN0IGtpbmdJZCA9IGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwia2luZ1wiLCBjb2xvciwgYmFja1JhbmsgKyA0KTtcbiAgY29uc3Qga2luZ3NpZGVSb29rID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMiwgXCJyb29rXCIsIGNvbG9yLCBiYWNrUmFuayArIDcpO1xuICBjb25zdCBxdWVlbnNpZGVSb29rID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMywgXCJyb29rXCIsIGNvbG9yLCBiYWNrUmFuayArIDApO1xuICByZXR1cm4geyBzZXNzaW9uLCBraW5nSWQsIGtpbmdzaWRlUm9vaywgcXVlZW5zaWRlUm9vayB9O1xufVxuXG5kZXNjcmliZShcImdldENhc3RsaW5nTW92ZXMgLSB3aGl0ZVwiLCAoKSA9PiB7XG4gIGl0KFwiYm90aCBjYXN0bGluZyBtb3ZlcyBhdmFpbGFibGUgd2hlbiBwYXRoIGlzIGNsZWFyXCIsICgpID0+IHtcbiAgICBjb25zdCB7IHNlc3Npb24sIGtpbmdJZCB9ID0gc2V0dXBDYXN0bGluZ1Bvc2l0aW9uKFwid2hpdGVcIik7XG4gICAgY29uc3QgbW92ZXMgPSBnZXRDYXN0bGluZ01vdmVzKHNlc3Npb24sIGtpbmdJZCk7XG4gICAgZXhwZWN0KG1vdmVzKS50b0hhdmVMZW5ndGgoMik7XG4gICAgZXhwZWN0KG1vdmVzLnNvbWUobSA9PiBtLnNpZGUgPT09IFwia2luZ3NpZGVcIikpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KG1vdmVzLnNvbWUobSA9PiBtLnNpZGUgPT09IFwicXVlZW5zaWRlXCIpKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcImtpbmdzaWRlIHRhcmdldCBpcyBnMSAoNik7IHF1ZWVuc2lkZSB0YXJnZXQgaXMgYzEgKDIpXCIsICgpID0+IHtcbiAgICBjb25zdCB7IHNlc3Npb24sIGtpbmdJZCB9ID0gc2V0dXBDYXN0bGluZ1Bvc2l0aW9uKFwid2hpdGVcIik7XG4gICAgY29uc3QgbW92ZXMgPSBnZXRDYXN0bGluZ01vdmVzKHNlc3Npb24sIGtpbmdJZCk7XG4gICAgY29uc3Qga3MgPSBtb3Zlcy5maW5kKG0gPT4gbS5zaWRlID09PSBcImtpbmdzaWRlXCIpO1xuICAgIGNvbnN0IHFzID0gbW92ZXMuZmluZChtID0+IG0uc2lkZSA9PT0gXCJxdWVlbnNpZGVcIik7XG4gICAgZXhwZWN0KGtzPy50bykudG9CZSg2KTtcbiAgICBleHBlY3Qoa3M/LnJvb2tGcm9tKS50b0JlKDcpO1xuICAgIGV4cGVjdChrcz8ucm9va1RvKS50b0JlKDUpO1xuICAgIGV4cGVjdChxcz8udG8pLnRvQmUoMik7XG4gICAgZXhwZWN0KHFzPy5yb29rRnJvbSkudG9CZSgwKTtcbiAgICBleHBlY3QocXM/LnJvb2tUbykudG9CZSgzKTtcbiAgfSk7XG5cbiAgaXQoXCJraW5nc2lkZSBjYXN0bGluZyBvbmx5IHdoZW4gcXVlZW5zaWRlIHBhdGggYmxvY2tlZCBieSBwaWVjZSBvbiBiMVwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzZXNzaW9uLCBraW5nSWQgfSA9IHNldHVwQ2FzdGxpbmdQb3NpdGlvbihcIndoaXRlXCIpO1xuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDEwLCBcImtuaWdodFwiLCBcIndoaXRlXCIsIDEpOyAvLyBiMSBibG9ja3MgcXVlZW5zaWRlXG4gICAgY29uc3QgbW92ZXMgPSBnZXRDYXN0bGluZ01vdmVzKHNlc3Npb24sIGtpbmdJZCk7XG4gICAgZXhwZWN0KG1vdmVzKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgZXhwZWN0KG1vdmVzWzBdPy5zaWRlKS50b0JlKFwia2luZ3NpZGVcIik7XG4gIH0pO1xuXG4gIGl0KFwicXVlZW5zaWRlIGNhc3RsaW5nIG9ubHkgd2hlbiBraW5nc2lkZSBwYXRoIGJsb2NrZWQgYnkgcGllY2Ugb24gZjFcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgc2Vzc2lvbiwga2luZ0lkIH0gPSBzZXR1cENhc3RsaW5nUG9zaXRpb24oXCJ3aGl0ZVwiKTtcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAxMCwgXCJiaXNob3BcIiwgXCJ3aGl0ZVwiLCA1KTsgLy8gZjEgYmxvY2tzIGtpbmdzaWRlXG4gICAgY29uc3QgbW92ZXMgPSBnZXRDYXN0bGluZ01vdmVzKHNlc3Npb24sIGtpbmdJZCk7XG4gICAgZXhwZWN0KG1vdmVzKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgZXhwZWN0KG1vdmVzWzBdPy5zaWRlKS50b0JlKFwicXVlZW5zaWRlXCIpO1xuICB9KTtcblxuICBpdChcImVuZW15IHBpZWNlIGJldHdlZW4ga2luZyBhbmQgcm9vayBhbHNvIGJsb2NrcyBjYXN0bGluZ1wiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzZXNzaW9uLCBraW5nSWQgfSA9IHNldHVwQ2FzdGxpbmdQb3NpdGlvbihcIndoaXRlXCIpO1xuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDEwLCBcImtuaWdodFwiLCBcImJsYWNrXCIsIDYpOyAvLyBnMVxuICAgIGNvbnN0IG1vdmVzID0gZ2V0Q2FzdGxpbmdNb3ZlcyhzZXNzaW9uLCBraW5nSWQpO1xuICAgIGV4cGVjdChtb3Zlcy5zb21lKG0gPT4gbS5zaWRlID09PSBcImtpbmdzaWRlXCIpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJubyBjYXN0bGluZyBhZnRlciBraW5nIGhhcyBtb3ZlZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzZXNzaW9uLCBraW5nSWQgfSA9IHNldHVwQ2FzdGxpbmdQb3NpdGlvbihcIndoaXRlXCIpO1xuICAgIHNlc3Npb24uaW5zZXJ0KGtpbmdJZCwgXCJIYXNNb3ZlZFwiLCB0cnVlKTtcbiAgICBjb25zdCBtb3ZlcyA9IGdldENhc3RsaW5nTW92ZXMoc2Vzc2lvbiwga2luZ0lkKTtcbiAgICBleHBlY3QobW92ZXMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG5cbiAgaXQoXCJubyBraW5nc2lkZSBjYXN0bGluZyB3aGVuIGtpbmdzaWRlIHJvb2sgaGFzIG1vdmVkIChidXQgcXVlZW5zaWRlIHN0aWxsIG9rKVwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzZXNzaW9uLCBraW5nSWQsIGtpbmdzaWRlUm9vayB9ID0gc2V0dXBDYXN0bGluZ1Bvc2l0aW9uKFwid2hpdGVcIik7XG4gICAgc2Vzc2lvbi5pbnNlcnQoa2luZ3NpZGVSb29rLCBcIkhhc01vdmVkXCIsIHRydWUpO1xuICAgIGNvbnN0IG1vdmVzID0gZ2V0Q2FzdGxpbmdNb3ZlcyhzZXNzaW9uLCBraW5nSWQpO1xuICAgIGV4cGVjdChtb3Zlcy5zb21lKG0gPT4gbS5zaWRlID09PSBcImtpbmdzaWRlXCIpKS50b0JlKGZhbHNlKTtcbiAgICBleHBlY3QobW92ZXMuc29tZShtID0+IG0uc2lkZSA9PT0gXCJxdWVlbnNpZGVcIikpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwibm8gY2FzdGxpbmcgd2hlbiBubyByb29rIHByZXNlbnQgb24gcm9vay1ob21lIHNxdWFyZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzZXNzaW9uLCBraW5nSWQsIGtpbmdzaWRlUm9vayB9ID0gc2V0dXBDYXN0bGluZ1Bvc2l0aW9uKFwid2hpdGVcIik7XG4gICAgc2Vzc2lvbi5yZXRyYWN0KGtpbmdzaWRlUm9vaywgXCJQb3NpdGlvblwiKTtcbiAgICBjb25zdCBtb3ZlcyA9IGdldENhc3RsaW5nTW92ZXMoc2Vzc2lvbiwga2luZ0lkKTtcbiAgICBleHBlY3QobW92ZXMuc29tZShtID0+IG0uc2lkZSA9PT0gXCJraW5nc2lkZVwiKSkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyBjYXN0bGluZyB3aGVuIGtpbmcgaXMgY3VycmVudGx5IGluIGNoZWNrXCIsICgpID0+IHtcbiAgICBjb25zdCB7IHNlc3Npb24sIGtpbmdJZCB9ID0gc2V0dXBDYXN0bGluZ1Bvc2l0aW9uKFwid2hpdGVcIik7XG4gICAgY29uc3QgaXNBdHRhY2tlZDogSXNTcXVhcmVBdHRhY2tlZCA9IChfcywgc3EpID0+IHNxID09PSA0OyAvLyBlMSBhdHRhY2tlZFxuICAgIGNvbnN0IG1vdmVzID0gZ2V0Q2FzdGxpbmdNb3ZlcyhzZXNzaW9uLCBraW5nSWQsIGlzQXR0YWNrZWQpO1xuICAgIGV4cGVjdChtb3ZlcykudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgY2FzdGxpbmcgdGhyb3VnaCBjaGVjayAoa2luZyBwYXNzZXMgYXR0YWNrZWQgc3F1YXJlKVwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzZXNzaW9uLCBraW5nSWQgfSA9IHNldHVwQ2FzdGxpbmdQb3NpdGlvbihcIndoaXRlXCIpO1xuICAgIGNvbnN0IGlzQXR0YWNrZWQ6IElzU3F1YXJlQXR0YWNrZWQgPSAoX3MsIHNxKSA9PiBzcSA9PT0gNTsgLy8gZjEgYXR0YWNrZWRcbiAgICBjb25zdCBtb3ZlcyA9IGdldENhc3RsaW5nTW92ZXMoc2Vzc2lvbiwga2luZ0lkLCBpc0F0dGFja2VkKTtcbiAgICBleHBlY3QobW92ZXMuc29tZShtID0+IG0uc2lkZSA9PT0gXCJraW5nc2lkZVwiKSkudG9CZShmYWxzZSk7XG4gICAgLy8gUXVlZW5zaWRlICh0cmFuc2l0IGQxPTMsIGMxPTIpIHVuYWZmZWN0ZWQuXG4gICAgZXhwZWN0KG1vdmVzLnNvbWUobSA9PiBtLnNpZGUgPT09IFwicXVlZW5zaWRlXCIpKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgY2FzdGxpbmcgaW50byBjaGVjayAoZGVzdGluYXRpb24gYXR0YWNrZWQpXCIsICgpID0+IHtcbiAgICBjb25zdCB7IHNlc3Npb24sIGtpbmdJZCB9ID0gc2V0dXBDYXN0bGluZ1Bvc2l0aW9uKFwid2hpdGVcIik7XG4gICAgY29uc3QgaXNBdHRhY2tlZDogSXNTcXVhcmVBdHRhY2tlZCA9IChfcywgc3EpID0+IHNxID09PSA2OyAvLyBnMSBhdHRhY2tlZFxuICAgIGNvbnN0IG1vdmVzID0gZ2V0Q2FzdGxpbmdNb3ZlcyhzZXNzaW9uLCBraW5nSWQsIGlzQXR0YWNrZWQpO1xuICAgIGV4cGVjdChtb3Zlcy5zb21lKG0gPT4gbS5zaWRlID09PSBcImtpbmdzaWRlXCIpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJiMSBiZWluZyBhdHRhY2tlZCBkb2VzIE5PVCBwcmV2ZW50IHF1ZWVuc2lkZSBjYXN0bGluZyAoa2luZyBkb2Vzbid0IGNyb3NzIGIxKVwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzZXNzaW9uLCBraW5nSWQgfSA9IHNldHVwQ2FzdGxpbmdQb3NpdGlvbihcIndoaXRlXCIpO1xuICAgIGNvbnN0IGlzQXR0YWNrZWQ6IElzU3F1YXJlQXR0YWNrZWQgPSAoX3MsIHNxKSA9PiBzcSA9PT0gMTsgLy8gYjEgYXR0YWNrZWRcbiAgICBjb25zdCBtb3ZlcyA9IGdldENhc3RsaW5nTW92ZXMoc2Vzc2lvbiwga2luZ0lkLCBpc0F0dGFja2VkKTtcbiAgICBleHBlY3QobW92ZXMuc29tZShtID0+IG0uc2lkZSA9PT0gXCJxdWVlbnNpZGVcIikpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwiYXR0YWNrZXIgY29sb3IgcGFzc2VkIHRvIGNhbGxiYWNrIGlzIHRoZSBvcHBvc2luZyBjb2xvclwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzZXNzaW9uLCBraW5nSWQgfSA9IHNldHVwQ2FzdGxpbmdQb3NpdGlvbihcIndoaXRlXCIpO1xuICAgIGNvbnN0IHNlZW5Db2xvcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3Qgc3B5OiBJc1NxdWFyZUF0dGFja2VkID0gKF9zLCBfc3EsIGJ5Q29sb3IpID0+IHtcbiAgICAgIHNlZW5Db2xvcnMucHVzaChieUNvbG9yKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIGdldENhc3RsaW5nTW92ZXMoc2Vzc2lvbiwga2luZ0lkLCBzcHkpO1xuICAgIGV4cGVjdChzZWVuQ29sb3JzLmV2ZXJ5KGMgPT4gYyA9PT0gXCJibGFja1wiKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJub24tcm9vayBwaWVjZSBvbiByb29rIGhvbWUgc3F1YXJlIGJsb2NrcyB0aGF0IHNpZGVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgc2Vzc2lvbiwga2luZ0lkLCBraW5nc2lkZVJvb2sgfSA9IHNldHVwQ2FzdGxpbmdQb3NpdGlvbihcIndoaXRlXCIpO1xuICAgIC8vIFJlcGxhY2UgdGhlIGtpbmdzaWRlIHJvb2sgd2l0aCBhIHF1ZWVuIChzYW1lIHNxdWFyZSwgc2FtZSBjb2xvcikuXG4gICAgc2Vzc2lvbi5pbnNlcnQoa2luZ3NpZGVSb29rLCBcIlBpZWNlVHlwZVwiLCBcInF1ZWVuXCIpO1xuICAgIGNvbnN0IG1vdmVzID0gZ2V0Q2FzdGxpbmdNb3ZlcyhzZXNzaW9uLCBraW5nSWQpO1xuICAgIGV4cGVjdChtb3Zlcy5zb21lKG0gPT4gbS5zaWRlID09PSBcImtpbmdzaWRlXCIpKS50b0JlKGZhbHNlKTtcbiAgICBleHBlY3QobW92ZXMuc29tZShtID0+IG0uc2lkZSA9PT0gXCJxdWVlbnNpZGVcIikpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyBlbXB0eSBsaXN0IHdoZW4gcGllY2VJZCBoYXMgbm8gUG9zaXRpb24vQ29sb3JcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBleHBlY3QoZ2V0Q2FzdGxpbmdNb3ZlcyhzZXNzaW9uLCBta0lkKDk5OSkpKS50b0VxdWFsKFtdKTtcbiAgfSk7XG5cbiAgaXQoXCJraW5nIG5vdCBvbiBob21lIHNxdWFyZSB5aWVsZHMgbm8gY2FzdGxpbmcgbW92ZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICAvLyBLaW5nIG9uIGUyICgxMikg4oCUIEhhc01vdmVkIHN0aWxsIGZhbHNlIGJ1dCBnZW9tZXRyeSBpcyB3cm9uZy5cbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcImtpbmdcIiwgXCJ3aGl0ZVwiLCAxMik7XG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMiwgXCJyb29rXCIsIFwid2hpdGVcIiwgNyk7XG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMywgXCJyb29rXCIsIFwid2hpdGVcIiwgMCk7XG4gICAgZXhwZWN0KGdldENhc3RsaW5nTW92ZXMoc2Vzc2lvbiwgbWtJZCgxKSkpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJnZXRDYXN0bGluZ01vdmVzIC0gYmxhY2tcIiwgKCkgPT4ge1xuICBpdChcImJvdGggYmxhY2sgY2FzdGxpbmcgbW92ZXMgYXZhaWxhYmxlIHdoZW4gcGF0aCBjbGVhclwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzZXNzaW9uLCBraW5nSWQgfSA9IHNldHVwQ2FzdGxpbmdQb3NpdGlvbihcImJsYWNrXCIpO1xuICAgIGNvbnN0IG1vdmVzID0gZ2V0Q2FzdGxpbmdNb3ZlcyhzZXNzaW9uLCBraW5nSWQpO1xuICAgIGV4cGVjdChtb3ZlcykudG9IYXZlTGVuZ3RoKDIpO1xuICB9KTtcblxuICBpdChcImJsYWNrIGtpbmdzaWRlIHRhcmdldCBpcyBnOCAoNjIpOyBxdWVlbnNpZGUgdGFyZ2V0IGlzIGM4ICg1OClcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgc2Vzc2lvbiwga2luZ0lkIH0gPSBzZXR1cENhc3RsaW5nUG9zaXRpb24oXCJibGFja1wiKTtcbiAgICBjb25zdCBtb3ZlcyA9IGdldENhc3RsaW5nTW92ZXMoc2Vzc2lvbiwga2luZ0lkKTtcbiAgICBjb25zdCBrcyA9IG1vdmVzLmZpbmQobSA9PiBtLnNpZGUgPT09IFwia2luZ3NpZGVcIik7XG4gICAgY29uc3QgcXMgPSBtb3Zlcy5maW5kKG0gPT4gbS5zaWRlID09PSBcInF1ZWVuc2lkZVwiKTtcbiAgICBleHBlY3Qoa3M/LnRvKS50b0JlKDYyKTtcbiAgICBleHBlY3Qoa3M/LnJvb2tGcm9tKS50b0JlKDYzKTtcbiAgICBleHBlY3Qoa3M/LnJvb2tUbykudG9CZSg2MSk7XG4gICAgZXhwZWN0KHFzPy50bykudG9CZSg1OCk7XG4gICAgZXhwZWN0KHFzPy5yb29rRnJvbSkudG9CZSg1Nik7XG4gICAgZXhwZWN0KHFzPy5yb29rVG8pLnRvQmUoNTkpO1xuICB9KTtcblxuICBpdChcImJsYWNrIHJlamVjdHMgY2FzdGxpbmcgdGhyb3VnaCBjaGVjayBvbiBmOFwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzZXNzaW9uLCBraW5nSWQgfSA9IHNldHVwQ2FzdGxpbmdQb3NpdGlvbihcImJsYWNrXCIpO1xuICAgIGNvbnN0IGlzQXR0YWNrZWQ6IElzU3F1YXJlQXR0YWNrZWQgPSAoX3MsIHNxKSA9PiBzcSA9PT0gNjE7IC8vIGY4IGF0dGFja2VkXG4gICAgY29uc3QgbW92ZXMgPSBnZXRDYXN0bGluZ01vdmVzKHNlc3Npb24sIGtpbmdJZCwgaXNBdHRhY2tlZCk7XG4gICAgZXhwZWN0KG1vdmVzLnNvbWUobSA9PiBtLnNpZGUgPT09IFwia2luZ3NpZGVcIikpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcImJsYWNrIGF0dGFja2VyIGNvbG9yIHBhc3NlZCB0byBjYWxsYmFjayBpcyB3aGl0ZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzZXNzaW9uLCBraW5nSWQgfSA9IHNldHVwQ2FzdGxpbmdQb3NpdGlvbihcImJsYWNrXCIpO1xuICAgIGNvbnN0IHNlZW5Db2xvcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3Qgc3B5OiBJc1NxdWFyZUF0dGFja2VkID0gKF9zLCBfc3EsIGJ5Q29sb3IpID0+IHtcbiAgICAgIHNlZW5Db2xvcnMucHVzaChieUNvbG9yKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIGdldENhc3RsaW5nTW92ZXMoc2Vzc2lvbiwga2luZ0lkLCBzcHkpO1xuICAgIGV4cGVjdChzZWVuQ29sb3JzLmV2ZXJ5KGMgPT4gYyA9PT0gXCJ3aGl0ZVwiKSkudG9CZSh0cnVlKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJhcHBseUNhc3RsaW5nTW92ZVwiLCAoKSA9PiB7XG4gIGl0KFwibW92ZXMgd2hpdGUga2luZyB0byBnMSBhbmQga2luZ3NpZGUgcm9vayB0byBmMVwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzZXNzaW9uLCBraW5nSWQsIGtpbmdzaWRlUm9vayB9ID0gc2V0dXBDYXN0bGluZ1Bvc2l0aW9uKFwid2hpdGVcIik7XG4gICAgY29uc3QgbW92ZXMgPSBnZXRDYXN0bGluZ01vdmVzKHNlc3Npb24sIGtpbmdJZCk7XG4gICAgY29uc3Qga2luZ3NpZGUgPSBtb3Zlcy5maW5kKG0gPT4gbS5zaWRlID09PSBcImtpbmdzaWRlXCIpO1xuICAgIGV4cGVjdChraW5nc2lkZSkudG9CZURlZmluZWQoKTtcbiAgICBhcHBseUNhc3RsaW5nTW92ZShzZXNzaW9uLCBraW5nc2lkZSEpO1xuICAgIGV4cGVjdChzZXNzaW9uLmdldChraW5nSWQsIFwiUG9zaXRpb25cIikpLnRvQmUoNik7XG4gICAgZXhwZWN0KHNlc3Npb24uZ2V0KGtpbmdzaWRlUm9vaywgXCJQb3NpdGlvblwiKSkudG9CZSg1KTtcbiAgICBleHBlY3Qoc2Vzc2lvbi5nZXQoa2luZ0lkLCBcIkhhc01vdmVkXCIpKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChzZXNzaW9uLmdldChraW5nc2lkZVJvb2ssIFwiSGFzTW92ZWRcIikpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwibW92ZXMgd2hpdGUga2luZyB0byBjMSBhbmQgcXVlZW5zaWRlIHJvb2sgdG8gZDFcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgc2Vzc2lvbiwga2luZ0lkLCBxdWVlbnNpZGVSb29rIH0gPSBzZXR1cENhc3RsaW5nUG9zaXRpb24oXCJ3aGl0ZVwiKTtcbiAgICBjb25zdCBtb3ZlcyA9IGdldENhc3RsaW5nTW92ZXMoc2Vzc2lvbiwga2luZ0lkKTtcbiAgICBjb25zdCBxdWVlbnNpZGUgPSBtb3Zlcy5maW5kKG0gPT4gbS5zaWRlID09PSBcInF1ZWVuc2lkZVwiKTtcbiAgICBleHBlY3QocXVlZW5zaWRlKS50b0JlRGVmaW5lZCgpO1xuICAgIGFwcGx5Q2FzdGxpbmdNb3ZlKHNlc3Npb24sIHF1ZWVuc2lkZSEpO1xuICAgIGV4cGVjdChzZXNzaW9uLmdldChraW5nSWQsIFwiUG9zaXRpb25cIikpLnRvQmUoMik7XG4gICAgZXhwZWN0KHNlc3Npb24uZ2V0KHF1ZWVuc2lkZVJvb2ssIFwiUG9zaXRpb25cIikpLnRvQmUoMyk7XG4gIH0pO1xuXG4gIGl0KFwibW92ZXMgYmxhY2sga2luZyB0byBnOCBhbmQga2luZ3NpZGUgcm9vayB0byBmOFwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzZXNzaW9uLCBraW5nSWQsIGtpbmdzaWRlUm9vayB9ID0gc2V0dXBDYXN0bGluZ1Bvc2l0aW9uKFwiYmxhY2tcIik7XG4gICAgY29uc3QgbW92ZXMgPSBnZXRDYXN0bGluZ01vdmVzKHNlc3Npb24sIGtpbmdJZCk7XG4gICAgY29uc3Qga2luZ3NpZGUgPSBtb3Zlcy5maW5kKG0gPT4gbS5zaWRlID09PSBcImtpbmdzaWRlXCIpO1xuICAgIGV4cGVjdChraW5nc2lkZSkudG9CZURlZmluZWQoKTtcbiAgICBhcHBseUNhc3RsaW5nTW92ZShzZXNzaW9uLCBraW5nc2lkZSEpO1xuICAgIGV4cGVjdChzZXNzaW9uLmdldChraW5nSWQsIFwiUG9zaXRpb25cIikpLnRvQmUoNjIpO1xuICAgIGV4cGVjdChzZXNzaW9uLmdldChraW5nc2lkZVJvb2ssIFwiUG9zaXRpb25cIikpLnRvQmUoNjEpO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL2NoZXNzL3NyYy9ydWxlcy9jYXN0bGluZy50ZXN0LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/dcef99cfc007191855422cbf66c4827c8a4ec13a b/7xOfJqsDU787fe61oSCq1/web/dcef99cfc007191855422cbf66c4827c8a4ec13a deleted file mode 100644 index 4fd66a9..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/dcef99cfc007191855422cbf66c4827c8a4ec13a +++ /dev/null @@ -1,51 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "setEnPassantTarget", { enumerable: true, configurable: true, get(){ try { return setEnPassantTarget } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "clearEnPassantTarget", { enumerable: true, configurable: true, get(){ try { return clearEnPassantTarget } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "getEnPassantMoves", { enumerable: true, configurable: true, get(){ try { return getEnPassantMoves } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "applyEnPassantCapture", { enumerable: true, configurable: true, get(){ try { return applyEnPassantCapture } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/schema.ts", {"importedNames":["GAME_ENTITY"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/rules/board-queries.ts", {"importedNames":["getPiecePosition","getPieceColor","getPieceAt"]}); - - - - -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/rules/primitives.ts", {"importedNames":["pawnCaptureSqares"]}); -function setEnPassantTarget(session, from, to) { - const target = (from + to) / 2; - session.insert((0,__vite_ssr_import_0__.GAME_ENTITY), "EnPassantTarget", target); -}; -function clearEnPassantTarget(session) { - session.insert((0,__vite_ssr_import_0__.GAME_ENTITY), "EnPassantTarget", null); -}; -function getEnPassantMoves(session, pieceId) { - const from = (0,__vite_ssr_import_1__.getPiecePosition)(session, pieceId); - const color = (0,__vite_ssr_import_1__.getPieceColor)(session, pieceId); - if (from === null || color === null) return []; - const raw = session.get((0,__vite_ssr_import_0__.GAME_ENTITY), "EnPassantTarget"); - if (raw === null || raw === void 0) return []; - const target = raw; - const captureSqs = (0,__vite_ssr_import_2__.pawnCaptureSqares)(from, color); - if (!captureSqs.includes(target)) return []; - const capturedPawnSquare = color === "white" ? target - 8 : target + 8; - const capturedId = (0,__vite_ssr_import_1__.getPieceAt)(session, capturedPawnSquare); - if (capturedId === null) return []; - return [{ - pieceId, - from, - to: target, - isCapture: true - }]; -}; -function applyEnPassantCapture(session, move, color) { - const capturedPawnSquare = color === "white" ? move.to - 8 : move.to + 8; - const capturedId = (0,__vite_ssr_import_1__.getPieceAt)(session, capturedPawnSquare); - if (capturedId !== null) { - for (const attr of ["PieceType", "Color", "Position", "HasMoved"]) { - if (session.contains(capturedId, attr)) session.retract(capturedId, attr); - } - }; - session.insert(move.pieceId, "Position", move.to); - session.insert(move.pieceId, "HasMoved", true); -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7OztBQWlCQTtBQUVBOzs7OztBQUtBO0FBU08sU0FBUyxtQkFDZCxTQUNBLE1BQ0EsSUFDTTtBQUNOLFFBQU0sVUFBVyxPQUFPLE1BQU07QUFDOUIsVUFBUSxVQUFPLG9DQUFhLG1CQUFtQixNQUFNO0FBQ3ZEO0FBR08sU0FBUyxxQkFBcUIsU0FBd0I7QUFDM0QsVUFBUSxVQUFPLG9DQUFhLG1CQUFtQixJQUFJO0FBQ3JEO0FBWU8sU0FBUyxrQkFDZCxTQUNBLFNBQ2E7QUFDYixRQUFNLFVBQU8sd0NBQWlCLFNBQVMsT0FBTztBQUM5QyxRQUFNLFdBQVEscUNBQWMsU0FBUyxPQUFPO0FBQzVDLE1BQUksU0FBUyxRQUFRLFVBQVUsS0FBTSxRQUFPLENBQUM7QUFFN0MsUUFBTSxNQUFNLFFBQVEsT0FBSSxvQ0FBYSxpQkFBaUI7QUFDdEQsTUFBSSxRQUFRLFFBQVEsUUFBUSxPQUFXLFFBQU8sQ0FBQztBQUMvQyxRQUFNLFNBQVM7QUFHZixRQUFNLGdCQUFhLHlDQUFrQixNQUFNLEtBQUs7QUFDaEQsTUFBSSxDQUFDLFdBQVcsU0FBUyxNQUFNLEVBQUcsUUFBTyxDQUFDO0FBSTFDLFFBQU0scUJBQ0osVUFBVSxVQUFZLFNBQVMsSUFBa0IsU0FBUztBQUM1RCxRQUFNLGdCQUFhLGtDQUFXLFNBQVMsa0JBQWtCO0FBQ3pELE1BQUksZUFBZSxLQUFNLFFBQU8sQ0FBQztBQUVqQyxTQUFPLENBQUM7QUFBQSxJQUNOO0FBQUEsSUFDQTtBQUFBLElBQ0EsSUFBSTtBQUFBLElBQ0osV0FBVztBQUFBLEVBQ2IsQ0FBQztBQUNIO0FBTU8sU0FBUyxzQkFDZCxTQUNBLE1BQ0EsT0FDTTtBQUVOLFFBQU0scUJBQ0osVUFBVSxVQUFZLEtBQUssS0FBSyxJQUFrQixLQUFLLEtBQUs7QUFDOUQsUUFBTSxnQkFBYSxrQ0FBVyxTQUFTLGtCQUFrQjtBQUN6RCxNQUFJLGVBQWUsTUFBTTtBQUN2QixlQUFXLFFBQVEsQ0FBQyxhQUFhLFNBQVMsWUFBWSxVQUFVLEdBQVk7QUFDMUUsVUFBSSxRQUFRLFNBQVMsWUFBWSxJQUFJLEVBQUcsU0FBUSxRQUFRLFlBQVksSUFBSTtBQUFBLElBQzFFO0FBQUEsRUFDRjtBQUdBLFVBQVEsT0FBTyxLQUFLLFNBQVMsWUFBWSxLQUFLLEVBQUU7QUFDaEQsVUFBUSxPQUFPLEtBQUssU0FBUyxZQUFZLElBQUk7QUFDL0MiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImVucGFzc2FudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEVuIHBhc3NhbnQgcnVsZXMgKFAyLjE2KS5cbiAqXG4gKiBGSURFIGVuIHBhc3NhbnQ6XG4gKiAgLSBBZnRlciBhIHBhd24gbWFrZXMgYSBkb3VibGUgYWR2YW5jZSwgdGhlIGBFblBhc3NhbnRUYXJnZXRgIGdhbWUtbGV2ZWxcbiAqICAgIGZhY3QgaXMgc2V0IHRvIHRoZSBzcXVhcmUgdGhlIHBhd24gcGFzc2VkIG92ZXIgKHRoZSBcInRhcmdldFwiIHNxdWFyZSkuXG4gKiAgLSBPbiB0aGUgdmVyeSBuZXh0IHBseSwgYW4gYWRqYWNlbnQgZW5lbXkgcGF3biBtYXkgY2FwdHVyZSB0byB0aGF0IHRhcmdldFxuICogICAgc3F1YXJlLCByZW1vdmluZyB0aGUgZG91YmxlLWFkdmFuY2VkIHBhd24uXG4gKiAgLSBUaGUgRW5QYXNzYW50VGFyZ2V0IGlzIGNsZWFyZWQgYXQgdGhlIHN0YXJ0IG9mIGFueSB0dXJuIHRoYXQgZG9lc24ndFxuICogICAgdXNlIGl0IChvbmUtcGx5IHdpbmRvdykuXG4gKlxuICogVGhpcyBtb2R1bGUgZG9lcyBub3QgZGVjaWRlIHdoZW4gdG8gY2xlYXIgdGhlIHRhcmdldCDigJQgdGhhdCdzIHRoZSB0dXJuXG4gKiBtYW5hZ2VyJ3MgcmVzcG9uc2liaWxpdHkgKFAyLjEzKS4gSXQgb25seSBvZmZlcnMgdGhlIHNldHRlcnMvY2xlYXJlcnMgYW5kXG4gKiB0aGUgbW92ZSBnZW5lcmF0b3IgKyBjYXB0dXJlIGFwcGxpZXIuXG4gKi9cbmltcG9ydCB0eXBlIHsgU2Vzc2lvbiwgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB0eXBlIHsgUGllY2VDb2xvciwgU3F1YXJlIH0gZnJvbSBcIi4uL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHsgR0FNRV9FTlRJVFkgfSBmcm9tIFwiLi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgdHlwZSB7IExlZ2FsTW92ZSB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5pbXBvcnQge1xuICBnZXRQaWVjZVBvc2l0aW9uLFxuICBnZXRQaWVjZUNvbG9yLFxuICBnZXRQaWVjZUF0LFxufSBmcm9tIFwiLi9ib2FyZC1xdWVyaWVzLmpzXCI7XG5pbXBvcnQgeyBwYXduQ2FwdHVyZVNxYXJlcyB9IGZyb20gXCIuL3ByaW1pdGl2ZXMuanNcIjtcblxuLyoqXG4gKiBTZXQgdGhlIEVuUGFzc2FudFRhcmdldCBhZnRlciBhIHBhd24gZG91YmxlIGFkdmFuY2UuXG4gKiBUYXJnZXQgPSB0aGUgc3F1YXJlIHRoZSBwYXduIHBhc3NlZCBvdmVyIChtaWRwb2ludCBiZXR3ZWVuIGZyb20gYW5kIHRvKS5cbiAqXG4gKiBAZXhhbXBsZSB3aGl0ZSBlMuKGkmU0OiBmcm9tPTEyLCB0bz0yOCwgdGFyZ2V0PTIwIChlMylcbiAqIEBleGFtcGxlIGJsYWNrIGU34oaSZTU6IGZyb209NTIsIHRvPTM2LCB0YXJnZXQ9NDQgKGU2KVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RW5QYXNzYW50VGFyZ2V0KFxuICBzZXNzaW9uOiBTZXNzaW9uLFxuICBmcm9tOiBTcXVhcmUsXG4gIHRvOiBTcXVhcmUsXG4pOiB2b2lkIHtcbiAgY29uc3QgdGFyZ2V0ID0gKChmcm9tICsgdG8pIC8gMikgYXMgU3F1YXJlOyAvLyBtaWRwb2ludCBzcXVhcmVcbiAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiRW5QYXNzYW50VGFyZ2V0XCIsIHRhcmdldCk7XG59XG5cbi8qKiBDbGVhciB0aGUgZW4gcGFzc2FudCB0YXJnZXQgKGNhbGxlZCB3aGVuIHRoZSB3aW5kb3cgY2xvc2VzKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckVuUGFzc2FudFRhcmdldChzZXNzaW9uOiBTZXNzaW9uKTogdm9pZCB7XG4gIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIkVuUGFzc2FudFRhcmdldFwiLCBudWxsKTtcbn1cblxuLyoqXG4gKiBHZXQgZW4gcGFzc2FudCBjYXB0dXJlIG1vdmVzIGZvciBhIHBhd24sIGlmIGFueS5cbiAqXG4gKiBSZXR1cm5zIGEgKHBvc3NpYmx5IGVtcHR5KSBhcnJheSBvZiBMZWdhbE1vdmVzLiBBbiBFUCBjYXB0dXJlIGlzXG4gKiBwcm9kdWNlZCBpZmY6XG4gKiAgIC0gRW5QYXNzYW50VGFyZ2V0IGlzIHNldCB0byBhIHNxdWFyZVxuICogICAtIHRoYXQgc3F1YXJlIGlzIG9uZSBvZiB0aGUgcGF3bidzIGRpYWdvbmFsLWNhcHR1cmUgc3F1YXJlc1xuICogICAtIGFuIGVuZW15IHBhd24gYWN0dWFsbHkgc2l0cyBcImJlaGluZFwiIHRoZSB0YXJnZXQgKG9uIHRoZSByYW5rIHRoZVxuICogICAgIGNhcHR1cmluZyBwYXduIGN1cnJlbnRseSBvY2N1cGllcylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVuUGFzc2FudE1vdmVzKFxuICBzZXNzaW9uOiBTZXNzaW9uLFxuICBwaWVjZUlkOiBFbnRpdHlJZCxcbik6IExlZ2FsTW92ZVtdIHtcbiAgY29uc3QgZnJvbSA9IGdldFBpZWNlUG9zaXRpb24oc2Vzc2lvbiwgcGllY2VJZCk7XG4gIGNvbnN0IGNvbG9yID0gZ2V0UGllY2VDb2xvcihzZXNzaW9uLCBwaWVjZUlkKTtcbiAgaWYgKGZyb20gPT09IG51bGwgfHwgY29sb3IgPT09IG51bGwpIHJldHVybiBbXTtcblxuICBjb25zdCByYXcgPSBzZXNzaW9uLmdldChHQU1FX0VOVElUWSwgXCJFblBhc3NhbnRUYXJnZXRcIik7XG4gIGlmIChyYXcgPT09IG51bGwgfHwgcmF3ID09PSB1bmRlZmluZWQpIHJldHVybiBbXTtcbiAgY29uc3QgdGFyZ2V0ID0gcmF3IGFzIFNxdWFyZTtcblxuICAvLyBUYXJnZXQgbXVzdCBiZSBvbmUgb2YgdGhpcyBwYXduJ3MgZGlhZ29uYWwtY2FwdHVyZSBzcXVhcmVzLlxuICBjb25zdCBjYXB0dXJlU3FzID0gcGF3bkNhcHR1cmVTcWFyZXMoZnJvbSwgY29sb3IpO1xuICBpZiAoIWNhcHR1cmVTcXMuaW5jbHVkZXModGFyZ2V0KSkgcmV0dXJuIFtdO1xuXG4gIC8vIFRoZSBjYXB0dXJlZCBwYXduIHNpdHMgb24gdGhlIHJhbmsgXCJiZWhpbmRcIiB0aGUgdGFyZ2V0IHNxdWFyZVxuICAvLyAoaS5lLiBvbiB0aGUgc2FtZSByYW5rIGFzIHRoZSBjYXB0dXJpbmcgcGF3bikuXG4gIGNvbnN0IGNhcHR1cmVkUGF3blNxdWFyZTogU3F1YXJlID1cbiAgICBjb2xvciA9PT0gXCJ3aGl0ZVwiID8gKCh0YXJnZXQgLSA4KSBhcyBTcXVhcmUpIDogKCh0YXJnZXQgKyA4KSBhcyBTcXVhcmUpO1xuICBjb25zdCBjYXB0dXJlZElkID0gZ2V0UGllY2VBdChzZXNzaW9uLCBjYXB0dXJlZFBhd25TcXVhcmUpO1xuICBpZiAoY2FwdHVyZWRJZCA9PT0gbnVsbCkgcmV0dXJuIFtdO1xuXG4gIHJldHVybiBbe1xuICAgIHBpZWNlSWQsXG4gICAgZnJvbSxcbiAgICB0bzogdGFyZ2V0LFxuICAgIGlzQ2FwdHVyZTogdHJ1ZSxcbiAgfV07XG59XG5cbi8qKlxuICogQXBwbHkgYW4gZW4gcGFzc2FudCBjYXB0dXJlOiBtb3ZlIHRoZSBjYXB0dXJpbmcgcGF3biB0byB0aGUgdGFyZ2V0IGFuZFxuICogcmVtb3ZlIHRoZSBjYXB0dXJlZCBwYXduICh3aGljaCBpcyBOT1Qgb24gdGhlIHRhcmdldCBzcXVhcmUpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlFblBhc3NhbnRDYXB0dXJlKFxuICBzZXNzaW9uOiBTZXNzaW9uLFxuICBtb3ZlOiBMZWdhbE1vdmUsXG4gIGNvbG9yOiBQaWVjZUNvbG9yLFxuKTogdm9pZCB7XG4gIC8vIENhcHR1cmVkIHBhd24gaXMgb24gdGhlIHJhbmsgYmVoaW5kIHRoZSB0YXJnZXQuXG4gIGNvbnN0IGNhcHR1cmVkUGF3blNxdWFyZTogU3F1YXJlID1cbiAgICBjb2xvciA9PT0gXCJ3aGl0ZVwiID8gKChtb3ZlLnRvIC0gOCkgYXMgU3F1YXJlKSA6ICgobW92ZS50byArIDgpIGFzIFNxdWFyZSk7XG4gIGNvbnN0IGNhcHR1cmVkSWQgPSBnZXRQaWVjZUF0KHNlc3Npb24sIGNhcHR1cmVkUGF3blNxdWFyZSk7XG4gIGlmIChjYXB0dXJlZElkICE9PSBudWxsKSB7XG4gICAgZm9yIChjb25zdCBhdHRyIG9mIFtcIlBpZWNlVHlwZVwiLCBcIkNvbG9yXCIsIFwiUG9zaXRpb25cIiwgXCJIYXNNb3ZlZFwiXSBhcyBjb25zdCkge1xuICAgICAgaWYgKHNlc3Npb24uY29udGFpbnMoY2FwdHVyZWRJZCwgYXR0cikpIHNlc3Npb24ucmV0cmFjdChjYXB0dXJlZElkLCBhdHRyKTtcbiAgICB9XG4gIH1cblxuICAvLyBNb3ZlIHRoZSBjYXB0dXJpbmcgcGF3biB0byB0aGUgdGFyZ2V0LlxuICBzZXNzaW9uLmluc2VydChtb3ZlLnBpZWNlSWQsIFwiUG9zaXRpb25cIiwgbW92ZS50byk7XG4gIHNlc3Npb24uaW5zZXJ0KG1vdmUucGllY2VJZCwgXCJIYXNNb3ZlZFwiLCB0cnVlKTtcbn1cbiJdLCJmaWxlIjoiL3NyYy9ydWxlcy9lbnBhc3NhbnQudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/ded30c1d23a82bf6914fff3eb54c5549384c50d1 b/7xOfJqsDU787fe61oSCq1/web/ded30c1d23a82bf6914fff3eb54c5549384c50d1 deleted file mode 100644 index 1420e93..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/ded30c1d23a82bf6914fff3eb54c5549384c50d1 +++ /dev/null @@ -1,192 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "UnsafeNegationError", { enumerable: true, configurable: true, get(){ try { return UnsafeNegationError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "NegationNode", { enumerable: true, configurable: true, get(){ try { return NegationNode } catch {} }}); -/** - * Thrown by the rule builder when a negated condition references a variable - * that is not bound by any earlier (positive) condition in the rule. - * - * The node itself does not throw this — it has no visibility into the full - * rule's binding set. The error type lives here so the builder can report - * it with a consistent name and callers can catch it specifically. - */ -class UnsafeNegationError extends Error { - constructor(unboundVar) { - super(`UnsafeNegationError: variable "${unboundVar}" in NOT pattern is not bound by any preceding condition`); - this.name = "UnsafeNegationError"; - } -}; -/** - * Beta-network NOT node. - * - * Left input: tokens from an upstream {@link BetaMemory} / {@link JoinNode}. - * Right input: an {@link AlphaMemory} of facts that match the negated pattern's - * constant tests. The node does not subscribe to the alpha memory itself — - * the network wiring (typically the builder) calls {@link rightActivate} and - * {@link rightDeactivate} when alpha-memory membership changes. - * - * Output: a subset of left tokens (never extended — negation contributes no - * new bindings), emitted to registered downstream activate/deactivate - * listeners in registration order. - */ -class NegationNode { - #activateListeners = []; - #deactivateListeners = []; - /** - * Per-token block count: number of right facts currently satisfying the - * join tests for that token. A token passes downstream iff its count is - * zero. Absent = token unknown (never left-activated or already - * left-deactivated). - */ - #blockCount = new Map(); - /** - * Tokens that are currently emitted downstream (count === 0 and not yet - * left-deactivated). Maintained in lock-step with {@link #blockCount} so - * that we know whether a deactivate transition actually needs to fire. - */ - #passingTokens = new Set(); - /** - * Every left token we've seen and not yet deactivated, in insertion order. - * Right-side events iterate this to determine which counts to adjust. - * Kept as an array (not a Set) so iteration order is deterministic per - * SPEC.md §Iteration Order. - */ - #leftTokens = []; - #rightMemory; - #tests; - /** - * @param rightMemory Alpha memory supplying candidate blocking facts. - * @param tests Equality tests that a fact must satisfy (against the - * left token's bindings) to count as a blocker. An empty - * list means any fact in `rightMemory` blocks. - */ - constructor(rightMemory, tests) { - this.#rightMemory = rightMemory; - this.#tests = tests; - } - /** Subscribe to downstream activations. Listeners fire in registration order. */ - addDownstreamActivate(listener) { - this.#activateListeners.push(listener); - } - /** Subscribe to downstream deactivations. Listeners fire in registration order. */ - addDownstreamDeactivate(listener) { - this.#deactivateListeners.push(listener); - } - /** - * Accept a new left token. - * - * Computes the initial block count against the current right memory. If - * zero, the token is emitted downstream immediately; otherwise it is held - * in internal state until enough blockers are retracted to drop the count - * back to zero. - */ - leftActivate(token) { - this.#leftTokens.push(token); - const count = this.#countMatchingFacts(token); - this.#blockCount.set(token, count); - if (count === 0) { - this.#passingTokens.add(token); - for (const l of this.#activateListeners) - l(token); - } - } - /** - * Withdraw a left token. - * - * Only fires downstream deactivate listeners if the token was currently - * passing — downstream never saw a blocked token, so retracting it would - * be a spurious event. - */ - leftDeactivate(token) { - const idx = this.#leftTokens.indexOf(token); - if (idx !== -1) - this.#leftTokens.splice(idx, 1); - const wasPassing = this.#passingTokens.delete(token); - this.#blockCount.delete(token); - if (wasPassing) { - for (const l of this.#deactivateListeners) - l(token); - } - } - /** - * Process a new right-side fact. - * - * For each known left token whose join tests pass with this fact, increment - * the block count. A 0→1 transition means the token just became blocked — - * fire downstream deactivate. - */ - rightActivate(id, _attr, value) { - for (const token of this.#leftTokens) { - if (!this.#factMatchesToken(token, id, value)) - continue; - const prev = this.#blockCount.get(token) ?? 0; - this.#blockCount.set(token, prev + 1); - if (prev === 0 && this.#passingTokens.has(token)) { - this.#passingTokens.delete(token); - for (const l of this.#deactivateListeners) - l(token); - } - } - } - /** - * Process a retracted right-side fact. - * - * For each known left token whose join tests pass with this fact, decrement - * the block count (clamped at zero against spurious retracts). A 1→0 - * transition means the token is newly unblocked — fire downstream activate. - */ - rightDeactivate(id, _attr, value) { - for (const token of this.#leftTokens) { - if (!this.#factMatchesToken(token, id, value)) - continue; - const prev = this.#blockCount.get(token) ?? 0; - const next = prev > 0 ? prev - 1 : 0; - this.#blockCount.set(token, next); - if (prev === 1 && next === 0 && !this.#passingTokens.has(token)) { - this.#passingTokens.add(token); - for (const l of this.#activateListeners) - l(token); - } - } - } - /** - * Count right facts that currently satisfy the join tests for `token`. - * - * Called only on {@link leftActivate} — incremental right-side events - * maintain the count thereafter. O(|rightMemory| · |tests|) per token. - */ - #countMatchingFacts(token) { - let count = 0; - for (const fact of this.#rightMemory.facts) { - if (this.#factMatchesToken(token, fact.id, fact.value)) - count++; - }; - return count; - } - /** - * Test whether a right fact `(rightId, rightValue)` satisfies every join - * test against `token`. - * - * A missing `leftVar` binding fails the test — this mirrors {@link JoinNode} - * and protects against builder bugs that reference an unbound variable - * despite the {@link UnsafeNegationError} guard. - */ - #factMatchesToken(token, rightId, rightValue) { - for (const test of this.#tests) { - const leftVal = token.bindings[test.leftVar]; - if (leftVal === undefined) - return false; - if (test.type === "idEquality") { - if (leftVal !== rightId) - return false; - } - else { - // valueEquality - if (leftVal !== rightValue) - return false; - } - }; - return true; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SyxDQUFDO2dCQUFFLEtBQUssRUFBRTtRQUNqRTtRQUNBLE9BQU8sS0FBSztJQUNkO0lBRUE7Ozs7Ozs7O0lBUUEsaUJBQWlCLENBQ2YsS0FBWSxFQUNaLE9BQWlCLEVBQ2pCLFVBQXFCO1FBRXJCLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUM5QixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDNUMsSUFBSSxPQUFPLEtBQUssU0FBUztnQkFBRSxPQUFPLEtBQUs7WUFDdkMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRTtnQkFDOUIsSUFBSSxPQUFPLEtBQUssT0FBTztvQkFBRSxPQUFPLEtBQUs7WUFDdkM7aUJBQU87Z0JBQ0w7Z0JBQ0EsSUFBSSxPQUFPLEtBQUssVUFBVTtvQkFBRSxPQUFPLEtBQUs7WUFDMUM7UUFDRjtRQUNBLE9BQU8sSUFBSTtJQUNiIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyIuLi9zcmMvbmVnYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBOZWdhdGlvbk5vZGUg4oCUIE5PVCBwYXR0ZXJuLCBwZXIgRG9vcmVuYm9zIDE5OTUgwqcyLjYuMS5cbiAqXG4gKiBBIG5lZ2F0aW9uIG5vZGUgcGFzc2VzIGEgbGVmdCB0b2tlbiBkb3duc3RyZWFtIG9ubHkgd2hlbiAqKnplcm8qKiBmYWN0cyBpblxuICogaXRzIHJpZ2h0IHtAbGluayBBbHBoYU1lbW9yeX0gc2F0aXNmeSB0aGUgbmVnYXRlZCBjb25kaXRpb24ncyBqb2luIHRlc3RzXG4gKiBhZ2FpbnN0IHRoYXQgdG9rZW4uIEFueSBtYXRjaGluZyBmYWN0IGluaGliaXRzIHRoZSB0b2tlbi5cbiAqXG4gKiAjIyMgQ291bnQtYmFzZWQgYm9va2tlZXBpbmdcbiAqXG4gKiBUaGUgbm9kZSBtYWludGFpbnMgYSBwZXItdG9rZW4gYmxvY2sgY291bnQ6IGhvdyBtYW55IHJpZ2h0IGZhY3RzIGN1cnJlbnRseVxuICogc2F0aXNmeSB0aGUgam9pbiB0ZXN0cyBmb3IgdGhhdCB0b2tlbi4gQSB0b2tlbiBpcyBkb3duc3RyZWFtLWFjdGl2ZSBpZmYgaXRzXG4gKiBjb3VudCBpcyB6ZXJvLiBUaGlzIGF2b2lkcyBzY2FubmluZyB0aGUgd2hvbGUgcmlnaHQgbWVtb3J5IG9uIGV2ZXJ5IHJpZ2h0LVxuICogc2lkZSBldmVudCDigJQgYSBjaGFuZ2Ugb25seSBuZWVkcyB0byBpbnNwZWN0IGxlZnQgdG9rZW5zIG9uY2UsIGFkanVzdCB0aGVpclxuICogY291bnRzLCBhbmQgZmlyZSBhY3RpdmF0ZS9kZWFjdGl2YXRlIHRyYW5zaXRpb25zIG9uIHRoZSAw4oaUMSBib3VuZGFyeS5cbiAqXG4gKiAjIyMgQWN0aXZhdGlvbiBmbG93XG4gKlxuICogLSAqKmxlZnRBY3RpdmF0ZSh0b2tlbikqKjogY291bnQgbWF0Y2hpbmcgcmlnaHQgZmFjdHMgb25jZTsgaWYgemVybywgZW1pdFxuICogICBkb3duc3RyZWFtIGFjdGl2YXRlIGltbWVkaWF0ZWx5LCBlbHNlIHJlY29yZCB0aGUgY291bnQgYW5kIHN0YXkgcXVpZXQuXG4gKiAtICoqbGVmdERlYWN0aXZhdGUodG9rZW4pKio6IGZvcmdldCB0aGUgdG9rZW47IGlmIGl0IHdhcyBjdXJyZW50bHkgcGFzc2luZyxcbiAqICAgZmlyZSBkb3duc3RyZWFtIGRlYWN0aXZhdGUuIE5vLW9wIGZvciBibG9ja2VkIHRva2VucyDigJQgZG93bnN0cmVhbSBuZXZlclxuICogICBzYXcgdGhlbS5cbiAqIC0gKipyaWdodEFjdGl2YXRlKGZhY3QpKio6IGZvciBlYWNoIGxlZnQgdG9rZW4gd2hvc2Ugam9pbiB0ZXN0cyBwYXNzIHdpdGhcbiAqICAgdGhpcyBmYWN0LCBpbmNyZW1lbnQgY291bnQuIElmIHRoZSBjb3VudCB0cmFuc2l0aW9ucyAw4oaSMSwgZmlyZSBkb3duc3RyZWFtXG4gKiAgIGRlYWN0aXZhdGUgKHRoZSB0b2tlbiB3YXMgcGFzc2luZyBhbmQgaXMgbm93IGJsb2NrZWQpLlxuICogLSAqKnJpZ2h0RGVhY3RpdmF0ZShmYWN0KSoqOiBmb3IgZWFjaCBsZWZ0IHRva2VuIHdob3NlIGpvaW4gdGVzdHMgcGFzcyB3aXRoXG4gKiAgIHRoaXMgZmFjdCwgZGVjcmVtZW50IGNvdW50IChjbGFtcGVkIGF0IDApLiBJZiB0aGUgY291bnQgdHJhbnNpdGlvbnMgMeKGkjAsXG4gKiAgIGZpcmUgZG93bnN0cmVhbSBhY3RpdmF0ZS5cbiAqXG4gKiAjIyMgVW5zYWZlIE5PVFxuICpcbiAqIEEgbmVnYXRlZCBjb25kaXRpb24gcmVmZXJlbmNpbmcgYSB2YXJpYWJsZSB0aGF0IGlzIG5vdCBib3VuZCBpbiB0aGUgbGVmdFxuICogdG9rZW4gaXMgXCJ1bnNhZmVcIiAoRG9vcmVuYm9zIMKnMi42LjEpIOKAlCB0aGUgbWF0Y2ggc2V0IGlzIHVuYm91bmRlZC4gV2VcbiAqIGV4cG9zZSB7QGxpbmsgVW5zYWZlTmVnYXRpb25FcnJvcn0gZm9yIHRoZSBydWxlIGJ1aWxkZXIgdG8gdGhyb3cgd2hlbiBpdFxuICogZGV0ZWN0cyB0aGlzIHN0YXRpY2FsbHkuIFRoZSBub2RlIGl0c2VsZiBhY2NlcHRzIGFueSB7QGxpbmsgSm9pblRlc3R9IGxpc3RcbiAqIGF0IGNvbnN0cnVjdGlvbjsgZGV0ZWN0aW9uIGxpdmVzIGF0IHJ1bGUtYnVpbGQgdGltZSB3aGVyZSB0aGUgYm91bmQtXG4gKiB2YXJpYWJsZSBzZXQgaXMga25vd24uXG4gKi9cbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiLi9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgQXR0cktleSwgRmFjdFZhbHVlIH0gZnJvbSBcIi4vd20uanNcIjtcbmltcG9ydCB0eXBlIHsgVG9rZW4gfSBmcm9tIFwiLi9iZXRhLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEFscGhhTWVtb3J5IH0gZnJvbSBcIi4vYWxwaGEuanNcIjtcbmltcG9ydCB0eXBlIHsgSm9pblRlc3QgfSBmcm9tIFwiLi9qb2luLmpzXCI7XG5cbi8qKlxuICogVGhyb3duIGJ5IHRoZSBydWxlIGJ1aWxkZXIgd2hlbiBhIG5lZ2F0ZWQgY29uZGl0aW9uIHJlZmVyZW5jZXMgYSB2YXJpYWJsZVxuICogdGhhdCBpcyBub3QgYm91bmQgYnkgYW55IGVhcmxpZXIgKHBvc2l0aXZlKSBjb25kaXRpb24gaW4gdGhlIHJ1bGUuXG4gKlxuICogVGhlIG5vZGUgaXRzZWxmIGRvZXMgbm90IHRocm93IHRoaXMg4oCUIGl0IGhhcyBubyB2aXNpYmlsaXR5IGludG8gdGhlIGZ1bGxcbiAqIHJ1bGUncyBiaW5kaW5nIHNldC4gVGhlIGVycm9yIHR5cGUgbGl2ZXMgaGVyZSBzbyB0aGUgYnVpbGRlciBjYW4gcmVwb3J0XG4gKiBpdCB3aXRoIGEgY29uc2lzdGVudCBuYW1lIGFuZCBjYWxsZXJzIGNhbiBjYXRjaCBpdCBzcGVjaWZpY2FsbHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBVbnNhZmVOZWdhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih1bmJvdW5kVmFyOiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIGBVbnNhZmVOZWdhdGlvbkVycm9yOiB2YXJpYWJsZSBcIiR7dW5ib3VuZFZhcn1cIiBpbiBOT1QgcGF0dGVybiBpcyBub3QgYm91bmQgYnkgYW55IHByZWNlZGluZyBjb25kaXRpb25gLFxuICAgICk7XG4gICAgdGhpcy5uYW1lID0gXCJVbnNhZmVOZWdhdGlvbkVycm9yXCI7XG4gIH1cbn1cblxuLyoqIERvd25zdHJlYW0gc3Vic2NyaWJlciBmaXJlZCB3aGVuIGEgdG9rZW4gYmVnaW5zIHBhc3NpbmcgKGNvdW50IGhpdCAwKS4gKi9cbnR5cGUgQWN0aXZhdGVMaXN0ZW5lciA9ICh0b2tlbjogVG9rZW4pID0+IHZvaWQ7XG4vKiogRG93bnN0cmVhbSBzdWJzY3JpYmVyIGZpcmVkIHdoZW4gYSB0b2tlbiBzdG9wcyBwYXNzaW5nIChjb3VudCBsZWZ0IDApLiAqL1xudHlwZSBEZWFjdGl2YXRlTGlzdGVuZXIgPSAodG9rZW46IFRva2VuKSA9PiB2b2lkO1xuXG4vKipcbiAqIEJldGEtbmV0d29yayBOT1Qgbm9kZS5cbiAqXG4gKiBMZWZ0IGlucHV0OiB0b2tlbnMgZnJvbSBhbiB1cHN0cmVhbSB7QGxpbmsgQmV0YU1lbW9yeX0gLyB7QGxpbmsgSm9pbk5vZGV9LlxuICogUmlnaHQgaW5wdXQ6IGFuIHtAbGluayBBbHBoYU1lbW9yeX0gb2YgZmFjdHMgdGhhdCBtYXRjaCB0aGUgbmVnYXRlZCBwYXR0ZXJuJ3NcbiAqIGNvbnN0YW50IHRlc3RzLiBUaGUgbm9kZSBkb2VzIG5vdCBzdWJzY3JpYmUgdG8gdGhlIGFscGhhIG1lbW9yeSBpdHNlbGYg4oCUXG4gKiB0aGUgbmV0d29yayB3aXJpbmcgKHR5cGljYWxseSB0aGUgYnVpbGRlcikgY2FsbHMge0BsaW5rIHJpZ2h0QWN0aXZhdGV9IGFuZFxuICoge0BsaW5rIHJpZ2h0RGVhY3RpdmF0ZX0gd2hlbiBhbHBoYS1tZW1vcnkgbWVtYmVyc2hpcCBjaGFuZ2VzLlxuICpcbiAqIE91dHB1dDogYSBzdWJzZXQgb2YgbGVmdCB0b2tlbnMgKG5ldmVyIGV4dGVuZGVkIOKAlCBuZWdhdGlvbiBjb250cmlidXRlcyBub1xuICogbmV3IGJpbmRpbmdzKSwgZW1pdHRlZCB0byByZWdpc3RlcmVkIGRvd25zdHJlYW0gYWN0aXZhdGUvZGVhY3RpdmF0ZVxuICogbGlzdGVuZXJzIGluIHJlZ2lzdHJhdGlvbiBvcmRlci5cbiAqL1xuZXhwb3J0IGNsYXNzIE5lZ2F0aW9uTm9kZSB7XG4gIHJlYWRvbmx5ICNhY3RpdmF0ZUxpc3RlbmVyczogQWN0aXZhdGVMaXN0ZW5lcltdID0gW107XG4gIHJlYWRvbmx5ICNkZWFjdGl2YXRlTGlzdGVuZXJzOiBEZWFjdGl2YXRlTGlzdGVuZXJbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBQZXItdG9rZW4gYmxvY2sgY291bnQ6IG51bWJlciBvZiByaWdodCBmYWN0cyBjdXJyZW50bHkgc2F0aXNmeWluZyB0aGVcbiAgICogam9pbiB0ZXN0cyBmb3IgdGhhdCB0b2tlbi4gQSB0b2tlbiBwYXNzZXMgZG93bnN0cmVhbSBpZmYgaXRzIGNvdW50IGlzXG4gICAqIHplcm8uIEFic2VudCA9IHRva2VuIHVua25vd24gKG5ldmVyIGxlZnQtYWN0aXZhdGVkIG9yIGFscmVhZHlcbiAgICogbGVmdC1kZWFjdGl2YXRlZCkuXG4gICAqL1xuICByZWFkb25seSAjYmxvY2tDb3VudCA9IG5ldyBNYXA8VG9rZW4sIG51bWJlcj4oKTtcblxuICAvKipcbiAgICogVG9rZW5zIHRoYXQgYXJlIGN1cnJlbnRseSBlbWl0dGVkIGRvd25zdHJlYW0gKGNvdW50ID09PSAwIGFuZCBub3QgeWV0XG4gICAqIGxlZnQtZGVhY3RpdmF0ZWQpLiBNYWludGFpbmVkIGluIGxvY2stc3RlcCB3aXRoIHtAbGluayAjYmxvY2tDb3VudH0gc29cbiAgICogdGhhdCB3ZSBrbm93IHdoZXRoZXIgYSBkZWFjdGl2YXRlIHRyYW5zaXRpb24gYWN0dWFsbHkgbmVlZHMgdG8gZmlyZS5cbiAgICovXG4gIHJlYWRvbmx5ICNwYXNzaW5nVG9rZW5zID0gbmV3IFNldDxUb2tlbj4oKTtcblxuICAvKipcbiAgICogRXZlcnkgbGVmdCB0b2tlbiB3ZSd2ZSBzZWVuIGFuZCBub3QgeWV0IGRlYWN0aXZhdGVkLCBpbiBpbnNlcnRpb24gb3JkZXIuXG4gICAqIFJpZ2h0LXNpZGUgZXZlbnRzIGl0ZXJhdGUgdGhpcyB0byBkZXRlcm1pbmUgd2hpY2ggY291bnRzIHRvIGFkanVzdC5cbiAgICogS2VwdCBhcyBhbiBhcnJheSAobm90IGEgU2V0KSBzbyBpdGVyYXRpb24gb3JkZXIgaXMgZGV0ZXJtaW5pc3RpYyBwZXJcbiAgICogU1BFQy5tZCDCp0l0ZXJhdGlvbiBPcmRlci5cbiAgICovXG4gIHJlYWRvbmx5ICNsZWZ0VG9rZW5zOiBUb2tlbltdID0gW107XG5cbiAgcmVhZG9ubHkgI3JpZ2h0TWVtb3J5OiBBbHBoYU1lbW9yeTtcbiAgcmVhZG9ubHkgI3Rlc3RzOiByZWFkb25seSBKb2luVGVzdFtdO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gcmlnaHRNZW1vcnkgQWxwaGEgbWVtb3J5IHN1cHBseWluZyBjYW5kaWRhdGUgYmxvY2tpbmcgZmFjdHMuXG4gICAqIEBwYXJhbSB0ZXN0cyAgICAgICBFcXVhbGl0eSB0ZXN0cyB0aGF0IGEgZmFjdCBtdXN0IHNhdGlzZnkgKGFnYWluc3QgdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICBsZWZ0IHRva2VuJ3MgYmluZGluZ3MpIHRvIGNvdW50IGFzIGEgYmxvY2tlci4gQW4gZW1wdHlcbiAgICogICAgICAgICAgICAgICAgICAgIGxpc3QgbWVhbnMgYW55IGZhY3QgaW4gYHJpZ2h0TWVtb3J5YCBibG9ja3MuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihyaWdodE1lbW9yeTogQWxwaGFNZW1vcnksIHRlc3RzOiByZWFkb25seSBKb2luVGVzdFtdKSB7XG4gICAgdGhpcy4jcmlnaHRNZW1vcnkgPSByaWdodE1lbW9yeTtcbiAgICB0aGlzLiN0ZXN0cyA9IHRlc3RzO1xuICB9XG5cbiAgLyoqIFN1YnNjcmliZSB0byBkb3duc3RyZWFtIGFjdGl2YXRpb25zLiBMaXN0ZW5lcnMgZmlyZSBpbiByZWdpc3RyYXRpb24gb3JkZXIuICovXG4gIGFkZERvd25zdHJlYW1BY3RpdmF0ZShsaXN0ZW5lcjogQWN0aXZhdGVMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuI2FjdGl2YXRlTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqIFN1YnNjcmliZSB0byBkb3duc3RyZWFtIGRlYWN0aXZhdGlvbnMuIExpc3RlbmVycyBmaXJlIGluIHJlZ2lzdHJhdGlvbiBvcmRlci4gKi9cbiAgYWRkRG93bnN0cmVhbURlYWN0aXZhdGUobGlzdGVuZXI6IERlYWN0aXZhdGVMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuI2RlYWN0aXZhdGVMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICAvKipcbiAgICogQWNjZXB0IGEgbmV3IGxlZnQgdG9rZW4uXG4gICAqXG4gICAqIENvbXB1dGVzIHRoZSBpbml0aWFsIGJsb2NrIGNvdW50IGFnYWluc3QgdGhlIGN1cnJlbnQgcmlnaHQgbWVtb3J5LiBJZlxuICAgKiB6ZXJvLCB0aGUgdG9rZW4gaXMgZW1pdHRlZCBkb3duc3RyZWFtIGltbWVkaWF0ZWx5OyBvdGhlcndpc2UgaXQgaXMgaGVsZFxuICAgKiBpbiBpbnRlcm5hbCBzdGF0ZSB1bnRpbCBlbm91Z2ggYmxvY2tlcnMgYXJlIHJldHJhY3RlZCB0byBkcm9wIHRoZSBjb3VudFxuICAgKiBiYWNrIHRvIHplcm8uXG4gICAqL1xuICBsZWZ0QWN0aXZhdGUodG9rZW46IFRva2VuKTogdm9pZCB7XG4gICAgdGhpcy4jbGVmdFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICBjb25zdCBjb3VudCA9IHRoaXMuI2NvdW50TWF0Y2hpbmdGYWN0cyh0b2tlbik7XG4gICAgdGhpcy4jYmxvY2tDb3VudC5zZXQodG9rZW4sIGNvdW50KTtcblxuICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgdGhpcy4jcGFzc2luZ1Rva2Vucy5hZGQodG9rZW4pO1xuICAgICAgZm9yIChjb25zdCBsIG9mIHRoaXMuI2FjdGl2YXRlTGlzdGVuZXJzKSBsKHRva2VuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2l0aGRyYXcgYSBsZWZ0IHRva2VuLlxuICAgKlxuICAgKiBPbmx5IGZpcmVzIGRvd25zdHJlYW0gZGVhY3RpdmF0ZSBsaXN0ZW5lcnMgaWYgdGhlIHRva2VuIHdhcyBjdXJyZW50bHlcbiAgICogcGFzc2luZyDigJQgZG93bnN0cmVhbSBuZXZlciBzYXcgYSBibG9ja2VkIHRva2VuLCBzbyByZXRyYWN0aW5nIGl0IHdvdWxkXG4gICAqIGJlIGEgc3B1cmlvdXMgZXZlbnQuXG4gICAqL1xuICBsZWZ0RGVhY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICBjb25zdCBpZHggPSB0aGlzLiNsZWZ0VG9rZW5zLmluZGV4T2YodG9rZW4pO1xuICAgIGlmIChpZHggIT09IC0xKSB0aGlzLiNsZWZ0VG9rZW5zLnNwbGljZShpZHgsIDEpO1xuXG4gICAgY29uc3Qgd2FzUGFzc2luZyA9IHRoaXMuI3Bhc3NpbmdUb2tlbnMuZGVsZXRlKHRva2VuKTtcbiAgICB0aGlzLiNibG9ja0NvdW50LmRlbGV0ZSh0b2tlbik7XG5cbiAgICBpZiAod2FzUGFzc2luZykge1xuICAgICAgZm9yIChjb25zdCBsIG9mIHRoaXMuI2RlYWN0aXZhdGVMaXN0ZW5lcnMpIGwodG9rZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGEgbmV3IHJpZ2h0LXNpZGUgZmFjdC5cbiAgICpcbiAgICogRm9yIGVhY2gga25vd24gbGVmdCB0b2tlbiB3aG9zZSBqb2luIHRlc3RzIHBhc3Mgd2l0aCB0aGlzIGZhY3QsIGluY3JlbWVudFxuICAgKiB0aGUgYmxvY2sgY291bnQuIEEgMOKGkjEgdHJhbnNpdGlvbiBtZWFucyB0aGUgdG9rZW4ganVzdCBiZWNhbWUgYmxvY2tlZCDigJRcbiAgICogZmlyZSBkb3duc3RyZWFtIGRlYWN0aXZhdGUuXG4gICAqL1xuICByaWdodEFjdGl2YXRlKGlkOiBFbnRpdHlJZCwgX2F0dHI6IEF0dHJLZXksIHZhbHVlOiBGYWN0VmFsdWUpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRoaXMuI2xlZnRUb2tlbnMpIHtcbiAgICAgIGlmICghdGhpcy4jZmFjdE1hdGNoZXNUb2tlbih0b2tlbiwgaWQsIHZhbHVlKSkgY29udGludWU7XG4gICAgICBjb25zdCBwcmV2ID0gdGhpcy4jYmxvY2tDb3VudC5nZXQodG9rZW4pID8/IDA7XG4gICAgICB0aGlzLiNibG9ja0NvdW50LnNldCh0b2tlbiwgcHJldiArIDEpO1xuXG4gICAgICBpZiAocHJldiA9PT0gMCAmJiB0aGlzLiNwYXNzaW5nVG9rZW5zLmhhcyh0b2tlbikpIHtcbiAgICAgICAgdGhpcy4jcGFzc2luZ1Rva2Vucy5kZWxldGUodG9rZW4pO1xuICAgICAgICBmb3IgKGNvbnN0IGwgb2YgdGhpcy4jZGVhY3RpdmF0ZUxpc3RlbmVycykgbCh0b2tlbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgYSByZXRyYWN0ZWQgcmlnaHQtc2lkZSBmYWN0LlxuICAgKlxuICAgKiBGb3IgZWFjaCBrbm93biBsZWZ0IHRva2VuIHdob3NlIGpvaW4gdGVzdHMgcGFzcyB3aXRoIHRoaXMgZmFjdCwgZGVjcmVtZW50XG4gICAqIHRoZSBibG9jayBjb3VudCAoY2xhbXBlZCBhdCB6ZXJvIGFnYWluc3Qgc3B1cmlvdXMgcmV0cmFjdHMpLiBBIDHihpIwXG4gICAqIHRyYW5zaXRpb24gbWVhbnMgdGhlIHRva2VuIGlzIG5ld2x5IHVuYmxvY2tlZCDigJQgZmlyZSBkb3duc3RyZWFtIGFjdGl2YXRlLlxuICAgKi9cbiAgcmlnaHREZWFjdGl2YXRlKGlkOiBFbnRpdHlJZCwgX2F0dHI6IEF0dHJLZXksIHZhbHVlOiBGYWN0VmFsdWUpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRoaXMuI2xlZnRUb2tlbnMpIHtcbiAgICAgIGlmICghdGhpcy4jZmFjdE1hdGNoZXNUb2tlbih0b2tlbiwgaWQsIHZhbHVlKSkgY29udGludWU7XG4gICAgICBjb25zdCBwcmV2ID0gdGhpcy4jYmxvY2tDb3VudC5nZXQodG9rZW4pID8/IDA7XG4gICAgICBjb25zdCBuZXh0ID0gcHJldiA+IDAgPyBwcmV2IC0gMSA6IDA7XG4gICAgICB0aGlzLiNibG9ja0NvdW50LnNldCh0b2tlbiwgbmV4dCk7XG5cbiAgICAgIGlmIChwcmV2ID09PSAxICYmIG5leHQgPT09IDAgJiYgIXRoaXMuI3Bhc3NpbmdUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgICB0aGlzLiNwYXNzaW5nVG9rZW5zLmFkZCh0b2tlbik7XG4gICAgICAgIGZvciAoY29uc3QgbCBvZiB0aGlzLiNhY3RpdmF0ZUxpc3RlbmVycykgbCh0b2tlbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvdW50IHJpZ2h0IGZhY3RzIHRoYXQgY3VycmVudGx5IHNhdGlzZnkgdGhlIGpvaW4gdGVzdHMgZm9yIGB0b2tlbmAuXG4gICAqXG4gICAqIENhbGxlZCBvbmx5IG9uIHtAbGluayBsZWZ0QWN0aXZhdGV9IOKAlCBpbmNyZW1lbnRhbCByaWdodC1zaWRlIGV2ZW50c1xuICAgKiBtYWludGFpbiB0aGUgY291bnQgdGhlcmVhZnRlci4gTyh8cmlnaHRNZW1vcnl8IMK3IHx0ZXN0c3wpIHBlciB0b2tlbi5cbiAgICovXG4gICNjb3VudE1hdGNoaW5nRmFjdHModG9rZW46IFRva2VuKTogbnVtYmVyIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGZvciAoY29uc3QgZmFjdCBvZiB0aGlzLiNyaWdodE1lbW9yeS5mYWN0cykge1xuICAgICAgaWYgKHRoaXMuI2ZhY3RNYXRjaGVzVG9rZW4odG9rZW4sIGZhY3QuaWQsIGZhY3QudmFsdWUpKSBjb3VudCsrO1xuICAgIH1cbiAgICByZXR1cm4gY291bnQ7XG4gIH1cblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIGEgcmlnaHQgZmFjdCBgKHJpZ2h0SWQsIHJpZ2h0VmFsdWUpYCBzYXRpc2ZpZXMgZXZlcnkgam9pblxuICAgKiB0ZXN0IGFnYWluc3QgYHRva2VuYC5cbiAgICpcbiAgICogQSBtaXNzaW5nIGBsZWZ0VmFyYCBiaW5kaW5nIGZhaWxzIHRoZSB0ZXN0IOKAlCB0aGlzIG1pcnJvcnMge0BsaW5rIEpvaW5Ob2RlfVxuICAgKiBhbmQgcHJvdGVjdHMgYWdhaW5zdCBidWlsZGVyIGJ1Z3MgdGhhdCByZWZlcmVuY2UgYW4gdW5ib3VuZCB2YXJpYWJsZVxuICAgKiBkZXNwaXRlIHRoZSB7QGxpbmsgVW5zYWZlTmVnYXRpb25FcnJvcn0gZ3VhcmQuXG4gICAqL1xuICAjZmFjdE1hdGNoZXNUb2tlbihcbiAgICB0b2tlbjogVG9rZW4sXG4gICAgcmlnaHRJZDogRW50aXR5SWQsXG4gICAgcmlnaHRWYWx1ZTogRmFjdFZhbHVlLFxuICApOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IHRlc3Qgb2YgdGhpcy4jdGVzdHMpIHtcbiAgICAgIGNvbnN0IGxlZnRWYWwgPSB0b2tlbi5iaW5kaW5nc1t0ZXN0LmxlZnRWYXJdO1xuICAgICAgaWYgKGxlZnRWYWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKHRlc3QudHlwZSA9PT0gXCJpZEVxdWFsaXR5XCIpIHtcbiAgICAgICAgaWYgKGxlZnRWYWwgIT09IHJpZ2h0SWQpIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHZhbHVlRXF1YWxpdHlcbiAgICAgICAgaWYgKGxlZnRWYWwgIT09IHJpZ2h0VmFsdWUpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9yZXRlL2Rpc3QvbmVnYXRpb24uanMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/df19234216ec42bf89b4594b108403573b310d4d b/7xOfJqsDU787fe61oSCq1/web/df19234216ec42bf89b4594b108403573b310d4d deleted file mode 100644 index d2c6c94..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/df19234216ec42bf89b4594b108403573b310d4d +++ /dev/null @@ -1,76 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "EventLog", { enumerable: true, configurable: true, get(){ try { return EventLog } catch {} }}); -class EventLog { - #events = []; - #seq = 0; - #clock; - /** - * @param clock — Optional wall-clock function. Defaults to `Date.now`. - * Inject a deterministic clock (e.g. `() => 0`) in tests and replay - * contexts where timestamp values must be stable across runs. - */ - constructor(clock = Date.now) { - this.#clock = clock; - } - /** Number of events logged. */ - get length() { - return this.#events.length; - } - /** - * Highest sequence number currently in the log (0 if empty). - * - * The next appended event will carry `latestSeq + 1`. - */ - get latestSeq() { - return this.#seq; - } - /** Record an insert of `(id, attr, value)`. */ - appendInsert(id, attr, value) { - this.#events.push({ - seq: ++this.#seq, - ts: this.#clock(), - kind: "insert", - id, - attr, - value, - }); - } - /** - * Record a retract of `(id, attr)` with its previous `value` captured - * at the call site (so replay can reconstruct the missing fact). - */ - appendRetract(id, attr, value) { - this.#events.push({ - seq: ++this.#seq, - ts: this.#clock(), - kind: "retract", - id, - attr, - value, - }); - } - /** Record a rule firing by rule name. */ - appendFire(ruleName) { - this.#events.push({ - seq: ++this.#seq, - ts: this.#clock(), - kind: "fire", - ruleName, - }); - } - /** - * Return all events whose `seq` is strictly greater than `afterSeq`. - * - * Pass `0` to retrieve the full log. Callers typically store the - * last-seen seq and poll with `getSince(lastSeen)` to catch up. - */ - getSince(afterSeq) { - return this.#events.filter((e) => e.seq > afterSeq); - } - /** Return a shallow copy of all events. */ - getAll() { - return [...this.#events]; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQStDTSxNQUFPLFFBQVE7SUFDVixPQUFPLEdBQWUsRUFBRTtJQUNqQyxJQUFJLEdBQUcsQ0FBQztJQUNDLE1BQU07SUFFZjs7Ozs7SUFLQSxZQUFZLFFBQXNCLElBQUksQ0FBQyxHQUFHO1FBQ3hDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSztJQUNyQjtJQUVBO0lBQ0EsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07SUFDNUI7SUFFQTs7Ozs7SUFLQSxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxJQUFJO0lBQ2xCO0lBRUE7SUFDQSxZQUFZLENBQUMsRUFBWSxFQUFFLElBQWEsRUFBRSxLQUFnQjtRQUN4RCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNoQixHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNoQixFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNqQixJQUFJLEVBQUUsUUFBUTtZQUNkLEVBQUU7WUFDRixJQUFJO1lBQ0osS0FBSztTQUNOLENBQUM7SUFDSjtJQUVBOzs7O0lBSUEsYUFBYSxDQUFDLEVBQVksRUFBRSxJQUFhLEVBQUUsS0FBZ0I7UUFDekQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEIsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDaEIsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDakIsSUFBSSxFQUFFLFNBQVM7WUFDZixFQUFFO1lBQ0YsSUFBSTtZQUNKLEtBQUs7U0FDTixDQUFDO0lBQ0o7SUFFQTtJQUNBLFVBQVUsQ0FBQyxRQUFnQjtRQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNoQixHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNoQixFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNqQixJQUFJLEVBQUUsTUFBTTtZQUNaLFFBQVE7U0FDVCxDQUFDO0lBQ0o7SUFFQTs7Ozs7O0lBTUEsUUFBUSxDQUFDLFFBQWdCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDO0lBQ3JEO0lBRUE7SUFDQSxNQUFNO1FBQ0osT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUMxQiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2V2ZW50bG9nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXZlbnRMb2cg4oCUIGFwcGVuZC1vbmx5IGV2ZW50IGxvZyBmb3IgU2Vzc2lvbiBtdXRhdGlvbnMuXG4gKlxuICogUGVyIFNQRUMubWQgwqdSZXRlIElJIFJlZmVyZW5jZSBUYXJnZXQsIHRoZSBlbmdpbmUgbXVzdCBzdXBwb3J0XG4gKiByZXBsYXktZGV0ZXJtaW5pc206IGdpdmVuIHRoZSBzYW1lIHNjaGVtYSwgcnVsZXMsIGFuZCBldmVudCBsb2csXG4gKiByZXBsYXlpbmcgZXZlbnRzIHJlcHJvZHVjZXMgaWRlbnRpY2FsIHdvcmtpbmctbWVtb3J5IGFuZCBmaXJpbmdcbiAqIHNlcXVlbmNlcy4gVGhlIEV2ZW50TG9nIGlzIHRoZSBhdXRob3JpdGF0aXZlIHRyYW5zY3JpcHQgY29uc3VtZWQgYnlcbiAqIHRoZSB0aW1lLXRyYXZlbCBhbmQgcmVwbGF5IHN5c3RlbXMgKFBoYXNlIDMpLlxuICpcbiAqIERlc2lnbiBpbnZhcmlhbnRzOlxuICogICAtIEFwcGVuZC1vbmx5LiBFdmVudHMgYXJlIG5ldmVyIHJld3JpdHRlbiBvciBkZWxldGVkLlxuICogICAtIFNlcXVlbmNlIG51bWJlcnMgYXJlIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZywgc3RhcnRpbmcgYXQgMS5cbiAqICAgLSBEZXJpdmVkIGZhY3RzIChuZWdhdGl2ZSBFbnRpdHlJZHMpIGFyZSBOT1QgbG9nZ2VkIOKAlCBzZWUgU1BFQy5tZFxuICogICAgIMKnVHJ1dGggTWFpbnRlbmFuY2U6IGRlcml2ZWQgZmFjdHMgYXJlIHJlLWRlcml2ZWQgb24gcmVwbGF5LlxuICogICAgIFRoaXMgZXhjbHVzaW9uIGlzIGVuZm9yY2VkIGF0IHRoZSBTZXNzaW9uIGludGVncmF0aW9uIGJvdW5kYXJ5XG4gKiAgICAgKHNlZSBzZXNzaW9uLnRzKSwgbm90IGluc2lkZSB0aGUgRXZlbnRMb2cgaXRzZWxmLlxuICovXG5pbXBvcnQgdHlwZSB7IEVudGl0eUlkIH0gZnJvbSBcIi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEF0dHJLZXksIEZhY3RWYWx1ZSB9IGZyb20gXCIuL3dtLmpzXCI7XG5cbi8qKiBLaW5kIG9mIGEgbG9nZ2VkIGV2ZW50LiAqL1xuZXhwb3J0IHR5cGUgRXZlbnRLaW5kID0gXCJpbnNlcnRcIiB8IFwicmV0cmFjdFwiIHwgXCJmaXJlXCI7XG5cbi8qKlxuICogQSBzaW5nbGUgZW50cnkgaW4gdGhlIHtAbGluayBFdmVudExvZ30uXG4gKlxuICogRmllbGRzIGFyZSBgcmVhZG9ubHlgIHRvIHJlaW5mb3JjZSB0aGUgYXBwZW5kLW9ubHkgY29udHJhY3Q7IG91dHNpZGVcbiAqIGNhbGxlcnMgb2J0YWluIGV2ZW50cyB0aHJvdWdoIHtAbGluayBFdmVudExvZy5nZXRBbGx9IC9cbiAqIHtAbGluayBFdmVudExvZy5nZXRTaW5jZX0sIHdoaWNoIHJldHVybiBhIHNoYWxsb3cgY29weS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dFdmVudCB7XG4gIC8qKiBNb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgc2VxdWVuY2UgbnVtYmVyLCBzdGFydGluZyBhdCAxLiAqL1xuICByZWFkb25seSBzZXE6IG51bWJlcjtcbiAgLyoqIFdhbGwtY2xvY2sgdGltZXN0YW1wIChtcyBzaW5jZSBlcG9jaCkuIENhcHR1cmVkIGF0IGFwcGVuZCB0aW1lLiAqL1xuICByZWFkb25seSB0czogbnVtYmVyO1xuICAvKiogRXZlbnQga2luZC4gKi9cbiAgcmVhZG9ubHkga2luZDogRXZlbnRLaW5kO1xuICAvKiogRW50aXR5IGlkIOKAlCBwcmVzZW50IGZvciBcImluc2VydFwiIGFuZCBcInJldHJhY3RcIi4gKi9cbiAgcmVhZG9ubHkgaWQ/OiBFbnRpdHlJZDtcbiAgLyoqIEF0dHJpYnV0ZSBuYW1lIOKAlCBwcmVzZW50IGZvciBcImluc2VydFwiIGFuZCBcInJldHJhY3RcIi4gKi9cbiAgcmVhZG9ubHkgYXR0cj86IEF0dHJLZXk7XG4gIC8qKiBGYWN0IHZhbHVlIOKAlCBwcmVzZW50IGZvciBcImluc2VydFwiIGFuZCBcInJldHJhY3RcIi4gKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBGYWN0VmFsdWU7XG4gIC8qKiBSdWxlIG5hbWUg4oCUIHByZXNlbnQgZm9yIFwiZmlyZVwiLiAqL1xuICByZWFkb25seSBydWxlTmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEV2ZW50TG9nIHtcbiAgcmVhZG9ubHkgI2V2ZW50czogTG9nRXZlbnRbXSA9IFtdO1xuICAjc2VxID0gMDtcbiAgcmVhZG9ubHkgI2Nsb2NrOiAoKSA9PiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBjbG9jayDigJQgT3B0aW9uYWwgd2FsbC1jbG9jayBmdW5jdGlvbi4gRGVmYXVsdHMgdG8gYERhdGUubm93YC5cbiAgICogICBJbmplY3QgYSBkZXRlcm1pbmlzdGljIGNsb2NrIChlLmcuIGAoKSA9PiAwYCkgaW4gdGVzdHMgYW5kIHJlcGxheVxuICAgKiAgIGNvbnRleHRzIHdoZXJlIHRpbWVzdGFtcCB2YWx1ZXMgbXVzdCBiZSBzdGFibGUgYWNyb3NzIHJ1bnMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihjbG9jazogKCkgPT4gbnVtYmVyID0gRGF0ZS5ub3cpIHtcbiAgICB0aGlzLiNjbG9jayA9IGNsb2NrO1xuICB9XG5cbiAgLyoqIE51bWJlciBvZiBldmVudHMgbG9nZ2VkLiAqL1xuICBnZXQgbGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogSGlnaGVzdCBzZXF1ZW5jZSBudW1iZXIgY3VycmVudGx5IGluIHRoZSBsb2cgKDAgaWYgZW1wdHkpLlxuICAgKlxuICAgKiBUaGUgbmV4dCBhcHBlbmRlZCBldmVudCB3aWxsIGNhcnJ5IGBsYXRlc3RTZXEgKyAxYC5cbiAgICovXG4gIGdldCBsYXRlc3RTZXEoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jc2VxO1xuICB9XG5cbiAgLyoqIFJlY29yZCBhbiBpbnNlcnQgb2YgYChpZCwgYXR0ciwgdmFsdWUpYC4gKi9cbiAgYXBwZW5kSW5zZXJ0KGlkOiBFbnRpdHlJZCwgYXR0cjogQXR0cktleSwgdmFsdWU6IEZhY3RWYWx1ZSk6IHZvaWQge1xuICAgIHRoaXMuI2V2ZW50cy5wdXNoKHtcbiAgICAgIHNlcTogKyt0aGlzLiNzZXEsXG4gICAgICB0czogdGhpcy4jY2xvY2soKSxcbiAgICAgIGtpbmQ6IFwiaW5zZXJ0XCIsXG4gICAgICBpZCxcbiAgICAgIGF0dHIsXG4gICAgICB2YWx1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmQgYSByZXRyYWN0IG9mIGAoaWQsIGF0dHIpYCB3aXRoIGl0cyBwcmV2aW91cyBgdmFsdWVgIGNhcHR1cmVkXG4gICAqIGF0IHRoZSBjYWxsIHNpdGUgKHNvIHJlcGxheSBjYW4gcmVjb25zdHJ1Y3QgdGhlIG1pc3NpbmcgZmFjdCkuXG4gICAqL1xuICBhcHBlbmRSZXRyYWN0KGlkOiBFbnRpdHlJZCwgYXR0cjogQXR0cktleSwgdmFsdWU6IEZhY3RWYWx1ZSk6IHZvaWQge1xuICAgIHRoaXMuI2V2ZW50cy5wdXNoKHtcbiAgICAgIHNlcTogKyt0aGlzLiNzZXEsXG4gICAgICB0czogdGhpcy4jY2xvY2soKSxcbiAgICAgIGtpbmQ6IFwicmV0cmFjdFwiLFxuICAgICAgaWQsXG4gICAgICBhdHRyLFxuICAgICAgdmFsdWUsXG4gICAgfSk7XG4gIH1cblxuICAvKiogUmVjb3JkIGEgcnVsZSBmaXJpbmcgYnkgcnVsZSBuYW1lLiAqL1xuICBhcHBlbmRGaXJlKHJ1bGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLiNldmVudHMucHVzaCh7XG4gICAgICBzZXE6ICsrdGhpcy4jc2VxLFxuICAgICAgdHM6IHRoaXMuI2Nsb2NrKCksXG4gICAgICBraW5kOiBcImZpcmVcIixcbiAgICAgIHJ1bGVOYW1lLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbGwgZXZlbnRzIHdob3NlIGBzZXFgIGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiBgYWZ0ZXJTZXFgLlxuICAgKlxuICAgKiBQYXNzIGAwYCB0byByZXRyaWV2ZSB0aGUgZnVsbCBsb2cuIENhbGxlcnMgdHlwaWNhbGx5IHN0b3JlIHRoZVxuICAgKiBsYXN0LXNlZW4gc2VxIGFuZCBwb2xsIHdpdGggYGdldFNpbmNlKGxhc3RTZWVuKWAgdG8gY2F0Y2ggdXAuXG4gICAqL1xuICBnZXRTaW5jZShhZnRlclNlcTogbnVtYmVyKTogcmVhZG9ubHkgTG9nRXZlbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5maWx0ZXIoKGUpID0+IGUuc2VxID4gYWZ0ZXJTZXEpO1xuICB9XG5cbiAgLyoqIFJldHVybiBhIHNoYWxsb3cgY29weSBvZiBhbGwgZXZlbnRzLiAqL1xuICBnZXRBbGwoKTogcmVhZG9ubHkgTG9nRXZlbnRbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLiNldmVudHNdO1xuICB9XG59XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvcmV0ZS9kaXN0L2V2ZW50bG9nLmpzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/e040cfeceb8ca2eeee50842dcbbea74e2340aa05 b/7xOfJqsDU787fe61oSCq1/web/e040cfeceb8ca2eeee50842dcbbea74e2340aa05 deleted file mode 100644 index 8068fc0..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/e040cfeceb8ca2eeee50842dcbbea74e2340aa05 +++ /dev/null @@ -1,5 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "default", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_export_default__ } catch {} }}); -const __vite_ssr_export_default__ = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%20width='45'%20height='45'%3e%3cpath%20d='m%2022.5,9%20c%20-2.21,0%20-4,1.79%20-4,4%200,0.89%200.29,1.71%200.78,2.38%20C%2017.33,16.5%2016,18.59%2016,21%20c%200,2.03%200.94,3.84%202.41,5.03%20C%2015.41,27.09%2011,31.58%2011,39.5%20H%2034%20C%2034,31.58%2029.59,27.09%2026.59,26.03%2028.06,24.84%2029,23.03%2029,21%2029,18.59%2027.67,16.5%2025.72,15.38%2026.21,14.71%2026.5,13.89%2026.5,13%20c%200,-2.21%20-1.79,-4%20-4,-4%20z'%20style='opacity:1;%20fill:%23000000;%20fill-opacity:1;%20fill-rule:nonzero;%20stroke:%23000000;%20stroke-width:1.5;%20stroke-linecap:round;%20stroke-linejoin:miter;%20stroke-miterlimit:4;%20stroke-dasharray:none;%20stroke-opacity:1;'/%3e%3c/svg%3e" - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJsYWNrLXBhd24uc3ZnIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzYz94bWwlMjB2ZXJzaW9uPScxLjAnJTIwZW5jb2Rpbmc9J1VURi04JyUyMHN0YW5kYWxvbmU9J25vJz8lM2UlM2MhRE9DVFlQRSUyMHN2ZyUyMFBVQkxJQyUyMCctLy9XM0MvL0RURCUyMFNWRyUyMDEuMS8vRU4nJTIwJ2h0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCclM2UlM2NzdmclMjB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTIwdmVyc2lvbj0nMS4xJyUyMHdpZHRoPSc0NSclMjBoZWlnaHQ9JzQ1JyUzZSUzY3BhdGglMjBkPSdtJTIwMjIuNSw5JTIwYyUyMC0yLjIxLDAlMjAtNCwxLjc5JTIwLTQsNCUyMDAsMC44OSUyMDAuMjksMS43MSUyMDAuNzgsMi4zOCUyMEMlMjAxNy4zMywxNi41JTIwMTYsMTguNTklMjAxNiwyMSUyMGMlMjAwLDIuMDMlMjAwLjk0LDMuODQlMjAyLjQxLDUuMDMlMjBDJTIwMTUuNDEsMjcuMDklMjAxMSwzMS41OCUyMDExLDM5LjUlMjBIJTIwMzQlMjBDJTIwMzQsMzEuNTglMjAyOS41OSwyNy4wOSUyMDI2LjU5LDI2LjAzJTIwMjguMDYsMjQuODQlMjAyOSwyMy4wMyUyMDI5LDIxJTIwMjksMTguNTklMjAyNy42NywxNi41JTIwMjUuNzIsMTUuMzglMjAyNi4yMSwxNC43MSUyMDI2LjUsMTMuODklMjAyNi41LDEzJTIwYyUyMDAsLTIuMjElMjAtMS43OSwtNCUyMC00LC00JTIweiclMjBzdHlsZT0nb3BhY2l0eToxOyUyMGZpbGw6JTIzMDAwMDAwOyUyMGZpbGwtb3BhY2l0eToxOyUyMGZpbGwtcnVsZTpub256ZXJvOyUyMHN0cm9rZTolMjMwMDAwMDA7JTIwc3Ryb2tlLXdpZHRoOjEuNTslMjBzdHJva2UtbGluZWNhcDpyb3VuZDslMjBzdHJva2UtbGluZWpvaW46bWl0ZXI7JTIwc3Ryb2tlLW1pdGVybGltaXQ6NDslMjBzdHJva2UtZGFzaGFycmF5Om5vbmU7JTIwc3Ryb2tlLW9wYWNpdHk6MTsnLyUzZSUzYy9zdmclM2VcIiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsbUNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/e3ccca0e5f842fe5114a7a26c89df67bb87ef62c b/7xOfJqsDU787fe61oSCq1/web/e3ccca0e5f842fe5114a7a26c89df67bb87ef62c deleted file mode 100644 index c42278b..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/e3ccca0e5f842fe5114a7a26c89df67bb87ef62c +++ /dev/null @@ -1,40 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "POISONED_SQUARES", { enumerable: true, configurable: true, get(){ try { return POISONED_SQUARES } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/presets/registry.ts", {"importedNames":["PRESET_REGISTRY"]}); -const POISONED_SQUARES = /* @__PURE__ */ new Set([27, 28, 35, 36]); -__vite_ssr_import_0__.PRESET_REGISTRY.register({ - id: "poisoned-squares", - name: "Poisoned Centre", - description: "The four central squares (d4, d5, e4, e5) are poisoned. Any piece ending a half-move on one takes 1 poison damage. Requires Hit Points.", - incompatibleWith: [], - requires: ["piece-hp"], - onAfterMove({ engine }) { - const session = engine.session; - const facts = session.allFacts(); - const victims = []; - for (const f of facts) { - if (f.attr !== "Position") continue; - if (!POISONED_SQUARES.has(f.value)) continue; - if (f.id <= 0) continue; - victims.push(f.id); - }; - const poisonedSquaresByVictim = /* @__PURE__ */ new Map(); - for (const id of victims) { - const pos = engine.session.get(id, "Position"); - if (typeof pos === "number") poisonedSquaresByVictim.set(id, pos); - }; - for (const id of victims) { - engine.dealDamage(id, 1, { kind: "poison" }); - const sq = poisonedSquaresByVictim.get(id); - if (sq !== void 0) { - engine.emitEffect({ - kind: "poison", - square: sq, - ttl: 250 - }); - } - } - } -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQW1CQTtBQUtPLE1BQU0sbUJBQXdDLG9CQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7QUFFN0Usc0NBQWdCLFNBQVM7QUFBQSxFQUN2QixJQUFJO0FBQUEsRUFDSixNQUFNO0FBQUEsRUFDTixhQUNFO0FBQUEsRUFDRixrQkFBa0IsQ0FBQztBQUFBLEVBQ25CLFVBQVUsQ0FBQyxVQUFVO0FBQUEsRUFFckIsWUFBWSxFQUFFLE9BQU8sR0FBRztBQUN0QixVQUFNLFVBQVUsT0FBTztBQUN2QixVQUFNLFFBQVEsUUFBUSxTQUFTO0FBSy9CLFVBQU0sVUFBc0IsQ0FBQztBQUM3QixlQUFXLEtBQUssT0FBTztBQUNyQixVQUFJLEVBQUUsU0FBUyxXQUFZO0FBQzNCLFVBQUksQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLEtBQWUsRUFBRztBQUM5QyxVQUFLLEVBQUUsTUFBaUIsRUFBRztBQUMzQixjQUFRLEtBQUssRUFBRSxFQUFFO0FBQUEsSUFDbkI7QUFTQSxVQUFNLDBCQUEwQixvQkFBSSxJQUFzQjtBQUMxRCxlQUFXLE1BQU0sU0FBUztBQUN4QixZQUFNLE1BQU0sT0FBTyxRQUFRLElBQUksSUFBSSxVQUFVO0FBQzdDLFVBQUksT0FBTyxRQUFRLFNBQVUseUJBQXdCLElBQUksSUFBSSxHQUFHO0FBQUEsSUFDbEU7QUFDQSxlQUFXLE1BQU0sU0FBUztBQUN4QixhQUFPLFdBQVcsSUFBSSxHQUFHLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDM0MsWUFBTSxLQUFLLHdCQUF3QixJQUFJLEVBQUU7QUFDekMsVUFBSSxPQUFPLFFBQVc7QUFDcEIsZUFBTyxXQUFXO0FBQUEsVUFDaEIsTUFBTTtBQUFBLFVBQ04sUUFBUTtBQUFBLFVBQ1IsS0FBSztBQUFBLFFBQ1AsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGLENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInBvaXNvbmVkLXNxdWFyZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQcmVzZXQ6IGBwb2lzb25lZC1zcXVhcmVzYCAoUG9pc29uZWQgQ2VudHJlLCBSVUxFUy5tZCBydWxlICMxNSlcbiAqXG4gKiBUaGUgZm91ciBjZW50cmFsIHNxdWFyZXMgKGQ0LCBkNSwgZTQsIGU1KSBhcmUgcG9pc29uZWQuIEFueSBwaWVjZVxuICogU1RBTkRJTkcgb24gb25lIG9mIHRob3NlIHNxdWFyZXMgYXQgdGhlIGVuZCBvZiBhIGhhbGYtbW92ZSBsb3Nlc1xuICogMSBIUC4gSWYgaXRzIEhQIHJlYWNoZXMgMCB0aGUgcGllY2UgZGllcyAocmV0cmFjdCBhbGwgaXRzIGZhY3RzKS5cbiAqXG4gKiBXaHkgXCJlbmQgb2YgaGFsZi1tb3ZlXCIgYW5kIG5vdCBcImVuZCBvZiBmdWxsIHR1cm5cIjogdGhlIHBvaXNvbiBuZWVkc1xuICogdG8gYmUgdmlzaWJsZSB0byBib3RoIHBsYXllcnMgcGVyIG1vdmUg4oCUIGlmIGl0IG9ubHkgdGlja2VkIGV2ZXJ5XG4gKiBvdGhlciBoYWxmLW1vdmUsIGEgcGxheWVyIGNvdWxkIGJyaWVmbHkgb2NjdXB5IGEgcG9pc29uZWQgc3F1YXJlXG4gKiBkdXJpbmcgdGhlaXIgb3duIHR1cm4gd2l0aG91dCBjb25zZXF1ZW5jZS4gQXBwbHlpbmcgZGFtYWdlIGV2ZXJ5XG4gKiBoYWxmLW1vdmUgbWVhbnMgZXZlcnkgcGllY2UgcGF5cyAxIEhQIHBlciB0aW1lLXN0ZXAgb24gYSBwb2lzb25lZFxuICogc3F1YXJlLCB3aGljaCBtYXRjaGVzIHRoZSBcInBlciB0dXJuXCIgd29yZGluZyBpbiBSVUxFUy5tZCAjMTUgKGhlcmVcbiAqIFwidHVyblwiIG1lYW5zIFwiaGFsZi1tb3ZlXCIgaW4gY2hlc3MgcGFybGFuY2UpLlxuICpcbiAqIFJlcXVpcmVzIGBwaWVjZS1ocGAg4oCUIHdpdGhvdXQgYW4gSHAgYXR0cmlidXRlIHRoZXJlJ3Mgbm90aGluZyB0b1xuICogZGFtYWdlLiBUaGUgcmVnaXN0cnkgdmFsaWRhdGVzIHRoZSBkZXBlbmRlbmN5IHdoZW4gdGhlIHByZXNldCBpc1xuICogYWN0aXZhdGVkIHZpYSBzZXRBY3RpdmVQcmVzZXRzLlxuICovXG5pbXBvcnQgeyBQUkVTRVRfUkVHSVNUUlkgfSBmcm9tIFwiLi9yZWdpc3RyeS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCJAcGFyYXR5cGUvcmV0ZVwiO1xuXG4vKiogUG9pc29uZWQgY2VudHJhbCBzcXVhcmVzOiBkND0yNywgZTQ9MjgsIGQ1PTM1LCBlNT0zNi4gRXhwb3J0ZWQgZm9yXG4gKiAgdGhlIFVJIGxheWVyIHRvIHJlbmRlciB2aXN1YWwgcG9pc29uIGN1ZXMgb24gdGhlIHNhbWUgc3F1YXJlcy4gKi9cbmV4cG9ydCBjb25zdCBQT0lTT05FRF9TUVVBUkVTOiBSZWFkb25seVNldDxudW1iZXI+ID0gbmV3IFNldChbMjcsIDI4LCAzNSwgMzZdKTtcblxuUFJFU0VUX1JFR0lTVFJZLnJlZ2lzdGVyKHtcbiAgaWQ6IFwicG9pc29uZWQtc3F1YXJlc1wiLFxuICBuYW1lOiBcIlBvaXNvbmVkIENlbnRyZVwiLFxuICBkZXNjcmlwdGlvbjpcbiAgICBcIlRoZSBmb3VyIGNlbnRyYWwgc3F1YXJlcyAoZDQsIGQ1LCBlNCwgZTUpIGFyZSBwb2lzb25lZC4gQW55IHBpZWNlIGVuZGluZyBhIGhhbGYtbW92ZSBvbiBvbmUgdGFrZXMgMSBwb2lzb24gZGFtYWdlLiBSZXF1aXJlcyBIaXQgUG9pbnRzLlwiLFxuICBpbmNvbXBhdGlibGVXaXRoOiBbXSxcbiAgcmVxdWlyZXM6IFtcInBpZWNlLWhwXCJdLFxuXG4gIG9uQWZ0ZXJNb3ZlKHsgZW5naW5lIH0pIHtcbiAgICBjb25zdCBzZXNzaW9uID0gZW5naW5lLnNlc3Npb247XG4gICAgY29uc3QgZmFjdHMgPSBzZXNzaW9uLmFsbEZhY3RzKCk7XG5cbiAgICAvLyBDb2xsZWN0IHBpZWNlcyBzdGFuZGluZyBvbiBwb2lzb25lZCBzcXVhcmVzLiBXZSBzbmFwc2hvdCB0aGVcbiAgICAvLyBsaXN0IEJFRk9SRSBkZWFsaW5nIGFueSBkYW1hZ2Ugc28gcmV0cmFjdGlvbnMgbWlkLWxvb3AgZG9uJ3RcbiAgICAvLyBkaXN0dXJiIGl0ZXJhdGlvbi5cbiAgICBjb25zdCB2aWN0aW1zOiBFbnRpdHlJZFtdID0gW107XG4gICAgZm9yIChjb25zdCBmIG9mIGZhY3RzKSB7XG4gICAgICBpZiAoZi5hdHRyICE9PSBcIlBvc2l0aW9uXCIpIGNvbnRpbnVlO1xuICAgICAgaWYgKCFQT0lTT05FRF9TUVVBUkVTLmhhcyhmLnZhbHVlIGFzIG51bWJlcikpIGNvbnRpbnVlO1xuICAgICAgaWYgKChmLmlkIGFzIG51bWJlcikgPD0gMCkgY29udGludWU7IC8vIGdhbWUgZW50aXR5XG4gICAgICB2aWN0aW1zLnB1c2goZi5pZCk7XG4gICAgfVxuXG4gICAgLy8gUm91dGUgdGhyb3VnaCB0aGUgZGFtYWdlIHBpcGVsaW5lLiBwaWVjZS1ocCdzIG9uRGFtYWdlIGFic29yYnNcbiAgICAvLyAxIEhQOyB3aGVuIEhwIGhpdHMgMCB0aGUgcGllY2UgaXMgcmV0cmFjdGVkLiBXZSB0YWcgdGhlIGtpbmRcbiAgICAvLyBhcyBcInBvaXNvblwiIHNvIGEgZnV0dXJlIFwicG9pc29uLXJlc2lzdGFudFwiIHByZXNldCBjb3VsZCBzaG9ydC1cbiAgICAvLyBjaXJjdWl0IHRoaXMgd2l0aG91dCBjaGFuZ2luZyBwb2lzb25lZC1zcXVhcmVzJyBvd24gY29kZS5cbiAgICAvL1xuICAgIC8vIFNuYXBzaG90IHBvc2l0aW9ucyBCRUZPUkUgdGhlIGRhbWFnZSBsb29wIOKAlCBpZiBhIHBpZWNlIGRpZXMsIGl0c1xuICAgIC8vIFBvc2l0aW9uIGZhY3QgaXMgcmV0cmFjdGVkIGFuZCB3ZSBsb3NlIHRoZSBzcXVhcmUgZm9yIHRoZSBlZmZlY3QuXG4gICAgY29uc3QgcG9pc29uZWRTcXVhcmVzQnlWaWN0aW0gPSBuZXcgTWFwPEVudGl0eUlkLCBudW1iZXI+KCk7XG4gICAgZm9yIChjb25zdCBpZCBvZiB2aWN0aW1zKSB7XG4gICAgICBjb25zdCBwb3MgPSBlbmdpbmUuc2Vzc2lvbi5nZXQoaWQsIFwiUG9zaXRpb25cIik7XG4gICAgICBpZiAodHlwZW9mIHBvcyA9PT0gXCJudW1iZXJcIikgcG9pc29uZWRTcXVhcmVzQnlWaWN0aW0uc2V0KGlkLCBwb3MpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGlkIG9mIHZpY3RpbXMpIHtcbiAgICAgIGVuZ2luZS5kZWFsRGFtYWdlKGlkLCAxLCB7IGtpbmQ6IFwicG9pc29uXCIgfSk7XG4gICAgICBjb25zdCBzcSA9IHBvaXNvbmVkU3F1YXJlc0J5VmljdGltLmdldChpZCk7XG4gICAgICBpZiAoc3EgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlbmdpbmUuZW1pdEVmZmVjdCh7XG4gICAgICAgICAga2luZDogXCJwb2lzb25cIixcbiAgICAgICAgICBzcXVhcmU6IHNxLFxuICAgICAgICAgIHR0bDogMjUwLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG59KTtcbiJdLCJmaWxlIjoiL3NyYy9wcmVzZXRzL3BvaXNvbmVkLXNxdWFyZXMudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/e4ac6c0f21092408b3b0c5513515a511434a47be b/7xOfJqsDU787fe61oSCq1/web/e4ac6c0f21092408b3b0c5513515a511434a47be deleted file mode 100644 index 4f9bba1..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/e4ac6c0f21092408b3b0c5513515a511434a47be +++ /dev/null @@ -1,79 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "DerivedFactProduction", { enumerable: true, configurable: true, get(){ try { return DerivedFactProduction } catch {} }}); -/** - * Terminal Rete node that materialises derived facts from full matches. - * - * Wiring: subscribe this node to the final {@link BetaMemory} (or filter - * node) of a rule via `addDownstreamActivate(prod.leftActivate.bind(prod))` - * and `addDownstreamDeactivate(prod.leftDeactivate.bind(prod))`. - * - * Concurrency: activations and deactivations are expected to be serialised - * by the surrounding {@link Session.fireRules} loop; no internal locking. - */ -class DerivedFactProduction { - ruleName; - /** - * Monotonically decreasing counter used to mint negative entity ids for - * derived facts. Starts at `0` and is pre-decremented on each activation, - * yielding `-1, -2, -3, ...`. Scoped per node so different productions do - * not collide on ids in any externally-observable way (the ids are opaque - * to consumers; only the sign is meaningful). - */ - #idCounter = 0; - /** - * Map from the activating {@link Token} reference to the record of facts - * asserted for it. Keyed by reference — matching {@link BetaMemory}'s - * identity-based token semantics — so `leftDeactivate` can find the - * exact entry to retract without structural comparison. - */ - #tokenToEntry = new Map(); - /** Working memory into which derived facts are asserted and retracted. */ - #wm; - /** Computes derived facts from a match's bindings. */ - #handler; - constructor( - /** Human-readable rule name, surfaced in diagnostics. */ - ruleName, wm, handler) { - this.ruleName = ruleName; - this.#wm = wm; - this.#handler = handler; - } - /** - * Accept a new full match and assert its derived facts. - * - * Mints a fresh negative entity id, invokes the handler with the token's - * bindings, and inserts each returned `(attr, value)` pair into working - * memory under that id. Records the list of attrs on the token so a - * future {@link leftDeactivate} can retract exactly those facts. - */ - leftActivate(token) { - const derivedId = (--this.#idCounter); - const derivedFacts = this.#handler(token.bindings); - const attrs = []; - for (const { attr, value } of derivedFacts) { - this.#wm.insert(derivedId, attr, value); - attrs.push(attr); - }; - this.#tokenToEntry.set(token, { id: derivedId, attrs }); - } - /** - * Withdraw a previously-accepted match and retract its derived facts. - * - * Retracts each attr that was asserted on activation — not re-derived - * from the handler, see module header for rationale. Unknown tokens are - * a no-op: upstream memories broadcast deactivations to all subscribers, - * and a production that never saw a given token must simply ignore it - * (matching {@link BetaMemory.leftDeactivate} / {@link ProductionNode.leftDeactivate}). - */ - leftDeactivate(token) { - const entry = this.#tokenToEntry.get(token); - if (!entry) - return; - for (const attr of entry.attrs) { - this.#wm.retract(entry.id, attr); - }; - this.#tokenToEntry.delete(token); - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQThFQTs7Ozs7Ozs7OztBQVVNLE1BQU8scUJBQXFCO0lBeUJyQjtJQXhCWDs7Ozs7OztJQU9BLFVBQVUsR0FBRyxDQUFDO0lBRWQ7Ozs7OztJQU1TLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBdUI7SUFFdkQ7SUFDUyxHQUFHO0lBQ1o7SUFDUyxRQUFRO0lBRWpCO0lBQ0U7SUFDUyxRQUFnQixFQUN6QixFQUFpQixFQUNqQixPQUF1QjtRQUZkLGFBQVEsR0FBUixRQUFRO1FBSWpCLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRTtRQUNiLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTztJQUN6QjtJQUVBOzs7Ozs7OztJQVFBLFlBQVksQ0FBQyxLQUFZO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFhO1FBQ2pELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUVsRCxNQUFNLEtBQUssR0FBYyxFQUFFO1FBQzNCLEtBQUssTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxZQUFZLEVBQUU7WUFDMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUM7WUFDdkMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDbEI7UUFFQSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3pEO0lBRUE7Ozs7Ozs7OztJQVNBLGNBQWMsQ0FBQyxLQUFZO1FBQ3pCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUMzQyxJQUFJLENBQUMsS0FBSztZQUFFO1FBRVosS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO1lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDO1FBQ2xDO1FBQ0EsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ2xDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyIuLi9zcmMvZGVyaXZlZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlcml2ZWRGYWN0UHJvZHVjdGlvbiDigJQgYHRoZW5GaW5hbGx5YCBlcXVpdmFsZW50IHdpdGggdHJ1dGggbWFpbnRlbmFuY2UuXG4gKlxuICogUGVyIGBwYWNrYWdlcy9yZXRlL1NQRUMubWQgwqdUcnV0aCBNYWludGVuYW5jZWAgYW5kIMKnUmV0ZSBJSSBSZWZlcmVuY2VcbiAqIFRhcmdldCwgYSBgRGVyaXZlZEZhY3RQcm9kdWN0aW9uYCBpcyBhIHRlcm1pbmFsIG5vZGUgdGhhdCB0dXJucyBmdWxsXG4gKiBtYXRjaGVzIGludG8gbWF0ZXJpYWxpc2VkIEVBViBmYWN0cyBpbiB3b3JraW5nIG1lbW9yeS4gSXQgZGlmZmVycyBmcm9tXG4gKiB7QGxpbmsgUHJvZHVjdGlvbk5vZGV9IGluIHR3byB3YXlzOlxuICpcbiAqIDEuIEl0IGRvZXMgbm90IG1lcmVseSByZWNvcmQgbWF0Y2hlcyDigJQgaXQgKmFzc2VydHMgbmV3IGZhY3RzKiBjb21wdXRlZFxuICogICAgZnJvbSB0aGUgbWF0Y2gncyB2YXJpYWJsZSBiaW5kaW5ncy4gVGhvc2UgZmFjdHMgYXJlIGluZGlzdGluZ3Vpc2hhYmxlXG4gKiAgICBmcm9tIHVzZXItYXNzZXJ0ZWQgZmFjdHMgdG8gdGhlIHJlc3Qgb2YgdGhlIFJldGUgbmV0d29yaywgd2hpY2ggbWVhbnNcbiAqICAgIHRoZXkgY2FuIHBhcnRpY2lwYXRlIGluIGZ1cnRoZXIgbWF0Y2hlcyAoY2hhaW5lZCBpbmZlcmVuY2UpLlxuICpcbiAqIDIuIFRoZSBhc3NlcnRlZCBmYWN0cyBhcmUgdGllZCB0byB0aGUgbGlmZS1jeWNsZSBvZiB0aGUgc3VwcG9ydGluZyBtYXRjaC5cbiAqICAgIFdoZW4gdGhlIG1hdGNoIGlzIHdpdGhkcmF3biAoYGxlZnREZWFjdGl2YXRlYCksIHRoZSBmYWN0cyBpdCBwcm9kdWNlZFxuICogICAgYXJlIHJldHJhY3RlZCBhdXRvbWF0aWNhbGx5LiBUaGlzIGlzIHRoZSBcInRydXRoIG1haW50ZW5hbmNlXCIgY29udHJhY3Q6XG4gKiAgICBkb3duc3RyZWFtIHJ1bGVzIHNlZSBhIGRlcml2ZWQgZmFjdCBpZiBhbmQgb25seSBpZiBpdHMgc3VwcG9ydGluZ1xuICogICAgbWF0Y2ggaXMgY3VycmVudGx5IGFjdGl2ZS5cbiAqXG4gKiBEZXJpdmVkIGZhY3RzIHVzZSAqKm5lZ2F0aXZlIHtAbGluayBFbnRpdHlJZH1zKiogbWludGVkIGZyb20gYW4gaW50ZXJuYWxcbiAqIHBlci1ub2RlIGNvdW50ZXIgKGAtMWAsIGAtMmAsIC4uLikuIFBlciBTUEVDIMKnSUQgQXV0aG9yaXR5IHVzZXItbWludGVkIGlkc1xuICogdmlhIGBTZXNzaW9uLm5leHRJZCgpYCBhcmUgc3RyaWN0bHkgcG9zaXRpdmUsIHNvIHRoZSBzaWduIG9mIHRoZSBpZCBpcyBhXG4gKiBjb21waWxlLWZyZWUgd2F5IHRvIHRlbGwgZGVyaXZlZCBmYWN0cyBhcGFydCBmcm9tIHVzZXIgZmFjdHMgd2l0aG91dFxuICogbmVlZGluZyBhIHNpZGVjYXIgcmVnaXN0cnkuXG4gKlxuICogVGhlIGhhbmRsZXIgcmVjZWl2ZXMgdGhlIG1hdGNoJ3Mge0BsaW5rIEJpbmRpbmdzfSBhbmQgcmV0dXJucyB0aGUgbGlzdCBvZlxuICogYChhdHRyLCB2YWx1ZSlgIHBhaXJzIHRvIGFzc2VydCB1bmRlciB0aGUgZGVyaXZlZCBpZC4gUmV0dXJuaW5nIGFuIGVtcHR5XG4gKiBhcnJheSBpcyBsZWdhbCDigJQgaXQgcmVjb3JkcyB0aGUgYWN0aXZhdGlvbiAoc28gbGF0ZXIgZGVhY3RpdmF0aW9uIGlzIGFcbiAqIGNsZWFuIG5vLW9wKSB3aXRob3V0IG11dGF0aW5nIHdvcmtpbmcgbWVtb3J5LlxuICpcbiAqIFRoZSBoYW5kbGVyIGlzIGludm9rZWQgKipvbmx5IG9uIGFjdGl2YXRlKiosIG5ldmVyIG9uIGRlYWN0aXZhdGUuIE9uXG4gKiBkZWFjdGl2YXRlIHdlIHJldHJhY3QgdGhlIGV4YWN0IGF0dHJzIHByZXZpb3VzbHkgYXNzZXJ0ZWQgZm9yIHRoYXQgdG9rZW4sXG4gKiB3aGljaCBpcyBzdG9yZWQgb24gYWN0aXZhdGlvbi4gVGhpcyBhdm9pZHMgcmUtcnVubmluZyB1c2VyIGNvZGUgZHVyaW5nXG4gKiByZXRyYWN0aW9uIOKAlCBpbXBvcnRhbnQgYmVjYXVzZSByZXRyYWN0aW9uIGhhcHBlbnMgZHVyaW5nIGZhY3QtcmVtb3ZhbFxuICogY2FzY2FkZXMgd2hlcmUgcmUtZW50ZXJpbmcgdGhlIGhhbmRsZXIgY291bGQgcHJvZHVjZSBhIGRpZmZlcmVudCBvdXRwdXRcbiAqIHRoYW4gdGhlIG9uZSB0aGF0IHdhcyBvcmlnaW5hbGx5IGFzc2VydGVkIChlLmcuIGlmIHRoZSBoYW5kbGVyIHJlYWRzXG4gKiBvdGhlciB3b3JraW5nLW1lbW9yeSBzdGF0ZSkuXG4gKi9cbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiLi9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgQXR0cktleSwgRmFjdFZhbHVlLCBXb3JraW5nTWVtb3J5IH0gZnJvbSBcIi4vd20uanNcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ3MsIFRva2VuIH0gZnJvbSBcIi4vYmV0YS5qc1wiO1xuXG4vKipcbiAqIEEgc2luZ2xlIGAoYXR0ciwgdmFsdWUpYCBwYWlyIHByb2R1Y2VkIGJ5IGEge0BsaW5rIERlcml2ZWRIYW5kbGVyfS5cbiAqXG4gKiBUaGUgZW50aXR5IGlkIGlzIHN1cHBsaWVkIGJ5IHRoZSB7QGxpbmsgRGVyaXZlZEZhY3RQcm9kdWN0aW9ufSBpdHNlbGZcbiAqIChkZXJpdmVkIGZhY3RzIGFyZSBtaW50ZWQgd2l0aCBuZWdhdGl2ZSBpZHMpLCBzbyB0aGUgaGFuZGxlciBvbmx5IHJldHVybnNcbiAqIHRoZSBhdHRyaWJ1dGUtYW5kLXZhbHVlIGhhbGYgb2YgdGhlIHRyaXBsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXJpdmVkRmFjdCB7XG4gIHJlYWRvbmx5IGF0dHI6IEF0dHJLZXk7XG4gIHJlYWRvbmx5IHZhbHVlOiBGYWN0VmFsdWU7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGRlcml2ZWQgZmFjdHMgdG8gYXNzZXJ0IGZvciBhIHNpbmdsZSBmdWxsIG1hdGNoLlxuICpcbiAqIEludm9rZWQgYnkge0BsaW5rIERlcml2ZWRGYWN0UHJvZHVjdGlvbi5sZWZ0QWN0aXZhdGV9IHdpdGggdGhlIG1hdGNoJ3NcbiAqIGFjY3VtdWxhdGVkIHtAbGluayBCaW5kaW5nc30uIFJldHVybmluZyBhbiBlbXB0eSBhcnJheSBpcyB2YWxpZCBhbmQgbWVhbnNcbiAqIFwidGhpcyBtYXRjaCBjb250cmlidXRlcyBubyBkZXJpdmVkIGZhY3RzXCI7IHRoZSBhY3RpdmF0aW9uIGlzIHN0aWxsXG4gKiByZWNvcmRlZCBzbyBhIGxhdGVyIHtAbGluayBEZXJpdmVkRmFjdFByb2R1Y3Rpb24ubGVmdERlYWN0aXZhdGV9IGlzIGFcbiAqIGNsZWFuIG5vLW9wLlxuICovXG5leHBvcnQgdHlwZSBEZXJpdmVkSGFuZGxlciA9IChiaW5kaW5nczogQmluZGluZ3MpID0+IHJlYWRvbmx5IERlcml2ZWRGYWN0W107XG5cbi8qKlxuICogUGVyLXRva2VuIHJlY29yZCBvZiB3aGF0IHdhcyBhc3NlcnRlZCBzbyBpdCBjYW4gYmUgcmV0cmFjdGVkIGxhdGVyLlxuICpcbiAqIGBhdHRyc2AgaXMgdGhlIGxpc3Qgb2YgYXR0cmlidXRlIG5hbWVzIGFzc2VydGVkIHVuZGVyIGBpZGA7IGl0IGlzIHN0b3JlZFxuICog4oCUIHJhdGhlciB0aGFuIHJlLWRlcml2ZWQgZnJvbSB0aGUgaGFuZGxlciBvbiBkZWFjdGl2YXRpb24g4oCUIHNvIHRoYXRcbiAqIHJldHJhY3Rpb24gcmVtYWlucyBkZXRlcm1pbmlzdGljIGV2ZW4gaWYgdGhlIGhhbmRsZXIgaXMgbm9uLWlkZW1wb3RlbnRcbiAqIChlLmcuIHJlYWRzIHdvcmtpbmctbWVtb3J5IHN0YXRlIHRoYXQgaGFzIHNpbmNlIGNoYW5nZWQpLlxuICovXG5pbnRlcmZhY2UgRGVyaXZlZEVudHJ5IHtcbiAgcmVhZG9ubHkgaWQ6IEVudGl0eUlkO1xuICByZWFkb25seSBhdHRyczogcmVhZG9ubHkgQXR0cktleVtdO1xufVxuXG4vKipcbiAqIFRlcm1pbmFsIFJldGUgbm9kZSB0aGF0IG1hdGVyaWFsaXNlcyBkZXJpdmVkIGZhY3RzIGZyb20gZnVsbCBtYXRjaGVzLlxuICpcbiAqIFdpcmluZzogc3Vic2NyaWJlIHRoaXMgbm9kZSB0byB0aGUgZmluYWwge0BsaW5rIEJldGFNZW1vcnl9IChvciBmaWx0ZXJcbiAqIG5vZGUpIG9mIGEgcnVsZSB2aWEgYGFkZERvd25zdHJlYW1BY3RpdmF0ZShwcm9kLmxlZnRBY3RpdmF0ZS5iaW5kKHByb2QpKWBcbiAqIGFuZCBgYWRkRG93bnN0cmVhbURlYWN0aXZhdGUocHJvZC5sZWZ0RGVhY3RpdmF0ZS5iaW5kKHByb2QpKWAuXG4gKlxuICogQ29uY3VycmVuY3k6IGFjdGl2YXRpb25zIGFuZCBkZWFjdGl2YXRpb25zIGFyZSBleHBlY3RlZCB0byBiZSBzZXJpYWxpc2VkXG4gKiBieSB0aGUgc3Vycm91bmRpbmcge0BsaW5rIFNlc3Npb24uZmlyZVJ1bGVzfSBsb29wOyBubyBpbnRlcm5hbCBsb2NraW5nLlxuICovXG5leHBvcnQgY2xhc3MgRGVyaXZlZEZhY3RQcm9kdWN0aW9uIHtcbiAgLyoqXG4gICAqIE1vbm90b25pY2FsbHkgZGVjcmVhc2luZyBjb3VudGVyIHVzZWQgdG8gbWludCBuZWdhdGl2ZSBlbnRpdHkgaWRzIGZvclxuICAgKiBkZXJpdmVkIGZhY3RzLiBTdGFydHMgYXQgYDBgIGFuZCBpcyBwcmUtZGVjcmVtZW50ZWQgb24gZWFjaCBhY3RpdmF0aW9uLFxuICAgKiB5aWVsZGluZyBgLTEsIC0yLCAtMywgLi4uYC4gU2NvcGVkIHBlciBub2RlIHNvIGRpZmZlcmVudCBwcm9kdWN0aW9ucyBkb1xuICAgKiBub3QgY29sbGlkZSBvbiBpZHMgaW4gYW55IGV4dGVybmFsbHktb2JzZXJ2YWJsZSB3YXkgKHRoZSBpZHMgYXJlIG9wYXF1ZVxuICAgKiB0byBjb25zdW1lcnM7IG9ubHkgdGhlIHNpZ24gaXMgbWVhbmluZ2Z1bCkuXG4gICAqL1xuICAjaWRDb3VudGVyID0gMDtcblxuICAvKipcbiAgICogTWFwIGZyb20gdGhlIGFjdGl2YXRpbmcge0BsaW5rIFRva2VufSByZWZlcmVuY2UgdG8gdGhlIHJlY29yZCBvZiBmYWN0c1xuICAgKiBhc3NlcnRlZCBmb3IgaXQuIEtleWVkIGJ5IHJlZmVyZW5jZSDigJQgbWF0Y2hpbmcge0BsaW5rIEJldGFNZW1vcnl9J3NcbiAgICogaWRlbnRpdHktYmFzZWQgdG9rZW4gc2VtYW50aWNzIOKAlCBzbyBgbGVmdERlYWN0aXZhdGVgIGNhbiBmaW5kIHRoZVxuICAgKiBleGFjdCBlbnRyeSB0byByZXRyYWN0IHdpdGhvdXQgc3RydWN0dXJhbCBjb21wYXJpc29uLlxuICAgKi9cbiAgcmVhZG9ubHkgI3Rva2VuVG9FbnRyeSA9IG5ldyBNYXA8VG9rZW4sIERlcml2ZWRFbnRyeT4oKTtcblxuICAvKiogV29ya2luZyBtZW1vcnkgaW50byB3aGljaCBkZXJpdmVkIGZhY3RzIGFyZSBhc3NlcnRlZCBhbmQgcmV0cmFjdGVkLiAqL1xuICByZWFkb25seSAjd206IFdvcmtpbmdNZW1vcnk7XG4gIC8qKiBDb21wdXRlcyBkZXJpdmVkIGZhY3RzIGZyb20gYSBtYXRjaCdzIGJpbmRpbmdzLiAqL1xuICByZWFkb25seSAjaGFuZGxlcjogRGVyaXZlZEhhbmRsZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgLyoqIEh1bWFuLXJlYWRhYmxlIHJ1bGUgbmFtZSwgc3VyZmFjZWQgaW4gZGlhZ25vc3RpY3MuICovXG4gICAgcmVhZG9ubHkgcnVsZU5hbWU6IHN0cmluZyxcbiAgICB3bTogV29ya2luZ01lbW9yeSxcbiAgICBoYW5kbGVyOiBEZXJpdmVkSGFuZGxlcixcbiAgKSB7XG4gICAgdGhpcy4jd20gPSB3bTtcbiAgICB0aGlzLiNoYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY2NlcHQgYSBuZXcgZnVsbCBtYXRjaCBhbmQgYXNzZXJ0IGl0cyBkZXJpdmVkIGZhY3RzLlxuICAgKlxuICAgKiBNaW50cyBhIGZyZXNoIG5lZ2F0aXZlIGVudGl0eSBpZCwgaW52b2tlcyB0aGUgaGFuZGxlciB3aXRoIHRoZSB0b2tlbidzXG4gICAqIGJpbmRpbmdzLCBhbmQgaW5zZXJ0cyBlYWNoIHJldHVybmVkIGAoYXR0ciwgdmFsdWUpYCBwYWlyIGludG8gd29ya2luZ1xuICAgKiBtZW1vcnkgdW5kZXIgdGhhdCBpZC4gUmVjb3JkcyB0aGUgbGlzdCBvZiBhdHRycyBvbiB0aGUgdG9rZW4gc28gYVxuICAgKiBmdXR1cmUge0BsaW5rIGxlZnREZWFjdGl2YXRlfSBjYW4gcmV0cmFjdCBleGFjdGx5IHRob3NlIGZhY3RzLlxuICAgKi9cbiAgbGVmdEFjdGl2YXRlKHRva2VuOiBUb2tlbik6IHZvaWQge1xuICAgIGNvbnN0IGRlcml2ZWRJZCA9ICgtLXRoaXMuI2lkQ291bnRlcikgYXMgRW50aXR5SWQ7XG4gICAgY29uc3QgZGVyaXZlZEZhY3RzID0gdGhpcy4jaGFuZGxlcih0b2tlbi5iaW5kaW5ncyk7XG5cbiAgICBjb25zdCBhdHRyczogQXR0cktleVtdID0gW107XG4gICAgZm9yIChjb25zdCB7IGF0dHIsIHZhbHVlIH0gb2YgZGVyaXZlZEZhY3RzKSB7XG4gICAgICB0aGlzLiN3bS5pbnNlcnQoZGVyaXZlZElkLCBhdHRyLCB2YWx1ZSk7XG4gICAgICBhdHRycy5wdXNoKGF0dHIpO1xuICAgIH1cblxuICAgIHRoaXMuI3Rva2VuVG9FbnRyeS5zZXQodG9rZW4sIHsgaWQ6IGRlcml2ZWRJZCwgYXR0cnMgfSk7XG4gIH1cblxuICAvKipcbiAgICogV2l0aGRyYXcgYSBwcmV2aW91c2x5LWFjY2VwdGVkIG1hdGNoIGFuZCByZXRyYWN0IGl0cyBkZXJpdmVkIGZhY3RzLlxuICAgKlxuICAgKiBSZXRyYWN0cyBlYWNoIGF0dHIgdGhhdCB3YXMgYXNzZXJ0ZWQgb24gYWN0aXZhdGlvbiDigJQgbm90IHJlLWRlcml2ZWRcbiAgICogZnJvbSB0aGUgaGFuZGxlciwgc2VlIG1vZHVsZSBoZWFkZXIgZm9yIHJhdGlvbmFsZS4gVW5rbm93biB0b2tlbnMgYXJlXG4gICAqIGEgbm8tb3A6IHVwc3RyZWFtIG1lbW9yaWVzIGJyb2FkY2FzdCBkZWFjdGl2YXRpb25zIHRvIGFsbCBzdWJzY3JpYmVycyxcbiAgICogYW5kIGEgcHJvZHVjdGlvbiB0aGF0IG5ldmVyIHNhdyBhIGdpdmVuIHRva2VuIG11c3Qgc2ltcGx5IGlnbm9yZSBpdFxuICAgKiAobWF0Y2hpbmcge0BsaW5rIEJldGFNZW1vcnkubGVmdERlYWN0aXZhdGV9IC8ge0BsaW5rIFByb2R1Y3Rpb25Ob2RlLmxlZnREZWFjdGl2YXRlfSkuXG4gICAqL1xuICBsZWZ0RGVhY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICBjb25zdCBlbnRyeSA9IHRoaXMuI3Rva2VuVG9FbnRyeS5nZXQodG9rZW4pO1xuICAgIGlmICghZW50cnkpIHJldHVybjtcblxuICAgIGZvciAoY29uc3QgYXR0ciBvZiBlbnRyeS5hdHRycykge1xuICAgICAgdGhpcy4jd20ucmV0cmFjdChlbnRyeS5pZCwgYXR0cik7XG4gICAgfVxuICAgIHRoaXMuI3Rva2VuVG9FbnRyeS5kZWxldGUodG9rZW4pO1xuICB9XG59XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvcmV0ZS9kaXN0L2Rlcml2ZWQuanMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/e588e11bd975898b7463d1b9e4b9fd979ca579e8 b/7xOfJqsDU787fe61oSCq1/web/e588e11bd975898b7463d1b9e4b9fd979ca579e8 deleted file mode 100644 index f06f7ee..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/e588e11bd975898b7463d1b9e4b9fd979ca579e8 +++ /dev/null @@ -1,191 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/presets/index.ts"); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/engine.ts", {"importedNames":["ChessEngine"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["algebraicToSquare","squareOf","fileOf","rankOf"]}); -function activateWrap(engine) { - engine.activePresets.replaceAll([ - { id: "wrap-board", scope: "both", turnsRemaining: null } - ]); -} -function clearRank(engine, rank) { - const facts = engine.session.allFacts(); - const toRetract = []; - for (const f of facts) { - if (f.attr !== "Position") continue; - if ((0,__vite_ssr_import_3__.rankOf)(f.value) === rank) toRetract.push(f.id); - }; - for (const id of toRetract) { - const eid = id; - if (engine.session.contains(eid, "Position")) { - engine.session.retract(eid, "Position"); - } - } -} -function teleport(engine, pieceId, to) { - engine.session.insert(pieceId, "Position", to); -} -function findPiece(engine, color, type) { - const facts = engine.session.allFacts(); - for (const f of facts) { - if (f.attr !== "PieceType" || f.value !== type) continue; - const colorFact = facts.find((c) => c.id === f.id && c.attr === "Color"); - if (colorFact?.value === color) return f.id; - }; - return null; -} -(0,__vite_ssr_import_0__.describe)("wrap-board preset — horizontal slide wrap", () => { - (0,__vite_ssr_import_0__.it)("rook sliding off h-file toward a-file reaches the opposite side", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - activateWrap(engine); - clearRank(engine, 3); - const rook = findPiece(engine, "white", "rook"); - teleport(engine, rook, (0,__vite_ssr_import_3__.squareOf)(3, 3)); - const moves = engine.getAllLegalMoves().filter((m) => m.pieceId === rook); - const targetFiles = new Set(moves.map((m) => (0,__vite_ssr_import_3__.fileOf)(m.to))); - (0,__vite_ssr_import_0__.expect)(targetFiles.has(0)).toBe(true); - (0,__vite_ssr_import_0__.expect)(targetFiles.has(7)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("rook on a-file reaches h-file via wrap when path on both sides is clear", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - activateWrap(engine); - clearRank(engine, 3); - const rook = findPiece(engine, "white", "rook"); - teleport(engine, rook, (0,__vite_ssr_import_3__.squareOf)(0, 3)); - const moves = engine.getAllLegalMoves().filter((m) => m.pieceId === rook); - const targetFiles = new Set(moves.map((m) => (0,__vite_ssr_import_3__.fileOf)(m.to))); - (0,__vite_ssr_import_0__.expect)(targetFiles.has(7)).toBe(true); - (0,__vite_ssr_import_0__.expect)(targetFiles.has(1)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("a friendly piece blocks the outgoing rightward slide but leftward wrap still reaches the other side", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - activateWrap(engine); - clearRank(engine, 3); - const rook = findPiece(engine, "white", "rook"); - teleport(engine, rook, (0,__vite_ssr_import_3__.squareOf)(3, 3)); - const whitePawn = (() => { - const facts = engine.session.allFacts(); - for (const f of facts) { - if (f.attr !== "PieceType" || f.value !== "pawn") continue; - const c = facts.find((x) => x.id === f.id && x.attr === "Color"); - if (c?.value === "white") return f.id; - }; - return null; - })(); - teleport(engine, whitePawn, (0,__vite_ssr_import_3__.squareOf)(4, 3)); - const moves = engine.getAllLegalMoves().filter((m) => m.pieceId === rook); - const targets = new Set(moves.map((m) => m.to)); - (0,__vite_ssr_import_0__.expect)(targets.has((0,__vite_ssr_import_3__.algebraicToSquare)("e4"))).toBe(false); - (0,__vite_ssr_import_0__.expect)(targets.has((0,__vite_ssr_import_3__.algebraicToSquare)("h4"))).toBe(true); - (0,__vite_ssr_import_0__.expect)(targets.has((0,__vite_ssr_import_3__.algebraicToSquare)("g4"))).toBe(true); - (0,__vite_ssr_import_0__.expect)(targets.has((0,__vite_ssr_import_3__.algebraicToSquare)("f4"))).toBe(true); - (0,__vite_ssr_import_0__.expect)(targets.has((0,__vite_ssr_import_3__.algebraicToSquare)("a4"))).toBe(true); - (0,__vite_ssr_import_0__.expect)(targets.has((0,__vite_ssr_import_3__.algebraicToSquare)("c4"))).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("both outgoing paths blocked by allies — no wrap in either direction", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - activateWrap(engine); - clearRank(engine, 3); - const rook = findPiece(engine, "white", "rook"); - teleport(engine, rook, (0,__vite_ssr_import_3__.squareOf)(3, 3)); - const whitePawns = []; - const facts = engine.session.allFacts(); - for (const f of facts) { - if (f.attr !== "PieceType" || f.value !== "pawn") continue; - const c = facts.find((x) => x.id === f.id && x.attr === "Color"); - if (c?.value === "white") whitePawns.push(f.id); - }; - teleport(engine, whitePawns[0], (0,__vite_ssr_import_3__.squareOf)(4, 3)); - teleport(engine, whitePawns[1], (0,__vite_ssr_import_3__.squareOf)(2, 3)); - const moves = engine.getAllLegalMoves().filter((m) => m.pieceId === rook); - const wrapTargets = moves.filter((m) => (0,__vite_ssr_import_3__.rankOf)(m.to) === 3).map((m) => (0,__vite_ssr_import_3__.fileOf)(m.to)); - (0,__vite_ssr_import_0__.expect)(wrapTargets).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("queen also benefits from the wrap (not just rooks)", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - activateWrap(engine); - clearRank(engine, 3); - const queen = findPiece(engine, "white", "queen"); - teleport(engine, queen, (0,__vite_ssr_import_3__.squareOf)(3, 3)); - const moves = engine.getAllLegalMoves().filter((m) => m.pieceId === queen); - const targetFiles = new Set( - moves.filter((m) => (0,__vite_ssr_import_3__.rankOf)(m.to) === 3).map((m) => (0,__vite_ssr_import_3__.fileOf)(m.to)) - ); - (0,__vite_ssr_import_0__.expect)(targetFiles.has(0)).toBe(true); - (0,__vite_ssr_import_0__.expect)(targetFiles.has(7)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("knight on h-file gets wrap-around L-leaps to a-file", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - activateWrap(engine); - const knight = findPiece(engine, "white", "knight"); - clearRank(engine, 0); - clearRank(engine, 1); - clearRank(engine, 2); - clearRank(engine, 3); - clearRank(engine, 4); - teleport(engine, knight, (0,__vite_ssr_import_3__.squareOf)(7, 2)); - const moves = engine.getAllLegalMoves().filter((m) => m.pieceId === knight); - const targets = new Set(moves.map((m) => m.to)); - (0,__vite_ssr_import_0__.expect)(targets.has((0,__vite_ssr_import_3__.algebraicToSquare)("a5"))).toBe(true); - (0,__vite_ssr_import_0__.expect)(targets.has((0,__vite_ssr_import_3__.algebraicToSquare)("b4"))).toBe(true); - (0,__vite_ssr_import_0__.expect)(targets.has((0,__vite_ssr_import_3__.algebraicToSquare)("b2"))).toBe(true); - (0,__vite_ssr_import_0__.expect)(targets.has((0,__vite_ssr_import_3__.algebraicToSquare)("a1"))).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("knight on a-file gets wrap-around L-leaps to h-file", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - activateWrap(engine); - clearRank(engine, 0); - clearRank(engine, 1); - clearRank(engine, 2); - const knight = findPiece(engine, "white", "knight"); - teleport(engine, knight, (0,__vite_ssr_import_3__.squareOf)(1, 0)); - const moves = engine.getAllLegalMoves().filter((m) => m.pieceId === knight); - const targets = new Set(moves.map((m) => m.to)); - (0,__vite_ssr_import_0__.expect)(targets.has((0,__vite_ssr_import_3__.algebraicToSquare)("h2"))).toBe(true); - (0,__vite_ssr_import_0__.expect)(targets.has((0,__vite_ssr_import_3__.algebraicToSquare)("a3"))).toBe(true); - (0,__vite_ssr_import_0__.expect)(targets.has((0,__vite_ssr_import_3__.algebraicToSquare)("c3"))).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("knight on h4 reaches a5 and b4 via the seam (user screenshot regression)", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - activateWrap(engine); - for (let r = 0; r <= 6; r++) clearRank(engine, r); - const knight = findPiece(engine, "white", "knight"); - teleport(engine, knight, (0,__vite_ssr_import_3__.squareOf)(7, 3)); - const moves = engine.getAllLegalMoves().filter((m) => m.pieceId === knight); - const targets = new Set(moves.map((m) => m.to)); - (0,__vite_ssr_import_0__.expect)(targets.has((0,__vite_ssr_import_3__.algebraicToSquare)("a6"))).toBe(true); - (0,__vite_ssr_import_0__.expect)(targets.has((0,__vite_ssr_import_3__.algebraicToSquare)("b5"))).toBe(true); - (0,__vite_ssr_import_0__.expect)(targets.has((0,__vite_ssr_import_3__.algebraicToSquare)("b3"))).toBe(true); - (0,__vite_ssr_import_0__.expect)(targets.has((0,__vite_ssr_import_3__.algebraicToSquare)("a2"))).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("king on a-file can step onto h-file via the seam", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - activateWrap(engine); - clearRank(engine, 1); - clearRank(engine, 0); - const king = findPiece(engine, "white", "king"); - teleport(engine, king, (0,__vite_ssr_import_3__.squareOf)(0, 3)); - clearRank(engine, 3); - teleport(engine, king, (0,__vite_ssr_import_3__.squareOf)(0, 3)); - const moves = engine.getAllLegalMoves().filter((m) => m.pieceId === king); - const targets = new Set(moves.map((m) => m.to)); - (0,__vite_ssr_import_0__.expect)(targets.has((0,__vite_ssr_import_3__.algebraicToSquare)("h4"))).toBe(true); - (0,__vite_ssr_import_0__.expect)(targets.has((0,__vite_ssr_import_3__.algebraicToSquare)("h5"))).toBe(true); - (0,__vite_ssr_import_0__.expect)(targets.has((0,__vite_ssr_import_3__.algebraicToSquare)("h3"))).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("bishop on a-file gets wrap-around diagonal moves to h-file", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - activateWrap(engine); - clearRank(engine, 1); - clearRank(engine, 2); - clearRank(engine, 3); - const bishop = findPiece(engine, "white", "bishop"); - teleport(engine, bishop, (0,__vite_ssr_import_3__.squareOf)(0, 3)); - const moves = engine.getAllLegalMoves().filter((m) => m.pieceId === bishop); - const targets = new Set(moves.map((m) => m.to)); - (0,__vite_ssr_import_0__.expect)(targets.has((0,__vite_ssr_import_3__.algebraicToSquare)("h5"))).toBe(true); - (0,__vite_ssr_import_0__.expect)(targets.has((0,__vite_ssr_import_3__.algebraicToSquare)("h3"))).toBe(true); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFFLEVBQVksQ0FBQztBQUl0RCxxQ0FBTyxRQUFRLE9BQUkseUNBQWtCLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJO0FBRXRELHFDQUFPLFFBQVEsT0FBSSx5Q0FBa0IsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUk7QUFBQSxFQUN4RCxDQUFDO0FBQ0gsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsid3JhcC1ib2FyZC50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGFyZ2V0ZWQgdGVzdHMgZm9yIHRoZSBjeWxpbmRyaWNhbC1ib2FyZCBwcmVzZXQuXG4gKlxuICogRWFybGllciBpbXBsZW1lbnRhdGlvbiBjb250cmlidXRlZCBvbmx5IGEgc2luZ2xlIG9uZS1zcXVhcmUgaG9wIGZyb21cbiAqIGFuIGVkZ2UgZmlsZSB0byB0aGUgb3Bwb3NpdGUgZWRnZSBmaWxlOyB0aGlzIHN1aXRlIGRvY3VtZW50cyB0aGVcbiAqIGludGVuZGVkIFwic2xpZGVzIGNvbnRpbnVlIHBhc3QgdGhlIHNlYW1cIiBiZWhhdmlvdXIuXG4gKi9cbmltcG9ydCB7IGRlc2NyaWJlLCBpdCwgZXhwZWN0IH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgQ2hlc3NFbmdpbmUgfSBmcm9tIFwiLi4vZW5naW5lLmpzXCI7XG5pbXBvcnQgeyBhbGdlYnJhaWNUb1NxdWFyZSwgc3F1YXJlT2YsIGZpbGVPZiwgcmFua09mIH0gZnJvbSBcIi4uL2Nvb3JkLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNxdWFyZSB9IGZyb20gXCIuLi9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcblxuZnVuY3Rpb24gYWN0aXZhdGVXcmFwKGVuZ2luZTogQ2hlc3NFbmdpbmUpOiB2b2lkIHtcbiAgZW5naW5lLmFjdGl2ZVByZXNldHMucmVwbGFjZUFsbChbXG4gICAgeyBpZDogXCJ3cmFwLWJvYXJkXCIsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgXSk7XG59XG5cbi8qKiBSZW1vdmUgZXZlcnkgcGllY2Ugc3RhbmRpbmcgb24gdGhlIGdpdmVuIHJhbmsgc28gd2UgY2FuIHN0YWdlIGFcbiAqICBjbGVhbiByb29rIHNsaWRlIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uJ3NcbiAqICBwYXducyBhbmQgcGllY2VzIGludGVyZmVyaW5nLiAqL1xuZnVuY3Rpb24gY2xlYXJSYW5rKGVuZ2luZTogQ2hlc3NFbmdpbmUsIHJhbms6IG51bWJlcik6IHZvaWQge1xuICBjb25zdCBmYWN0cyA9IGVuZ2luZS5zZXNzaW9uLmFsbEZhY3RzKCk7XG4gIGNvbnN0IHRvUmV0cmFjdDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBmIG9mIGZhY3RzKSB7XG4gICAgaWYgKGYuYXR0ciAhPT0gXCJQb3NpdGlvblwiKSBjb250aW51ZTtcbiAgICBpZiAocmFua09mKGYudmFsdWUgYXMgbnVtYmVyKSA9PT0gcmFuaykgdG9SZXRyYWN0LnB1c2goZi5pZCBhcyBudW1iZXIpO1xuICB9XG4gIGZvciAoY29uc3QgaWQgb2YgdG9SZXRyYWN0KSB7XG4gICAgY29uc3QgZWlkID0gaWQgYXMgRW50aXR5SWQ7XG4gICAgaWYgKGVuZ2luZS5zZXNzaW9uLmNvbnRhaW5zKGVpZCwgXCJQb3NpdGlvblwiKSkge1xuICAgICAgZW5naW5lLnNlc3Npb24ucmV0cmFjdChlaWQsIFwiUG9zaXRpb25cIik7XG4gICAgfVxuICB9XG59XG5cbi8qKiBNb3ZlIGEgcGllY2UgdG8gYSBzcGVjaWZpYyBzcXVhcmUuIFVzZWQgdG8gcGFyayBhIHJvb2sgd2hlcmUgd2VcbiAqICB3YW50IGl0IGZvciB0aGUgdGVzdC4gKi9cbmZ1bmN0aW9uIHRlbGVwb3J0KGVuZ2luZTogQ2hlc3NFbmdpbmUsIHBpZWNlSWQ6IG51bWJlciwgdG86IFNxdWFyZSk6IHZvaWQge1xuICBlbmdpbmUuc2Vzc2lvbi5pbnNlcnQocGllY2VJZCBhcyBFbnRpdHlJZCwgXCJQb3NpdGlvblwiLCB0byk7XG59XG5cbi8qKiBGaW5kIGFueSBwaWVjZSBvZiBhIGdpdmVuIGNvbG9yK3R5cGUuICovXG5mdW5jdGlvbiBmaW5kUGllY2UoXG4gIGVuZ2luZTogQ2hlc3NFbmdpbmUsXG4gIGNvbG9yOiBzdHJpbmcsXG4gIHR5cGU6IHN0cmluZyxcbik6IG51bWJlciB8IG51bGwge1xuICBjb25zdCBmYWN0cyA9IGVuZ2luZS5zZXNzaW9uLmFsbEZhY3RzKCk7XG4gIGZvciAoY29uc3QgZiBvZiBmYWN0cykge1xuICAgIGlmIChmLmF0dHIgIT09IFwiUGllY2VUeXBlXCIgfHwgZi52YWx1ZSAhPT0gdHlwZSkgY29udGludWU7XG4gICAgY29uc3QgY29sb3JGYWN0ID0gZmFjdHMuZmluZChjID0+IGMuaWQgPT09IGYuaWQgJiYgYy5hdHRyID09PSBcIkNvbG9yXCIpO1xuICAgIGlmIChjb2xvckZhY3Q/LnZhbHVlID09PSBjb2xvcikgcmV0dXJuIGYuaWQgYXMgbnVtYmVyO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5kZXNjcmliZShcIndyYXAtYm9hcmQgcHJlc2V0IOKAlCBob3Jpem9udGFsIHNsaWRlIHdyYXBcIiwgKCkgPT4ge1xuICBpdChcInJvb2sgc2xpZGluZyBvZmYgaC1maWxlIHRvd2FyZCBhLWZpbGUgcmVhY2hlcyB0aGUgb3Bwb3NpdGUgc2lkZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgYWN0aXZhdGVXcmFwKGVuZ2luZSk7XG4gICAgY2xlYXJSYW5rKGVuZ2luZSwgMyk7IC8vIHJhbmsgNCBpbiAxLWluZGV4ZWQgPSByYW5rIDMgaW4gMC1pbmRleGVkXG5cbiAgICBjb25zdCByb29rID0gZmluZFBpZWNlKGVuZ2luZSwgXCJ3aGl0ZVwiLCBcInJvb2tcIikhO1xuICAgIHRlbGVwb3J0KGVuZ2luZSwgcm9vaywgc3F1YXJlT2YoMywgMykgYXMgU3F1YXJlKTsgLy8gZDRcblxuICAgIC8vIFdpdGggYW4gZW1wdHkgcmFuayA0IGluIGVpdGhlciBkaXJlY3Rpb24sIGQ0IHJvb2sgc2hvdWxkIGJlIGFibGVcbiAgICAvLyB0byB3cmFwIHBhc3QgaDQgdG8gbGFuZCBvbiBhNC9iNC9jNC8uLiB1cCB0byBqdXN0IGJlZm9yZSBkNC5cbiAgICBjb25zdCBtb3ZlcyA9IGVuZ2luZS5nZXRBbGxMZWdhbE1vdmVzKCkuZmlsdGVyKG0gPT4gbS5waWVjZUlkID09PSByb29rKTtcbiAgICBjb25zdCB0YXJnZXRGaWxlcyA9IG5ldyBTZXQobW92ZXMubWFwKG0gPT4gZmlsZU9mKG0udG8gYXMgbnVtYmVyKSkpO1xuXG4gICAgLy8gTm9ybWFsIHNsaWRlIG9uIHJhbmsgNDogYTQuLmg0IG1pbnVzIGQ0IGl0c2VsZi4gV3JhcCBzaG91bGQgYWRkXG4gICAgLy8gbm90aGluZyBuZXcgKGFsbCBmaWxlcyBhbHJlYWR5IHJlYWNoYWJsZSB2aWEgbm9ybWFsIHNsaWRlcyBvblxuICAgIC8vIGFuIGVtcHR5IHJhbmspIOKAlCBidXQgd2UgYXNzZXJ0IHRoZSBiYXNlIHNsaWRlIElTIGNvbXBsZXRlLFxuICAgIC8vIHdoaWNoIHdhcyBicm9rZW4gYmVmb3JlIHRoZSBmaXggKHdyYXAgd291bGQgb25seSBhZGQgYSBzaW5nbGVcbiAgICAvLyBob3AgZnJvbSBlZGdlIGZpbGVzKS5cbiAgICBleHBlY3QodGFyZ2V0RmlsZXMuaGFzKDApKS50b0JlKHRydWUpOyAvLyBhNFxuICAgIGV4cGVjdCh0YXJnZXRGaWxlcy5oYXMoNykpLnRvQmUodHJ1ZSk7IC8vIGg0XG4gIH0pO1xuXG4gIGl0KFwicm9vayBvbiBhLWZpbGUgcmVhY2hlcyBoLWZpbGUgdmlhIHdyYXAgd2hlbiBwYXRoIG9uIGJvdGggc2lkZXMgaXMgY2xlYXJcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGFjdGl2YXRlV3JhcChlbmdpbmUpO1xuICAgIGNsZWFyUmFuayhlbmdpbmUsIDMpO1xuXG4gICAgY29uc3Qgcm9vayA9IGZpbmRQaWVjZShlbmdpbmUsIFwid2hpdGVcIiwgXCJyb29rXCIpITtcbiAgICB0ZWxlcG9ydChlbmdpbmUsIHJvb2ssIHNxdWFyZU9mKDAsIDMpIGFzIFNxdWFyZSk7IC8vIGE0XG5cbiAgICBjb25zdCBtb3ZlcyA9IGVuZ2luZS5nZXRBbGxMZWdhbE1vdmVzKCkuZmlsdGVyKG0gPT4gbS5waWVjZUlkID09PSByb29rKTtcbiAgICBjb25zdCB0YXJnZXRGaWxlcyA9IG5ldyBTZXQobW92ZXMubWFwKG0gPT4gZmlsZU9mKG0udG8gYXMgbnVtYmVyKSkpO1xuICAgIC8vIGE0IOKGkiBiNC4uaDQgdmlhIG5vcm1hbCBzbGlkZSBpcyBhbHJlYWR5IGNvdmVyZWQ7IHdyYXAgY29udHJpYnV0ZXNcbiAgICAvLyB0aGUgb3RoZXIgZGlyZWN0aW9uOiBhNCDihpIgaDQgKGRpcmVjdCBzZWFtIGNyb3NzaW5nKS4gQXNzZXJ0IGJvdGhcbiAgICAvLyBlbmRzIG9mIHRoZSByYW5rIGFyZSByZWFjaGFibGUuXG4gICAgZXhwZWN0KHRhcmdldEZpbGVzLmhhcyg3KSkudG9CZSh0cnVlKTsgLy8gaDQgdmlhIHRoZSB3cmFwIHNlYW1cbiAgICBleHBlY3QodGFyZ2V0RmlsZXMuaGFzKDEpKS50b0JlKHRydWUpOyAvLyBiNCB2aWEgbm9ybWFsIHNsaWRlXG4gIH0pO1xuXG4gIGl0KFwiYSBmcmllbmRseSBwaWVjZSBibG9ja3MgdGhlIG91dGdvaW5nIHJpZ2h0d2FyZCBzbGlkZSBidXQgbGVmdHdhcmQgd3JhcCBzdGlsbCByZWFjaGVzIHRoZSBvdGhlciBzaWRlXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBhY3RpdmF0ZVdyYXAoZW5naW5lKTtcbiAgICBjbGVhclJhbmsoZW5naW5lLCAzKTtcblxuICAgIGNvbnN0IHJvb2sgPSBmaW5kUGllY2UoZW5naW5lLCBcIndoaXRlXCIsIFwicm9va1wiKSE7XG4gICAgdGVsZXBvcnQoZW5naW5lLCByb29rLCBzcXVhcmVPZigzLCAzKSBhcyBTcXVhcmUpOyAvLyBkNFxuXG4gICAgLy8gUGFyayBhIHdoaXRlIHBhd24gb24gZTQgKGZpbGUgNCkuIFRoZSByaWdodHdhcmQgc2xpZGUgaXMgYmxvY2tlZFxuICAgIC8vIGltbWVkaWF0ZWx5OyBpdHMgd3JhcCBicmFuY2gg4oCUIHdoaWNoIHJlcXVpcmVzIGEgY2xlYXIgb3V0Z29pbmdcbiAgICAvLyBwYXRoIHRvIGg0IOKAlCBjYW5ub3QgZmlyZS4gVGhlIGxlZnR3YXJkIHNsaWRlIGlzIHN0aWxsIGNsZWFyXG4gICAgLy8gdGhyb3VnaCBhNCwgc28gdGhlIGxlZnR3YXJkIHdyYXAgYnJhbmNoIERPRVMgZmlyZTogcGFzdCB0aGVcbiAgICAvLyBhLXNlYW0gb250byBoNCwgdGhlbiByaWdodHdhcmQgYWxvbmcgcmFuayA0IHVudGlsIHdlIGhpdCBlNFxuICAgIC8vIChhbGx5KSBhbmQgc3RvcC4gU28gaDQvZzQvZjQgcmVtYWluIHJlYWNoYWJsZSB2aWEgd3JhcCwgYnV0IGU0XG4gICAgLy8gaXRzZWxmIG5ldmVyIGlzIChpdCdzIHRoZSBhbGx5KS4gU3F1YXJlcyBkaXJlY3RseSByaWdodCBvZiBkNFxuICAgIC8vIGFyZSBub3QgcmVhY2hhYmxlIGJlY2F1c2UgdGhlIG5vcm1hbCByaWdodHdhcmQgc2xpZGUgaXMgYmxvY2tlZC5cbiAgICBjb25zdCB3aGl0ZVBhd24gPSAoKCkgPT4ge1xuICAgICAgY29uc3QgZmFjdHMgPSBlbmdpbmUuc2Vzc2lvbi5hbGxGYWN0cygpO1xuICAgICAgZm9yIChjb25zdCBmIG9mIGZhY3RzKSB7XG4gICAgICAgIGlmIChmLmF0dHIgIT09IFwiUGllY2VUeXBlXCIgfHwgZi52YWx1ZSAhPT0gXCJwYXduXCIpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBjID0gZmFjdHMuZmluZCh4ID0+IHguaWQgPT09IGYuaWQgJiYgeC5hdHRyID09PSBcIkNvbG9yXCIpO1xuICAgICAgICBpZiAoYz8udmFsdWUgPT09IFwid2hpdGVcIikgcmV0dXJuIGYuaWQgYXMgbnVtYmVyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSkoKSE7XG4gICAgdGVsZXBvcnQoZW5naW5lLCB3aGl0ZVBhd24sIHNxdWFyZU9mKDQsIDMpIGFzIFNxdWFyZSk7IC8vIGU0XG5cbiAgICBjb25zdCBtb3ZlcyA9IGVuZ2luZS5nZXRBbGxMZWdhbE1vdmVzKCkuZmlsdGVyKG0gPT4gbS5waWVjZUlkID09PSByb29rKTtcbiAgICBjb25zdCB0YXJnZXRzID0gbmV3IFNldChtb3Zlcy5tYXAobSA9PiBtLnRvIGFzIG51bWJlcikpO1xuXG4gICAgZXhwZWN0KHRhcmdldHMuaGFzKGFsZ2VicmFpY1RvU3F1YXJlKFwiZTRcIikpKS50b0JlKGZhbHNlKTsgLy8gYWxseSBibG9ja3NcbiAgICBleHBlY3QodGFyZ2V0cy5oYXMoYWxnZWJyYWljVG9TcXVhcmUoXCJoNFwiKSkpLnRvQmUodHJ1ZSk7ICAvLyBsZWZ0d2FyZCB3cmFwXG4gICAgZXhwZWN0KHRhcmdldHMuaGFzKGFsZ2VicmFpY1RvU3F1YXJlKFwiZzRcIikpKS50b0JlKHRydWUpOyAgLy8gbGVmdHdhcmQgd3JhcFxuICAgIGV4cGVjdCh0YXJnZXRzLmhhcyhhbGdlYnJhaWNUb1NxdWFyZShcImY0XCIpKSkudG9CZSh0cnVlKTsgIC8vIGxlZnR3YXJkIHdyYXBcbiAgICBleHBlY3QodGFyZ2V0cy5oYXMoYWxnZWJyYWljVG9TcXVhcmUoXCJhNFwiKSkpLnRvQmUodHJ1ZSk7ICAvLyBub3JtYWwgbGVmdCBzbGlkZVxuICAgIGV4cGVjdCh0YXJnZXRzLmhhcyhhbGdlYnJhaWNUb1NxdWFyZShcImM0XCIpKSkudG9CZSh0cnVlKTsgIC8vIG5vcm1hbCBsZWZ0IHNsaWRlXG4gIH0pO1xuXG4gIGl0KFwiYm90aCBvdXRnb2luZyBwYXRocyBibG9ja2VkIGJ5IGFsbGllcyDigJQgbm8gd3JhcCBpbiBlaXRoZXIgZGlyZWN0aW9uXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBhY3RpdmF0ZVdyYXAoZW5naW5lKTtcbiAgICBjbGVhclJhbmsoZW5naW5lLCAzKTtcblxuICAgIGNvbnN0IHJvb2sgPSBmaW5kUGllY2UoZW5naW5lLCBcIndoaXRlXCIsIFwicm9va1wiKSE7XG4gICAgdGVsZXBvcnQoZW5naW5lLCByb29rLCBzcXVhcmVPZigzLCAzKSBhcyBTcXVhcmUpOyAvLyBkNFxuXG4gICAgLy8gQnJhY2tldCB0aGUgcm9vayB3aXRoIG93biBwYXducyBzbyBuZWl0aGVyIHJpZ2h0d2FyZCBub3JcbiAgICAvLyBsZWZ0d2FyZCBzbGlkZSBjYW4gcmVhY2ggaXRzIHJlc3BlY3RpdmUgZWRnZS5cbiAgICBjb25zdCB3aGl0ZVBhd25zOiBudW1iZXJbXSA9IFtdO1xuICAgIGNvbnN0IGZhY3RzID0gZW5naW5lLnNlc3Npb24uYWxsRmFjdHMoKTtcbiAgICBmb3IgKGNvbnN0IGYgb2YgZmFjdHMpIHtcbiAgICAgIGlmIChmLmF0dHIgIT09IFwiUGllY2VUeXBlXCIgfHwgZi52YWx1ZSAhPT0gXCJwYXduXCIpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgYyA9IGZhY3RzLmZpbmQoeCA9PiB4LmlkID09PSBmLmlkICYmIHguYXR0ciA9PT0gXCJDb2xvclwiKTtcbiAgICAgIGlmIChjPy52YWx1ZSA9PT0gXCJ3aGl0ZVwiKSB3aGl0ZVBhd25zLnB1c2goZi5pZCBhcyBudW1iZXIpO1xuICAgIH1cbiAgICB0ZWxlcG9ydChlbmdpbmUsIHdoaXRlUGF3bnNbMF0hLCBzcXVhcmVPZig0LCAzKSBhcyBTcXVhcmUpOyAvLyBlNFxuICAgIHRlbGVwb3J0KGVuZ2luZSwgd2hpdGVQYXduc1sxXSEsIHNxdWFyZU9mKDIsIDMpIGFzIFNxdWFyZSk7IC8vIGM0XG5cbiAgICBjb25zdCBtb3ZlcyA9IGVuZ2luZS5nZXRBbGxMZWdhbE1vdmVzKCkuZmlsdGVyKG0gPT4gbS5waWVjZUlkID09PSByb29rKTtcbiAgICBjb25zdCB3cmFwVGFyZ2V0cyA9IG1vdmVzXG4gICAgICAuZmlsdGVyKG0gPT4gcmFua09mKG0udG8gYXMgbnVtYmVyKSA9PT0gMylcbiAgICAgIC5tYXAobSA9PiBmaWxlT2YobS50byBhcyBudW1iZXIpKTtcbiAgICAvLyBSb29rIGNhbid0IGdvIGFueXdoZXJlIG9uIHJhbmsgNCDigJQgYm90aCBuZWlnaGJvdXJzIGFyZSBhbGxpZXMuXG4gICAgZXhwZWN0KHdyYXBUYXJnZXRzKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xuXG4gIGl0KFwicXVlZW4gYWxzbyBiZW5lZml0cyBmcm9tIHRoZSB3cmFwIChub3QganVzdCByb29rcylcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGFjdGl2YXRlV3JhcChlbmdpbmUpO1xuICAgIGNsZWFyUmFuayhlbmdpbmUsIDMpO1xuXG4gICAgY29uc3QgcXVlZW4gPSBmaW5kUGllY2UoZW5naW5lLCBcIndoaXRlXCIsIFwicXVlZW5cIikhO1xuICAgIHRlbGVwb3J0KGVuZ2luZSwgcXVlZW4sIHNxdWFyZU9mKDMsIDMpIGFzIFNxdWFyZSk7IC8vIGQ0XG5cbiAgICBjb25zdCBtb3ZlcyA9IGVuZ2luZS5nZXRBbGxMZWdhbE1vdmVzKCkuZmlsdGVyKG0gPT4gbS5waWVjZUlkID09PSBxdWVlbik7XG4gICAgY29uc3QgdGFyZ2V0RmlsZXMgPSBuZXcgU2V0KFxuICAgICAgbW92ZXNcbiAgICAgICAgLmZpbHRlcihtID0+IHJhbmtPZihtLnRvIGFzIG51bWJlcikgPT09IDMpIC8vIG9ubHkgcmFuay00IG1vdmVzXG4gICAgICAgIC5tYXAobSA9PiBmaWxlT2YobS50byBhcyBudW1iZXIpKSxcbiAgICApO1xuICAgIGV4cGVjdCh0YXJnZXRGaWxlcy5oYXMoMCkpLnRvQmUodHJ1ZSk7IC8vIGE0XG4gICAgZXhwZWN0KHRhcmdldEZpbGVzLmhhcyg3KSkudG9CZSh0cnVlKTsgLy8gaDRcbiAgfSk7XG5cbiAgaXQoXCJrbmlnaHQgb24gaC1maWxlIGdldHMgd3JhcC1hcm91bmQgTC1sZWFwcyB0byBhLWZpbGVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGFjdGl2YXRlV3JhcChlbmdpbmUpO1xuXG4gICAgY29uc3Qga25pZ2h0ID0gZmluZFBpZWNlKGVuZ2luZSwgXCJ3aGl0ZVwiLCBcImtuaWdodFwiKSE7XG4gICAgLy8gUGFyayB0aGUga25pZ2h0IG9uIGgzIChmaWxlIDcsIHJhbmsgMikuIFdpdGggdGhlIGN5bGluZGVyLCB0aGVcbiAgICAvLyA4IGtuaWdodCBvZmZzZXRzIHdyYXAgZmlsZSBtb2QgOC4gRnJvbSAoZmlsZT03LCByYW5rPTIpIHRoZVxuICAgIC8vIHdyYXAtY3Jvc3NpbmcgdGFyZ2V0cyBhcmU6XG4gICAgLy8gICAoKzEsKzIpIOKGkiBmaWxlIDAsIHJhbmsgNCDihpIgYTVcbiAgICAvLyAgICgrMiwrMSkg4oaSIGZpbGUgMSwgcmFuayAzIOKGkiBiNFxuICAgIC8vICAgKCsyLC0xKSDihpIgZmlsZSAxLCByYW5rIDEg4oaSIGIyXG4gICAgLy8gICAoKzEsLTIpIOKGkiBmaWxlIDAsIHJhbmsgMCDihpIgYTFcbiAgICAvLyAoU2FtZS1zaWRlIHRhcmdldHMgZjIsIGY0LCBnMSwgZzUgY29tZSBmcm9tIHRoZSBiYXNlIHJ1bGUuKVxuICAgIGNsZWFyUmFuayhlbmdpbmUsIDApO1xuICAgIGNsZWFyUmFuayhlbmdpbmUsIDEpO1xuICAgIGNsZWFyUmFuayhlbmdpbmUsIDIpO1xuICAgIGNsZWFyUmFuayhlbmdpbmUsIDMpO1xuICAgIGNsZWFyUmFuayhlbmdpbmUsIDQpO1xuICAgIHRlbGVwb3J0KGVuZ2luZSwga25pZ2h0LCBzcXVhcmVPZig3LCAyKSBhcyBTcXVhcmUpOyAvLyBoM1xuXG4gICAgY29uc3QgbW92ZXMgPSBlbmdpbmUuZ2V0QWxsTGVnYWxNb3ZlcygpLmZpbHRlcihtID0+IG0ucGllY2VJZCA9PT0ga25pZ2h0KTtcbiAgICBjb25zdCB0YXJnZXRzID0gbmV3IFNldChtb3Zlcy5tYXAobSA9PiBtLnRvIGFzIG51bWJlcikpO1xuICAgIGV4cGVjdCh0YXJnZXRzLmhhcyhhbGdlYnJhaWNUb1NxdWFyZShcImE1XCIpKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QodGFyZ2V0cy5oYXMoYWxnZWJyYWljVG9TcXVhcmUoXCJiNFwiKSkpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KHRhcmdldHMuaGFzKGFsZ2VicmFpY1RvU3F1YXJlKFwiYjJcIikpKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdCh0YXJnZXRzLmhhcyhhbGdlYnJhaWNUb1NxdWFyZShcImExXCIpKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJrbmlnaHQgb24gYS1maWxlIGdldHMgd3JhcC1hcm91bmQgTC1sZWFwcyB0byBoLWZpbGVcIiwgKCkgPT4ge1xuICAgIC8vIFJlZ3Jlc3Npb246IGEga25pZ2h0IG5lYXIgdGhlIGxlZnQgZWRnZSBsZWFwaW5nIGFjcm9zcyB0aGUgc2VhbS5cbiAgICAvLyBiMSAoZmlsZSAxLCByYW5rIDApIGhhcyBvbmUgd3JhcC1vbmx5IHRhcmdldCBhdCBoMjpcbiAgICAvLyAgICgtMiwrMSkg4oaSIGZpbGUgLTEgPSA3LCByYW5rIDEg4oaSIGgyLlxuICAgIC8vIFBsdXMgdGhlIHN0YW5kYXJkIGEzLCBjMywgZDIgZnJvbSB0aGUgYmFzZSBydWxlLlxuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGFjdGl2YXRlV3JhcChlbmdpbmUpO1xuICAgIGNsZWFyUmFuayhlbmdpbmUsIDApO1xuICAgIGNsZWFyUmFuayhlbmdpbmUsIDEpO1xuICAgIGNsZWFyUmFuayhlbmdpbmUsIDIpO1xuICAgIGNvbnN0IGtuaWdodCA9IGZpbmRQaWVjZShlbmdpbmUsIFwid2hpdGVcIiwgXCJrbmlnaHRcIikhO1xuICAgIHRlbGVwb3J0KGVuZ2luZSwga25pZ2h0LCBzcXVhcmVPZigxLCAwKSBhcyBTcXVhcmUpOyAvLyBiMVxuXG4gICAgY29uc3QgbW92ZXMgPSBlbmdpbmUuZ2V0QWxsTGVnYWxNb3ZlcygpLmZpbHRlcihtID0+IG0ucGllY2VJZCA9PT0ga25pZ2h0KTtcbiAgICBjb25zdCB0YXJnZXRzID0gbmV3IFNldChtb3Zlcy5tYXAobSA9PiBtLnRvIGFzIG51bWJlcikpO1xuICAgIGV4cGVjdCh0YXJnZXRzLmhhcyhhbGdlYnJhaWNUb1NxdWFyZShcImgyXCIpKSkudG9CZSh0cnVlKTsgLy8gLTIsKzEgd3JhcFxuICAgIGV4cGVjdCh0YXJnZXRzLmhhcyhhbGdlYnJhaWNUb1NxdWFyZShcImEzXCIpKSkudG9CZSh0cnVlKTsgLy8gLTEsKzIgYmFzZVxuICAgIGV4cGVjdCh0YXJnZXRzLmhhcyhhbGdlYnJhaWNUb1NxdWFyZShcImMzXCIpKSkudG9CZSh0cnVlKTsgLy8gKzEsKzIgYmFzZVxuICB9KTtcblxuICBpdChcImtuaWdodCBvbiBoNCByZWFjaGVzIGE1IGFuZCBiNCB2aWEgdGhlIHNlYW0gKHVzZXIgc2NyZWVuc2hvdCByZWdyZXNzaW9uKVwiLCAoKSA9PiB7XG4gICAgLy8gVXNlciByZXBvcnRlZDogd2l0aCBjeWxpbmRyaWNhbCBlbmFibGVkLCBhIGtuaWdodCBvbiBoNCBoYWQgbm9cbiAgICAvLyB3cmFwIG1vdmVzIGludG8gYS1maWxlIHRlcnJpdG9yeS5cbiAgICAvLyBGcm9tIChmaWxlIDcsIHJhbmsgMyk6XG4gICAgLy8gICAoKzEsKzIpIOKGkiBmaWxlIDAsIHJhbmsgNSDihpIgYTZcbiAgICAvLyAgICgrMiwrMSkg4oaSIGZpbGUgMSwgcmFuayA0IOKGkiBiNSAgIOKGkCBiNSBwZXIgdXNlciwgY2xvc2UgdG8gYjQgZXhwZWN0YXRpb25cbiAgICAvLyAgICgrMiwtMSkg4oaSIGZpbGUgMSwgcmFuayAyIOKGkiBiM1xuICAgIC8vICAgKCsxLC0yKSDihpIgZmlsZSAwLCByYW5rIDEg4oaSIGEyXG4gICAgLy8gTm90ZSB0aGUgdXNlciBzYWlkIFwiYTUgYW5kIGI0XCIgYnV0IHRoZSBzdHJpY3Qga25pZ2h0IGdlb21ldHJ5XG4gICAgLy8gZnJvbSBoNCBhY3R1YWxseSBwcm9kdWNlcyBhNi9iNS9iMy9hMi4gVGhlIElNUE9SVEFOVCB0aGluZyBpc1xuICAgIC8vIHRoYXQgd3JhcC1jcm9zc2luZyB0YXJnZXRzIGV4aXN0IGF0IGFsbCDigJQgdGhlIG9sZCBpbXBsZW1lbnRhdGlvblxuICAgIC8vIHJldHVybmVkIE5PTkUuIFdlIGFzc2VydCBvbiB0aGUgcmVhbCBtYXRoLlxuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGFjdGl2YXRlV3JhcChlbmdpbmUpO1xuICAgIGZvciAobGV0IHIgPSAwOyByIDw9IDY7IHIrKykgY2xlYXJSYW5rKGVuZ2luZSwgcik7XG4gICAgY29uc3Qga25pZ2h0ID0gZmluZFBpZWNlKGVuZ2luZSwgXCJ3aGl0ZVwiLCBcImtuaWdodFwiKSE7XG4gICAgdGVsZXBvcnQoZW5naW5lLCBrbmlnaHQsIHNxdWFyZU9mKDcsIDMpIGFzIFNxdWFyZSk7IC8vIGg0XG5cbiAgICBjb25zdCBtb3ZlcyA9IGVuZ2luZS5nZXRBbGxMZWdhbE1vdmVzKCkuZmlsdGVyKG0gPT4gbS5waWVjZUlkID09PSBrbmlnaHQpO1xuICAgIGNvbnN0IHRhcmdldHMgPSBuZXcgU2V0KG1vdmVzLm1hcChtID0+IG0udG8gYXMgbnVtYmVyKSk7XG4gICAgZXhwZWN0KHRhcmdldHMuaGFzKGFsZ2VicmFpY1RvU3F1YXJlKFwiYTZcIikpKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdCh0YXJnZXRzLmhhcyhhbGdlYnJhaWNUb1NxdWFyZShcImI1XCIpKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QodGFyZ2V0cy5oYXMoYWxnZWJyYWljVG9TcXVhcmUoXCJiM1wiKSkpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KHRhcmdldHMuaGFzKGFsZ2VicmFpY1RvU3F1YXJlKFwiYTJcIikpKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcImtpbmcgb24gYS1maWxlIGNhbiBzdGVwIG9udG8gaC1maWxlIHZpYSB0aGUgc2VhbVwiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgYWN0aXZhdGVXcmFwKGVuZ2luZSk7XG4gICAgLy8gQ2xlYXIgcmFuayAyIHNvIHRoZSBhMiBzcXVhcmUgaXMgZW1wdHkgYW5kIHRoZSBraW5nIGhhcyBlbXB0eVxuICAgIC8vIHNxdWFyZXMgdG8gd2FsayBvbnRvLiBBbHNvIGNsZWFyIHRoZSBraW5nJ3MgaG9tZSByYW5rIG5laWdoYm91cnMuXG4gICAgY2xlYXJSYW5rKGVuZ2luZSwgMSk7XG4gICAgY2xlYXJSYW5rKGVuZ2luZSwgMCk7XG5cbiAgICBjb25zdCBraW5nID0gZmluZFBpZWNlKGVuZ2luZSwgXCJ3aGl0ZVwiLCBcImtpbmdcIikhO1xuICAgIHRlbGVwb3J0KGVuZ2luZSwga2luZywgc3F1YXJlT2YoMCwgMykgYXMgU3F1YXJlKTsgLy8gYTRcbiAgICBjbGVhclJhbmsoZW5naW5lLCAzKTtcbiAgICB0ZWxlcG9ydChlbmdpbmUsIGtpbmcsIHNxdWFyZU9mKDAsIDMpIGFzIFNxdWFyZSk7IC8vIGE0IGFnYWluIGFmdGVyIHJhbmsgY2xlYXJcblxuICAgIGNvbnN0IG1vdmVzID0gZW5naW5lLmdldEFsbExlZ2FsTW92ZXMoKS5maWx0ZXIobSA9PiBtLnBpZWNlSWQgPT09IGtpbmcpO1xuICAgIGNvbnN0IHRhcmdldHMgPSBuZXcgU2V0KG1vdmVzLm1hcChtID0+IG0udG8gYXMgbnVtYmVyKSk7XG4gICAgZXhwZWN0KHRhcmdldHMuaGFzKGFsZ2VicmFpY1RvU3F1YXJlKFwiaDRcIikpKS50b0JlKHRydWUpOyAvLyB3ZXN0IHdyYXBcbiAgICBleHBlY3QodGFyZ2V0cy5oYXMoYWxnZWJyYWljVG9TcXVhcmUoXCJoNVwiKSkpLnRvQmUodHJ1ZSk7IC8vIE5XIHdyYXBcbiAgICBleHBlY3QodGFyZ2V0cy5oYXMoYWxnZWJyYWljVG9TcXVhcmUoXCJoM1wiKSkpLnRvQmUodHJ1ZSk7IC8vIFNXIHdyYXBcbiAgfSk7XG5cbiAgaXQoXCJiaXNob3Agb24gYS1maWxlIGdldHMgd3JhcC1hcm91bmQgZGlhZ29uYWwgbW92ZXMgdG8gaC1maWxlXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBhY3RpdmF0ZVdyYXAoZW5naW5lKTtcbiAgICAvLyBDbGVhciBhIGRpYWdvbmFsIHBhdGggc28gdGhlIHdyYXAgaXMgdW5vYnN0cnVjdGVkLlxuICAgIGNsZWFyUmFuayhlbmdpbmUsIDEpO1xuICAgIGNsZWFyUmFuayhlbmdpbmUsIDIpO1xuICAgIGNsZWFyUmFuayhlbmdpbmUsIDMpO1xuXG4gICAgY29uc3QgYmlzaG9wID0gZmluZFBpZWNlKGVuZ2luZSwgXCJ3aGl0ZVwiLCBcImJpc2hvcFwiKSE7XG4gICAgdGVsZXBvcnQoZW5naW5lLCBiaXNob3AsIHNxdWFyZU9mKDAsIDMpIGFzIFNxdWFyZSk7IC8vIGE0XG5cbiAgICBjb25zdCBtb3ZlcyA9IGVuZ2luZS5nZXRBbGxMZWdhbE1vdmVzKCkuZmlsdGVyKG0gPT4gbS5waWVjZUlkID09PSBiaXNob3ApO1xuICAgIGNvbnN0IHRhcmdldHMgPSBuZXcgU2V0KG1vdmVzLm1hcChtID0+IG0udG8gYXMgbnVtYmVyKSk7XG4gICAgLy8gQmlzaG9wIG9uIGE0IHdhbGtpbmcgdXAtbGVmdCB3cmFwczogYTQgLT4gaDUgKGZpbGUgLTEgPSA3LCByYW5rIDQpXG4gICAgLy8gVGhlbiBnNiAoZmlsZSAtMiA9IDYsIHJhbmsgNSkg4oCUIGJ1dCB3ZSBkaWRuJ3QgY2xlYXIgcmFuayA1LCBzb1xuICAgIC8vIHN0b3BzIGF0IGg1IG9yIHdoYXRldmVyIGJsb2NrZXIuIEp1c3QgYXNzZXJ0IGg1IGlzIHJlYWNoYWJsZS5cbiAgICBleHBlY3QodGFyZ2V0cy5oYXMoYWxnZWJyYWljVG9TcXVhcmUoXCJoNVwiKSkpLnRvQmUodHJ1ZSk7XG4gICAgLy8gQW5kIGRvd24tbGVmdCBmcm9tIGE0OiBmaWxlIC0xID0gNywgcmFuayAyIOKGkiBoMy5cbiAgICBleHBlY3QodGFyZ2V0cy5oYXMoYWxnZWJyYWljVG9TcXVhcmUoXCJoM1wiKSkpLnRvQmUodHJ1ZSk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvY2hlc3Mvc3JjL3ByZXNldHMvd3JhcC1ib2FyZC50ZXN0LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/e740e376ffefa5c44186f6d401c545e9e6845fa4 b/7xOfJqsDU787fe61oSCq1/web/e740e376ffefa5c44186f6d401c545e9e6845fa4 deleted file mode 100644 index 380a823..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/e740e376ffefa5c44186f6d401c545e9e6845fa4 +++ /dev/null @@ -1,128 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/presets/index.ts"); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/engine.ts", {"importedNames":["ChessEngine"]}); -(0,__vite_ssr_import_0__.describe)("ChessEngine.presetState — basic operations", () => { - (0,__vite_ssr_import_0__.it)("set / get round-trips primitives", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - const state = engine.presetState("demo"); - state.set("counter", 5); - state.set("name", "hello"); - state.set("flag", true); - (0,__vite_ssr_import_0__.expect)(state.get("counter")).toBe(5); - (0,__vite_ssr_import_0__.expect)(state.get("name")).toBe("hello"); - (0,__vite_ssr_import_0__.expect)(state.get("flag")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("unset keys return undefined", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - const state = engine.presetState("demo"); - (0,__vite_ssr_import_0__.expect)(state.get("counter")).toBeUndefined(); - }); - (0,__vite_ssr_import_0__.it)("has() reports presence correctly", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - const state = engine.presetState("demo"); - (0,__vite_ssr_import_0__.expect)(state.has("counter")).toBe(false); - state.set("counter", 1); - (0,__vite_ssr_import_0__.expect)(state.has("counter")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("delete removes a key and returns true; returns false for missing", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - const state = engine.presetState("demo"); - (0,__vite_ssr_import_0__.expect)(state.delete("counter")).toBe(false); - state.set("counter", 42); - (0,__vite_ssr_import_0__.expect)(state.delete("counter")).toBe(true); - (0,__vite_ssr_import_0__.expect)(state.get("counter")).toBeUndefined(); - }); - (0,__vite_ssr_import_0__.it)("set overwrites prior value", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - const state = engine.presetState("demo"); - state.set("counter", 1); - state.set("counter", 2); - (0,__vite_ssr_import_0__.expect)(state.get("counter")).toBe(2); - }); - (0,__vite_ssr_import_0__.it)("all() returns the full snapshot", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - const state = engine.presetState("demo"); - state.set("counter", 3); - state.set("name", "x"); - (0,__vite_ssr_import_0__.expect)(state.all()).toEqual({ counter: 3, name: "x" }); - }); -}); -(0,__vite_ssr_import_0__.describe)("ChessEngine.presetState — isolation", () => { - (0,__vite_ssr_import_0__.it)("two preset ids on the same engine don't collide", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - const a = engine.presetState("preset-a"); - const b = engine.presetState("preset-b"); - a.set("counter", 1); - b.set("counter", 999); - (0,__vite_ssr_import_0__.expect)(a.get("counter")).toBe(1); - (0,__vite_ssr_import_0__.expect)(b.get("counter")).toBe(999); - }); - (0,__vite_ssr_import_0__.it)("two engines hold independent state under the same preset id", () => { - const e1 = new __vite_ssr_import_2__.ChessEngine(); - const e2 = new __vite_ssr_import_2__.ChessEngine(); - const s1 = e1.presetState("demo"); - const s2 = e2.presetState("demo"); - s1.set("counter", 100); - s2.set("counter", 200); - (0,__vite_ssr_import_0__.expect)(s1.get("counter")).toBe(100); - (0,__vite_ssr_import_0__.expect)(s2.get("counter")).toBe(200); - }); -}); -(0,__vite_ssr_import_0__.describe)("ChessEngine.presetState — auto-clear on deactivate", () => { - (0,__vite_ssr_import_0__.it)("state is cleared when preset is deactivated via setActivePresets", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null } - ]); - const state = engine.presetState("piece-hp"); - state.set("counter", 7); - (0,__vite_ssr_import_0__.expect)(state.get("counter")).toBe(7); - engine.setActivePresets([]); - const fresh = engine.presetState("piece-hp"); - (0,__vite_ssr_import_0__.expect)(fresh.get("counter")).toBeUndefined(); - }); - (0,__vite_ssr_import_0__.it)("state survives scope / duration changes on the same id", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: null } - ]); - const state = engine.presetState("piece-hp"); - state.set("counter", 11); - engine.setActivePresets([ - { id: "piece-hp", scope: "both", turnsRemaining: 10 } - ]); - (0,__vite_ssr_import_0__.expect)(state.get("counter")).toBe(11); - }); -}); -(0,__vite_ssr_import_0__.describe)("capture-to-win migrated to presetState", () => { - (0,__vite_ssr_import_0__.it)("first capture sets winner; onCheckGameResult reads it", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "capture-to-win", scope: "both", turnsRemaining: null } - ]); - (0,__vite_ssr_import_0__.expect)(engine.checkGameResult()).toBe("ongoing"); - const e4 = engine.findMove(12, 28); - engine.applyMove(e4); - const d5 = engine.findMove(51, 35); - engine.applyMove(d5); - const exd5 = engine.findMove(28, 35); - (0,__vite_ssr_import_0__.expect)(exd5.isCapture).toBe(true); - const result = engine.applyMove(exd5); - (0,__vite_ssr_import_0__.expect)(result).toBe("white-wins"); - }); - (0,__vite_ssr_import_0__.it)("deactivation clears the winner state", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: "capture-to-win", scope: "both", turnsRemaining: null } - ]); - engine.applyMove(engine.findMove(12, 28)); - engine.applyMove(engine.findMove(51, 35)); - engine.applyMove(engine.findMove(28, 35)); - (0,__vite_ssr_import_0__.expect)(engine.checkGameResult()).toBe("white-wins"); - engine.setActivePresets([]); - (0,__vite_ssr_import_0__.expect)(engine.checkGameResult()).toBe("ongoing"); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEVBQ2pELENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJwcmVzZXQtc3RhdGUudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRlc3RzIGZvciBgQ2hlc3NFbmdpbmUucHJlc2V0U3RhdGVgIOKAlCB0aGUgcGVyLXByZXNldCwgcGVyLWVuZ2luZVxuICogc3RhdGUgYmFnLlxuICpcbiAqIENvdmVyYWdlOlxuICogICAtIGJhc2ljIHJlYWQgLyB3cml0ZSAvIGRlbGV0ZSAvIGhhcyAvIGFsbFxuICogICAtIGlzb2xhdGlvbiBhY3Jvc3MgcHJlc2V0IGlkcyAobm8gY29sbGlzaW9uKVxuICogICAtIGlzb2xhdGlvbiBhY3Jvc3MgZW5naW5lcyAobm8gc2hhcmVkIG11dGFibGUgc3RhdGUpXG4gKiAgIC0gYXV0by1jbGVhciBvbiBkZWFjdGl2YXRlIChpbmNsdWRpbmcgdGltZXIgZXhwaXJ5KVxuICogICAtIGV4cGxpY2l0IHByZXNlcnZhdGlvbiBieSBvbkRlYWN0aXZhdGUgaXMgTk9UIHBvc3NpYmxlIOKAlFxuICogICAgIGNsZWFyIHJ1bnMgQUZURVIgdGhlIGhvb2sgKGRlc2lnbiBjaG9pY2UpXG4gKi9cbmltcG9ydCB7IGRlc2NyaWJlLCBpdCwgZXhwZWN0IH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgQ2hlc3NFbmdpbmUgfSBmcm9tIFwiLi4vZW5naW5lLmpzXCI7XG5cbmludGVyZmFjZSBEZW1vU3RhdGUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvdW50ZXI6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBmbGFnOiBib29sZWFuO1xufVxuXG5kZXNjcmliZShcIkNoZXNzRW5naW5lLnByZXNldFN0YXRlIOKAlCBiYXNpYyBvcGVyYXRpb25zXCIsICgpID0+IHtcbiAgaXQoXCJzZXQgLyBnZXQgcm91bmQtdHJpcHMgcHJpbWl0aXZlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgY29uc3Qgc3RhdGUgPSBlbmdpbmUucHJlc2V0U3RhdGU8RGVtb1N0YXRlPihcImRlbW9cIik7XG4gICAgc3RhdGUuc2V0KFwiY291bnRlclwiLCA1KTtcbiAgICBzdGF0ZS5zZXQoXCJuYW1lXCIsIFwiaGVsbG9cIik7XG4gICAgc3RhdGUuc2V0KFwiZmxhZ1wiLCB0cnVlKTtcblxuICAgIGV4cGVjdChzdGF0ZS5nZXQoXCJjb3VudGVyXCIpKS50b0JlKDUpO1xuICAgIGV4cGVjdChzdGF0ZS5nZXQoXCJuYW1lXCIpKS50b0JlKFwiaGVsbG9cIik7XG4gICAgZXhwZWN0KHN0YXRlLmdldChcImZsYWdcIikpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwidW5zZXQga2V5cyByZXR1cm4gdW5kZWZpbmVkXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBjb25zdCBzdGF0ZSA9IGVuZ2luZS5wcmVzZXRTdGF0ZTxEZW1vU3RhdGU+KFwiZGVtb1wiKTtcbiAgICBleHBlY3Qoc3RhdGUuZ2V0KFwiY291bnRlclwiKSkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcblxuICBpdChcImhhcygpIHJlcG9ydHMgcHJlc2VuY2UgY29ycmVjdGx5XCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBjb25zdCBzdGF0ZSA9IGVuZ2luZS5wcmVzZXRTdGF0ZTxEZW1vU3RhdGU+KFwiZGVtb1wiKTtcbiAgICBleHBlY3Qoc3RhdGUuaGFzKFwiY291bnRlclwiKSkudG9CZShmYWxzZSk7XG4gICAgc3RhdGUuc2V0KFwiY291bnRlclwiLCAxKTtcbiAgICBleHBlY3Qoc3RhdGUuaGFzKFwiY291bnRlclwiKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJkZWxldGUgcmVtb3ZlcyBhIGtleSBhbmQgcmV0dXJucyB0cnVlOyByZXR1cm5zIGZhbHNlIGZvciBtaXNzaW5nXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBjb25zdCBzdGF0ZSA9IGVuZ2luZS5wcmVzZXRTdGF0ZTxEZW1vU3RhdGU+KFwiZGVtb1wiKTtcbiAgICBleHBlY3Qoc3RhdGUuZGVsZXRlKFwiY291bnRlclwiKSkudG9CZShmYWxzZSk7XG4gICAgc3RhdGUuc2V0KFwiY291bnRlclwiLCA0Mik7XG4gICAgZXhwZWN0KHN0YXRlLmRlbGV0ZShcImNvdW50ZXJcIikpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KHN0YXRlLmdldChcImNvdW50ZXJcIikpLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJzZXQgb3ZlcndyaXRlcyBwcmlvciB2YWx1ZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgY29uc3Qgc3RhdGUgPSBlbmdpbmUucHJlc2V0U3RhdGU8RGVtb1N0YXRlPihcImRlbW9cIik7XG4gICAgc3RhdGUuc2V0KFwiY291bnRlclwiLCAxKTtcbiAgICBzdGF0ZS5zZXQoXCJjb3VudGVyXCIsIDIpO1xuICAgIGV4cGVjdChzdGF0ZS5nZXQoXCJjb3VudGVyXCIpKS50b0JlKDIpO1xuICB9KTtcblxuICBpdChcImFsbCgpIHJldHVybnMgdGhlIGZ1bGwgc25hcHNob3RcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGNvbnN0IHN0YXRlID0gZW5naW5lLnByZXNldFN0YXRlPERlbW9TdGF0ZT4oXCJkZW1vXCIpO1xuICAgIHN0YXRlLnNldChcImNvdW50ZXJcIiwgMyk7XG4gICAgc3RhdGUuc2V0KFwibmFtZVwiLCBcInhcIik7XG4gICAgZXhwZWN0KHN0YXRlLmFsbCgpKS50b0VxdWFsKHsgY291bnRlcjogMywgbmFtZTogXCJ4XCIgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiQ2hlc3NFbmdpbmUucHJlc2V0U3RhdGUg4oCUIGlzb2xhdGlvblwiLCAoKSA9PiB7XG4gIGl0KFwidHdvIHByZXNldCBpZHMgb24gdGhlIHNhbWUgZW5naW5lIGRvbid0IGNvbGxpZGVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGNvbnN0IGEgPSBlbmdpbmUucHJlc2V0U3RhdGU8RGVtb1N0YXRlPihcInByZXNldC1hXCIpO1xuICAgIGNvbnN0IGIgPSBlbmdpbmUucHJlc2V0U3RhdGU8RGVtb1N0YXRlPihcInByZXNldC1iXCIpO1xuICAgIGEuc2V0KFwiY291bnRlclwiLCAxKTtcbiAgICBiLnNldChcImNvdW50ZXJcIiwgOTk5KTtcbiAgICBleHBlY3QoYS5nZXQoXCJjb3VudGVyXCIpKS50b0JlKDEpO1xuICAgIGV4cGVjdChiLmdldChcImNvdW50ZXJcIikpLnRvQmUoOTk5KTtcbiAgfSk7XG5cbiAgaXQoXCJ0d28gZW5naW5lcyBob2xkIGluZGVwZW5kZW50IHN0YXRlIHVuZGVyIHRoZSBzYW1lIHByZXNldCBpZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgZTEgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBjb25zdCBlMiA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGNvbnN0IHMxID0gZTEucHJlc2V0U3RhdGU8RGVtb1N0YXRlPihcImRlbW9cIik7XG4gICAgY29uc3QgczIgPSBlMi5wcmVzZXRTdGF0ZTxEZW1vU3RhdGU+KFwiZGVtb1wiKTtcbiAgICBzMS5zZXQoXCJjb3VudGVyXCIsIDEwMCk7XG4gICAgczIuc2V0KFwiY291bnRlclwiLCAyMDApO1xuICAgIGV4cGVjdChzMS5nZXQoXCJjb3VudGVyXCIpKS50b0JlKDEwMCk7XG4gICAgZXhwZWN0KHMyLmdldChcImNvdW50ZXJcIikpLnRvQmUoMjAwKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJDaGVzc0VuZ2luZS5wcmVzZXRTdGF0ZSDigJQgYXV0by1jbGVhciBvbiBkZWFjdGl2YXRlXCIsICgpID0+IHtcbiAgaXQoXCJzdGF0ZSBpcyBjbGVhcmVkIHdoZW4gcHJlc2V0IGlzIGRlYWN0aXZhdGVkIHZpYSBzZXRBY3RpdmVQcmVzZXRzXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICAvLyBwaWVjZS1ocCBoYXMgcmVhbCBhY3RpdmF0ZS9kZWFjdGl2YXRlOyBhYnVzZSBpdHMgaWQgZm9yIHN0YXRlLlxuICAgIGVuZ2luZS5zZXRBY3RpdmVQcmVzZXRzKFtcbiAgICAgIHsgaWQ6IFwicGllY2UtaHBcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuICAgIGNvbnN0IHN0YXRlID0gZW5naW5lLnByZXNldFN0YXRlPERlbW9TdGF0ZT4oXCJwaWVjZS1ocFwiKTtcbiAgICBzdGF0ZS5zZXQoXCJjb3VudGVyXCIsIDcpO1xuICAgIGV4cGVjdChzdGF0ZS5nZXQoXCJjb3VudGVyXCIpKS50b0JlKDcpO1xuXG4gICAgLy8gRGVhY3RpdmF0ZSBieSByZXBsYWNpbmcgd2l0aCBhbiBlbXB0eSBzZXQuXG4gICAgZW5naW5lLnNldEFjdGl2ZVByZXNldHMoW10pO1xuICAgIC8vIE5ldyBhY2Nlc3NvciByZWFkcyB0aGUgcG9zdC1jbGVhciBzdGF0ZS5cbiAgICBjb25zdCBmcmVzaCA9IGVuZ2luZS5wcmVzZXRTdGF0ZTxEZW1vU3RhdGU+KFwicGllY2UtaHBcIik7XG4gICAgZXhwZWN0KGZyZXNoLmdldChcImNvdW50ZXJcIikpLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJzdGF0ZSBzdXJ2aXZlcyBzY29wZSAvIGR1cmF0aW9uIGNoYW5nZXMgb24gdGhlIHNhbWUgaWRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGVuZ2luZS5zZXRBY3RpdmVQcmVzZXRzKFtcbiAgICAgIHsgaWQ6IFwicGllY2UtaHBcIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuICAgIGNvbnN0IHN0YXRlID0gZW5naW5lLnByZXNldFN0YXRlPERlbW9TdGF0ZT4oXCJwaWVjZS1ocFwiKTtcbiAgICBzdGF0ZS5zZXQoXCJjb3VudGVyXCIsIDExKTtcblxuICAgIC8vIFNhbWUgaWQsIGRpZmZlcmVudCB0dXJuc1JlbWFpbmluZyDigJQgc2hvdWxkIGJlIGEgY29udGludW91c1xuICAgIC8vIGFjdGl2YXRpb24sIG5vdCBkZWFjdGl2YXRlLXRoZW4tYWN0aXZhdGUuXG4gICAgZW5naW5lLnNldEFjdGl2ZVByZXNldHMoW1xuICAgICAgeyBpZDogXCJwaWVjZS1ocFwiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiAxMCB9LFxuICAgIF0pO1xuICAgIGV4cGVjdChzdGF0ZS5nZXQoXCJjb3VudGVyXCIpKS50b0JlKDExKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJjYXB0dXJlLXRvLXdpbiBtaWdyYXRlZCB0byBwcmVzZXRTdGF0ZVwiLCAoKSA9PiB7XG4gIGl0KFwiZmlyc3QgY2FwdHVyZSBzZXRzIHdpbm5lcjsgb25DaGVja0dhbWVSZXN1bHQgcmVhZHMgaXRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBDaGVzc0VuZ2luZSgpO1xuICAgIGVuZ2luZS5zZXRBY3RpdmVQcmVzZXRzKFtcbiAgICAgIHsgaWQ6IFwiY2FwdHVyZS10by13aW5cIiwgc2NvcGU6IFwiYm90aFwiLCB0dXJuc1JlbWFpbmluZzogbnVsbCB9LFxuICAgIF0pO1xuICAgIC8vIEJlZm9yZSBhbnkgY2FwdHVyZTogb25nb2luZy5cbiAgICBleHBlY3QoZW5naW5lLmNoZWNrR2FtZVJlc3VsdCgpKS50b0JlKFwib25nb2luZ1wiKTtcbiAgICAvLyBTaW11bGF0ZSBhIHdoaXRlIGNhcHR1cmU6IGZpbmQgYW55IG1vdmUsIGlmIGU0IGlzIGF2YWlsYWJsZVxuICAgIC8vIHRoYXQncyBmaW5lIGJ1dCB3ZSBuZWVkIGFuIGFjdHVhbCBjYXB0dXJlLiBVc2UgYSBzY3JpcHRlZCBnYW1lXG4gICAgLy8gd2hlcmUgd2hpdGUgY2FwdHVyZXMgZmlyc3QuIDEuIGU0IGQ1IDIuIGV4ZDUg4oaSIHdoaXRlIHdpbnMuXG4gICAgY29uc3QgZTQgPSBlbmdpbmUuZmluZE1vdmUoMTIsIDI4KSE7IC8vIGUyLT5lNFxuICAgIGVuZ2luZS5hcHBseU1vdmUoZTQpO1xuICAgIGNvbnN0IGQ1ID0gZW5naW5lLmZpbmRNb3ZlKDUxLCAzNSkhOyAvLyBkNy0+ZDVcbiAgICBlbmdpbmUuYXBwbHlNb3ZlKGQ1KTtcbiAgICBjb25zdCBleGQ1ID0gZW5naW5lLmZpbmRNb3ZlKDI4LCAzNSkhO1xuICAgIGV4cGVjdChleGQ1LmlzQ2FwdHVyZSkudG9CZSh0cnVlKTtcbiAgICBjb25zdCByZXN1bHQgPSBlbmdpbmUuYXBwbHlNb3ZlKGV4ZDUpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoXCJ3aGl0ZS13aW5zXCIpO1xuICB9KTtcblxuICBpdChcImRlYWN0aXZhdGlvbiBjbGVhcnMgdGhlIHdpbm5lciBzdGF0ZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgZW5naW5lLnNldEFjdGl2ZVByZXNldHMoW1xuICAgICAgeyBpZDogXCJjYXB0dXJlLXRvLXdpblwiLCBzY29wZTogXCJib3RoXCIsIHR1cm5zUmVtYWluaW5nOiBudWxsIH0sXG4gICAgXSk7XG4gICAgLy8gRm9yY2UgYSB3aW5uZXIuXG4gICAgZW5naW5lLmFwcGx5TW92ZShlbmdpbmUuZmluZE1vdmUoMTIsIDI4KSEpO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoZW5naW5lLmZpbmRNb3ZlKDUxLCAzNSkhKTtcbiAgICBlbmdpbmUuYXBwbHlNb3ZlKGVuZ2luZS5maW5kTW92ZSgyOCwgMzUpISk7XG4gICAgZXhwZWN0KGVuZ2luZS5jaGVja0dhbWVSZXN1bHQoKSkudG9CZShcIndoaXRlLXdpbnNcIik7XG5cbiAgICAvLyBEZWFjdGl2YXRlIOKGkiB3aW5uZXIgc3RhdGUgY2xlYXJlZCDihpIgZ2FtZSByZXN1bHQgZmFsbHMgYmFjayB0b1xuICAgIC8vIG5vcm1hbCBsb2dpYy5cbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXSk7XG4gICAgZXhwZWN0KGVuZ2luZS5jaGVja0dhbWVSZXN1bHQoKSkudG9CZShcIm9uZ29pbmdcIik7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvY2hlc3Mvc3JjL3ByZXNldHMvcHJlc2V0LXN0YXRlLnRlc3QudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/e83537cee566cd0b2c174791b06c9ef54cdea965 b/7xOfJqsDU787fe61oSCq1/web/e83537cee566cd0b2c174791b06c9ef54cdea965 deleted file mode 100644 index 1e01f25..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/e83537cee566cd0b2c174791b06c9ef54cdea965 +++ /dev/null @@ -1,50 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "computePositionHash", { enumerable: true, configurable: true, get(){ try { return computePositionHash } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "recordPosition", { enumerable: true, configurable: true, get(){ try { return recordPosition } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "isThreefoldRepetition", { enumerable: true, configurable: true, get(){ try { return isThreefoldRepetition } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "updateHalfmoveClock", { enumerable: true, configurable: true, get(){ try { return updateHalfmoveClock } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "resetHalfmoveClock", { enumerable: true, configurable: true, get(){ try { return resetHalfmoveClock } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "isFiftyMoveDraw", { enumerable: true, configurable: true, get(){ try { return isFiftyMoveDraw } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/schema.ts", {"importedNames":["GAME_ENTITY"]}); -function computePositionHash(session) { - const facts = session.allFacts(); - const pieceFacts = facts.filter( - (f) => f.id > 0 && (f.attr === "PieceType" || f.attr === "Color" || f.attr === "Position") - ).map((f) => `${String(f.id)}:${f.attr}=${String(f.value)}`).sort().join(","); - const turnFact = facts.find((f) => f.id === __vite_ssr_import_0__.GAME_ENTITY && f.attr === "Turn"); - const turn = String(turnFact?.value ?? "white"); - const epFact = facts.find( - (f) => f.id === __vite_ssr_import_0__.GAME_ENTITY && f.attr === "EnPassantTarget" - ); - const ep = String(epFact?.value ?? "null"); - return `${pieceFacts}|${turn}|ep:${ep}`; -}; -function recordPosition(session) { - const hash = computePositionHash(session); - const attrKey = `PH_${hash}`; - const current = session.get((0,__vite_ssr_import_0__.GAME_ENTITY), attrKey) ?? 0; - session.insert((0,__vite_ssr_import_0__.GAME_ENTITY), attrKey, current + 1); -}; -function isThreefoldRepetition(session) { - const hash = computePositionHash(session); - const attrKey = `PH_${hash}`; - const count = session.get((0,__vite_ssr_import_0__.GAME_ENTITY), attrKey); - return (count ?? 0) >= 3; -}; -function updateHalfmoveClock(session, move, isPawnMove) { - if (move.isCapture || isPawnMove) { - session.insert((0,__vite_ssr_import_0__.GAME_ENTITY), "HalfmoveClock", 0); - return; - }; - const current = session.get((0,__vite_ssr_import_0__.GAME_ENTITY), "HalfmoveClock") ?? 0; - session.insert((0,__vite_ssr_import_0__.GAME_ENTITY), "HalfmoveClock", current + 1); -}; -function resetHalfmoveClock(session) { - session.insert((0,__vite_ssr_import_0__.GAME_ENTITY), "HalfmoveClock", 0); -}; -function isFiftyMoveDraw(session) { - const clock = session.get((0,__vite_ssr_import_0__.GAME_ENTITY), "HalfmoveClock"); - return (clock ?? 0) >= 100; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBb0JBO0FBYU8sU0FBUyxvQkFBb0IsU0FBMEI7QUFDNUQsUUFBTSxRQUFRLFFBQVEsU0FBUztBQUMvQixRQUFNLGFBQWEsTUFDaEI7QUFBQSxJQUNDLENBQUMsTUFDRSxFQUFFLEtBQWdCLE1BQ2xCLEVBQUUsU0FBUyxlQUFlLEVBQUUsU0FBUyxXQUFXLEVBQUUsU0FBUztBQUFBLEVBQ2hFLEVBQ0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQ3pELEtBQUssRUFDTCxLQUFLLEdBQUc7QUFDWCxRQUFNLFdBQVcsTUFBTSxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8scUNBQWUsRUFBRSxTQUFTLE1BQU07QUFDNUUsUUFBTSxPQUFPLE9BQU8sVUFBVSxTQUFTLE9BQU87QUFDOUMsUUFBTSxTQUFTLE1BQU07QUFBQSxJQUNuQixDQUFDLE1BQU0sRUFBRSxPQUFPLHFDQUFlLEVBQUUsU0FBUztBQUFBLEVBQzVDO0FBQ0EsUUFBTSxLQUFLLE9BQU8sUUFBUSxTQUFTLE1BQU07QUFDekMsU0FBTyxHQUFHLFVBQVUsSUFBSSxJQUFJLE9BQU8sRUFBRTtBQUN2QztBQU1PLFNBQVMsZUFBZSxTQUF3QjtBQUNyRCxRQUFNLE9BQU8sb0JBQW9CLE9BQU87QUFDeEMsUUFBTSxVQUFVLE1BQU0sSUFBSTtBQUMxQixRQUFNLFVBQVcsUUFBUSxPQUFJLG9DQUFhLE9BQU8sS0FBNEI7QUFDN0UsVUFBUSxVQUFPLG9DQUFhLFNBQVMsVUFBVSxDQUFDO0FBQ2xEO0FBTU8sU0FBUyxzQkFBc0IsU0FBMkI7QUFDL0QsUUFBTSxPQUFPLG9CQUFvQixPQUFPO0FBQ3hDLFFBQU0sVUFBVSxNQUFNLElBQUk7QUFDMUIsUUFBTSxRQUFRLFFBQVEsT0FBSSxvQ0FBYSxPQUFPO0FBQzlDLFVBQVEsU0FBUyxNQUFNO0FBQ3pCO0FBTU8sU0FBUyxvQkFDZCxTQUNBLE1BQ0EsWUFDTTtBQUNOLE1BQUksS0FBSyxhQUFhLFlBQVk7QUFDaEMsWUFBUSxVQUFPLG9DQUFhLGlCQUFpQixDQUFDO0FBQzlDO0FBQUEsRUFDRjtBQUNBLFFBQU0sVUFBVyxRQUFRLE9BQUksb0NBQWEsZUFBZSxLQUE0QjtBQUNyRixVQUFRLFVBQU8sb0NBQWEsaUJBQWlCLFVBQVUsQ0FBQztBQUMxRDtBQUdPLFNBQVMsbUJBQW1CLFNBQXdCO0FBQ3pELFVBQVEsVUFBTyxvQ0FBYSxpQkFBaUIsQ0FBQztBQUNoRDtBQU9PLFNBQVMsZ0JBQWdCLFNBQTJCO0FBQ3pELFFBQU0sUUFBUSxRQUFRLE9BQUksb0NBQWEsZUFBZTtBQUN0RCxVQUFRLFNBQVMsTUFBTTtBQUN6QiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiZHJhd3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEcmF3IHJ1bGVzIChQMi4yMSk6IDUwLW1vdmUgcnVsZSBhbmQgdGhyZWVmb2xkIHJlcGV0aXRpb24uXG4gKlxuICogNTAtbW92ZSBydWxlOlxuICogICBEcmF3IGlmIDUwIGNvbnNlY3V0aXZlIGZ1bGwgbW92ZXMgKD0gMTAwIGhhbGYtbW92ZXMgLyBwbGllcykgb2NjdXIgd2l0aFxuICogICBuZWl0aGVyIGEgcGF3biBtb3ZlIG5vciBhIGNhcHR1cmUuIFRyYWNrZWQgdmlhIHRoZSBgSGFsZm1vdmVDbG9ja2BcbiAqICAgZ2FtZS1sZXZlbCBmYWN0LCB3aGljaCBpbmNyZW1lbnRzIGVhY2ggcGx5IGFuZCByZXNldHMgb24gYSBwYXduIG1vdmVcbiAqICAgb3IgY2FwdHVyZS5cbiAqXG4gKiBUaHJlZWZvbGQgcmVwZXRpdGlvbjpcbiAqICAgRHJhdyBtYXkgYmUgY2xhaW1lZCB3aGVuIHRoZSBzYW1lIHBvc2l0aW9uIGFwcGVhcnMgdGhyZWUgdGltZXMuIEFcbiAqICAgXCJwb3NpdGlvblwiIGhlcmUgaXMgdGhlIGhhc2ggb2YgYWxsIHBpZWNlIHBsYWNlbWVudHMgKyBzaWRlLXRvLW1vdmUgK1xuICogICBlbiBwYXNzYW50IHRhcmdldC4gU2luY2UgdGhlIEVBViBzdG9yZSBoYXMgbm8gbmF0aXZlIG1hcC9hcnJheSwgZWFjaFxuICogICBwb3NpdGlvbiBoYXNoIGlzIHN0b3JlZCBhcyBhIGRlcml2ZWQgYXR0cmlidXRlIG9uIGBHQU1FX0VOVElUWWAgb2ZcbiAqICAgdGhlIGZvcm0gYFBIX3toYXNofWAgd2hvc2UgdmFsdWUgaXMgYSBjb3VudC5cbiAqXG4gKiBOZWl0aGVyIGhlbHBlciBhdXRvLWNsYWltcyB0aGUgZHJhdyDigJQgdGhleSBvbmx5IGV4cG9zZSBkZXRlY3Rpb24uIEFcbiAqIGhpZ2hlci1sZXZlbCBnYW1lIG1hbmFnZXIgZGVjaWRlcyB3aGV0aGVyIHRvIGVuZCB0aGUgZ2FtZS5cbiAqL1xuaW1wb3J0IHR5cGUgeyBTZXNzaW9uIH0gZnJvbSBcIkBwYXJhdHlwZS9yZXRlXCI7XG5pbXBvcnQgeyBHQU1FX0VOVElUWSB9IGZyb20gXCIuLi9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgTGVnYWxNb3ZlIH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcblxuLyoqXG4gKiBDb21wdXRlIGEgZGV0ZXJtaW5pc3RpYyBoYXNoIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uLlxuICpcbiAqIFRoZSBoYXNoIGlzIGRlcml2ZWQgZnJvbTpcbiAqICAgLSBhbGwgcGllY2UgZmFjdHMgKFBpZWNlVHlwZSwgQ29sb3IsIFBvc2l0aW9uKSBmb3IgZW50aXRpZXMgd2l0aCBpZCA+IDBcbiAqICAgLSB0aGUgc2lkZSB0byBtb3ZlIChUdXJuKVxuICogICAtIHRoZSBlbiBwYXNzYW50IHRhcmdldCAoRW5QYXNzYW50VGFyZ2V0KVxuICpcbiAqIFBpZWNlIGZhY3RzIGFyZSBzb3J0ZWQgc28gdGhlIGhhc2ggaXMgaW5kZXBlbmRlbnQgb2YgaW5zZXJ0aW9uIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVBvc2l0aW9uSGFzaChzZXNzaW9uOiBTZXNzaW9uKTogc3RyaW5nIHtcbiAgY29uc3QgZmFjdHMgPSBzZXNzaW9uLmFsbEZhY3RzKCk7XG4gIGNvbnN0IHBpZWNlRmFjdHMgPSBmYWN0c1xuICAgIC5maWx0ZXIoXG4gICAgICAoZikgPT5cbiAgICAgICAgKGYuaWQgYXMgbnVtYmVyKSA+IDAgJiZcbiAgICAgICAgKGYuYXR0ciA9PT0gXCJQaWVjZVR5cGVcIiB8fCBmLmF0dHIgPT09IFwiQ29sb3JcIiB8fCBmLmF0dHIgPT09IFwiUG9zaXRpb25cIiksXG4gICAgKVxuICAgIC5tYXAoKGYpID0+IGAke1N0cmluZyhmLmlkKX06JHtmLmF0dHJ9PSR7U3RyaW5nKGYudmFsdWUpfWApXG4gICAgLnNvcnQoKVxuICAgIC5qb2luKFwiLFwiKTtcbiAgY29uc3QgdHVybkZhY3QgPSBmYWN0cy5maW5kKChmKSA9PiBmLmlkID09PSBHQU1FX0VOVElUWSAmJiBmLmF0dHIgPT09IFwiVHVyblwiKTtcbiAgY29uc3QgdHVybiA9IFN0cmluZyh0dXJuRmFjdD8udmFsdWUgPz8gXCJ3aGl0ZVwiKTtcbiAgY29uc3QgZXBGYWN0ID0gZmFjdHMuZmluZChcbiAgICAoZikgPT4gZi5pZCA9PT0gR0FNRV9FTlRJVFkgJiYgZi5hdHRyID09PSBcIkVuUGFzc2FudFRhcmdldFwiLFxuICApO1xuICBjb25zdCBlcCA9IFN0cmluZyhlcEZhY3Q/LnZhbHVlID8/IFwibnVsbFwiKTtcbiAgcmV0dXJuIGAke3BpZWNlRmFjdHN9fCR7dHVybn18ZXA6JHtlcH1gO1xufVxuXG4vKipcbiAqIFJlY29yZCB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgcG9zaXRpb24taGlzdG9yeSBjb3VudGVyIG1hcC5cbiAqIElkZW1wb3RlbnRseSBpbmNyZW1lbnRzIHRoZSBgUEhfe2hhc2h9YCBjb3VudGVyIG9uIEdBTUVfRU5USVRZLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVjb3JkUG9zaXRpb24oc2Vzc2lvbjogU2Vzc2lvbik6IHZvaWQge1xuICBjb25zdCBoYXNoID0gY29tcHV0ZVBvc2l0aW9uSGFzaChzZXNzaW9uKTtcbiAgY29uc3QgYXR0cktleSA9IGBQSF8ke2hhc2h9YDtcbiAgY29uc3QgY3VycmVudCA9IChzZXNzaW9uLmdldChHQU1FX0VOVElUWSwgYXR0cktleSkgYXMgbnVtYmVyIHwgdW5kZWZpbmVkKSA/PyAwO1xuICBzZXNzaW9uLmluc2VydChHQU1FX0VOVElUWSwgYXR0cktleSwgY3VycmVudCArIDEpO1xufVxuXG4vKipcbiAqIEhhcyB0aGUgY3VycmVudCBwb3NpdGlvbiBvY2N1cnJlZCBhdCBsZWFzdCB0aHJlZSB0aW1lcz9cbiAqIERvZXMgbm90IG1vZGlmeSBzdGF0ZTsgY2FsbGVycyBtYXkgY29tYmluZSB3aXRoIGByZWNvcmRQb3NpdGlvbmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RocmVlZm9sZFJlcGV0aXRpb24oc2Vzc2lvbjogU2Vzc2lvbik6IGJvb2xlYW4ge1xuICBjb25zdCBoYXNoID0gY29tcHV0ZVBvc2l0aW9uSGFzaChzZXNzaW9uKTtcbiAgY29uc3QgYXR0cktleSA9IGBQSF8ke2hhc2h9YDtcbiAgY29uc3QgY291bnQgPSBzZXNzaW9uLmdldChHQU1FX0VOVElUWSwgYXR0cktleSkgYXMgbnVtYmVyIHwgdW5kZWZpbmVkO1xuICByZXR1cm4gKGNvdW50ID8/IDApID49IDM7XG59XG5cbi8qKlxuICogVXBkYXRlIHRoZSBoYWxmbW92ZSBjbG9jayBhZnRlciBhIG1vdmUuXG4gKiBSZXNldHMgdG8gMCBvbiBjYXB0dXJlIG9yIHBhd24gbW92ZTsgb3RoZXJ3aXNlIGluY3JlbWVudHMgYnkgMS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUhhbGZtb3ZlQ2xvY2soXG4gIHNlc3Npb246IFNlc3Npb24sXG4gIG1vdmU6IExlZ2FsTW92ZSxcbiAgaXNQYXduTW92ZTogYm9vbGVhbixcbik6IHZvaWQge1xuICBpZiAobW92ZS5pc0NhcHR1cmUgfHwgaXNQYXduTW92ZSkge1xuICAgIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIkhhbGZtb3ZlQ2xvY2tcIiwgMCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGN1cnJlbnQgPSAoc2Vzc2lvbi5nZXQoR0FNRV9FTlRJVFksIFwiSGFsZm1vdmVDbG9ja1wiKSBhcyBudW1iZXIgfCB1bmRlZmluZWQpID8/IDA7XG4gIHNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIkhhbGZtb3ZlQ2xvY2tcIiwgY3VycmVudCArIDEpO1xufVxuXG4vKiogUmVzZXQgdGhlIGhhbGZtb3ZlIGNsb2NrIHRvIDAuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRIYWxmbW92ZUNsb2NrKHNlc3Npb246IFNlc3Npb24pOiB2b2lkIHtcbiAgc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiSGFsZm1vdmVDbG9ja1wiLCAwKTtcbn1cblxuLyoqXG4gKiBEb2VzIHRoZSA1MC1tb3ZlIHJ1bGUgZHJhdyBhcHBseT9cbiAqIFRydWUgd2hlbiB0aGUgaGFsZm1vdmUgY2xvY2sgaGFzIHJlYWNoZWQgMTAwIHBsaWVzICg9IDUwIGZ1bGwgbW92ZXMpXG4gKiB3aXRob3V0IGEgY2FwdHVyZSBvciBwYXduIG1vdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpZnR5TW92ZURyYXcoc2Vzc2lvbjogU2Vzc2lvbik6IGJvb2xlYW4ge1xuICBjb25zdCBjbG9jayA9IHNlc3Npb24uZ2V0KEdBTUVfRU5USVRZLCBcIkhhbGZtb3ZlQ2xvY2tcIikgYXMgbnVtYmVyIHwgdW5kZWZpbmVkO1xuICByZXR1cm4gKGNsb2NrID8/IDApID49IDEwMDtcbn1cbiJdLCJmaWxlIjoiL3NyYy9ydWxlcy9kcmF3cy50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/e8fdc57cd2300fd0985368f318a34676bafd975f b/7xOfJqsDU787fe61oSCq1/web/e8fdc57cd2300fd0985368f318a34676bafd975f deleted file mode 100644 index 91c96d6..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/e8fdc57cd2300fd0985368f318a34676bafd975f +++ /dev/null @@ -1,84 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "parseSanMove", { enumerable: true, configurable: true, get(){ try { return parseSanMove } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "extractMoves", { enumerable: true, configurable: true, get(){ try { return extractMoves } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["algebraicToSquare"]}); -const PIECE_MAP = { - N: "knight", - B: "bishop", - R: "rook", - Q: "queen", - K: "king" -}; -function parseSanMove(san) { - const clean = san.replace(/[+#!?]+$/g, ""); - if (clean === "O-O" || clean === "0-0") { - return { - to: -1, - pieceType: "king", - isCapture: false, - isCastlingKingside: true - }; - }; - if (clean === "O-O-O" || clean === "0-0-0") { - return { - to: -1, - pieceType: "king", - isCapture: false, - isCastlingQueenside: true - }; - }; - let remaining = clean; - let promoteTo; - const promoMatch = remaining.match(/=?([NBRQ])$/); - if (promoMatch && !PIECE_MAP[remaining[0]]) { - const promoPiece = PIECE_MAP[promoMatch[1]]; - if (promoPiece) { - promoteTo = promoPiece; - remaining = remaining.slice(0, promoMatch.index); - } - }; - let pieceType = "pawn"; - if (PIECE_MAP[remaining[0]]) { - pieceType = PIECE_MAP[remaining[0]]; - remaining = remaining.slice(1); - }; - const isCapture = remaining.includes("x"); - remaining = remaining.replace("x", ""); - if (remaining.length < 2) { - throw new Error(`Cannot parse SAN: "${san}"`); - }; - const toNotation = remaining.slice(-2); - const to = (0,__vite_ssr_import_0__.algebraicToSquare)(toNotation); - if (to < 0) { - throw new Error(`Invalid target square "${toNotation}" in SAN: "${san}"`); - }; - const disambiguation = remaining.slice(0, -2); - let from; - let fromFile; - let fromRank; - if (disambiguation.length === 2) { - const sq = (0,__vite_ssr_import_0__.algebraicToSquare)(disambiguation); - if (sq >= 0) from = sq; - } else if (disambiguation.length === 1) { - const ch = disambiguation[0]; - if (ch >= "a" && ch <= "h") { - fromFile = ch.charCodeAt(0) - 97; - } else if (ch >= "1" && ch <= "8") { - fromRank = parseInt(ch, 10) - 1; - } - }; - return { - to, - pieceType, - isCapture, - ...from !== void 0 && { from }, - ...fromFile !== void 0 && { fromFile }, - ...fromRank !== void 0 && { fromRank }, - ...promoteTo !== void 0 && { promoteTo } - }; -}; -function extractMoves(pgn) { - return pgn.replace(/\{[^}]*\}/g, "").replace(/\([^)]*\)/g, "").replace(/\d+\.\.\./g, "").replace(/\d+\./g, "").replace(/1-0|0-1|1\/2-1\/2|\*/g, "").split(/\s+/).map((s) => s.trim()).filter((s) => s.length > 0 && !/^\d+$/.test(s)); -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QU8sT0FBSyxFQUFFLFNBQVMsS0FBSyxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUM7QUFDakQiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInBnbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1pbmltYWwgUEdOL1NBTiBwYXJzZXIgZm9yIEBwYXJhdHlwZS9jaGVzcy5cbiAqIFBhcnNlcyBzdGFuZGFyZCBhbGdlYnJhaWMgbm90YXRpb24gbW92ZXMg4oCUIG5vIGV4dGVybmFsIGRlcGVuZGVuY2llcy5cbiAqL1xuaW1wb3J0IHsgYWxnZWJyYWljVG9TcXVhcmUgfSBmcm9tIFwiLi9jb29yZC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQaWVjZVR5cGUgfSBmcm9tIFwiLi9zY2hlbWEuanNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRNb3ZlIHtcbiAgLyoqIEZ1bGwgZnJvbS1zcXVhcmUgd2hlbiBmdWxseSBkaXNhbWJpZ3VhdGVkIChlLmcuIFwiTmIzZDVcIikuICovXG4gIGZyb20/OiBudW1iZXI7XG4gIC8qKiBGaWxlIGhpbnQgKDAtNykgd2hlbiBvbmx5IGZpbGUgaXMgZ2l2ZW4gKGUuZy4gXCJleGQ1XCIg4oaSIGZyb21GaWxlPTQpLiAqL1xuICBmcm9tRmlsZT86IG51bWJlcjtcbiAgLyoqIFJhbmsgaGludCAoMC03KSB3aGVuIG9ubHkgcmFuayBpcyBnaXZlbiAoZS5nLiBcIk4zZDVcIiDihpIgZnJvbVJhbms9MikuICovXG4gIGZyb21SYW5rPzogbnVtYmVyO1xuICAvKiogVGFyZ2V0IHNxdWFyZS4gLTEgZm9yIGNhc3RsaW5nICh1c2UgaXNDYXN0bGluZ0tpbmdzaWRlL1F1ZWVuc2lkZSkuICovXG4gIHRvOiBudW1iZXI7XG4gIHBpZWNlVHlwZTogUGllY2VUeXBlO1xuICBpc0NhcHR1cmU6IGJvb2xlYW47XG4gIHByb21vdGVUbz86IFBpZWNlVHlwZTtcbiAgaXNDYXN0bGluZ0tpbmdzaWRlPzogYm9vbGVhbjtcbiAgaXNDYXN0bGluZ1F1ZWVuc2lkZT86IGJvb2xlYW47XG59XG5cbmNvbnN0IFBJRUNFX01BUDogUmVjb3JkPHN0cmluZywgUGllY2VUeXBlPiA9IHtcbiAgTjogXCJrbmlnaHRcIixcbiAgQjogXCJiaXNob3BcIixcbiAgUjogXCJyb29rXCIsXG4gIFE6IFwicXVlZW5cIixcbiAgSzogXCJraW5nXCIsXG59O1xuXG4vKipcbiAqIFBhcnNlIGEgU0FOIG1vdmUgc3RyaW5nIGludG8gYSBQYXJzZWRNb3ZlLlxuICogSGFuZGxlczogZTQsIE5mMywgZXhkNSwgTmJkNywgTjNkNSwgTmIzZDUsIE8tTywgTy1PLU8sIGU4PVEsIGV4ZDg9UiwgZXRjLlxuICogU3RyaXBzIHRyYWlsaW5nICssICMsICEsID8gYW5ub3RhdGlvbiBjaGFyYWN0ZXJzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTYW5Nb3ZlKHNhbjogc3RyaW5nKTogUGFyc2VkTW92ZSB7XG4gIC8vIFN0cmlwIGNoZWNrL2NoZWNrbWF0ZS9hbm5vdGF0aW9uIGluZGljYXRvcnNcbiAgY29uc3QgY2xlYW4gPSBzYW4ucmVwbGFjZSgvWysjIT9dKyQvZywgXCJcIik7XG5cbiAgLy8g4pSA4pSAIENhc3RsaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBpZiAoY2xlYW4gPT09IFwiTy1PXCIgfHwgY2xlYW4gPT09IFwiMC0wXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG86IC0xLFxuICAgICAgcGllY2VUeXBlOiBcImtpbmdcIixcbiAgICAgIGlzQ2FwdHVyZTogZmFsc2UsXG4gICAgICBpc0Nhc3RsaW5nS2luZ3NpZGU6IHRydWUsXG4gICAgfTtcbiAgfVxuICBpZiAoY2xlYW4gPT09IFwiTy1PLU9cIiB8fCBjbGVhbiA9PT0gXCIwLTAtMFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvOiAtMSxcbiAgICAgIHBpZWNlVHlwZTogXCJraW5nXCIsXG4gICAgICBpc0NhcHR1cmU6IGZhbHNlLFxuICAgICAgaXNDYXN0bGluZ1F1ZWVuc2lkZTogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgbGV0IHJlbWFpbmluZyA9IGNsZWFuO1xuXG4gIC8vIOKUgOKUgCBQcm9tb3Rpb246IHRyYWlsaW5nID1RIG9yIFEg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGxldCBwcm9tb3RlVG86IFBpZWNlVHlwZSB8IHVuZGVmaW5lZDtcbiAgY29uc3QgcHJvbW9NYXRjaCA9IHJlbWFpbmluZy5tYXRjaCgvPT8oW05CUlFdKSQvKTtcbiAgaWYgKHByb21vTWF0Y2ggJiYgIVBJRUNFX01BUFtyZW1haW5pbmdbMF0hXSkge1xuICAgIC8vIE9ubHkgdHJlYXQgaXQgYXMgcHJvbW90aW9uIHdoZW4gdGhlIGZpcnN0IGNoYXJhY3RlciBpcyBOT1QgYSBwaWVjZSBsZXR0ZXJcbiAgICAvLyAoaS5lLiwgdGhpcyBpcyBhIHBhd24gbW92ZSwgbm90IGUuZy4gXCJRZThcIiB3aGVyZSAnUScgaXMgdGhlIHBpZWNlIHR5cGUpXG4gICAgY29uc3QgcHJvbW9QaWVjZSA9IFBJRUNFX01BUFtwcm9tb01hdGNoWzFdIV07XG4gICAgaWYgKHByb21vUGllY2UpIHtcbiAgICAgIHByb21vdGVUbyA9IHByb21vUGllY2U7XG4gICAgICByZW1haW5pbmcgPSByZW1haW5pbmcuc2xpY2UoMCwgcHJvbW9NYXRjaC5pbmRleCk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIFBpZWNlIHR5cGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGxldCBwaWVjZVR5cGU6IFBpZWNlVHlwZSA9IFwicGF3blwiO1xuICBpZiAoUElFQ0VfTUFQW3JlbWFpbmluZ1swXSFdKSB7XG4gICAgcGllY2VUeXBlID0gUElFQ0VfTUFQW3JlbWFpbmluZ1swXSFdITtcbiAgICByZW1haW5pbmcgPSByZW1haW5pbmcuc2xpY2UoMSk7XG4gIH1cblxuICAvLyDilIDilIAgQ2FwdHVyZSBpbmRpY2F0b3Ig4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGNvbnN0IGlzQ2FwdHVyZSA9IHJlbWFpbmluZy5pbmNsdWRlcyhcInhcIik7XG4gIHJlbWFpbmluZyA9IHJlbWFpbmluZy5yZXBsYWNlKFwieFwiLCBcIlwiKTtcblxuICAvLyDilIDilIAgVGFyZ2V0IHNxdWFyZSAoYWx3YXlzIGxhc3QgMiBjaGFycykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGlmIChyZW1haW5pbmcubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlIFNBTjogXCIke3Nhbn1cImApO1xuICB9XG4gIGNvbnN0IHRvTm90YXRpb24gPSByZW1haW5pbmcuc2xpY2UoLTIpO1xuICBjb25zdCB0byA9IGFsZ2VicmFpY1RvU3F1YXJlKHRvTm90YXRpb24pO1xuICBpZiAodG8gPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRhcmdldCBzcXVhcmUgXCIke3RvTm90YXRpb259XCIgaW4gU0FOOiBcIiR7c2FufVwiYCk7XG4gIH1cblxuICAvLyDilIDilIAgRGlzYW1iaWd1YXRpb24gcHJlZml4IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBjb25zdCBkaXNhbWJpZ3VhdGlvbiA9IHJlbWFpbmluZy5zbGljZSgwLCAtMik7XG4gIGxldCBmcm9tOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGxldCBmcm9tRmlsZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgZnJvbVJhbms6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICBpZiAoZGlzYW1iaWd1YXRpb24ubGVuZ3RoID09PSAyKSB7XG4gICAgLy8gRnVsbCBmcm9tLXNxdWFyZSBkaXNhbWJpZ3VhdGlvbjogZS5nLiBcImIzXCIgaW4gXCJOYjNkNVwiXG4gICAgY29uc3Qgc3EgPSBhbGdlYnJhaWNUb1NxdWFyZShkaXNhbWJpZ3VhdGlvbik7XG4gICAgaWYgKHNxID49IDApIGZyb20gPSBzcTtcbiAgfSBlbHNlIGlmIChkaXNhbWJpZ3VhdGlvbi5sZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBjaCA9IGRpc2FtYmlndWF0aW9uWzBdITtcbiAgICBpZiAoY2ggPj0gXCJhXCIgJiYgY2ggPD0gXCJoXCIpIHtcbiAgICAgIGZyb21GaWxlID0gY2guY2hhckNvZGVBdCgwKSAtIDk3OyAvLyAnYSc9MFxuICAgIH0gZWxzZSBpZiAoY2ggPj0gXCIxXCIgJiYgY2ggPD0gXCI4XCIpIHtcbiAgICAgIGZyb21SYW5rID0gcGFyc2VJbnQoY2gsIDEwKSAtIDE7IC8vIHJhbmsgMSDihpIgMFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdG8sXG4gICAgcGllY2VUeXBlLFxuICAgIGlzQ2FwdHVyZSxcbiAgICAuLi4oZnJvbSAhPT0gdW5kZWZpbmVkICYmIHsgZnJvbSB9KSxcbiAgICAuLi4oZnJvbUZpbGUgIT09IHVuZGVmaW5lZCAmJiB7IGZyb21GaWxlIH0pLFxuICAgIC4uLihmcm9tUmFuayAhPT0gdW5kZWZpbmVkICYmIHsgZnJvbVJhbmsgfSksXG4gICAgLi4uKHByb21vdGVUbyAhPT0gdW5kZWZpbmVkICYmIHsgcHJvbW90ZVRvIH0pLFxuICB9O1xufVxuXG4vKipcbiAqIEV4dHJhY3QgU0FOIG1vdmUgdG9rZW5zIGZyb20gYSBQR04gc3RyaW5nLlxuICogU3RyaXBzIG1vdmUgbnVtYmVycywgY29tbWVudHMsIHZhcmlhdGlvbnMsIGFuZCByZXN1bHQgc3RyaW5ncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RNb3ZlcyhwZ246IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHBnblxuICAgIC5yZXBsYWNlKC9cXHtbXn1dKlxcfS9nLCBcIlwiKSAvLyByZW1vdmUgeyBjb21tZW50cyB9XG4gICAgLnJlcGxhY2UoL1xcKFteKV0qXFwpL2csIFwiXCIpIC8vIHJlbW92ZSAodmFyaWF0aW9ucylcbiAgICAucmVwbGFjZSgvXFxkK1xcLlxcLlxcLi9nLCBcIlwiKSAvLyByZW1vdmUgXCIxLi4uXCIgYmxhY2sgbW92ZSBudW1iZXJzXG4gICAgLnJlcGxhY2UoL1xcZCtcXC4vZywgXCJcIikgLy8gcmVtb3ZlIFwiMS5cIiBtb3ZlIG51bWJlcnNcbiAgICAucmVwbGFjZSgvMS0wfDAtMXwxXFwvMi0xXFwvMnxcXCovZywgXCJcIikgLy8gcmVtb3ZlIHJlc3VsdCB0b2tlbnNcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5tYXAocyA9PiBzLnRyaW0oKSlcbiAgICAuZmlsdGVyKHMgPT4gcy5sZW5ndGggPiAwICYmICEvXlxcZCskLy50ZXN0KHMpKTtcbn1cbiJdLCJmaWxlIjoiL3NyYy9wZ24udHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/ea3ca6df615b2d05dea33e9fdc5db2b747e787b2 b/7xOfJqsDU787fe61oSCq1/web/ea3ca6df615b2d05dea33e9fdc5db2b747e787b2 deleted file mode 100644 index 0b85247..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/ea3ca6df615b2d05dea33e9fdc5db2b747e787b2 +++ /dev/null @@ -1,27 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "DUNSANY_LAYOUT", { enumerable: true, configurable: true, get(){ try { return DUNSANY_LAYOUT } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/layouts/registry.ts", {"importedNames":["LAYOUT_REGISTRY"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/layouts/_helpers.ts", {"importedNames":["fideSideOf","pawnsOnRanks"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["algebraicToSquare"]}); -const E1 = (0,__vite_ssr_import_2__.algebraicToSquare)("e1"); -const whitePawnsMinusE1 = (0,__vite_ssr_import_1__.pawnsOnRanks)("white", [ - 0, - 1, - 2, - 3 -]).filter((p) => p.square !== E1); -const DUNSANY_LAYOUT = { - id: "dunsany", - name: "Dunsany's Chess", - description: "White has 31 pawns and a king versus black's standard setup. An asymmetric 'pawn tide vs army' battle.", - pieces: [ - ...whitePawnsMinusE1, - { type: "king", color: "white", square: E1 }, - ...(0,__vite_ssr_import_1__.fideSideOf)("black") - ], - suggestedPresets: [], - source: "premade" -}; -__vite_ssr_import_0__.LAYOUT_REGISTRY.register(DUNSANY_LAYOUT); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQXlCQTtBQUNBO0FBQ0E7QUFFQSxNQUFNLFFBQUsseUNBQWtCLElBQUk7QUFFakMsTUFBTSx1QkFBc0Msb0NBQWEsU0FBUztBQUFBLEVBQ2hFO0FBQUEsRUFBRztBQUFBLEVBQUc7QUFBQSxFQUFHO0FBQ1gsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFO0FBRXpCLE1BQU0saUJBQWlDO0FBQUEsRUFDNUMsSUFBSTtBQUFBLEVBQ0osTUFBTTtBQUFBLEVBQ04sYUFDRTtBQUFBLEVBQ0YsUUFBUTtBQUFBLElBQ04sR0FBRztBQUFBLElBQ0gsRUFBRSxNQUFNLFFBQVEsT0FBTyxTQUFTLFFBQVEsR0FBRztBQUFBLElBQzNDLE1BQUcsa0NBQVcsT0FBTztBQUFBLEVBQ3ZCO0FBQUEsRUFDQSxrQkFBa0IsQ0FBQztBQUFBLEVBQ25CLFFBQVE7QUFDVjtBQUVBLHNDQUFnQixTQUFTLGNBQWMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImR1bnNhbnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMYXlvdXQ6IER1bnNhbnkncyBDaGVzcy5cbiAqXG4gKiAgIC0gV2hpdGU6IHBhd25zIGZpbGxpbmcgcmFua3MgMS00LCB3aXRoIGEga2luZyBvbiBlMSBpbiBwbGFjZSBvZlxuICogICAgIGEgcGF3biAoMzEgcGF3bnMgKyAxIGtpbmcpLlxuICogICAtIEJsYWNrOiBzdGFuZGFyZCBGSURFIHNldHVwLlxuICpcbiAqICMjIERldmlhdGlvbiBmcm9tIGNhbm9uaWNhbCBEdW5zYW55XG4gKlxuICogQ2Fub25pY2FsIER1bnNhbnkgaGFzIE5PIHdoaXRlIGtpbmcg4oCUIGJsYWNrIHdpbnMgT05MWSBieVxuICogZWxpbWluYXRpbmcgZXZlcnkgd2hpdGUgcGF3bjsgd2hpdGUgd2lucyBieSBjaGVja21hdGluZyBibGFjay5cbiAqIE91ciBjdXJyZW50IHZhbGlkYXRvciByZXF1aXJlcyBhdCBsZWFzdCBvbmUga2luZyBwZXIgc2lkZS4gUmF0aGVyXG4gKiB0aGFuIGJsb2NrIHNlbGVjdGlvbiB1bnRpbCB0aGUgYGNhcHR1cmUtYWxsYCBwcmVzZXQgc2hpcHMgKHdoaWNoXG4gKiB3b3VsZCBsZXQgd2hpdGUgb3B0IG91dCBvZiByb3lhbC1waWVjZSBkZXRlY3Rpb24pLCB3ZSBhZGQgYVxuICoga2luZyBvbiBlMSBhbmQgcGxheSB1bmRlciBGSURFIHdpbiBjb25kaXRpb25zLlxuICpcbiAqIFRoZSBvdmVyYWxsIFwicGF3biB0aWRlIHZzIGFybXlcIiBhc3ltbWV0cnkgaXMgcHJlc2VydmVkOiB3aGl0ZVxuICogaGFzIDMxIHBhd25zIGFuZCBhIHNpbmdsZSBraW5nOyBibGFjayBoYXMgYSBmdWxsIGFybXkuXG4gKlxuICogV2hlbiBgY2FwdHVyZS1hbGxgIG9yIGEgc2ltaWxhciBuby1yb3lhbHR5IHByZXNldCBsYW5kcywgd2UnbGxcbiAqIHNoaXAgdGhlIGNhbm9uaWNhbCB2ZXJzaW9uLlxuICpcbiAqIFJlZmVyZW5jZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRHVuc2FueSUyN3NfY2hlc3NcbiAqL1xuaW1wb3J0IHR5cGUgeyBTdGFydGluZ0xheW91dCwgUGllY2VQbGFjZW1lbnQgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgTEFZT1VUX1JFR0lTVFJZIH0gZnJvbSBcIi4vcmVnaXN0cnkuanNcIjtcbmltcG9ydCB7IGZpZGVTaWRlT2YsIHBhd25zT25SYW5rcyB9IGZyb20gXCIuL19oZWxwZXJzLmpzXCI7XG5pbXBvcnQgeyBhbGdlYnJhaWNUb1NxdWFyZSB9IGZyb20gXCIuLi9jb29yZC5qc1wiO1xuXG5jb25zdCBFMSA9IGFsZ2VicmFpY1RvU3F1YXJlKFwiZTFcIik7XG5cbmNvbnN0IHdoaXRlUGF3bnNNaW51c0UxOiBQaWVjZVBsYWNlbWVudFtdID0gcGF3bnNPblJhbmtzKFwid2hpdGVcIiwgW1xuICAwLCAxLCAyLCAzLFxuXSkuZmlsdGVyKChwKSA9PiBwLnNxdWFyZSAhPT0gRTEpO1xuXG5leHBvcnQgY29uc3QgRFVOU0FOWV9MQVlPVVQ6IFN0YXJ0aW5nTGF5b3V0ID0ge1xuICBpZDogXCJkdW5zYW55XCIsXG4gIG5hbWU6IFwiRHVuc2FueSdzIENoZXNzXCIsXG4gIGRlc2NyaXB0aW9uOlxuICAgIFwiV2hpdGUgaGFzIDMxIHBhd25zIGFuZCBhIGtpbmcgdmVyc3VzIGJsYWNrJ3Mgc3RhbmRhcmQgc2V0dXAuIEFuIGFzeW1tZXRyaWMgJ3Bhd24gdGlkZSB2cyBhcm15JyBiYXR0bGUuXCIsXG4gIHBpZWNlczogW1xuICAgIC4uLndoaXRlUGF3bnNNaW51c0UxLFxuICAgIHsgdHlwZTogXCJraW5nXCIsIGNvbG9yOiBcIndoaXRlXCIsIHNxdWFyZTogRTEgfSxcbiAgICAuLi5maWRlU2lkZU9mKFwiYmxhY2tcIiksXG4gIF0sXG4gIHN1Z2dlc3RlZFByZXNldHM6IFtdLFxuICBzb3VyY2U6IFwicHJlbWFkZVwiLFxufTtcblxuTEFZT1VUX1JFR0lTVFJZLnJlZ2lzdGVyKERVTlNBTllfTEFZT1VUKTtcbiJdLCJmaWxlIjoiL3NyYy9sYXlvdXRzL2R1bnNhbnkudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/ebc2fd92961aee86125ebb364497f472a1342ba3 b/7xOfJqsDU787fe61oSCq1/web/ebc2fd92961aee86125ebb364497f472a1342ba3 deleted file mode 100644 index 31df436..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/ebc2fd92961aee86125ebb364497f472a1342ba3 +++ /dev/null @@ -1,78 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "validateLayout", { enumerable: true, configurable: true, get(){ try { return validateLayout } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["fileOf","rankOf"]}); -const BOARD_SQUARES = 64; -function validateLayout(layout) { - const errors = []; - const warnings = []; - const seenSquares = /* @__PURE__ */ new Set(); - let whiteKings = 0; - let blackKings = 0; - let whitePieces = 0; - let blackPieces = 0; - for (const p of layout.pieces) { - if (!Number.isInteger(p.square) || p.square < 0 || p.square >= BOARD_SQUARES) { - errors.push( - `Piece at out-of-range square ${p.square} (must be 0..63).` - ); - continue; - }; - if (seenSquares.has(p.square)) { - errors.push( - `Duplicate square ${p.square}: two pieces cannot share a square.` - ); - continue; - }; - seenSquares.add(p.square); - if (p.color === "white") whitePieces++; - else blackPieces++; - if (p.type === "king") { - if (p.color === "white") whiteKings++; - else blackKings++; - }; - if (p.type === "pawn") { - const rank = (0,__vite_ssr_import_0__.rankOf)(p.square); - if (p.color === "white" && rank === 0) { - warnings.push( - `White pawn on rank 1 (square ${squareLabel(p.square)}): pawns cannot move backward.` - ); - }; - if (p.color === "white" && rank === 7) { - warnings.push( - `White pawn on rank 8 (square ${squareLabel(p.square)}): already on promotion rank.` - ); - }; - if (p.color === "black" && rank === 7) { - warnings.push( - `Black pawn on rank 8 (square ${squareLabel(p.square)}): pawns cannot move backward.` - ); - }; - if (p.color === "black" && rank === 0) { - warnings.push( - `Black pawn on rank 1 (square ${squareLabel(p.square)}): already on promotion rank.` - ); - } - } - }; - if (whiteKings === 0) { - errors.push("No white king on the board."); - }; - if (blackKings === 0) { - errors.push("No black king on the board."); - }; - if (whitePieces > 32) { - warnings.push(`${whitePieces} white pieces (more than a full FIDE army).`); - }; - if (blackPieces > 32) { - warnings.push(`${blackPieces} black pieces (more than a full FIDE army).`); - }; - return { errors, warnings }; -}; -function squareLabel(square) { - const file = (0,__vite_ssr_import_0__.fileOf)(square); - const rank = (0,__vite_ssr_import_0__.rankOf)(square); - const fileChar = String.fromCharCode("a".charCodeAt(0) + file); - return `${fileChar}${rank + 1}`; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQWtDQTtBQUVBLE1BQU0sZ0JBQWdCO0FBRWYsU0FBUyxlQUFlLFFBQWdEO0FBQzdFLFFBQU0sU0FBbUIsQ0FBQztBQUMxQixRQUFNLFdBQXFCLENBQUM7QUFFNUIsUUFBTSxjQUFjLG9CQUFJLElBQVk7QUFDcEMsTUFBSSxhQUFhO0FBQ2pCLE1BQUksYUFBYTtBQUNqQixNQUFJLGNBQWM7QUFDbEIsTUFBSSxjQUFjO0FBRWxCLGFBQVcsS0FBSyxPQUFPLFFBQVE7QUFFN0IsUUFDRSxDQUFDLE9BQU8sVUFBVSxFQUFFLE1BQU0sS0FDMUIsRUFBRSxTQUFTLEtBQ1gsRUFBRSxVQUFVLGVBQ1o7QUFDQSxhQUFPO0FBQUEsUUFDTCxnQ0FBZ0MsRUFBRSxNQUFNO0FBQUEsTUFDMUM7QUFDQTtBQUFBLElBQ0Y7QUFHQSxRQUFJLFlBQVksSUFBSSxFQUFFLE1BQU0sR0FBRztBQUM3QixhQUFPO0FBQUEsUUFDTCxvQkFBb0IsRUFBRSxNQUFNO0FBQUEsTUFDOUI7QUFDQTtBQUFBLElBQ0Y7QUFDQSxnQkFBWSxJQUFJLEVBQUUsTUFBTTtBQUd4QixRQUFJLEVBQUUsVUFBVSxRQUFTO0FBQUEsUUFDcEI7QUFHTCxRQUFJLEVBQUUsU0FBUyxRQUFRO0FBQ3JCLFVBQUksRUFBRSxVQUFVLFFBQVM7QUFBQSxVQUNwQjtBQUFBLElBQ1A7QUFHQSxRQUFJLEVBQUUsU0FBUyxRQUFRO0FBQ3JCLFlBQU0sVUFBTyw4QkFBTyxFQUFFLE1BQU07QUFDNUIsVUFBSSxFQUFFLFVBQVUsV0FBVyxTQUFTLEdBQUc7QUFDckMsaUJBQVM7QUFBQSxVQUNQLGdDQUFnQyxZQUFZLEVBQUUsTUFBTSxDQUFDO0FBQUEsUUFDdkQ7QUFBQSxNQUNGO0FBQ0EsVUFBSSxFQUFFLFVBQVUsV0FBVyxTQUFTLEdBQUc7QUFDckMsaUJBQVM7QUFBQSxVQUNQLGdDQUFnQyxZQUFZLEVBQUUsTUFBTSxDQUFDO0FBQUEsUUFDdkQ7QUFBQSxNQUNGO0FBQ0EsVUFBSSxFQUFFLFVBQVUsV0FBVyxTQUFTLEdBQUc7QUFDckMsaUJBQVM7QUFBQSxVQUNQLGdDQUFnQyxZQUFZLEVBQUUsTUFBTSxDQUFDO0FBQUEsUUFDdkQ7QUFBQSxNQUNGO0FBQ0EsVUFBSSxFQUFFLFVBQVUsV0FBVyxTQUFTLEdBQUc7QUFDckMsaUJBQVM7QUFBQSxVQUNQLGdDQUFnQyxZQUFZLEVBQUUsTUFBTSxDQUFDO0FBQUEsUUFDdkQ7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFHQSxNQUFJLGVBQWUsR0FBRztBQUNwQixXQUFPLEtBQUssNkJBQTZCO0FBQUEsRUFDM0M7QUFDQSxNQUFJLGVBQWUsR0FBRztBQUNwQixXQUFPLEtBQUssNkJBQTZCO0FBQUEsRUFDM0M7QUFHQSxNQUFJLGNBQWMsSUFBSTtBQUNwQixhQUFTLEtBQUssR0FBRyxXQUFXLDZDQUE2QztBQUFBLEVBQzNFO0FBQ0EsTUFBSSxjQUFjLElBQUk7QUFDcEIsYUFBUyxLQUFLLEdBQUcsV0FBVyw2Q0FBNkM7QUFBQSxFQUMzRTtBQUVBLFNBQU8sRUFBRSxRQUFRLFNBQVM7QUFDNUI7QUFHQSxTQUFTLFlBQVksUUFBd0I7QUFDM0MsUUFBTSxVQUFPLDhCQUFPLE1BQU07QUFDMUIsUUFBTSxVQUFPLDhCQUFPLE1BQU07QUFDMUIsUUFBTSxXQUFXLE9BQU8sYUFBYSxJQUFJLFdBQVcsQ0FBQyxJQUFJLElBQUk7QUFDN0QsU0FBTyxHQUFHLFFBQVEsR0FBRyxPQUFPLENBQUM7QUFDL0IiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInZhbGlkYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGF5b3V0IHZhbGlkYXRpb24uXG4gKlxuICogRXJyb3JzIEJMT0NLIGFjdGl2YXRpb24gKHNlcnZlciByZWplY3RzIHRoZSBsYXlvdXQ7IGVkaXRvciBoaWRlc1xuICogdGhlIFwiVXNlIFRoaXMgTGF5b3V0XCIgQ1RBKS4gV2FybmluZ3MgYXJlIERJU1BMQVlFRCBidXQgZG9uJ3RcbiAqIGJsb2NrIOKAlCB0aGUgdXNlciBtYWRlIGEgZGVsaWJlcmF0ZSBjaG9pY2UgdG8gcHV0IGEgcGF3biBvbiByYW5rIDhcbiAqIGFuZCB3ZSBkb24ndCBvdmVycmlkZSB0aGF0LlxuICpcbiAqICMjIEVycm9yIHJ1bGVzXG4gKlxuICogMS4gRXZlcnkgc3F1YXJlIGluZGV4IG11c3QgYmUgaW4gWzAsIDYzXS5cbiAqIDIuIE5vIHR3byBwaWVjZXMgb24gdGhlIHNhbWUgc3F1YXJlLlxuICogMy4gQXQgbGVhc3Qgb25lIGtpbmcgb2YgZWFjaCBjb2xvciBvbiB0aGUgYm9hcmQuXG4gKiAgICAoUmVsYXhlZCBmcm9tIFwiZXhhY3RseSBvbmVcIiB0byBzdXBwb3J0IEtuaWdodG1hdGUtc3R5bGVcbiAqICAgICBsYXlvdXRzIHRoYXQgcGxhY2UgbXVsdGlwbGUga2luZ3MgYnkgZGVzaWduLiBWYXJpYW50cyB0aGF0XG4gKiAgICAgd2FudCBcIm5vIGtpbmdzIGF0IGFsbFwiIOKAlCBDYXB0dXJlLWFsbCwgU3VpY2lkZSDigJQgd2lsbCBzaGlwIGFzXG4gKiAgICAgcHJlc2V0cyB0aGF0IG9wdCBvdXQgb2Ygcm95YWwtcGllY2UgcmVxdWlyZW1lbnRzLilcbiAqXG4gKiAjIyBXYXJuaW5nIHJ1bGVzXG4gKlxuICogLSBQYXduIG9uIHJhbmsgMSAod2hpdGUpIOKAlCBjYW4ndCBtb3ZlLCBwcm9iYWJseSBub3QgaW50ZW5kZWQuXG4gKiAtIFBhd24gb24gcmFuayA4ICh3aGl0ZSkgb3IgcmFuayAxIChibGFjaykg4oCUIGFscmVhZHkgb25cbiAqICAgcHJvbW90aW9uIHJhbmssIG5vcm1hbGx5IGltcG9zc2libGUgdG8gYXJyaXZlIGF0LlxuICogLSBUb3RhbCBwaWVjZSBjb3VudCBwZXIgY29sb3IgPiAzMiAobW9yZSB0aGFuIGEgZnVsbCBGSURFIGFybXk7XG4gKiAgIHBvc3NpYmxlIGJ1dCB1bnVzdWFsKS5cbiAqXG4gKiAjIyBOb24tZ29hbHNcbiAqXG4gKiBXZSBkb24ndCB2YWxpZGF0ZSBwb3NpdGlvbiBsZWdhbGl0eSBiZXlvbmQgcGxhY2VtZW50OiBhIGtpbmcgaW5cbiAqIGNoZWNrIGFnYWluc3QgdGhlIG9wcG9uZW50LXRvLW1vdmUgaXMgYWxsb3dlZCAodGhlIGVuZ2luZSB3aWxsXG4gKiBmaWd1cmUgaXQgb3V0IG9uIHRoZSBmaXJzdCBtb3ZlKS4gV2UgZG9uJ3QgZW5mb3JjZSBiaXNob3AtY29sb3JcbiAqIGJhbGFuY2UsIHBhd24tZmlsZSBjb3VudHMsIG9yIGFueSBzdHJhdGVnaWMgc2FuaXR5LlxuICovXG5pbXBvcnQgdHlwZSB7IFN0YXJ0aW5nTGF5b3V0LCBMYXlvdXRWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IGZpbGVPZiwgcmFua09mIH0gZnJvbSBcIi4uL2Nvb3JkLmpzXCI7XG5cbmNvbnN0IEJPQVJEX1NRVUFSRVMgPSA2NDtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGF5b3V0KGxheW91dDogU3RhcnRpbmdMYXlvdXQpOiBMYXlvdXRWYWxpZGF0aW9uUmVzdWx0IHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdCBzZWVuU3F1YXJlcyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBsZXQgd2hpdGVLaW5ncyA9IDA7XG4gIGxldCBibGFja0tpbmdzID0gMDtcbiAgbGV0IHdoaXRlUGllY2VzID0gMDtcbiAgbGV0IGJsYWNrUGllY2VzID0gMDtcblxuICBmb3IgKGNvbnN0IHAgb2YgbGF5b3V0LnBpZWNlcykge1xuICAgIC8vIFNxdWFyZSBib3VuZHMuXG4gICAgaWYgKFxuICAgICAgIU51bWJlci5pc0ludGVnZXIocC5zcXVhcmUpIHx8XG4gICAgICBwLnNxdWFyZSA8IDAgfHxcbiAgICAgIHAuc3F1YXJlID49IEJPQVJEX1NRVUFSRVNcbiAgICApIHtcbiAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICBgUGllY2UgYXQgb3V0LW9mLXJhbmdlIHNxdWFyZSAke3Auc3F1YXJlfSAobXVzdCBiZSAwLi42MykuYCxcbiAgICAgICk7XG4gICAgICBjb250aW51ZTsgLy8gc2tpcCBmdXJ0aGVyIGNoZWNrcyBvbiB0aGlzIHBpZWNlXG4gICAgfVxuXG4gICAgLy8gRHVwbGljYXRlIHNxdWFyZS5cbiAgICBpZiAoc2VlblNxdWFyZXMuaGFzKHAuc3F1YXJlKSkge1xuICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgIGBEdXBsaWNhdGUgc3F1YXJlICR7cC5zcXVhcmV9OiB0d28gcGllY2VzIGNhbm5vdCBzaGFyZSBhIHNxdWFyZS5gLFxuICAgICAgKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBzZWVuU3F1YXJlcy5hZGQocC5zcXVhcmUpO1xuXG4gICAgLy8gQ29sb3IgdGFsbGllcy5cbiAgICBpZiAocC5jb2xvciA9PT0gXCJ3aGl0ZVwiKSB3aGl0ZVBpZWNlcysrO1xuICAgIGVsc2UgYmxhY2tQaWVjZXMrKztcblxuICAgIC8vIEtpbmcgdGFsbGllcy5cbiAgICBpZiAocC50eXBlID09PSBcImtpbmdcIikge1xuICAgICAgaWYgKHAuY29sb3IgPT09IFwid2hpdGVcIikgd2hpdGVLaW5ncysrO1xuICAgICAgZWxzZSBibGFja0tpbmdzKys7XG4gICAgfVxuXG4gICAgLy8gUGF3bi1wbGFjZW1lbnQgd2FybmluZ3MuXG4gICAgaWYgKHAudHlwZSA9PT0gXCJwYXduXCIpIHtcbiAgICAgIGNvbnN0IHJhbmsgPSByYW5rT2YocC5zcXVhcmUpO1xuICAgICAgaWYgKHAuY29sb3IgPT09IFwid2hpdGVcIiAmJiByYW5rID09PSAwKSB7XG4gICAgICAgIHdhcm5pbmdzLnB1c2goXG4gICAgICAgICAgYFdoaXRlIHBhd24gb24gcmFuayAxIChzcXVhcmUgJHtzcXVhcmVMYWJlbChwLnNxdWFyZSl9KTogcGF3bnMgY2Fubm90IG1vdmUgYmFja3dhcmQuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwLmNvbG9yID09PSBcIndoaXRlXCIgJiYgcmFuayA9PT0gNykge1xuICAgICAgICB3YXJuaW5ncy5wdXNoKFxuICAgICAgICAgIGBXaGl0ZSBwYXduIG9uIHJhbmsgOCAoc3F1YXJlICR7c3F1YXJlTGFiZWwocC5zcXVhcmUpfSk6IGFscmVhZHkgb24gcHJvbW90aW9uIHJhbmsuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwLmNvbG9yID09PSBcImJsYWNrXCIgJiYgcmFuayA9PT0gNykge1xuICAgICAgICB3YXJuaW5ncy5wdXNoKFxuICAgICAgICAgIGBCbGFjayBwYXduIG9uIHJhbmsgOCAoc3F1YXJlICR7c3F1YXJlTGFiZWwocC5zcXVhcmUpfSk6IHBhd25zIGNhbm5vdCBtb3ZlIGJhY2t3YXJkLmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocC5jb2xvciA9PT0gXCJibGFja1wiICYmIHJhbmsgPT09IDApIHtcbiAgICAgICAgd2FybmluZ3MucHVzaChcbiAgICAgICAgICBgQmxhY2sgcGF3biBvbiByYW5rIDEgKHNxdWFyZSAke3NxdWFyZUxhYmVsKHAuc3F1YXJlKX0pOiBhbHJlYWR5IG9uIHByb21vdGlvbiByYW5rLmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gS2luZy1jb3VudCBjaGVja3MuXG4gIGlmICh3aGl0ZUtpbmdzID09PSAwKSB7XG4gICAgZXJyb3JzLnB1c2goXCJObyB3aGl0ZSBraW5nIG9uIHRoZSBib2FyZC5cIik7XG4gIH1cbiAgaWYgKGJsYWNrS2luZ3MgPT09IDApIHtcbiAgICBlcnJvcnMucHVzaChcIk5vIGJsYWNrIGtpbmcgb24gdGhlIGJvYXJkLlwiKTtcbiAgfVxuXG4gIC8vIEhlYXZ5LW1hdGVyaWFsIHdhcm5pbmdzLlxuICBpZiAod2hpdGVQaWVjZXMgPiAzMikge1xuICAgIHdhcm5pbmdzLnB1c2goYCR7d2hpdGVQaWVjZXN9IHdoaXRlIHBpZWNlcyAobW9yZSB0aGFuIGEgZnVsbCBGSURFIGFybXkpLmApO1xuICB9XG4gIGlmIChibGFja1BpZWNlcyA+IDMyKSB7XG4gICAgd2FybmluZ3MucHVzaChgJHtibGFja1BpZWNlc30gYmxhY2sgcGllY2VzIChtb3JlIHRoYW4gYSBmdWxsIEZJREUgYXJteSkuYCk7XG4gIH1cblxuICByZXR1cm4geyBlcnJvcnMsIHdhcm5pbmdzIH07XG59XG5cbi8qKiBIdW1hbi1yZWFkYWJsZSBzcXVhcmUgbGFiZWwgZm9yIGVycm9yIG1lc3NhZ2VzLiBhMSA9IDAsIGg4ID0gNjMuICovXG5mdW5jdGlvbiBzcXVhcmVMYWJlbChzcXVhcmU6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IGZpbGUgPSBmaWxlT2Yoc3F1YXJlKTtcbiAgY29uc3QgcmFuayA9IHJhbmtPZihzcXVhcmUpO1xuICBjb25zdCBmaWxlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoXCJhXCIuY2hhckNvZGVBdCgwKSArIGZpbGUpO1xuICByZXR1cm4gYCR7ZmlsZUNoYXJ9JHtyYW5rICsgMX1gO1xufVxuIl0sImZpbGUiOiIvc3JjL2xheW91dHMvdmFsaWRhdGUudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/ed0aea79fff975a3ae29ebbb6d79fb0adb988228 b/7xOfJqsDU787fe61oSCq1/web/ed0aea79fff975a3ae29ebbb6d79fb0adb988228 deleted file mode 100644 index 7ca582f..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/ed0aea79fff975a3ae29ebbb6d79fb0adb988228 +++ /dev/null @@ -1,178 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/rules/sliding.ts", {"importedNames":["getLegalBishopMoves","getLegalRookMoves","getLegalQueenMoves"]}); - - - - -function setupSession() { - return new __vite_ssr_import_1__.Session({ autoFire: false }); -} -function insertPiece(session, id, type, color, square) { - const eid = id; - session.insert(eid, "PieceType", type); - session.insert(eid, "Color", color); - session.insert(eid, "Position", square); - return eid; -} -(0,__vite_ssr_import_0__.describe)("getLegalRookMoves", () => { - (0,__vite_ssr_import_0__.it)("rook at a1 on empty board produces 14 moves (7 right + 7 up)", () => { - const session = setupSession(); - const rook = insertPiece(session, 1, "rook", "white", 0); - const moves = (0,__vite_ssr_import_2__.getLegalRookMoves)(session, rook); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(14); - (0,__vite_ssr_import_0__.expect)(moves.every((m) => !m.isCapture)).toBe(true); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.to === 1)).toBe(true); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.to === 7)).toBe(true); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.to === 8)).toBe(true); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.to === 56)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("rook at e4 (28) on empty board produces 14 moves", () => { - const session = setupSession(); - const rook = insertPiece(session, 1, "rook", "white", 28); - const moves = (0,__vite_ssr_import_2__.getLegalRookMoves)(session, rook); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(14); - }); - (0,__vite_ssr_import_0__.it)("rook stops before an allied piece (does not include it)", () => { - const session = setupSession(); - const rook = insertPiece(session, 1, "rook", "white", 0); - insertPiece(session, 2, "pawn", "white", 4); - const rightMoves = (0,__vite_ssr_import_2__.getLegalRookMoves)(session, rook).filter((m) => m.to >= 1 && m.to <= 7); - (0,__vite_ssr_import_0__.expect)(rightMoves.map((m) => m.to)).toEqual([1, 2, 3]); - (0,__vite_ssr_import_0__.expect)(rightMoves.every((m) => !m.isCapture)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("rook captures an enemy piece and then stops", () => { - const session = setupSession(); - const rook = insertPiece(session, 1, "rook", "white", 0); - insertPiece(session, 2, "pawn", "black", 4); - const rightMoves = (0,__vite_ssr_import_2__.getLegalRookMoves)(session, rook).filter((m) => m.to >= 1 && m.to <= 7); - (0,__vite_ssr_import_0__.expect)(rightMoves.map((m) => m.to)).toEqual([1, 2, 3, 4]); - (0,__vite_ssr_import_0__.expect)(rightMoves.find((m) => m.to === 4)?.isCapture).toBe(true); - (0,__vite_ssr_import_0__.expect)(rightMoves.filter((m) => m.to !== 4).every((m) => !m.isCapture)).toBe(true); - (0,__vite_ssr_import_0__.expect)(rightMoves.some((m) => m.to === 5)).toBe(false); - (0,__vite_ssr_import_0__.expect)(rightMoves.some((m) => m.to === 6)).toBe(false); - (0,__vite_ssr_import_0__.expect)(rightMoves.some((m) => m.to === 7)).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("rook boxed in by four allies produces zero moves", () => { - const session = setupSession(); - const rook = insertPiece(session, 1, "rook", "white", 28); - insertPiece(session, 2, "pawn", "white", 29); - insertPiece(session, 3, "pawn", "white", 27); - insertPiece(session, 4, "pawn", "white", 36); - insertPiece(session, 5, "pawn", "white", 20); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.getLegalRookMoves)(session, rook)).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("rook boxed in by four enemies produces four captures only", () => { - const session = setupSession(); - const rook = insertPiece(session, 1, "rook", "white", 28); - insertPiece(session, 2, "pawn", "black", 29); - insertPiece(session, 3, "pawn", "black", 27); - insertPiece(session, 4, "pawn", "black", 36); - insertPiece(session, 5, "pawn", "black", 20); - const moves = (0,__vite_ssr_import_2__.getLegalRookMoves)(session, rook); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(4); - (0,__vite_ssr_import_0__.expect)(moves.every((m) => m.isCapture)).toBe(true); - (0,__vite_ssr_import_0__.expect)(moves.map((m) => m.to).sort((a, b) => a - b)).toEqual([20, 27, 29, 36]); - }); -}); -(0,__vite_ssr_import_0__.describe)("getLegalBishopMoves", () => { - (0,__vite_ssr_import_0__.it)("bishop at a1 on empty board has exactly 7 moves along the a1-h8 diagonal", () => { - const session = setupSession(); - const bishop = insertPiece(session, 1, "bishop", "white", 0); - const moves = (0,__vite_ssr_import_2__.getLegalBishopMoves)(session, bishop); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(7); - (0,__vite_ssr_import_0__.expect)(moves.map((m) => m.to).sort((a, b) => a - b)).toEqual([9, 18, 27, 36, 45, 54, 63]); - (0,__vite_ssr_import_0__.expect)(moves.every((m) => !m.isCapture)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("bishop at e4 (28) on empty board has 13 moves across four diagonals", () => { - const session = setupSession(); - const bishop = insertPiece(session, 1, "bishop", "white", 28); - const moves = (0,__vite_ssr_import_2__.getLegalBishopMoves)(session, bishop); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(13); - }); - (0,__vite_ssr_import_0__.it)("bishop stops before an allied piece on the diagonal", () => { - const session = setupSession(); - const bishop = insertPiece(session, 1, "bishop", "white", 0); - insertPiece(session, 2, "pawn", "white", 18); - const moves = (0,__vite_ssr_import_2__.getLegalBishopMoves)(session, bishop); - (0,__vite_ssr_import_0__.expect)(moves.map((m) => m.to)).toContain(9); - (0,__vite_ssr_import_0__.expect)(moves.map((m) => m.to)).not.toContain(18); - (0,__vite_ssr_import_0__.expect)(moves.map((m) => m.to)).not.toContain(27); - (0,__vite_ssr_import_0__.expect)(moves.map((m) => m.to)).not.toContain(36); - }); - (0,__vite_ssr_import_0__.it)("bishop captures an enemy on the diagonal and then stops", () => { - const session = setupSession(); - const bishop = insertPiece(session, 1, "bishop", "white", 0); - insertPiece(session, 2, "pawn", "black", 18); - const moves = (0,__vite_ssr_import_2__.getLegalBishopMoves)(session, bishop); - (0,__vite_ssr_import_0__.expect)(moves.map((m) => m.to)).toContain(9); - (0,__vite_ssr_import_0__.expect)(moves.map((m) => m.to)).toContain(18); - (0,__vite_ssr_import_0__.expect)(moves.find((m) => m.to === 18)?.isCapture).toBe(true); - (0,__vite_ssr_import_0__.expect)(moves.map((m) => m.to)).not.toContain(27); - }); -}); -(0,__vite_ssr_import_0__.describe)("getLegalQueenMoves", () => { - (0,__vite_ssr_import_0__.it)("queen at e4 (28) on empty board has 27 moves", () => { - const session = setupSession(); - const queen = insertPiece(session, 1, "queen", "white", 28); - const moves = (0,__vite_ssr_import_2__.getLegalQueenMoves)(session, queen); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(27); - (0,__vite_ssr_import_0__.expect)(moves.every((m) => !m.isCapture)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("queen at a1 on empty board has 21 moves (14 rook + 7 bishop)", () => { - const session = setupSession(); - const queen = insertPiece(session, 1, "queen", "white", 0); - const moves = (0,__vite_ssr_import_2__.getLegalQueenMoves)(session, queen); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(21); - }); - (0,__vite_ssr_import_0__.it)("queen move set equals union of rook and bishop moves from the same square", () => { - const session = setupSession(); - const queen = insertPiece(session, 1, "queen", "white", 28); - const session2 = setupSession(); - const rook = insertPiece(session2, 1, "rook", "white", 28); - const session3 = setupSession(); - const bishop = insertPiece(session3, 1, "bishop", "white", 28); - const qTos = (0,__vite_ssr_import_2__.getLegalQueenMoves)(session, queen).map((m) => m.to).sort((a, b) => a - b); - const rTos = (0,__vite_ssr_import_2__.getLegalRookMoves)(session2, rook).map((m) => m.to); - const bTos = (0,__vite_ssr_import_2__.getLegalBishopMoves)(session3, bishop).map((m) => m.to); - const combined = [...rTos, ...bTos].sort((a, b) => a - b); - (0,__vite_ssr_import_0__.expect)(qTos).toEqual(combined); - }); - (0,__vite_ssr_import_0__.it)("queen captures enemy and stops along a diagonal ray", () => { - const session = setupSession(); - const queen = insertPiece(session, 1, "queen", "white", 0); - insertPiece(session, 2, "pawn", "black", 18); - insertPiece(session, 3, "pawn", "black", 4); - const moves = (0,__vite_ssr_import_2__.getLegalQueenMoves)(session, queen); - (0,__vite_ssr_import_0__.expect)(moves.find((m) => m.to === 9)?.isCapture).toBe(false); - (0,__vite_ssr_import_0__.expect)(moves.find((m) => m.to === 18)?.isCapture).toBe(true); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.to === 27)).toBe(false); - (0,__vite_ssr_import_0__.expect)(moves.find((m) => m.to === 4)?.isCapture).toBe(true); - (0,__vite_ssr_import_0__.expect)(moves.some((m) => m.to === 5)).toBe(false); - }); -}); -(0,__vite_ssr_import_0__.describe)("sliding rules — degenerate inputs", () => { - (0,__vite_ssr_import_0__.it)("returns [] for an unknown piece id (rook)", () => { - const session = setupSession(); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.getLegalRookMoves)(session, 999)).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("returns [] for an unknown piece id (bishop)", () => { - const session = setupSession(); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.getLegalBishopMoves)(session, 999)).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("returns [] for an unknown piece id (queen)", () => { - const session = setupSession(); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.getLegalQueenMoves)(session, 999)).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("returns [] when piece has Position but no Color", () => { - const session = setupSession(); - const eid = 1; - session.insert(eid, "Position", 28); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.getLegalRookMoves)(session, eid)).toEqual([]); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.getLegalBishopMoves)(session, eid)).toEqual([]); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_2__.getLegalQueenMoves)(session, eid)).toEqual([]); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQUEsRUFDckQsQ0FBQztBQUNILENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInNsaWRpbmcudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgaXQsIGV4cGVjdCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB7IFNlc3Npb24sIHR5cGUgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB7XG4gIGdldExlZ2FsQmlzaG9wTW92ZXMsXG4gIGdldExlZ2FsUm9va01vdmVzLFxuICBnZXRMZWdhbFF1ZWVuTW92ZXMsXG59IGZyb20gXCIuL3NsaWRpbmcuanNcIjtcbmltcG9ydCB0eXBlIHsgUGllY2VDb2xvciwgUGllY2VUeXBlLCBTcXVhcmUgfSBmcm9tIFwiLi4vc2NoZW1hLmpzXCI7XG5cbmZ1bmN0aW9uIHNldHVwU2Vzc2lvbigpOiBTZXNzaW9uIHtcbiAgcmV0dXJuIG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRQaWVjZShcbiAgc2Vzc2lvbjogU2Vzc2lvbixcbiAgaWQ6IG51bWJlcixcbiAgdHlwZTogUGllY2VUeXBlLFxuICBjb2xvcjogUGllY2VDb2xvcixcbiAgc3F1YXJlOiBTcXVhcmUsXG4pOiBFbnRpdHlJZCB7XG4gIGNvbnN0IGVpZCA9IGlkIGFzIEVudGl0eUlkO1xuICBzZXNzaW9uLmluc2VydChlaWQsIFwiUGllY2VUeXBlXCIsIHR5cGUpO1xuICBzZXNzaW9uLmluc2VydChlaWQsIFwiQ29sb3JcIiwgY29sb3IpO1xuICBzZXNzaW9uLmluc2VydChlaWQsIFwiUG9zaXRpb25cIiwgc3F1YXJlKTtcbiAgcmV0dXJuIGVpZDtcbn1cblxuLy8g4pSA4pSA4pSAIFJvb2sg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmRlc2NyaWJlKFwiZ2V0TGVnYWxSb29rTW92ZXNcIiwgKCkgPT4ge1xuICBpdChcInJvb2sgYXQgYTEgb24gZW1wdHkgYm9hcmQgcHJvZHVjZXMgMTQgbW92ZXMgKDcgcmlnaHQgKyA3IHVwKVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IHJvb2sgPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInJvb2tcIiwgXCJ3aGl0ZVwiLCAwKTsgLy8gYTFcbiAgICBjb25zdCBtb3ZlcyA9IGdldExlZ2FsUm9va01vdmVzKHNlc3Npb24sIHJvb2spO1xuICAgIGV4cGVjdChtb3ZlcykudG9IYXZlTGVuZ3RoKDE0KTtcbiAgICBleHBlY3QobW92ZXMuZXZlcnkobSA9PiAhbS5pc0NhcHR1cmUpKS50b0JlKHRydWUpO1xuICAgIC8vIGFsb25nIHJhbmsgMTogYjEuLmgxXG4gICAgZXhwZWN0KG1vdmVzLnNvbWUobSA9PiBtLnRvID09PSAxKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QobW92ZXMuc29tZShtID0+IG0udG8gPT09IDcpKS50b0JlKHRydWUpO1xuICAgIC8vIGFsb25nIGEtZmlsZTogYTIuLmE4XG4gICAgZXhwZWN0KG1vdmVzLnNvbWUobSA9PiBtLnRvID09PSA4KSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QobW92ZXMuc29tZShtID0+IG0udG8gPT09IDU2KSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJyb29rIGF0IGU0ICgyOCkgb24gZW1wdHkgYm9hcmQgcHJvZHVjZXMgMTQgbW92ZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZXR1cFNlc3Npb24oKTtcbiAgICBjb25zdCByb29rID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJyb29rXCIsIFwid2hpdGVcIiwgMjgpO1xuICAgIGNvbnN0IG1vdmVzID0gZ2V0TGVnYWxSb29rTW92ZXMoc2Vzc2lvbiwgcm9vayk7XG4gICAgZXhwZWN0KG1vdmVzKS50b0hhdmVMZW5ndGgoMTQpO1xuICB9KTtcblxuICBpdChcInJvb2sgc3RvcHMgYmVmb3JlIGFuIGFsbGllZCBwaWVjZSAoZG9lcyBub3QgaW5jbHVkZSBpdClcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZXR1cFNlc3Npb24oKTtcbiAgICBjb25zdCByb29rID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJyb29rXCIsIFwid2hpdGVcIiwgMCk7IC8vIGExXG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMiwgXCJwYXduXCIsIFwid2hpdGVcIiwgNCk7IC8vIGUxIGFsbHkgYmxvY2tlclxuICAgIGNvbnN0IHJpZ2h0TW92ZXMgPSBnZXRMZWdhbFJvb2tNb3ZlcyhzZXNzaW9uLCByb29rKVxuICAgICAgLmZpbHRlcihtID0+IG0udG8gPj0gMSAmJiBtLnRvIDw9IDcpO1xuICAgIGV4cGVjdChyaWdodE1vdmVzLm1hcChtID0+IG0udG8pKS50b0VxdWFsKFsxLCAyLCAzXSk7IC8vIGIxLCBjMSwgZDFcbiAgICBleHBlY3QocmlnaHRNb3Zlcy5ldmVyeShtID0+ICFtLmlzQ2FwdHVyZSkpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwicm9vayBjYXB0dXJlcyBhbiBlbmVteSBwaWVjZSBhbmQgdGhlbiBzdG9wc1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IHJvb2sgPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInJvb2tcIiwgXCJ3aGl0ZVwiLCAwKTsgLy8gYTFcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAyLCBcInBhd25cIiwgXCJibGFja1wiLCA0KTsgLy8gZTEgZW5lbXlcbiAgICBjb25zdCByaWdodE1vdmVzID0gZ2V0TGVnYWxSb29rTW92ZXMoc2Vzc2lvbiwgcm9vaylcbiAgICAgIC5maWx0ZXIobSA9PiBtLnRvID49IDEgJiYgbS50byA8PSA3KTtcbiAgICBleHBlY3QocmlnaHRNb3Zlcy5tYXAobSA9PiBtLnRvKSkudG9FcXVhbChbMSwgMiwgMywgNF0pO1xuICAgIGV4cGVjdChyaWdodE1vdmVzLmZpbmQobSA9PiBtLnRvID09PSA0KT8uaXNDYXB0dXJlKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChyaWdodE1vdmVzLmZpbHRlcihtID0+IG0udG8gIT09IDQpLmV2ZXJ5KG0gPT4gIW0uaXNDYXB0dXJlKSkudG9CZSh0cnVlKTtcbiAgICAvLyBmMS4uaDEgdW5yZWFjaGFibGVcbiAgICBleHBlY3QocmlnaHRNb3Zlcy5zb21lKG0gPT4gbS50byA9PT0gNSkpLnRvQmUoZmFsc2UpO1xuICAgIGV4cGVjdChyaWdodE1vdmVzLnNvbWUobSA9PiBtLnRvID09PSA2KSkudG9CZShmYWxzZSk7XG4gICAgZXhwZWN0KHJpZ2h0TW92ZXMuc29tZShtID0+IG0udG8gPT09IDcpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJyb29rIGJveGVkIGluIGJ5IGZvdXIgYWxsaWVzIHByb2R1Y2VzIHplcm8gbW92ZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZXR1cFNlc3Npb24oKTtcbiAgICBjb25zdCByb29rID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJyb29rXCIsIFwid2hpdGVcIiwgMjgpOyAvLyBlNFxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDIsIFwicGF3blwiLCBcIndoaXRlXCIsIDI5KTsgLy8gZjQgcmlnaHRcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAzLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCAyNyk7IC8vIGQ0IGxlZnRcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCA0LCBcInBhd25cIiwgXCJ3aGl0ZVwiLCAzNik7IC8vIGU1IHVwXG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgNSwgXCJwYXduXCIsIFwid2hpdGVcIiwgMjApOyAvLyBlMyBkb3duXG4gICAgZXhwZWN0KGdldExlZ2FsUm9va01vdmVzKHNlc3Npb24sIHJvb2spKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xuXG4gIGl0KFwicm9vayBib3hlZCBpbiBieSBmb3VyIGVuZW1pZXMgcHJvZHVjZXMgZm91ciBjYXB0dXJlcyBvbmx5XCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gc2V0dXBTZXNzaW9uKCk7XG4gICAgY29uc3Qgcm9vayA9IGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwicm9va1wiLCBcIndoaXRlXCIsIDI4KTsgLy8gZTRcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAyLCBcInBhd25cIiwgXCJibGFja1wiLCAyOSk7IC8vIGY0XG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMywgXCJwYXduXCIsIFwiYmxhY2tcIiwgMjcpOyAvLyBkNFxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDQsIFwicGF3blwiLCBcImJsYWNrXCIsIDM2KTsgLy8gZTVcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCA1LCBcInBhd25cIiwgXCJibGFja1wiLCAyMCk7IC8vIGUzXG4gICAgY29uc3QgbW92ZXMgPSBnZXRMZWdhbFJvb2tNb3ZlcyhzZXNzaW9uLCByb29rKTtcbiAgICBleHBlY3QobW92ZXMpLnRvSGF2ZUxlbmd0aCg0KTtcbiAgICBleHBlY3QobW92ZXMuZXZlcnkobSA9PiBtLmlzQ2FwdHVyZSkpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KG1vdmVzLm1hcChtID0+IG0udG8pLnNvcnQoKGEsIGIpID0+IGEgLSBiKSkudG9FcXVhbChbMjAsIDI3LCAyOSwgMzZdKTtcbiAgfSk7XG59KTtcblxuLy8g4pSA4pSA4pSAIEJpc2hvcCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZGVzY3JpYmUoXCJnZXRMZWdhbEJpc2hvcE1vdmVzXCIsICgpID0+IHtcbiAgaXQoXCJiaXNob3AgYXQgYTEgb24gZW1wdHkgYm9hcmQgaGFzIGV4YWN0bHkgNyBtb3ZlcyBhbG9uZyB0aGUgYTEtaDggZGlhZ29uYWxcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZXR1cFNlc3Npb24oKTtcbiAgICBjb25zdCBiaXNob3AgPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcImJpc2hvcFwiLCBcIndoaXRlXCIsIDApO1xuICAgIGNvbnN0IG1vdmVzID0gZ2V0TGVnYWxCaXNob3BNb3ZlcyhzZXNzaW9uLCBiaXNob3ApO1xuICAgIGV4cGVjdChtb3ZlcykudG9IYXZlTGVuZ3RoKDcpO1xuICAgIGV4cGVjdChtb3Zlcy5tYXAobSA9PiBtLnRvKS5zb3J0KChhLCBiKSA9PiBhIC0gYikpXG4gICAgICAudG9FcXVhbChbOSwgMTgsIDI3LCAzNiwgNDUsIDU0LCA2M10pO1xuICAgIGV4cGVjdChtb3Zlcy5ldmVyeShtID0+ICFtLmlzQ2FwdHVyZSkpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwiYmlzaG9wIGF0IGU0ICgyOCkgb24gZW1wdHkgYm9hcmQgaGFzIDEzIG1vdmVzIGFjcm9zcyBmb3VyIGRpYWdvbmFsc1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IGJpc2hvcCA9IGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwiYmlzaG9wXCIsIFwid2hpdGVcIiwgMjgpO1xuICAgIGNvbnN0IG1vdmVzID0gZ2V0TGVnYWxCaXNob3BNb3ZlcyhzZXNzaW9uLCBiaXNob3ApO1xuICAgIC8vIHVwLXJpZ2h0OiBmNSxnNixoNyA9IDM7IGRvd24tcmlnaHQ6IGYzLGcyLGgxID0gM1xuICAgIC8vIHVwLWxlZnQ6IGQ1LGM2LGI3LGE4ID0gNDsgZG93bi1sZWZ0OiBkMyxjMixiMSA9IDNcbiAgICBleHBlY3QobW92ZXMpLnRvSGF2ZUxlbmd0aCgxMyk7XG4gIH0pO1xuXG4gIGl0KFwiYmlzaG9wIHN0b3BzIGJlZm9yZSBhbiBhbGxpZWQgcGllY2Ugb24gdGhlIGRpYWdvbmFsXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gc2V0dXBTZXNzaW9uKCk7XG4gICAgY29uc3QgYmlzaG9wID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJiaXNob3BcIiwgXCJ3aGl0ZVwiLCAwKTsgLy8gYTFcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAyLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCAxOCk7IC8vIGMzIGFsbHlcbiAgICBjb25zdCBtb3ZlcyA9IGdldExlZ2FsQmlzaG9wTW92ZXMoc2Vzc2lvbiwgYmlzaG9wKTtcbiAgICBleHBlY3QobW92ZXMubWFwKG0gPT4gbS50bykpLnRvQ29udGFpbig5KTsgLy8gYjIgcmVhY2hhYmxlXG4gICAgZXhwZWN0KG1vdmVzLm1hcChtID0+IG0udG8pKS5ub3QudG9Db250YWluKDE4KTsgLy8gYzMgYWxseSBibG9ja3NcbiAgICBleHBlY3QobW92ZXMubWFwKG0gPT4gbS50bykpLm5vdC50b0NvbnRhaW4oMjcpOyAvLyBkNCBiZXlvbmRcbiAgICBleHBlY3QobW92ZXMubWFwKG0gPT4gbS50bykpLm5vdC50b0NvbnRhaW4oMzYpOyAvLyBlNSBiZXlvbmRcbiAgfSk7XG5cbiAgaXQoXCJiaXNob3AgY2FwdHVyZXMgYW4gZW5lbXkgb24gdGhlIGRpYWdvbmFsIGFuZCB0aGVuIHN0b3BzXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gc2V0dXBTZXNzaW9uKCk7XG4gICAgY29uc3QgYmlzaG9wID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJiaXNob3BcIiwgXCJ3aGl0ZVwiLCAwKTsgLy8gYTFcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAyLCBcInBhd25cIiwgXCJibGFja1wiLCAxOCk7IC8vIGMzIGVuZW15XG4gICAgY29uc3QgbW92ZXMgPSBnZXRMZWdhbEJpc2hvcE1vdmVzKHNlc3Npb24sIGJpc2hvcCk7XG4gICAgZXhwZWN0KG1vdmVzLm1hcChtID0+IG0udG8pKS50b0NvbnRhaW4oOSk7IC8vIGIyXG4gICAgZXhwZWN0KG1vdmVzLm1hcChtID0+IG0udG8pKS50b0NvbnRhaW4oMTgpOyAvLyBjMyBjYXB0dXJlZFxuICAgIGV4cGVjdChtb3Zlcy5maW5kKG0gPT4gbS50byA9PT0gMTgpPy5pc0NhcHR1cmUpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KG1vdmVzLm1hcChtID0+IG0udG8pKS5ub3QudG9Db250YWluKDI3KTsgLy8gZDQgdW5yZWFjaGFibGVcbiAgfSk7XG59KTtcblxuLy8g4pSA4pSA4pSAIFF1ZWVuIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5kZXNjcmliZShcImdldExlZ2FsUXVlZW5Nb3Zlc1wiLCAoKSA9PiB7XG4gIGl0KFwicXVlZW4gYXQgZTQgKDI4KSBvbiBlbXB0eSBib2FyZCBoYXMgMjcgbW92ZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZXR1cFNlc3Npb24oKTtcbiAgICBjb25zdCBxdWVlbiA9IGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwicXVlZW5cIiwgXCJ3aGl0ZVwiLCAyOCk7XG4gICAgY29uc3QgbW92ZXMgPSBnZXRMZWdhbFF1ZWVuTW92ZXMoc2Vzc2lvbiwgcXVlZW4pO1xuICAgIGV4cGVjdChtb3ZlcykudG9IYXZlTGVuZ3RoKDI3KTtcbiAgICBleHBlY3QobW92ZXMuZXZlcnkobSA9PiAhbS5pc0NhcHR1cmUpKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcInF1ZWVuIGF0IGExIG9uIGVtcHR5IGJvYXJkIGhhcyAyMSBtb3ZlcyAoMTQgcm9vayArIDcgYmlzaG9wKVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IHF1ZWVuID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJxdWVlblwiLCBcIndoaXRlXCIsIDApO1xuICAgIGNvbnN0IG1vdmVzID0gZ2V0TGVnYWxRdWVlbk1vdmVzKHNlc3Npb24sIHF1ZWVuKTtcbiAgICBleHBlY3QobW92ZXMpLnRvSGF2ZUxlbmd0aCgyMSk7XG4gIH0pO1xuXG4gIGl0KFwicXVlZW4gbW92ZSBzZXQgZXF1YWxzIHVuaW9uIG9mIHJvb2sgYW5kIGJpc2hvcCBtb3ZlcyBmcm9tIHRoZSBzYW1lIHNxdWFyZVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IHF1ZWVuID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJxdWVlblwiLCBcIndoaXRlXCIsIDI4KTtcbiAgICBjb25zdCBzZXNzaW9uMiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IHJvb2sgPSBpbnNlcnRQaWVjZShzZXNzaW9uMiwgMSwgXCJyb29rXCIsIFwid2hpdGVcIiwgMjgpO1xuICAgIGNvbnN0IHNlc3Npb24zID0gc2V0dXBTZXNzaW9uKCk7XG4gICAgY29uc3QgYmlzaG9wID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbjMsIDEsIFwiYmlzaG9wXCIsIFwid2hpdGVcIiwgMjgpO1xuICAgIGNvbnN0IHFUb3MgPSBnZXRMZWdhbFF1ZWVuTW92ZXMoc2Vzc2lvbiwgcXVlZW4pLm1hcChtID0+IG0udG8pLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICBjb25zdCByVG9zID0gZ2V0TGVnYWxSb29rTW92ZXMoc2Vzc2lvbjIsIHJvb2spLm1hcChtID0+IG0udG8pO1xuICAgIGNvbnN0IGJUb3MgPSBnZXRMZWdhbEJpc2hvcE1vdmVzKHNlc3Npb24zLCBiaXNob3ApLm1hcChtID0+IG0udG8pO1xuICAgIGNvbnN0IGNvbWJpbmVkID0gWy4uLnJUb3MsIC4uLmJUb3NdLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICBleHBlY3QocVRvcykudG9FcXVhbChjb21iaW5lZCk7XG4gIH0pO1xuXG4gIGl0KFwicXVlZW4gY2FwdHVyZXMgZW5lbXkgYW5kIHN0b3BzIGFsb25nIGEgZGlhZ29uYWwgcmF5XCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gc2V0dXBTZXNzaW9uKCk7XG4gICAgY29uc3QgcXVlZW4gPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInF1ZWVuXCIsIFwid2hpdGVcIiwgMCk7IC8vIGExXG4gICAgaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMiwgXCJwYXduXCIsIFwiYmxhY2tcIiwgMTgpOyAvLyBjMyBlbmVteSBvbiBkaWFnb25hbFxuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDMsIFwicGF3blwiLCBcImJsYWNrXCIsIDQpOyAgLy8gZTEgZW5lbXkgb24gcmFua1xuICAgIGNvbnN0IG1vdmVzID0gZ2V0TGVnYWxRdWVlbk1vdmVzKHNlc3Npb24sIHF1ZWVuKTtcbiAgICAvLyBEaWFnb25hbDogYjIgb2ssIGMzIGNhcHR1cmUsIG5vIGQ0XG4gICAgZXhwZWN0KG1vdmVzLmZpbmQobSA9PiBtLnRvID09PSA5KT8uaXNDYXB0dXJlKS50b0JlKGZhbHNlKTtcbiAgICBleHBlY3QobW92ZXMuZmluZChtID0+IG0udG8gPT09IDE4KT8uaXNDYXB0dXJlKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChtb3Zlcy5zb21lKG0gPT4gbS50byA9PT0gMjcpKS50b0JlKGZhbHNlKTtcbiAgICAvLyBSYW5rOiBiMSwgYzEsIGQxIG9rLCBlMSBjYXB0dXJlLCBubyBmMVxuICAgIGV4cGVjdChtb3Zlcy5maW5kKG0gPT4gbS50byA9PT0gNCk/LmlzQ2FwdHVyZSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QobW92ZXMuc29tZShtID0+IG0udG8gPT09IDUpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG59KTtcblxuLy8g4pSA4pSA4pSAIERlZ2VuZXJhdGUgaW5wdXRzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5kZXNjcmliZShcInNsaWRpbmcgcnVsZXMg4oCUIGRlZ2VuZXJhdGUgaW5wdXRzXCIsICgpID0+IHtcbiAgaXQoXCJyZXR1cm5zIFtdIGZvciBhbiB1bmtub3duIHBpZWNlIGlkIChyb29rKVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGV4cGVjdChnZXRMZWdhbFJvb2tNb3ZlcyhzZXNzaW9uLCA5OTkgYXMgRW50aXR5SWQpKS50b0VxdWFsKFtdKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIFtdIGZvciBhbiB1bmtub3duIHBpZWNlIGlkIChiaXNob3ApXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gc2V0dXBTZXNzaW9uKCk7XG4gICAgZXhwZWN0KGdldExlZ2FsQmlzaG9wTW92ZXMoc2Vzc2lvbiwgOTk5IGFzIEVudGl0eUlkKSkudG9FcXVhbChbXSk7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyBbXSBmb3IgYW4gdW5rbm93biBwaWVjZSBpZCAocXVlZW4pXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gc2V0dXBTZXNzaW9uKCk7XG4gICAgZXhwZWN0KGdldExlZ2FsUXVlZW5Nb3ZlcyhzZXNzaW9uLCA5OTkgYXMgRW50aXR5SWQpKS50b0VxdWFsKFtdKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIFtdIHdoZW4gcGllY2UgaGFzIFBvc2l0aW9uIGJ1dCBubyBDb2xvclwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IGVpZCA9IDEgYXMgRW50aXR5SWQ7XG4gICAgc2Vzc2lvbi5pbnNlcnQoZWlkLCBcIlBvc2l0aW9uXCIsIDI4KTtcbiAgICBleHBlY3QoZ2V0TGVnYWxSb29rTW92ZXMoc2Vzc2lvbiwgZWlkKSkudG9FcXVhbChbXSk7XG4gICAgZXhwZWN0KGdldExlZ2FsQmlzaG9wTW92ZXMoc2Vzc2lvbiwgZWlkKSkudG9FcXVhbChbXSk7XG4gICAgZXhwZWN0KGdldExlZ2FsUXVlZW5Nb3ZlcyhzZXNzaW9uLCBlaWQpKS50b0VxdWFsKFtdKTtcbiAgfSk7XG59KTtcbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9jaGVzcy9zcmMvcnVsZXMvc2xpZGluZy50ZXN0LnRzIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/edb230cdb8a3c96b51880f55ec073d65873521b2 b/7xOfJqsDU787fe61oSCq1/web/edb230cdb8a3c96b51880f55ec073d65873521b2 deleted file mode 100644 index 8ce4c59..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/edb230cdb8a3c96b51880f55ec073d65873521b2 +++ /dev/null @@ -1,172 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/modifiers/registry.ts", {"importedNames":["MODIFIER_REGISTRY"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/modifiers/descriptors/promotion-override.ts"); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/modifiers/descriptors/promotion-override.ts", {"importedNames":["PROMOTION_OVERRIDE_DESCRIPTOR"]}); -const __vite_ssr_import_5__ = await __vite_ssr_import__("/src/rules/promotion.ts", {"importedNames":["getPromotionMoves","applyPromotion"]}); -function setupSession() { - return new __vite_ssr_import_1__.Session({ autoFire: false }); -} -function insertPiece(session, id, type, color, square) { - const eid = id; - session.insert(eid, "PieceType", type); - session.insert(eid, "Color", color); - session.insert(eid, "Position", square); - return eid; -} -(0,__vite_ssr_import_0__.describe)("promotion-override descriptor — registry", () => { - (0,__vite_ssr_import_0__.it)("registers in MODIFIER_REGISTRY under key 'promotion-override'", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.MODIFIER_REGISTRY.has("promotion-override")).toBe(true); - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_2__.MODIFIER_REGISTRY.get("promotion-override")).toBe((0,__vite_ssr_import_4__.PROMOTION_OVERRIDE_DESCRIPTOR)); - }); - (0,__vite_ssr_import_0__.it)("has the correct id, attrName, and uiForm", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_4__.PROMOTION_OVERRIDE_DESCRIPTOR.id).toBe("promotion-override"); - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_4__.PROMOTION_OVERRIDE_DESCRIPTOR.attrName).toBe("PromotionOverride"); - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_4__.PROMOTION_OVERRIDE_DESCRIPTOR.uiForm).toBe("promotion-target"); - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_4__.PROMOTION_OVERRIDE_DESCRIPTOR.stackingRule).toBe("priority-wins"); - }); -}); -(0,__vite_ssr_import_0__.describe)("promotion-override descriptor — describe()", () => { - (0,__vite_ssr_import_0__.it)("returns 'Cannot promote' for 'disabled'", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_4__.PROMOTION_OVERRIDE_DESCRIPTOR.describe("disabled")).toBe("Cannot promote"); - }); - (0,__vite_ssr_import_0__.it)("returns 'Promotes to queen' for 'queen'", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_4__.PROMOTION_OVERRIDE_DESCRIPTOR.describe("queen")).toBe("Promotes to queen"); - }); - (0,__vite_ssr_import_0__.it)("returns 'Promotes to rook' for 'rook'", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_4__.PROMOTION_OVERRIDE_DESCRIPTOR.describe("rook")).toBe("Promotes to rook"); - }); - (0,__vite_ssr_import_0__.it)("returns 'Promotes to bishop' for 'bishop'", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_4__.PROMOTION_OVERRIDE_DESCRIPTOR.describe("bishop")).toBe("Promotes to bishop"); - }); - (0,__vite_ssr_import_0__.it)("returns 'Promotes to knight' for 'knight'", () => { - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_4__.PROMOTION_OVERRIDE_DESCRIPTOR.describe("knight")).toBe("Promotes to knight"); - }); -}); -(0,__vite_ssr_import_0__.describe)("promotion-override descriptor — apply()", () => { - (0,__vite_ssr_import_0__.it)("seeds PromotionOverride='bishop' fact on piece entity", () => { - const session = new __vite_ssr_import_1__.Session(); - const eid = session.nextId(); - session.insert(eid, "PieceType", "pawn"); - __vite_ssr_import_4__.PROMOTION_OVERRIDE_DESCRIPTOR.apply(session, eid, "bishop"); - (0,__vite_ssr_import_0__.expect)(session.contains(eid, "PromotionOverride")).toBe(true); - (0,__vite_ssr_import_0__.expect)(session.get(eid, "PromotionOverride")).toBe("bishop"); - }); - (0,__vite_ssr_import_0__.it)("seeds PromotionOverride='disabled' fact on piece entity", () => { - const session = new __vite_ssr_import_1__.Session(); - const eid = session.nextId(); - session.insert(eid, "PieceType", "pawn"); - __vite_ssr_import_4__.PROMOTION_OVERRIDE_DESCRIPTOR.apply(session, eid, "disabled"); - (0,__vite_ssr_import_0__.expect)(session.get(eid, "PromotionOverride")).toBe("disabled"); - }); -}); -(0,__vite_ssr_import_0__.describe)("promotion-override descriptor — valueSchema", () => { - const schema = __vite_ssr_import_4__.PROMOTION_OVERRIDE_DESCRIPTOR.valueSchema; - (0,__vite_ssr_import_0__.it)("accepts all 4 promotion piece types", () => { - (0,__vite_ssr_import_0__.expect)(() => schema.parse("queen")).not.toThrow(); - (0,__vite_ssr_import_0__.expect)(() => schema.parse("rook")).not.toThrow(); - (0,__vite_ssr_import_0__.expect)(() => schema.parse("bishop")).not.toThrow(); - (0,__vite_ssr_import_0__.expect)(() => schema.parse("knight")).not.toThrow(); - }); - (0,__vite_ssr_import_0__.it)("accepts 'disabled'", () => { - (0,__vite_ssr_import_0__.expect)(() => schema.parse("disabled")).not.toThrow(); - }); - (0,__vite_ssr_import_0__.it)("rejects 'king' (not a valid promotion target)", () => { - (0,__vite_ssr_import_0__.expect)(() => schema.parse("king")).toThrow(); - }); - (0,__vite_ssr_import_0__.it)("rejects 'pawn' (cannot promote to pawn)", () => { - (0,__vite_ssr_import_0__.expect)(() => schema.parse("pawn")).toThrow(); - }); - (0,__vite_ssr_import_0__.it)("rejects arbitrary strings", () => { - (0,__vite_ssr_import_0__.expect)(() => schema.parse("dragon")).toThrow(); - (0,__vite_ssr_import_0__.expect)(() => schema.parse("")).toThrow(); - }); -}); -(0,__vite_ssr_import_0__.describe)("promotion-override — integration with getPromotionMoves", () => { - (0,__vite_ssr_import_0__.it)("PromotionOverride='bishop': returns only bishop promotion move", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 52); - session.insert(pawn, "PromotionOverride", "bishop"); - const moves = (0,__vite_ssr_import_5__.getPromotionMoves)(session, pawn); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(1); - const move = moves[0]; - (0,__vite_ssr_import_0__.expect)(move.promoteTo).toBe("bishop"); - (0,__vite_ssr_import_0__.expect)(move.to).toBe(60); - (0,__vite_ssr_import_0__.expect)(move.isCapture).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("PromotionOverride='disabled': returns empty array (pawn cannot promote)", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 52); - session.insert(pawn, "PromotionOverride", "disabled"); - const moves = (0,__vite_ssr_import_5__.getPromotionMoves)(session, pawn); - (0,__vite_ssr_import_0__.expect)(moves).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("PromotionOverride='queen': returns only queen promotion move", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 52); - session.insert(pawn, "PromotionOverride", "queen"); - const moves = (0,__vite_ssr_import_5__.getPromotionMoves)(session, pawn); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(moves[0].promoteTo).toBe("queen"); - }); - (0,__vite_ssr_import_0__.it)("PromotionOverride='disabled' also suppresses capture-promotions", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 51); - insertPiece(session, 2, "rook", "black", 60); - session.insert(pawn, "PromotionOverride", "disabled"); - const moves = (0,__vite_ssr_import_5__.getPromotionMoves)(session, pawn); - (0,__vite_ssr_import_0__.expect)(moves).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("PromotionOverride='knight': capture-promotion returns only knight captures", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 51); - insertPiece(session, 2, "rook", "black", 60); - insertPiece(session, 3, "queen", "white", 59); - session.insert(pawn, "PromotionOverride", "knight"); - const moves = (0,__vite_ssr_import_5__.getPromotionMoves)(session, pawn); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(1); - const knightMove = moves[0]; - (0,__vite_ssr_import_0__.expect)(knightMove.promoteTo).toBe("knight"); - (0,__vite_ssr_import_0__.expect)(knightMove.isCapture).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("no PromotionOverride: returns all 4 standard promotion variants (baseline)", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 52); - const moves = (0,__vite_ssr_import_5__.getPromotionMoves)(session, pawn); - (0,__vite_ssr_import_0__.expect)(moves).toHaveLength(4); - const types = moves.map((m) => m.promoteTo).sort(); - (0,__vite_ssr_import_0__.expect)(types).toEqual(["bishop", "knight", "queen", "rook"]); - }); -}); -(0,__vite_ssr_import_0__.describe)("promotion-override — integration with applyPromotion", () => { - (0,__vite_ssr_import_0__.it)("PromotionOverride='bishop': promotes to bishop regardless of promoteTo arg", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 60); - session.insert(pawn, "PromotionOverride", "bishop"); - (0,__vite_ssr_import_5__.applyPromotion)(session, pawn, "queen"); - (0,__vite_ssr_import_0__.expect)(session.get(pawn, "PieceType")).toBe("bishop"); - }); - (0,__vite_ssr_import_0__.it)("PromotionOverride='rook': promotes to rook regardless of default promoteTo", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 60); - session.insert(pawn, "PromotionOverride", "rook"); - (0,__vite_ssr_import_5__.applyPromotion)(session, pawn); - (0,__vite_ssr_import_0__.expect)(session.get(pawn, "PieceType")).toBe("rook"); - }); - (0,__vite_ssr_import_0__.it)("PromotionOverride='disabled': falls back to promoteTo arg (pawn stays pawn only if not promoted)", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 60); - session.insert(pawn, "PromotionOverride", "disabled"); - (0,__vite_ssr_import_5__.applyPromotion)(session, pawn, "knight"); - (0,__vite_ssr_import_0__.expect)(session.get(pawn, "PieceType")).toBe("knight"); - }); - (0,__vite_ssr_import_0__.it)("no PromotionOverride: applyPromotion uses promoteTo arg normally", () => { - const session = setupSession(); - const pawn = insertPiece(session, 1, "pawn", "white", 60); - (0,__vite_ssr_import_5__.applyPromotion)(session, pawn, "rook"); - (0,__vite_ssr_import_0__.expect)(session.get(pawn, "PieceType")).toBe("rook"); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFJLE1BQU0sV0FBVyxDQUFDLEVBQUUsS0FBSyxNQUFNO0FBQUEsRUFDcEQsQ0FBQztBQUVELCtCQUFHLG9HQUFvRyxNQUFNO0FBSTNHLFVBQU0sVUFBVSxhQUFhO0FBQzdCLFVBQU0sT0FBTyxZQUFZLFNBQVMsR0FBRyxRQUFRLFNBQVMsRUFBRTtBQUN4RCxZQUFRLE9BQU8sTUFBTSxxQkFBcUIsVUFBVTtBQUVwRCw2Q0FBZSxTQUFTLE1BQU0sUUFBUTtBQUV0QyxxQ0FBTyxRQUFRLElBQUksTUFBTSxXQUFXLENBQUMsRUFBRSxLQUFLLFFBQVE7QUFBQSxFQUN0RCxDQUFDO0FBRUQsK0JBQUcsb0VBQW9FLE1BQU07QUFDM0UsVUFBTSxVQUFVLGFBQWE7QUFDN0IsVUFBTSxPQUFPLFlBQVksU0FBUyxHQUFHLFFBQVEsU0FBUyxFQUFFO0FBRXhELDZDQUFlLFNBQVMsTUFBTSxNQUFNO0FBRXBDLHFDQUFPLFFBQVEsSUFBSSxNQUFNLFdBQVcsQ0FBQyxFQUFFLEtBQUssTUFBTTtBQUFBLEVBQ3BELENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJwcm9tb3Rpb24tb3ZlcnJpZGUudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgaXQsIGV4cGVjdCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB7IFNlc3Npb24sIHR5cGUgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB7IE1PRElGSUVSX1JFR0lTVFJZIH0gZnJvbSBcIi4uL3JlZ2lzdHJ5LmpzXCI7XG5pbXBvcnQgXCIuL3Byb21vdGlvbi1vdmVycmlkZS5qc1wiO1xuaW1wb3J0IHsgUFJPTU9USU9OX09WRVJSSURFX0RFU0NSSVBUT1IgfSBmcm9tIFwiLi9wcm9tb3Rpb24tb3ZlcnJpZGUuanNcIjtcbmltcG9ydCB0eXBlIHsgUGllY2VUeXBlLCBQaWVjZUNvbG9yLCBTcXVhcmUgfSBmcm9tIFwiLi4vLi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgeyBnZXRQcm9tb3Rpb25Nb3ZlcywgYXBwbHlQcm9tb3Rpb24gfSBmcm9tIFwiLi4vLi4vcnVsZXMvcHJvbW90aW9uLmpzXCI7XG5cbi8vIOKUgOKUgOKUgCBIZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiBzZXR1cFNlc3Npb24oKTogU2Vzc2lvbiB7XG4gIHJldHVybiBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbn1cblxuZnVuY3Rpb24gaW5zZXJ0UGllY2UoXG4gIHNlc3Npb246IFNlc3Npb24sXG4gIGlkOiBudW1iZXIsXG4gIHR5cGU6IFBpZWNlVHlwZSxcbiAgY29sb3I6IFBpZWNlQ29sb3IsXG4gIHNxdWFyZTogU3F1YXJlLFxuKTogRW50aXR5SWQge1xuICBjb25zdCBlaWQgPSBpZCBhcyBFbnRpdHlJZDtcbiAgc2Vzc2lvbi5pbnNlcnQoZWlkLCBcIlBpZWNlVHlwZVwiLCB0eXBlKTtcbiAgc2Vzc2lvbi5pbnNlcnQoZWlkLCBcIkNvbG9yXCIsIGNvbG9yKTtcbiAgc2Vzc2lvbi5pbnNlcnQoZWlkLCBcIlBvc2l0aW9uXCIsIHNxdWFyZSk7XG4gIHJldHVybiBlaWQ7XG59XG5cbi8vIOKUgOKUgOKUgCBSZWdpc3RyeSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZGVzY3JpYmUoXCJwcm9tb3Rpb24tb3ZlcnJpZGUgZGVzY3JpcHRvciDigJQgcmVnaXN0cnlcIiwgKCkgPT4ge1xuICBpdChcInJlZ2lzdGVycyBpbiBNT0RJRklFUl9SRUdJU1RSWSB1bmRlciBrZXkgJ3Byb21vdGlvbi1vdmVycmlkZSdcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChNT0RJRklFUl9SRUdJU1RSWS5oYXMoXCJwcm9tb3Rpb24tb3ZlcnJpZGVcIikpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KE1PRElGSUVSX1JFR0lTVFJZLmdldChcInByb21vdGlvbi1vdmVycmlkZVwiKSkudG9CZShQUk9NT1RJT05fT1ZFUlJJREVfREVTQ1JJUFRPUik7XG4gIH0pO1xuXG4gIGl0KFwiaGFzIHRoZSBjb3JyZWN0IGlkLCBhdHRyTmFtZSwgYW5kIHVpRm9ybVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFBST01PVElPTl9PVkVSUklERV9ERVNDUklQVE9SLmlkKS50b0JlKFwicHJvbW90aW9uLW92ZXJyaWRlXCIpO1xuICAgIGV4cGVjdChQUk9NT1RJT05fT1ZFUlJJREVfREVTQ1JJUFRPUi5hdHRyTmFtZSkudG9CZShcIlByb21vdGlvbk92ZXJyaWRlXCIpO1xuICAgIGV4cGVjdChQUk9NT1RJT05fT1ZFUlJJREVfREVTQ1JJUFRPUi51aUZvcm0pLnRvQmUoXCJwcm9tb3Rpb24tdGFyZ2V0XCIpO1xuICAgIGV4cGVjdChQUk9NT1RJT05fT1ZFUlJJREVfREVTQ1JJUFRPUi5zdGFja2luZ1J1bGUpLnRvQmUoXCJwcmlvcml0eS13aW5zXCIpO1xuICB9KTtcbn0pO1xuXG4vLyDilIDilIDilIAgZGVzY3JpYmUoKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZGVzY3JpYmUoXCJwcm9tb3Rpb24tb3ZlcnJpZGUgZGVzY3JpcHRvciDigJQgZGVzY3JpYmUoKVwiLCAoKSA9PiB7XG4gIGl0KFwicmV0dXJucyAnQ2Fubm90IHByb21vdGUnIGZvciAnZGlzYWJsZWQnXCIsICgpID0+IHtcbiAgICBleHBlY3QoUFJPTU9USU9OX09WRVJSSURFX0RFU0NSSVBUT1IuZGVzY3JpYmUoXCJkaXNhYmxlZFwiKSkudG9CZShcIkNhbm5vdCBwcm9tb3RlXCIpO1xuICB9KTtcblxuICBpdChcInJldHVybnMgJ1Byb21vdGVzIHRvIHF1ZWVuJyBmb3IgJ3F1ZWVuJ1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFBST01PVElPTl9PVkVSUklERV9ERVNDUklQVE9SLmRlc2NyaWJlKFwicXVlZW5cIikpLnRvQmUoXCJQcm9tb3RlcyB0byBxdWVlblwiKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zICdQcm9tb3RlcyB0byByb29rJyBmb3IgJ3Jvb2snXCIsICgpID0+IHtcbiAgICBleHBlY3QoUFJPTU9USU9OX09WRVJSSURFX0RFU0NSSVBUT1IuZGVzY3JpYmUoXCJyb29rXCIpKS50b0JlKFwiUHJvbW90ZXMgdG8gcm9va1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zICdQcm9tb3RlcyB0byBiaXNob3AnIGZvciAnYmlzaG9wJ1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFBST01PVElPTl9PVkVSUklERV9ERVNDUklQVE9SLmRlc2NyaWJlKFwiYmlzaG9wXCIpKS50b0JlKFwiUHJvbW90ZXMgdG8gYmlzaG9wXCIpO1xuICB9KTtcblxuICBpdChcInJldHVybnMgJ1Byb21vdGVzIHRvIGtuaWdodCcgZm9yICdrbmlnaHQnXCIsICgpID0+IHtcbiAgICBleHBlY3QoUFJPTU9USU9OX09WRVJSSURFX0RFU0NSSVBUT1IuZGVzY3JpYmUoXCJrbmlnaHRcIikpLnRvQmUoXCJQcm9tb3RlcyB0byBrbmlnaHRcIik7XG4gIH0pO1xufSk7XG5cbi8vIOKUgOKUgOKUgCBhcHBseSgpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5kZXNjcmliZShcInByb21vdGlvbi1vdmVycmlkZSBkZXNjcmlwdG9yIOKAlCBhcHBseSgpXCIsICgpID0+IHtcbiAgaXQoXCJzZWVkcyBQcm9tb3Rpb25PdmVycmlkZT0nYmlzaG9wJyBmYWN0IG9uIHBpZWNlIGVudGl0eVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKCk7XG4gICAgY29uc3QgZWlkID0gc2Vzc2lvbi5uZXh0SWQoKTtcbiAgICBzZXNzaW9uLmluc2VydChlaWQsIFwiUGllY2VUeXBlXCIsIFwicGF3blwiKTtcblxuICAgIFBST01PVElPTl9PVkVSUklERV9ERVNDUklQVE9SLmFwcGx5KHNlc3Npb24sIGVpZCwgXCJiaXNob3BcIik7XG5cbiAgICBleHBlY3Qoc2Vzc2lvbi5jb250YWlucyhlaWQsIFwiUHJvbW90aW9uT3ZlcnJpZGVcIikpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KHNlc3Npb24uZ2V0KGVpZCwgXCJQcm9tb3Rpb25PdmVycmlkZVwiKSkudG9CZShcImJpc2hvcFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJzZWVkcyBQcm9tb3Rpb25PdmVycmlkZT0nZGlzYWJsZWQnIGZhY3Qgb24gcGllY2UgZW50aXR5XCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oKTtcbiAgICBjb25zdCBlaWQgPSBzZXNzaW9uLm5leHRJZCgpO1xuICAgIHNlc3Npb24uaW5zZXJ0KGVpZCwgXCJQaWVjZVR5cGVcIiwgXCJwYXduXCIpO1xuXG4gICAgUFJPTU9USU9OX09WRVJSSURFX0RFU0NSSVBUT1IuYXBwbHkoc2Vzc2lvbiwgZWlkLCBcImRpc2FibGVkXCIpO1xuXG4gICAgZXhwZWN0KHNlc3Npb24uZ2V0KGVpZCwgXCJQcm9tb3Rpb25PdmVycmlkZVwiKSkudG9CZShcImRpc2FibGVkXCIpO1xuICB9KTtcbn0pO1xuXG4vLyDilIDilIDilIAgdmFsdWVTY2hlbWEg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmRlc2NyaWJlKFwicHJvbW90aW9uLW92ZXJyaWRlIGRlc2NyaXB0b3Ig4oCUIHZhbHVlU2NoZW1hXCIsICgpID0+IHtcbiAgY29uc3Qgc2NoZW1hID0gUFJPTU9USU9OX09WRVJSSURFX0RFU0NSSVBUT1IudmFsdWVTY2hlbWE7XG5cbiAgaXQoXCJhY2NlcHRzIGFsbCA0IHByb21vdGlvbiBwaWVjZSB0eXBlc1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IHNjaGVtYS5wYXJzZShcInF1ZWVuXCIpKS5ub3QudG9UaHJvdygpO1xuICAgIGV4cGVjdCgoKSA9PiBzY2hlbWEucGFyc2UoXCJyb29rXCIpKS5ub3QudG9UaHJvdygpO1xuICAgIGV4cGVjdCgoKSA9PiBzY2hlbWEucGFyc2UoXCJiaXNob3BcIikpLm5vdC50b1Rocm93KCk7XG4gICAgZXhwZWN0KCgpID0+IHNjaGVtYS5wYXJzZShcImtuaWdodFwiKSkubm90LnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgaXQoXCJhY2NlcHRzICdkaXNhYmxlZCdcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBzY2hlbWEucGFyc2UoXCJkaXNhYmxlZFwiKSkubm90LnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzICdraW5nJyAobm90IGEgdmFsaWQgcHJvbW90aW9uIHRhcmdldClcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBzY2hlbWEucGFyc2UoXCJraW5nXCIpKS50b1Rocm93KCk7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyAncGF3bicgKGNhbm5vdCBwcm9tb3RlIHRvIHBhd24pXCIsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gc2NoZW1hLnBhcnNlKFwicGF3blwiKSkudG9UaHJvdygpO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgYXJiaXRyYXJ5IHN0cmluZ3NcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBzY2hlbWEucGFyc2UoXCJkcmFnb25cIikpLnRvVGhyb3coKTtcbiAgICBleHBlY3QoKCkgPT4gc2NoZW1hLnBhcnNlKFwiXCIpKS50b1Rocm93KCk7XG4gIH0pO1xufSk7XG5cbi8vIOKUgOKUgOKUgCBJbnRlZ3JhdGlvbjogZ2V0UHJvbW90aW9uTW92ZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmRlc2NyaWJlKFwicHJvbW90aW9uLW92ZXJyaWRlIOKAlCBpbnRlZ3JhdGlvbiB3aXRoIGdldFByb21vdGlvbk1vdmVzXCIsICgpID0+IHtcbiAgaXQoXCJQcm9tb3Rpb25PdmVycmlkZT0nYmlzaG9wJzogcmV0dXJucyBvbmx5IGJpc2hvcCBwcm9tb3Rpb24gbW92ZVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IHBhd24gPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCA1Mik7IC8vIGU3IOKGkiBlOFxuICAgIHNlc3Npb24uaW5zZXJ0KHBhd24sIFwiUHJvbW90aW9uT3ZlcnJpZGVcIiwgXCJiaXNob3BcIik7XG5cbiAgICBjb25zdCBtb3ZlcyA9IGdldFByb21vdGlvbk1vdmVzKHNlc3Npb24sIHBhd24pO1xuXG4gICAgZXhwZWN0KG1vdmVzKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgY29uc3QgbW92ZSA9IG1vdmVzWzBdITtcbiAgICBleHBlY3QobW92ZS5wcm9tb3RlVG8pLnRvQmUoXCJiaXNob3BcIik7XG4gICAgZXhwZWN0KG1vdmUudG8pLnRvQmUoNjApOyAvLyBlOFxuICAgIGV4cGVjdChtb3ZlLmlzQ2FwdHVyZSkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwiUHJvbW90aW9uT3ZlcnJpZGU9J2Rpc2FibGVkJzogcmV0dXJucyBlbXB0eSBhcnJheSAocGF3biBjYW5ub3QgcHJvbW90ZSlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZXR1cFNlc3Npb24oKTtcbiAgICBjb25zdCBwYXduID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJwYXduXCIsIFwid2hpdGVcIiwgNTIpOyAvLyBlN1xuICAgIHNlc3Npb24uaW5zZXJ0KHBhd24sIFwiUHJvbW90aW9uT3ZlcnJpZGVcIiwgXCJkaXNhYmxlZFwiKTtcblxuICAgIGNvbnN0IG1vdmVzID0gZ2V0UHJvbW90aW9uTW92ZXMoc2Vzc2lvbiwgcGF3bik7XG5cbiAgICBleHBlY3QobW92ZXMpLnRvRXF1YWwoW10pO1xuICB9KTtcblxuICBpdChcIlByb21vdGlvbk92ZXJyaWRlPSdxdWVlbic6IHJldHVybnMgb25seSBxdWVlbiBwcm9tb3Rpb24gbW92ZVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IHBhd24gPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCA1Mik7IC8vIGU3XG4gICAgc2Vzc2lvbi5pbnNlcnQocGF3biwgXCJQcm9tb3Rpb25PdmVycmlkZVwiLCBcInF1ZWVuXCIpO1xuXG4gICAgY29uc3QgbW92ZXMgPSBnZXRQcm9tb3Rpb25Nb3ZlcyhzZXNzaW9uLCBwYXduKTtcblxuICAgIGV4cGVjdChtb3ZlcykudG9IYXZlTGVuZ3RoKDEpO1xuICAgIGV4cGVjdChtb3Zlc1swXSEucHJvbW90ZVRvKS50b0JlKFwicXVlZW5cIik7XG4gIH0pO1xuXG4gIGl0KFwiUHJvbW90aW9uT3ZlcnJpZGU9J2Rpc2FibGVkJyBhbHNvIHN1cHByZXNzZXMgY2FwdHVyZS1wcm9tb3Rpb25zXCIsICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gc2V0dXBTZXNzaW9uKCk7XG4gICAgY29uc3QgcGF3biA9IGluc2VydFBpZWNlKHNlc3Npb24sIDEsIFwicGF3blwiLCBcIndoaXRlXCIsIDUxKTsgLy8gZDdcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAyLCBcInJvb2tcIiwgXCJibGFja1wiLCA2MCk7IC8vIGU4IOKAlCBjYXB0dXJhYmxlIGVuZW15XG4gICAgc2Vzc2lvbi5pbnNlcnQocGF3biwgXCJQcm9tb3Rpb25PdmVycmlkZVwiLCBcImRpc2FibGVkXCIpO1xuXG4gICAgY29uc3QgbW92ZXMgPSBnZXRQcm9tb3Rpb25Nb3ZlcyhzZXNzaW9uLCBwYXduKTtcblxuICAgIGV4cGVjdChtb3ZlcykudG9FcXVhbChbXSk7XG4gIH0pO1xuXG4gIGl0KFwiUHJvbW90aW9uT3ZlcnJpZGU9J2tuaWdodCc6IGNhcHR1cmUtcHJvbW90aW9uIHJldHVybnMgb25seSBrbmlnaHQgY2FwdHVyZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZXR1cFNlc3Npb24oKTtcbiAgICBjb25zdCBwYXduID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJwYXduXCIsIFwid2hpdGVcIiwgNTEpOyAvLyBkN1xuICAgIGluc2VydFBpZWNlKHNlc3Npb24sIDIsIFwicm9va1wiLCBcImJsYWNrXCIsIDYwKTsgLy8gZTgg4oCUIGNhcHR1cmFibGUgZW5lbXlcbiAgICBpbnNlcnRQaWVjZShzZXNzaW9uLCAzLCBcInF1ZWVuXCIsIFwid2hpdGVcIiwgNTkpOyAvLyBkOCDigJQgYWxseSBibG9ja3MgcHVzaFxuICAgIHNlc3Npb24uaW5zZXJ0KHBhd24sIFwiUHJvbW90aW9uT3ZlcnJpZGVcIiwgXCJrbmlnaHRcIik7XG5cbiAgICBjb25zdCBtb3ZlcyA9IGdldFByb21vdGlvbk1vdmVzKHNlc3Npb24sIHBhd24pO1xuXG4gICAgLy8gT25seSBjYXB0dXJlIHRvIGU4IHJlbWFpbnMgKGQ4IHB1c2ggYmxvY2tlZCk7IG92ZXJyaWRlIGxpbWl0cyB0byBrbmlnaHRcbiAgICBleHBlY3QobW92ZXMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICBjb25zdCBrbmlnaHRNb3ZlID0gbW92ZXNbMF0hO1xuICAgIGV4cGVjdChrbmlnaHRNb3ZlLnByb21vdGVUbykudG9CZShcImtuaWdodFwiKTtcbiAgICBleHBlY3Qoa25pZ2h0TW92ZS5pc0NhcHR1cmUpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwibm8gUHJvbW90aW9uT3ZlcnJpZGU6IHJldHVybnMgYWxsIDQgc3RhbmRhcmQgcHJvbW90aW9uIHZhcmlhbnRzIChiYXNlbGluZSlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZXR1cFNlc3Npb24oKTtcbiAgICBjb25zdCBwYXduID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJwYXduXCIsIFwid2hpdGVcIiwgNTIpOyAvLyBlN1xuXG4gICAgY29uc3QgbW92ZXMgPSBnZXRQcm9tb3Rpb25Nb3ZlcyhzZXNzaW9uLCBwYXduKTtcblxuICAgIGV4cGVjdChtb3ZlcykudG9IYXZlTGVuZ3RoKDQpO1xuICAgIGNvbnN0IHR5cGVzID0gbW92ZXMubWFwKChtKSA9PiBtLnByb21vdGVUbykuc29ydCgpO1xuICAgIGV4cGVjdCh0eXBlcykudG9FcXVhbChbXCJiaXNob3BcIiwgXCJrbmlnaHRcIiwgXCJxdWVlblwiLCBcInJvb2tcIl0pO1xuICB9KTtcbn0pO1xuXG4vLyDilIDilIDilIAgSW50ZWdyYXRpb246IGFwcGx5UHJvbW90aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5kZXNjcmliZShcInByb21vdGlvbi1vdmVycmlkZSDigJQgaW50ZWdyYXRpb24gd2l0aCBhcHBseVByb21vdGlvblwiLCAoKSA9PiB7XG4gIGl0KFwiUHJvbW90aW9uT3ZlcnJpZGU9J2Jpc2hvcCc6IHByb21vdGVzIHRvIGJpc2hvcCByZWdhcmRsZXNzIG9mIHByb21vdGVUbyBhcmdcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZXR1cFNlc3Npb24oKTtcbiAgICBjb25zdCBwYXduID0gaW5zZXJ0UGllY2Uoc2Vzc2lvbiwgMSwgXCJwYXduXCIsIFwid2hpdGVcIiwgNjApO1xuICAgIHNlc3Npb24uaW5zZXJ0KHBhd24sIFwiUHJvbW90aW9uT3ZlcnJpZGVcIiwgXCJiaXNob3BcIik7XG5cbiAgICBhcHBseVByb21vdGlvbihzZXNzaW9uLCBwYXduLCBcInF1ZWVuXCIpOyAvLyBjYWxsZXIgcmVxdWVzdHMgcXVlZW4sIG92ZXJyaWRlIHdpbnNcblxuICAgIGV4cGVjdChzZXNzaW9uLmdldChwYXduLCBcIlBpZWNlVHlwZVwiKSkudG9CZShcImJpc2hvcFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJQcm9tb3Rpb25PdmVycmlkZT0ncm9vayc6IHByb21vdGVzIHRvIHJvb2sgcmVnYXJkbGVzcyBvZiBkZWZhdWx0IHByb21vdGVUb1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IHBhd24gPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCA2MCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQocGF3biwgXCJQcm9tb3Rpb25PdmVycmlkZVwiLCBcInJvb2tcIik7XG5cbiAgICBhcHBseVByb21vdGlvbihzZXNzaW9uLCBwYXduKTsgLy8gbm8gcHJvbW90ZVRvIGFyZyDigJQgZGVmYXVsdCBpcyBxdWVlbiwgb3ZlcnJpZGUgd2luc1xuXG4gICAgZXhwZWN0KHNlc3Npb24uZ2V0KHBhd24sIFwiUGllY2VUeXBlXCIpKS50b0JlKFwicm9va1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJQcm9tb3Rpb25PdmVycmlkZT0nZGlzYWJsZWQnOiBmYWxscyBiYWNrIHRvIHByb21vdGVUbyBhcmcgKHBhd24gc3RheXMgcGF3biBvbmx5IGlmIG5vdCBwcm9tb3RlZClcIiwgKCkgPT4ge1xuICAgIC8vIFdoZW4gb3ZlcnJpZGUgaXMgXCJkaXNhYmxlZFwiLCBubyBwcm9tb3Rpb24gbW92ZXMgYXJlIGdlbmVyYXRlZCBzb1xuICAgIC8vIGFwcGx5UHJvbW90aW9uIHNob3VsZG4ndCBiZSBjYWxsZWQuIElmIGl0IGlzIGNhbGxlZCBhbnl3YXksIGl0IGZhbGxzXG4gICAgLy8gYmFjayB0byB0aGUgY2FsbGVyJ3MgcHJvbW90ZVRvIGFyZyAobm9ybWFsIGJlaGF2aW91cikuXG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IHBhd24gPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCA2MCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQocGF3biwgXCJQcm9tb3Rpb25PdmVycmlkZVwiLCBcImRpc2FibGVkXCIpO1xuXG4gICAgYXBwbHlQcm9tb3Rpb24oc2Vzc2lvbiwgcGF3biwgXCJrbmlnaHRcIik7XG5cbiAgICBleHBlY3Qoc2Vzc2lvbi5nZXQocGF3biwgXCJQaWVjZVR5cGVcIikpLnRvQmUoXCJrbmlnaHRcIik7XG4gIH0pO1xuXG4gIGl0KFwibm8gUHJvbW90aW9uT3ZlcnJpZGU6IGFwcGx5UHJvbW90aW9uIHVzZXMgcHJvbW90ZVRvIGFyZyBub3JtYWxseVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNldHVwU2Vzc2lvbigpO1xuICAgIGNvbnN0IHBhd24gPSBpbnNlcnRQaWVjZShzZXNzaW9uLCAxLCBcInBhd25cIiwgXCJ3aGl0ZVwiLCA2MCk7XG5cbiAgICBhcHBseVByb21vdGlvbihzZXNzaW9uLCBwYXduLCBcInJvb2tcIik7XG5cbiAgICBleHBlY3Qoc2Vzc2lvbi5nZXQocGF3biwgXCJQaWVjZVR5cGVcIikpLnRvQmUoXCJyb29rXCIpO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL2NoZXNzL3NyYy9tb2RpZmllcnMvZGVzY3JpcHRvcnMvcHJvbW90aW9uLW92ZXJyaWRlLnRlc3QudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/f3e84aeded298552fe8290ed641cd3e76dd8094d b/7xOfJqsDU787fe61oSCq1/web/f3e84aeded298552fe8290ed641cd3e76dd8094d deleted file mode 100644 index e0ff0f7..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/f3e84aeded298552fe8290ed641cd3e76dd8094d +++ /dev/null @@ -1,5 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "default", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_export_default__ } catch {} }}); -const __vite_ssr_export_default__ = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%20width='45'%20height='45'%3e%3cg%20style='opacity:1;%20fill:none;%20fill-rule:evenodd;%20fill-opacity:1;%20stroke:%23000000;%20stroke-width:1.5;%20stroke-linecap:round;%20stroke-linejoin:round;%20stroke-miterlimit:4;%20stroke-dasharray:none;%20stroke-opacity:1;'%20transform='translate(0,0.6)'%3e%3cg%20style='fill:%23ffffff;%20stroke:%23000000;%20stroke-linecap:butt;'%3e%3cpath%20d='M%209,36%20C%2012.39,35.03%2019.11,36.43%2022.5,34%20C%2025.89,36.43%2032.61,35.03%2036,36%20C%2036,36%2037.65,36.54%2039,38%20C%2038.32,38.97%2037.35,38.99%2036,38.5%20C%2032.61,37.53%2025.89,38.96%2022.5,37.5%20C%2019.11,38.96%2012.39,37.53%209,38.5%20C%207.65,38.99%206.68,38.97%206,38%20C%207.35,36.54%209,36%209,36%20z'/%3e%3cpath%20d='M%2015,32%20C%2017.5,34.5%2027.5,34.5%2030,32%20C%2030.5,30.5%2030,30%2030,30%20C%2030,27.5%2027.5,26%2027.5,26%20C%2033,24.5%2033.5,14.5%2022.5,10.5%20C%2011.5,14.5%2012,24.5%2017.5,26%20C%2017.5,26%2015,27.5%2015,30%20C%2015,30%2014.5,30.5%2015,32%20z'/%3e%3cpath%20d='M%2025%208%20A%202.5%202.5%200%201%201%2020,8%20A%202.5%202.5%200%201%201%2025%208%20z'/%3e%3c/g%3e%3cpath%20d='M%2017.5,26%20L%2027.5,26%20M%2015,30%20L%2030,30%20M%2022.5,15.5%20L%2022.5,20.5%20M%2020,18%20L%2025,18'%20style='fill:none;%20stroke:%23000000;%20stroke-linejoin:miter;'/%3e%3c/g%3e%3c/svg%3e" - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndoaXRlLWJpc2hvcC5zdmciXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjP3htbCUyMHZlcnNpb249JzEuMCclMjBlbmNvZGluZz0nVVRGLTgnJTIwc3RhbmRhbG9uZT0nbm8nPyUzZSUzYyFET0NUWVBFJTIwc3ZnJTIwUFVCTElDJTIwJy0vL1czQy8vRFREJTIwU1ZHJTIwMS4xLy9FTiclMjAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJyUzZSUzY3N2ZyUyMHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclMjB2ZXJzaW9uPScxLjEnJTIwd2lkdGg9JzQ1JyUyMGhlaWdodD0nNDUnJTNlJTNjZyUyMHN0eWxlPSdvcGFjaXR5OjE7JTIwZmlsbDpub25lOyUyMGZpbGwtcnVsZTpldmVub2RkOyUyMGZpbGwtb3BhY2l0eToxOyUyMHN0cm9rZTolMjMwMDAwMDA7JTIwc3Ryb2tlLXdpZHRoOjEuNTslMjBzdHJva2UtbGluZWNhcDpyb3VuZDslMjBzdHJva2UtbGluZWpvaW46cm91bmQ7JTIwc3Ryb2tlLW1pdGVybGltaXQ6NDslMjBzdHJva2UtZGFzaGFycmF5Om5vbmU7JTIwc3Ryb2tlLW9wYWNpdHk6MTsnJTIwdHJhbnNmb3JtPSd0cmFuc2xhdGUoMCwwLjYpJyUzZSUzY2clMjBzdHlsZT0nZmlsbDolMjNmZmZmZmY7JTIwc3Ryb2tlOiUyMzAwMDAwMDslMjBzdHJva2UtbGluZWNhcDpidXR0OyclM2UlM2NwYXRoJTIwZD0nTSUyMDksMzYlMjBDJTIwMTIuMzksMzUuMDMlMjAxOS4xMSwzNi40MyUyMDIyLjUsMzQlMjBDJTIwMjUuODksMzYuNDMlMjAzMi42MSwzNS4wMyUyMDM2LDM2JTIwQyUyMDM2LDM2JTIwMzcuNjUsMzYuNTQlMjAzOSwzOCUyMEMlMjAzOC4zMiwzOC45NyUyMDM3LjM1LDM4Ljk5JTIwMzYsMzguNSUyMEMlMjAzMi42MSwzNy41MyUyMDI1Ljg5LDM4Ljk2JTIwMjIuNSwzNy41JTIwQyUyMDE5LjExLDM4Ljk2JTIwMTIuMzksMzcuNTMlMjA5LDM4LjUlMjBDJTIwNy42NSwzOC45OSUyMDYuNjgsMzguOTclMjA2LDM4JTIwQyUyMDcuMzUsMzYuNTQlMjA5LDM2JTIwOSwzNiUyMHonLyUzZSUzY3BhdGglMjBkPSdNJTIwMTUsMzIlMjBDJTIwMTcuNSwzNC41JTIwMjcuNSwzNC41JTIwMzAsMzIlMjBDJTIwMzAuNSwzMC41JTIwMzAsMzAlMjAzMCwzMCUyMEMlMjAzMCwyNy41JTIwMjcuNSwyNiUyMDI3LjUsMjYlMjBDJTIwMzMsMjQuNSUyMDMzLjUsMTQuNSUyMDIyLjUsMTAuNSUyMEMlMjAxMS41LDE0LjUlMjAxMiwyNC41JTIwMTcuNSwyNiUyMEMlMjAxNy41LDI2JTIwMTUsMjcuNSUyMDE1LDMwJTIwQyUyMDE1LDMwJTIwMTQuNSwzMC41JTIwMTUsMzIlMjB6Jy8lM2UlM2NwYXRoJTIwZD0nTSUyMDI1JTIwOCUyMEElMjAyLjUlMjAyLjUlMjAwJTIwMSUyMDElMjAyMCw4JTIwQSUyMDIuNSUyMDIuNSUyMDAlMjAxJTIwMSUyMDI1JTIwOCUyMHonLyUzZSUzYy9nJTNlJTNjcGF0aCUyMGQ9J00lMjAxNy41LDI2JTIwTCUyMDI3LjUsMjYlMjBNJTIwMTUsMzAlMjBMJTIwMzAsMzAlMjBNJTIwMjIuNSwxNS41JTIwTCUyMDIyLjUsMjAuNSUyME0lMjAyMCwxOCUyMEwlMjAyNSwxOCclMjBzdHlsZT0nZmlsbDpub25lOyUyMHN0cm9rZTolMjMwMDAwMDA7JTIwc3Ryb2tlLWxpbmVqb2luOm1pdGVyOycvJTNlJTNjL2clM2UlM2Mvc3ZnJTNlXCIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLG1DQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFIn0= diff --git a/7xOfJqsDU787fe61oSCq1/web/f71fcd25eb25ccdad3d46df42c418af0712c7eab b/7xOfJqsDU787fe61oSCq1/web/f71fcd25eb25ccdad3d46df42c418af0712c7eab deleted file mode 100644 index cb5f3ce..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/f71fcd25eb25ccdad3d46df42c418af0712c7eab +++ /dev/null @@ -1,5 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "default", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_export_default__ } catch {} }}); -const __vite_ssr_export_default__ = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%20width='45'%20height='45'%3e%3cg%20style='opacity:1;%20fill:%23ffffff;%20fill-opacity:1;%20fill-rule:evenodd;%20stroke:%23000000;%20stroke-width:1.5;%20stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;%20stroke-dasharray:none;%20stroke-opacity:1;'%20transform='translate(0,0.3)'%3e%3cpath%20d='M%209,39%20L%2036,39%20L%2036,36%20L%209,36%20L%209,39%20z%20'%20style='stroke-linecap:butt;'%20/%3e%3cpath%20d='M%2012,36%20L%2012,32%20L%2033,32%20L%2033,36%20L%2012,36%20z%20'%20style='stroke-linecap:butt;'%20/%3e%3cpath%20d='M%2011,14%20L%2011,9%20L%2015,9%20L%2015,11%20L%2020,11%20L%2020,9%20L%2025,9%20L%2025,11%20L%2030,11%20L%2030,9%20L%2034,9%20L%2034,14'%20style='stroke-linecap:butt;'%20/%3e%3cpath%20d='M%2034,14%20L%2031,17%20L%2014,17%20L%2011,14'%20/%3e%3cpath%20d='M%2031,17%20L%2031,29.5%20L%2014,29.5%20L%2014,17'%20style='stroke-linecap:butt;%20stroke-linejoin:miter;'%20/%3e%3cpath%20d='M%2031,29.5%20L%2032.5,32%20L%2012.5,32%20L%2014,29.5'%20/%3e%3cpath%20d='M%2011,14%20L%2034,14'%20style='fill:none;%20stroke:%23000000;%20stroke-linejoin:miter;'%20/%3e%3c/g%3e%3c/svg%3e" - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndoaXRlLXJvb2suc3ZnIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzYz94bWwlMjB2ZXJzaW9uPScxLjAnJTIwZW5jb2Rpbmc9J1VURi04JyUyMHN0YW5kYWxvbmU9J25vJz8lM2UlM2MhRE9DVFlQRSUyMHN2ZyUyMFBVQkxJQyUyMCctLy9XM0MvL0RURCUyMFNWRyUyMDEuMS8vRU4nJTIwJ2h0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCclM2UlM2NzdmclMjB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTIwdmVyc2lvbj0nMS4xJyUyMHdpZHRoPSc0NSclMjBoZWlnaHQ9JzQ1JyUzZSUzY2clMjBzdHlsZT0nb3BhY2l0eToxOyUyMGZpbGw6JTIzZmZmZmZmOyUyMGZpbGwtb3BhY2l0eToxOyUyMGZpbGwtcnVsZTpldmVub2RkOyUyMHN0cm9rZTolMjMwMDAwMDA7JTIwc3Ryb2tlLXdpZHRoOjEuNTslMjBzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDslMjBzdHJva2UtZGFzaGFycmF5Om5vbmU7JTIwc3Ryb2tlLW9wYWNpdHk6MTsnJTIwdHJhbnNmb3JtPSd0cmFuc2xhdGUoMCwwLjMpJyUzZSUzY3BhdGglMjBkPSdNJTIwOSwzOSUyMEwlMjAzNiwzOSUyMEwlMjAzNiwzNiUyMEwlMjA5LDM2JTIwTCUyMDksMzklMjB6JTIwJyUyMHN0eWxlPSdzdHJva2UtbGluZWNhcDpidXR0OyclMjAvJTNlJTNjcGF0aCUyMGQ9J00lMjAxMiwzNiUyMEwlMjAxMiwzMiUyMEwlMjAzMywzMiUyMEwlMjAzMywzNiUyMEwlMjAxMiwzNiUyMHolMjAnJTIwc3R5bGU9J3N0cm9rZS1saW5lY2FwOmJ1dHQ7JyUyMC8lM2UlM2NwYXRoJTIwZD0nTSUyMDExLDE0JTIwTCUyMDExLDklMjBMJTIwMTUsOSUyMEwlMjAxNSwxMSUyMEwlMjAyMCwxMSUyMEwlMjAyMCw5JTIwTCUyMDI1LDklMjBMJTIwMjUsMTElMjBMJTIwMzAsMTElMjBMJTIwMzAsOSUyMEwlMjAzNCw5JTIwTCUyMDM0LDE0JyUyMHN0eWxlPSdzdHJva2UtbGluZWNhcDpidXR0OyclMjAvJTNlJTNjcGF0aCUyMGQ9J00lMjAzNCwxNCUyMEwlMjAzMSwxNyUyMEwlMjAxNCwxNyUyMEwlMjAxMSwxNCclMjAvJTNlJTNjcGF0aCUyMGQ9J00lMjAzMSwxNyUyMEwlMjAzMSwyOS41JTIwTCUyMDE0LDI5LjUlMjBMJTIwMTQsMTcnJTIwc3R5bGU9J3N0cm9rZS1saW5lY2FwOmJ1dHQ7JTIwc3Ryb2tlLWxpbmVqb2luOm1pdGVyOyclMjAvJTNlJTNjcGF0aCUyMGQ9J00lMjAzMSwyOS41JTIwTCUyMDMyLjUsMzIlMjBMJTIwMTIuNSwzMiUyMEwlMjAxNCwyOS41JyUyMC8lM2UlM2NwYXRoJTIwZD0nTSUyMDExLDE0JTIwTCUyMDM0LDE0JyUyMHN0eWxlPSdmaWxsOm5vbmU7JTIwc3Ryb2tlOiUyMzAwMDAwMDslMjBzdHJva2UtbGluZWpvaW46bWl0ZXI7JyUyMC8lM2UlM2MvZyUzZSUzYy9zdmclM2VcIiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsbUNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/f8015fa350709a3fe41f99101571ac0a67fa8139 b/7xOfJqsDU787fe61oSCq1/web/f8015fa350709a3fe41f99101571ac0a67fa8139 deleted file mode 100644 index 8981547..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/f8015fa350709a3fe41f99101571ac0a67fa8139 +++ /dev/null @@ -1,87 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/node_modules/.bun/vitest@3.2.4+a19ec937a9d7f633/node_modules/vitest/dist/index.js", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/presets/index.ts"); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/engine.ts", {"importedNames":["ChessEngine"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/coord.ts", {"importedNames":["algebraicToSquare"]}); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/presets/registry.ts", {"importedNames":["PRESET_REGISTRY"]}); -(0,__vite_ssr_import_0__.describe)("ChessEngine.moveLog", () => { - (0,__vite_ssr_import_0__.it)("empty at start", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - (0,__vite_ssr_import_0__.expect)(engine.moveLog).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("one record appended per applyMove", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e2"), (0,__vite_ssr_import_3__.algebraicToSquare)("e4"))); - (0,__vite_ssr_import_0__.expect)(engine.moveLog).toHaveLength(1); - const record = engine.moveLog[0]; - (0,__vite_ssr_import_0__.expect)(record.from).toBe((0,__vite_ssr_import_3__.algebraicToSquare)("e2")); - (0,__vite_ssr_import_0__.expect)(record.to).toBe((0,__vite_ssr_import_3__.algebraicToSquare)("e4")); - (0,__vite_ssr_import_0__.expect)(record.mover).toBe("white"); - (0,__vite_ssr_import_0__.expect)(record.movingType).toBe("pawn"); - (0,__vite_ssr_import_0__.expect)(record.capturedId).toBeNull(); - (0,__vite_ssr_import_0__.expect)(record.capturedType).toBeNull(); - (0,__vite_ssr_import_0__.expect)(record.isCheck).toBe(false); - (0,__vite_ssr_import_0__.expect)(record.terminal).toBe(false); - (0,__vite_ssr_import_0__.expect)(record.isEnPassant).toBe(false); - (0,__vite_ssr_import_0__.expect)(record.isCastling).toBe(false); - (0,__vite_ssr_import_0__.expect)(record.promotion).toBeNull(); - (0,__vite_ssr_import_0__.expect)(record.presetEffects).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("captures populate capturedId + capturedType from PRE-MOVE state", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e2"), (0,__vite_ssr_import_3__.algebraicToSquare)("e4"))); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("d7"), (0,__vite_ssr_import_3__.algebraicToSquare)("d5"))); - const blackPawnOnD5 = engine.session.allFacts().find((f) => f.attr === "Position" && f.value === (0,__vite_ssr_import_3__.algebraicToSquare)("d5")); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e4"), (0,__vite_ssr_import_3__.algebraicToSquare)("d5"))); - const capture = engine.moveLog[2]; - (0,__vite_ssr_import_0__.expect)(capture.capturedId).toBe(blackPawnOnD5.id); - (0,__vite_ssr_import_0__.expect)(capture.capturedType).toBe("pawn"); - }); - (0,__vite_ssr_import_0__.it)("isCheck flips true when a move delivers check", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("f2"), (0,__vite_ssr_import_3__.algebraicToSquare)("f3"))); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e7"), (0,__vite_ssr_import_3__.algebraicToSquare)("e5"))); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("g2"), (0,__vite_ssr_import_3__.algebraicToSquare)("g4"))); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("d8"), (0,__vite_ssr_import_3__.algebraicToSquare)("h4"))); - const mate = engine.moveLog[3]; - (0,__vite_ssr_import_0__.expect)(mate.isCheck).toBe(true); - (0,__vite_ssr_import_0__.expect)(mate.terminal).toBe(true); - }); -}); -(0,__vite_ssr_import_0__.describe)("describeMoveEffect hook", () => { - const testPresetId = "test-describe-effect-pawn-reporter"; - __vite_ssr_import_4__.PRESET_REGISTRY.register({ - id: testPresetId, - name: "Pawn Reporter", - description: "Test helper — describes pawn moves.", - incompatibleWith: [], - requires: [], - describeMoveEffect(ctx) { - if (ctx.movingType !== "pawn") return void 0; - return `${ctx.mover} pawn pushed`; - } - }); - (0,__vite_ssr_import_0__.it)("contributes an entry to presetEffects when returning a string", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: testPresetId, scope: "both", turnsRemaining: null } - ]); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("e2"), (0,__vite_ssr_import_3__.algebraicToSquare)("e4"))); - const record = engine.moveLog[0]; - (0,__vite_ssr_import_0__.expect)(record.presetEffects).toContainEqual({ - presetId: testPresetId, - summary: "white pawn pushed" - }); - }); - (0,__vite_ssr_import_0__.it)("omits an entry when returning undefined", () => { - const engine = new __vite_ssr_import_2__.ChessEngine(); - engine.setActivePresets([ - { id: testPresetId, scope: "both", turnsRemaining: null } - ]); - engine.applyMove(engine.findMove((0,__vite_ssr_import_3__.algebraicToSquare)("g1"), (0,__vite_ssr_import_3__.algebraicToSquare)("f3"))); - const record = engine.moveLog[0]; - (0,__vite_ssr_import_0__.expect)(record.presetEffects).toEqual([]); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFBLElBQ3ZCLElBQUk7QUFBQSxJQUNKLE1BQU07QUFBQSxJQUNOLGFBQWE7QUFBQSxJQUNiLGtCQUFrQixDQUFDO0FBQUEsSUFDbkIsVUFBVSxDQUFDO0FBQUEsSUFDWCxtQkFBbUIsS0FBSztBQUN0QixVQUFJLElBQUksZUFBZSxPQUFRLFFBQU87QUFDdEMsYUFBTyxHQUFHLElBQUksS0FBSztBQUFBLElBQ3JCO0FBQUEsRUFDRixDQUFDO0FBRUQsK0JBQUcsaUVBQWlFLE1BQU07QUFDeEUsVUFBTSxTQUFTLElBQUksa0NBQVk7QUFDL0IsV0FBTyxpQkFBaUI7QUFBQSxNQUN0QixFQUFFLElBQUksY0FBYyxPQUFPLFFBQVEsZ0JBQWdCLEtBQUs7QUFBQSxJQUMxRCxDQUFDO0FBQ0QsV0FBTyxVQUFVLE9BQU8sWUFBUyx5Q0FBa0IsSUFBSSxNQUFHLHlDQUFrQixJQUFJLENBQUMsQ0FBRTtBQUNuRixVQUFNLFNBQVMsT0FBTyxRQUFRLENBQUM7QUFDL0IscUNBQU8sT0FBTyxhQUFhLEVBQUUsZUFBZTtBQUFBLE1BQzFDLFVBQVU7QUFBQSxNQUNWLFNBQVM7QUFBQSxJQUNYLENBQUM7QUFBQSxFQUNILENBQUM7QUFFRCwrQkFBRywyQ0FBMkMsTUFBTTtBQUNsRCxVQUFNLFNBQVMsSUFBSSxrQ0FBWTtBQUMvQixXQUFPLGlCQUFpQjtBQUFBLE1BQ3RCLEVBQUUsSUFBSSxjQUFjLE9BQU8sUUFBUSxnQkFBZ0IsS0FBSztBQUFBLElBQzFELENBQUM7QUFFRCxXQUFPLFVBQVUsT0FBTyxZQUFTLHlDQUFrQixJQUFJLE1BQUcseUNBQWtCLElBQUksQ0FBQyxDQUFFO0FBQ25GLFVBQU0sU0FBUyxPQUFPLFFBQVEsQ0FBQztBQUMvQixxQ0FBTyxPQUFPLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUFBLEVBQ3pDLENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJtb3ZlLWxvZy50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGVzdHMgZm9yIGBDaGVzc0VuZ2luZS5tb3ZlTG9nYCArIGBkZXNjcmliZU1vdmVFZmZlY3RgIGhvb2suXG4gKi9cbmltcG9ydCB7IGRlc2NyaWJlLCBpdCwgZXhwZWN0IH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgQ2hlc3NFbmdpbmUgfSBmcm9tIFwiLi4vZW5naW5lLmpzXCI7XG5pbXBvcnQgeyBhbGdlYnJhaWNUb1NxdWFyZSB9IGZyb20gXCIuLi9jb29yZC5qc1wiO1xuaW1wb3J0IHsgUFJFU0VUX1JFR0lTVFJZIH0gZnJvbSBcIi4vcmVnaXN0cnkuanNcIjtcblxuZGVzY3JpYmUoXCJDaGVzc0VuZ2luZS5tb3ZlTG9nXCIsICgpID0+IHtcbiAgaXQoXCJlbXB0eSBhdCBzdGFydFwiLCAoKSA9PiB7XG4gICAgY29uc3QgZW5naW5lID0gbmV3IENoZXNzRW5naW5lKCk7XG4gICAgZXhwZWN0KGVuZ2luZS5tb3ZlTG9nKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xuXG4gIGl0KFwib25lIHJlY29yZCBhcHBlbmRlZCBwZXIgYXBwbHlNb3ZlXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBlbmdpbmUuYXBwbHlNb3ZlKGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImUyXCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImU0XCIpKSEpO1xuICAgIGV4cGVjdChlbmdpbmUubW92ZUxvZykudG9IYXZlTGVuZ3RoKDEpO1xuICAgIGNvbnN0IHJlY29yZCA9IGVuZ2luZS5tb3ZlTG9nWzBdITtcbiAgICBleHBlY3QocmVjb3JkLmZyb20pLnRvQmUoYWxnZWJyYWljVG9TcXVhcmUoXCJlMlwiKSk7XG4gICAgZXhwZWN0KHJlY29yZC50bykudG9CZShhbGdlYnJhaWNUb1NxdWFyZShcImU0XCIpKTtcbiAgICBleHBlY3QocmVjb3JkLm1vdmVyKS50b0JlKFwid2hpdGVcIik7XG4gICAgZXhwZWN0KHJlY29yZC5tb3ZpbmdUeXBlKS50b0JlKFwicGF3blwiKTtcbiAgICBleHBlY3QocmVjb3JkLmNhcHR1cmVkSWQpLnRvQmVOdWxsKCk7XG4gICAgZXhwZWN0KHJlY29yZC5jYXB0dXJlZFR5cGUpLnRvQmVOdWxsKCk7XG4gICAgZXhwZWN0KHJlY29yZC5pc0NoZWNrKS50b0JlKGZhbHNlKTtcbiAgICBleHBlY3QocmVjb3JkLnRlcm1pbmFsKS50b0JlKGZhbHNlKTtcbiAgICBleHBlY3QocmVjb3JkLmlzRW5QYXNzYW50KS50b0JlKGZhbHNlKTtcbiAgICBleHBlY3QocmVjb3JkLmlzQ2FzdGxpbmcpLnRvQmUoZmFsc2UpO1xuICAgIGV4cGVjdChyZWNvcmQucHJvbW90aW9uKS50b0JlTnVsbCgpO1xuICAgIGV4cGVjdChyZWNvcmQucHJlc2V0RWZmZWN0cykudG9FcXVhbChbXSk7XG4gIH0pO1xuXG4gIGl0KFwiY2FwdHVyZXMgcG9wdWxhdGUgY2FwdHVyZWRJZCArIGNhcHR1cmVkVHlwZSBmcm9tIFBSRS1NT1ZFIHN0YXRlXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBlbmdpbmUuYXBwbHlNb3ZlKGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImUyXCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImU0XCIpKSEpO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZDdcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiZDVcIikpISk7XG4gICAgY29uc3QgYmxhY2tQYXduT25ENSA9IGVuZ2luZS5zZXNzaW9uXG4gICAgICAuYWxsRmFjdHMoKVxuICAgICAgLmZpbmQoKGYpID0+IGYuYXR0ciA9PT0gXCJQb3NpdGlvblwiICYmIGYudmFsdWUgPT09IGFsZ2VicmFpY1RvU3F1YXJlKFwiZDVcIikpO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZTRcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiZDVcIikpISk7XG5cbiAgICBjb25zdCBjYXB0dXJlID0gZW5naW5lLm1vdmVMb2dbMl0hO1xuICAgIGV4cGVjdChjYXB0dXJlLmNhcHR1cmVkSWQpLnRvQmUoYmxhY2tQYXduT25ENSEuaWQpO1xuICAgIGV4cGVjdChjYXB0dXJlLmNhcHR1cmVkVHlwZSkudG9CZShcInBhd25cIik7XG4gIH0pO1xuXG4gIGl0KFwiaXNDaGVjayBmbGlwcyB0cnVlIHdoZW4gYSBtb3ZlIGRlbGl2ZXJzIGNoZWNrXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICAvLyBGb29sJ3MgTWF0ZTogMS4gZjMgZTUgMi4gZzQgUWg0IyDihpIgb3Bwb25lbnQgKHdoaXRlKSBpbiBjaGVjayArIG1hdGUuXG4gICAgZW5naW5lLmFwcGx5TW92ZShlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJmMlwiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJmM1wiKSkhKTtcbiAgICBlbmdpbmUuYXBwbHlNb3ZlKGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImU3XCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImU1XCIpKSEpO1xuICAgIGVuZ2luZS5hcHBseU1vdmUoZW5naW5lLmZpbmRNb3ZlKGFsZ2VicmFpY1RvU3F1YXJlKFwiZzJcIiksIGFsZ2VicmFpY1RvU3F1YXJlKFwiZzRcIikpISk7XG4gICAgZW5naW5lLmFwcGx5TW92ZShlbmdpbmUuZmluZE1vdmUoYWxnZWJyYWljVG9TcXVhcmUoXCJkOFwiKSwgYWxnZWJyYWljVG9TcXVhcmUoXCJoNFwiKSkhKTtcblxuICAgIGNvbnN0IG1hdGUgPSBlbmdpbmUubW92ZUxvZ1szXSE7XG4gICAgZXhwZWN0KG1hdGUuaXNDaGVjaykudG9CZSh0cnVlKTtcbiAgICBleHBlY3QobWF0ZS50ZXJtaW5hbCkudG9CZSh0cnVlKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJkZXNjcmliZU1vdmVFZmZlY3QgaG9va1wiLCAoKSA9PiB7XG4gIC8vIFJlZ2lzdGVyIGEgdGhyb3dhd2F5IHByZXNldCB0aGF0IGNvbnRyaWJ1dGVzIGEgZGVzY3JpcHRpb24gZm9yXG4gIC8vIHBhd24gbW92ZXMsIHRoZW4gdW5yZWdpc3RlciB0aGUgc2lkZS1lZmZlY3QgYnkgc3dhcHBpbmcgaXQgZm9yXG4gIC8vIHRoZSByZWFsIG9uZS4gU2luY2UgUFJFU0VUX1JFR0lTVFJZLnJlZ2lzdGVyIG92ZXJ3cml0ZXMgYnkgaWQsIHdlXG4gIC8vIHVzZSBhIGZyZXNoIGlkIHRvIGF2b2lkIGRpc3R1cmJpbmcgb3RoZXIgdGVzdHMuXG4gIGNvbnN0IHRlc3RQcmVzZXRJZCA9IFwidGVzdC1kZXNjcmliZS1lZmZlY3QtcGF3bi1yZXBvcnRlclwiO1xuXG4gIFBSRVNFVF9SRUdJU1RSWS5yZWdpc3Rlcih7XG4gICAgaWQ6IHRlc3RQcmVzZXRJZCxcbiAgICBuYW1lOiBcIlBhd24gUmVwb3J0ZXJcIixcbiAgICBkZXNjcmlwdGlvbjogXCJUZXN0IGhlbHBlciDigJQgZGVzY3JpYmVzIHBhd24gbW92ZXMuXCIsXG4gICAgaW5jb21wYXRpYmxlV2l0aDogW10sXG4gICAgcmVxdWlyZXM6IFtdLFxuICAgIGRlc2NyaWJlTW92ZUVmZmVjdChjdHgpIHtcbiAgICAgIGlmIChjdHgubW92aW5nVHlwZSAhPT0gXCJwYXduXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gYCR7Y3R4Lm1vdmVyfSBwYXduIHB1c2hlZGA7XG4gICAgfSxcbiAgfSk7XG5cbiAgaXQoXCJjb250cmlidXRlcyBhbiBlbnRyeSB0byBwcmVzZXRFZmZlY3RzIHdoZW4gcmV0dXJuaW5nIGEgc3RyaW5nXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiB0ZXN0UHJlc2V0SWQsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcbiAgICBlbmdpbmUuYXBwbHlNb3ZlKGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImUyXCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImU0XCIpKSEpO1xuICAgIGNvbnN0IHJlY29yZCA9IGVuZ2luZS5tb3ZlTG9nWzBdITtcbiAgICBleHBlY3QocmVjb3JkLnByZXNldEVmZmVjdHMpLnRvQ29udGFpbkVxdWFsKHtcbiAgICAgIHByZXNldElkOiB0ZXN0UHJlc2V0SWQsXG4gICAgICBzdW1tYXJ5OiBcIndoaXRlIHBhd24gcHVzaGVkXCIsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwib21pdHMgYW4gZW50cnkgd2hlbiByZXR1cm5pbmcgdW5kZWZpbmVkXCIsICgpID0+IHtcbiAgICBjb25zdCBlbmdpbmUgPSBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBlbmdpbmUuc2V0QWN0aXZlUHJlc2V0cyhbXG4gICAgICB7IGlkOiB0ZXN0UHJlc2V0SWQsIHNjb3BlOiBcImJvdGhcIiwgdHVybnNSZW1haW5pbmc6IG51bGwgfSxcbiAgICBdKTtcbiAgICAvLyBBIGtuaWdodCBtb3ZlIOKAlCB0aGUgcmVwb3J0ZXIgcmV0dXJucyB1bmRlZmluZWQgZm9yIG5vbi1wYXducy5cbiAgICBlbmdpbmUuYXBwbHlNb3ZlKGVuZ2luZS5maW5kTW92ZShhbGdlYnJhaWNUb1NxdWFyZShcImcxXCIpLCBhbGdlYnJhaWNUb1NxdWFyZShcImYzXCIpKSEpO1xuICAgIGNvbnN0IHJlY29yZCA9IGVuZ2luZS5tb3ZlTG9nWzBdITtcbiAgICBleHBlY3QocmVjb3JkLnByZXNldEVmZmVjdHMpLnRvRXF1YWwoW10pO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL2NoZXNzL3NyYy9wcmVzZXRzL21vdmUtbG9nLnRlc3QudHMifQ== diff --git a/7xOfJqsDU787fe61oSCq1/web/f85a4fa33bbdfe8f75e2f8f8848b797a1a39b63e b/7xOfJqsDU787fe61oSCq1/web/f85a4fa33bbdfe8f75e2f8f8848b797a1a39b63e deleted file mode 100644 index 8ee4f1d..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/f85a4fa33bbdfe8f75e2f8f8848b797a1a39b63e +++ /dev/null @@ -1,31 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "isCheckmate", { enumerable: true, configurable: true, get(){ try { return isCheckmate } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/rules/check.ts", {"importedNames":["isInCheck","filterSelfCheckMoves"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/presets/piece-type-registry.ts", {"importedNames":["PIECE_TYPE_REGISTRY"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/presets/core-piece-types.ts"); -function getAllPseudoLegalMoves(session, color) { - const facts = session.allFacts(); - const moves = []; - for (const f of facts) { - if (f.attr !== "Color" || f.value !== color) continue; - if (f.id <= 0) continue; - const typeFact = facts.find((t) => t.id === f.id && t.attr === "PieceType"); - if (typeFact === void 0) continue; - const type = typeFact.value; - const def = __vite_ssr_import_1__.PIECE_TYPE_REGISTRY.get(type); - if (def === void 0) continue; - const getter = def.moveGenerator; - for (const m of getter(session, f.id)) { - moves.push(m); - } - }; - return moves; -} -function isCheckmate(session, color) { - if (!(0,__vite_ssr_import_0__.isInCheck)(session, color)) return false; - const pseudo = getAllPseudoLegalMoves(session, color); - const legal = (0,__vite_ssr_import_0__.filterSelfCheckMoves)(session, pseudo, color); - return legal.length === 0; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQXlCQTtBQUVBO0FBRUE7QUFVQSxTQUFTLHVCQUNQLFNBQ0EsT0FDYTtBQUNiLFFBQU0sUUFBUSxRQUFRLFNBQVM7QUFDL0IsUUFBTSxRQUFxQixDQUFDO0FBRTVCLGFBQVcsS0FBSyxPQUFPO0FBQ3JCLFFBQUksRUFBRSxTQUFTLFdBQVcsRUFBRSxVQUFVLE1BQU87QUFFN0MsUUFBSSxFQUFFLE1BQU0sRUFBRztBQUVmLFVBQU0sV0FBVyxNQUFNLEtBQUssT0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxXQUFXO0FBQ3hFLFFBQUksYUFBYSxPQUFXO0FBQzVCLFVBQU0sT0FBTyxTQUFTO0FBSXRCLFVBQU0sTUFBTSwwQ0FBb0IsSUFBSSxJQUFJO0FBQ3hDLFFBQUksUUFBUSxPQUFXO0FBQ3ZCLFVBQU0sU0FBUyxJQUFJO0FBRW5CLGVBQVcsS0FBSyxPQUFPLFNBQVMsRUFBRSxFQUFFLEdBQUc7QUFDckMsWUFBTSxLQUFLLENBQUM7QUFBQSxJQUNkO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQVdPLFNBQVMsWUFBWSxTQUFrQixPQUE0QjtBQUN4RSxNQUFJLElBQUMsaUNBQVUsU0FBUyxLQUFLLEVBQUcsUUFBTztBQUV2QyxRQUFNLFNBQVMsdUJBQXVCLFNBQVMsS0FBSztBQUNwRCxRQUFNLFdBQVEsNENBQXFCLFNBQVMsUUFBUSxLQUFLO0FBQ3pELFNBQU8sTUFBTSxXQUFXO0FBQzFCIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJjaGVja21hdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGVja21hdGUgZGV0ZWN0aW9uIChQMi4xOSkuXG4gKlxuICogQ2hlY2ttYXRlIGlzIHRoZSBjb25qdW5jdGlvbiBvZiB0d28gY29uZGl0aW9uczpcbiAqICAgMS4gVGhlIHNpZGUgdG8gbW92ZSBJUyBjdXJyZW50bHkgaW4gY2hlY2suXG4gKiAgIDIuIE5vIGxlZ2FsIG1vdmUgZm9yIHRoYXQgc2lkZSByZW1vdmVzIHRoZSBjaGVjay5cbiAqXG4gKiBDb25kaXRpb24gKDIpIGlzIGV4YWN0bHkgXCJmaWx0ZXIgZXZlcnkgcHNldWRvLWxlZ2FsIG1vdmUgdGhyb3VnaCB0aGVcbiAqIHNlbGYtY2hlY2sgZmlsdGVyIGFuZCBzZWUgaWYgYW55IHN1cnZpdmVcIi4gV2UgcmV1c2UgdGhlIGV4aXN0aW5nXG4gKiBgZmlsdGVyU2VsZkNoZWNrTW92ZXNgIChjaGVjay50cywgUDIuMTgpIHJhdGhlciB0aGFuIHJlLXJvbGxpbmcgdGhlXG4gKiBzbmFwc2hvdC1hbmQtYXBwbHkgd2hhdC1pZiBkYW5jZSBoZXJlIOKAlCB0aGF0IGtlZXBzIHRoZSBjaGVjay1oYW5kbGluZ1xuICogbG9naWMgaW4gb25lIHBsYWNlIGFuZCBtZWFucyBhbnkgZnV0dXJlIGZpeCB0byBpdCAoZS5nLiBlbi1wYXNzYW50XG4gKiBjYXB0dXJlIHNlbWFudGljcykgYXV0b21hdGljYWxseSBwcm9wYWdhdGVzIHRvIGNoZWNrbWF0ZSBkZXRlY3Rpb24uXG4gKlxuICogU2NvcGUg4oCUIHdoYXQgdGhpcyBtb2R1bGUgZG9lcyBOT1QgZG86XG4gKiAgIC0gU3RhbGVtYXRlIGRldGVjdGlvbiDihpIgUDIuMjBcbiAqICAgLSBDYXN0bGluZyBtb3ZlcyBhcyBlc2NhcGVzLiBDYXN0bGluZyBvdXQgb2YgY2hlY2sgaXMgaWxsZWdhbCBhbnl3YXksXG4gKiAgICAgYW5kIGNhc3RsaW5nIGlzIGhhbmRsZWQgYnkgaXRzIG93biBydWxlIG1vZHVsZTsgdGhlIGJhc2ljLW1vdmVcbiAqICAgICBnZW5lcmF0b3JzIHVzZWQgaGVyZSBjb3ZlciBhbGwgcGllY2UgbW92ZXMgdGhhdCBjb3VsZCBwb3NzaWJseSBnZXRcbiAqICAgICBhIGtpbmcgb3V0IG9mIGNoZWNrLlxuICogICAtIEVuIHBhc3NhbnQgYXMgYW4gZXNjYXBlLiBFbi1wYXNzYW50IGdlbmVyYXRpb24gaXMgUDIuMTY7IG9uY2UgaXRcbiAqICAgICBsYW5kcywgaXQgY2FuIGJlIHBsdW1iZWQgaW4gYnkgZXh0ZW5kaW5nIE1PVkVfR0VUVEVSUy5cbiAqL1xuaW1wb3J0IHR5cGUgeyBTZXNzaW9uIH0gZnJvbSBcIkBwYXJhdHlwZS9yZXRlXCI7XG5pbXBvcnQgdHlwZSB7IFBpZWNlQ29sb3IsIFBpZWNlVHlwZSB9IGZyb20gXCIuLi9zY2hlbWEuanNcIjtcbmltcG9ydCB7IGlzSW5DaGVjaywgZmlsdGVyU2VsZkNoZWNrTW92ZXMgfSBmcm9tIFwiLi9jaGVjay5qc1wiO1xuaW1wb3J0IHR5cGUgeyBMZWdhbE1vdmUgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgUElFQ0VfVFlQRV9SRUdJU1RSWSB9IGZyb20gXCIuLi9wcmVzZXRzL3BpZWNlLXR5cGUtcmVnaXN0cnkuanNcIjtcbi8vIFNpZGUtZWZmZWN0OiBzZWUgY2hlY2sudHMgY29tbWVudC5cbmltcG9ydCBcIi4uL3ByZXNldHMvY29yZS1waWVjZS10eXBlcy5qc1wiO1xuXG4vKipcbiAqIENvbGxlY3QgZXZlcnkgcHNldWRvLWxlZ2FsIG1vdmUgZm9yIGV2ZXJ5IHBpZWNlIG9mIGBjb2xvcmAuXG4gKlxuICogV2Fsa3MgYGFsbEZhY3RzKClgIG9uY2UgdG8gZmluZCAoaWQsIHR5cGUpIHBhaXJzIGZvciB0aGUgcmVxdWVzdGVkXG4gKiBjb2xvciwgdGhlbiBkaXNwYXRjaGVzIGVhY2ggcGllY2UgdG8gaXRzIHR5cGUtc3BlY2lmaWMgZ2VuZXJhdG9yLiBUaGVcbiAqIHJlc3VsdCBpcyB0aGUgdW5pb24gb2YgYWxsIHJhdyBjYW5kaWRhdGUgbW92ZXMgYmVmb3JlIGFueSBzZWxmLWNoZWNrXG4gKiBmaWx0ZXJpbmcuXG4gKi9cbmZ1bmN0aW9uIGdldEFsbFBzZXVkb0xlZ2FsTW92ZXMoXG4gIHNlc3Npb246IFNlc3Npb24sXG4gIGNvbG9yOiBQaWVjZUNvbG9yLFxuKTogTGVnYWxNb3ZlW10ge1xuICBjb25zdCBmYWN0cyA9IHNlc3Npb24uYWxsRmFjdHMoKTtcbiAgY29uc3QgbW92ZXM6IExlZ2FsTW92ZVtdID0gW107XG5cbiAgZm9yIChjb25zdCBmIG9mIGZhY3RzKSB7XG4gICAgaWYgKGYuYXR0ciAhPT0gXCJDb2xvclwiIHx8IGYudmFsdWUgIT09IGNvbG9yKSBjb250aW51ZTtcbiAgICAvLyBHYW1lLWxldmVsIGZhY3RzIGxpdmUgb24gR0FNRV9FTlRJVFkgKGlkIDApOyBza2lwIGFueXRoaW5nIG5vbi1waWVjZS5cbiAgICBpZiAoZi5pZCA8PSAwKSBjb250aW51ZTtcblxuICAgIGNvbnN0IHR5cGVGYWN0ID0gZmFjdHMuZmluZCh0ID0+IHQuaWQgPT09IGYuaWQgJiYgdC5hdHRyID09PSBcIlBpZWNlVHlwZVwiKTtcbiAgICBpZiAodHlwZUZhY3QgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgY29uc3QgdHlwZSA9IHR5cGVGYWN0LnZhbHVlIGFzIFBpZWNlVHlwZTtcblxuICAgIC8vIERpc3BhdGNoIHZpYSB0aGUgcGllY2UtdHlwZSByZWdpc3RyeSDigJQgY3VzdG9tIHR5cGVzIHJlZ2lzdGVyZWRcbiAgICAvLyBieSBwcmVzZXRzIGdldCB0aGVpciBtb3ZlcyBjb2xsZWN0ZWQgaGVyZSB0b28uXG4gICAgY29uc3QgZGVmID0gUElFQ0VfVFlQRV9SRUdJU1RSWS5nZXQodHlwZSk7XG4gICAgaWYgKGRlZiA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICBjb25zdCBnZXR0ZXIgPSBkZWYubW92ZUdlbmVyYXRvcjtcblxuICAgIGZvciAoY29uc3QgbSBvZiBnZXR0ZXIoc2Vzc2lvbiwgZi5pZCkpIHtcbiAgICAgIG1vdmVzLnB1c2gobSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1vdmVzO1xufVxuXG4vKipcbiAqIElzIGBjb2xvcmAgY2hlY2ttYXRlZCBpbiB0aGUgY3VycmVudCBwb3NpdGlvbj9cbiAqXG4gKiBSZXR1cm5zIHRydWUgaWZmIGBjb2xvcmAgaXMgaW4gY2hlY2sgQU5EIGhhcyB6ZXJvIGxlZ2FsIG1vdmVzIHRoYXRcbiAqIGxlYXZlIHRoZSBraW5nIG91dCBvZiBjaGVjay4gUmV0dXJucyBmYWxzZSB3aGVuOlxuICogICAtIGBjb2xvcmAgaXMgbm90IGluIGNoZWNrIChjb3VsZCBiZSBzdGFsZW1hdGU7IG5vdCBvdXIgY29uY2VybiBoZXJlKVxuICogICAtIGF0IGxlYXN0IG9uZSBtb3ZlIGVzY2FwZXMgY2hlY2sgKGJsb2NrLCBjYXB0dXJlLCBvciBraW5nIGZsaWdodClcbiAqICAgLSBgY29sb3JgIGhhcyBubyBraW5nIG9uIHRoZSBib2FyZCAoZGVnZW5lcmF0ZTsgYGlzSW5DaGVja2AgaGFuZGxlcyBpdClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2hlY2ttYXRlKHNlc3Npb246IFNlc3Npb24sIGNvbG9yOiBQaWVjZUNvbG9yKTogYm9vbGVhbiB7XG4gIGlmICghaXNJbkNoZWNrKHNlc3Npb24sIGNvbG9yKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IHBzZXVkbyA9IGdldEFsbFBzZXVkb0xlZ2FsTW92ZXMoc2Vzc2lvbiwgY29sb3IpO1xuICBjb25zdCBsZWdhbCA9IGZpbHRlclNlbGZDaGVja01vdmVzKHNlc3Npb24sIHBzZXVkbywgY29sb3IpO1xuICByZXR1cm4gbGVnYWwubGVuZ3RoID09PSAwO1xufVxuIl0sImZpbGUiOiIvc3JjL3J1bGVzL2NoZWNrbWF0ZS50cyJ9 diff --git a/7xOfJqsDU787fe61oSCq1/web/ff261415619f60c32a85e2a6cf18f7c160bcd2e5 b/7xOfJqsDU787fe61oSCq1/web/ff261415619f60c32a85e2a6cf18f7c160bcd2e5 deleted file mode 100644 index 6a98a5f..0000000 --- a/7xOfJqsDU787fe61oSCq1/web/ff261415619f60c32a85e2a6cf18f7c160bcd2e5 +++ /dev/null @@ -1,45 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "CORE_PIECE_ATTRS", { enumerable: true, configurable: true, get(){ try { return CORE_PIECE_ATTRS } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "GAME_LEVEL_ATTRS", { enumerable: true, configurable: true, get(){ try { return GAME_LEVEL_ATTRS } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "isPieceAttr", { enumerable: true, configurable: true, get(){ try { return isPieceAttr } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "applyCapture", { enumerable: true, configurable: true, get(){ try { return applyCapture } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "getCapturablePieces", { enumerable: true, configurable: true, get(){ try { return getCapturablePieces } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "canCapture", { enumerable: true, configurable: true, get(){ try { return canCapture } catch {} }}); -const CORE_PIECE_ATTRS = [ - "PieceType", - "Color", - "Position", - "HasMoved" -]; -const GAME_LEVEL_ATTRS = [ - "Turn", - "HalfmoveClock", - "FullmoveNumber", - "EnPassantTarget", - "GameStatus", - "Winner" -]; -function isPieceAttr(attr) { - return !GAME_LEVEL_ATTRS.includes(attr); -}; -function applyCapture(session, capturedId) { - for (const attr of CORE_PIECE_ATTRS) { - if (session.contains(capturedId, attr)) { - session.retract(capturedId, attr); - } - } -}; -function getCapturablePieces(session, attackingColor) { - const enemyColor = attackingColor === "white" ? "black" : "white"; - const facts = session.allFacts(); - return facts.filter((f) => f.attr === "Color" && f.value === enemyColor && f.id > 0).map((f) => f.id); -}; -function canCapture(session, square, attackingColor) { - const facts = session.allFacts(); - const positionFact = facts.find((f) => f.attr === "Position" && f.value === square); - if (!positionFact) return false; - const colorFact = facts.find((f) => f.id === positionFact.id && f.attr === "Color"); - return colorFact?.value !== void 0 && colorFact.value !== attackingColor; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBa0JPLE1BQU0sbUJBQTRDO0FBQUEsRUFDdkQ7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRjtBQWtCTyxNQUFNLG1CQUE0QztBQUFBLEVBQ3ZEO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRjtBQU1PLFNBQVMsWUFBWSxNQUFvQztBQUM5RCxTQUFPLENBQUUsaUJBQXVDLFNBQVMsSUFBSTtBQUMvRDtBQVdPLFNBQVMsYUFBYSxTQUFrQixZQUE0QjtBQUN6RSxhQUFXLFFBQVEsa0JBQWtCO0FBQ25DLFFBQUksUUFBUSxTQUFTLFlBQVksSUFBSSxHQUFHO0FBQ3RDLGNBQVEsUUFBUSxZQUFZLElBQUk7QUFBQSxJQUNsQztBQUFBLEVBQ0Y7QUFDRjtBQU1PLFNBQVMsb0JBQW9CLFNBQWtCLGdCQUF3QztBQUM1RixRQUFNLGFBQXlCLG1CQUFtQixVQUFVLFVBQVU7QUFDdEUsUUFBTSxRQUFRLFFBQVEsU0FBUztBQUMvQixTQUFPLE1BQ0osT0FBTyxPQUFLLEVBQUUsU0FBUyxXQUFXLEVBQUUsVUFBVSxjQUFjLEVBQUUsS0FBSyxDQUFDLEVBQ3BFLElBQUksT0FBSyxFQUFFLEVBQWM7QUFDOUI7QUFNTyxTQUFTLFdBQVcsU0FBa0IsUUFBZ0IsZ0JBQXFDO0FBQ2hHLFFBQU0sUUFBUSxRQUFRLFNBQVM7QUFDL0IsUUFBTSxlQUFlLE1BQU0sS0FBSyxPQUFLLEVBQUUsU0FBUyxjQUFjLEVBQUUsVUFBVSxNQUFNO0FBQ2hGLE1BQUksQ0FBQyxhQUFjLFFBQU87QUFDMUIsUUFBTSxZQUFZLE1BQU0sS0FBSyxPQUFLLEVBQUUsT0FBTyxhQUFhLE1BQU0sRUFBRSxTQUFTLE9BQU87QUFDaEYsU0FBTyxXQUFXLFVBQVUsVUFBYSxVQUFVLFVBQVU7QUFDL0QiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImNhcHR1cmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDYXB0dXJlIHJlc29sdXRpb24gZm9yIEBwYXJhdHlwZS9jaGVzcy5cbiAqIFdoZW4gYSBjYXB0dXJlIG9jY3VycywgdGhlIGNhcHR1cmVkIHBpZWNlJ3MgZmFjdHMgYXJlIHJldHJhY3RlZCBmcm9tIFdNLlxuICovXG5pbXBvcnQgdHlwZSB7IFNlc3Npb24sIEVudGl0eUlkIH0gZnJvbSBcIkBwYXJhdHlwZS9yZXRlXCI7XG5pbXBvcnQgdHlwZSB7IENoZXNzQXR0cktleSwgUGllY2VDb2xvciB9IGZyb20gXCIuLi9zY2hlbWEuanNcIjtcblxuLyoqXG4gKiBGSURFLW1pbmltYWwgYXR0cmlidXRlcyBldmVyeSBwaWVjZSBlbnRpdHkgY2Fycmllcy5cbiAqXG4gKiBUaGlzIGlzIHRoZSBDT1JFIGxpc3Qg4oCUIHByZXNldC1zcGVjaWZpYyBhdHRyaWJ1dGVzIChgSHBgLCBgU2hpZWxkYCxcbiAqIGBTdGFtaW5hYCwg4oCmKSBhcmUgZGVjbGFyZWQgYnkgcHJlc2V0cyB2aWEgYFByZXNldERlZi5waWVjZUF0dHJpYnV0ZXNgXG4gKiBhbmQgdW5pb25lZCBpbiBhdCBydW50aW1lIHZpYSBgQ2hlc3NFbmdpbmUuZWZmZWN0aXZlUGllY2VBdHRyc2AuXG4gKiBDYWxsZXJzIHRoYXQgbmVlZCB0aGUgRU5HSU5FLUFXQVJFIGxpc3QgKHJldHJhY3Qtb24tZGVhdGgsIHNhdmUtc3RhdGVcbiAqIHNlcmlhbGl6YXRpb24sIGV0Yy4pIHNob3VsZCByZWFkIGBlbmdpbmUuZWZmZWN0aXZlUGllY2VBdHRyc2A7IHRoaXNcbiAqIGNvbnN0YW50IGlzIG9ubHkgZm9yIHB1cmUtZnVuY3Rpb24gLyBuby1lbmdpbmUgY29udGV4dHMgKGUuZy4gdGhlXG4gKiBgYXBwbHlDYXB0dXJlYCBoZWxwZXIgYmVsb3cgdXNlZCBieSBsZWdhY3kgdGVzdHMpLlxuICovXG5leHBvcnQgY29uc3QgQ09SRV9QSUVDRV9BVFRSUzogcmVhZG9ubHkgQ2hlc3NBdHRyS2V5W10gPSBbXG4gIFwiUGllY2VUeXBlXCIsXG4gIFwiQ29sb3JcIixcbiAgXCJQb3NpdGlvblwiLFxuICBcIkhhc01vdmVkXCIsXG5dIGFzIGNvbnN0O1xuXG4vKipcbiAqIEF0dHJpYnV0ZXMgdGhhdCBsaXZlIG9uIHRoZSBnYW1lIGVudGl0eSAoaWQgMCksIE5PVCBvbiBwaWVjZXMuXG4gKlxuICogVXNlZCBieSBwdXJlLWZ1bmN0aW9uIGhlbHBlcnMgKGNoZWNrIC8gc3RhbGVtYXRlIC8gdHVybiB3aGF0LWlmXG4gKiBzaW11bGF0b3JzKSB0byBmaWx0ZXIgZmFjdHMgd2hlbiBzbmFwc2hvdHRpbmcgYSBzZXNzaW9uIGZvclxuICogc2ltdWxhdGlvbi4gQW55dGhpbmcgb24gYW4gaWQgPiAwIHRoYXQgSVNOJ1QgaW4gdGhpcyBsaXN0IGlzXG4gKiB0cmVhdGVkIGFzIGEgcGllY2UgYXR0cmlidXRlIOKAlCB3aGljaCBtZWFucyBwcmVzZXQtZGVjbGFyZWQgYXR0cnNcbiAqIGxpa2UgYEhwYCAvIGBTaGllbGRgIGFyZSBhdXRvbWF0aWNhbGx5IHBpY2tlZCB1cCBieSB0aGUgc2ltdWxhdG9yXG4gKiB3aXRob3V0IHJlcXVpcmluZyBhbiBlbmdpbmUgcmVmZXJlbmNlLlxuICpcbiAqIFRoZSBhbHRlcm5hdGl2ZSB3b3VsZCBiZSB0byB0aHJlYWQgYW4gZW5naW5lIHJlZmVyZW5jZSB0aHJvdWdoXG4gKiBldmVyeSBwdXJlIHNpbXVsYXRpb24gaGVscGVyLiBUaGlzIGtlZXBzIHRob3NlIGhlbHBlcnMgc2ltcGxlIGF0XG4gKiB0aGUgY29zdCBvZiBvbmUgZXh0cmEgbGlzdCB0byBtYWludGFpbiDigJQgYSByZWFzb25hYmxlIHRyYWRlb2ZmXG4gKiBiZWNhdXNlIG5ldyBnYW1lLWxldmVsIGF0dHJzIGFyZSByYXJlIChgVHVybmAsIGBFblBhc3NhbnRUYXJnZXRgLFxuICogYEhhbGZtb3ZlQ2xvY2tgLCBgRnVsbG1vdmVOdW1iZXJgLCBgR2FtZVN0YXR1c2AsIGBXaW5uZXJgKS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdBTUVfTEVWRUxfQVRUUlM6IHJlYWRvbmx5IENoZXNzQXR0cktleVtdID0gW1xuICBcIlR1cm5cIixcbiAgXCJIYWxmbW92ZUNsb2NrXCIsXG4gIFwiRnVsbG1vdmVOdW1iZXJcIixcbiAgXCJFblBhc3NhbnRUYXJnZXRcIixcbiAgXCJHYW1lU3RhdHVzXCIsXG4gIFwiV2lubmVyXCIsXG5dIGFzIGNvbnN0O1xuXG4vKipcbiAqIElzIGBhdHRyYCBhbiBhdHRyaWJ1dGUgb2YgYSBwaWVjZSAoYXMgb3Bwb3NlZCB0byB0aGUgZ2FtZSBlbnRpdHkpP1xuICogVXNlZCBieSBzZXNzaW9uLXNuYXBzaG90IGhlbHBlcnMgdG8ga25vdyB3aGF0IHRvIGNvcHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BpZWNlQXR0cihhdHRyOiBzdHJpbmcpOiBhdHRyIGlzIENoZXNzQXR0cktleSB7XG4gIHJldHVybiAhKEdBTUVfTEVWRUxfQVRUUlMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKGF0dHIpO1xufVxuXG4vKipcbiAqIEFwcGx5IGEgY2FwdHVyZTogcmV0cmFjdCBhbGwgY29yZSBhdHRycyBmb3IgdGhlIGNhcHR1cmVkIHBpZWNlLlxuICpcbiAqIExFR0FDWSBoZWxwZXIg4oCUIHRoZSBsaXZlIGVuZ2luZSB1c2VzIGBlbmdpbmUuZGVhbERhbWFnZWAgKyB0aGVcbiAqIGR5bmFtaWMgYXR0cmlidXRlIGxpc3Qgc28gcHJlc2V0IGF0dHJpYnV0ZXMgYXJlIGNsZWFuZWQgdXAgdG9vLlxuICogVGhpcyBmdW5jdGlvbiByZW1haW5zIGZvciB0aGUgY2FwdHVyZS50ZXN0LnRzIHRlc3RzIHRoYXQgY29uc3RydWN0XG4gKiBhIHJhdyBgU2Vzc2lvbmAgd2l0aG91dCBhIGBDaGVzc0VuZ2luZWAuIEZvciB0aG9zZSB0ZXN0cyBubyBwcmVzZXRzXG4gKiBjYW4gYmUgYWN0aXZlLCBzbyB0aGUgY29yZSBsaXN0IGlzIHN1ZmZpY2llbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUNhcHR1cmUoc2Vzc2lvbjogU2Vzc2lvbiwgY2FwdHVyZWRJZDogRW50aXR5SWQpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBhdHRyIG9mIENPUkVfUElFQ0VfQVRUUlMpIHtcbiAgICBpZiAoc2Vzc2lvbi5jb250YWlucyhjYXB0dXJlZElkLCBhdHRyKSkge1xuICAgICAgc2Vzc2lvbi5yZXRyYWN0KGNhcHR1cmVkSWQsIGF0dHIpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEdldCBhbGwgZW5lbXkgcGllY2UgZW50aXR5IElEcyB0aGF0IGEgZ2l2ZW4gY29sb3IgY291bGQgcG90ZW50aWFsbHkgY2FwdHVyZS5cbiAqIFJldHVybnMgdGhlIElEcyBvZiBhbGwgcGllY2VzIGJlbG9uZ2luZyB0byB0aGUgb3Bwb3NpdGUgY29sb3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYXB0dXJhYmxlUGllY2VzKHNlc3Npb246IFNlc3Npb24sIGF0dGFja2luZ0NvbG9yOiBQaWVjZUNvbG9yKTogRW50aXR5SWRbXSB7XG4gIGNvbnN0IGVuZW15Q29sb3I6IFBpZWNlQ29sb3IgPSBhdHRhY2tpbmdDb2xvciA9PT0gXCJ3aGl0ZVwiID8gXCJibGFja1wiIDogXCJ3aGl0ZVwiO1xuICBjb25zdCBmYWN0cyA9IHNlc3Npb24uYWxsRmFjdHMoKTtcbiAgcmV0dXJuIGZhY3RzXG4gICAgLmZpbHRlcihmID0+IGYuYXR0ciA9PT0gXCJDb2xvclwiICYmIGYudmFsdWUgPT09IGVuZW15Q29sb3IgJiYgZi5pZCA+IDApXG4gICAgLm1hcChmID0+IGYuaWQgYXMgRW50aXR5SWQpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGNhcHR1cmluZyB0aGUgcGllY2UgYXQgdGhlIGdpdmVuIHNxdWFyZSBpcyBsZWdhbFxuICogKGkuZS4sIGl0J3MgYW4gZW5lbXkgcGllY2UsIG5vdCBhbiBhbGx5KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbkNhcHR1cmUoc2Vzc2lvbjogU2Vzc2lvbiwgc3F1YXJlOiBudW1iZXIsIGF0dGFja2luZ0NvbG9yOiBQaWVjZUNvbG9yKTogYm9vbGVhbiB7XG4gIGNvbnN0IGZhY3RzID0gc2Vzc2lvbi5hbGxGYWN0cygpO1xuICBjb25zdCBwb3NpdGlvbkZhY3QgPSBmYWN0cy5maW5kKGYgPT4gZi5hdHRyID09PSBcIlBvc2l0aW9uXCIgJiYgZi52YWx1ZSA9PT0gc3F1YXJlKTtcbiAgaWYgKCFwb3NpdGlvbkZhY3QpIHJldHVybiBmYWxzZTsgLy8gbm8gcGllY2UgYXQgc3F1YXJlXG4gIGNvbnN0IGNvbG9yRmFjdCA9IGZhY3RzLmZpbmQoZiA9PiBmLmlkID09PSBwb3NpdGlvbkZhY3QuaWQgJiYgZi5hdHRyID09PSBcIkNvbG9yXCIpO1xuICByZXR1cm4gY29sb3JGYWN0Py52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGNvbG9yRmFjdC52YWx1ZSAhPT0gYXR0YWNraW5nQ29sb3I7XG59XG4iXSwiZmlsZSI6Ii9zcmMvcnVsZXMvY2FwdHVyZS50cyJ9 diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/02326cc10e030cba14fc923a76bad25b397e5343 b/IJGn1F-WxLUCbfU1lu8pU/ssr/02326cc10e030cba14fc923a76bad25b397e5343 deleted file mode 100644 index bb7fba5..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/02326cc10e030cba14fc923a76bad25b397e5343 +++ /dev/null @@ -1,145 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("vitest", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/snapshot.ts", {"importedNames":["SnapshotManager"]}); -const mkId = (n) => n; -const mkFacts = (count) => Array.from({ length: count }, (_, i) => ({ - id: mkId(i + 1), - attr: "X", - value: i -})); -(0,__vite_ssr_import_0__.describe)("SnapshotManager", () => { - (0,__vite_ssr_import_0__.it)("no snapshots initially", () => { - const mgr = new __vite_ssr_import_1__.SnapshotManager(30); - (0,__vite_ssr_import_0__.expect)(mgr.snapshotCount).toBe(0); - (0,__vite_ssr_import_0__.expect)(mgr.tickCount).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("rejects non-positive or non-integer intervals", () => { - (0,__vite_ssr_import_0__.expect)(() => new __vite_ssr_import_1__.SnapshotManager(0)).toThrow(); - (0,__vite_ssr_import_0__.expect)(() => new __vite_ssr_import_1__.SnapshotManager(-1)).toThrow(); - (0,__vite_ssr_import_0__.expect)(() => new __vite_ssr_import_1__.SnapshotManager(1.5)).toThrow(); - }); - (0,__vite_ssr_import_0__.it)("takes snapshot at interval N", () => { - const mgr = new __vite_ssr_import_1__.SnapshotManager(3); - mgr.onTick(mkFacts(1), 1); - mgr.onTick(mkFacts(1), 2); - (0,__vite_ssr_import_0__.expect)(mgr.snapshotCount).toBe(0); - mgr.onTick(mkFacts(2), 3); - (0,__vite_ssr_import_0__.expect)(mgr.snapshotCount).toBe(1); - }); - (0,__vite_ssr_import_0__.it)("takes multiple snapshots at regular intervals", () => { - const mgr = new __vite_ssr_import_1__.SnapshotManager(10); - for (let i = 1; i <= 30; i++) { - mgr.onTick(mkFacts(2), i); - }; - (0,__vite_ssr_import_0__.expect)(mgr.snapshotCount).toBe(3); - }); - (0,__vite_ssr_import_0__.it)("1000 ticks with N=30 produces 33 snapshots", () => { - const mgr = new __vite_ssr_import_1__.SnapshotManager(30); - for (let i = 1; i <= 1e3; i++) { - mgr.onTick(mkFacts(5), i); - }; - (0,__vite_ssr_import_0__.expect)(mgr.snapshotCount).toBe(33); - }); - (0,__vite_ssr_import_0__.it)("takeSnapshot manually works without advancing tick counter", () => { - const mgr = new __vite_ssr_import_1__.SnapshotManager(30); - mgr.takeSnapshot(mkFacts(3), 0); - (0,__vite_ssr_import_0__.expect)(mgr.snapshotCount).toBe(1); - (0,__vite_ssr_import_0__.expect)(mgr.tickCount).toBe(0); - const snap = mgr.getAllSnapshots()[0]; - (0,__vite_ssr_import_0__.expect)(snap.facts.size).toBe(3); - (0,__vite_ssr_import_0__.expect)(snap.seq).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("snapshot records seq and tick correctly", () => { - const mgr = new __vite_ssr_import_1__.SnapshotManager(5); - for (let i = 1; i <= 10; i++) { - mgr.onTick(mkFacts(1), i * 100); - }; - const snaps = mgr.getAllSnapshots(); - (0,__vite_ssr_import_0__.expect)(snaps).toHaveLength(2); - (0,__vite_ssr_import_0__.expect)(snaps[0].tick).toBe(5); - (0,__vite_ssr_import_0__.expect)(snaps[0].seq).toBe(500); - (0,__vite_ssr_import_0__.expect)(snaps[1].tick).toBe(10); - (0,__vite_ssr_import_0__.expect)(snaps[1].seq).toBe(1e3); - }); - (0,__vite_ssr_import_0__.it)("getNearestSnapshot returns snapshot at or before seq", () => { - const mgr = new __vite_ssr_import_1__.SnapshotManager(5); - mgr.onTick(mkFacts(1), 1); - mgr.onTick(mkFacts(1), 2); - mgr.onTick(mkFacts(1), 3); - mgr.onTick(mkFacts(1), 4); - mgr.onTick(mkFacts(2), 5); - mgr.onTick(mkFacts(2), 6); - const snap = mgr.getNearestSnapshot(6); - (0,__vite_ssr_import_0__.expect)(snap).not.toBeNull(); - (0,__vite_ssr_import_0__.expect)(snap?.seq).toBe(5); - }); - (0,__vite_ssr_import_0__.it)("getNearestSnapshot returns exact match when seq lands on snapshot", () => { - const mgr = new __vite_ssr_import_1__.SnapshotManager(2); - mgr.onTick(mkFacts(1), 10); - mgr.onTick(mkFacts(1), 20); - mgr.onTick(mkFacts(1), 30); - mgr.onTick(mkFacts(1), 40); - (0,__vite_ssr_import_0__.expect)(mgr.getNearestSnapshot(20)?.seq).toBe(20); - (0,__vite_ssr_import_0__.expect)(mgr.getNearestSnapshot(40)?.seq).toBe(40); - (0,__vite_ssr_import_0__.expect)(mgr.getNearestSnapshot(35)?.seq).toBe(20); - }); - (0,__vite_ssr_import_0__.it)("getNearestSnapshot returns null when no snapshot before seq", () => { - const mgr = new __vite_ssr_import_1__.SnapshotManager(30); - (0,__vite_ssr_import_0__.expect)(mgr.getNearestSnapshot(5)).toBeNull(); - }); - (0,__vite_ssr_import_0__.it)("snapshot facts contain correct fact values", () => { - const mgr = new __vite_ssr_import_1__.SnapshotManager(1); - mgr.onTick( - [ - { id: mkId(1), attr: "hp", value: 100 }, - { id: mkId(1), attr: "name", value: "hero" }, - { id: mkId(2), attr: "hp", value: 50 } - ], - 42 - ); - const snap = mgr.getAllSnapshots()[0]; - (0,__vite_ssr_import_0__.expect)(snap.facts.size).toBe(2); - (0,__vite_ssr_import_0__.expect)(snap.facts.get(mkId(1))?.get("hp")).toBe(100); - (0,__vite_ssr_import_0__.expect)(snap.facts.get(mkId(1))?.get("name")).toBe("hero"); - (0,__vite_ssr_import_0__.expect)(snap.facts.get(mkId(2))?.get("hp")).toBe(50); - }); - (0,__vite_ssr_import_0__.it)("snapshot facts are immutable (Immer frozen)", () => { - const mgr = new __vite_ssr_import_1__.SnapshotManager(1); - mgr.onTick(mkFacts(1), 1); - const snap = mgr.getAllSnapshots()[0]; - (0,__vite_ssr_import_0__.expect)(() => { - snap.facts.set(mkId(99), /* @__PURE__ */ new Map()); - }).toThrow(); - }); - (0,__vite_ssr_import_0__.it)("nested attribute maps are also frozen", () => { - const mgr = new __vite_ssr_import_1__.SnapshotManager(1); - mgr.onTick([{ id: mkId(1), attr: "hp", value: 100 }], 1); - const snap = mgr.getAllSnapshots()[0]; - const attrMap = snap.facts.get(mkId(1)); - (0,__vite_ssr_import_0__.expect)(() => { - attrMap.set("mp", 50); - }).toThrow(); - }); - (0,__vite_ssr_import_0__.it)("successive snapshots are independent — later mutations to source do not affect prior snapshots", () => { - const mgr = new __vite_ssr_import_1__.SnapshotManager(1); - const facts1 = [{ id: mkId(1), attr: "hp", value: 100 }]; - mgr.onTick(facts1, 1); - const facts2 = [{ id: mkId(1), attr: "hp", value: 50 }]; - mgr.onTick(facts2, 2); - const snap1 = mgr.getAllSnapshots()[0]; - const snap2 = mgr.getAllSnapshots()[1]; - (0,__vite_ssr_import_0__.expect)(snap1.facts.get(mkId(1))?.get("hp")).toBe(100); - (0,__vite_ssr_import_0__.expect)(snap2.facts.get(mkId(1))?.get("hp")).toBe(50); - }); - (0,__vite_ssr_import_0__.it)("clear() resets state", () => { - const mgr = new __vite_ssr_import_1__.SnapshotManager(2); - mgr.onTick(mkFacts(1), 1); - mgr.onTick(mkFacts(1), 2); - (0,__vite_ssr_import_0__.expect)(mgr.snapshotCount).toBe(1); - mgr.clear(); - (0,__vite_ssr_import_0__.expect)(mgr.snapshotCount).toBe(0); - (0,__vite_ssr_import_0__.expect)(mgr.tickCount).toBe(0); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFFBQUksT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDO0FBQ3hCLFFBQUksT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDO0FBQ3hCLHFDQUFPLElBQUksYUFBYSxFQUFFLEtBQUssQ0FBQztBQUNoQyxRQUFJLE1BQU07QUFDVixxQ0FBTyxJQUFJLGFBQWEsRUFBRSxLQUFLLENBQUM7QUFDaEMscUNBQU8sSUFBSSxTQUFTLEVBQUUsS0FBSyxDQUFDO0FBQUEsRUFDOUIsQ0FBQztBQUNILENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInNuYXBzaG90LnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgeyBTbmFwc2hvdE1hbmFnZXIsIHR5cGUgRmFjdFJlY29yZCB9IGZyb20gXCIuL3NuYXBzaG90LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eUlkIH0gZnJvbSBcIi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEF0dHJLZXkgfSBmcm9tIFwiLi93bS5qc1wiO1xuXG5jb25zdCBta0lkID0gKG46IG51bWJlcik6IEVudGl0eUlkID0+IG4gYXMgRW50aXR5SWQ7XG5jb25zdCBta0ZhY3RzID0gKGNvdW50OiBudW1iZXIpOiBGYWN0UmVjb3JkW10gPT5cbiAgQXJyYXkuZnJvbSh7IGxlbmd0aDogY291bnQgfSwgKF8sIGkpID0+ICh7XG4gICAgaWQ6IG1rSWQoaSArIDEpLFxuICAgIGF0dHI6IFwiWFwiLFxuICAgIHZhbHVlOiBpLFxuICB9KSk7XG5cbmRlc2NyaWJlKFwiU25hcHNob3RNYW5hZ2VyXCIsICgpID0+IHtcbiAgaXQoXCJubyBzbmFwc2hvdHMgaW5pdGlhbGx5XCIsICgpID0+IHtcbiAgICBjb25zdCBtZ3IgPSBuZXcgU25hcHNob3RNYW5hZ2VyKDMwKTtcbiAgICBleHBlY3QobWdyLnNuYXBzaG90Q291bnQpLnRvQmUoMCk7XG4gICAgZXhwZWN0KG1nci50aWNrQ291bnQpLnRvQmUoMCk7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyBub24tcG9zaXRpdmUgb3Igbm9uLWludGVnZXIgaW50ZXJ2YWxzXCIsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gbmV3IFNuYXBzaG90TWFuYWdlcigwKSkudG9UaHJvdygpO1xuICAgIGV4cGVjdCgoKSA9PiBuZXcgU25hcHNob3RNYW5hZ2VyKC0xKSkudG9UaHJvdygpO1xuICAgIGV4cGVjdCgoKSA9PiBuZXcgU25hcHNob3RNYW5hZ2VyKDEuNSkpLnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgaXQoXCJ0YWtlcyBzbmFwc2hvdCBhdCBpbnRlcnZhbCBOXCIsICgpID0+IHtcbiAgICBjb25zdCBtZ3IgPSBuZXcgU25hcHNob3RNYW5hZ2VyKDMpO1xuICAgIG1nci5vblRpY2sobWtGYWN0cygxKSwgMSk7XG4gICAgbWdyLm9uVGljayhta0ZhY3RzKDEpLCAyKTtcbiAgICBleHBlY3QobWdyLnNuYXBzaG90Q291bnQpLnRvQmUoMCk7XG4gICAgbWdyLm9uVGljayhta0ZhY3RzKDIpLCAzKTtcbiAgICBleHBlY3QobWdyLnNuYXBzaG90Q291bnQpLnRvQmUoMSk7XG4gIH0pO1xuXG4gIGl0KFwidGFrZXMgbXVsdGlwbGUgc25hcHNob3RzIGF0IHJlZ3VsYXIgaW50ZXJ2YWxzXCIsICgpID0+IHtcbiAgICBjb25zdCBtZ3IgPSBuZXcgU25hcHNob3RNYW5hZ2VyKDEwKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAzMDsgaSsrKSB7XG4gICAgICBtZ3Iub25UaWNrKG1rRmFjdHMoMiksIGkpO1xuICAgIH1cbiAgICBleHBlY3QobWdyLnNuYXBzaG90Q291bnQpLnRvQmUoMyk7IC8vIHRpY2tzIDEwLCAyMCwgMzBcbiAgfSk7XG5cbiAgaXQoXCIxMDAwIHRpY2tzIHdpdGggTj0zMCBwcm9kdWNlcyAzMyBzbmFwc2hvdHNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG1nciA9IG5ldyBTbmFwc2hvdE1hbmFnZXIoMzApO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDEwMDA7IGkrKykge1xuICAgICAgbWdyLm9uVGljayhta0ZhY3RzKDUpLCBpKTtcbiAgICB9XG4gICAgZXhwZWN0KG1nci5zbmFwc2hvdENvdW50KS50b0JlKDMzKTsgLy8gZmxvb3IoMTAwMC8zMCkgPSAzM1xuICB9KTtcblxuICBpdChcInRha2VTbmFwc2hvdCBtYW51YWxseSB3b3JrcyB3aXRob3V0IGFkdmFuY2luZyB0aWNrIGNvdW50ZXJcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG1nciA9IG5ldyBTbmFwc2hvdE1hbmFnZXIoMzApO1xuICAgIG1nci50YWtlU25hcHNob3QobWtGYWN0cygzKSwgMCk7XG4gICAgZXhwZWN0KG1nci5zbmFwc2hvdENvdW50KS50b0JlKDEpO1xuICAgIGV4cGVjdChtZ3IudGlja0NvdW50KS50b0JlKDApO1xuICAgIGNvbnN0IHNuYXAgPSBtZ3IuZ2V0QWxsU25hcHNob3RzKClbMF0hO1xuICAgIGV4cGVjdChzbmFwLmZhY3RzLnNpemUpLnRvQmUoMyk7XG4gICAgZXhwZWN0KHNuYXAuc2VxKS50b0JlKDApO1xuICB9KTtcblxuICBpdChcInNuYXBzaG90IHJlY29yZHMgc2VxIGFuZCB0aWNrIGNvcnJlY3RseVwiLCAoKSA9PiB7XG4gICAgY29uc3QgbWdyID0gbmV3IFNuYXBzaG90TWFuYWdlcig1KTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAxMDsgaSsrKSB7XG4gICAgICBtZ3Iub25UaWNrKG1rRmFjdHMoMSksIGkgKiAxMDApO1xuICAgIH1cbiAgICBjb25zdCBzbmFwcyA9IG1nci5nZXRBbGxTbmFwc2hvdHMoKTtcbiAgICBleHBlY3Qoc25hcHMpLnRvSGF2ZUxlbmd0aCgyKTtcbiAgICBleHBlY3Qoc25hcHNbMF0hLnRpY2spLnRvQmUoNSk7XG4gICAgZXhwZWN0KHNuYXBzWzBdIS5zZXEpLnRvQmUoNTAwKTtcbiAgICBleHBlY3Qoc25hcHNbMV0hLnRpY2spLnRvQmUoMTApO1xuICAgIGV4cGVjdChzbmFwc1sxXSEuc2VxKS50b0JlKDEwMDApO1xuICB9KTtcblxuICBpdChcImdldE5lYXJlc3RTbmFwc2hvdCByZXR1cm5zIHNuYXBzaG90IGF0IG9yIGJlZm9yZSBzZXFcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG1nciA9IG5ldyBTbmFwc2hvdE1hbmFnZXIoNSk7XG4gICAgbWdyLm9uVGljayhta0ZhY3RzKDEpLCAxKTtcbiAgICBtZ3Iub25UaWNrKG1rRmFjdHMoMSksIDIpO1xuICAgIG1nci5vblRpY2sobWtGYWN0cygxKSwgMyk7XG4gICAgbWdyLm9uVGljayhta0ZhY3RzKDEpLCA0KTtcbiAgICBtZ3Iub25UaWNrKG1rRmFjdHMoMiksIDUpOyAvLyBzbmFwc2hvdCBhdCBzZXE9NVxuICAgIG1nci5vblRpY2sobWtGYWN0cygyKSwgNik7XG4gICAgY29uc3Qgc25hcCA9IG1nci5nZXROZWFyZXN0U25hcHNob3QoNik7XG4gICAgZXhwZWN0KHNuYXApLm5vdC50b0JlTnVsbCgpO1xuICAgIGV4cGVjdChzbmFwPy5zZXEpLnRvQmUoNSk7XG4gIH0pO1xuXG4gIGl0KFwiZ2V0TmVhcmVzdFNuYXBzaG90IHJldHVybnMgZXhhY3QgbWF0Y2ggd2hlbiBzZXEgbGFuZHMgb24gc25hcHNob3RcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG1nciA9IG5ldyBTbmFwc2hvdE1hbmFnZXIoMik7XG4gICAgbWdyLm9uVGljayhta0ZhY3RzKDEpLCAxMCk7XG4gICAgbWdyLm9uVGljayhta0ZhY3RzKDEpLCAyMCk7IC8vIHNuYXBzaG90XG4gICAgbWdyLm9uVGljayhta0ZhY3RzKDEpLCAzMCk7XG4gICAgbWdyLm9uVGljayhta0ZhY3RzKDEpLCA0MCk7IC8vIHNuYXBzaG90XG4gICAgZXhwZWN0KG1nci5nZXROZWFyZXN0U25hcHNob3QoMjApPy5zZXEpLnRvQmUoMjApO1xuICAgIGV4cGVjdChtZ3IuZ2V0TmVhcmVzdFNuYXBzaG90KDQwKT8uc2VxKS50b0JlKDQwKTtcbiAgICBleHBlY3QobWdyLmdldE5lYXJlc3RTbmFwc2hvdCgzNSk/LnNlcSkudG9CZSgyMCk7XG4gIH0pO1xuXG4gIGl0KFwiZ2V0TmVhcmVzdFNuYXBzaG90IHJldHVybnMgbnVsbCB3aGVuIG5vIHNuYXBzaG90IGJlZm9yZSBzZXFcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG1nciA9IG5ldyBTbmFwc2hvdE1hbmFnZXIoMzApO1xuICAgIGV4cGVjdChtZ3IuZ2V0TmVhcmVzdFNuYXBzaG90KDUpKS50b0JlTnVsbCgpO1xuICB9KTtcblxuICBpdChcInNuYXBzaG90IGZhY3RzIGNvbnRhaW4gY29ycmVjdCBmYWN0IHZhbHVlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgbWdyID0gbmV3IFNuYXBzaG90TWFuYWdlcigxKTtcbiAgICBtZ3Iub25UaWNrKFxuICAgICAgW1xuICAgICAgICB7IGlkOiBta0lkKDEpLCBhdHRyOiBcImhwXCIsIHZhbHVlOiAxMDAgfSxcbiAgICAgICAgeyBpZDogbWtJZCgxKSwgYXR0cjogXCJuYW1lXCIsIHZhbHVlOiBcImhlcm9cIiB9LFxuICAgICAgICB7IGlkOiBta0lkKDIpLCBhdHRyOiBcImhwXCIsIHZhbHVlOiA1MCB9LFxuICAgICAgXSxcbiAgICAgIDQyLFxuICAgICk7XG4gICAgY29uc3Qgc25hcCA9IG1nci5nZXRBbGxTbmFwc2hvdHMoKVswXSE7XG4gICAgZXhwZWN0KHNuYXAuZmFjdHMuc2l6ZSkudG9CZSgyKTtcbiAgICBleHBlY3Qoc25hcC5mYWN0cy5nZXQobWtJZCgxKSk/LmdldChcImhwXCIpKS50b0JlKDEwMCk7XG4gICAgZXhwZWN0KHNuYXAuZmFjdHMuZ2V0KG1rSWQoMSkpPy5nZXQoXCJuYW1lXCIpKS50b0JlKFwiaGVyb1wiKTtcbiAgICBleHBlY3Qoc25hcC5mYWN0cy5nZXQobWtJZCgyKSk/LmdldChcImhwXCIpKS50b0JlKDUwKTtcbiAgfSk7XG5cbiAgaXQoXCJzbmFwc2hvdCBmYWN0cyBhcmUgaW1tdXRhYmxlIChJbW1lciBmcm96ZW4pXCIsICgpID0+IHtcbiAgICBjb25zdCBtZ3IgPSBuZXcgU25hcHNob3RNYW5hZ2VyKDEpO1xuICAgIG1nci5vblRpY2sobWtGYWN0cygxKSwgMSk7XG4gICAgY29uc3Qgc25hcCA9IG1nci5nZXRBbGxTbmFwc2hvdHMoKVswXSE7XG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIChzbmFwLmZhY3RzIGFzIE1hcDxFbnRpdHlJZCwgTWFwPEF0dHJLZXksIHVua25vd24+Pikuc2V0KG1rSWQoOTkpLCBuZXcgTWFwKCkpO1xuICAgIH0pLnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgaXQoXCJuZXN0ZWQgYXR0cmlidXRlIG1hcHMgYXJlIGFsc28gZnJvemVuXCIsICgpID0+IHtcbiAgICBjb25zdCBtZ3IgPSBuZXcgU25hcHNob3RNYW5hZ2VyKDEpO1xuICAgIG1nci5vblRpY2soW3sgaWQ6IG1rSWQoMSksIGF0dHI6IFwiaHBcIiwgdmFsdWU6IDEwMCB9XSwgMSk7XG4gICAgY29uc3Qgc25hcCA9IG1nci5nZXRBbGxTbmFwc2hvdHMoKVswXSE7XG4gICAgY29uc3QgYXR0ck1hcCA9IHNuYXAuZmFjdHMuZ2V0KG1rSWQoMSkpITtcbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgKGF0dHJNYXAgYXMgTWFwPEF0dHJLZXksIHVua25vd24+KS5zZXQoXCJtcFwiLCA1MCk7XG4gICAgfSkudG9UaHJvdygpO1xuICB9KTtcblxuICBpdChcInN1Y2Nlc3NpdmUgc25hcHNob3RzIGFyZSBpbmRlcGVuZGVudCDigJQgbGF0ZXIgbXV0YXRpb25zIHRvIHNvdXJjZSBkbyBub3QgYWZmZWN0IHByaW9yIHNuYXBzaG90c1wiLCAoKSA9PiB7XG4gICAgY29uc3QgbWdyID0gbmV3IFNuYXBzaG90TWFuYWdlcigxKTtcbiAgICBjb25zdCBmYWN0czE6IEZhY3RSZWNvcmRbXSA9IFt7IGlkOiBta0lkKDEpLCBhdHRyOiBcImhwXCIsIHZhbHVlOiAxMDAgfV07XG4gICAgbWdyLm9uVGljayhmYWN0czEsIDEpO1xuICAgIC8vIFNpbXVsYXRlIFdNIGV2b2x1dGlvbjogZGlmZmVyZW50IGZhY3RzIGFycmF5XG4gICAgY29uc3QgZmFjdHMyOiBGYWN0UmVjb3JkW10gPSBbeyBpZDogbWtJZCgxKSwgYXR0cjogXCJocFwiLCB2YWx1ZTogNTAgfV07XG4gICAgbWdyLm9uVGljayhmYWN0czIsIDIpO1xuXG4gICAgY29uc3Qgc25hcDEgPSBtZ3IuZ2V0QWxsU25hcHNob3RzKClbMF0hO1xuICAgIGNvbnN0IHNuYXAyID0gbWdyLmdldEFsbFNuYXBzaG90cygpWzFdITtcbiAgICBleHBlY3Qoc25hcDEuZmFjdHMuZ2V0KG1rSWQoMSkpPy5nZXQoXCJocFwiKSkudG9CZSgxMDApO1xuICAgIGV4cGVjdChzbmFwMi5mYWN0cy5nZXQobWtJZCgxKSk/LmdldChcImhwXCIpKS50b0JlKDUwKTtcbiAgfSk7XG5cbiAgaXQoXCJjbGVhcigpIHJlc2V0cyBzdGF0ZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgbWdyID0gbmV3IFNuYXBzaG90TWFuYWdlcigyKTtcbiAgICBtZ3Iub25UaWNrKG1rRmFjdHMoMSksIDEpO1xuICAgIG1nci5vblRpY2sobWtGYWN0cygxKSwgMik7XG4gICAgZXhwZWN0KG1nci5zbmFwc2hvdENvdW50KS50b0JlKDEpO1xuICAgIG1nci5jbGVhcigpO1xuICAgIGV4cGVjdChtZ3Iuc25hcHNob3RDb3VudCkudG9CZSgwKTtcbiAgICBleHBlY3QobWdyLnRpY2tDb3VudCkudG9CZSgwKTtcbiAgfSk7XG59KTtcbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9yZXRlL3NyYy9zbmFwc2hvdC50ZXN0LnRzIn0= diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/0ea38dec87b7a66a8ca65094b63b807345b2997f b/IJGn1F-WxLUCbfU1lu8pU/ssr/0ea38dec87b7a66a8ca65094b63b807345b2997f deleted file mode 100644 index ce4afc3..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/0ea38dec87b7a66a8ca65094b63b807345b2997f +++ /dev/null @@ -1,17 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "orderActivations", { enumerable: true, configurable: true, get(){ try { return orderActivations } catch {} }}); -function orderActivations(activations) { - return [...activations].sort((a, b) => { - if (b.rule.salience !== a.rule.salience) { - return b.rule.salience - a.rule.salience; - }; - const specA = a.rule.conditions.length; - const specB = b.rule.conditions.length; - if (specB !== specA) { - return specB - specA; - }; - return a.rule.addedAt - b.rule.addedAt; - }); -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQWlFTyxTQUFTLGlCQUNkLGFBQ2M7QUFDZCxTQUFPLENBQUMsR0FBRyxXQUFXLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTTtBQUVyQyxRQUFJLEVBQUUsS0FBSyxhQUFhLEVBQUUsS0FBSyxVQUFVO0FBQ3ZDLGFBQU8sRUFBRSxLQUFLLFdBQVcsRUFBRSxLQUFLO0FBQUEsSUFDbEM7QUFFQSxVQUFNLFFBQVEsRUFBRSxLQUFLLFdBQVc7QUFDaEMsVUFBTSxRQUFRLEVBQUUsS0FBSyxXQUFXO0FBQ2hDLFFBQUksVUFBVSxPQUFPO0FBQ25CLGFBQU8sUUFBUTtBQUFBLElBQ2pCO0FBRUEsV0FBTyxFQUFFLEtBQUssVUFBVSxFQUFFLEtBQUs7QUFBQSxFQUNqQyxDQUFDO0FBQ0giLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImNvbmZsaWN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGV0ZXJtaW5pc3RpYyBjb25mbGljdCByZXNvbHV0aW9uIGZvciB0aGUgUmV0ZSBhZ2VuZGEuXG4gKlxuICogUGVyIGBwYWNrYWdlcy9yZXRlL1NQRUMubWQgwqdDb25mbGljdCBSZXNvbHV0aW9uYCwgcGVuZGluZyBydWxlIGFjdGl2YXRpb25zXG4gKiBtdXN0IGZpcmUgaW4gYSBzdGFibGUsIHJlcHJvZHVjaWJsZSBvcmRlciBkZXRlcm1pbmVkIGJ5IHRocmVlIGtleXMsIGFwcGxpZWRcbiAqIGluIHN0cmljdCBwcmlvcml0eTpcbiAqXG4gKiAgIDEuICoqU2FsaWVuY2UgZGVzY2VuZGluZyoqIOKAlCBoaWdoZXIgc2FsaWVuY2UgZmlyZXMgYmVmb3JlIGxvd2VyLlxuICogICAyLiAqKlNwZWNpZmljaXR5IGRlc2NlbmRpbmcqKiDigJQgdGhlIHJ1bGUgd2l0aCBtb3JlIExIUyBjb25kaXRpb25zIGZpcmVzXG4gKiAgICAgIGZpcnN0IHdoZW4gc2FsaWVuY2UgdGllcy4gVGhpcyBtYXRjaGVzIENMSVBTL0plc3MgY29udmVudGlvbnM6IGEgbW9yZVxuICogICAgICBzcGVjaWZpYyBtYXRjaCBpcyBwcmVmZXJyZWQgb3ZlciBhIGdlbmVyYWwgb25lLlxuICogICAzLiAqKkluc2VydGlvbiBvcmRlciBhc2NlbmRpbmcqKiDigJQgd2hlbiBzYWxpZW5jZSAqYW5kKiBzcGVjaWZpY2l0eSB0aWUsXG4gKiAgICAgIHRoZSBydWxlIHJlZ2lzdGVyZWQgZWFybGllc3Qgd2l0aCB0aGUgc2Vzc2lvbiB3aW5zLiBgYWRkZWRBdGAgaXNcbiAqICAgICAgdGhlIHplcm8tYmFzZWQgaW5kZXggYXNzaWduZWQgYnkge0BsaW5rIFNlc3Npb24uYWRkfSBhdCByZWdpc3RyYXRpb25cbiAqICAgICAgdGltZS5cbiAqXG4gKiBUaGUgb3JkZXJpbmcgaXMgYSB0b3RhbCBvcmRlciDigJQgbm8ga2V5IHBlcm1pdHMgdGllcywgc28gdHdvIGFjdGl2YXRpb25zXG4gKiBjYW4gb25seSBjb21wYXJlIGVxdWFsIGlmIHRoZXkgc2hhcmUgc2FsaWVuY2UsIHNwZWNpZmljaXR5LCBBTkQgYWRkZWRBdCxcbiAqIHdoaWNoIGlzIGZvcmJpZGRlbiBhdCB0aGUgc2Vzc2lvbiBsZXZlbCAoZWFjaCBydWxlIGdldHMgYSB1bmlxdWUgaW5kZXgpLlxuICogRG93bnN0cmVhbSBjYWxsZXJzIHRoZXJlZm9yZSBkbyBub3QgbmVlZCBgQXJyYXkjc29ydGAgc3RhYmlsaXR5IGd1YXJhbnRlZXMuXG4gKlxuICoge0BsaW5rIG9yZGVyQWN0aXZhdGlvbnN9IGlzIGEgcHVyZSBmdW5jdGlvbjogaXQgYWxsb2NhdGVzIGEgZnJlc2ggYXJyYXlcbiAqIGFuZCBuZXZlciBtdXRhdGVzIGl0cyBpbnB1dC4gVGhpcyBpcyBsb2FkLWJlYXJpbmcgZm9yIHRoZSBpbnRlZ3JhdGlvblxuICogd2l0aCB0aGUgYWdlbmRhLCB3aGljaCBrZWVwcyB0aGUgcmF3IGFjdGl2YXRpb24gbGlzdCBhcm91bmQgYW5kIHJlcGVhdGVkbHlcbiAqIHJlLW9yZGVycyBhIHNuYXBzaG90LlxuICovXG5pbXBvcnQgdHlwZSB7IFRva2VuIH0gZnJvbSBcIi4vYmV0YS5qc1wiO1xuXG4vKipcbiAqIEEgcnVsZSBzaGFwZSBhY2NlcHRlZCBieSB7QGxpbmsgb3JkZXJBY3RpdmF0aW9uc30uXG4gKlxuICogVGhpcyBpbnRlbnRpb25hbGx5IG1pcnJvcnMge0BsaW5rIFJ1bGVEZWZpbml0aW9ufSBmcm9tIGBidWlsZGVyLnRzYCBidXRcbiAqIHRhZ3Mgb24gdGhlIGBhZGRlZEF0YCBpbnNlcnRpb24gaW5kZXggYXNzaWduZWQgYnkge0BsaW5rIFNlc3Npb24uYWRkfS5cbiAqIEl0IGlzIGtlcHQgc3RydWN0dXJhbGx5IGluZGVwZW5kZW50IG9mIGBSdWxlRGVmaW5pdGlvbmAgc28gdGhlIGNvbmZsaWN0XG4gKiBtb2R1bGUgaGFzIG5vIGNpcmN1bGFyIGRlcGVuZGVuY3kgb24gdGhlIGJ1aWxkZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3JkZXJhYmxlUnVsZSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgc2FsaWVuY2U6IG51bWJlcjtcbiAgcmVhZG9ubHkgY29uZGl0aW9uczogcmVhZG9ubHkgdW5rbm93bltdO1xuICByZWFkb25seSBoYW5kbGVyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFkZGVkQXQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBIHBlbmRpbmcgcnVsZSBmaXJpbmc6IHRoZSBydWxlIHRoYXQgbWF0Y2hlZCBwbHVzIHRoZSBmdWxsLW1hdGNoIHRva2VuLlxuICpcbiAqIEFjdGl2YXRpb25zIGFyZSBvcGFxdWUgdG8gdGhlIG9yZGVyaW5nIGZ1bmN0aW9uIOKAlCBvbmx5IGZpZWxkcyBvbiBgcnVsZWBcbiAqIGFyZSBpbnNwZWN0ZWQuIFRoZSBgdG9rZW5gIGlzIGNhcnJpZWQgdGhyb3VnaCBzbyB0aGUgYWdlbmRhIGNhbiBsYXRlclxuICogaW52b2tlIHRoZSBydWxlJ3MgaGFuZGxlciB3aXRoIHRoZSBjb3JyZWN0IGJpbmRpbmdzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjdGl2YXRpb24ge1xuICByZWFkb25seSBydWxlOiBPcmRlcmFibGVSdWxlO1xuICByZWFkb25seSB0b2tlbjogVG9rZW47XG59XG5cbi8qKlxuICogUmV0dXJuIGEgbmV3IGFycmF5IG9mIGFjdGl2YXRpb25zIGluIGZpcmluZyBvcmRlci5cbiAqXG4gKiBQdXJlOyBpbnB1dCBpcyBub3QgbXV0YXRlZC4gU2VlIG1vZHVsZS1sZXZlbCBkb2MgZm9yIHRoZSB0aHJlZSBvcmRlcmluZ1xuICoga2V5cy4gSW1wbGVtZW50ZWQgdmlhIGEgc2luZ2xlIGBBcnJheSNzb3J0YCB3aXRoIGEgbGV4aWNvZ3JhcGhpY1xuICogY29tcGFyYXRvciDigJQgYEFycmF5I3NvcnRgIGluIFY4L0pTQyBpcyBndWFyYW50ZWVkIHN0YWJsZSBzaW5jZSBFUzIwMTksXG4gKiBidXQgdGhpcyBjb21wYXJhdG9yIGFscmVhZHkgeWllbGRzIGEgdG90YWwgb3JkZXIgc28gc3RhYmlsaXR5IGlzXG4gKiByZWR1bmRhbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcmRlckFjdGl2YXRpb25zKFxuICBhY3RpdmF0aW9uczogcmVhZG9ubHkgQWN0aXZhdGlvbltdLFxuKTogQWN0aXZhdGlvbltdIHtcbiAgcmV0dXJuIFsuLi5hY3RpdmF0aW9uc10uc29ydCgoYSwgYikgPT4ge1xuICAgIC8vIDEuIFNhbGllbmNlIGRlc2NlbmRpbmcgKGhpZ2hlciBzYWxpZW5jZSBzb3J0cyBlYXJsaWVyKS5cbiAgICBpZiAoYi5ydWxlLnNhbGllbmNlICE9PSBhLnJ1bGUuc2FsaWVuY2UpIHtcbiAgICAgIHJldHVybiBiLnJ1bGUuc2FsaWVuY2UgLSBhLnJ1bGUuc2FsaWVuY2U7XG4gICAgfVxuICAgIC8vIDIuIFNwZWNpZmljaXR5IChudW1iZXIgb2YgTEhTIGNvbmRpdGlvbnMpIGRlc2NlbmRpbmcuXG4gICAgY29uc3Qgc3BlY0EgPSBhLnJ1bGUuY29uZGl0aW9ucy5sZW5ndGg7XG4gICAgY29uc3Qgc3BlY0IgPSBiLnJ1bGUuY29uZGl0aW9ucy5sZW5ndGg7XG4gICAgaWYgKHNwZWNCICE9PSBzcGVjQSkge1xuICAgICAgcmV0dXJuIHNwZWNCIC0gc3BlY0E7XG4gICAgfVxuICAgIC8vIDMuIEluc2VydGlvbiBvcmRlciBhc2NlbmRpbmcgKGVhcmxpZXItcmVnaXN0ZXJlZCBydWxlIHdpbnMpLlxuICAgIHJldHVybiBhLnJ1bGUuYWRkZWRBdCAtIGIucnVsZS5hZGRlZEF0O1xuICB9KTtcbn1cbiJdLCJmaWxlIjoiL3NyYy9jb25mbGljdC50cyJ9 diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/1503818afb959535b0bd54d07f910d5a5126f94f b/IJGn1F-WxLUCbfU1lu8pU/ssr/1503818afb959535b0bd54d07f910d5a5126f94f deleted file mode 100644 index b1416a3..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/1503818afb959535b0bd54d07f910d5a5126f94f +++ /dev/null @@ -1,57 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "Token", { enumerable: true, configurable: true, get(){ try { return Token } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "BetaMemory", { enumerable: true, configurable: true, get(){ try { return BetaMemory } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "BetaMemoryNode", { enumerable: true, configurable: true, get(){ try { return BetaMemory } catch {} }}); -class Token { - constructor(parent, fact, bindings) { - this.parent = parent; - this.fact = fact; - this.bindings = bindings; - } -}; -class BetaMemory { - /** Currently-active tokens, in insertion order. */ - tokens = []; - #activateListeners = []; - #deactivateListeners = []; - /** - * Accept a new partial match. - * - * The token is appended to {@link tokens} and all downstream activate - * listeners are invoked synchronously in registration order. Listeners see - * a memory view that already contains the new token. - */ - leftActivate(token) { - this.tokens.push(token); - for (const listener of this.#activateListeners) { - listener(token); - } - } - /** - * Withdraw a partial match. - * - * Removes the token by reference (first occurrence) if present. Always - * fires downstream deactivate listeners, even if the token was not found — - * downstream memories may still hold derived tokens that need to be - * withdrawn, and they perform their own presence checks. - */ - leftDeactivate(token) { - const idx = this.tokens.indexOf(token); - if (idx !== -1) { - this.tokens.splice(idx, 1); - }; - for (const listener of this.#deactivateListeners) { - listener(token); - } - } - /** Subscribe to left-activations. Listeners fire in registration order. */ - addDownstreamActivate(listener) { - this.#activateListeners.push(listener); - } - /** Subscribe to left-deactivations. Listeners fire in registration order. */ - addDownstreamDeactivate(listener) { - this.#deactivateListeners.push(listener); - } -}; - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7O0FBd0RPLE1BQU0sTUFBTTtBQUFBLEVBQ2pCLFlBRWtCLFFBRUEsTUFFQSxVQUNoQjtBQUxnQjtBQUVBO0FBRUE7QUFBQSxFQUNmO0FBQ0w7QUFvQk8sTUFBTSxXQUFXO0FBQUE7QUFBQSxFQUViLFNBQWtCLENBQUM7QUFBQSxFQUVuQixxQkFBOEMsQ0FBQztBQUFBLEVBQy9DLHVCQUFrRCxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVM1RCxhQUFhLE9BQW9CO0FBQy9CLFNBQUssT0FBTyxLQUFLLEtBQUs7QUFDdEIsZUFBVyxZQUFZLEtBQUssb0JBQW9CO0FBQzlDLGVBQVMsS0FBSztBQUFBLElBQ2hCO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVVBLGVBQWUsT0FBb0I7QUFDakMsVUFBTSxNQUFNLEtBQUssT0FBTyxRQUFRLEtBQUs7QUFDckMsUUFBSSxRQUFRLElBQUk7QUFDZCxXQUFLLE9BQU8sT0FBTyxLQUFLLENBQUM7QUFBQSxJQUMzQjtBQUNBLGVBQVcsWUFBWSxLQUFLLHNCQUFzQjtBQUNoRCxlQUFTLEtBQUs7QUFBQSxJQUNoQjtBQUFBLEVBQ0Y7QUFBQTtBQUFBLEVBR0Esc0JBQXNCLFVBQXVDO0FBQzNELFNBQUssbUJBQW1CLEtBQUssUUFBUTtBQUFBLEVBQ3ZDO0FBQUE7QUFBQSxFQUdBLHdCQUF3QixVQUF5QztBQUMvRCxTQUFLLHFCQUFxQixLQUFLLFFBQVE7QUFBQSxFQUN6QztBQUNGIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJiZXRhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQmV0YU1lbW9yeSBhbmQgVG9rZW4g4oCUIHBhcnRpYWwgbWF0Y2ggc3RvcmFnZSBmb3IgdGhlIFJldGUgYmV0YSBuZXR3b3JrLlxuICpcbiAqIFBlciBgcGFja2FnZXMvcmV0ZS9TUEVDLm1kIMKnUmV0ZSBJSSBSZWZlcmVuY2UgVGFyZ2V0YCB0aGlzIG1vZHVsZSBpbXBsZW1lbnRzXG4gKiB0aGUgQmV0YU1lbW9yeSBub2RlIHR5cGUgZnJvbSB0aGUgRG9vcmVuYm9zIGJldGEgbmV0d29yay5cbiAqXG4gKiBBIHtAbGluayBUb2tlbn0gcmVwcmVzZW50cyBhIHBhcnRpYWwgbWF0Y2g6IGEgZmFjdCBwbHVzIGEgcmVmZXJlbmNlIHRvIGFcbiAqIHBhcmVudCB0b2tlbiwgc28gdGhlIGZ1bGwgY2hhaW4gb2YgZmFjdHMgdGhhdCBjb250cmlidXRlZCB0byB0aGUgbWF0Y2ggaXNcbiAqIHJlY292ZXJlZCBieSB3YWxraW5nIGAucGFyZW50YCB0byBudWxsLiBUaGlzIG1pcnJvcnMgRG9vcmVuYm9zIMKnMi4zIGFuZFxuICoga2VlcHMgdG9rZW4gY29uc3RydWN0aW9uIE8oMSkg4oCUIG9ubHkgdGhlIG5ld2x5LWpvaW5lZCBmYWN0IGFuZCBpdHMgbWVyZ2VkXG4gKiBiaW5kaW5ncyBhcmUgYWxsb2NhdGVkIHBlciBsZXZlbCwgbmV2ZXIgdGhlIGZ1bGwgbGlzdC5cbiAqXG4gKiBBIHtAbGluayBCZXRhTWVtb3J5fSBzdG9yZXMgdGhlIHNldCBvZiBjdXJyZW50bHktYWN0aXZlIHRva2VucyBhbmRcbiAqIHByb3BhZ2F0ZXMgbGVmdC1hY3RpdmF0ZSAvIGxlZnQtZGVhY3RpdmF0ZSBub3RpZmljYXRpb25zIHRvIGRvd25zdHJlYW1cbiAqIHN1YnNjcmliZXJzLiBEb3duc3RyZWFtIG5vZGVzIGFyZSBleHBlY3RlZCB0byBiZSB7QGxpbmsgSm9pbk5vZGV9c1xuICogKGltcGxlbWVudGVkIGluIFAxLjgpIG9yIHtAbGluayBQcm9kdWN0aW9uTm9kZX1zOyB0aGlzIG1vZHVsZSBkb2VzIG5vdFxuICogY29uY2VybiBpdHNlbGYgd2l0aCBqb2luIHNlbWFudGljcy5cbiAqL1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBdHRyS2V5LCBGYWN0VmFsdWUgfSBmcm9tIFwiLi93bS5qc1wiO1xuXG4vKipcbiAqIFZhcmlhYmxlLWJpbmRpbmcgbWFwIGZvciBhIHRva2VuLlxuICpcbiAqIEtleXMgYXJlIHRoZSB2YXJpYWJsZSBuYW1lcyBkZWNsYXJlZCBpbiBhIHJ1bGUncyBjb25kaXRpb25zIChlLmcuIGBcImhwXCJgLFxuICogYFwiaWRcImApOyB2YWx1ZXMgYXJlIHRoZSBjb25jcmV0ZSBlbnRpdHkgaWRzIG9yIGZhY3QgdmFsdWVzIGJvdW5kIHRvIHRob3NlXG4gKiB2YXJpYWJsZXMgYXQgdGhpcyBwb2ludCBpbiB0aGUgcGFydGlhbCBtYXRjaC5cbiAqL1xuZXhwb3J0IHR5cGUgQmluZGluZ3MgPSBSZWNvcmQ8c3RyaW5nLCBFbnRpdHlJZCB8IEZhY3RWYWx1ZT47XG5cbi8qKlxuICogVGhlIGZhY3QgdHJpcGxlIHRoYXQgbW9zdCByZWNlbnRseSBleHRlbmRlZCBhIHRva2VuLlxuICpcbiAqIFRoaXMgbWlycm9ycyB0aGUgc2hhcGUgdXNlZCBieSB7QGxpbmsgQWxwaGFNZW1vcnl9IGFuZCB7QGxpbmsgV29ya2luZ01lbW9yeX1cbiAqIOKAlCB0aGUgYmV0YSBuZXR3b3JrIG5ldmVyIHJlLXdyYXBzIGZhY3RzLCBpdCBqdXN0IHJlZmVyZW5jZXMgdGhlbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb2tlbkZhY3Qge1xuICByZWFkb25seSBpZDogRW50aXR5SWQ7XG4gIHJlYWRvbmx5IGF0dHI6IEF0dHJLZXk7XG4gIHJlYWRvbmx5IHZhbHVlOiBGYWN0VmFsdWU7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgbm9kZSBpbiB0aGUgcGFydGlhbC1tYXRjaCBjaGFpbi5cbiAqXG4gKiBBIHJvb3QgdG9rZW4gaGFzIGBwYXJlbnQgPT09IG51bGxgIGFuZCByZXByZXNlbnRzIHRoZSBtYXRjaCBwcm9kdWNlZCBieSB0aGVcbiAqIGxlZnQtbW9zdCBjb25kaXRpb24gb2YgYSBydWxlLiBFYWNoIHN1YnNlcXVlbnQgc3VjY2Vzc2Z1bCBqb2luIGFwcGVuZHMgYVxuICogY2hpbGQgdG9rZW4gd2hvc2UgYHBhcmVudGAgcG9pbnRzIGF0IHRoZSBwcmV2aW91cyB0b2tlbiBpbiB0aGUgY2hhaW4sIGl0c1xuICogYGZhY3RgIGlzIHRoZSBuZXdseS1qb2luZWQgZmFjdCwgYW5kIGl0cyBgYmluZGluZ3NgIGFyZSB0aGUgbWVyZ2VkXG4gKiB2YXJpYWJsZSBiaW5kaW5ncyBhZnRlciBhcHBseWluZyB0aGUgbmV3IGZhY3QuXG4gKlxuICogVG9rZW5zIGFyZSBjb21wYXJlZCBieSByZWZlcmVuY2UgZXZlcnl3aGVyZSBpbiB0aGUgbmV0d29yayDigJQgdHdvIHRva2Vuc1xuICogY29uc3RydWN0ZWQgZnJvbSBzdHJ1Y3R1cmFsbHktaWRlbnRpY2FsIGFyZ3VtZW50cyBhcmUgTk9UIGNvbnNpZGVyZWQgZXF1YWwuXG4gKiBUaGlzIGxldHMgdGhlIGJldGEgbWVtb3J5IHVzZSBgQXJyYXkjaW5kZXhPZmAgZm9yIE8obikgcmVtb3ZhbCB3aXRob3V0XG4gKiB3b3JyeWluZyBhYm91dCBzdHJ1Y3R1cmFsLWhhc2ggY29sbGlzaW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRva2VuIHtcbiAgY29uc3RydWN0b3IoXG4gICAgLyoqIFBhcmVudCB0b2tlbiBpbiB0aGUgbWF0Y2ggY2hhaW4sIG9yIGBudWxsYCBmb3IgYSByb290IHRva2VuLiAqL1xuICAgIHB1YmxpYyByZWFkb25seSBwYXJlbnQ6IFRva2VuIHwgbnVsbCxcbiAgICAvKiogVGhlIGZhY3QgdGhhdCBleHRlbmRlZCB0aGUgbWF0Y2ggYXQgdGhpcyBsZXZlbC4gKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZmFjdDogVG9rZW5GYWN0LFxuICAgIC8qKiBBY2N1bXVsYXRlZCB2YXJpYWJsZSBiaW5kaW5ncyB1cCB0byBhbmQgaW5jbHVkaW5nIHRoaXMgdG9rZW4uICovXG4gICAgcHVibGljIHJlYWRvbmx5IGJpbmRpbmdzOiBCaW5kaW5ncyxcbiAgKSB7fVxufVxuXG4vKiogRG93bnN0cmVhbSBzdWJzY3JpYmVyIGZpcmVkIGFmdGVyIGEgdG9rZW4gZW50ZXJzIGJldGEgbWVtb3J5LiAqL1xudHlwZSBUb2tlbkFjdGl2YXRlTGlzdGVuZXIgPSAodG9rZW46IFRva2VuKSA9PiB2b2lkO1xuLyoqIERvd25zdHJlYW0gc3Vic2NyaWJlciBmaXJlZCBhZnRlciBhIHRva2VuIGxlYXZlcyBiZXRhIG1lbW9yeS4gKi9cbnR5cGUgVG9rZW5EZWFjdGl2YXRlTGlzdGVuZXIgPSAodG9rZW46IFRva2VuKSA9PiB2b2lkO1xuXG4vKipcbiAqIEJldGEtbmV0d29yayBtZW1vcnkgbm9kZS5cbiAqXG4gKiBTdG9yZXMgdGhlIHNldCBvZiBwYXJ0aWFsIG1hdGNoZXMgKHRva2VucykgdGhhdCBoYXZlIHJlYWNoZWQgdGhpcyBwb2ludCBpblxuICogdGhlIG5ldHdvcmsgYW5kIGZvcndhcmRzIGxlZnQtYWN0aXZhdGlvbnMgLyBsZWZ0LWRlYWN0aXZhdGlvbnMgdG9cbiAqIGRvd25zdHJlYW0gc3Vic2NyaWJlcnMgaW4gcmVnaXN0cmF0aW9uIG9yZGVyLlxuICpcbiAqIFRoZSBwdWJsaWMgYHRva2Vuc2AgYXJyYXkgaXMgZGVjbGFyZWQgYHJlYWRvbmx5YCBzbyBleHRlcm5hbCBjb2RlIGNhbm5vdFxuICogcmVhc3NpZ24gaXQsIGJ1dCBpdHMgY29udGVudHMgYXJlIG11dGF0ZWQgYnkgdGhlIG1lbW9yeSBpdHNlbGYgb25cbiAqIHtAbGluayBsZWZ0QWN0aXZhdGV9IC8ge0BsaW5rIGxlZnREZWFjdGl2YXRlfS4gVGVzdHMgcmVseSBvbiBwb3NpdGlvbmFsXG4gKiBhY2Nlc3MgKGB0b2tlbnNbMF1gKSwgc28gdGhlIGFycmF5IGlzIGludGVudGlvbmFsbHkgbGVmdCBpbmRleGFibGUgcmF0aGVyXG4gKiB0aGFuIHdyYXBwZWQgaW4gYSBgU2V0YCBvciBoaWRkZW4gYmVoaW5kIGEgbWV0aG9kLlxuICovXG5leHBvcnQgY2xhc3MgQmV0YU1lbW9yeSB7XG4gIC8qKiBDdXJyZW50bHktYWN0aXZlIHRva2VucywgaW4gaW5zZXJ0aW9uIG9yZGVyLiAqL1xuICByZWFkb25seSB0b2tlbnM6IFRva2VuW10gPSBbXTtcblxuICByZWFkb25seSAjYWN0aXZhdGVMaXN0ZW5lcnM6IFRva2VuQWN0aXZhdGVMaXN0ZW5lcltdID0gW107XG4gIHJlYWRvbmx5ICNkZWFjdGl2YXRlTGlzdGVuZXJzOiBUb2tlbkRlYWN0aXZhdGVMaXN0ZW5lcltdID0gW107XG5cbiAgLyoqXG4gICAqIEFjY2VwdCBhIG5ldyBwYXJ0aWFsIG1hdGNoLlxuICAgKlxuICAgKiBUaGUgdG9rZW4gaXMgYXBwZW5kZWQgdG8ge0BsaW5rIHRva2Vuc30gYW5kIGFsbCBkb3duc3RyZWFtIGFjdGl2YXRlXG4gICAqIGxpc3RlbmVycyBhcmUgaW52b2tlZCBzeW5jaHJvbm91c2x5IGluIHJlZ2lzdHJhdGlvbiBvcmRlci4gTGlzdGVuZXJzIHNlZVxuICAgKiBhIG1lbW9yeSB2aWV3IHRoYXQgYWxyZWFkeSBjb250YWlucyB0aGUgbmV3IHRva2VuLlxuICAgKi9cbiAgbGVmdEFjdGl2YXRlKHRva2VuOiBUb2tlbik6IHZvaWQge1xuICAgIHRoaXMudG9rZW5zLnB1c2godG9rZW4pO1xuICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy4jYWN0aXZhdGVMaXN0ZW5lcnMpIHtcbiAgICAgIGxpc3RlbmVyKHRva2VuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2l0aGRyYXcgYSBwYXJ0aWFsIG1hdGNoLlxuICAgKlxuICAgKiBSZW1vdmVzIHRoZSB0b2tlbiBieSByZWZlcmVuY2UgKGZpcnN0IG9jY3VycmVuY2UpIGlmIHByZXNlbnQuIEFsd2F5c1xuICAgKiBmaXJlcyBkb3duc3RyZWFtIGRlYWN0aXZhdGUgbGlzdGVuZXJzLCBldmVuIGlmIHRoZSB0b2tlbiB3YXMgbm90IGZvdW5kIOKAlFxuICAgKiBkb3duc3RyZWFtIG1lbW9yaWVzIG1heSBzdGlsbCBob2xkIGRlcml2ZWQgdG9rZW5zIHRoYXQgbmVlZCB0byBiZVxuICAgKiB3aXRoZHJhd24sIGFuZCB0aGV5IHBlcmZvcm0gdGhlaXIgb3duIHByZXNlbmNlIGNoZWNrcy5cbiAgICovXG4gIGxlZnREZWFjdGl2YXRlKHRva2VuOiBUb2tlbik6IHZvaWQge1xuICAgIGNvbnN0IGlkeCA9IHRoaXMudG9rZW5zLmluZGV4T2YodG9rZW4pO1xuICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICB0aGlzLnRva2Vucy5zcGxpY2UoaWR4LCAxKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNkZWFjdGl2YXRlTGlzdGVuZXJzKSB7XG4gICAgICBsaXN0ZW5lcih0b2tlbik7XG4gICAgfVxuICB9XG5cbiAgLyoqIFN1YnNjcmliZSB0byBsZWZ0LWFjdGl2YXRpb25zLiBMaXN0ZW5lcnMgZmlyZSBpbiByZWdpc3RyYXRpb24gb3JkZXIuICovXG4gIGFkZERvd25zdHJlYW1BY3RpdmF0ZShsaXN0ZW5lcjogVG9rZW5BY3RpdmF0ZUxpc3RlbmVyKTogdm9pZCB7XG4gICAgdGhpcy4jYWN0aXZhdGVMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICAvKiogU3Vic2NyaWJlIHRvIGxlZnQtZGVhY3RpdmF0aW9ucy4gTGlzdGVuZXJzIGZpcmUgaW4gcmVnaXN0cmF0aW9uIG9yZGVyLiAqL1xuICBhZGREb3duc3RyZWFtRGVhY3RpdmF0ZShsaXN0ZW5lcjogVG9rZW5EZWFjdGl2YXRlTGlzdGVuZXIpOiB2b2lkIHtcbiAgICB0aGlzLiNkZWFjdGl2YXRlTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG59XG5cbi8qKlxuICogQWxpYXMgZm9yIHtAbGluayBCZXRhTWVtb3J5fSB1c2VkIHdoZW4gdGhlIG1lbW9yeSBpcyBhIG5vZGUgaW4gdGhlIG5ldHdvcmtcbiAqIHdpcmluZyBncmFwaCAoYXMgZGlzdGluY3QgZnJvbSB0aGUgZHVtbXkgdG9wLW5vZGUgbWVtb3J5IHRoYXQgc2VlZHNcbiAqIGV2ZXJ5IHJ1bGUpLiBLZXB0IGFzIGEgc2VwYXJhdGUgZXhwb3J0IHNvIGRvd25zdHJlYW0gbW9kdWxlcyBjYW4gZG9jdW1lbnRcbiAqIGludGVudCB3aXRob3V0IGludHJvZHVjaW5nIGEgc3RydWN0dXJhbCBkaWZmZXJlbmNlLlxuICovXG5leHBvcnQgeyBCZXRhTWVtb3J5IGFzIEJldGFNZW1vcnlOb2RlIH07XG4iXSwiZmlsZSI6Ii9zcmMvYmV0YS50cyJ9 diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/165b76710a8d2c90c45e68d40dbc18f6b16628eb b/IJGn1F-WxLUCbfU1lu8pU/ssr/165b76710a8d2c90c45e68d40dbc18f6b16628eb deleted file mode 100644 index 7ae7390..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/165b76710a8d2c90c45e68d40dbc18f6b16628eb +++ /dev/null @@ -1,86 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("vitest", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/session.ts", {"importedNames":["Session"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/beta.ts", {"importedNames":["BetaMemory"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/beta.ts", {"importedNames":["Token"]}); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/join.ts", {"importedNames":["JoinNode"]}); -const __vite_ssr_import_5__ = await __vite_ssr_import__("/src/derived.ts", {"importedNames":["DerivedFactProduction"]}); -const ROOT_FACT = { id: 0, attr: "__root", value: null }; -function buildDerivedNetwork(handler) { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const alpha = session._getAlpha(); - const wm = session._getWM(); - const rootMem = new __vite_ssr_import_2__.BetaMemory(); - rootMem.leftActivate(new __vite_ssr_import_3__.Token(null, ROOT_FACT, {})); - const alphaX = alpha.buildNode({ id: null, attr: "X" }); - const join = new __vite_ssr_import_4__.JoinNode(rootMem, alphaX.memory, [], "x", "eid"); - alphaX.onActivate((id, attr, value) => join.rightActivate(id, attr, value)); - alphaX.onDeactivate((id, attr, value) => join.rightDeactivate(id, attr, value)); - const derivedProd = new __vite_ssr_import_5__.DerivedFactProduction("deriveDouble", wm, handler); - join.addDownstreamActivate(derivedProd.leftActivate.bind(derivedProd)); - join.addDownstreamDeactivate(derivedProd.leftDeactivate.bind(derivedProd)); - return { session, wm }; -} -(0,__vite_ssr_import_0__.describe)("G3 — derived facts (truth maintenance)", () => { - (0,__vite_ssr_import_0__.it)("inserting a fact activates derived production and asserts Double=x*2 in WM", () => { - const { session, wm } = buildDerivedNetwork((b) => [ - { attr: "Double", value: b["x"] * 2 } - ]); - const e1 = session.nextId(); - session.insert(e1, "X", 5); - const allFacts = wm.allFacts(); - const doubleFact = allFacts.find((f) => f.attr === "Double"); - (0,__vite_ssr_import_0__.expect)(doubleFact).toBeDefined(); - (0,__vite_ssr_import_0__.expect)(doubleFact?.value).toBe(10); - }); - (0,__vite_ssr_import_0__.it)("derived entity id is negative (per SPEC §ID Authority)", () => { - const { session, wm } = buildDerivedNetwork((b) => [ - { attr: "Score", value: b["x"] } - ]); - const e1 = session.nextId(); - session.insert(e1, "X", 7); - const allFacts = wm.allFacts(); - const scoreFact = allFacts.find((f) => f.attr === "Score"); - (0,__vite_ssr_import_0__.expect)(scoreFact).toBeDefined(); - (0,__vite_ssr_import_0__.expect)(scoreFact?.id).toBeLessThan(0); - }); - (0,__vite_ssr_import_0__.it)("retracting the source fact retracts the derived fact (truth maintenance)", () => { - const { session, wm } = buildDerivedNetwork((b) => [ - { attr: "Double", value: b["x"] * 2 } - ]); - const e1 = session.nextId(); - session.insert(e1, "X", 5); - (0,__vite_ssr_import_0__.expect)(wm.allFacts().find((f) => f.attr === "Double")).toBeDefined(); - session.retract(e1, "X"); - (0,__vite_ssr_import_0__.expect)(wm.allFacts().find((f) => f.attr === "Double")).toBeUndefined(); - }); - (0,__vite_ssr_import_0__.it)("updating a fact retracts old derived and asserts new derived", () => { - const { session, wm } = buildDerivedNetwork((b) => [ - { attr: "Double", value: b["x"] * 2 } - ]); - const e1 = session.nextId(); - session.insert(e1, "X", 3); - (0,__vite_ssr_import_0__.expect)(wm.allFacts().find((f) => f.attr === "Double")?.value).toBe(6); - session.insert(e1, "X", 10); - const doubleFacts = wm.allFacts().filter((f) => f.attr === "Double"); - (0,__vite_ssr_import_0__.expect)(doubleFacts).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(doubleFacts[0]?.value).toBe(20); - }); - (0,__vite_ssr_import_0__.it)("two entities produce two independent derived facts with distinct negative ids", () => { - const { session, wm } = buildDerivedNetwork((b) => [ - { attr: "Double", value: b["x"] * 2 } - ]); - const e1 = session.nextId(); - const e2 = session.nextId(); - session.insert(e1, "X", 4); - session.insert(e2, "X", 8); - const doubles = wm.allFacts().filter((f) => f.attr === "Double"); - (0,__vite_ssr_import_0__.expect)(doubles).toHaveLength(2); - (0,__vite_ssr_import_0__.expect)(doubles.map((f) => f.value).sort((a, b) => a - b)).toEqual([8, 16]); - const ids = doubles.map((f) => f.id); - (0,__vite_ssr_import_0__.expect)(ids.every((id) => id < 0)).toBe(true); - (0,__vite_ssr_import_0__.expect)(ids[0]).not.toBe(ids[1]); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFnQixDQUFZLENBQUMsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7QUFFakcsVUFBTSxNQUFNLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFZO0FBQzdDLHFDQUFPLElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUk7QUFDM0MscUNBQU8sSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7QUFBQSxFQUNoQyxDQUFDO0FBQ0gsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiZzMtZGVyaXZlZC1mYWN0cy50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRzMg4oCUIERlcml2ZWQgZmFjdHMgKHRydXRoIG1haW50ZW5hbmNlKVxuICpcbiAqIFBhcmFydWxlcyBvcmlnaW46IHRlc3RzL3Rlc3QyLm5pbSBcImRlcml2ZWQgZmFjdHNcIiAodGhlbkZpbmFsbHkgYmxvY2spOlxuICogICBydWxlIGdldENoYXJhY3RlcihGYWN0KTpcbiAqICAgICB3aGF0OlxuICogICAgICAgKGlkLCBYLCB4KVxuICogICAgICAgKGlkLCBZLCB5KVxuICogICAgIHRoZW5GaW5hbGx5OlxuICogICAgICAgbGV0IGNoYXJzID0gc2Vzc2lvbi5xdWVyeUFsbCh0aGlzKVxuICogICAgICAgc2Vzc2lvbi5pbnNlcnQoRGVyaXZlZCwgQWxsQ2hhcmFjdGVycywgY2hhcnMpXG4gKlxuICogT3VyIGVxdWl2YWxlbnQgdXNlcyBEZXJpdmVkRmFjdFByb2R1Y3Rpb24sIHdoaWNoIGluc2VydHMgZGVyaXZlZCBmYWN0cyBpbnRvXG4gKiB3b3JraW5nIG1lbW9yeSB3aGVuIGEgbWF0Y2ggYWN0aXZhdGVzIGFuZCByZXRyYWN0cyB0aGVtIHdoZW4gaXQgd2l0aGRyYXdzLlxuICogRGVyaXZlZCBlbnRpdHkgaWRzIGFyZSBuZWdhdGl2ZSAocGVyIFNQRUMgwqdJRCBBdXRob3JpdHkpLlxuICpcbiAqIE5ldHdvcms6XG4gKiAgIHJvb3Qg4oaSIGpvaW4oYWxwaGFYKSDihpIgRGVyaXZlZEZhY3RQcm9kdWN0aW9uIChpbnNlcnRzIFwiRG91YmxlXCIgPSB4KjIgaW50byBXTSlcbiAqL1xuaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgeyBTZXNzaW9uIH0gZnJvbSBcIi4uLy4uL3NyYy9zZXNzaW9uLmpzXCI7XG5pbXBvcnQgeyBCZXRhTWVtb3J5IH0gZnJvbSBcIi4uLy4uL3NyYy9iZXRhLmpzXCI7XG5pbXBvcnQgeyBUb2tlbiB9IGZyb20gXCIuLi8uLi9zcmMvYmV0YS5qc1wiO1xuaW1wb3J0IHsgSm9pbk5vZGUgfSBmcm9tIFwiLi4vLi4vc3JjL2pvaW4uanNcIjtcbmltcG9ydCB7IERlcml2ZWRGYWN0UHJvZHVjdGlvbiB9IGZyb20gXCIuLi8uLi9zcmMvZGVyaXZlZC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuLi8uLi9zcmMvc2NoZW1hLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdzLCBUb2tlbkZhY3QgfSBmcm9tIFwiLi4vLi4vc3JjL2JldGEuanNcIjtcbmltcG9ydCB0eXBlIHsgRGVyaXZlZEZhY3QgfSBmcm9tIFwiLi4vLi4vc3JjL2Rlcml2ZWQuanNcIjtcblxuY29uc3QgUk9PVF9GQUNUOiBUb2tlbkZhY3QgPSB7IGlkOiAwIGFzIEVudGl0eUlkLCBhdHRyOiBcIl9fcm9vdFwiLCB2YWx1ZTogbnVsbCB9O1xuXG5mdW5jdGlvbiBidWlsZERlcml2ZWROZXR3b3JrKGhhbmRsZXI6IChiaW5kaW5nczogQmluZGluZ3MpID0+IHJlYWRvbmx5IERlcml2ZWRGYWN0W10pIHtcbiAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICBjb25zdCBhbHBoYSA9IHNlc3Npb24uX2dldEFscGhhKCk7XG4gIGNvbnN0IHdtID0gc2Vzc2lvbi5fZ2V0V00oKTtcblxuICBjb25zdCByb290TWVtID0gbmV3IEJldGFNZW1vcnkoKTtcbiAgcm9vdE1lbS5sZWZ0QWN0aXZhdGUobmV3IFRva2VuKG51bGwsIFJPT1RfRkFDVCwge30pKTtcblxuICBjb25zdCBhbHBoYVggPSBhbHBoYS5idWlsZE5vZGUoeyBpZDogbnVsbCwgYXR0cjogXCJYXCIgfSk7XG4gIGNvbnN0IGpvaW4gPSBuZXcgSm9pbk5vZGUocm9vdE1lbSwgYWxwaGFYLm1lbW9yeSwgW10sIFwieFwiLCBcImVpZFwiKTtcbiAgYWxwaGFYLm9uQWN0aXZhdGUoKGlkLCBhdHRyLCB2YWx1ZSkgPT4gam9pbi5yaWdodEFjdGl2YXRlKGlkLCBhdHRyLCB2YWx1ZSkpO1xuICBhbHBoYVgub25EZWFjdGl2YXRlKChpZCwgYXR0ciwgdmFsdWUpID0+IGpvaW4ucmlnaHREZWFjdGl2YXRlKGlkLCBhdHRyLCB2YWx1ZSkpO1xuXG4gIGNvbnN0IGRlcml2ZWRQcm9kID0gbmV3IERlcml2ZWRGYWN0UHJvZHVjdGlvbihcImRlcml2ZURvdWJsZVwiLCB3bSwgaGFuZGxlcik7XG4gIGpvaW4uYWRkRG93bnN0cmVhbUFjdGl2YXRlKGRlcml2ZWRQcm9kLmxlZnRBY3RpdmF0ZS5iaW5kKGRlcml2ZWRQcm9kKSk7XG4gIGpvaW4uYWRkRG93bnN0cmVhbURlYWN0aXZhdGUoZGVyaXZlZFByb2QubGVmdERlYWN0aXZhdGUuYmluZChkZXJpdmVkUHJvZCkpO1xuXG4gIHJldHVybiB7IHNlc3Npb24sIHdtIH07XG59XG5cbmRlc2NyaWJlKFwiRzMg4oCUIGRlcml2ZWQgZmFjdHMgKHRydXRoIG1haW50ZW5hbmNlKVwiLCAoKSA9PiB7XG4gIGl0KFwiaW5zZXJ0aW5nIGEgZmFjdCBhY3RpdmF0ZXMgZGVyaXZlZCBwcm9kdWN0aW9uIGFuZCBhc3NlcnRzIERvdWJsZT14KjIgaW4gV01cIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgc2Vzc2lvbiwgd20gfSA9IGJ1aWxkRGVyaXZlZE5ldHdvcmsoKGIpID0+IFtcbiAgICAgIHsgYXR0cjogXCJEb3VibGVcIiwgdmFsdWU6IChiW1wieFwiXSBhcyBudW1iZXIpICogMiB9LFxuICAgIF0pO1xuXG4gICAgY29uc3QgZTEgPSBzZXNzaW9uLm5leHRJZCgpO1xuICAgIHNlc3Npb24uaW5zZXJ0KGUxLCBcIlhcIiwgNSk7XG5cbiAgICBjb25zdCBhbGxGYWN0cyA9IHdtLmFsbEZhY3RzKCk7XG4gICAgY29uc3QgZG91YmxlRmFjdCA9IGFsbEZhY3RzLmZpbmQoKGYpID0+IGYuYXR0ciA9PT0gXCJEb3VibGVcIik7XG4gICAgZXhwZWN0KGRvdWJsZUZhY3QpLnRvQmVEZWZpbmVkKCk7XG4gICAgZXhwZWN0KGRvdWJsZUZhY3Q/LnZhbHVlKS50b0JlKDEwKTtcbiAgfSk7XG5cbiAgaXQoXCJkZXJpdmVkIGVudGl0eSBpZCBpcyBuZWdhdGl2ZSAocGVyIFNQRUMgwqdJRCBBdXRob3JpdHkpXCIsICgpID0+IHtcbiAgICBjb25zdCB7IHNlc3Npb24sIHdtIH0gPSBidWlsZERlcml2ZWROZXR3b3JrKChiKSA9PiBbXG4gICAgICB7IGF0dHI6IFwiU2NvcmVcIiwgdmFsdWU6IGJbXCJ4XCJdIH0sXG4gICAgXSk7XG5cbiAgICBjb25zdCBlMSA9IHNlc3Npb24ubmV4dElkKCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoZTEsIFwiWFwiLCA3KTtcblxuICAgIGNvbnN0IGFsbEZhY3RzID0gd20uYWxsRmFjdHMoKTtcbiAgICBjb25zdCBzY29yZUZhY3QgPSBhbGxGYWN0cy5maW5kKChmKSA9PiBmLmF0dHIgPT09IFwiU2NvcmVcIik7XG4gICAgZXhwZWN0KHNjb3JlRmFjdCkudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3Qoc2NvcmVGYWN0Py5pZCBhcyBudW1iZXIpLnRvQmVMZXNzVGhhbigwKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXRyYWN0aW5nIHRoZSBzb3VyY2UgZmFjdCByZXRyYWN0cyB0aGUgZGVyaXZlZCBmYWN0ICh0cnV0aCBtYWludGVuYW5jZSlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgc2Vzc2lvbiwgd20gfSA9IGJ1aWxkRGVyaXZlZE5ldHdvcmsoKGIpID0+IFtcbiAgICAgIHsgYXR0cjogXCJEb3VibGVcIiwgdmFsdWU6IChiW1wieFwiXSBhcyBudW1iZXIpICogMiB9LFxuICAgIF0pO1xuXG4gICAgY29uc3QgZTEgPSBzZXNzaW9uLm5leHRJZCgpO1xuICAgIHNlc3Npb24uaW5zZXJ0KGUxLCBcIlhcIiwgNSk7XG4gICAgZXhwZWN0KHdtLmFsbEZhY3RzKCkuZmluZCgoZikgPT4gZi5hdHRyID09PSBcIkRvdWJsZVwiKSkudG9CZURlZmluZWQoKTtcblxuICAgIHNlc3Npb24ucmV0cmFjdChlMSwgXCJYXCIpO1xuICAgIGV4cGVjdCh3bS5hbGxGYWN0cygpLmZpbmQoKGYpID0+IGYuYXR0ciA9PT0gXCJEb3VibGVcIikpLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJ1cGRhdGluZyBhIGZhY3QgcmV0cmFjdHMgb2xkIGRlcml2ZWQgYW5kIGFzc2VydHMgbmV3IGRlcml2ZWRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgc2Vzc2lvbiwgd20gfSA9IGJ1aWxkRGVyaXZlZE5ldHdvcmsoKGIpID0+IFtcbiAgICAgIHsgYXR0cjogXCJEb3VibGVcIiwgdmFsdWU6IChiW1wieFwiXSBhcyBudW1iZXIpICogMiB9LFxuICAgIF0pO1xuXG4gICAgY29uc3QgZTEgPSBzZXNzaW9uLm5leHRJZCgpO1xuICAgIHNlc3Npb24uaW5zZXJ0KGUxLCBcIlhcIiwgMyk7IC8vIERvdWJsZSA9IDZcbiAgICBleHBlY3Qod20uYWxsRmFjdHMoKS5maW5kKChmKSA9PiBmLmF0dHIgPT09IFwiRG91YmxlXCIpPy52YWx1ZSkudG9CZSg2KTtcblxuICAgIHNlc3Npb24uaW5zZXJ0KGUxLCBcIlhcIiwgMTApOyAvLyBVcGRhdGUg4oaSIERvdWJsZSA9IDIwXG4gICAgY29uc3QgZG91YmxlRmFjdHMgPSB3bS5hbGxGYWN0cygpLmZpbHRlcigoZikgPT4gZi5hdHRyID09PSBcIkRvdWJsZVwiKTtcbiAgICBleHBlY3QoZG91YmxlRmFjdHMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICBleHBlY3QoZG91YmxlRmFjdHNbMF0/LnZhbHVlKS50b0JlKDIwKTtcbiAgfSk7XG5cbiAgaXQoXCJ0d28gZW50aXRpZXMgcHJvZHVjZSB0d28gaW5kZXBlbmRlbnQgZGVyaXZlZCBmYWN0cyB3aXRoIGRpc3RpbmN0IG5lZ2F0aXZlIGlkc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzZXNzaW9uLCB3bSB9ID0gYnVpbGREZXJpdmVkTmV0d29yaygoYikgPT4gW1xuICAgICAgeyBhdHRyOiBcIkRvdWJsZVwiLCB2YWx1ZTogKGJbXCJ4XCJdIGFzIG51bWJlcikgKiAyIH0sXG4gICAgXSk7XG5cbiAgICBjb25zdCBlMSA9IHNlc3Npb24ubmV4dElkKCk7XG4gICAgY29uc3QgZTIgPSBzZXNzaW9uLm5leHRJZCgpO1xuICAgIHNlc3Npb24uaW5zZXJ0KGUxLCBcIlhcIiwgNCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoZTIsIFwiWFwiLCA4KTtcblxuICAgIGNvbnN0IGRvdWJsZXMgPSB3bS5hbGxGYWN0cygpLmZpbHRlcigoZikgPT4gZi5hdHRyID09PSBcIkRvdWJsZVwiKTtcbiAgICBleHBlY3QoZG91YmxlcykudG9IYXZlTGVuZ3RoKDIpO1xuICAgIGV4cGVjdChkb3VibGVzLm1hcCgoZikgPT4gZi52YWx1ZSkuc29ydCgoYSwgYikgPT4gKGEgYXMgbnVtYmVyKSAtIChiIGFzIG51bWJlcikpKS50b0VxdWFsKFs4LCAxNl0pO1xuICAgIC8vIEFsbCBkZXJpdmVkIGlkcyBhcmUgbmVnYXRpdmUgYW5kIGRpc3RpbmN0XG4gICAgY29uc3QgaWRzID0gZG91Ymxlcy5tYXAoKGYpID0+IGYuaWQgYXMgbnVtYmVyKTtcbiAgICBleHBlY3QoaWRzLmV2ZXJ5KChpZCkgPT4gaWQgPCAwKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QoaWRzWzBdKS5ub3QudG9CZShpZHNbMV0pO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvdGVzdHMvZ29sZGVuL2czLWRlcml2ZWQtZmFjdHMudGVzdC50cyJ9 diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/16f29161648ac78d602063bb24ae2e8558f8f1ad b/IJGn1F-WxLUCbfU1lu8pU/ssr/16f29161648ac78d602063bb24ae2e8558f8f1ad deleted file mode 100644 index 845ca65..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/16f29161648ac78d602063bb24ae2e8558f8f1ad +++ /dev/null @@ -1,160 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "UnsafeNegationError", { enumerable: true, configurable: true, get(){ try { return UnsafeNegationError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "NegationNode", { enumerable: true, configurable: true, get(){ try { return NegationNode } catch {} }}); -class UnsafeNegationError extends Error { - constructor(unboundVar) { - super( - `UnsafeNegationError: variable "${unboundVar}" in NOT pattern is not bound by any preceding condition` - ); - this.name = "UnsafeNegationError"; - } -}; -class NegationNode { - #activateListeners = []; - #deactivateListeners = []; - /** - * Per-token block count: number of right facts currently satisfying the - * join tests for that token. A token passes downstream iff its count is - * zero. Absent = token unknown (never left-activated or already - * left-deactivated). - */ - #blockCount = /* @__PURE__ */ new Map(); - /** - * Tokens that are currently emitted downstream (count === 0 and not yet - * left-deactivated). Maintained in lock-step with {@link #blockCount} so - * that we know whether a deactivate transition actually needs to fire. - */ - #passingTokens = /* @__PURE__ */ new Set(); - /** - * Every left token we've seen and not yet deactivated, in insertion order. - * Right-side events iterate this to determine which counts to adjust. - * Kept as an array (not a Set) so iteration order is deterministic per - * SPEC.md §Iteration Order. - */ - #leftTokens = []; - #rightMemory; - #tests; - /** - * @param rightMemory Alpha memory supplying candidate blocking facts. - * @param tests Equality tests that a fact must satisfy (against the - * left token's bindings) to count as a blocker. An empty - * list means any fact in `rightMemory` blocks. - */ - constructor(rightMemory, tests) { - this.#rightMemory = rightMemory; - this.#tests = tests; - } - /** Subscribe to downstream activations. Listeners fire in registration order. */ - addDownstreamActivate(listener) { - this.#activateListeners.push(listener); - } - /** Subscribe to downstream deactivations. Listeners fire in registration order. */ - addDownstreamDeactivate(listener) { - this.#deactivateListeners.push(listener); - } - /** - * Accept a new left token. - * - * Computes the initial block count against the current right memory. If - * zero, the token is emitted downstream immediately; otherwise it is held - * in internal state until enough blockers are retracted to drop the count - * back to zero. - */ - leftActivate(token) { - this.#leftTokens.push(token); - const count = this.#countMatchingFacts(token); - this.#blockCount.set(token, count); - if (count === 0) { - this.#passingTokens.add(token); - for (const l of this.#activateListeners) l(token); - } - } - /** - * Withdraw a left token. - * - * Only fires downstream deactivate listeners if the token was currently - * passing — downstream never saw a blocked token, so retracting it would - * be a spurious event. - */ - leftDeactivate(token) { - const idx = this.#leftTokens.indexOf(token); - if (idx !== -1) this.#leftTokens.splice(idx, 1); - const wasPassing = this.#passingTokens.delete(token); - this.#blockCount.delete(token); - if (wasPassing) { - for (const l of this.#deactivateListeners) l(token); - } - } - /** - * Process a new right-side fact. - * - * For each known left token whose join tests pass with this fact, increment - * the block count. A 0→1 transition means the token just became blocked — - * fire downstream deactivate. - */ - rightActivate(id, _attr, value) { - for (const token of this.#leftTokens) { - if (!this.#factMatchesToken(token, id, value)) continue; - const prev = this.#blockCount.get(token) ?? 0; - this.#blockCount.set(token, prev + 1); - if (prev === 0 && this.#passingTokens.has(token)) { - this.#passingTokens.delete(token); - for (const l of this.#deactivateListeners) l(token); - } - } - } - /** - * Process a retracted right-side fact. - * - * For each known left token whose join tests pass with this fact, decrement - * the block count (clamped at zero against spurious retracts). A 1→0 - * transition means the token is newly unblocked — fire downstream activate. - */ - rightDeactivate(id, _attr, value) { - for (const token of this.#leftTokens) { - if (!this.#factMatchesToken(token, id, value)) continue; - const prev = this.#blockCount.get(token) ?? 0; - const next = prev > 0 ? prev - 1 : 0; - this.#blockCount.set(token, next); - if (prev === 1 && next === 0 && !this.#passingTokens.has(token)) { - this.#passingTokens.add(token); - for (const l of this.#activateListeners) l(token); - } - } - } - /** - * Count right facts that currently satisfy the join tests for `token`. - * - * Called only on {@link leftActivate} — incremental right-side events - * maintain the count thereafter. O(|rightMemory| · |tests|) per token. - */ - #countMatchingFacts(token) { - let count = 0; - for (const fact of this.#rightMemory.facts) { - if (this.#factMatchesToken(token, fact.id, fact.value)) count++; - }; - return count; - } - /** - * Test whether a right fact `(rightId, rightValue)` satisfies every join - * test against `token`. - * - * A missing `leftVar` binding fails the test — this mirrors {@link JoinNode} - * and protects against builder bugs that reference an unbound variable - * despite the {@link UnsafeNegationError} guard. - */ - #factMatchesToken(token, rightId, rightValue) { - for (const test of this.#tests) { - const leftVal = token.bindings[test.leftVar]; - if (leftVal === void 0) return false; - if (test.type === "idEquality") { - if (leftVal !== rightId) return false; - } else { - if (leftVal !== rightValue) return false; - } - }; - return true; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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S0FBSyxlQUFlLElBQUksS0FBSyxHQUFHO0FBQy9ELGFBQUssZUFBZSxJQUFJLEtBQUs7QUFDN0IsbUJBQVcsS0FBSyxLQUFLLG1CQUFvQixHQUFFLEtBQUs7QUFBQSxNQUNsRDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRQSxvQkFBb0IsT0FBc0I7QUFDeEMsUUFBSSxRQUFRO0FBQ1osZUFBVyxRQUFRLEtBQUssYUFBYSxPQUFPO0FBQzFDLFVBQUksS0FBSyxrQkFBa0IsT0FBTyxLQUFLLElBQUksS0FBSyxLQUFLLEVBQUc7QUFBQSxJQUMxRDtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVUEsa0JBQ0UsT0FDQSxTQUNBLFlBQ1M7QUFDVCxlQUFXLFFBQVEsS0FBSyxRQUFRO0FBQzlCLFlBQU0sVUFBVSxNQUFNLFNBQVMsS0FBSyxPQUFPO0FBQzNDLFVBQUksWUFBWSxPQUFXLFFBQU87QUFDbEMsVUFBSSxLQUFLLFNBQVMsY0FBYztBQUM5QixZQUFJLFlBQVksUUFBUyxRQUFPO0FBQUEsTUFDbEMsT0FBTztBQUVMLFlBQUksWUFBWSxXQUFZLFFBQU87QUFBQSxNQUNyQztBQUFBLElBQ0Y7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUNGIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJuZWdhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE5lZ2F0aW9uTm9kZSDigJQgTk9UIHBhdHRlcm4sIHBlciBEb29yZW5ib3MgMTk5NSDCpzIuNi4xLlxuICpcbiAqIEEgbmVnYXRpb24gbm9kZSBwYXNzZXMgYSBsZWZ0IHRva2VuIGRvd25zdHJlYW0gb25seSB3aGVuICoqemVybyoqIGZhY3RzIGluXG4gKiBpdHMgcmlnaHQge0BsaW5rIEFscGhhTWVtb3J5fSBzYXRpc2Z5IHRoZSBuZWdhdGVkIGNvbmRpdGlvbidzIGpvaW4gdGVzdHNcbiAqIGFnYWluc3QgdGhhdCB0b2tlbi4gQW55IG1hdGNoaW5nIGZhY3QgaW5oaWJpdHMgdGhlIHRva2VuLlxuICpcbiAqICMjIyBDb3VudC1iYXNlZCBib29ra2VlcGluZ1xuICpcbiAqIFRoZSBub2RlIG1haW50YWlucyBhIHBlci10b2tlbiBibG9jayBjb3VudDogaG93IG1hbnkgcmlnaHQgZmFjdHMgY3VycmVudGx5XG4gKiBzYXRpc2Z5IHRoZSBqb2luIHRlc3RzIGZvciB0aGF0IHRva2VuLiBBIHRva2VuIGlzIGRvd25zdHJlYW0tYWN0aXZlIGlmZiBpdHNcbiAqIGNvdW50IGlzIHplcm8uIFRoaXMgYXZvaWRzIHNjYW5uaW5nIHRoZSB3aG9sZSByaWdodCBtZW1vcnkgb24gZXZlcnkgcmlnaHQtXG4gKiBzaWRlIGV2ZW50IOKAlCBhIGNoYW5nZSBvbmx5IG5lZWRzIHRvIGluc3BlY3QgbGVmdCB0b2tlbnMgb25jZSwgYWRqdXN0IHRoZWlyXG4gKiBjb3VudHMsIGFuZCBmaXJlIGFjdGl2YXRlL2RlYWN0aXZhdGUgdHJhbnNpdGlvbnMgb24gdGhlIDDihpQxIGJvdW5kYXJ5LlxuICpcbiAqICMjIyBBY3RpdmF0aW9uIGZsb3dcbiAqXG4gKiAtICoqbGVmdEFjdGl2YXRlKHRva2VuKSoqOiBjb3VudCBtYXRjaGluZyByaWdodCBmYWN0cyBvbmNlOyBpZiB6ZXJvLCBlbWl0XG4gKiAgIGRvd25zdHJlYW0gYWN0aXZhdGUgaW1tZWRpYXRlbHksIGVsc2UgcmVjb3JkIHRoZSBjb3VudCBhbmQgc3RheSBxdWlldC5cbiAqIC0gKipsZWZ0RGVhY3RpdmF0ZSh0b2tlbikqKjogZm9yZ2V0IHRoZSB0b2tlbjsgaWYgaXQgd2FzIGN1cnJlbnRseSBwYXNzaW5nLFxuICogICBmaXJlIGRvd25zdHJlYW0gZGVhY3RpdmF0ZS4gTm8tb3AgZm9yIGJsb2NrZWQgdG9rZW5zIOKAlCBkb3duc3RyZWFtIG5ldmVyXG4gKiAgIHNhdyB0aGVtLlxuICogLSAqKnJpZ2h0QWN0aXZhdGUoZmFjdCkqKjogZm9yIGVhY2ggbGVmdCB0b2tlbiB3aG9zZSBqb2luIHRlc3RzIHBhc3Mgd2l0aFxuICogICB0aGlzIGZhY3QsIGluY3JlbWVudCBjb3VudC4gSWYgdGhlIGNvdW50IHRyYW5zaXRpb25zIDDihpIxLCBmaXJlIGRvd25zdHJlYW1cbiAqICAgZGVhY3RpdmF0ZSAodGhlIHRva2VuIHdhcyBwYXNzaW5nIGFuZCBpcyBub3cgYmxvY2tlZCkuXG4gKiAtICoqcmlnaHREZWFjdGl2YXRlKGZhY3QpKio6IGZvciBlYWNoIGxlZnQgdG9rZW4gd2hvc2Ugam9pbiB0ZXN0cyBwYXNzIHdpdGhcbiAqICAgdGhpcyBmYWN0LCBkZWNyZW1lbnQgY291bnQgKGNsYW1wZWQgYXQgMCkuIElmIHRoZSBjb3VudCB0cmFuc2l0aW9ucyAx4oaSMCxcbiAqICAgZmlyZSBkb3duc3RyZWFtIGFjdGl2YXRlLlxuICpcbiAqICMjIyBVbnNhZmUgTk9UXG4gKlxuICogQSBuZWdhdGVkIGNvbmRpdGlvbiByZWZlcmVuY2luZyBhIHZhcmlhYmxlIHRoYXQgaXMgbm90IGJvdW5kIGluIHRoZSBsZWZ0XG4gKiB0b2tlbiBpcyBcInVuc2FmZVwiIChEb29yZW5ib3MgwqcyLjYuMSkg4oCUIHRoZSBtYXRjaCBzZXQgaXMgdW5ib3VuZGVkLiBXZVxuICogZXhwb3NlIHtAbGluayBVbnNhZmVOZWdhdGlvbkVycm9yfSBmb3IgdGhlIHJ1bGUgYnVpbGRlciB0byB0aHJvdyB3aGVuIGl0XG4gKiBkZXRlY3RzIHRoaXMgc3RhdGljYWxseS4gVGhlIG5vZGUgaXRzZWxmIGFjY2VwdHMgYW55IHtAbGluayBKb2luVGVzdH0gbGlzdFxuICogYXQgY29uc3RydWN0aW9uOyBkZXRlY3Rpb24gbGl2ZXMgYXQgcnVsZS1idWlsZCB0aW1lIHdoZXJlIHRoZSBib3VuZC1cbiAqIHZhcmlhYmxlIHNldCBpcyBrbm93bi5cbiAqL1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBdHRyS2V5LCBGYWN0VmFsdWUgfSBmcm9tIFwiLi93bS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBUb2tlbiB9IGZyb20gXCIuL2JldGEuanNcIjtcbmltcG9ydCB0eXBlIHsgQWxwaGFNZW1vcnkgfSBmcm9tIFwiLi9hbHBoYS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBKb2luVGVzdCB9IGZyb20gXCIuL2pvaW4uanNcIjtcblxuLyoqXG4gKiBUaHJvd24gYnkgdGhlIHJ1bGUgYnVpbGRlciB3aGVuIGEgbmVnYXRlZCBjb25kaXRpb24gcmVmZXJlbmNlcyBhIHZhcmlhYmxlXG4gKiB0aGF0IGlzIG5vdCBib3VuZCBieSBhbnkgZWFybGllciAocG9zaXRpdmUpIGNvbmRpdGlvbiBpbiB0aGUgcnVsZS5cbiAqXG4gKiBUaGUgbm9kZSBpdHNlbGYgZG9lcyBub3QgdGhyb3cgdGhpcyDigJQgaXQgaGFzIG5vIHZpc2liaWxpdHkgaW50byB0aGUgZnVsbFxuICogcnVsZSdzIGJpbmRpbmcgc2V0LiBUaGUgZXJyb3IgdHlwZSBsaXZlcyBoZXJlIHNvIHRoZSBidWlsZGVyIGNhbiByZXBvcnRcbiAqIGl0IHdpdGggYSBjb25zaXN0ZW50IG5hbWUgYW5kIGNhbGxlcnMgY2FuIGNhdGNoIGl0IHNwZWNpZmljYWxseS5cbiAqL1xuZXhwb3J0IGNsYXNzIFVuc2FmZU5lZ2F0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHVuYm91bmRWYXI6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgYFVuc2FmZU5lZ2F0aW9uRXJyb3I6IHZhcmlhYmxlIFwiJHt1bmJvdW5kVmFyfVwiIGluIE5PVCBwYXR0ZXJuIGlzIG5vdCBib3VuZCBieSBhbnkgcHJlY2VkaW5nIGNvbmRpdGlvbmAsXG4gICAgKTtcbiAgICB0aGlzLm5hbWUgPSBcIlVuc2FmZU5lZ2F0aW9uRXJyb3JcIjtcbiAgfVxufVxuXG4vKiogRG93bnN0cmVhbSBzdWJzY3JpYmVyIGZpcmVkIHdoZW4gYSB0b2tlbiBiZWdpbnMgcGFzc2luZyAoY291bnQgaGl0IDApLiAqL1xudHlwZSBBY3RpdmF0ZUxpc3RlbmVyID0gKHRva2VuOiBUb2tlbikgPT4gdm9pZDtcbi8qKiBEb3duc3RyZWFtIHN1YnNjcmliZXIgZmlyZWQgd2hlbiBhIHRva2VuIHN0b3BzIHBhc3NpbmcgKGNvdW50IGxlZnQgMCkuICovXG50eXBlIERlYWN0aXZhdGVMaXN0ZW5lciA9ICh0b2tlbjogVG9rZW4pID0+IHZvaWQ7XG5cbi8qKlxuICogQmV0YS1uZXR3b3JrIE5PVCBub2RlLlxuICpcbiAqIExlZnQgaW5wdXQ6IHRva2VucyBmcm9tIGFuIHVwc3RyZWFtIHtAbGluayBCZXRhTWVtb3J5fSAvIHtAbGluayBKb2luTm9kZX0uXG4gKiBSaWdodCBpbnB1dDogYW4ge0BsaW5rIEFscGhhTWVtb3J5fSBvZiBmYWN0cyB0aGF0IG1hdGNoIHRoZSBuZWdhdGVkIHBhdHRlcm4nc1xuICogY29uc3RhbnQgdGVzdHMuIFRoZSBub2RlIGRvZXMgbm90IHN1YnNjcmliZSB0byB0aGUgYWxwaGEgbWVtb3J5IGl0c2VsZiDigJRcbiAqIHRoZSBuZXR3b3JrIHdpcmluZyAodHlwaWNhbGx5IHRoZSBidWlsZGVyKSBjYWxscyB7QGxpbmsgcmlnaHRBY3RpdmF0ZX0gYW5kXG4gKiB7QGxpbmsgcmlnaHREZWFjdGl2YXRlfSB3aGVuIGFscGhhLW1lbW9yeSBtZW1iZXJzaGlwIGNoYW5nZXMuXG4gKlxuICogT3V0cHV0OiBhIHN1YnNldCBvZiBsZWZ0IHRva2VucyAobmV2ZXIgZXh0ZW5kZWQg4oCUIG5lZ2F0aW9uIGNvbnRyaWJ1dGVzIG5vXG4gKiBuZXcgYmluZGluZ3MpLCBlbWl0dGVkIHRvIHJlZ2lzdGVyZWQgZG93bnN0cmVhbSBhY3RpdmF0ZS9kZWFjdGl2YXRlXG4gKiBsaXN0ZW5lcnMgaW4gcmVnaXN0cmF0aW9uIG9yZGVyLlxuICovXG5leHBvcnQgY2xhc3MgTmVnYXRpb25Ob2RlIHtcbiAgcmVhZG9ubHkgI2FjdGl2YXRlTGlzdGVuZXJzOiBBY3RpdmF0ZUxpc3RlbmVyW10gPSBbXTtcbiAgcmVhZG9ubHkgI2RlYWN0aXZhdGVMaXN0ZW5lcnM6IERlYWN0aXZhdGVMaXN0ZW5lcltdID0gW107XG5cbiAgLyoqXG4gICAqIFBlci10b2tlbiBibG9jayBjb3VudDogbnVtYmVyIG9mIHJpZ2h0IGZhY3RzIGN1cnJlbnRseSBzYXRpc2Z5aW5nIHRoZVxuICAgKiBqb2luIHRlc3RzIGZvciB0aGF0IHRva2VuLiBBIHRva2VuIHBhc3NlcyBkb3duc3RyZWFtIGlmZiBpdHMgY291bnQgaXNcbiAgICogemVyby4gQWJzZW50ID0gdG9rZW4gdW5rbm93biAobmV2ZXIgbGVmdC1hY3RpdmF0ZWQgb3IgYWxyZWFkeVxuICAgKiBsZWZ0LWRlYWN0aXZhdGVkKS5cbiAgICovXG4gIHJlYWRvbmx5ICNibG9ja0NvdW50ID0gbmV3IE1hcDxUb2tlbiwgbnVtYmVyPigpO1xuXG4gIC8qKlxuICAgKiBUb2tlbnMgdGhhdCBhcmUgY3VycmVudGx5IGVtaXR0ZWQgZG93bnN0cmVhbSAoY291bnQgPT09IDAgYW5kIG5vdCB5ZXRcbiAgICogbGVmdC1kZWFjdGl2YXRlZCkuIE1haW50YWluZWQgaW4gbG9jay1zdGVwIHdpdGgge0BsaW5rICNibG9ja0NvdW50fSBzb1xuICAgKiB0aGF0IHdlIGtub3cgd2hldGhlciBhIGRlYWN0aXZhdGUgdHJhbnNpdGlvbiBhY3R1YWxseSBuZWVkcyB0byBmaXJlLlxuICAgKi9cbiAgcmVhZG9ubHkgI3Bhc3NpbmdUb2tlbnMgPSBuZXcgU2V0PFRva2VuPigpO1xuXG4gIC8qKlxuICAgKiBFdmVyeSBsZWZ0IHRva2VuIHdlJ3ZlIHNlZW4gYW5kIG5vdCB5ZXQgZGVhY3RpdmF0ZWQsIGluIGluc2VydGlvbiBvcmRlci5cbiAgICogUmlnaHQtc2lkZSBldmVudHMgaXRlcmF0ZSB0aGlzIHRvIGRldGVybWluZSB3aGljaCBjb3VudHMgdG8gYWRqdXN0LlxuICAgKiBLZXB0IGFzIGFuIGFycmF5IChub3QgYSBTZXQpIHNvIGl0ZXJhdGlvbiBvcmRlciBpcyBkZXRlcm1pbmlzdGljIHBlclxuICAgKiBTUEVDLm1kIMKnSXRlcmF0aW9uIE9yZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgI2xlZnRUb2tlbnM6IFRva2VuW10gPSBbXTtcblxuICByZWFkb25seSAjcmlnaHRNZW1vcnk6IEFscGhhTWVtb3J5O1xuICByZWFkb25seSAjdGVzdHM6IHJlYWRvbmx5IEpvaW5UZXN0W107XG5cbiAgLyoqXG4gICAqIEBwYXJhbSByaWdodE1lbW9yeSBBbHBoYSBtZW1vcnkgc3VwcGx5aW5nIGNhbmRpZGF0ZSBibG9ja2luZyBmYWN0cy5cbiAgICogQHBhcmFtIHRlc3RzICAgICAgIEVxdWFsaXR5IHRlc3RzIHRoYXQgYSBmYWN0IG11c3Qgc2F0aXNmeSAoYWdhaW5zdCB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgIGxlZnQgdG9rZW4ncyBiaW5kaW5ncykgdG8gY291bnQgYXMgYSBibG9ja2VyLiBBbiBlbXB0eVxuICAgKiAgICAgICAgICAgICAgICAgICAgbGlzdCBtZWFucyBhbnkgZmFjdCBpbiBgcmlnaHRNZW1vcnlgIGJsb2Nrcy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJpZ2h0TWVtb3J5OiBBbHBoYU1lbW9yeSwgdGVzdHM6IHJlYWRvbmx5IEpvaW5UZXN0W10pIHtcbiAgICB0aGlzLiNyaWdodE1lbW9yeSA9IHJpZ2h0TWVtb3J5O1xuICAgIHRoaXMuI3Rlc3RzID0gdGVzdHM7XG4gIH1cblxuICAvKiogU3Vic2NyaWJlIHRvIGRvd25zdHJlYW0gYWN0aXZhdGlvbnMuIExpc3RlbmVycyBmaXJlIGluIHJlZ2lzdHJhdGlvbiBvcmRlci4gKi9cbiAgYWRkRG93bnN0cmVhbUFjdGl2YXRlKGxpc3RlbmVyOiBBY3RpdmF0ZUxpc3RlbmVyKTogdm9pZCB7XG4gICAgdGhpcy4jYWN0aXZhdGVMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICAvKiogU3Vic2NyaWJlIHRvIGRvd25zdHJlYW0gZGVhY3RpdmF0aW9ucy4gTGlzdGVuZXJzIGZpcmUgaW4gcmVnaXN0cmF0aW9uIG9yZGVyLiAqL1xuICBhZGREb3duc3RyZWFtRGVhY3RpdmF0ZShsaXN0ZW5lcjogRGVhY3RpdmF0ZUxpc3RlbmVyKTogdm9pZCB7XG4gICAgdGhpcy4jZGVhY3RpdmF0ZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY2NlcHQgYSBuZXcgbGVmdCB0b2tlbi5cbiAgICpcbiAgICogQ29tcHV0ZXMgdGhlIGluaXRpYWwgYmxvY2sgY291bnQgYWdhaW5zdCB0aGUgY3VycmVudCByaWdodCBtZW1vcnkuIElmXG4gICAqIHplcm8sIHRoZSB0b2tlbiBpcyBlbWl0dGVkIGRvd25zdHJlYW0gaW1tZWRpYXRlbHk7IG90aGVyd2lzZSBpdCBpcyBoZWxkXG4gICAqIGluIGludGVybmFsIHN0YXRlIHVudGlsIGVub3VnaCBibG9ja2VycyBhcmUgcmV0cmFjdGVkIHRvIGRyb3AgdGhlIGNvdW50XG4gICAqIGJhY2sgdG8gemVyby5cbiAgICovXG4gIGxlZnRBY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICB0aGlzLiNsZWZ0VG9rZW5zLnB1c2godG9rZW4pO1xuICAgIGNvbnN0IGNvdW50ID0gdGhpcy4jY291bnRNYXRjaGluZ0ZhY3RzKHRva2VuKTtcbiAgICB0aGlzLiNibG9ja0NvdW50LnNldCh0b2tlbiwgY291bnQpO1xuXG4gICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICB0aGlzLiNwYXNzaW5nVG9rZW5zLmFkZCh0b2tlbik7XG4gICAgICBmb3IgKGNvbnN0IGwgb2YgdGhpcy4jYWN0aXZhdGVMaXN0ZW5lcnMpIGwodG9rZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaXRoZHJhdyBhIGxlZnQgdG9rZW4uXG4gICAqXG4gICAqIE9ubHkgZmlyZXMgZG93bnN0cmVhbSBkZWFjdGl2YXRlIGxpc3RlbmVycyBpZiB0aGUgdG9rZW4gd2FzIGN1cnJlbnRseVxuICAgKiBwYXNzaW5nIOKAlCBkb3duc3RyZWFtIG5ldmVyIHNhdyBhIGJsb2NrZWQgdG9rZW4sIHNvIHJldHJhY3RpbmcgaXQgd291bGRcbiAgICogYmUgYSBzcHVyaW91cyBldmVudC5cbiAgICovXG4gIGxlZnREZWFjdGl2YXRlKHRva2VuOiBUb2tlbik6IHZvaWQge1xuICAgIGNvbnN0IGlkeCA9IHRoaXMuI2xlZnRUb2tlbnMuaW5kZXhPZih0b2tlbik7XG4gICAgaWYgKGlkeCAhPT0gLTEpIHRoaXMuI2xlZnRUb2tlbnMuc3BsaWNlKGlkeCwgMSk7XG5cbiAgICBjb25zdCB3YXNQYXNzaW5nID0gdGhpcy4jcGFzc2luZ1Rva2Vucy5kZWxldGUodG9rZW4pO1xuICAgIHRoaXMuI2Jsb2NrQ291bnQuZGVsZXRlKHRva2VuKTtcblxuICAgIGlmICh3YXNQYXNzaW5nKSB7XG4gICAgICBmb3IgKGNvbnN0IGwgb2YgdGhpcy4jZGVhY3RpdmF0ZUxpc3RlbmVycykgbCh0b2tlbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgYSBuZXcgcmlnaHQtc2lkZSBmYWN0LlxuICAgKlxuICAgKiBGb3IgZWFjaCBrbm93biBsZWZ0IHRva2VuIHdob3NlIGpvaW4gdGVzdHMgcGFzcyB3aXRoIHRoaXMgZmFjdCwgaW5jcmVtZW50XG4gICAqIHRoZSBibG9jayBjb3VudC4gQSAw4oaSMSB0cmFuc2l0aW9uIG1lYW5zIHRoZSB0b2tlbiBqdXN0IGJlY2FtZSBibG9ja2VkIOKAlFxuICAgKiBmaXJlIGRvd25zdHJlYW0gZGVhY3RpdmF0ZS5cbiAgICovXG4gIHJpZ2h0QWN0aXZhdGUoaWQ6IEVudGl0eUlkLCBfYXR0cjogQXR0cktleSwgdmFsdWU6IEZhY3RWYWx1ZSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy4jbGVmdFRva2Vucykge1xuICAgICAgaWYgKCF0aGlzLiNmYWN0TWF0Y2hlc1Rva2VuKHRva2VuLCBpZCwgdmFsdWUpKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IHByZXYgPSB0aGlzLiNibG9ja0NvdW50LmdldCh0b2tlbikgPz8gMDtcbiAgICAgIHRoaXMuI2Jsb2NrQ291bnQuc2V0KHRva2VuLCBwcmV2ICsgMSk7XG5cbiAgICAgIGlmIChwcmV2ID09PSAwICYmIHRoaXMuI3Bhc3NpbmdUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgICB0aGlzLiNwYXNzaW5nVG9rZW5zLmRlbGV0ZSh0b2tlbik7XG4gICAgICAgIGZvciAoY29uc3QgbCBvZiB0aGlzLiNkZWFjdGl2YXRlTGlzdGVuZXJzKSBsKHRva2VuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBhIHJldHJhY3RlZCByaWdodC1zaWRlIGZhY3QuXG4gICAqXG4gICAqIEZvciBlYWNoIGtub3duIGxlZnQgdG9rZW4gd2hvc2Ugam9pbiB0ZXN0cyBwYXNzIHdpdGggdGhpcyBmYWN0LCBkZWNyZW1lbnRcbiAgICogdGhlIGJsb2NrIGNvdW50IChjbGFtcGVkIGF0IHplcm8gYWdhaW5zdCBzcHVyaW91cyByZXRyYWN0cykuIEEgMeKGkjBcbiAgICogdHJhbnNpdGlvbiBtZWFucyB0aGUgdG9rZW4gaXMgbmV3bHkgdW5ibG9ja2VkIOKAlCBmaXJlIGRvd25zdHJlYW0gYWN0aXZhdGUuXG4gICAqL1xuICByaWdodERlYWN0aXZhdGUoaWQ6IEVudGl0eUlkLCBfYXR0cjogQXR0cktleSwgdmFsdWU6IEZhY3RWYWx1ZSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy4jbGVmdFRva2Vucykge1xuICAgICAgaWYgKCF0aGlzLiNmYWN0TWF0Y2hlc1Rva2VuKHRva2VuLCBpZCwgdmFsdWUpKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IHByZXYgPSB0aGlzLiNibG9ja0NvdW50LmdldCh0b2tlbikgPz8gMDtcbiAgICAgIGNvbnN0IG5leHQgPSBwcmV2ID4gMCA/IHByZXYgLSAxIDogMDtcbiAgICAgIHRoaXMuI2Jsb2NrQ291bnQuc2V0KHRva2VuLCBuZXh0KTtcblxuICAgICAgaWYgKHByZXYgPT09IDEgJiYgbmV4dCA9PT0gMCAmJiAhdGhpcy4jcGFzc2luZ1Rva2Vucy5oYXModG9rZW4pKSB7XG4gICAgICAgIHRoaXMuI3Bhc3NpbmdUb2tlbnMuYWRkKHRva2VuKTtcbiAgICAgICAgZm9yIChjb25zdCBsIG9mIHRoaXMuI2FjdGl2YXRlTGlzdGVuZXJzKSBsKHRva2VuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ291bnQgcmlnaHQgZmFjdHMgdGhhdCBjdXJyZW50bHkgc2F0aXNmeSB0aGUgam9pbiB0ZXN0cyBmb3IgYHRva2VuYC5cbiAgICpcbiAgICogQ2FsbGVkIG9ubHkgb24ge0BsaW5rIGxlZnRBY3RpdmF0ZX0g4oCUIGluY3JlbWVudGFsIHJpZ2h0LXNpZGUgZXZlbnRzXG4gICAqIG1haW50YWluIHRoZSBjb3VudCB0aGVyZWFmdGVyLiBPKHxyaWdodE1lbW9yeXwgwrcgfHRlc3RzfCkgcGVyIHRva2VuLlxuICAgKi9cbiAgI2NvdW50TWF0Y2hpbmdGYWN0cyh0b2tlbjogVG9rZW4pOiBudW1iZXIge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgZm9yIChjb25zdCBmYWN0IG9mIHRoaXMuI3JpZ2h0TWVtb3J5LmZhY3RzKSB7XG4gICAgICBpZiAodGhpcy4jZmFjdE1hdGNoZXNUb2tlbih0b2tlbiwgZmFjdC5pZCwgZmFjdC52YWx1ZSkpIGNvdW50Kys7XG4gICAgfVxuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgYSByaWdodCBmYWN0IGAocmlnaHRJZCwgcmlnaHRWYWx1ZSlgIHNhdGlzZmllcyBldmVyeSBqb2luXG4gICAqIHRlc3QgYWdhaW5zdCBgdG9rZW5gLlxuICAgKlxuICAgKiBBIG1pc3NpbmcgYGxlZnRWYXJgIGJpbmRpbmcgZmFpbHMgdGhlIHRlc3Qg4oCUIHRoaXMgbWlycm9ycyB7QGxpbmsgSm9pbk5vZGV9XG4gICAqIGFuZCBwcm90ZWN0cyBhZ2FpbnN0IGJ1aWxkZXIgYnVncyB0aGF0IHJlZmVyZW5jZSBhbiB1bmJvdW5kIHZhcmlhYmxlXG4gICAqIGRlc3BpdGUgdGhlIHtAbGluayBVbnNhZmVOZWdhdGlvbkVycm9yfSBndWFyZC5cbiAgICovXG4gICNmYWN0TWF0Y2hlc1Rva2VuKFxuICAgIHRva2VuOiBUb2tlbixcbiAgICByaWdodElkOiBFbnRpdHlJZCxcbiAgICByaWdodFZhbHVlOiBGYWN0VmFsdWUsXG4gICk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3QgdGVzdCBvZiB0aGlzLiN0ZXN0cykge1xuICAgICAgY29uc3QgbGVmdFZhbCA9IHRva2VuLmJpbmRpbmdzW3Rlc3QubGVmdFZhcl07XG4gICAgICBpZiAobGVmdFZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAodGVzdC50eXBlID09PSBcImlkRXF1YWxpdHlcIikge1xuICAgICAgICBpZiAobGVmdFZhbCAhPT0gcmlnaHRJZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdmFsdWVFcXVhbGl0eVxuICAgICAgICBpZiAobGVmdFZhbCAhPT0gcmlnaHRWYWx1ZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIl0sImZpbGUiOiIvc3JjL25lZ2F0aW9uLnRzIn0= diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/1cec8e63defb18f3dd708f4ca5744836d42c48a2 b/IJGn1F-WxLUCbfU1lu8pU/ssr/1cec8e63defb18f3dd708f4ca5744836d42c48a2 deleted file mode 100644 index b64dad9..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/1cec8e63defb18f3dd708f4ca5744836d42c48a2 +++ /dev/null @@ -1,102 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("vitest", {"importedNames":["describe","it","expect","vi"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/session.ts", {"importedNames":["Session"]}); -const mkId = (n) => n; -(0,__vite_ssr_import_0__.describe)("Session", () => { - (0,__vite_ssr_import_0__.describe)("constructor", () => { - (0,__vite_ssr_import_0__.it)("creates a session with autoFire false", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - (0,__vite_ssr_import_0__.expect)(session).toBeDefined(); - }); - (0,__vite_ssr_import_0__.it)("creates a session with autoFire true (default)", () => { - const session = new __vite_ssr_import_1__.Session(); - (0,__vite_ssr_import_0__.expect)(session).toBeDefined(); - }); - }); - (0,__vite_ssr_import_0__.describe)("nextId()", () => { - (0,__vite_ssr_import_0__.it)("returns incrementing EntityId values starting from 1", () => { - const session = new __vite_ssr_import_1__.Session(); - const id1 = session.nextId(); - const id2 = session.nextId(); - const id3 = session.nextId(); - (0,__vite_ssr_import_0__.expect)(id1).toBe(1); - (0,__vite_ssr_import_0__.expect)(id2).toBe(2); - (0,__vite_ssr_import_0__.expect)(id3).toBe(3); - }); - }); - (0,__vite_ssr_import_0__.describe)("insert() / retract() / get() / contains()", () => { - (0,__vite_ssr_import_0__.it)("insert stores a fact retrievable by get()", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const id = mkId(1); - session.insert(id, "Health", 100); - (0,__vite_ssr_import_0__.expect)(session.get(id, "Health")).toBe(100); - }); - (0,__vite_ssr_import_0__.it)("retract removes a fact", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - session.insert(mkId(1), "Health", 100); - session.retract(mkId(1), "Health"); - (0,__vite_ssr_import_0__.expect)(session.get(mkId(1), "Health")).toBeUndefined(); - }); - (0,__vite_ssr_import_0__.it)("contains() reflects fact presence", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - (0,__vite_ssr_import_0__.expect)(session.contains(mkId(5), "X")).toBe(false); - session.insert(mkId(5), "X", 42); - (0,__vite_ssr_import_0__.expect)(session.contains(mkId(5), "X")).toBe(true); - }); - }); - (0,__vite_ssr_import_0__.describe)("fireRules()", () => { - (0,__vite_ssr_import_0__.it)("returns 0 when no rules registered", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - session.insert(mkId(1), "Health", 100); - const fired = session.fireRules(); - (0,__vite_ssr_import_0__.expect)(fired).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("autoFire false: does NOT fire rules on insert", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const handler = __vite_ssr_import_0__.vi.fn(); - session.insert(mkId(1), "Health", 100); - (0,__vite_ssr_import_0__.expect)(handler).not.toHaveBeenCalled(); - }); - }); - (0,__vite_ssr_import_0__.describe)("allFacts()", () => { - (0,__vite_ssr_import_0__.it)("returns all facts sorted by [id, attr]", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - session.insert(mkId(2), "Z", "z"); - session.insert(mkId(1), "A", "a"); - const facts = session.allFacts(); - (0,__vite_ssr_import_0__.expect)(facts).toHaveLength(2); - (0,__vite_ssr_import_0__.expect)(facts[0]).toMatchObject({ id: 1, attr: "A" }); - (0,__vite_ssr_import_0__.expect)(facts[1]).toMatchObject({ id: 2, attr: "Z" }); - }); - }); - (0,__vite_ssr_import_0__.describe)("add() — stub for future rules", () => { - (0,__vite_ssr_import_0__.it)("add() exists and doesn't throw on no-op placeholder", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - (0,__vite_ssr_import_0__.expect)(() => session.add({ name: "placeholder" })).not.toThrow(); - }); - }); - (0,__vite_ssr_import_0__.describe)("package-internal wiring", () => { - (0,__vite_ssr_import_0__.it)("_getAlpha() / _getWM() expose the session's internal networks", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - (0,__vite_ssr_import_0__.expect)(session._getAlpha()).toBeDefined(); - (0,__vite_ssr_import_0__.expect)(session._getWM()).toBeDefined(); - }); - (0,__vite_ssr_import_0__.it)("WM insert events propagate to the AlphaNetwork", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const alpha = session._getAlpha(); - const node = alpha.buildNode({ id: null, attr: "Health" }); - session.insert(mkId(1), "Health", 100); - (0,__vite_ssr_import_0__.expect)(node.memory.facts).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(node.memory.facts[0]).toMatchObject({ id: 1, attr: "Health", value: 100 }); - session.retract(mkId(1), "Health"); - (0,__vite_ssr_import_0__.expect)(node.memory.facts).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("autoFire true: fireRules() runs on insert/retract (returns 0 stub)", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: true }); - (0,__vite_ssr_import_0__.expect)(() => session.insert(mkId(1), "Health", 100)).not.toThrow(); - (0,__vite_ssr_import_0__.expect)(() => session.retract(mkId(1), "Health")).not.toThrow(); - }); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LE9BQU8sS0FBSyxFQUFFLGFBQWEsQ0FBQztBQUN4Qyx1Q0FBTyxLQUFLLE9BQU8sTUFBTSxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsSUFBSSxHQUFHLE1BQU0sVUFBVSxPQUFPLElBQUksQ0FBQztBQUNoRixjQUFRLFFBQVEsS0FBSyxDQUFDLEdBQUcsUUFBUTtBQUNqQyx1Q0FBTyxLQUFLLE9BQU8sS0FBSyxFQUFFLGFBQWEsQ0FBQztBQUFBLElBQzFDLENBQUM7QUFFRCxpQ0FBRyxzRUFBc0UsTUFBTTtBQUM3RSxZQUFNLFVBQVUsSUFBSSw4QkFBUSxFQUFFLFVBQVUsS0FBSyxDQUFDO0FBRTlDLHVDQUFPLE1BQU0sUUFBUSxPQUFPLEtBQUssQ0FBQyxHQUFHLFVBQVUsR0FBRyxDQUFDLEVBQUUsSUFBSSxRQUFRO0FBQ2pFLHVDQUFPLE1BQU0sUUFBUSxRQUFRLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxFQUFFLElBQUksUUFBUTtBQUFBLElBQy9ELENBQUM7QUFBQSxFQUNILENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJzZXNzaW9uLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QsIHZpIH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gXCIuL3Nlc3Npb24uanNcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiLi9zY2hlbWEuanNcIjtcblxuY29uc3QgbWtJZCA9IChuOiBudW1iZXIpID0+IG4gYXMgRW50aXR5SWQ7XG5cbmRlc2NyaWJlKFwiU2Vzc2lvblwiLCAoKSA9PiB7XG4gIGRlc2NyaWJlKFwiY29uc3RydWN0b3JcIiwgKCkgPT4ge1xuICAgIGl0KFwiY3JlYXRlcyBhIHNlc3Npb24gd2l0aCBhdXRvRmlyZSBmYWxzZVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgICBleHBlY3Qoc2Vzc2lvbikudG9CZURlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwiY3JlYXRlcyBhIHNlc3Npb24gd2l0aCBhdXRvRmlyZSB0cnVlIChkZWZhdWx0KVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oKTtcbiAgICAgIGV4cGVjdChzZXNzaW9uKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIm5leHRJZCgpXCIsICgpID0+IHtcbiAgICBpdChcInJldHVybnMgaW5jcmVtZW50aW5nIEVudGl0eUlkIHZhbHVlcyBzdGFydGluZyBmcm9tIDFcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKCk7XG4gICAgICBjb25zdCBpZDEgPSBzZXNzaW9uLm5leHRJZCgpO1xuICAgICAgY29uc3QgaWQyID0gc2Vzc2lvbi5uZXh0SWQoKTtcbiAgICAgIGNvbnN0IGlkMyA9IHNlc3Npb24ubmV4dElkKCk7XG4gICAgICBleHBlY3QoaWQxKS50b0JlKDEpO1xuICAgICAgZXhwZWN0KGlkMikudG9CZSgyKTtcbiAgICAgIGV4cGVjdChpZDMpLnRvQmUoMyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiaW5zZXJ0KCkgLyByZXRyYWN0KCkgLyBnZXQoKSAvIGNvbnRhaW5zKClcIiwgKCkgPT4ge1xuICAgIGl0KFwiaW5zZXJ0IHN0b3JlcyBhIGZhY3QgcmV0cmlldmFibGUgYnkgZ2V0KClcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgICAgY29uc3QgaWQgPSBta0lkKDEpO1xuICAgICAgc2Vzc2lvbi5pbnNlcnQoaWQsIFwiSGVhbHRoXCIsIDEwMCk7XG4gICAgICBleHBlY3Qoc2Vzc2lvbi5nZXQoaWQsIFwiSGVhbHRoXCIpKS50b0JlKDEwMCk7XG4gICAgfSk7XG5cbiAgICBpdChcInJldHJhY3QgcmVtb3ZlcyBhIGZhY3RcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgICAgc2Vzc2lvbi5pbnNlcnQobWtJZCgxKSwgXCJIZWFsdGhcIiwgMTAwKTtcbiAgICAgIHNlc3Npb24ucmV0cmFjdChta0lkKDEpLCBcIkhlYWx0aFwiKTtcbiAgICAgIGV4cGVjdChzZXNzaW9uLmdldChta0lkKDEpLCBcIkhlYWx0aFwiKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJjb250YWlucygpIHJlZmxlY3RzIGZhY3QgcHJlc2VuY2VcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgICAgZXhwZWN0KHNlc3Npb24uY29udGFpbnMobWtJZCg1KSwgXCJYXCIpKS50b0JlKGZhbHNlKTtcbiAgICAgIHNlc3Npb24uaW5zZXJ0KG1rSWQoNSksIFwiWFwiLCA0Mik7XG4gICAgICBleHBlY3Qoc2Vzc2lvbi5jb250YWlucyhta0lkKDUpLCBcIlhcIikpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiZmlyZVJ1bGVzKClcIiwgKCkgPT4ge1xuICAgIGl0KFwicmV0dXJucyAwIHdoZW4gbm8gcnVsZXMgcmVnaXN0ZXJlZFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgICBzZXNzaW9uLmluc2VydChta0lkKDEpLCBcIkhlYWx0aFwiLCAxMDApO1xuICAgICAgY29uc3QgZmlyZWQgPSBzZXNzaW9uLmZpcmVSdWxlcygpO1xuICAgICAgZXhwZWN0KGZpcmVkKS50b0JlKDApO1xuICAgIH0pO1xuXG4gICAgaXQoXCJhdXRvRmlyZSBmYWxzZTogZG9lcyBOT1QgZmlyZSBydWxlcyBvbiBpbnNlcnRcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgICAgY29uc3QgaGFuZGxlciA9IHZpLmZuKCk7XG4gICAgICAvLyBXZSBjYW4ndCBhZGQgcmVhbCBydWxlcyB5ZXQgKHRoYXQncyBQMS41KyksIGJ1dCB3ZSBjYW4gc3R1YlxuICAgICAgLy8gRm9yIG5vdyBqdXN0IHZlcmlmeSBmaXJlUnVsZXMgcmV0dXJucyAwIHdpdGggbm8gcnVsZXNcbiAgICAgIHNlc3Npb24uaW5zZXJ0KG1rSWQoMSksIFwiSGVhbHRoXCIsIDEwMCk7XG4gICAgICBleHBlY3QoaGFuZGxlcikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJhbGxGYWN0cygpXCIsICgpID0+IHtcbiAgICBpdChcInJldHVybnMgYWxsIGZhY3RzIHNvcnRlZCBieSBbaWQsIGF0dHJdXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICAgIHNlc3Npb24uaW5zZXJ0KG1rSWQoMiksIFwiWlwiLCBcInpcIik7XG4gICAgICBzZXNzaW9uLmluc2VydChta0lkKDEpLCBcIkFcIiwgXCJhXCIpO1xuICAgICAgY29uc3QgZmFjdHMgPSBzZXNzaW9uLmFsbEZhY3RzKCk7XG4gICAgICBleHBlY3QoZmFjdHMpLnRvSGF2ZUxlbmd0aCgyKTtcbiAgICAgIGV4cGVjdChmYWN0c1swXSkudG9NYXRjaE9iamVjdCh7IGlkOiAxLCBhdHRyOiBcIkFcIiB9KTtcbiAgICAgIGV4cGVjdChmYWN0c1sxXSkudG9NYXRjaE9iamVjdCh7IGlkOiAyLCBhdHRyOiBcIlpcIiB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJhZGQoKSDigJQgc3R1YiBmb3IgZnV0dXJlIHJ1bGVzXCIsICgpID0+IHtcbiAgICBpdChcImFkZCgpIGV4aXN0cyBhbmQgZG9lc24ndCB0aHJvdyBvbiBuby1vcCBwbGFjZWhvbGRlclwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgICAvLyBhZGQoKSB3aWxsIGFjY2VwdCBSdWxlRGVmaW5pdGlvbiBvYmplY3RzIGluIFAxLjU7IHN0dWIgZm9yIG5vd1xuICAgICAgZXhwZWN0KCgpID0+IHNlc3Npb24uYWRkKHsgbmFtZTogXCJwbGFjZWhvbGRlclwiIH0gYXMgbmV2ZXIpKS5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcInBhY2thZ2UtaW50ZXJuYWwgd2lyaW5nXCIsICgpID0+IHtcbiAgICBpdChcIl9nZXRBbHBoYSgpIC8gX2dldFdNKCkgZXhwb3NlIHRoZSBzZXNzaW9uJ3MgaW50ZXJuYWwgbmV0d29ya3NcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgICAgZXhwZWN0KHNlc3Npb24uX2dldEFscGhhKCkpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3Qoc2Vzc2lvbi5fZ2V0V00oKSkudG9CZURlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwiV00gaW5zZXJ0IGV2ZW50cyBwcm9wYWdhdGUgdG8gdGhlIEFscGhhTmV0d29ya1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgICBjb25zdCBhbHBoYSA9IHNlc3Npb24uX2dldEFscGhhKCk7XG4gICAgICBjb25zdCBub2RlID0gYWxwaGEuYnVpbGROb2RlKHsgaWQ6IG51bGwsIGF0dHI6IFwiSGVhbHRoXCIgfSk7XG4gICAgICBzZXNzaW9uLmluc2VydChta0lkKDEpLCBcIkhlYWx0aFwiLCAxMDApO1xuICAgICAgZXhwZWN0KG5vZGUubWVtb3J5LmZhY3RzKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgICBleHBlY3Qobm9kZS5tZW1vcnkuZmFjdHNbMF0pLnRvTWF0Y2hPYmplY3QoeyBpZDogMSwgYXR0cjogXCJIZWFsdGhcIiwgdmFsdWU6IDEwMCB9KTtcbiAgICAgIHNlc3Npb24ucmV0cmFjdChta0lkKDEpLCBcIkhlYWx0aFwiKTtcbiAgICAgIGV4cGVjdChub2RlLm1lbW9yeS5mYWN0cykudG9IYXZlTGVuZ3RoKDApO1xuICAgIH0pO1xuXG4gICAgaXQoXCJhdXRvRmlyZSB0cnVlOiBmaXJlUnVsZXMoKSBydW5zIG9uIGluc2VydC9yZXRyYWN0IChyZXR1cm5zIDAgc3R1YilcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IHRydWUgfSk7XG4gICAgICAvLyBKdXN0IHZlcmlmeSBpdCBkb2VzIG5vdCB0aHJvdyBhbmQgcGF0aCBpcyBleGVyY2lzZWRcbiAgICAgIGV4cGVjdCgoKSA9PiBzZXNzaW9uLmluc2VydChta0lkKDEpLCBcIkhlYWx0aFwiLCAxMDApKS5ub3QudG9UaHJvdygpO1xuICAgICAgZXhwZWN0KCgpID0+IHNlc3Npb24ucmV0cmFjdChta0lkKDEpLCBcIkhlYWx0aFwiKSkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9yZXRlL3NyYy9zZXNzaW9uLnRlc3QudHMifQ== diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/2bde65eef67242240fbbdfc08750e35dcc9e8ef9 b/IJGn1F-WxLUCbfU1lu8pU/ssr/2bde65eef67242240fbbdfc08750e35dcc9e8ef9 deleted file mode 100644 index fef5611..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/2bde65eef67242240fbbdfc08750e35dcc9e8ef9 +++ /dev/null @@ -1,110 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "AlphaMemory", { enumerable: true, configurable: true, get(){ try { return AlphaMemory } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "AlphaNode", { enumerable: true, configurable: true, get(){ try { return AlphaNode } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "AlphaNetwork", { enumerable: true, configurable: true, get(){ try { return AlphaNetwork } catch {} }}); -class AlphaMemory { - /** Facts currently in memory, sorted by `[id asc, attr asc]`. */ - facts = []; - /** Insert a fact; keeps `facts` sorted. O(n) via insertion-point search. */ - addFact(id, attr, value) { - const fact = { id, attr, value }; - let lo = 0; - let hi = this.facts.length; - while (lo < hi) { - const mid = lo + hi >>> 1; - const m = this.facts[mid]; - const cmp = m.id !== id ? m.id - id : m.attr < attr ? -1 : m.attr > attr ? 1 : 0; - if (cmp < 0) lo = mid + 1; - else hi = mid; - }; - this.facts.splice(lo, 0, fact); - } - /** Remove the fact matching `(id, attr)`. Returns the removed value, or undefined. */ - removeFact(id, attr) { - const idx = this.facts.findIndex((f) => f.id === id && f.attr === attr); - if (idx === -1) return void 0; - const removed = this.facts[idx]; - this.facts.splice(idx, 1); - return removed.value; - } -}; -class AlphaNode { - condition; - memory; - #activateListeners = []; - #deactivateListeners = []; - constructor(condition) { - this.condition = condition; - this.memory = new AlphaMemory(); - } - /** Register a listener fired after a fact is added to this node's memory. */ - onActivate(listener) { - this.#activateListeners.push(listener); - } - /** Register a listener fired after a fact is removed from this node's memory. */ - onDeactivate(listener) { - this.#deactivateListeners.push(listener); - } - /** Internal: add to memory, then notify activate listeners. */ - activate(id, attr, value) { - this.memory.addFact(id, attr, value); - for (const l of this.#activateListeners) l(id, attr, value); - } - /** Internal: remove from memory, then notify deactivate listeners. */ - deactivate(id, attr, value) { - this.memory.removeFact(id, attr); - for (const l of this.#deactivateListeners) l(id, attr, value); - } -}; -class AlphaNetwork { - /** Inverted index: attribute key → nodes that filter on it. */ - #index = /* @__PURE__ */ new Map(); - /** Memoisation cache: canonical condition key → node. */ - #nodeCache = /* @__PURE__ */ new Map(); - /** Canonical key for an {@link AlphaCondition}. */ - #conditionKey(cond) { - return `${cond.id === null ? "*" : String(cond.id)}:${cond.attr}`; - } - /** - * Get or create the {@link AlphaNode} for a given condition. - * - * Two calls with the same `(id, attr)` pair return the same instance, so - * rules that share constant tests share alpha memories automatically. - */ - buildNode(cond) { - const key = this.#conditionKey(cond); - const cached = this.#nodeCache.get(key); - if (cached) return cached; - const node = new AlphaNode({ id: cond.id, attr: cond.attr }); - this.#nodeCache.set(key, node); - let attrNodes = this.#index.get(cond.attr); - if (!attrNodes) { - attrNodes = []; - this.#index.set(cond.attr, attrNodes); - }; - attrNodes.push(node); - return node; - } - /** Called by `WorkingMemory` (via Session) when a fact is inserted. */ - notifyInsert(id, attr, value) { - const nodes = this.#index.get(attr); - if (!nodes) return; - for (const node of nodes) { - if (node.condition.id === null || node.condition.id === id) { - node.activate(id, attr, value); - } - } - } - /** Called by `WorkingMemory` (via Session) when a fact is retracted. */ - notifyRetract(id, attr, value) { - const nodes = this.#index.get(attr); - if (!nodes) return; - for (const node of nodes) { - if (node.condition.id === null || node.condition.id === id) { - node.deactivate(id, attr, value); - } - } - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFBQSxFQUNUO0FBQUE7QUFBQSxFQUdBLGFBQWEsSUFBYyxNQUFlLE9BQXdCO0FBQ2hFLFVBQU0sUUFBUSxLQUFLLE9BQU8sSUFBSSxJQUFJO0FBQ2xDLFFBQUksQ0FBQyxNQUFPO0FBQ1osZUFBVyxRQUFRLE9BQU87QUFFeEIsVUFBSSxLQUFLLFVBQVUsT0FBTyxRQUFRLEtBQUssVUFBVSxPQUFPLElBQUk7QUFDMUQsYUFBSyxTQUFTLElBQUksTUFBTSxLQUFLO0FBQUEsTUFDL0I7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBO0FBQUEsRUFHQSxjQUFjLElBQWMsTUFBZSxPQUF3QjtBQUNqRSxVQUFNLFFBQVEsS0FBSyxPQUFPLElBQUksSUFBSTtBQUNsQyxRQUFJLENBQUMsTUFBTztBQUNaLGVBQVcsUUFBUSxPQUFPO0FBQ3hCLFVBQUksS0FBSyxVQUFVLE9BQU8sUUFBUSxLQUFLLFVBQVUsT0FBTyxJQUFJO0FBQzFELGFBQUssV0FBVyxJQUFJLE1BQU0sS0FBSztBQUFBLE1BQ2pDO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiYWxwaGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBbHBoYU5ldHdvcmsg4oCUIGluZGV4ZXMgYW5kIGRpc3BhdGNoZXMgZmFjdHMgYnkgKGlkPywgYXR0cikgcGF0dGVybi5cbiAqXG4gKiBQZXIgYHBhY2thZ2VzL3JldGUvU1BFQy5tZCDCp1JldGUgSUkgUmVmZXJlbmNlIFRhcmdldGAgdGhpcyBtb2R1bGUgaW1wbGVtZW50c1xuICogdGhlIGFscGhhIHNpZGUgb2YgdGhlIERvb3JlbmJvcyBuZXR3b3JrOiB7QGxpbmsgQWxwaGFOb2RlfSAoY29uc3RhbnQgdGVzdHMpXG4gKiBhbmQge0BsaW5rIEFscGhhTWVtb3J5fSAoc2V0IG9mIGZhY3RzIHRoYXQgcGFzc2VkIHRob3NlIHRlc3RzKS5cbiAqXG4gKiBEaXNwYXRjaCBpcyBhbW9ydGlzZWQgTygxKSBwZXIgZmFjdDogYW4gaW52ZXJ0ZWQgaW5kZXggbWFwcyBhdHRyaWJ1dGUga2V5c1xuICogdG8gdGhlIGFscGhhIG5vZGVzIHRoYXQgY2FyZSBhYm91dCB0aGVtLCBzbyB3ZSBvbmx5IHZpc2l0IHRoZSBzbWFsbCBzdWJzZXRcbiAqIG9mIG5vZGVzIHJlZ2lzdGVyZWQgZm9yIGEgZ2l2ZW4gYXR0ciByYXRoZXIgdGhhbiBzY2FubmluZyBldmVyeSBub2RlLiBUaGVcbiAqIGlkIGRpbWVuc2lvbiBpcyBhIGZpbmFsIGNvbXBhcmUgaW4gdGhlIG5vZGUncyBtYXRjaCBzdGVwLlxuICpcbiAqIEFscGhhTWVtb3J5IGtlZXBzIGl0cyBmYWN0cyBzb3J0ZWQgYnkgYFtpZCBhc2MsIGF0dHIgYXNjXWAgdG8gc2F0aXNmeVxuICogwqdJdGVyYXRpb24gT3JkZXIg4oCUIGRvd25zdHJlYW0gYmV0YSBqb2lucyBpdGVyYXRlIGFscGhhIG1lbW9yaWVzIGluIGFcbiAqIGRldGVybWluaXN0aWMgb3JkZXIuXG4gKi9cbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiLi9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgQXR0cktleSwgRmFjdFZhbHVlIH0gZnJvbSBcIi4vd20uanNcIjtcblxuLyoqXG4gKiBDb25zdGFudC10ZXN0IGNvbmRpdGlvbiByZWNvZ25pc2VkIGJ5IGEgc2luZ2xlIHtAbGluayBBbHBoYU5vZGV9LlxuICpcbiAqIGBpZGAgaXMgZWl0aGVyIGEgc3BlY2lmaWMge0BsaW5rIEVudGl0eUlkfSAodGhlIG5vZGUgb25seSBhY2NlcHRzIGZhY3RzIGZvclxuICogdGhhdCBlbnRpdHkpIG9yIGBudWxsYCAod2lsZGNhcmQg4oCUIGFjY2VwdHMgYW55IGVudGl0eSkuIGBhdHRyYCBtdXN0IGFsd2F5c1xuICogYmUgYSBjb25jcmV0ZSBhdHRyaWJ1dGUga2V5OyBhdHRyaWJ1dGUgd2lsZGNhcmRzIGFyZSBub3Qgc3VwcG9ydGVkIGF0IHRoZVxuICogYWxwaGEgbGF5ZXIgcGVyIFNQRUMubWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWxwaGFDb25kaXRpb24ge1xuICAvKiogU3BlY2lmaWMgZW50aXR5IElEIHRvIG1hdGNoLCBvciBgbnVsbGAgZm9yIGEgd2lsZGNhcmQgb3ZlciBlbnRpdGllcy4gKi9cbiAgcmVhZG9ubHkgaWQ6IEVudGl0eUlkIHwgbnVsbDtcbiAgLyoqIEF0dHJpYnV0ZSBrZXkgdGhlIG5vZGUgZmlsdGVycyBvbiDigJQgcmVxdWlyZWQgKG5vIGF0dHIgd2lsZGNhcmRzKS4gKi9cbiAgcmVhZG9ubHkgYXR0cjogQXR0cktleTtcbn1cblxudHlwZSBBY3RpdmF0ZUxpc3RlbmVyID0gKGlkOiBFbnRpdHlJZCwgYXR0cjogQXR0cktleSwgdmFsdWU6IEZhY3RWYWx1ZSkgPT4gdm9pZDtcbnR5cGUgRGVhY3RpdmF0ZUxpc3RlbmVyID0gKFxuICBpZDogRW50aXR5SWQsXG4gIGF0dHI6IEF0dHJLZXksXG4gIHZhbHVlOiBGYWN0VmFsdWVcbikgPT4gdm9pZDtcblxuLyoqXG4gKiBTb3J0ZWQgd29ya2luZy1zZXQgb2YgZmFjdHMgdGhhdCBoYXZlIHBhc3NlZCBhbiB7QGxpbmsgQWxwaGFOb2RlfSdzIHRlc3RzLlxuICpcbiAqIFRoZSBgZmFjdHNgIGFycmF5IGlzIG1haW50YWluZWQgaW4gYFtpZCBhc2MsIGF0dHIgYXNjXWAgb3JkZXIgb24gZXZlcnlcbiAqIG11dGF0aW9uIHNvIHRoYXQgaXRlcmF0aW9uIGlzIGRldGVybWluaXN0aWMgd2l0aG91dCBhIHBlci1yZWFkIHNvcnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBBbHBoYU1lbW9yeSB7XG4gIC8qKiBGYWN0cyBjdXJyZW50bHkgaW4gbWVtb3J5LCBzb3J0ZWQgYnkgYFtpZCBhc2MsIGF0dHIgYXNjXWAuICovXG4gIHJlYWRvbmx5IGZhY3RzOiBBcnJheTx7IGlkOiBFbnRpdHlJZDsgYXR0cjogQXR0cktleTsgdmFsdWU6IEZhY3RWYWx1ZSB9PiA9IFtdO1xuXG4gIC8qKiBJbnNlcnQgYSBmYWN0OyBrZWVwcyBgZmFjdHNgIHNvcnRlZC4gTyhuKSB2aWEgaW5zZXJ0aW9uLXBvaW50IHNlYXJjaC4gKi9cbiAgYWRkRmFjdChpZDogRW50aXR5SWQsIGF0dHI6IEF0dHJLZXksIHZhbHVlOiBGYWN0VmFsdWUpOiB2b2lkIHtcbiAgICBjb25zdCBmYWN0ID0geyBpZCwgYXR0ciwgdmFsdWUgfTtcbiAgICAvLyBGaW5kIGluc2VydGlvbiBpbmRleCB0byBrZWVwIHNvcnRlZDogW2lkIGFzYywgYXR0ciBhc2NdXG4gICAgbGV0IGxvID0gMDtcbiAgICBsZXQgaGkgPSB0aGlzLmZhY3RzLmxlbmd0aDtcbiAgICB3aGlsZSAobG8gPCBoaSkge1xuICAgICAgY29uc3QgbWlkID0gKGxvICsgaGkpID4+PiAxO1xuICAgICAgY29uc3QgbSA9IHRoaXMuZmFjdHNbbWlkXSE7XG4gICAgICBjb25zdCBjbXAgPVxuICAgICAgICBtLmlkICE9PSBpZFxuICAgICAgICAgID8gKG0uaWQgYXMgbnVtYmVyKSAtIChpZCBhcyBudW1iZXIpXG4gICAgICAgICAgOiBtLmF0dHIgPCBhdHRyXG4gICAgICAgICAgICA/IC0xXG4gICAgICAgICAgICA6IG0uYXR0ciA+IGF0dHJcbiAgICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICAgIDogMDtcbiAgICAgIGlmIChjbXAgPCAwKSBsbyA9IG1pZCArIDE7XG4gICAgICBlbHNlIGhpID0gbWlkO1xuICAgIH1cbiAgICB0aGlzLmZhY3RzLnNwbGljZShsbywgMCwgZmFjdCk7XG4gIH1cblxuICAvKiogUmVtb3ZlIHRoZSBmYWN0IG1hdGNoaW5nIGAoaWQsIGF0dHIpYC4gUmV0dXJucyB0aGUgcmVtb3ZlZCB2YWx1ZSwgb3IgdW5kZWZpbmVkLiAqL1xuICByZW1vdmVGYWN0KGlkOiBFbnRpdHlJZCwgYXR0cjogQXR0cktleSk6IEZhY3RWYWx1ZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaWR4ID0gdGhpcy5mYWN0cy5maW5kSW5kZXgoKGYpID0+IGYuaWQgPT09IGlkICYmIGYuYXR0ciA9PT0gYXR0cik7XG4gICAgaWYgKGlkeCA9PT0gLTEpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcmVtb3ZlZCA9IHRoaXMuZmFjdHNbaWR4XSE7XG4gICAgdGhpcy5mYWN0cy5zcGxpY2UoaWR4LCAxKTtcbiAgICByZXR1cm4gcmVtb3ZlZC52YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEEgc2luZ2xlIGFscGhhLW5ldHdvcmsgbm9kZTogb3ducyBvbmUge0BsaW5rIEFscGhhQ29uZGl0aW9ufSwgaXRzXG4gKiB7QGxpbmsgQWxwaGFNZW1vcnl9LCBhbmQgYWN0aXZhdGUvZGVhY3RpdmF0ZSBsaXN0ZW5lciBsaXN0cy5cbiAqXG4gKiBMaXN0ZW5lcnMgYXJlIGludm9rZWQgc3luY2hyb25vdXNseSBhZnRlciB0aGUgbWVtb3J5IG11dGF0aW9uLCBzbyBvYnNlcnZlcnNcbiAqICh0eXBpY2FsbHkgam9pbi1ub2RlcyBpbiBQaGFzZSAxIGFuZCB0aGUgYWdlbmRhIGluIGxhdGVyIHBoYXNlcykgc2VlIGFcbiAqIGNvbnNpc3RlbnQgbWVtb3J5IHZpZXcuXG4gKi9cbmV4cG9ydCBjbGFzcyBBbHBoYU5vZGUge1xuICByZWFkb25seSBjb25kaXRpb246IEFscGhhQ29uZGl0aW9uO1xuICByZWFkb25seSBtZW1vcnk6IEFscGhhTWVtb3J5O1xuICByZWFkb25seSAjYWN0aXZhdGVMaXN0ZW5lcnM6IEFjdGl2YXRlTGlzdGVuZXJbXSA9IFtdO1xuICByZWFkb25seSAjZGVhY3RpdmF0ZUxpc3RlbmVyczogRGVhY3RpdmF0ZUxpc3RlbmVyW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihjb25kaXRpb246IEFscGhhQ29uZGl0aW9uKSB7XG4gICAgdGhpcy5jb25kaXRpb24gPSBjb25kaXRpb247XG4gICAgdGhpcy5tZW1vcnkgPSBuZXcgQWxwaGFNZW1vcnkoKTtcbiAgfVxuXG4gIC8qKiBSZWdpc3RlciBhIGxpc3RlbmVyIGZpcmVkIGFmdGVyIGEgZmFjdCBpcyBhZGRlZCB0byB0aGlzIG5vZGUncyBtZW1vcnkuICovXG4gIG9uQWN0aXZhdGUobGlzdGVuZXI6IEFjdGl2YXRlTGlzdGVuZXIpOiB2b2lkIHtcbiAgICB0aGlzLiNhY3RpdmF0ZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKiBSZWdpc3RlciBhIGxpc3RlbmVyIGZpcmVkIGFmdGVyIGEgZmFjdCBpcyByZW1vdmVkIGZyb20gdGhpcyBub2RlJ3MgbWVtb3J5LiAqL1xuICBvbkRlYWN0aXZhdGUobGlzdGVuZXI6IERlYWN0aXZhdGVMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuI2RlYWN0aXZhdGVMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICAvKiogSW50ZXJuYWw6IGFkZCB0byBtZW1vcnksIHRoZW4gbm90aWZ5IGFjdGl2YXRlIGxpc3RlbmVycy4gKi9cbiAgYWN0aXZhdGUoaWQ6IEVudGl0eUlkLCBhdHRyOiBBdHRyS2V5LCB2YWx1ZTogRmFjdFZhbHVlKTogdm9pZCB7XG4gICAgdGhpcy5tZW1vcnkuYWRkRmFjdChpZCwgYXR0ciwgdmFsdWUpO1xuICAgIGZvciAoY29uc3QgbCBvZiB0aGlzLiNhY3RpdmF0ZUxpc3RlbmVycykgbChpZCwgYXR0ciwgdmFsdWUpO1xuICB9XG5cbiAgLyoqIEludGVybmFsOiByZW1vdmUgZnJvbSBtZW1vcnksIHRoZW4gbm90aWZ5IGRlYWN0aXZhdGUgbGlzdGVuZXJzLiAqL1xuICBkZWFjdGl2YXRlKGlkOiBFbnRpdHlJZCwgYXR0cjogQXR0cktleSwgdmFsdWU6IEZhY3RWYWx1ZSk6IHZvaWQge1xuICAgIHRoaXMubWVtb3J5LnJlbW92ZUZhY3QoaWQsIGF0dHIpO1xuICAgIGZvciAoY29uc3QgbCBvZiB0aGlzLiNkZWFjdGl2YXRlTGlzdGVuZXJzKSBsKGlkLCBhdHRyLCB2YWx1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBsYXllciBmb3IgYWxwaGEgbm9kZXMuXG4gKlxuICogVGhlIG5ldHdvcmsgb3ducyBhbGwgYWxwaGEgbm9kZXMgYW5kIGV4cG9zZXMgYG5vdGlmeUluc2VydGAgLyBgbm90aWZ5UmV0cmFjdGBcbiAqIHRoYXQgdGhlIHtAbGluayBpbXBvcnQoXCIuL3dtLmpzXCIpLldvcmtpbmdNZW1vcnl9IGZpcmVzIG9uIGV2ZXJ5IHRyaXBsZVxuICogY2hhbmdlLiBMb29rdXAgaXMgcGVyZm9ybWVkIHZpYSBhbiBpbnZlcnRlZCBpbmRleCBgYXR0ciDihpIgQWxwaGFOb2RlW11gLCBzb1xuICogZGlzcGF0Y2ggY29zdCBzY2FsZXMgd2l0aCB0aGUgbnVtYmVyIG9mIG5vZGVzIGludGVyZXN0ZWQgaW4gdGhhdCBhdHRyXG4gKiByYXRoZXIgdGhhbiB0aGUgdG90YWwgbm9kZSBjb3VudC5cbiAqXG4gKiB7QGxpbmsgYnVpbGROb2RlfSBpcyBtZW1vaXNlZDogaWRlbnRpY2FsIGNvbmRpdGlvbnMgY29sbGFwc2UgdG8gb25lIG5vZGUgc29cbiAqIHRoYXQgcnVsZXMgc2hhcmluZyBhIGNvbnN0YW50LXRlc3Qgc2hhcmUgdGhlIHNhbWUgYWxwaGEgbWVtb3J5ICh0aGUgdXN1YWxcbiAqIFJldGUgc2hhcmluZyBvcHRpbWlzYXRpb24pLlxuICovXG5leHBvcnQgY2xhc3MgQWxwaGFOZXR3b3JrIHtcbiAgLyoqIEludmVydGVkIGluZGV4OiBhdHRyaWJ1dGUga2V5IOKGkiBub2RlcyB0aGF0IGZpbHRlciBvbiBpdC4gKi9cbiAgcmVhZG9ubHkgI2luZGV4ID0gbmV3IE1hcDxBdHRyS2V5LCBBbHBoYU5vZGVbXT4oKTtcbiAgLyoqIE1lbW9pc2F0aW9uIGNhY2hlOiBjYW5vbmljYWwgY29uZGl0aW9uIGtleSDihpIgbm9kZS4gKi9cbiAgcmVhZG9ubHkgI25vZGVDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBBbHBoYU5vZGU+KCk7XG5cbiAgLyoqIENhbm9uaWNhbCBrZXkgZm9yIGFuIHtAbGluayBBbHBoYUNvbmRpdGlvbn0uICovXG4gICNjb25kaXRpb25LZXkoY29uZDogQWxwaGFDb25kaXRpb24pOiBzdHJpbmcge1xuICAgIC8vIFwiKlwiIGlzIHNhZmUgYXMgYSBzZW50aW5lbCBiZWNhdXNlIEVudGl0eUlkIGlzIG51bWVyaWMgYXQgcnVudGltZS5cbiAgICByZXR1cm4gYCR7Y29uZC5pZCA9PT0gbnVsbCA/IFwiKlwiIDogU3RyaW5nKGNvbmQuaWQpfToke2NvbmQuYXR0cn1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBvciBjcmVhdGUgdGhlIHtAbGluayBBbHBoYU5vZGV9IGZvciBhIGdpdmVuIGNvbmRpdGlvbi5cbiAgICpcbiAgICogVHdvIGNhbGxzIHdpdGggdGhlIHNhbWUgYChpZCwgYXR0cilgIHBhaXIgcmV0dXJuIHRoZSBzYW1lIGluc3RhbmNlLCBzb1xuICAgKiBydWxlcyB0aGF0IHNoYXJlIGNvbnN0YW50IHRlc3RzIHNoYXJlIGFscGhhIG1lbW9yaWVzIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICBidWlsZE5vZGUoY29uZDogQWxwaGFDb25kaXRpb24pOiBBbHBoYU5vZGUge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuI2NvbmRpdGlvbktleShjb25kKTtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLiNub2RlQ2FjaGUuZ2V0KGtleSk7XG4gICAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDtcblxuICAgIGNvbnN0IG5vZGUgPSBuZXcgQWxwaGFOb2RlKHsgaWQ6IGNvbmQuaWQsIGF0dHI6IGNvbmQuYXR0ciB9KTtcbiAgICB0aGlzLiNub2RlQ2FjaGUuc2V0KGtleSwgbm9kZSk7XG5cbiAgICBsZXQgYXR0ck5vZGVzID0gdGhpcy4jaW5kZXguZ2V0KGNvbmQuYXR0cik7XG4gICAgaWYgKCFhdHRyTm9kZXMpIHtcbiAgICAgIGF0dHJOb2RlcyA9IFtdO1xuICAgICAgdGhpcy4jaW5kZXguc2V0KGNvbmQuYXR0ciwgYXR0ck5vZGVzKTtcbiAgICB9XG4gICAgYXR0ck5vZGVzLnB1c2gobm9kZSk7XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIC8qKiBDYWxsZWQgYnkgYFdvcmtpbmdNZW1vcnlgICh2aWEgU2Vzc2lvbikgd2hlbiBhIGZhY3QgaXMgaW5zZXJ0ZWQuICovXG4gIG5vdGlmeUluc2VydChpZDogRW50aXR5SWQsIGF0dHI6IEF0dHJLZXksIHZhbHVlOiBGYWN0VmFsdWUpOiB2b2lkIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuI2luZGV4LmdldChhdHRyKTtcbiAgICBpZiAoIW5vZGVzKSByZXR1cm47XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICAvLyBXaWxkY2FyZCAobnVsbCkgYWx3YXlzIG1hdGNoZXM7IG90aGVyd2lzZSByZXF1aXJlIGV4YWN0IGlkLlxuICAgICAgaWYgKG5vZGUuY29uZGl0aW9uLmlkID09PSBudWxsIHx8IG5vZGUuY29uZGl0aW9uLmlkID09PSBpZCkge1xuICAgICAgICBub2RlLmFjdGl2YXRlKGlkLCBhdHRyLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIENhbGxlZCBieSBgV29ya2luZ01lbW9yeWAgKHZpYSBTZXNzaW9uKSB3aGVuIGEgZmFjdCBpcyByZXRyYWN0ZWQuICovXG4gIG5vdGlmeVJldHJhY3QoaWQ6IEVudGl0eUlkLCBhdHRyOiBBdHRyS2V5LCB2YWx1ZTogRmFjdFZhbHVlKTogdm9pZCB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLiNpbmRleC5nZXQoYXR0cik7XG4gICAgaWYgKCFub2RlcykgcmV0dXJuO1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgaWYgKG5vZGUuY29uZGl0aW9uLmlkID09PSBudWxsIHx8IG5vZGUuY29uZGl0aW9uLmlkID09PSBpZCkge1xuICAgICAgICBub2RlLmRlYWN0aXZhdGUoaWQsIGF0dHIsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdLCJmaWxlIjoiL3NyYy9hbHBoYS50cyJ9 diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/2dd379aad1c93faae38f9b1d0638d03363114997 b/IJGn1F-WxLUCbfU1lu8pU/ssr/2dd379aad1c93faae38f9b1d0638d03363114997 deleted file mode 100644 index b144ded..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/2dd379aad1c93faae38f9b1d0638d03363114997 +++ /dev/null @@ -1,168 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("vitest", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/eventlog.ts", {"importedNames":["EventLog"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/session.ts", {"importedNames":["Session"]}); -const mkId = (n) => n; -(0,__vite_ssr_import_0__.describe)("EventLog", () => { - (0,__vite_ssr_import_0__.it)("starts with seq=0 and no events", () => { - const log = new __vite_ssr_import_1__.EventLog(); - (0,__vite_ssr_import_0__.expect)(log.length).toBe(0); - (0,__vite_ssr_import_0__.expect)(log.latestSeq).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("appendInsert increments seq monotonically", () => { - const log = new __vite_ssr_import_1__.EventLog(); - log.appendInsert(mkId(1), "Health", 100); - log.appendInsert(mkId(2), "Name", "Alice"); - (0,__vite_ssr_import_0__.expect)(log.latestSeq).toBe(2); - (0,__vite_ssr_import_0__.expect)(log.length).toBe(2); - }); - (0,__vite_ssr_import_0__.it)("appendRetract records retract event", () => { - const log = new __vite_ssr_import_1__.EventLog(); - log.appendInsert(mkId(1), "Health", 100); - log.appendRetract(mkId(1), "Health", 100); - const events = log.getAll(); - (0,__vite_ssr_import_0__.expect)(events[0]?.kind).toBe("insert"); - (0,__vite_ssr_import_0__.expect)(events[1]?.kind).toBe("retract"); - }); - (0,__vite_ssr_import_0__.it)("appendFire records fire event with ruleName", () => { - const log = new __vite_ssr_import_1__.EventLog(); - log.appendFire("move-piece"); - const evt = log.getAll()[0]; - (0,__vite_ssr_import_0__.expect)(evt?.kind).toBe("fire"); - (0,__vite_ssr_import_0__.expect)(evt?.ruleName).toBe("move-piece"); - (0,__vite_ssr_import_0__.expect)(evt?.seq).toBe(1); - }); - (0,__vite_ssr_import_0__.it)("getSince(seq) returns events after seq", () => { - const log = new __vite_ssr_import_1__.EventLog(); - log.appendInsert(mkId(1), "X", 1); - log.appendInsert(mkId(2), "X", 2); - log.appendInsert(mkId(3), "X", 3); - const since = log.getSince(1); - (0,__vite_ssr_import_0__.expect)(since).toHaveLength(2); - (0,__vite_ssr_import_0__.expect)(since[0]?.seq).toBe(2); - (0,__vite_ssr_import_0__.expect)(since[1]?.seq).toBe(3); - }); - (0,__vite_ssr_import_0__.it)("getSince(0) returns all events", () => { - const log = new __vite_ssr_import_1__.EventLog(); - log.appendInsert(mkId(1), "X", 1); - log.appendInsert(mkId(2), "X", 2); - (0,__vite_ssr_import_0__.expect)(log.getSince(0)).toHaveLength(2); - }); - (0,__vite_ssr_import_0__.it)("getSince(latestSeq) returns empty", () => { - const log = new __vite_ssr_import_1__.EventLog(); - log.appendInsert(mkId(1), "X", 1); - log.appendInsert(mkId(2), "X", 2); - (0,__vite_ssr_import_0__.expect)(log.getSince(log.latestSeq)).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("events are append-only (getAll returns a copy)", () => { - const log = new __vite_ssr_import_1__.EventLog(); - log.appendInsert(mkId(1), "X", 42); - const first = log.getAll(); - first.length = 0; - (0,__vite_ssr_import_0__.expect)(log.length).toBe(1); - (0,__vite_ssr_import_0__.expect)(log.getAll()).toHaveLength(1); - }); - (0,__vite_ssr_import_0__.it)("records insert event with correct fields", () => { - const log = new __vite_ssr_import_1__.EventLog(); - log.appendInsert(mkId(5), "Health", 99); - const evt = log.getAll()[0]; - (0,__vite_ssr_import_0__.expect)(evt?.kind).toBe("insert"); - (0,__vite_ssr_import_0__.expect)(evt?.id).toBe(5); - (0,__vite_ssr_import_0__.expect)(evt?.attr).toBe("Health"); - (0,__vite_ssr_import_0__.expect)(evt?.value).toBe(99); - (0,__vite_ssr_import_0__.expect)(evt?.seq).toBe(1); - (0,__vite_ssr_import_0__.expect)(typeof evt?.ts).toBe("number"); - }); - (0,__vite_ssr_import_0__.it)("records retract event with correct fields", () => { - const log = new __vite_ssr_import_1__.EventLog(); - log.appendRetract(mkId(7), "Position", "a1"); - const evt = log.getAll()[0]; - (0,__vite_ssr_import_0__.expect)(evt?.kind).toBe("retract"); - (0,__vite_ssr_import_0__.expect)(evt?.id).toBe(7); - (0,__vite_ssr_import_0__.expect)(evt?.attr).toBe("Position"); - (0,__vite_ssr_import_0__.expect)(evt?.value).toBe("a1"); - (0,__vite_ssr_import_0__.expect)(evt?.seq).toBe(1); - }); - (0,__vite_ssr_import_0__.it)("timestamps are non-decreasing across appends", () => { - const log = new __vite_ssr_import_1__.EventLog(); - log.appendInsert(mkId(1), "A", 1); - log.appendInsert(mkId(1), "B", 2); - log.appendInsert(mkId(1), "C", 3); - const events = log.getAll(); - (0,__vite_ssr_import_0__.expect)(events[0].ts).toBeLessThanOrEqual(events[1].ts); - (0,__vite_ssr_import_0__.expect)(events[1].ts).toBeLessThanOrEqual(events[2].ts); - }); - (0,__vite_ssr_import_0__.it)("seqs are strictly monotonically increasing (1, 2, 3, ...)", () => { - const log = new __vite_ssr_import_1__.EventLog(); - for (let i = 0; i < 10; i++) log.appendInsert(mkId(i + 1), "N", i); - const events = log.getAll(); - for (let i = 0; i < events.length; i++) { - (0,__vite_ssr_import_0__.expect)(events[i].seq).toBe(i + 1); - } - }); -}); -(0,__vite_ssr_import_0__.describe)("EventLog + Session integration", () => { - (0,__vite_ssr_import_0__.it)("records insert via Session.insert when EventLog is attached", () => { - const log = new __vite_ssr_import_1__.EventLog(); - const sess = new __vite_ssr_import_2__.Session({ eventLog: log, autoFire: false }); - const id = sess.nextId(); - sess.insert(id, "Health", 100); - const events = log.getAll(); - (0,__vite_ssr_import_0__.expect)(events).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(events[0]?.kind).toBe("insert"); - (0,__vite_ssr_import_0__.expect)(events[0]?.id).toBe(id); - (0,__vite_ssr_import_0__.expect)(events[0]?.attr).toBe("Health"); - (0,__vite_ssr_import_0__.expect)(events[0]?.value).toBe(100); - }); - (0,__vite_ssr_import_0__.it)("records retract via Session.retract with old value", () => { - const log = new __vite_ssr_import_1__.EventLog(); - const sess = new __vite_ssr_import_2__.Session({ eventLog: log, autoFire: false }); - const id = sess.nextId(); - sess.insert(id, "Health", 100); - sess.retract(id, "Health"); - const events = log.getAll(); - (0,__vite_ssr_import_0__.expect)(events).toHaveLength(2); - (0,__vite_ssr_import_0__.expect)(events[1]?.kind).toBe("retract"); - (0,__vite_ssr_import_0__.expect)(events[1]?.id).toBe(id); - (0,__vite_ssr_import_0__.expect)(events[1]?.attr).toBe("Health"); - (0,__vite_ssr_import_0__.expect)(events[1]?.value).toBe(100); - }); - (0,__vite_ssr_import_0__.it)("records an update as retract-of-old then insert-of-new", () => { - const log = new __vite_ssr_import_1__.EventLog(); - const sess = new __vite_ssr_import_2__.Session({ eventLog: log, autoFire: false }); - const id = sess.nextId(); - sess.insert(id, "Health", 100); - sess.insert(id, "Health", 50); - const events = log.getAll(); - (0,__vite_ssr_import_0__.expect)(events).toHaveLength(3); - (0,__vite_ssr_import_0__.expect)(events[0]?.kind).toBe("insert"); - (0,__vite_ssr_import_0__.expect)(events[0]?.value).toBe(100); - (0,__vite_ssr_import_0__.expect)(events[1]?.kind).toBe("retract"); - (0,__vite_ssr_import_0__.expect)(events[1]?.value).toBe(100); - (0,__vite_ssr_import_0__.expect)(events[2]?.kind).toBe("insert"); - (0,__vite_ssr_import_0__.expect)(events[2]?.value).toBe(50); - }); - (0,__vite_ssr_import_0__.it)("does not record when retracting a non-existent fact", () => { - const log = new __vite_ssr_import_1__.EventLog(); - const sess = new __vite_ssr_import_2__.Session({ eventLog: log, autoFire: false }); - const id = sess.nextId(); - sess.retract(id, "Health"); - (0,__vite_ssr_import_0__.expect)(log.length).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("excludes derived facts (negative ids) from the event log", () => { - const log = new __vite_ssr_import_1__.EventLog(); - const sess = new __vite_ssr_import_2__.Session({ eventLog: log, autoFire: false }); - const wm = sess._getWM(); - wm.insert(-1, "Derived", 1); - sess.insert(-2, "Derived", 2); - (0,__vite_ssr_import_0__.expect)(log.length).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("Session without eventLog still works normally", () => { - const sess = new __vite_ssr_import_2__.Session({ autoFire: false }); - const id = sess.nextId(); - sess.insert(id, "Health", 100); - (0,__vite_ssr_import_0__.expect)(sess.get(id, "Health")).toBe(100); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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dXJjZXMiOlsiZXZlbnRsb2cudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgaXQsIGV4cGVjdCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB7IEV2ZW50TG9nIH0gZnJvbSBcIi4vZXZlbnRsb2cuanNcIjtcbmltcG9ydCB7IFNlc3Npb24gfSBmcm9tIFwiLi9zZXNzaW9uLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eUlkIH0gZnJvbSBcIi4vc2NoZW1hLmpzXCI7XG5cbmNvbnN0IG1rSWQgPSAobjogbnVtYmVyKSA9PiBuIGFzIEVudGl0eUlkO1xuXG5kZXNjcmliZShcIkV2ZW50TG9nXCIsICgpID0+IHtcbiAgaXQoXCJzdGFydHMgd2l0aCBzZXE9MCBhbmQgbm8gZXZlbnRzXCIsICgpID0+IHtcbiAgICBjb25zdCBsb2cgPSBuZXcgRXZlbnRMb2coKTtcbiAgICBleHBlY3QobG9nLmxlbmd0aCkudG9CZSgwKTtcbiAgICBleHBlY3QobG9nLmxhdGVzdFNlcSkudG9CZSgwKTtcbiAgfSk7XG5cbiAgaXQoXCJhcHBlbmRJbnNlcnQgaW5jcmVtZW50cyBzZXEgbW9ub3RvbmljYWxseVwiLCAoKSA9PiB7XG4gICAgY29uc3QgbG9nID0gbmV3IEV2ZW50TG9nKCk7XG4gICAgbG9nLmFwcGVuZEluc2VydChta0lkKDEpLCBcIkhlYWx0aFwiLCAxMDApO1xuICAgIGxvZy5hcHBlbmRJbnNlcnQobWtJZCgyKSwgXCJOYW1lXCIsIFwiQWxpY2VcIik7XG4gICAgZXhwZWN0KGxvZy5sYXRlc3RTZXEpLnRvQmUoMik7XG4gICAgZXhwZWN0KGxvZy5sZW5ndGgpLnRvQmUoMik7XG4gIH0pO1xuXG4gIGl0KFwiYXBwZW5kUmV0cmFjdCByZWNvcmRzIHJldHJhY3QgZXZlbnRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGxvZyA9IG5ldyBFdmVudExvZygpO1xuICAgIGxvZy5hcHBlbmRJbnNlcnQobWtJZCgxKSwgXCJIZWFsdGhcIiwgMTAwKTtcbiAgICBsb2cuYXBwZW5kUmV0cmFjdChta0lkKDEpLCBcIkhlYWx0aFwiLCAxMDApO1xuICAgIGNvbnN0IGV2ZW50cyA9IGxvZy5nZXRBbGwoKTtcbiAgICBleHBlY3QoZXZlbnRzWzBdPy5raW5kKS50b0JlKFwiaW5zZXJ0XCIpO1xuICAgIGV4cGVjdChldmVudHNbMV0/LmtpbmQpLnRvQmUoXCJyZXRyYWN0XCIpO1xuICB9KTtcblxuICBpdChcImFwcGVuZEZpcmUgcmVjb3JkcyBmaXJlIGV2ZW50IHdpdGggcnVsZU5hbWVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGxvZyA9IG5ldyBFdmVudExvZygpO1xuICAgIGxvZy5hcHBlbmRGaXJlKFwibW92ZS1waWVjZVwiKTtcbiAgICBjb25zdCBldnQgPSBsb2cuZ2V0QWxsKClbMF07XG4gICAgZXhwZWN0KGV2dD8ua2luZCkudG9CZShcImZpcmVcIik7XG4gICAgZXhwZWN0KGV2dD8ucnVsZU5hbWUpLnRvQmUoXCJtb3ZlLXBpZWNlXCIpO1xuICAgIGV4cGVjdChldnQ/LnNlcSkudG9CZSgxKTtcbiAgfSk7XG5cbiAgaXQoXCJnZXRTaW5jZShzZXEpIHJldHVybnMgZXZlbnRzIGFmdGVyIHNlcVwiLCAoKSA9PiB7XG4gICAgY29uc3QgbG9nID0gbmV3IEV2ZW50TG9nKCk7XG4gICAgbG9nLmFwcGVuZEluc2VydChta0lkKDEpLCBcIlhcIiwgMSk7XG4gICAgbG9nLmFwcGVuZEluc2VydChta0lkKDIpLCBcIlhcIiwgMik7XG4gICAgbG9nLmFwcGVuZEluc2VydChta0lkKDMpLCBcIlhcIiwgMyk7XG4gICAgY29uc3Qgc2luY2UgPSBsb2cuZ2V0U2luY2UoMSk7XG4gICAgZXhwZWN0KHNpbmNlKS50b0hhdmVMZW5ndGgoMik7XG4gICAgZXhwZWN0KHNpbmNlWzBdPy5zZXEpLnRvQmUoMik7XG4gICAgZXhwZWN0KHNpbmNlWzFdPy5zZXEpLnRvQmUoMyk7XG4gIH0pO1xuXG4gIGl0KFwiZ2V0U2luY2UoMCkgcmV0dXJucyBhbGwgZXZlbnRzXCIsICgpID0+IHtcbiAgICBjb25zdCBsb2cgPSBuZXcgRXZlbnRMb2coKTtcbiAgICBsb2cuYXBwZW5kSW5zZXJ0KG1rSWQoMSksIFwiWFwiLCAxKTtcbiAgICBsb2cuYXBwZW5kSW5zZXJ0KG1rSWQoMiksIFwiWFwiLCAyKTtcbiAgICBleHBlY3QobG9nLmdldFNpbmNlKDApKS50b0hhdmVMZW5ndGgoMik7XG4gIH0pO1xuXG4gIGl0KFwiZ2V0U2luY2UobGF0ZXN0U2VxKSByZXR1cm5zIGVtcHR5XCIsICgpID0+IHtcbiAgICBjb25zdCBsb2cgPSBuZXcgRXZlbnRMb2coKTtcbiAgICBsb2cuYXBwZW5kSW5zZXJ0KG1rSWQoMSksIFwiWFwiLCAxKTtcbiAgICBsb2cuYXBwZW5kSW5zZXJ0KG1rSWQoMiksIFwiWFwiLCAyKTtcbiAgICBleHBlY3QobG9nLmdldFNpbmNlKGxvZy5sYXRlc3RTZXEpKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xuXG4gIGl0KFwiZXZlbnRzIGFyZSBhcHBlbmQtb25seSAoZ2V0QWxsIHJldHVybnMgYSBjb3B5KVwiLCAoKSA9PiB7XG4gICAgY29uc3QgbG9nID0gbmV3IEV2ZW50TG9nKCk7XG4gICAgbG9nLmFwcGVuZEluc2VydChta0lkKDEpLCBcIlhcIiwgNDIpO1xuICAgIGNvbnN0IGZpcnN0ID0gbG9nLmdldEFsbCgpO1xuICAgIC8vIE11dGF0aW5nIHRoZSByZXR1cm5lZCBhcnJheSBtdXN0IG5vdCBhZmZlY3QgdGhlIGxvZy5cbiAgICAoZmlyc3QgYXMgdW5rbm93biBhcyB1bmtub3duW10pLmxlbmd0aCA9IDA7XG4gICAgZXhwZWN0KGxvZy5sZW5ndGgpLnRvQmUoMSk7XG4gICAgZXhwZWN0KGxvZy5nZXRBbGwoKSkudG9IYXZlTGVuZ3RoKDEpO1xuICB9KTtcblxuICBpdChcInJlY29yZHMgaW5zZXJ0IGV2ZW50IHdpdGggY29ycmVjdCBmaWVsZHNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGxvZyA9IG5ldyBFdmVudExvZygpO1xuICAgIGxvZy5hcHBlbmRJbnNlcnQobWtJZCg1KSwgXCJIZWFsdGhcIiwgOTkpO1xuICAgIGNvbnN0IGV2dCA9IGxvZy5nZXRBbGwoKVswXTtcbiAgICBleHBlY3QoZXZ0Py5raW5kKS50b0JlKFwiaW5zZXJ0XCIpO1xuICAgIGV4cGVjdChldnQ/LmlkKS50b0JlKDUpO1xuICAgIGV4cGVjdChldnQ/LmF0dHIpLnRvQmUoXCJIZWFsdGhcIik7XG4gICAgZXhwZWN0KGV2dD8udmFsdWUpLnRvQmUoOTkpO1xuICAgIGV4cGVjdChldnQ/LnNlcSkudG9CZSgxKTtcbiAgICBleHBlY3QodHlwZW9mIGV2dD8udHMpLnRvQmUoXCJudW1iZXJcIik7XG4gIH0pO1xuXG4gIGl0KFwicmVjb3JkcyByZXRyYWN0IGV2ZW50IHdpdGggY29ycmVjdCBmaWVsZHNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGxvZyA9IG5ldyBFdmVudExvZygpO1xuICAgIGxvZy5hcHBlbmRSZXRyYWN0KG1rSWQoNyksIFwiUG9zaXRpb25cIiwgXCJhMVwiKTtcbiAgICBjb25zdCBldnQgPSBsb2cuZ2V0QWxsKClbMF07XG4gICAgZXhwZWN0KGV2dD8ua2luZCkudG9CZShcInJldHJhY3RcIik7XG4gICAgZXhwZWN0KGV2dD8uaWQpLnRvQmUoNyk7XG4gICAgZXhwZWN0KGV2dD8uYXR0cikudG9CZShcIlBvc2l0aW9uXCIpO1xuICAgIGV4cGVjdChldnQ/LnZhbHVlKS50b0JlKFwiYTFcIik7XG4gICAgZXhwZWN0KGV2dD8uc2VxKS50b0JlKDEpO1xuICB9KTtcblxuICBpdChcInRpbWVzdGFtcHMgYXJlIG5vbi1kZWNyZWFzaW5nIGFjcm9zcyBhcHBlbmRzXCIsICgpID0+IHtcbiAgICBjb25zdCBsb2cgPSBuZXcgRXZlbnRMb2coKTtcbiAgICBsb2cuYXBwZW5kSW5zZXJ0KG1rSWQoMSksIFwiQVwiLCAxKTtcbiAgICBsb2cuYXBwZW5kSW5zZXJ0KG1rSWQoMSksIFwiQlwiLCAyKTtcbiAgICBsb2cuYXBwZW5kSW5zZXJ0KG1rSWQoMSksIFwiQ1wiLCAzKTtcbiAgICBjb25zdCBldmVudHMgPSBsb2cuZ2V0QWxsKCk7XG4gICAgZXhwZWN0KGV2ZW50c1swXSEudHMpLnRvQmVMZXNzVGhhbk9yRXF1YWwoZXZlbnRzWzFdIS50cyk7XG4gICAgZXhwZWN0KGV2ZW50c1sxXSEudHMpLnRvQmVMZXNzVGhhbk9yRXF1YWwoZXZlbnRzWzJdIS50cyk7XG4gIH0pO1xuXG4gIGl0KFwic2VxcyBhcmUgc3RyaWN0bHkgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nICgxLCAyLCAzLCAuLi4pXCIsICgpID0+IHtcbiAgICBjb25zdCBsb2cgPSBuZXcgRXZlbnRMb2coKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIGxvZy5hcHBlbmRJbnNlcnQobWtJZChpICsgMSksIFwiTlwiLCBpKTtcbiAgICBjb25zdCBldmVudHMgPSBsb2cuZ2V0QWxsKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGV4cGVjdChldmVudHNbaV0hLnNlcSkudG9CZShpICsgMSk7XG4gICAgfVxuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIkV2ZW50TG9nICsgU2Vzc2lvbiBpbnRlZ3JhdGlvblwiLCAoKSA9PiB7XG4gIGl0KFwicmVjb3JkcyBpbnNlcnQgdmlhIFNlc3Npb24uaW5zZXJ0IHdoZW4gRXZlbnRMb2cgaXMgYXR0YWNoZWRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGxvZyA9IG5ldyBFdmVudExvZygpO1xuICAgIGNvbnN0IHNlc3MgPSBuZXcgU2Vzc2lvbih7IGV2ZW50TG9nOiBsb2csIGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBjb25zdCBpZCA9IHNlc3MubmV4dElkKCk7XG4gICAgc2Vzcy5pbnNlcnQoaWQsIFwiSGVhbHRoXCIsIDEwMCk7XG4gICAgY29uc3QgZXZlbnRzID0gbG9nLmdldEFsbCgpO1xuICAgIGV4cGVjdChldmVudHMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICBleHBlY3QoZXZlbnRzWzBdPy5raW5kKS50b0JlKFwiaW5zZXJ0XCIpO1xuICAgIGV4cGVjdChldmVudHNbMF0/LmlkKS50b0JlKGlkKTtcbiAgICBleHBlY3QoZXZlbnRzWzBdPy5hdHRyKS50b0JlKFwiSGVhbHRoXCIpO1xuICAgIGV4cGVjdChldmVudHNbMF0/LnZhbHVlKS50b0JlKDEwMCk7XG4gIH0pO1xuXG4gIGl0KFwicmVjb3JkcyByZXRyYWN0IHZpYSBTZXNzaW9uLnJldHJhY3Qgd2l0aCBvbGQgdmFsdWVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGxvZyA9IG5ldyBFdmVudExvZygpO1xuICAgIGNvbnN0IHNlc3MgPSBuZXcgU2Vzc2lvbih7IGV2ZW50TG9nOiBsb2csIGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBjb25zdCBpZCA9IHNlc3MubmV4dElkKCk7XG4gICAgc2Vzcy5pbnNlcnQoaWQsIFwiSGVhbHRoXCIsIDEwMCk7XG4gICAgc2Vzcy5yZXRyYWN0KGlkLCBcIkhlYWx0aFwiKTtcbiAgICBjb25zdCBldmVudHMgPSBsb2cuZ2V0QWxsKCk7XG4gICAgZXhwZWN0KGV2ZW50cykudG9IYXZlTGVuZ3RoKDIpO1xuICAgIGV4cGVjdChldmVudHNbMV0/LmtpbmQpLnRvQmUoXCJyZXRyYWN0XCIpO1xuICAgIGV4cGVjdChldmVudHNbMV0/LmlkKS50b0JlKGlkKTtcbiAgICBleHBlY3QoZXZlbnRzWzFdPy5hdHRyKS50b0JlKFwiSGVhbHRoXCIpO1xuICAgIGV4cGVjdChldmVudHNbMV0/LnZhbHVlKS50b0JlKDEwMCk7XG4gIH0pO1xuXG4gIGl0KFwicmVjb3JkcyBhbiB1cGRhdGUgYXMgcmV0cmFjdC1vZi1vbGQgdGhlbiBpbnNlcnQtb2YtbmV3XCIsICgpID0+IHtcbiAgICBjb25zdCBsb2cgPSBuZXcgRXZlbnRMb2coKTtcbiAgICBjb25zdCBzZXNzID0gbmV3IFNlc3Npb24oeyBldmVudExvZzogbG9nLCBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgY29uc3QgaWQgPSBzZXNzLm5leHRJZCgpO1xuICAgIHNlc3MuaW5zZXJ0KGlkLCBcIkhlYWx0aFwiLCAxMDApO1xuICAgIHNlc3MuaW5zZXJ0KGlkLCBcIkhlYWx0aFwiLCA1MCk7XG4gICAgY29uc3QgZXZlbnRzID0gbG9nLmdldEFsbCgpO1xuICAgIC8vIDE6IGluc2VydCAxMDAsIDI6IHJldHJhY3QgMTAwICh1cGRhdGUpLCAzOiBpbnNlcnQgNTBcbiAgICBleHBlY3QoZXZlbnRzKS50b0hhdmVMZW5ndGgoMyk7XG4gICAgZXhwZWN0KGV2ZW50c1swXT8ua2luZCkudG9CZShcImluc2VydFwiKTtcbiAgICBleHBlY3QoZXZlbnRzWzBdPy52YWx1ZSkudG9CZSgxMDApO1xuICAgIGV4cGVjdChldmVudHNbMV0/LmtpbmQpLnRvQmUoXCJyZXRyYWN0XCIpO1xuICAgIGV4cGVjdChldmVudHNbMV0/LnZhbHVlKS50b0JlKDEwMCk7XG4gICAgZXhwZWN0KGV2ZW50c1syXT8ua2luZCkudG9CZShcImluc2VydFwiKTtcbiAgICBleHBlY3QoZXZlbnRzWzJdPy52YWx1ZSkudG9CZSg1MCk7XG4gIH0pO1xuXG4gIGl0KFwiZG9lcyBub3QgcmVjb3JkIHdoZW4gcmV0cmFjdGluZyBhIG5vbi1leGlzdGVudCBmYWN0XCIsICgpID0+IHtcbiAgICBjb25zdCBsb2cgPSBuZXcgRXZlbnRMb2coKTtcbiAgICBjb25zdCBzZXNzID0gbmV3IFNlc3Npb24oeyBldmVudExvZzogbG9nLCBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgY29uc3QgaWQgPSBzZXNzLm5leHRJZCgpO1xuICAgIHNlc3MucmV0cmFjdChpZCwgXCJIZWFsdGhcIik7XG4gICAgZXhwZWN0KGxvZy5sZW5ndGgpLnRvQmUoMCk7XG4gIH0pO1xuXG4gIGl0KFwiZXhjbHVkZXMgZGVyaXZlZCBmYWN0cyAobmVnYXRpdmUgaWRzKSBmcm9tIHRoZSBldmVudCBsb2dcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGxvZyA9IG5ldyBFdmVudExvZygpO1xuICAgIGNvbnN0IHNlc3MgPSBuZXcgU2Vzc2lvbih7IGV2ZW50TG9nOiBsb2csIGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBjb25zdCB3bSA9IHNlc3MuX2dldFdNKCk7XG4gICAgLy8gU2ltdWxhdGUgYSBkZXJpdmVkLWZhY3QgaW5zZXJ0IHZpYSBkaXJlY3QgV00gKGJ5cGFzc2VzIFNlc3Npb24pLlxuICAgIC8vIEFsc28gY292ZXIgdGhlIGRlZmVuc2l2ZSBicmFuY2ggYnkgY2FsbGluZyBTZXNzaW9uLmluc2VydCB3aXRoIGFcbiAgICAvLyBuZWdhdGl2ZSBpZCBkaXJlY3RseS5cbiAgICB3bS5pbnNlcnQoLTEgYXMgRW50aXR5SWQsIFwiRGVyaXZlZFwiLCAxKTtcbiAgICBzZXNzLmluc2VydCgtMiBhcyBFbnRpdHlJZCwgXCJEZXJpdmVkXCIsIDIpO1xuICAgIGV4cGVjdChsb2cubGVuZ3RoKS50b0JlKDApO1xuICB9KTtcblxuICBpdChcIlNlc3Npb24gd2l0aG91dCBldmVudExvZyBzdGlsbCB3b3JrcyBub3JtYWxseVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2VzcyA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGNvbnN0IGlkID0gc2Vzcy5uZXh0SWQoKTtcbiAgICBzZXNzLmluc2VydChpZCwgXCJIZWFsdGhcIiwgMTAwKTtcbiAgICBleHBlY3Qoc2Vzcy5nZXQoaWQsIFwiSGVhbHRoXCIpKS50b0JlKDEwMCk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvcmV0ZS9zcmMvZXZlbnRsb2cudGVzdC50cyJ9 diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/33ac9e23c363e7a132e75690edb2049ac44ff228 b/IJGn1F-WxLUCbfU1lu8pU/ssr/33ac9e23c363e7a132e75690edb2049ac44ff228 deleted file mode 100644 index 847e413..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/33ac9e23c363e7a132e75690edb2049ac44ff228 +++ /dev/null @@ -1,213 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("vitest", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/existential.ts", {"importedNames":["ExistentialNode"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/alpha.ts", {"importedNames":["AlphaMemory"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/beta.ts", {"importedNames":["Token","BetaMemory"]}); -const mkId = (n) => n; -const mkFact = (id, attr, value) => ({ - id: mkId(id), - attr, - value -}); -(0,__vite_ssr_import_0__.describe)("ExistentialNode", () => { - (0,__vite_ssr_import_0__.it)("blocks token when NO matching facts exist in right memory", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const exists = new __vite_ssr_import_1__.ExistentialNode(rightMem, []); - exists.addDownstreamActivate((t) => outMem.leftActivate(t)); - const token = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 1), {}); - exists.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("passes token when at least one matching fact exists", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const exists = new __vite_ssr_import_1__.ExistentialNode(rightMem, []); - exists.addDownstreamActivate((t) => outMem.leftActivate(t)); - rightMem.addFact(mkId(10), "Attacker", true); - const token = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 1), {}); - exists.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - }); - (0,__vite_ssr_import_0__.it)("single activation despite multiple supporting facts (no duplicates)", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const exists = new __vite_ssr_import_1__.ExistentialNode(rightMem, []); - exists.addDownstreamActivate((t) => outMem.leftActivate(t)); - exists.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - const token = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 1), {}); - exists.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - exists.rightActivate(mkId(1), "Attacker", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - exists.rightActivate(mkId(2), "Attacker", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - }); - (0,__vite_ssr_import_0__.it)("right-deactivate: stays active when other supporting facts remain", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const exists = new __vite_ssr_import_1__.ExistentialNode(rightMem, []); - exists.addDownstreamActivate((t) => outMem.leftActivate(t)); - exists.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - rightMem.addFact(mkId(1), "A", true); - rightMem.addFact(mkId(2), "A", true); - const token = new __vite_ssr_import_3__.Token(null, mkFact(3, "X", 1), {}); - exists.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - exists.rightDeactivate(mkId(1), "A", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - exists.rightDeactivate(mkId(2), "A", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("right-activate: activates a previously-blocked token", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const exists = new __vite_ssr_import_1__.ExistentialNode(rightMem, []); - exists.addDownstreamActivate((t) => outMem.leftActivate(t)); - exists.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - const token = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 1), {}); - exists.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - exists.rightActivate(mkId(99), "Exists", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - }); - (0,__vite_ssr_import_0__.it)("left-deactivate: removes token from downstream", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const exists = new __vite_ssr_import_1__.ExistentialNode(rightMem, []); - exists.addDownstreamActivate((t) => outMem.leftActivate(t)); - exists.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - rightMem.addFact(mkId(1), "A", true); - const token = new __vite_ssr_import_3__.Token(null, mkFact(2, "X", 1), {}); - exists.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - exists.leftDeactivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("left-deactivate: silently ignores unknown tokens (never-activated)", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const exists = new __vite_ssr_import_1__.ExistentialNode(rightMem, []); - exists.addDownstreamActivate((t) => outMem.leftActivate(t)); - exists.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - const orphan = new __vite_ssr_import_3__.Token(null, mkFact(99, "X", 1), {}); - (0,__vite_ssr_import_0__.expect)(() => exists.leftDeactivate(orphan)).not.toThrow(); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("join tests: idEquality constrains which right facts count as support", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const exists = new __vite_ssr_import_1__.ExistentialNode(rightMem, [ - { type: "idEquality", leftVar: "target" } - ]); - exists.addDownstreamActivate((t) => outMem.leftActivate(t)); - exists.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - const token = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 1), { target: mkId(5) }); - exists.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - exists.rightActivate(mkId(7), "A", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - exists.rightActivate(mkId(5), "A", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - exists.rightDeactivate(mkId(7), "A", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - exists.rightDeactivate(mkId(5), "A", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("join tests: valueEquality constrains support by right fact value", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const exists = new __vite_ssr_import_1__.ExistentialNode(rightMem, [ - { type: "valueEquality", leftVar: "needle" } - ]); - exists.addDownstreamActivate((t) => outMem.leftActivate(t)); - const token = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 1), { - needle: "pin" - }); - exists.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - exists.rightActivate(mkId(1), "A", "stick"); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - exists.rightActivate(mkId(2), "A", "pin"); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - }); - (0,__vite_ssr_import_0__.it)("initial count computed from pre-existing right-memory facts", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const exists = new __vite_ssr_import_1__.ExistentialNode(rightMem, []); - exists.addDownstreamActivate((t) => outMem.leftActivate(t)); - exists.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - rightMem.addFact(mkId(1), "A", true); - rightMem.addFact(mkId(2), "A", true); - rightMem.addFact(mkId(3), "A", true); - const token = new __vite_ssr_import_3__.Token(null, mkFact(9, "X", 1), {}); - exists.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - exists.rightDeactivate(mkId(1), "A", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - exists.rightDeactivate(mkId(2), "A", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - exists.rightDeactivate(mkId(3), "A", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("right-deactivate with no matching tokens is a safe no-op", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const exists = new __vite_ssr_import_1__.ExistentialNode(rightMem, []); - exists.addDownstreamActivate((t) => outMem.leftActivate(t)); - exists.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - (0,__vite_ssr_import_0__.expect)( - () => exists.rightDeactivate(mkId(1), "A", true) - ).not.toThrow(); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("safety: test referencing unbound variable fails — right fact does not count as support", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const exists = new __vite_ssr_import_1__.ExistentialNode(rightMem, [ - { type: "idEquality", leftVar: "missing" } - ]); - exists.addDownstreamActivate((t) => outMem.leftActivate(t)); - const token = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 1), {}); - exists.leftActivate(token); - exists.rightActivate(mkId(5), "A", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("safety: rightDeactivate floors at 0 — no underflow or spurious deactivate", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const exists = new __vite_ssr_import_1__.ExistentialNode(rightMem, []); - exists.addDownstreamActivate((t) => outMem.leftActivate(t)); - let deactivations = 0; - exists.addDownstreamDeactivate(() => deactivations++); - const token = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 1), {}); - exists.leftActivate(token); - exists.rightDeactivate(mkId(42), "A", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - (0,__vite_ssr_import_0__.expect)(deactivations).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("supports multiple left tokens independently", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const exists = new __vite_ssr_import_1__.ExistentialNode(rightMem, [ - { type: "idEquality", leftVar: "t" } - ]); - exists.addDownstreamActivate((t) => outMem.leftActivate(t)); - exists.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - const tokenA = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 1), { t: mkId(100) }); - const tokenB = new __vite_ssr_import_3__.Token(null, mkFact(2, "X", 1), { t: mkId(200) }); - exists.leftActivate(tokenA); - exists.leftActivate(tokenB); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - exists.rightActivate(mkId(100), "A", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(outMem.tokens[0]).toBe(tokenA); - exists.rightActivate(mkId(200), "A", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(2); - exists.rightDeactivate(mkId(100), "A", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(outMem.tokens[0]).toBe(tokenB); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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bkUscUNBQU8sT0FBTyxNQUFNLEVBQUUsYUFBYSxDQUFDO0FBQ3BDLHFDQUFPLE9BQU8sT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLE1BQU07QUFBQSxFQUN0QyxDQUFDO0FBQ0gsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiZXhpc3RlbnRpYWwudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgaXQsIGV4cGVjdCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB7IEV4aXN0ZW50aWFsTm9kZSB9IGZyb20gXCIuL2V4aXN0ZW50aWFsLmpzXCI7XG5pbXBvcnQgeyBBbHBoYU1lbW9yeSB9IGZyb20gXCIuL2FscGhhLmpzXCI7XG5pbXBvcnQgeyBUb2tlbiwgQmV0YU1lbW9yeSB9IGZyb20gXCIuL2JldGEuanNcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiLi9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgQXR0cktleSwgRmFjdFZhbHVlIH0gZnJvbSBcIi4vd20uanNcIjtcblxuY29uc3QgbWtJZCA9IChuOiBudW1iZXIpID0+IG4gYXMgRW50aXR5SWQ7XG5jb25zdCBta0ZhY3QgPSAoaWQ6IG51bWJlciwgYXR0cjogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4gKHtcbiAgaWQ6IG1rSWQoaWQpLFxuICBhdHRyOiBhdHRyIGFzIEF0dHJLZXksXG4gIHZhbHVlOiB2YWx1ZSBhcyBGYWN0VmFsdWUsXG59KTtcblxuZGVzY3JpYmUoXCJFeGlzdGVudGlhbE5vZGVcIiwgKCkgPT4ge1xuICBpdChcImJsb2NrcyB0b2tlbiB3aGVuIE5PIG1hdGNoaW5nIGZhY3RzIGV4aXN0IGluIHJpZ2h0IG1lbW9yeVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmlnaHRNZW0gPSBuZXcgQWxwaGFNZW1vcnkoKTtcbiAgICBjb25zdCBvdXRNZW0gPSBuZXcgQmV0YU1lbW9yeSgpO1xuICAgIGNvbnN0IGV4aXN0cyA9IG5ldyBFeGlzdGVudGlhbE5vZGUocmlnaHRNZW0sIFtdKTtcbiAgICBleGlzdHMuYWRkRG93bnN0cmVhbUFjdGl2YXRlKCh0KSA9PiBvdXRNZW0ubGVmdEFjdGl2YXRlKHQpKTtcblxuICAgIGNvbnN0IHRva2VuID0gbmV3IFRva2VuKG51bGwsIG1rRmFjdCgxLCBcIlhcIiwgMSksIHt9KTtcbiAgICBleGlzdHMubGVmdEFjdGl2YXRlKHRva2VuKTtcblxuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMCk7IC8vIG5vIHN1cHBvcnRpbmcgZmFjdHNcbiAgfSk7XG5cbiAgaXQoXCJwYXNzZXMgdG9rZW4gd2hlbiBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcgZmFjdCBleGlzdHNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJpZ2h0TWVtID0gbmV3IEFscGhhTWVtb3J5KCk7XG4gICAgY29uc3Qgb3V0TWVtID0gbmV3IEJldGFNZW1vcnkoKTtcbiAgICBjb25zdCBleGlzdHMgPSBuZXcgRXhpc3RlbnRpYWxOb2RlKHJpZ2h0TWVtLCBbXSk7XG4gICAgZXhpc3RzLmFkZERvd25zdHJlYW1BY3RpdmF0ZSgodCkgPT4gb3V0TWVtLmxlZnRBY3RpdmF0ZSh0KSk7XG5cbiAgICByaWdodE1lbS5hZGRGYWN0KG1rSWQoMTApLCBcIkF0dGFja2VyXCIgYXMgQXR0cktleSwgdHJ1ZSBhcyBGYWN0VmFsdWUpO1xuXG4gICAgY29uc3QgdG9rZW4gPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDEsIFwiWFwiLCAxKSwge30pO1xuICAgIGV4aXN0cy5sZWZ0QWN0aXZhdGUodG9rZW4pO1xuXG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgfSk7XG5cbiAgaXQoXCJzaW5nbGUgYWN0aXZhdGlvbiBkZXNwaXRlIG11bHRpcGxlIHN1cHBvcnRpbmcgZmFjdHMgKG5vIGR1cGxpY2F0ZXMpXCIsICgpID0+IHtcbiAgICBjb25zdCByaWdodE1lbSA9IG5ldyBBbHBoYU1lbW9yeSgpO1xuICAgIGNvbnN0IG91dE1lbSA9IG5ldyBCZXRhTWVtb3J5KCk7XG4gICAgY29uc3QgZXhpc3RzID0gbmV3IEV4aXN0ZW50aWFsTm9kZShyaWdodE1lbSwgW10pO1xuICAgIGV4aXN0cy5hZGREb3duc3RyZWFtQWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0QWN0aXZhdGUodCkpO1xuICAgIGV4aXN0cy5hZGREb3duc3RyZWFtRGVhY3RpdmF0ZSgodCkgPT4gb3V0TWVtLmxlZnREZWFjdGl2YXRlKHQpKTtcblxuICAgIGNvbnN0IHRva2VuID0gbmV3IFRva2VuKG51bGwsIG1rRmFjdCgxLCBcIlhcIiwgMSksIHt9KTtcbiAgICBleGlzdHMubGVmdEFjdGl2YXRlKHRva2VuKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDApOyAvLyBubyBmYWN0cyB5ZXRcblxuICAgIC8vIEFkZCBmaXJzdCBzdXBwb3J0aW5nIGZhY3Qg4oaSIGFjdGl2YXRlc1xuICAgIGV4aXN0cy5yaWdodEFjdGl2YXRlKG1rSWQoMSksIFwiQXR0YWNrZXJcIiBhcyBBdHRyS2V5LCB0cnVlIGFzIEZhY3RWYWx1ZSk7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgxKTtcblxuICAgIC8vIEFkZCBzZWNvbmQgc3VwcG9ydGluZyBmYWN0IOKGkiBzaG91bGQgTk9UIHJlLWFjdGl2YXRlXG4gICAgZXhpc3RzLnJpZ2h0QWN0aXZhdGUobWtJZCgyKSwgXCJBdHRhY2tlclwiIGFzIEF0dHJLZXksIHRydWUgYXMgRmFjdFZhbHVlKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDEpOyAvLyBzdGlsbCBleGFjdGx5IDFcbiAgfSk7XG5cbiAgaXQoXCJyaWdodC1kZWFjdGl2YXRlOiBzdGF5cyBhY3RpdmUgd2hlbiBvdGhlciBzdXBwb3J0aW5nIGZhY3RzIHJlbWFpblwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmlnaHRNZW0gPSBuZXcgQWxwaGFNZW1vcnkoKTtcbiAgICBjb25zdCBvdXRNZW0gPSBuZXcgQmV0YU1lbW9yeSgpO1xuICAgIGNvbnN0IGV4aXN0cyA9IG5ldyBFeGlzdGVudGlhbE5vZGUocmlnaHRNZW0sIFtdKTtcbiAgICBleGlzdHMuYWRkRG93bnN0cmVhbUFjdGl2YXRlKCh0KSA9PiBvdXRNZW0ubGVmdEFjdGl2YXRlKHQpKTtcbiAgICBleGlzdHMuYWRkRG93bnN0cmVhbURlYWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0RGVhY3RpdmF0ZSh0KSk7XG5cbiAgICByaWdodE1lbS5hZGRGYWN0KG1rSWQoMSksIFwiQVwiIGFzIEF0dHJLZXksIHRydWUgYXMgRmFjdFZhbHVlKTtcbiAgICByaWdodE1lbS5hZGRGYWN0KG1rSWQoMiksIFwiQVwiIGFzIEF0dHJLZXksIHRydWUgYXMgRmFjdFZhbHVlKTtcblxuICAgIGNvbnN0IHRva2VuID0gbmV3IFRva2VuKG51bGwsIG1rRmFjdCgzLCBcIlhcIiwgMSksIHt9KTtcbiAgICBleGlzdHMubGVmdEFjdGl2YXRlKHRva2VuKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDEpO1xuXG4gICAgLy8gUmVtb3ZlIG9uZSBzdXBwb3J0aW5nIGZhY3Qg4oCUIHN0aWxsIGhhcyBhbm90aGVyIOKGkiBzdGF5cyBhY3RpdmVcbiAgICBleGlzdHMucmlnaHREZWFjdGl2YXRlKG1rSWQoMSksIFwiQVwiIGFzIEF0dHJLZXksIHRydWUgYXMgRmFjdFZhbHVlKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDEpO1xuXG4gICAgLy8gUmVtb3ZlIGxhc3Qgc3VwcG9ydGluZyBmYWN0IOKGkiBkZWFjdGl2YXRlc1xuICAgIGV4aXN0cy5yaWdodERlYWN0aXZhdGUobWtJZCgyKSwgXCJBXCIgYXMgQXR0cktleSwgdHJ1ZSBhcyBGYWN0VmFsdWUpO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xuXG4gIGl0KFwicmlnaHQtYWN0aXZhdGU6IGFjdGl2YXRlcyBhIHByZXZpb3VzbHktYmxvY2tlZCB0b2tlblwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmlnaHRNZW0gPSBuZXcgQWxwaGFNZW1vcnkoKTtcbiAgICBjb25zdCBvdXRNZW0gPSBuZXcgQmV0YU1lbW9yeSgpO1xuICAgIGNvbnN0IGV4aXN0cyA9IG5ldyBFeGlzdGVudGlhbE5vZGUocmlnaHRNZW0sIFtdKTtcbiAgICBleGlzdHMuYWRkRG93bnN0cmVhbUFjdGl2YXRlKCh0KSA9PiBvdXRNZW0ubGVmdEFjdGl2YXRlKHQpKTtcbiAgICBleGlzdHMuYWRkRG93bnN0cmVhbURlYWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0RGVhY3RpdmF0ZSh0KSk7XG5cbiAgICBjb25zdCB0b2tlbiA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoMSwgXCJYXCIsIDEpLCB7fSk7XG4gICAgZXhpc3RzLmxlZnRBY3RpdmF0ZSh0b2tlbik7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgwKTsgLy8gYmxvY2tlZFxuXG4gICAgLy8gU3VwcG9ydGluZyBmYWN0IGFycml2ZXNcbiAgICBleGlzdHMucmlnaHRBY3RpdmF0ZShta0lkKDk5KSwgXCJFeGlzdHNcIiBhcyBBdHRyS2V5LCB0cnVlIGFzIEZhY3RWYWx1ZSk7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgxKTsgLy8gbm93IGFjdGl2ZVxuICB9KTtcblxuICBpdChcImxlZnQtZGVhY3RpdmF0ZTogcmVtb3ZlcyB0b2tlbiBmcm9tIGRvd25zdHJlYW1cIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJpZ2h0TWVtID0gbmV3IEFscGhhTWVtb3J5KCk7XG4gICAgY29uc3Qgb3V0TWVtID0gbmV3IEJldGFNZW1vcnkoKTtcbiAgICBjb25zdCBleGlzdHMgPSBuZXcgRXhpc3RlbnRpYWxOb2RlKHJpZ2h0TWVtLCBbXSk7XG4gICAgZXhpc3RzLmFkZERvd25zdHJlYW1BY3RpdmF0ZSgodCkgPT4gb3V0TWVtLmxlZnRBY3RpdmF0ZSh0KSk7XG4gICAgZXhpc3RzLmFkZERvd25zdHJlYW1EZWFjdGl2YXRlKCh0KSA9PiBvdXRNZW0ubGVmdERlYWN0aXZhdGUodCkpO1xuXG4gICAgcmlnaHRNZW0uYWRkRmFjdChta0lkKDEpLCBcIkFcIiBhcyBBdHRyS2V5LCB0cnVlIGFzIEZhY3RWYWx1ZSk7XG4gICAgY29uc3QgdG9rZW4gPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDIsIFwiWFwiLCAxKSwge30pO1xuICAgIGV4aXN0cy5sZWZ0QWN0aXZhdGUodG9rZW4pO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMSk7XG5cbiAgICBleGlzdHMubGVmdERlYWN0aXZhdGUodG9rZW4pO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xuXG4gIGl0KFwibGVmdC1kZWFjdGl2YXRlOiBzaWxlbnRseSBpZ25vcmVzIHVua25vd24gdG9rZW5zIChuZXZlci1hY3RpdmF0ZWQpXCIsICgpID0+IHtcbiAgICBjb25zdCByaWdodE1lbSA9IG5ldyBBbHBoYU1lbW9yeSgpO1xuICAgIGNvbnN0IG91dE1lbSA9IG5ldyBCZXRhTWVtb3J5KCk7XG4gICAgY29uc3QgZXhpc3RzID0gbmV3IEV4aXN0ZW50aWFsTm9kZShyaWdodE1lbSwgW10pO1xuICAgIGV4aXN0cy5hZGREb3duc3RyZWFtQWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0QWN0aXZhdGUodCkpO1xuICAgIGV4aXN0cy5hZGREb3duc3RyZWFtRGVhY3RpdmF0ZSgodCkgPT4gb3V0TWVtLmxlZnREZWFjdGl2YXRlKHQpKTtcblxuICAgIGNvbnN0IG9ycGhhbiA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoOTksIFwiWFwiLCAxKSwge30pO1xuICAgIGV4cGVjdCgoKSA9PiBleGlzdHMubGVmdERlYWN0aXZhdGUob3JwaGFuKSkubm90LnRvVGhyb3coKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcblxuICBpdChcImpvaW4gdGVzdHM6IGlkRXF1YWxpdHkgY29uc3RyYWlucyB3aGljaCByaWdodCBmYWN0cyBjb3VudCBhcyBzdXBwb3J0XCIsICgpID0+IHtcbiAgICBjb25zdCByaWdodE1lbSA9IG5ldyBBbHBoYU1lbW9yeSgpO1xuICAgIGNvbnN0IG91dE1lbSA9IG5ldyBCZXRhTWVtb3J5KCk7XG4gICAgLy8gVG9rZW4ncyBgdGFyZ2V0YCBiaW5kaW5nIG11c3QgZXF1YWwgcmlnaHQgZmFjdCdzIGVudGl0eSBpZFxuICAgIGNvbnN0IGV4aXN0cyA9IG5ldyBFeGlzdGVudGlhbE5vZGUocmlnaHRNZW0sIFtcbiAgICAgIHsgdHlwZTogXCJpZEVxdWFsaXR5XCIsIGxlZnRWYXI6IFwidGFyZ2V0XCIgfSxcbiAgICBdKTtcbiAgICBleGlzdHMuYWRkRG93bnN0cmVhbUFjdGl2YXRlKCh0KSA9PiBvdXRNZW0ubGVmdEFjdGl2YXRlKHQpKTtcbiAgICBleGlzdHMuYWRkRG93bnN0cmVhbURlYWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0RGVhY3RpdmF0ZSh0KSk7XG5cbiAgICAvLyBUb2tlbiBiaW5kcyB0YXJnZXQ9NVxuICAgIGNvbnN0IHRva2VuID0gbmV3IFRva2VuKG51bGwsIG1rRmFjdCgxLCBcIlhcIiwgMSksIHsgdGFyZ2V0OiBta0lkKDUpIH0pO1xuICAgIGV4aXN0cy5sZWZ0QWN0aXZhdGUodG9rZW4pO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMCk7XG5cbiAgICAvLyBOb24tbWF0Y2hpbmcgZmFjdCAoaWQ9Nyk6IGRvZXMgTk9UIGFjdGl2YXRlXG4gICAgZXhpc3RzLnJpZ2h0QWN0aXZhdGUobWtJZCg3KSwgXCJBXCIgYXMgQXR0cktleSwgdHJ1ZSBhcyBGYWN0VmFsdWUpO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMCk7XG5cbiAgICAvLyBNYXRjaGluZyBmYWN0IChpZD01KTogYWN0aXZhdGVzXG4gICAgZXhpc3RzLnJpZ2h0QWN0aXZhdGUobWtJZCg1KSwgXCJBXCIgYXMgQXR0cktleSwgdHJ1ZSBhcyBGYWN0VmFsdWUpO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMSk7XG5cbiAgICAvLyBSZW1vdmluZyBub24tbWF0Y2hpbmcgZmFjdDogbm8gY2hhbmdlXG4gICAgZXhpc3RzLnJpZ2h0RGVhY3RpdmF0ZShta0lkKDcpLCBcIkFcIiBhcyBBdHRyS2V5LCB0cnVlIGFzIEZhY3RWYWx1ZSk7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgxKTtcblxuICAgIC8vIFJlbW92aW5nIG1hdGNoaW5nIGZhY3Q6IGRlYWN0aXZhdGVzXG4gICAgZXhpc3RzLnJpZ2h0RGVhY3RpdmF0ZShta0lkKDUpLCBcIkFcIiBhcyBBdHRyS2V5LCB0cnVlIGFzIEZhY3RWYWx1ZSk7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG5cbiAgaXQoXCJqb2luIHRlc3RzOiB2YWx1ZUVxdWFsaXR5IGNvbnN0cmFpbnMgc3VwcG9ydCBieSByaWdodCBmYWN0IHZhbHVlXCIsICgpID0+IHtcbiAgICBjb25zdCByaWdodE1lbSA9IG5ldyBBbHBoYU1lbW9yeSgpO1xuICAgIGNvbnN0IG91dE1lbSA9IG5ldyBCZXRhTWVtb3J5KCk7XG4gICAgY29uc3QgZXhpc3RzID0gbmV3IEV4aXN0ZW50aWFsTm9kZShyaWdodE1lbSwgW1xuICAgICAgeyB0eXBlOiBcInZhbHVlRXF1YWxpdHlcIiwgbGVmdFZhcjogXCJuZWVkbGVcIiB9LFxuICAgIF0pO1xuICAgIGV4aXN0cy5hZGREb3duc3RyZWFtQWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0QWN0aXZhdGUodCkpO1xuXG4gICAgY29uc3QgdG9rZW4gPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDEsIFwiWFwiLCAxKSwge1xuICAgICAgbmVlZGxlOiBcInBpblwiIGFzIEZhY3RWYWx1ZSxcbiAgICB9KTtcbiAgICBleGlzdHMubGVmdEFjdGl2YXRlKHRva2VuKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDApO1xuXG4gICAgLy8gV3JvbmcgdmFsdWVcbiAgICBleGlzdHMucmlnaHRBY3RpdmF0ZShta0lkKDEpLCBcIkFcIiBhcyBBdHRyS2V5LCBcInN0aWNrXCIgYXMgRmFjdFZhbHVlKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDApO1xuXG4gICAgLy8gQ29ycmVjdCB2YWx1ZVxuICAgIGV4aXN0cy5yaWdodEFjdGl2YXRlKG1rSWQoMiksIFwiQVwiIGFzIEF0dHJLZXksIFwicGluXCIgYXMgRmFjdFZhbHVlKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDEpO1xuICB9KTtcblxuICBpdChcImluaXRpYWwgY291bnQgY29tcHV0ZWQgZnJvbSBwcmUtZXhpc3RpbmcgcmlnaHQtbWVtb3J5IGZhY3RzXCIsICgpID0+IHtcbiAgICBjb25zdCByaWdodE1lbSA9IG5ldyBBbHBoYU1lbW9yeSgpO1xuICAgIGNvbnN0IG91dE1lbSA9IG5ldyBCZXRhTWVtb3J5KCk7XG4gICAgY29uc3QgZXhpc3RzID0gbmV3IEV4aXN0ZW50aWFsTm9kZShyaWdodE1lbSwgW10pO1xuICAgIGV4aXN0cy5hZGREb3duc3RyZWFtQWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0QWN0aXZhdGUodCkpO1xuICAgIGV4aXN0cy5hZGREb3duc3RyZWFtRGVhY3RpdmF0ZSgodCkgPT4gb3V0TWVtLmxlZnREZWFjdGl2YXRlKHQpKTtcblxuICAgIC8vIFNlZWQgbXVsdGlwbGUgZmFjdHMgQkVGT1JFIGxlZnQtYWN0aXZhdGVcbiAgICByaWdodE1lbS5hZGRGYWN0KG1rSWQoMSksIFwiQVwiIGFzIEF0dHJLZXksIHRydWUgYXMgRmFjdFZhbHVlKTtcbiAgICByaWdodE1lbS5hZGRGYWN0KG1rSWQoMiksIFwiQVwiIGFzIEF0dHJLZXksIHRydWUgYXMgRmFjdFZhbHVlKTtcbiAgICByaWdodE1lbS5hZGRGYWN0KG1rSWQoMyksIFwiQVwiIGFzIEF0dHJLZXksIHRydWUgYXMgRmFjdFZhbHVlKTtcblxuICAgIGNvbnN0IHRva2VuID0gbmV3IFRva2VuKG51bGwsIG1rRmFjdCg5LCBcIlhcIiwgMSksIHt9KTtcbiAgICBleGlzdHMubGVmdEFjdGl2YXRlKHRva2VuKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDEpOyAvLyBmaXJlcyBleGFjdGx5IG9uY2VcblxuICAgIC8vIFJlbW92aW5nIG9uZSBvZiB0aGUgdGhyZWU6IHN0aWxsIHN1cHBvcnRlZCwgbm8gZGVhY3RpdmF0aW9uXG4gICAgZXhpc3RzLnJpZ2h0RGVhY3RpdmF0ZShta0lkKDEpLCBcIkFcIiBhcyBBdHRyS2V5LCB0cnVlIGFzIEZhY3RWYWx1ZSk7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICBleGlzdHMucmlnaHREZWFjdGl2YXRlKG1rSWQoMiksIFwiQVwiIGFzIEF0dHJLZXksIHRydWUgYXMgRmFjdFZhbHVlKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDEpO1xuICAgIC8vIExhc3Qgb25lIGdvbmU6IGRlYWN0aXZhdGVzXG4gICAgZXhpc3RzLnJpZ2h0RGVhY3RpdmF0ZShta0lkKDMpLCBcIkFcIiBhcyBBdHRyS2V5LCB0cnVlIGFzIEZhY3RWYWx1ZSk7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG5cbiAgaXQoXCJyaWdodC1kZWFjdGl2YXRlIHdpdGggbm8gbWF0Y2hpbmcgdG9rZW5zIGlzIGEgc2FmZSBuby1vcFwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmlnaHRNZW0gPSBuZXcgQWxwaGFNZW1vcnkoKTtcbiAgICBjb25zdCBvdXRNZW0gPSBuZXcgQmV0YU1lbW9yeSgpO1xuICAgIGNvbnN0IGV4aXN0cyA9IG5ldyBFeGlzdGVudGlhbE5vZGUocmlnaHRNZW0sIFtdKTtcbiAgICBleGlzdHMuYWRkRG93bnN0cmVhbUFjdGl2YXRlKCh0KSA9PiBvdXRNZW0ubGVmdEFjdGl2YXRlKHQpKTtcbiAgICBleGlzdHMuYWRkRG93bnN0cmVhbURlYWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0RGVhY3RpdmF0ZSh0KSk7XG5cbiAgICAvLyBObyBsZWZ0IHRva2VuIHByZXNlbnQ7IGRlYWN0aXZhdGUgbXVzdCBub3QgdGhyb3cgbm9yIGVtaXRcbiAgICBleHBlY3QoKCkgPT5cbiAgICAgIGV4aXN0cy5yaWdodERlYWN0aXZhdGUobWtJZCgxKSwgXCJBXCIgYXMgQXR0cktleSwgdHJ1ZSBhcyBGYWN0VmFsdWUpLFxuICAgICkubm90LnRvVGhyb3coKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcblxuICBpdChcInNhZmV0eTogdGVzdCByZWZlcmVuY2luZyB1bmJvdW5kIHZhcmlhYmxlIGZhaWxzIOKAlCByaWdodCBmYWN0IGRvZXMgbm90IGNvdW50IGFzIHN1cHBvcnRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJpZ2h0TWVtID0gbmV3IEFscGhhTWVtb3J5KCk7XG4gICAgY29uc3Qgb3V0TWVtID0gbmV3IEJldGFNZW1vcnkoKTtcbiAgICBjb25zdCBleGlzdHMgPSBuZXcgRXhpc3RlbnRpYWxOb2RlKHJpZ2h0TWVtLCBbXG4gICAgICB7IHR5cGU6IFwiaWRFcXVhbGl0eVwiLCBsZWZ0VmFyOiBcIm1pc3NpbmdcIiB9LFxuICAgIF0pO1xuICAgIGV4aXN0cy5hZGREb3duc3RyZWFtQWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0QWN0aXZhdGUodCkpO1xuXG4gICAgLy8gVG9rZW4gZG9lc24ndCBiaW5kIFwibWlzc2luZ1wiIOKAlCBkZWZlbnNpdmUgZ3VhcmQgc2hvdWxkIHJlamVjdCB0aGUgZmFjdC5cbiAgICBjb25zdCB0b2tlbiA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoMSwgXCJYXCIsIDEpLCB7fSk7XG4gICAgZXhpc3RzLmxlZnRBY3RpdmF0ZSh0b2tlbik7XG4gICAgZXhpc3RzLnJpZ2h0QWN0aXZhdGUobWtJZCg1KSwgXCJBXCIgYXMgQXR0cktleSwgdHJ1ZSBhcyBGYWN0VmFsdWUpO1xuXG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG5cbiAgaXQoXCJzYWZldHk6IHJpZ2h0RGVhY3RpdmF0ZSBmbG9vcnMgYXQgMCDigJQgbm8gdW5kZXJmbG93IG9yIHNwdXJpb3VzIGRlYWN0aXZhdGVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJpZ2h0TWVtID0gbmV3IEFscGhhTWVtb3J5KCk7XG4gICAgY29uc3Qgb3V0TWVtID0gbmV3IEJldGFNZW1vcnkoKTtcbiAgICBjb25zdCBleGlzdHMgPSBuZXcgRXhpc3RlbnRpYWxOb2RlKHJpZ2h0TWVtLCBbXSk7XG4gICAgZXhpc3RzLmFkZERvd25zdHJlYW1BY3RpdmF0ZSgodCkgPT4gb3V0TWVtLmxlZnRBY3RpdmF0ZSh0KSk7XG4gICAgbGV0IGRlYWN0aXZhdGlvbnMgPSAwO1xuICAgIGV4aXN0cy5hZGREb3duc3RyZWFtRGVhY3RpdmF0ZSgoKSA9PiBkZWFjdGl2YXRpb25zKyspO1xuXG4gICAgY29uc3QgdG9rZW4gPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDEsIFwiWFwiLCAxKSwge30pO1xuICAgIGV4aXN0cy5sZWZ0QWN0aXZhdGUodG9rZW4pO1xuICAgIC8vIHByZXYgPSAwOyBhdHRlbXB0IHJldHJhY3Rpb24gd2l0aCBubyBwcmlvciBzdXBwb3J0IOKAlCBtdXN0IGJlIGEgbm8tb3AuXG4gICAgZXhpc3RzLnJpZ2h0RGVhY3RpdmF0ZShta0lkKDQyKSwgXCJBXCIgYXMgQXR0cktleSwgdHJ1ZSBhcyBGYWN0VmFsdWUpO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgZXhwZWN0KGRlYWN0aXZhdGlvbnMpLnRvQmUoMCk7XG4gIH0pO1xuXG4gIGl0KFwic3VwcG9ydHMgbXVsdGlwbGUgbGVmdCB0b2tlbnMgaW5kZXBlbmRlbnRseVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmlnaHRNZW0gPSBuZXcgQWxwaGFNZW1vcnkoKTtcbiAgICBjb25zdCBvdXRNZW0gPSBuZXcgQmV0YU1lbW9yeSgpO1xuICAgIGNvbnN0IGV4aXN0cyA9IG5ldyBFeGlzdGVudGlhbE5vZGUocmlnaHRNZW0sIFtcbiAgICAgIHsgdHlwZTogXCJpZEVxdWFsaXR5XCIsIGxlZnRWYXI6IFwidFwiIH0sXG4gICAgXSk7XG4gICAgZXhpc3RzLmFkZERvd25zdHJlYW1BY3RpdmF0ZSgodCkgPT4gb3V0TWVtLmxlZnRBY3RpdmF0ZSh0KSk7XG4gICAgZXhpc3RzLmFkZERvd25zdHJlYW1EZWFjdGl2YXRlKCh0KSA9PiBvdXRNZW0ubGVmdERlYWN0aXZhdGUodCkpO1xuXG4gICAgY29uc3QgdG9rZW5BID0gbmV3IFRva2VuKG51bGwsIG1rRmFjdCgxLCBcIlhcIiwgMSksIHsgdDogbWtJZCgxMDApIH0pO1xuICAgIGNvbnN0IHRva2VuQiA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoMiwgXCJYXCIsIDEpLCB7IHQ6IG1rSWQoMjAwKSB9KTtcbiAgICBleGlzdHMubGVmdEFjdGl2YXRlKHRva2VuQSk7XG4gICAgZXhpc3RzLmxlZnRBY3RpdmF0ZSh0b2tlbkIpO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMCk7XG5cbiAgICAvLyBTdXBwb3J0IG9ubHkgdG9rZW5BXG4gICAgZXhpc3RzLnJpZ2h0QWN0aXZhdGUobWtJZCgxMDApLCBcIkFcIiBhcyBBdHRyS2V5LCB0cnVlIGFzIEZhY3RWYWx1ZSk7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2Vuc1swXSkudG9CZSh0b2tlbkEpO1xuXG4gICAgLy8gU3VwcG9ydCB0b2tlbkJcbiAgICBleGlzdHMucmlnaHRBY3RpdmF0ZShta0lkKDIwMCksIFwiQVwiIGFzIEF0dHJLZXksIHRydWUgYXMgRmFjdFZhbHVlKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDIpO1xuXG4gICAgLy8gUmVtb3ZlIHRva2VuQSdzIHN1cHBvcnQg4oCUIG9ubHkgdG9rZW5BIHJldHJhY3RzXG4gICAgZXhpc3RzLnJpZ2h0RGVhY3RpdmF0ZShta0lkKDEwMCksIFwiQVwiIGFzIEF0dHJLZXksIHRydWUgYXMgRmFjdFZhbHVlKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDEpO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zWzBdKS50b0JlKHRva2VuQik7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvcmV0ZS9zcmMvZXhpc3RlbnRpYWwudGVzdC50cyJ9 diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/3431ddef70250c56a057973496fdc256aa145fef b/IJGn1F-WxLUCbfU1lu8pU/ssr/3431ddef70250c56a057973496fdc256aa145fef deleted file mode 100644 index a2a9585..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/3431ddef70250c56a057973496fdc256aa145fef +++ /dev/null @@ -1,143 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "ExistentialNode", { enumerable: true, configurable: true, get(){ try { return ExistentialNode } catch {} }}); -class ExistentialNode { - #activateListeners = []; - #deactivateListeners = []; - /** Support count per left token — # of right facts currently matching it. */ - #supportCount = /* @__PURE__ */ new Map(); - /** Tokens currently passing downstream (count >= 1). */ - #activeTokens = /* @__PURE__ */ new Set(); - /** All left tokens seen and not yet left-deactivated. */ - #leftTokens = []; - #rightMemory; - #tests; - /** - * @param rightMemory Alpha memory supplying the support facts for this EXISTS. - * @param tests Equality tests evaluated against every `(token, right fact)` - * pair. An empty list accepts every right fact as support, - * which degenerates EXISTS to "any fact of this shape exists". - */ - constructor(rightMemory, tests) { - this.#rightMemory = rightMemory; - this.#tests = tests; - } - /** Subscribe to downstream activations. Listeners fire in registration order. */ - addDownstreamActivate(listener) { - this.#activateListeners.push(listener); - } - /** Subscribe to downstream deactivations. Listeners fire in registration order. */ - addDownstreamDeactivate(listener) { - this.#deactivateListeners.push(listener); - } - /** - * Process a new left-side token. - * - * Counts matching right facts already in {@link AlphaMemory} and, if at - * least one is present, records the token as active and fires downstream - * activate listeners exactly once. - */ - leftActivate(token) { - this.#leftTokens.push(token); - const count = this.#countMatchingFacts(token); - this.#supportCount.set(token, count); - if (count >= 1) { - this.#activeTokens.add(token); - for (const l of this.#activateListeners) l(token); - } - } - /** - * Withdraw a left-side token. - * - * If the token was currently active (count >= 1 at the time of deactivation) - * the downstream deactivate listeners fire once. Always cleans up the - * per-token state regardless of whether the token was active. Unknown - * tokens (never seen on the left) are silently ignored so that upstream - * retractions never throw because of a missed book-keeping entry. - */ - leftDeactivate(token) { - const idx = this.#leftTokens.indexOf(token); - if (idx === -1) return; - this.#leftTokens.splice(idx, 1); - if (this.#activeTokens.has(token)) { - this.#activeTokens.delete(token); - for (const l of this.#deactivateListeners) l(token); - }; - this.#supportCount.delete(token); - } - /** - * Process a newly-matching right-side fact. - * - * For every left token that this fact supports, increment the support - * count. On the 0 → 1 transition (and *only* that transition) the token - * becomes active and downstream activate listeners fire. Subsequent - * increments (1 → 2, 2 → 3, …) leave the active set unchanged, which is - * what gives EXISTS its single-activation-per-token guarantee. - */ - rightActivate(id, _attr, value) { - for (const token of this.#leftTokens) { - if (!this.#factMatchesToken(token, id, value)) continue; - const prev = this.#supportCount.get(token) ?? 0; - this.#supportCount.set(token, prev + 1); - if (prev === 0) { - this.#activeTokens.add(token); - for (const l of this.#activateListeners) l(token); - } - } - } - /** - * Process a retracted right-side fact. - * - * For every left token this fact was supporting, decrement the support - * count. On the 1 → 0 transition the token leaves the active set and - * downstream deactivate listeners fire. Transitions that remain >= 1 - * (e.g. 2 → 1) leave the active set unchanged. - * - * The count is floored at 0 as a defensive measure — an upstream retraction - * for a fact that was never counted should be a no-op rather than a - * crash, matching the tolerance expressed in {@link BetaMemory.leftDeactivate}. - */ - rightDeactivate(id, _attr, value) { - for (const token of this.#leftTokens) { - if (!this.#factMatchesToken(token, id, value)) continue; - const prev = this.#supportCount.get(token) ?? 0; - if (prev === 0) continue; - const next = prev - 1; - this.#supportCount.set(token, next); - if (next === 0 && this.#activeTokens.has(token)) { - this.#activeTokens.delete(token); - for (const l of this.#deactivateListeners) l(token); - } - } - } - /** Count right-memory facts currently matching `token`. */ - #countMatchingFacts(token) { - let count = 0; - for (const fact of this.#rightMemory.facts) { - if (this.#factMatchesToken(token, fact.id, fact.value)) count++; - }; - return count; - } - /** - * Evaluate every join test against `(token, right fact)`. - * - * Semantics match {@link JoinNode}'s internal test predicate: - * `idEquality` compares the right entity id against `token.bindings[leftVar]`; - * `valueEquality` compares the right value. A test whose `leftVar` is not - * bound on the token always fails — the same defensive behaviour as - * JoinNode, for the same reason (guards against builder bugs). - */ - #factMatchesToken(token, rightId, rightValue) { - for (const test of this.#tests) { - const leftVal = token.bindings[test.leftVar]; - if (leftVal === void 0) return false; - if (test.type === "idEquality") { - if (leftVal !== rightId) return false; - } else { - if (leftVal !== rightValue) return false; - } - }; - return true; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SSxRQUFRO0FBQ1osZUFBVyxRQUFRLEtBQUssYUFBYSxPQUFPO0FBQzFDLFVBQUksS0FBSyxrQkFBa0IsT0FBTyxLQUFLLElBQUksS0FBSyxLQUFLLEVBQUc7QUFBQSxJQUMxRDtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFXQSxrQkFDRSxPQUNBLFNBQ0EsWUFDUztBQUNULGVBQVcsUUFBUSxLQUFLLFFBQVE7QUFDOUIsWUFBTSxVQUFVLE1BQU0sU0FBUyxLQUFLLE9BQU87QUFDM0MsVUFBSSxZQUFZLE9BQVcsUUFBTztBQUNsQyxVQUFJLEtBQUssU0FBUyxjQUFjO0FBQzlCLFlBQUksWUFBWSxRQUFTLFFBQU87QUFBQSxNQUNsQyxPQUFPO0FBRUwsWUFBSSxZQUFZLFdBQVksUUFBTztBQUFBLE1BQ3JDO0FBQUEsSUFDRjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQ0YiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImV4aXN0ZW50aWFsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXhpc3RlbnRpYWxOb2RlIOKAlCBFWElTVFMgcGF0dGVybi5cbiAqXG4gKiBQZXIgRG9vcmVuYm9zIDE5OTUgwqcyLjYuMi4gUGFzc2VzIGEgdG9rZW4gZG93bnN0cmVhbSB3aGVuICoqYXQgbGVhc3Qgb25lKipcbiAqIHJpZ2h0LXNpZGUgZmFjdCBzYXRpc2ZpZXMgdGhpcyBub2RlJ3MgZXF1YWxpdHkgdGVzdHMgYWdhaW5zdCB0aGUgdG9rZW4uXG4gKlxuICogU3RydWN0dXJhbGx5LCBFeGlzdGVudGlhbE5vZGUgaXMgdGhlIGR1YWwgb2YgTmVnYXRpb25Ob2RlIChQMi4xKTogYm90aFxuICogbWFpbnRhaW4gYSBwZXItdG9rZW4gKnN1cHBvcnQgY291bnQqIG9mIG1hdGNoaW5nIHJpZ2h0IGZhY3RzLCBidXQgdGhlXG4gKiBhY3RpdmF0aW9uIHByZWRpY2F0ZSBpcyBpbnZlcnRlZC5cbiAqXG4gKiAgIE5lZ2F0aW9uTm9kZTogICAgZG93bnN0cmVhbSBhY3RpdmUgaWZmIGNvdW50ID09PSAwICAoTk9UKVxuICogICBFeGlzdGVudGlhbE5vZGU6IGRvd25zdHJlYW0gYWN0aXZlIGlmZiBjb3VudCAgPj0gMSAgKEVYSVNUUylcbiAqXG4gKiAjIyMgRmlyaW5nIHNlbWFudGljc1xuICpcbiAqIERvd25zdHJlYW0gYWN0aXZhdGUgbGlzdGVuZXJzIGZpcmUgKipleGFjdGx5IG9uY2UqKiB3aGVuIHRoZSBjb3VudFxuICogdHJhbnNpdGlvbnMgMCDihpIgMSBmb3IgYSB0b2tlbi4gU3Vic2VxdWVudCByaWdodC1hY3RpdmF0ZXMgdGhhdCB0YWtlIHRoZVxuICogY291bnQgMSDihpIgMiwgMiDihpIgMywgZXRjLiBkbyAqKm5vdCoqIHJlLWZpcmUgdGhlIGRvd25zdHJlYW0g4oCUIHRoaXMgaXMgdGhlXG4gKiBkZWR1cGxpY2F0aW9uIGd1YXJhbnRlZSByZXF1aXJlZCBieSBFWElTVFM6IHRoZSBydWxlIHNob3VsZCBtYXRjaCBhXG4gKiBzaW5nbGUgdGltZSByZWdhcmRsZXNzIG9mIGhvdyBtYW55IHN1cHBvcnRpbmcgZmFjdHMgZXhpc3QuXG4gKlxuICogRG93bnN0cmVhbSBkZWFjdGl2YXRlIGxpc3RlbmVycyBmaXJlICoqZXhhY3RseSBvbmNlKiogd2hlbiB0aGUgY291bnRcbiAqIHRyYW5zaXRpb25zIDEg4oaSIDAgKG9yIHdoZW4gdGhlIGxlZnQgdG9rZW4gaXRzZWxmIGlzIHJldHJhY3RlZCB3aGlsZVxuICogY3VycmVudGx5IGFjdGl2ZSkuXG4gKlxuICogIyMjIFdoeSBub3Qgc2hhcmUgY29kZSB3aXRoIE5lZ2F0aW9uTm9kZVxuICpcbiAqIERlc3BpdGUgdGhlIHN0cnVjdHVyYWwgc2ltaWxhcml0eSwgdGhlIHR3byBub2RlcyBhcmUga2VwdCBzZXBhcmF0ZTpcbiAqXG4gKiAtIFRoZSBhY3RpdmF0aW9uIHByZWRpY2F0ZSBkaXZlcmdlcyBhdCBzZXZlcmFsIGJyYW5jaGVzIChpbml0aWFsIGNvdW50LFxuICogICByaWdodEFjdGl2YXRlIHRyYW5zaXRpb24sIHJpZ2h0RGVhY3RpdmF0ZSB0cmFuc2l0aW9uKSwgbm90IGp1c3QgYVxuICogICBzaW5nbGUgY29tcGFyaXNvbiwgc28gYSBzaGFyZWQgYmFzZSBjbGFzcyB3b3VsZCBiZSB1bmlmb3JtbHkgZ3VhcmRlZFxuICogICBvbiBhIG1vZGUgZmxhZyDigJQgbGVzcyByZWFkYWJsZSB0aGFuIHR3byBmb2N1c2VkIGltcGxlbWVudGF0aW9ucy5cbiAqIC0gRWFjaCBub2RlIGlzIHNtYWxsICh+MTAwIExPQykuIFRoZSBkdXBsaWNhdGlvbiBjb3N0IGlzIGxvdzsgdGhlXG4gKiAgIGNvdXBsaW5nIGNvc3Qgb2YgYSBzaGFyZWQgYWJzdHJhY3Rpb24gd291bGQgYmUgaGlnaGVyLlxuICpcbiAqICMjIyBJbnZhcmlhbnRzXG4gKlxuICogLSBgc3VwcG9ydENvdW50LmdldCh0b2tlbilgIGlzIGRlZmluZWQgZm9yIGV2ZXJ5IHRva2VuIGN1cnJlbnRseSBpblxuICogICBgbGVmdFRva2Vuc2AsIGFuZCBlcXVhbHMgdGhlIG51bWJlciBvZiByaWdodC1tZW1vcnkgZmFjdHMgdGhhdCBwYXNzXG4gKiAgIHtAbGluayBFeGlzdGVudGlhbE5vZGUuZmFjdE1hdGNoZXNUb2tlbn0gZm9yIHRoYXQgdG9rZW4uXG4gKiAtIGBhY3RpdmVUb2tlbnMuaGFzKHRva2VuKWAgaWZmIGAoc3VwcG9ydENvdW50LmdldCh0b2tlbikgPz8gMCkgPj0gMWAuXG4gKiAtIEEgdG9rZW4gaW4gYGFjdGl2ZVRva2Vuc2AgaGFzIGhhZCBleGFjdGx5IG9uZSB1bmJhbGFuY2VkIGFjdGl2YXRlXG4gKiAgIGxpc3RlbmVyIGNhbGwgKHRoZSBkZWFjdGl2YXRlIGhhcyBub3QgeWV0IGZpcmVkKS5cbiAqL1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBdHRyS2V5LCBGYWN0VmFsdWUgfSBmcm9tIFwiLi93bS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBUb2tlbiB9IGZyb20gXCIuL2JldGEuanNcIjtcbmltcG9ydCB0eXBlIHsgQWxwaGFNZW1vcnkgfSBmcm9tIFwiLi9hbHBoYS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBKb2luVGVzdCB9IGZyb20gXCIuL2pvaW4uanNcIjtcblxudHlwZSBBY3RpdmF0ZUxpc3RlbmVyID0gKHRva2VuOiBUb2tlbikgPT4gdm9pZDtcbnR5cGUgRGVhY3RpdmF0ZUxpc3RlbmVyID0gKHRva2VuOiBUb2tlbikgPT4gdm9pZDtcblxuZXhwb3J0IGNsYXNzIEV4aXN0ZW50aWFsTm9kZSB7XG4gIHJlYWRvbmx5ICNhY3RpdmF0ZUxpc3RlbmVyczogQWN0aXZhdGVMaXN0ZW5lcltdID0gW107XG4gIHJlYWRvbmx5ICNkZWFjdGl2YXRlTGlzdGVuZXJzOiBEZWFjdGl2YXRlTGlzdGVuZXJbXSA9IFtdO1xuXG4gIC8qKiBTdXBwb3J0IGNvdW50IHBlciBsZWZ0IHRva2VuIOKAlCAjIG9mIHJpZ2h0IGZhY3RzIGN1cnJlbnRseSBtYXRjaGluZyBpdC4gKi9cbiAgcmVhZG9ubHkgI3N1cHBvcnRDb3VudCA9IG5ldyBNYXA8VG9rZW4sIG51bWJlcj4oKTtcbiAgLyoqIFRva2VucyBjdXJyZW50bHkgcGFzc2luZyBkb3duc3RyZWFtIChjb3VudCA+PSAxKS4gKi9cbiAgcmVhZG9ubHkgI2FjdGl2ZVRva2VucyA9IG5ldyBTZXQ8VG9rZW4+KCk7XG4gIC8qKiBBbGwgbGVmdCB0b2tlbnMgc2VlbiBhbmQgbm90IHlldCBsZWZ0LWRlYWN0aXZhdGVkLiAqL1xuICByZWFkb25seSAjbGVmdFRva2VuczogVG9rZW5bXSA9IFtdO1xuXG4gIHJlYWRvbmx5ICNyaWdodE1lbW9yeTogQWxwaGFNZW1vcnk7XG4gIHJlYWRvbmx5ICN0ZXN0czogcmVhZG9ubHkgSm9pblRlc3RbXTtcblxuICAvKipcbiAgICogQHBhcmFtIHJpZ2h0TWVtb3J5IEFscGhhIG1lbW9yeSBzdXBwbHlpbmcgdGhlIHN1cHBvcnQgZmFjdHMgZm9yIHRoaXMgRVhJU1RTLlxuICAgKiBAcGFyYW0gdGVzdHMgICAgICAgRXF1YWxpdHkgdGVzdHMgZXZhbHVhdGVkIGFnYWluc3QgZXZlcnkgYCh0b2tlbiwgcmlnaHQgZmFjdClgXG4gICAqICAgICAgICAgICAgICAgICAgICBwYWlyLiBBbiBlbXB0eSBsaXN0IGFjY2VwdHMgZXZlcnkgcmlnaHQgZmFjdCBhcyBzdXBwb3J0LFxuICAgKiAgICAgICAgICAgICAgICAgICAgd2hpY2ggZGVnZW5lcmF0ZXMgRVhJU1RTIHRvIFwiYW55IGZhY3Qgb2YgdGhpcyBzaGFwZSBleGlzdHNcIi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJpZ2h0TWVtb3J5OiBBbHBoYU1lbW9yeSwgdGVzdHM6IHJlYWRvbmx5IEpvaW5UZXN0W10pIHtcbiAgICB0aGlzLiNyaWdodE1lbW9yeSA9IHJpZ2h0TWVtb3J5O1xuICAgIHRoaXMuI3Rlc3RzID0gdGVzdHM7XG4gIH1cblxuICAvKiogU3Vic2NyaWJlIHRvIGRvd25zdHJlYW0gYWN0aXZhdGlvbnMuIExpc3RlbmVycyBmaXJlIGluIHJlZ2lzdHJhdGlvbiBvcmRlci4gKi9cbiAgYWRkRG93bnN0cmVhbUFjdGl2YXRlKGxpc3RlbmVyOiBBY3RpdmF0ZUxpc3RlbmVyKTogdm9pZCB7XG4gICAgdGhpcy4jYWN0aXZhdGVMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICAvKiogU3Vic2NyaWJlIHRvIGRvd25zdHJlYW0gZGVhY3RpdmF0aW9ucy4gTGlzdGVuZXJzIGZpcmUgaW4gcmVnaXN0cmF0aW9uIG9yZGVyLiAqL1xuICBhZGREb3duc3RyZWFtRGVhY3RpdmF0ZShsaXN0ZW5lcjogRGVhY3RpdmF0ZUxpc3RlbmVyKTogdm9pZCB7XG4gICAgdGhpcy4jZGVhY3RpdmF0ZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGEgbmV3IGxlZnQtc2lkZSB0b2tlbi5cbiAgICpcbiAgICogQ291bnRzIG1hdGNoaW5nIHJpZ2h0IGZhY3RzIGFscmVhZHkgaW4ge0BsaW5rIEFscGhhTWVtb3J5fSBhbmQsIGlmIGF0XG4gICAqIGxlYXN0IG9uZSBpcyBwcmVzZW50LCByZWNvcmRzIHRoZSB0b2tlbiBhcyBhY3RpdmUgYW5kIGZpcmVzIGRvd25zdHJlYW1cbiAgICogYWN0aXZhdGUgbGlzdGVuZXJzIGV4YWN0bHkgb25jZS5cbiAgICovXG4gIGxlZnRBY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICB0aGlzLiNsZWZ0VG9rZW5zLnB1c2godG9rZW4pO1xuICAgIGNvbnN0IGNvdW50ID0gdGhpcy4jY291bnRNYXRjaGluZ0ZhY3RzKHRva2VuKTtcbiAgICB0aGlzLiNzdXBwb3J0Q291bnQuc2V0KHRva2VuLCBjb3VudCk7XG5cbiAgICBpZiAoY291bnQgPj0gMSkge1xuICAgICAgdGhpcy4jYWN0aXZlVG9rZW5zLmFkZCh0b2tlbik7XG4gICAgICBmb3IgKGNvbnN0IGwgb2YgdGhpcy4jYWN0aXZhdGVMaXN0ZW5lcnMpIGwodG9rZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaXRoZHJhdyBhIGxlZnQtc2lkZSB0b2tlbi5cbiAgICpcbiAgICogSWYgdGhlIHRva2VuIHdhcyBjdXJyZW50bHkgYWN0aXZlIChjb3VudCA+PSAxIGF0IHRoZSB0aW1lIG9mIGRlYWN0aXZhdGlvbilcbiAgICogdGhlIGRvd25zdHJlYW0gZGVhY3RpdmF0ZSBsaXN0ZW5lcnMgZmlyZSBvbmNlLiBBbHdheXMgY2xlYW5zIHVwIHRoZVxuICAgKiBwZXItdG9rZW4gc3RhdGUgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSB0b2tlbiB3YXMgYWN0aXZlLiBVbmtub3duXG4gICAqIHRva2VucyAobmV2ZXIgc2VlbiBvbiB0aGUgbGVmdCkgYXJlIHNpbGVudGx5IGlnbm9yZWQgc28gdGhhdCB1cHN0cmVhbVxuICAgKiByZXRyYWN0aW9ucyBuZXZlciB0aHJvdyBiZWNhdXNlIG9mIGEgbWlzc2VkIGJvb2sta2VlcGluZyBlbnRyeS5cbiAgICovXG4gIGxlZnREZWFjdGl2YXRlKHRva2VuOiBUb2tlbik6IHZvaWQge1xuICAgIGNvbnN0IGlkeCA9IHRoaXMuI2xlZnRUb2tlbnMuaW5kZXhPZih0b2tlbik7XG4gICAgaWYgKGlkeCA9PT0gLTEpIHJldHVybjtcbiAgICB0aGlzLiNsZWZ0VG9rZW5zLnNwbGljZShpZHgsIDEpO1xuXG4gICAgaWYgKHRoaXMuI2FjdGl2ZVRva2Vucy5oYXModG9rZW4pKSB7XG4gICAgICB0aGlzLiNhY3RpdmVUb2tlbnMuZGVsZXRlKHRva2VuKTtcbiAgICAgIGZvciAoY29uc3QgbCBvZiB0aGlzLiNkZWFjdGl2YXRlTGlzdGVuZXJzKSBsKHRva2VuKTtcbiAgICB9XG4gICAgdGhpcy4jc3VwcG9ydENvdW50LmRlbGV0ZSh0b2tlbik7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBhIG5ld2x5LW1hdGNoaW5nIHJpZ2h0LXNpZGUgZmFjdC5cbiAgICpcbiAgICogRm9yIGV2ZXJ5IGxlZnQgdG9rZW4gdGhhdCB0aGlzIGZhY3Qgc3VwcG9ydHMsIGluY3JlbWVudCB0aGUgc3VwcG9ydFxuICAgKiBjb3VudC4gT24gdGhlIDAg4oaSIDEgdHJhbnNpdGlvbiAoYW5kICpvbmx5KiB0aGF0IHRyYW5zaXRpb24pIHRoZSB0b2tlblxuICAgKiBiZWNvbWVzIGFjdGl2ZSBhbmQgZG93bnN0cmVhbSBhY3RpdmF0ZSBsaXN0ZW5lcnMgZmlyZS4gU3Vic2VxdWVudFxuICAgKiBpbmNyZW1lbnRzICgxIOKGkiAyLCAyIOKGkiAzLCDigKYpIGxlYXZlIHRoZSBhY3RpdmUgc2V0IHVuY2hhbmdlZCwgd2hpY2ggaXNcbiAgICogd2hhdCBnaXZlcyBFWElTVFMgaXRzIHNpbmdsZS1hY3RpdmF0aW9uLXBlci10b2tlbiBndWFyYW50ZWUuXG4gICAqL1xuICByaWdodEFjdGl2YXRlKGlkOiBFbnRpdHlJZCwgX2F0dHI6IEF0dHJLZXksIHZhbHVlOiBGYWN0VmFsdWUpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRoaXMuI2xlZnRUb2tlbnMpIHtcbiAgICAgIGlmICghdGhpcy4jZmFjdE1hdGNoZXNUb2tlbih0b2tlbiwgaWQsIHZhbHVlKSkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IHByZXYgPSB0aGlzLiNzdXBwb3J0Q291bnQuZ2V0KHRva2VuKSA/PyAwO1xuICAgICAgdGhpcy4jc3VwcG9ydENvdW50LnNldCh0b2tlbiwgcHJldiArIDEpO1xuXG4gICAgICAvLyBUcmFuc2l0aW9uIDAg4oaSIDE6IGFjdGl2YXRlLiBBbGwgaGlnaGVyIHRyYW5zaXRpb25zIGFyZSBuby1vcHMuXG4gICAgICBpZiAocHJldiA9PT0gMCkge1xuICAgICAgICB0aGlzLiNhY3RpdmVUb2tlbnMuYWRkKHRva2VuKTtcbiAgICAgICAgZm9yIChjb25zdCBsIG9mIHRoaXMuI2FjdGl2YXRlTGlzdGVuZXJzKSBsKHRva2VuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBhIHJldHJhY3RlZCByaWdodC1zaWRlIGZhY3QuXG4gICAqXG4gICAqIEZvciBldmVyeSBsZWZ0IHRva2VuIHRoaXMgZmFjdCB3YXMgc3VwcG9ydGluZywgZGVjcmVtZW50IHRoZSBzdXBwb3J0XG4gICAqIGNvdW50LiBPbiB0aGUgMSDihpIgMCB0cmFuc2l0aW9uIHRoZSB0b2tlbiBsZWF2ZXMgdGhlIGFjdGl2ZSBzZXQgYW5kXG4gICAqIGRvd25zdHJlYW0gZGVhY3RpdmF0ZSBsaXN0ZW5lcnMgZmlyZS4gVHJhbnNpdGlvbnMgdGhhdCByZW1haW4gPj0gMVxuICAgKiAoZS5nLiAyIOKGkiAxKSBsZWF2ZSB0aGUgYWN0aXZlIHNldCB1bmNoYW5nZWQuXG4gICAqXG4gICAqIFRoZSBjb3VudCBpcyBmbG9vcmVkIGF0IDAgYXMgYSBkZWZlbnNpdmUgbWVhc3VyZSDigJQgYW4gdXBzdHJlYW0gcmV0cmFjdGlvblxuICAgKiBmb3IgYSBmYWN0IHRoYXQgd2FzIG5ldmVyIGNvdW50ZWQgc2hvdWxkIGJlIGEgbm8tb3AgcmF0aGVyIHRoYW4gYVxuICAgKiBjcmFzaCwgbWF0Y2hpbmcgdGhlIHRvbGVyYW5jZSBleHByZXNzZWQgaW4ge0BsaW5rIEJldGFNZW1vcnkubGVmdERlYWN0aXZhdGV9LlxuICAgKi9cbiAgcmlnaHREZWFjdGl2YXRlKGlkOiBFbnRpdHlJZCwgX2F0dHI6IEF0dHJLZXksIHZhbHVlOiBGYWN0VmFsdWUpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRoaXMuI2xlZnRUb2tlbnMpIHtcbiAgICAgIGlmICghdGhpcy4jZmFjdE1hdGNoZXNUb2tlbih0b2tlbiwgaWQsIHZhbHVlKSkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IHByZXYgPSB0aGlzLiNzdXBwb3J0Q291bnQuZ2V0KHRva2VuKSA/PyAwO1xuICAgICAgaWYgKHByZXYgPT09IDApIGNvbnRpbnVlOyAvLyBub3RoaW5nIHRvIGRlY3JlbWVudDsgc3RheSBhdCAwLlxuICAgICAgY29uc3QgbmV4dCA9IHByZXYgLSAxO1xuICAgICAgdGhpcy4jc3VwcG9ydENvdW50LnNldCh0b2tlbiwgbmV4dCk7XG5cbiAgICAgIC8vIFRyYW5zaXRpb24gMSDihpIgMDogZGVhY3RpdmF0ZS5cbiAgICAgIGlmIChuZXh0ID09PSAwICYmIHRoaXMuI2FjdGl2ZVRva2Vucy5oYXModG9rZW4pKSB7XG4gICAgICAgIHRoaXMuI2FjdGl2ZVRva2Vucy5kZWxldGUodG9rZW4pO1xuICAgICAgICBmb3IgKGNvbnN0IGwgb2YgdGhpcy4jZGVhY3RpdmF0ZUxpc3RlbmVycykgbCh0b2tlbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIENvdW50IHJpZ2h0LW1lbW9yeSBmYWN0cyBjdXJyZW50bHkgbWF0Y2hpbmcgYHRva2VuYC4gKi9cbiAgI2NvdW50TWF0Y2hpbmdGYWN0cyh0b2tlbjogVG9rZW4pOiBudW1iZXIge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgZm9yIChjb25zdCBmYWN0IG9mIHRoaXMuI3JpZ2h0TWVtb3J5LmZhY3RzKSB7XG4gICAgICBpZiAodGhpcy4jZmFjdE1hdGNoZXNUb2tlbih0b2tlbiwgZmFjdC5pZCwgZmFjdC52YWx1ZSkpIGNvdW50Kys7XG4gICAgfVxuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZSBldmVyeSBqb2luIHRlc3QgYWdhaW5zdCBgKHRva2VuLCByaWdodCBmYWN0KWAuXG4gICAqXG4gICAqIFNlbWFudGljcyBtYXRjaCB7QGxpbmsgSm9pbk5vZGV9J3MgaW50ZXJuYWwgdGVzdCBwcmVkaWNhdGU6XG4gICAqIGBpZEVxdWFsaXR5YCBjb21wYXJlcyB0aGUgcmlnaHQgZW50aXR5IGlkIGFnYWluc3QgYHRva2VuLmJpbmRpbmdzW2xlZnRWYXJdYDtcbiAgICogYHZhbHVlRXF1YWxpdHlgIGNvbXBhcmVzIHRoZSByaWdodCB2YWx1ZS4gQSB0ZXN0IHdob3NlIGBsZWZ0VmFyYCBpcyBub3RcbiAgICogYm91bmQgb24gdGhlIHRva2VuIGFsd2F5cyBmYWlscyDigJQgdGhlIHNhbWUgZGVmZW5zaXZlIGJlaGF2aW91ciBhc1xuICAgKiBKb2luTm9kZSwgZm9yIHRoZSBzYW1lIHJlYXNvbiAoZ3VhcmRzIGFnYWluc3QgYnVpbGRlciBidWdzKS5cbiAgICovXG4gICNmYWN0TWF0Y2hlc1Rva2VuKFxuICAgIHRva2VuOiBUb2tlbixcbiAgICByaWdodElkOiBFbnRpdHlJZCxcbiAgICByaWdodFZhbHVlOiBGYWN0VmFsdWUsXG4gICk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3QgdGVzdCBvZiB0aGlzLiN0ZXN0cykge1xuICAgICAgY29uc3QgbGVmdFZhbCA9IHRva2VuLmJpbmRpbmdzW3Rlc3QubGVmdFZhcl07XG4gICAgICBpZiAobGVmdFZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAodGVzdC50eXBlID09PSBcImlkRXF1YWxpdHlcIikge1xuICAgICAgICBpZiAobGVmdFZhbCAhPT0gcmlnaHRJZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdmFsdWVFcXVhbGl0eVxuICAgICAgICBpZiAobGVmdFZhbCAhPT0gcmlnaHRWYWx1ZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIl0sImZpbGUiOiIvc3JjL2V4aXN0ZW50aWFsLnRzIn0= diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/40b9f1f37d5bd759c353e90078138580f67eb091 b/IJGn1F-WxLUCbfU1lu8pU/ssr/40b9f1f37d5bd759c353e90078138580f67eb091 deleted file mode 100644 index b4b4030..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/40b9f1f37d5bd759c353e90078138580f67eb091 +++ /dev/null @@ -1,27 +0,0 @@ -const context = (() => { - if (typeof globalThis !== "undefined") { - return globalThis; - } else if (typeof self !== "undefined") { - return self; - } else if (typeof window !== "undefined") { - return window; - } else { - return Function("return this")(); - } -})(); -const defines = {"process.env.NODE_ENV": process.env.NODE_ENV}; -Object.keys(defines).forEach((key) => { - const segments = key.split("."); - let target = context; - for (let i = 0; i < segments.length; i++) { - const segment = segments[i]; - if (i === segments.length - 1) { - target[segment] = defines[key]; - } else { - target = target[segment] || (target[segment] = {}); - } - } -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVudiJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBjb250ZXh0ID0gKCgpID0+IHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gc2VsZjtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xuICB9XG59KSgpO1xuY29uc3QgZGVmaW5lcyA9IF9fREVGSU5FU19fO1xuT2JqZWN0LmtleXMoZGVmaW5lcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gIGNvbnN0IHNlZ21lbnRzID0ga2V5LnNwbGl0KFwiLlwiKTtcbiAgbGV0IHRhcmdldCA9IGNvbnRleHQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzZWdtZW50ID0gc2VnbWVudHNbaV07XG4gICAgaWYgKGkgPT09IHNlZ21lbnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHRhcmdldFtzZWdtZW50XSA9IGRlZmluZXNba2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0ID0gdGFyZ2V0W3NlZ21lbnRdIHx8ICh0YXJnZXRbc2VnbWVudF0gPSB7fSk7XG4gICAgfVxuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVU7QUFDckIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUMxQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJO0FBQ2YsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ1QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUM7QUFDRixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ0osS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztBQUM5RCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU87QUFDdEIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUM7QUFDRixDQUFDLENBQUM7In0= diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/4e1fe810b0795e085e467f1e587e46fb0550713d b/IJGn1F-WxLUCbfU1lu8pU/ssr/4e1fe810b0795e085e467f1e587e46fb0550713d deleted file mode 100644 index 7e3844b..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/4e1fe810b0795e085e467f1e587e46fb0550713d +++ /dev/null @@ -1,54 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "UnknownHandlerError", { enumerable: true, configurable: true, get(){ try { return UnknownHandlerError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "UnknownPredicateError", { enumerable: true, configurable: true, get(){ try { return UnknownPredicateError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "HandlerRegistry", { enumerable: true, configurable: true, get(){ try { return HandlerRegistry } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "PredicateRegistry", { enumerable: true, configurable: true, get(){ try { return PredicateRegistry } catch {} }}); -class UnknownHandlerError extends Error { - constructor(name) { - super(`UnknownHandlerError: handler "${name}" is not registered`); - this.name = "UnknownHandlerError"; - } -}; -class UnknownPredicateError extends Error { - constructor(name) { - super(`UnknownPredicateError: predicate "${name}" is not registered`); - this.name = "UnknownPredicateError"; - } -}; -class HandlerRegistry { - handlers = /* @__PURE__ */ new Map(); - register(name, fn) { - this.handlers.set(name, fn); - } - get(name) { - return this.handlers.get(name); - } - has(name) { - return this.handlers.has(name); - } - /** Verify all listed handler names are registered. Throws UnknownHandlerError if any missing. */ - verify(names) { - for (const name of names) { - if (!this.handlers.has(name)) throw new UnknownHandlerError(name); - } - } -}; -class PredicateRegistry { - predicates = /* @__PURE__ */ new Map(); - register(name, fn) { - this.predicates.set(name, fn); - } - get(name) { - return this.predicates.get(name); - } - has(name) { - return this.predicates.has(name); - } - verify(names) { - for (const name of names) { - if (!this.predicates.has(name)) throw new UnknownPredicateError(name); - } - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7OztBQUtPLE1BQU0sNEJBQTRCLE1BQU07QUFBQSxFQUM3QyxZQUFZLE1BQWM7QUFDeEIsVUFBTSxpQ0FBaUMsSUFBSSxxQkFBcUI7QUFDaEUsU0FBSyxPQUFPO0FBQUEsRUFDZDtBQUNGO0FBRU8sTUFBTSw4QkFBOEIsTUFBTTtBQUFBLEVBQy9DLFlBQVksTUFBYztBQUN4QixVQUFNLHFDQUFxQyxJQUFJLHFCQUFxQjtBQUNwRSxTQUFLLE9BQU87QUFBQSxFQUNkO0FBQ0Y7QUFvQk8sTUFBTSxnQkFBZ0I7QUFBQSxFQUNWLFdBQVcsb0JBQUksSUFBdUI7QUFBQSxFQUV2RCxTQUFTLE1BQWMsSUFBcUI7QUFDMUMsU0FBSyxTQUFTLElBQUksTUFBTSxFQUFFO0FBQUEsRUFDNUI7QUFBQSxFQUVBLElBQUksTUFBcUM7QUFDdkMsV0FBTyxLQUFLLFNBQVMsSUFBSSxJQUFJO0FBQUEsRUFDL0I7QUFBQSxFQUVBLElBQUksTUFBdUI7QUFDekIsV0FBTyxLQUFLLFNBQVMsSUFBSSxJQUFJO0FBQUEsRUFDL0I7QUFBQTtBQUFBLEVBR0EsT0FBTyxPQUFnQztBQUNyQyxlQUFXLFFBQVEsT0FBTztBQUN4QixVQUFJLENBQUMsS0FBSyxTQUFTLElBQUksSUFBSSxFQUFHLE9BQU0sSUFBSSxvQkFBb0IsSUFBSTtBQUFBLElBQ2xFO0FBQUEsRUFDRjtBQUNGO0FBRU8sTUFBTSxrQkFBa0I7QUFBQSxFQUNaLGFBQWEsb0JBQUksSUFBeUI7QUFBQSxFQUUzRCxTQUFTLE1BQWMsSUFBdUI7QUFDNUMsU0FBSyxXQUFXLElBQUksTUFBTSxFQUFFO0FBQUEsRUFDOUI7QUFBQSxFQUVBLElBQUksTUFBdUM7QUFDekMsV0FBTyxLQUFLLFdBQVcsSUFBSSxJQUFJO0FBQUEsRUFDakM7QUFBQSxFQUVBLElBQUksTUFBdUI7QUFDekIsV0FBTyxLQUFLLFdBQVcsSUFBSSxJQUFJO0FBQUEsRUFDakM7QUFBQSxFQUVBLE9BQU8sT0FBZ0M7QUFDckMsZUFBVyxRQUFRLE9BQU87QUFDeEIsVUFBSSxDQUFDLEtBQUssV0FBVyxJQUFJLElBQUksRUFBRyxPQUFNLElBQUksc0JBQXNCLElBQUk7QUFBQSxJQUN0RTtBQUFBLEVBQ0Y7QUFDRiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsicmVnaXN0cnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBIYW5kbGVyIGFuZCBQcmVkaWNhdGUgcmVnaXN0cmllcy5cbiAqIFBlciBTUEVDLm1kIMKnSlNPTiBSdWxlIFNjaGVtYTogaGFuZGxlci1yZWdpc3RyeSBwYXR0ZXJuIChubyBldmFsLCBubyBmdW5jdGlvbi10by1zdHJpbmcpLlxuICovXG5cbmV4cG9ydCBjbGFzcyBVbmtub3duSGFuZGxlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgVW5rbm93bkhhbmRsZXJFcnJvcjogaGFuZGxlciBcIiR7bmFtZX1cIiBpcyBub3QgcmVnaXN0ZXJlZGApO1xuICAgIHRoaXMubmFtZSA9IFwiVW5rbm93bkhhbmRsZXJFcnJvclwiO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmtub3duUHJlZGljYXRlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKGBVbmtub3duUHJlZGljYXRlRXJyb3I6IHByZWRpY2F0ZSBcIiR7bmFtZX1cIiBpcyBub3QgcmVnaXN0ZXJlZGApO1xuICAgIHRoaXMubmFtZSA9IFwiVW5rbm93blByZWRpY2F0ZUVycm9yXCI7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgSGFuZGxlckZuID0gKHNlc3Npb246IHVua25vd24sIG1hdGNoOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gdm9pZDtcbi8qKlxuICogUHJlZGljYXRlIHNpZ25hdHVyZS5cbiAqXG4gKiBQcmVkaWNhdGVzIHJlY2VpdmUgdGhlIGN1cnJlbnQgYmluZGluZ3MgKHZhcmlhYmxlIG5hbWUg4oaSIHZhbHVlKSBhbmQgYVxuICogZnJvemVuLWJ1dC10eXBlZCBsaXN0IG9mIHN0YXRpYyBhcmd1bWVudHMgZGVjbGFyZWQgaW4gdGhlIHJ1bGUncyBmaWx0ZXJcbiAqIHNwZWMgKHNlZSB7QGxpbmsgRmlsdGVyU3BlY30pLiBSZXR1cm5pbmcgYHRydWVgIGxldHMgdGhlIHBhcnRpYWwgbWF0Y2hcbiAqIHByb2NlZWQ7IGBmYWxzZWAgZmlsdGVycyBpdCBvdXQuXG4gKlxuICogU3RhdGljIGBhcmdzYCBhcmUgcGFydCBvZiB0aGUgY2FsbCBzaWduYXR1cmUgc28gdGhlIHNhbWUgcmVnaXN0ZXJlZFxuICogcHJlZGljYXRlIGNhbiBiZSByZXVzZWQgd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVycyBhY3Jvc3MgZmlsdGVyIHNwZWNzXG4gKiAoZS5nLiBgZ3JlYXRlclRoYW4oNTApYCB2cyBgZ3JlYXRlclRoYW4oMClgKSB3aXRob3V0IHBlci1zcGVjIGNsb3N1cmVzLlxuICovXG5leHBvcnQgdHlwZSBQcmVkaWNhdGVGbiA9IChcbiAgbWF0Y2g6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBhcmdzOiByZWFkb25seSB1bmtub3duW10sXG4pID0+IGJvb2xlYW47XG5cbmV4cG9ydCBjbGFzcyBIYW5kbGVyUmVnaXN0cnkge1xuICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZXJzID0gbmV3IE1hcDxzdHJpbmcsIEhhbmRsZXJGbj4oKTtcblxuICByZWdpc3RlcihuYW1lOiBzdHJpbmcsIGZuOiBIYW5kbGVyRm4pOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZXJzLnNldChuYW1lLCBmbik7XG4gIH1cblxuICBnZXQobmFtZTogc3RyaW5nKTogSGFuZGxlckZuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVycy5nZXQobmFtZSk7XG4gIH1cblxuICBoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlcnMuaGFzKG5hbWUpO1xuICB9XG5cbiAgLyoqIFZlcmlmeSBhbGwgbGlzdGVkIGhhbmRsZXIgbmFtZXMgYXJlIHJlZ2lzdGVyZWQuIFRocm93cyBVbmtub3duSGFuZGxlckVycm9yIGlmIGFueSBtaXNzaW5nLiAqL1xuICB2ZXJpZnkobmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIG5hbWVzKSB7XG4gICAgICBpZiAoIXRoaXMuaGFuZGxlcnMuaGFzKG5hbWUpKSB0aHJvdyBuZXcgVW5rbm93bkhhbmRsZXJFcnJvcihuYW1lKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByZWRpY2F0ZVJlZ2lzdHJ5IHtcbiAgcHJpdmF0ZSByZWFkb25seSBwcmVkaWNhdGVzID0gbmV3IE1hcDxzdHJpbmcsIFByZWRpY2F0ZUZuPigpO1xuXG4gIHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgZm46IFByZWRpY2F0ZUZuKTogdm9pZCB7XG4gICAgdGhpcy5wcmVkaWNhdGVzLnNldChuYW1lLCBmbik7XG4gIH1cblxuICBnZXQobmFtZTogc3RyaW5nKTogUHJlZGljYXRlRm4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByZWRpY2F0ZXMuZ2V0KG5hbWUpO1xuICB9XG5cbiAgaGFzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByZWRpY2F0ZXMuaGFzKG5hbWUpO1xuICB9XG5cbiAgdmVyaWZ5KG5hbWVzOiByZWFkb25seSBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuICAgICAgaWYgKCF0aGlzLnByZWRpY2F0ZXMuaGFzKG5hbWUpKSB0aHJvdyBuZXcgVW5rbm93blByZWRpY2F0ZUVycm9yKG5hbWUpO1xuICAgIH1cbiAgfVxufVxuIl0sImZpbGUiOiIvc3JjL3JlZ2lzdHJ5LnRzIn0= diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/51d2e7e0afb9d6a402aa189897abde14291d4d78 b/IJGn1F-WxLUCbfU1lu8pU/ssr/51d2e7e0afb9d6a402aa189897abde14291d4d78 deleted file mode 100644 index 7db7b2e..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/51d2e7e0afb9d6a402aa189897abde14291d4d78 +++ /dev/null @@ -1,65 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "DerivedFactProduction", { enumerable: true, configurable: true, get(){ try { return DerivedFactProduction } catch {} }}); -class DerivedFactProduction { - constructor(ruleName, wm, handler) { - this.ruleName = ruleName; - this.#wm = wm; - this.#handler = handler; - } - /** - * Monotonically decreasing counter used to mint negative entity ids for - * derived facts. Starts at `0` and is pre-decremented on each activation, - * yielding `-1, -2, -3, ...`. Scoped per node so different productions do - * not collide on ids in any externally-observable way (the ids are opaque - * to consumers; only the sign is meaningful). - */ - #idCounter = 0; - /** - * Map from the activating {@link Token} reference to the record of facts - * asserted for it. Keyed by reference — matching {@link BetaMemory}'s - * identity-based token semantics — so `leftDeactivate` can find the - * exact entry to retract without structural comparison. - */ - #tokenToEntry = /* @__PURE__ */ new Map(); - /** Working memory into which derived facts are asserted and retracted. */ - #wm; - /** Computes derived facts from a match's bindings. */ - #handler; - /** - * Accept a new full match and assert its derived facts. - * - * Mints a fresh negative entity id, invokes the handler with the token's - * bindings, and inserts each returned `(attr, value)` pair into working - * memory under that id. Records the list of attrs on the token so a - * future {@link leftDeactivate} can retract exactly those facts. - */ - leftActivate(token) { - const derivedId = --this.#idCounter; - const derivedFacts = this.#handler(token.bindings); - const attrs = []; - for (const { attr, value } of derivedFacts) { - this.#wm.insert(derivedId, attr, value); - attrs.push(attr); - }; - this.#tokenToEntry.set(token, { id: derivedId, attrs }); - } - /** - * Withdraw a previously-accepted match and retract its derived facts. - * - * Retracts each attr that was asserted on activation — not re-derived - * from the handler, see module header for rationale. Unknown tokens are - * a no-op: upstream memories broadcast deactivations to all subscribers, - * and a production that never saw a given token must simply ignore it - * (matching {@link BetaMemory.leftDeactivate} / {@link ProductionNode.leftDeactivate}). - */ - leftDeactivate(token) { - const entry = this.#tokenToEntry.get(token); - if (!entry) return; - for (const attr of entry.attrs) { - this.#wm.retract(entry.id, attr); - }; - this.#tokenToEntry.delete(token); - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQXdGTyxNQUFNLHNCQUFzQjtBQUFBLEVBdUJqQyxZQUVXLFVBQ1QsSUFDQSxTQUNBO0FBSFM7QUFJVCxTQUFLLE1BQU07QUFDWCxTQUFLLFdBQVc7QUFBQSxFQUNsQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUF2QkEsYUFBYTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUosZ0JBQWdCLG9CQUFJLElBQXlCO0FBQUE7QUFBQSxFQUc3QztBQUFBO0FBQUEsRUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQW9CVCxhQUFhLE9BQW9CO0FBQy9CLFVBQU0sWUFBYSxFQUFFLEtBQUs7QUFDMUIsVUFBTSxlQUFlLEtBQUssU0FBUyxNQUFNLFFBQVE7QUFFakQsVUFBTSxRQUFtQixDQUFDO0FBQzFCLGVBQVcsRUFBRSxNQUFNLE1BQU0sS0FBSyxjQUFjO0FBQzFDLFdBQUssSUFBSSxPQUFPLFdBQVcsTUFBTSxLQUFLO0FBQ3RDLFlBQU0sS0FBSyxJQUFJO0FBQUEsSUFDakI7QUFFQSxTQUFLLGNBQWMsSUFBSSxPQUFPLEVBQUUsSUFBSSxXQUFXLE1BQU0sQ0FBQztBQUFBLEVBQ3hEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFXQSxlQUFlLE9BQW9CO0FBQ2pDLFVBQU0sUUFBUSxLQUFLLGNBQWMsSUFBSSxLQUFLO0FBQzFDLFFBQUksQ0FBQyxNQUFPO0FBRVosZUFBVyxRQUFRLE1BQU0sT0FBTztBQUM5QixXQUFLLElBQUksUUFBUSxNQUFNLElBQUksSUFBSTtBQUFBLElBQ2pDO0FBQ0EsU0FBSyxjQUFjLE9BQU8sS0FBSztBQUFBLEVBQ2pDO0FBQ0YiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImRlcml2ZWQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEZXJpdmVkRmFjdFByb2R1Y3Rpb24g4oCUIGB0aGVuRmluYWxseWAgZXF1aXZhbGVudCB3aXRoIHRydXRoIG1haW50ZW5hbmNlLlxuICpcbiAqIFBlciBgcGFja2FnZXMvcmV0ZS9TUEVDLm1kIMKnVHJ1dGggTWFpbnRlbmFuY2VgIGFuZCDCp1JldGUgSUkgUmVmZXJlbmNlXG4gKiBUYXJnZXQsIGEgYERlcml2ZWRGYWN0UHJvZHVjdGlvbmAgaXMgYSB0ZXJtaW5hbCBub2RlIHRoYXQgdHVybnMgZnVsbFxuICogbWF0Y2hlcyBpbnRvIG1hdGVyaWFsaXNlZCBFQVYgZmFjdHMgaW4gd29ya2luZyBtZW1vcnkuIEl0IGRpZmZlcnMgZnJvbVxuICoge0BsaW5rIFByb2R1Y3Rpb25Ob2RlfSBpbiB0d28gd2F5czpcbiAqXG4gKiAxLiBJdCBkb2VzIG5vdCBtZXJlbHkgcmVjb3JkIG1hdGNoZXMg4oCUIGl0ICphc3NlcnRzIG5ldyBmYWN0cyogY29tcHV0ZWRcbiAqICAgIGZyb20gdGhlIG1hdGNoJ3MgdmFyaWFibGUgYmluZGluZ3MuIFRob3NlIGZhY3RzIGFyZSBpbmRpc3Rpbmd1aXNoYWJsZVxuICogICAgZnJvbSB1c2VyLWFzc2VydGVkIGZhY3RzIHRvIHRoZSByZXN0IG9mIHRoZSBSZXRlIG5ldHdvcmssIHdoaWNoIG1lYW5zXG4gKiAgICB0aGV5IGNhbiBwYXJ0aWNpcGF0ZSBpbiBmdXJ0aGVyIG1hdGNoZXMgKGNoYWluZWQgaW5mZXJlbmNlKS5cbiAqXG4gKiAyLiBUaGUgYXNzZXJ0ZWQgZmFjdHMgYXJlIHRpZWQgdG8gdGhlIGxpZmUtY3ljbGUgb2YgdGhlIHN1cHBvcnRpbmcgbWF0Y2guXG4gKiAgICBXaGVuIHRoZSBtYXRjaCBpcyB3aXRoZHJhd24gKGBsZWZ0RGVhY3RpdmF0ZWApLCB0aGUgZmFjdHMgaXQgcHJvZHVjZWRcbiAqICAgIGFyZSByZXRyYWN0ZWQgYXV0b21hdGljYWxseS4gVGhpcyBpcyB0aGUgXCJ0cnV0aCBtYWludGVuYW5jZVwiIGNvbnRyYWN0OlxuICogICAgZG93bnN0cmVhbSBydWxlcyBzZWUgYSBkZXJpdmVkIGZhY3QgaWYgYW5kIG9ubHkgaWYgaXRzIHN1cHBvcnRpbmdcbiAqICAgIG1hdGNoIGlzIGN1cnJlbnRseSBhY3RpdmUuXG4gKlxuICogRGVyaXZlZCBmYWN0cyB1c2UgKipuZWdhdGl2ZSB7QGxpbmsgRW50aXR5SWR9cyoqIG1pbnRlZCBmcm9tIGFuIGludGVybmFsXG4gKiBwZXItbm9kZSBjb3VudGVyIChgLTFgLCBgLTJgLCAuLi4pLiBQZXIgU1BFQyDCp0lEIEF1dGhvcml0eSB1c2VyLW1pbnRlZCBpZHNcbiAqIHZpYSBgU2Vzc2lvbi5uZXh0SWQoKWAgYXJlIHN0cmljdGx5IHBvc2l0aXZlLCBzbyB0aGUgc2lnbiBvZiB0aGUgaWQgaXMgYVxuICogY29tcGlsZS1mcmVlIHdheSB0byB0ZWxsIGRlcml2ZWQgZmFjdHMgYXBhcnQgZnJvbSB1c2VyIGZhY3RzIHdpdGhvdXRcbiAqIG5lZWRpbmcgYSBzaWRlY2FyIHJlZ2lzdHJ5LlxuICpcbiAqIFRoZSBoYW5kbGVyIHJlY2VpdmVzIHRoZSBtYXRjaCdzIHtAbGluayBCaW5kaW5nc30gYW5kIHJldHVybnMgdGhlIGxpc3Qgb2ZcbiAqIGAoYXR0ciwgdmFsdWUpYCBwYWlycyB0byBhc3NlcnQgdW5kZXIgdGhlIGRlcml2ZWQgaWQuIFJldHVybmluZyBhbiBlbXB0eVxuICogYXJyYXkgaXMgbGVnYWwg4oCUIGl0IHJlY29yZHMgdGhlIGFjdGl2YXRpb24gKHNvIGxhdGVyIGRlYWN0aXZhdGlvbiBpcyBhXG4gKiBjbGVhbiBuby1vcCkgd2l0aG91dCBtdXRhdGluZyB3b3JraW5nIG1lbW9yeS5cbiAqXG4gKiBUaGUgaGFuZGxlciBpcyBpbnZva2VkICoqb25seSBvbiBhY3RpdmF0ZSoqLCBuZXZlciBvbiBkZWFjdGl2YXRlLiBPblxuICogZGVhY3RpdmF0ZSB3ZSByZXRyYWN0IHRoZSBleGFjdCBhdHRycyBwcmV2aW91c2x5IGFzc2VydGVkIGZvciB0aGF0IHRva2VuLFxuICogd2hpY2ggaXMgc3RvcmVkIG9uIGFjdGl2YXRpb24uIFRoaXMgYXZvaWRzIHJlLXJ1bm5pbmcgdXNlciBjb2RlIGR1cmluZ1xuICogcmV0cmFjdGlvbiDigJQgaW1wb3J0YW50IGJlY2F1c2UgcmV0cmFjdGlvbiBoYXBwZW5zIGR1cmluZyBmYWN0LXJlbW92YWxcbiAqIGNhc2NhZGVzIHdoZXJlIHJlLWVudGVyaW5nIHRoZSBoYW5kbGVyIGNvdWxkIHByb2R1Y2UgYSBkaWZmZXJlbnQgb3V0cHV0XG4gKiB0aGFuIHRoZSBvbmUgdGhhdCB3YXMgb3JpZ2luYWxseSBhc3NlcnRlZCAoZS5nLiBpZiB0aGUgaGFuZGxlciByZWFkc1xuICogb3RoZXIgd29ya2luZy1tZW1vcnkgc3RhdGUpLlxuICovXG5pbXBvcnQgdHlwZSB7IEVudGl0eUlkIH0gZnJvbSBcIi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEF0dHJLZXksIEZhY3RWYWx1ZSwgV29ya2luZ01lbW9yeSB9IGZyb20gXCIuL3dtLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdzLCBUb2tlbiB9IGZyb20gXCIuL2JldGEuanNcIjtcblxuLyoqXG4gKiBBIHNpbmdsZSBgKGF0dHIsIHZhbHVlKWAgcGFpciBwcm9kdWNlZCBieSBhIHtAbGluayBEZXJpdmVkSGFuZGxlcn0uXG4gKlxuICogVGhlIGVudGl0eSBpZCBpcyBzdXBwbGllZCBieSB0aGUge0BsaW5rIERlcml2ZWRGYWN0UHJvZHVjdGlvbn0gaXRzZWxmXG4gKiAoZGVyaXZlZCBmYWN0cyBhcmUgbWludGVkIHdpdGggbmVnYXRpdmUgaWRzKSwgc28gdGhlIGhhbmRsZXIgb25seSByZXR1cm5zXG4gKiB0aGUgYXR0cmlidXRlLWFuZC12YWx1ZSBoYWxmIG9mIHRoZSB0cmlwbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVyaXZlZEZhY3Qge1xuICByZWFkb25seSBhdHRyOiBBdHRyS2V5O1xuICByZWFkb25seSB2YWx1ZTogRmFjdFZhbHVlO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBkZXJpdmVkIGZhY3RzIHRvIGFzc2VydCBmb3IgYSBzaW5nbGUgZnVsbCBtYXRjaC5cbiAqXG4gKiBJbnZva2VkIGJ5IHtAbGluayBEZXJpdmVkRmFjdFByb2R1Y3Rpb24ubGVmdEFjdGl2YXRlfSB3aXRoIHRoZSBtYXRjaCdzXG4gKiBhY2N1bXVsYXRlZCB7QGxpbmsgQmluZGluZ3N9LiBSZXR1cm5pbmcgYW4gZW1wdHkgYXJyYXkgaXMgdmFsaWQgYW5kIG1lYW5zXG4gKiBcInRoaXMgbWF0Y2ggY29udHJpYnV0ZXMgbm8gZGVyaXZlZCBmYWN0c1wiOyB0aGUgYWN0aXZhdGlvbiBpcyBzdGlsbFxuICogcmVjb3JkZWQgc28gYSBsYXRlciB7QGxpbmsgRGVyaXZlZEZhY3RQcm9kdWN0aW9uLmxlZnREZWFjdGl2YXRlfSBpcyBhXG4gKiBjbGVhbiBuby1vcC5cbiAqL1xuZXhwb3J0IHR5cGUgRGVyaXZlZEhhbmRsZXIgPSAoYmluZGluZ3M6IEJpbmRpbmdzKSA9PiByZWFkb25seSBEZXJpdmVkRmFjdFtdO1xuXG4vKipcbiAqIFBlci10b2tlbiByZWNvcmQgb2Ygd2hhdCB3YXMgYXNzZXJ0ZWQgc28gaXQgY2FuIGJlIHJldHJhY3RlZCBsYXRlci5cbiAqXG4gKiBgYXR0cnNgIGlzIHRoZSBsaXN0IG9mIGF0dHJpYnV0ZSBuYW1lcyBhc3NlcnRlZCB1bmRlciBgaWRgOyBpdCBpcyBzdG9yZWRcbiAqIOKAlCByYXRoZXIgdGhhbiByZS1kZXJpdmVkIGZyb20gdGhlIGhhbmRsZXIgb24gZGVhY3RpdmF0aW9uIOKAlCBzbyB0aGF0XG4gKiByZXRyYWN0aW9uIHJlbWFpbnMgZGV0ZXJtaW5pc3RpYyBldmVuIGlmIHRoZSBoYW5kbGVyIGlzIG5vbi1pZGVtcG90ZW50XG4gKiAoZS5nLiByZWFkcyB3b3JraW5nLW1lbW9yeSBzdGF0ZSB0aGF0IGhhcyBzaW5jZSBjaGFuZ2VkKS5cbiAqL1xuaW50ZXJmYWNlIERlcml2ZWRFbnRyeSB7XG4gIHJlYWRvbmx5IGlkOiBFbnRpdHlJZDtcbiAgcmVhZG9ubHkgYXR0cnM6IHJlYWRvbmx5IEF0dHJLZXlbXTtcbn1cblxuLyoqXG4gKiBUZXJtaW5hbCBSZXRlIG5vZGUgdGhhdCBtYXRlcmlhbGlzZXMgZGVyaXZlZCBmYWN0cyBmcm9tIGZ1bGwgbWF0Y2hlcy5cbiAqXG4gKiBXaXJpbmc6IHN1YnNjcmliZSB0aGlzIG5vZGUgdG8gdGhlIGZpbmFsIHtAbGluayBCZXRhTWVtb3J5fSAob3IgZmlsdGVyXG4gKiBub2RlKSBvZiBhIHJ1bGUgdmlhIGBhZGREb3duc3RyZWFtQWN0aXZhdGUocHJvZC5sZWZ0QWN0aXZhdGUuYmluZChwcm9kKSlgXG4gKiBhbmQgYGFkZERvd25zdHJlYW1EZWFjdGl2YXRlKHByb2QubGVmdERlYWN0aXZhdGUuYmluZChwcm9kKSlgLlxuICpcbiAqIENvbmN1cnJlbmN5OiBhY3RpdmF0aW9ucyBhbmQgZGVhY3RpdmF0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gYmUgc2VyaWFsaXNlZFxuICogYnkgdGhlIHN1cnJvdW5kaW5nIHtAbGluayBTZXNzaW9uLmZpcmVSdWxlc30gbG9vcDsgbm8gaW50ZXJuYWwgbG9ja2luZy5cbiAqL1xuZXhwb3J0IGNsYXNzIERlcml2ZWRGYWN0UHJvZHVjdGlvbiB7XG4gIC8qKlxuICAgKiBNb25vdG9uaWNhbGx5IGRlY3JlYXNpbmcgY291bnRlciB1c2VkIHRvIG1pbnQgbmVnYXRpdmUgZW50aXR5IGlkcyBmb3JcbiAgICogZGVyaXZlZCBmYWN0cy4gU3RhcnRzIGF0IGAwYCBhbmQgaXMgcHJlLWRlY3JlbWVudGVkIG9uIGVhY2ggYWN0aXZhdGlvbixcbiAgICogeWllbGRpbmcgYC0xLCAtMiwgLTMsIC4uLmAuIFNjb3BlZCBwZXIgbm9kZSBzbyBkaWZmZXJlbnQgcHJvZHVjdGlvbnMgZG9cbiAgICogbm90IGNvbGxpZGUgb24gaWRzIGluIGFueSBleHRlcm5hbGx5LW9ic2VydmFibGUgd2F5ICh0aGUgaWRzIGFyZSBvcGFxdWVcbiAgICogdG8gY29uc3VtZXJzOyBvbmx5IHRoZSBzaWduIGlzIG1lYW5pbmdmdWwpLlxuICAgKi9cbiAgI2lkQ291bnRlciA9IDA7XG5cbiAgLyoqXG4gICAqIE1hcCBmcm9tIHRoZSBhY3RpdmF0aW5nIHtAbGluayBUb2tlbn0gcmVmZXJlbmNlIHRvIHRoZSByZWNvcmQgb2YgZmFjdHNcbiAgICogYXNzZXJ0ZWQgZm9yIGl0LiBLZXllZCBieSByZWZlcmVuY2Ug4oCUIG1hdGNoaW5nIHtAbGluayBCZXRhTWVtb3J5fSdzXG4gICAqIGlkZW50aXR5LWJhc2VkIHRva2VuIHNlbWFudGljcyDigJQgc28gYGxlZnREZWFjdGl2YXRlYCBjYW4gZmluZCB0aGVcbiAgICogZXhhY3QgZW50cnkgdG8gcmV0cmFjdCB3aXRob3V0IHN0cnVjdHVyYWwgY29tcGFyaXNvbi5cbiAgICovXG4gIHJlYWRvbmx5ICN0b2tlblRvRW50cnkgPSBuZXcgTWFwPFRva2VuLCBEZXJpdmVkRW50cnk+KCk7XG5cbiAgLyoqIFdvcmtpbmcgbWVtb3J5IGludG8gd2hpY2ggZGVyaXZlZCBmYWN0cyBhcmUgYXNzZXJ0ZWQgYW5kIHJldHJhY3RlZC4gKi9cbiAgcmVhZG9ubHkgI3dtOiBXb3JraW5nTWVtb3J5O1xuICAvKiogQ29tcHV0ZXMgZGVyaXZlZCBmYWN0cyBmcm9tIGEgbWF0Y2gncyBiaW5kaW5ncy4gKi9cbiAgcmVhZG9ubHkgI2hhbmRsZXI6IERlcml2ZWRIYW5kbGVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIC8qKiBIdW1hbi1yZWFkYWJsZSBydWxlIG5hbWUsIHN1cmZhY2VkIGluIGRpYWdub3N0aWNzLiAqL1xuICAgIHJlYWRvbmx5IHJ1bGVOYW1lOiBzdHJpbmcsXG4gICAgd206IFdvcmtpbmdNZW1vcnksXG4gICAgaGFuZGxlcjogRGVyaXZlZEhhbmRsZXIsXG4gICkge1xuICAgIHRoaXMuI3dtID0gd207XG4gICAgdGhpcy4jaGFuZGxlciA9IGhhbmRsZXI7XG4gIH1cblxuICAvKipcbiAgICogQWNjZXB0IGEgbmV3IGZ1bGwgbWF0Y2ggYW5kIGFzc2VydCBpdHMgZGVyaXZlZCBmYWN0cy5cbiAgICpcbiAgICogTWludHMgYSBmcmVzaCBuZWdhdGl2ZSBlbnRpdHkgaWQsIGludm9rZXMgdGhlIGhhbmRsZXIgd2l0aCB0aGUgdG9rZW4nc1xuICAgKiBiaW5kaW5ncywgYW5kIGluc2VydHMgZWFjaCByZXR1cm5lZCBgKGF0dHIsIHZhbHVlKWAgcGFpciBpbnRvIHdvcmtpbmdcbiAgICogbWVtb3J5IHVuZGVyIHRoYXQgaWQuIFJlY29yZHMgdGhlIGxpc3Qgb2YgYXR0cnMgb24gdGhlIHRva2VuIHNvIGFcbiAgICogZnV0dXJlIHtAbGluayBsZWZ0RGVhY3RpdmF0ZX0gY2FuIHJldHJhY3QgZXhhY3RseSB0aG9zZSBmYWN0cy5cbiAgICovXG4gIGxlZnRBY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICBjb25zdCBkZXJpdmVkSWQgPSAoLS10aGlzLiNpZENvdW50ZXIpIGFzIEVudGl0eUlkO1xuICAgIGNvbnN0IGRlcml2ZWRGYWN0cyA9IHRoaXMuI2hhbmRsZXIodG9rZW4uYmluZGluZ3MpO1xuXG4gICAgY29uc3QgYXR0cnM6IEF0dHJLZXlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgeyBhdHRyLCB2YWx1ZSB9IG9mIGRlcml2ZWRGYWN0cykge1xuICAgICAgdGhpcy4jd20uaW5zZXJ0KGRlcml2ZWRJZCwgYXR0ciwgdmFsdWUpO1xuICAgICAgYXR0cnMucHVzaChhdHRyKTtcbiAgICB9XG5cbiAgICB0aGlzLiN0b2tlblRvRW50cnkuc2V0KHRva2VuLCB7IGlkOiBkZXJpdmVkSWQsIGF0dHJzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFdpdGhkcmF3IGEgcHJldmlvdXNseS1hY2NlcHRlZCBtYXRjaCBhbmQgcmV0cmFjdCBpdHMgZGVyaXZlZCBmYWN0cy5cbiAgICpcbiAgICogUmV0cmFjdHMgZWFjaCBhdHRyIHRoYXQgd2FzIGFzc2VydGVkIG9uIGFjdGl2YXRpb24g4oCUIG5vdCByZS1kZXJpdmVkXG4gICAqIGZyb20gdGhlIGhhbmRsZXIsIHNlZSBtb2R1bGUgaGVhZGVyIGZvciByYXRpb25hbGUuIFVua25vd24gdG9rZW5zIGFyZVxuICAgKiBhIG5vLW9wOiB1cHN0cmVhbSBtZW1vcmllcyBicm9hZGNhc3QgZGVhY3RpdmF0aW9ucyB0byBhbGwgc3Vic2NyaWJlcnMsXG4gICAqIGFuZCBhIHByb2R1Y3Rpb24gdGhhdCBuZXZlciBzYXcgYSBnaXZlbiB0b2tlbiBtdXN0IHNpbXBseSBpZ25vcmUgaXRcbiAgICogKG1hdGNoaW5nIHtAbGluayBCZXRhTWVtb3J5LmxlZnREZWFjdGl2YXRlfSAvIHtAbGluayBQcm9kdWN0aW9uTm9kZS5sZWZ0RGVhY3RpdmF0ZX0pLlxuICAgKi9cbiAgbGVmdERlYWN0aXZhdGUodG9rZW46IFRva2VuKTogdm9pZCB7XG4gICAgY29uc3QgZW50cnkgPSB0aGlzLiN0b2tlblRvRW50cnkuZ2V0KHRva2VuKTtcbiAgICBpZiAoIWVudHJ5KSByZXR1cm47XG5cbiAgICBmb3IgKGNvbnN0IGF0dHIgb2YgZW50cnkuYXR0cnMpIHtcbiAgICAgIHRoaXMuI3dtLnJldHJhY3QoZW50cnkuaWQsIGF0dHIpO1xuICAgIH1cbiAgICB0aGlzLiN0b2tlblRvRW50cnkuZGVsZXRlKHRva2VuKTtcbiAgfVxufVxuIl0sImZpbGUiOiIvc3JjL2Rlcml2ZWQudHMifQ== diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/5616f1602c0b70eeb2d6db6d1df128b66a78a022 b/IJGn1F-WxLUCbfU1lu8pU/ssr/5616f1602c0b70eeb2d6db6d1df128b66a78a022 deleted file mode 100644 index 00dba02..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/5616f1602c0b70eeb2d6db6d1df128b66a78a022 +++ /dev/null @@ -1,149 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("vitest", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/ncc.ts", {"importedNames":["NccNode","NccPartner"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/beta.ts", {"importedNames":["Token","BetaMemory"]}); -const mkId = (n) => n; -const mkFact = (id, attr, value) => ({ - id: mkId(id), - attr, - value -}); -(0,__vite_ssr_import_0__.describe)("NccNode + NccPartner", () => { - (0,__vite_ssr_import_0__.it)("passes token when NCC partner has no sub-matches", () => { - const partner = new __vite_ssr_import_1__.NccPartner(); - const ncc = new __vite_ssr_import_1__.NccNode(partner); - const outMem = new __vite_ssr_import_2__.BetaMemory(); - ncc.addDownstreamActivate((t) => outMem.leftActivate(t)); - const token = new __vite_ssr_import_2__.Token(null, mkFact(1, "X", 1), {}); - ncc.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(outMem.tokens[0]).toBe(token); - }); - (0,__vite_ssr_import_0__.it)("blocks token when NCC partner has sub-matches before outer activates", () => { - const partner = new __vite_ssr_import_1__.NccPartner(); - const ncc = new __vite_ssr_import_1__.NccNode(partner); - const outMem = new __vite_ssr_import_2__.BetaMemory(); - ncc.addDownstreamActivate((t) => outMem.leftActivate(t)); - const token = new __vite_ssr_import_2__.Token(null, mkFact(1, "X", 1), {}); - const subToken = new __vite_ssr_import_2__.Token(token, mkFact(2, "Y", 2), { y: 2 }); - partner.leftActivate(subToken, token); - ncc.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("partner cleanup on retract: token unblocks when sub-match removed", () => { - const partner = new __vite_ssr_import_1__.NccPartner(); - const ncc = new __vite_ssr_import_1__.NccNode(partner); - const outMem = new __vite_ssr_import_2__.BetaMemory(); - ncc.addDownstreamActivate((t) => outMem.leftActivate(t)); - ncc.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - const token = new __vite_ssr_import_2__.Token(null, mkFact(1, "X", 1), {}); - ncc.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - const subToken = new __vite_ssr_import_2__.Token(token, mkFact(2, "Y", 2), { y: 2 }); - partner.leftActivate(subToken, token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - partner.leftDeactivate(subToken, token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - }); - (0,__vite_ssr_import_0__.it)("multiple sub-matches: stays blocked until all removed", () => { - const partner = new __vite_ssr_import_1__.NccPartner(); - const ncc = new __vite_ssr_import_1__.NccNode(partner); - const outMem = new __vite_ssr_import_2__.BetaMemory(); - ncc.addDownstreamActivate((t) => outMem.leftActivate(t)); - ncc.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - const token = new __vite_ssr_import_2__.Token(null, mkFact(1, "X", 1), {}); - ncc.leftActivate(token); - const sub1 = new __vite_ssr_import_2__.Token(token, mkFact(2, "Y", 1), {}); - const sub2 = new __vite_ssr_import_2__.Token(token, mkFact(3, "Y", 2), {}); - partner.leftActivate(sub1, token); - partner.leftActivate(sub2, token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - partner.leftDeactivate(sub1, token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - partner.leftDeactivate(sub2, token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - }); - (0,__vite_ssr_import_0__.it)("left-deactivate outer token removes it from downstream", () => { - const partner = new __vite_ssr_import_1__.NccPartner(); - const ncc = new __vite_ssr_import_1__.NccNode(partner); - const outMem = new __vite_ssr_import_2__.BetaMemory(); - ncc.addDownstreamActivate((t) => outMem.leftActivate(t)); - ncc.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - const token = new __vite_ssr_import_2__.Token(null, mkFact(1, "X", 1), {}); - ncc.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - ncc.leftDeactivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("left-deactivate does NOT emit downstream-deactivate when token was blocked", () => { - const partner = new __vite_ssr_import_1__.NccPartner(); - const ncc = new __vite_ssr_import_1__.NccNode(partner); - let deactivateCalls = 0; - ncc.addDownstreamActivate(() => { - }); - ncc.addDownstreamDeactivate(() => { - deactivateCalls++; - }); - const token = new __vite_ssr_import_2__.Token(null, mkFact(1, "X", 1), {}); - const subToken = new __vite_ssr_import_2__.Token(token, mkFact(2, "Y", 1), {}); - partner.leftActivate(subToken, token); - ncc.leftActivate(token); - ncc.leftDeactivate(token); - (0,__vite_ssr_import_0__.expect)(deactivateCalls).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("idempotent sub-match retract does not underflow", () => { - const partner = new __vite_ssr_import_1__.NccPartner(); - const ncc = new __vite_ssr_import_1__.NccNode(partner); - const outMem = new __vite_ssr_import_2__.BetaMemory(); - ncc.addDownstreamActivate((t) => outMem.leftActivate(t)); - ncc.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - const token = new __vite_ssr_import_2__.Token(null, mkFact(1, "X", 1), {}); - ncc.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - const ghostSub = new __vite_ssr_import_2__.Token(token, mkFact(99, "Y", 0), {}); - partner.leftDeactivate(ghostSub, token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - const realSub = new __vite_ssr_import_2__.Token(token, mkFact(2, "Y", 1), {}); - partner.leftActivate(realSub, token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("multiple outer tokens: each tracked independently by partner", () => { - const partner = new __vite_ssr_import_1__.NccPartner(); - const ncc = new __vite_ssr_import_1__.NccNode(partner); - const outMem = new __vite_ssr_import_2__.BetaMemory(); - ncc.addDownstreamActivate((t) => outMem.leftActivate(t)); - ncc.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - const t1 = new __vite_ssr_import_2__.Token(null, mkFact(1, "X", 1), { id: mkId(1) }); - const t2 = new __vite_ssr_import_2__.Token(null, mkFact(2, "X", 1), { id: mkId(2) }); - ncc.leftActivate(t1); - ncc.leftActivate(t2); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(2); - const sub = new __vite_ssr_import_2__.Token(t1, mkFact(3, "Y", 1), {}); - partner.leftActivate(sub, t1); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(outMem.tokens[0]).toBe(t2); - partner.leftDeactivate(sub, t1); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(2); - }); - (0,__vite_ssr_import_0__.it)("partner without bound ncc is a no-op (defensive)", () => { - const partner = new __vite_ssr_import_1__.NccPartner(); - const token = new __vite_ssr_import_2__.Token(null, mkFact(1, "X", 1), {}); - const subToken = new __vite_ssr_import_2__.Token(token, mkFact(2, "Y", 1), {}); - (0,__vite_ssr_import_0__.expect)(() => partner.leftActivate(subToken, token)).not.toThrow(); - (0,__vite_ssr_import_0__.expect)(() => partner.leftDeactivate(subToken, token)).not.toThrow(); - }); - (0,__vite_ssr_import_0__.it)("sub-match activate for unknown outer token does not spuriously emit", () => { - const partner = new __vite_ssr_import_1__.NccPartner(); - const ncc = new __vite_ssr_import_1__.NccNode(partner); - const outMem = new __vite_ssr_import_2__.BetaMemory(); - ncc.addDownstreamActivate((t) => outMem.leftActivate(t)); - ncc.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - const outerGhost = new __vite_ssr_import_2__.Token(null, mkFact(1, "X", 1), {}); - const sub = new __vite_ssr_import_2__.Token(outerGhost, mkFact(2, "Y", 1), {}); - partner.leftActivate(sub, outerGhost); - partner.leftDeactivate(sub, outerGhost); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEtBQUssQ0FBQyxFQUFFLElBQUksUUFBUTtBQUNoRSxxQ0FBTyxNQUFNLFFBQVEsZUFBZSxVQUFVLEtBQUssQ0FBQyxFQUFFLElBQUksUUFBUTtBQUFBLEVBQ3BFLENBQUM7QUFFRCwrQkFBRyx1RUFBdUUsTUFBTTtBQUM5RSxVQUFNLFVBQVUsSUFBSSxpQ0FBVztBQUMvQixVQUFNLE1BQU0sSUFBSSw4QkFBUSxPQUFPO0FBQy9CLFVBQU0sU0FBUyxJQUFJLGlDQUFXO0FBQzlCLFFBQUksc0JBQXNCLENBQUMsTUFBTSxPQUFPLGFBQWEsQ0FBQyxDQUFDO0FBQ3ZELFFBQUksd0JBQXdCLENBQUMsTUFBTSxPQUFPLGVBQWUsQ0FBQyxDQUFDO0FBRzNELFVBQU0sYUFBYSxJQUFJLDRCQUFNLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4RCxVQUFNLE1BQU0sSUFBSSw0QkFBTSxZQUFZLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkQsWUFBUSxhQUFhLEtBQUssVUFBVTtBQUNwQyxZQUFRLGVBQWUsS0FBSyxVQUFVO0FBQ3RDLHFDQUFPLE9BQU8sTUFBTSxFQUFFLGFBQWEsQ0FBQztBQUFBLEVBQ3RDLENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJuY2MudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgaXQsIGV4cGVjdCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB7IE5jY05vZGUsIE5jY1BhcnRuZXIgfSBmcm9tIFwiLi9uY2MuanNcIjtcbmltcG9ydCB7IFRva2VuLCBCZXRhTWVtb3J5IH0gZnJvbSBcIi4vYmV0YS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBdHRyS2V5LCBGYWN0VmFsdWUgfSBmcm9tIFwiLi93bS5qc1wiO1xuXG5jb25zdCBta0lkID0gKG46IG51bWJlcikgPT4gbiBhcyBFbnRpdHlJZDtcbmNvbnN0IG1rRmFjdCA9IChpZDogbnVtYmVyLCBhdHRyOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSA9PiAoe1xuICBpZDogbWtJZChpZCksXG4gIGF0dHI6IGF0dHIgYXMgQXR0cktleSxcbiAgdmFsdWU6IHZhbHVlIGFzIEZhY3RWYWx1ZSxcbn0pO1xuXG5kZXNjcmliZShcIk5jY05vZGUgKyBOY2NQYXJ0bmVyXCIsICgpID0+IHtcbiAgaXQoXCJwYXNzZXMgdG9rZW4gd2hlbiBOQ0MgcGFydG5lciBoYXMgbm8gc3ViLW1hdGNoZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHBhcnRuZXIgPSBuZXcgTmNjUGFydG5lcigpO1xuICAgIGNvbnN0IG5jYyA9IG5ldyBOY2NOb2RlKHBhcnRuZXIpO1xuICAgIGNvbnN0IG91dE1lbSA9IG5ldyBCZXRhTWVtb3J5KCk7XG4gICAgbmNjLmFkZERvd25zdHJlYW1BY3RpdmF0ZSgodCkgPT4gb3V0TWVtLmxlZnRBY3RpdmF0ZSh0KSk7XG5cbiAgICBjb25zdCB0b2tlbiA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoMSwgXCJYXCIsIDEpLCB7fSk7XG4gICAgbmNjLmxlZnRBY3RpdmF0ZSh0b2tlbik7XG5cbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDEpOyAvLyBubyBzdWItbWF0Y2hlcyDihpIgcGFzc2VzXG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnNbMF0pLnRvQmUodG9rZW4pO1xuICB9KTtcblxuICBpdChcImJsb2NrcyB0b2tlbiB3aGVuIE5DQyBwYXJ0bmVyIGhhcyBzdWItbWF0Y2hlcyBiZWZvcmUgb3V0ZXIgYWN0aXZhdGVzXCIsICgpID0+IHtcbiAgICBjb25zdCBwYXJ0bmVyID0gbmV3IE5jY1BhcnRuZXIoKTtcbiAgICBjb25zdCBuY2MgPSBuZXcgTmNjTm9kZShwYXJ0bmVyKTtcbiAgICBjb25zdCBvdXRNZW0gPSBuZXcgQmV0YU1lbW9yeSgpO1xuICAgIG5jYy5hZGREb3duc3RyZWFtQWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0QWN0aXZhdGUodCkpO1xuXG4gICAgY29uc3QgdG9rZW4gPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDEsIFwiWFwiLCAxKSwge30pO1xuXG4gICAgLy8gU3ViLW1hdGNoIGFycml2ZXMgYmVmb3JlIG91dGVyIHRva2VuXG4gICAgY29uc3Qgc3ViVG9rZW4gPSBuZXcgVG9rZW4odG9rZW4sIG1rRmFjdCgyLCBcIllcIiwgMiksIHsgeTogMiB9KTtcbiAgICBwYXJ0bmVyLmxlZnRBY3RpdmF0ZShzdWJUb2tlbiwgdG9rZW4pO1xuXG4gICAgLy8gTm93IG91dGVyIHRva2VuIGFycml2ZXNcbiAgICBuY2MubGVmdEFjdGl2YXRlKHRva2VuKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDApOyAvLyBibG9ja2VkXG4gIH0pO1xuXG4gIGl0KFwicGFydG5lciBjbGVhbnVwIG9uIHJldHJhY3Q6IHRva2VuIHVuYmxvY2tzIHdoZW4gc3ViLW1hdGNoIHJlbW92ZWRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHBhcnRuZXIgPSBuZXcgTmNjUGFydG5lcigpO1xuICAgIGNvbnN0IG5jYyA9IG5ldyBOY2NOb2RlKHBhcnRuZXIpO1xuICAgIGNvbnN0IG91dE1lbSA9IG5ldyBCZXRhTWVtb3J5KCk7XG4gICAgbmNjLmFkZERvd25zdHJlYW1BY3RpdmF0ZSgodCkgPT4gb3V0TWVtLmxlZnRBY3RpdmF0ZSh0KSk7XG4gICAgbmNjLmFkZERvd25zdHJlYW1EZWFjdGl2YXRlKCh0KSA9PiBvdXRNZW0ubGVmdERlYWN0aXZhdGUodCkpO1xuXG4gICAgY29uc3QgdG9rZW4gPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDEsIFwiWFwiLCAxKSwge30pO1xuICAgIG5jYy5sZWZ0QWN0aXZhdGUodG9rZW4pO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMSk7IC8vIGluaXRpYWxseSBwYXNzZXNcblxuICAgIC8vIFN1Yi1tYXRjaCBhcnJpdmVzIOKGkiBibG9ja3NcbiAgICBjb25zdCBzdWJUb2tlbiA9IG5ldyBUb2tlbih0b2tlbiwgbWtGYWN0KDIsIFwiWVwiLCAyKSwgeyB5OiAyIH0pO1xuICAgIHBhcnRuZXIubGVmdEFjdGl2YXRlKHN1YlRva2VuLCB0b2tlbik7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgwKTsgLy8gYmxvY2tlZFxuXG4gICAgLy8gU3ViLW1hdGNoIHJlbW92ZWQg4oaSIHVuYmxvY2tzXG4gICAgcGFydG5lci5sZWZ0RGVhY3RpdmF0ZShzdWJUb2tlbiwgdG9rZW4pO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMSk7IC8vIHBhc3NlcyBhZ2FpblxuICB9KTtcblxuICBpdChcIm11bHRpcGxlIHN1Yi1tYXRjaGVzOiBzdGF5cyBibG9ja2VkIHVudGlsIGFsbCByZW1vdmVkXCIsICgpID0+IHtcbiAgICBjb25zdCBwYXJ0bmVyID0gbmV3IE5jY1BhcnRuZXIoKTtcbiAgICBjb25zdCBuY2MgPSBuZXcgTmNjTm9kZShwYXJ0bmVyKTtcbiAgICBjb25zdCBvdXRNZW0gPSBuZXcgQmV0YU1lbW9yeSgpO1xuICAgIG5jYy5hZGREb3duc3RyZWFtQWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0QWN0aXZhdGUodCkpO1xuICAgIG5jYy5hZGREb3duc3RyZWFtRGVhY3RpdmF0ZSgodCkgPT4gb3V0TWVtLmxlZnREZWFjdGl2YXRlKHQpKTtcblxuICAgIGNvbnN0IHRva2VuID0gbmV3IFRva2VuKG51bGwsIG1rRmFjdCgxLCBcIlhcIiwgMSksIHt9KTtcbiAgICBuY2MubGVmdEFjdGl2YXRlKHRva2VuKTtcblxuICAgIGNvbnN0IHN1YjEgPSBuZXcgVG9rZW4odG9rZW4sIG1rRmFjdCgyLCBcIllcIiwgMSksIHt9KTtcbiAgICBjb25zdCBzdWIyID0gbmV3IFRva2VuKHRva2VuLCBta0ZhY3QoMywgXCJZXCIsIDIpLCB7fSk7XG4gICAgcGFydG5lci5sZWZ0QWN0aXZhdGUoc3ViMSwgdG9rZW4pO1xuICAgIHBhcnRuZXIubGVmdEFjdGl2YXRlKHN1YjIsIHRva2VuKTtcblxuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgcGFydG5lci5sZWZ0RGVhY3RpdmF0ZShzdWIxLCB0b2tlbik7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgwKTsgLy8gc3RpbGwgMSBzdWItbWF0Y2hcbiAgICBwYXJ0bmVyLmxlZnREZWFjdGl2YXRlKHN1YjIsIHRva2VuKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDEpOyAvLyBub3cgcGFzc2VzXG4gIH0pO1xuXG4gIGl0KFwibGVmdC1kZWFjdGl2YXRlIG91dGVyIHRva2VuIHJlbW92ZXMgaXQgZnJvbSBkb3duc3RyZWFtXCIsICgpID0+IHtcbiAgICBjb25zdCBwYXJ0bmVyID0gbmV3IE5jY1BhcnRuZXIoKTtcbiAgICBjb25zdCBuY2MgPSBuZXcgTmNjTm9kZShwYXJ0bmVyKTtcbiAgICBjb25zdCBvdXRNZW0gPSBuZXcgQmV0YU1lbW9yeSgpO1xuICAgIG5jYy5hZGREb3duc3RyZWFtQWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0QWN0aXZhdGUodCkpO1xuICAgIG5jYy5hZGREb3duc3RyZWFtRGVhY3RpdmF0ZSgodCkgPT4gb3V0TWVtLmxlZnREZWFjdGl2YXRlKHQpKTtcblxuICAgIGNvbnN0IHRva2VuID0gbmV3IFRva2VuKG51bGwsIG1rRmFjdCgxLCBcIlhcIiwgMSksIHt9KTtcbiAgICBuY2MubGVmdEFjdGl2YXRlKHRva2VuKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDEpO1xuXG4gICAgbmNjLmxlZnREZWFjdGl2YXRlKHRva2VuKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcblxuICBpdChcImxlZnQtZGVhY3RpdmF0ZSBkb2VzIE5PVCBlbWl0IGRvd25zdHJlYW0tZGVhY3RpdmF0ZSB3aGVuIHRva2VuIHdhcyBibG9ja2VkXCIsICgpID0+IHtcbiAgICBjb25zdCBwYXJ0bmVyID0gbmV3IE5jY1BhcnRuZXIoKTtcbiAgICBjb25zdCBuY2MgPSBuZXcgTmNjTm9kZShwYXJ0bmVyKTtcbiAgICBsZXQgZGVhY3RpdmF0ZUNhbGxzID0gMDtcbiAgICBuY2MuYWRkRG93bnN0cmVhbUFjdGl2YXRlKCgpID0+IHt9KTtcbiAgICBuY2MuYWRkRG93bnN0cmVhbURlYWN0aXZhdGUoKCkgPT4ge1xuICAgICAgZGVhY3RpdmF0ZUNhbGxzKys7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0b2tlbiA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoMSwgXCJYXCIsIDEpLCB7fSk7XG4gICAgLy8gUHJlLXNlZWQgc3ViLW1hdGNoIHNvIHRva2VuIGlzIGJsb2NrZWQgb24gYWN0aXZhdGlvblxuICAgIGNvbnN0IHN1YlRva2VuID0gbmV3IFRva2VuKHRva2VuLCBta0ZhY3QoMiwgXCJZXCIsIDEpLCB7fSk7XG4gICAgcGFydG5lci5sZWZ0QWN0aXZhdGUoc3ViVG9rZW4sIHRva2VuKTtcblxuICAgIG5jYy5sZWZ0QWN0aXZhdGUodG9rZW4pO1xuICAgIC8vIHRva2VuIHdhcyBuZXZlciBwYXNzaW5nLCBzbyBsZWZ0RGVhY3RpdmF0ZSBzaG91bGQgbm90IGVtaXRcbiAgICBuY2MubGVmdERlYWN0aXZhdGUodG9rZW4pO1xuICAgIGV4cGVjdChkZWFjdGl2YXRlQ2FsbHMpLnRvQmUoMCk7XG4gIH0pO1xuXG4gIGl0KFwiaWRlbXBvdGVudCBzdWItbWF0Y2ggcmV0cmFjdCBkb2VzIG5vdCB1bmRlcmZsb3dcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHBhcnRuZXIgPSBuZXcgTmNjUGFydG5lcigpO1xuICAgIGNvbnN0IG5jYyA9IG5ldyBOY2NOb2RlKHBhcnRuZXIpO1xuICAgIGNvbnN0IG91dE1lbSA9IG5ldyBCZXRhTWVtb3J5KCk7XG4gICAgbmNjLmFkZERvd25zdHJlYW1BY3RpdmF0ZSgodCkgPT4gb3V0TWVtLmxlZnRBY3RpdmF0ZSh0KSk7XG4gICAgbmNjLmFkZERvd25zdHJlYW1EZWFjdGl2YXRlKCh0KSA9PiBvdXRNZW0ubGVmdERlYWN0aXZhdGUodCkpO1xuXG4gICAgY29uc3QgdG9rZW4gPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDEsIFwiWFwiLCAxKSwge30pO1xuICAgIG5jYy5sZWZ0QWN0aXZhdGUodG9rZW4pO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMSk7XG5cbiAgICAvLyBSZXRyYWN0IGEgc3ViLW1hdGNoIHRoYXQgd2FzIG5ldmVyIGFjdGl2YXRlZCDigJQgY291bnQgY2xhbXBzIGF0IDBcbiAgICBjb25zdCBnaG9zdFN1YiA9IG5ldyBUb2tlbih0b2tlbiwgbWtGYWN0KDk5LCBcIllcIiwgMCksIHt9KTtcbiAgICBwYXJ0bmVyLmxlZnREZWFjdGl2YXRlKGdob3N0U3ViLCB0b2tlbik7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgxKTtcblxuICAgIC8vIFJlYWwgc3ViLW1hdGNoIHN0aWxsIGJsb2NrcyBjb3JyZWN0bHlcbiAgICBjb25zdCByZWFsU3ViID0gbmV3IFRva2VuKHRva2VuLCBta0ZhY3QoMiwgXCJZXCIsIDEpLCB7fSk7XG4gICAgcGFydG5lci5sZWZ0QWN0aXZhdGUocmVhbFN1YiwgdG9rZW4pO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xuXG4gIGl0KFwibXVsdGlwbGUgb3V0ZXIgdG9rZW5zOiBlYWNoIHRyYWNrZWQgaW5kZXBlbmRlbnRseSBieSBwYXJ0bmVyXCIsICgpID0+IHtcbiAgICBjb25zdCBwYXJ0bmVyID0gbmV3IE5jY1BhcnRuZXIoKTtcbiAgICBjb25zdCBuY2MgPSBuZXcgTmNjTm9kZShwYXJ0bmVyKTtcbiAgICBjb25zdCBvdXRNZW0gPSBuZXcgQmV0YU1lbW9yeSgpO1xuICAgIG5jYy5hZGREb3duc3RyZWFtQWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0QWN0aXZhdGUodCkpO1xuICAgIG5jYy5hZGREb3duc3RyZWFtRGVhY3RpdmF0ZSgodCkgPT4gb3V0TWVtLmxlZnREZWFjdGl2YXRlKHQpKTtcblxuICAgIGNvbnN0IHQxID0gbmV3IFRva2VuKG51bGwsIG1rRmFjdCgxLCBcIlhcIiwgMSksIHsgaWQ6IG1rSWQoMSkgfSk7XG4gICAgY29uc3QgdDIgPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDIsIFwiWFwiLCAxKSwgeyBpZDogbWtJZCgyKSB9KTtcbiAgICBuY2MubGVmdEFjdGl2YXRlKHQxKTtcbiAgICBuY2MubGVmdEFjdGl2YXRlKHQyKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDIpO1xuXG4gICAgLy8gU3ViLW1hdGNoIGJsb2NrcyBvbmx5IHQxXG4gICAgY29uc3Qgc3ViID0gbmV3IFRva2VuKHQxLCBta0ZhY3QoMywgXCJZXCIsIDEpLCB7fSk7XG4gICAgcGFydG5lci5sZWZ0QWN0aXZhdGUoc3ViLCB0MSk7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2Vuc1swXSkudG9CZSh0Mik7XG5cbiAgICAvLyBSZXRyYWN0IGl0IOKAlCB0MSB1bmJsb2Nrc1xuICAgIHBhcnRuZXIubGVmdERlYWN0aXZhdGUoc3ViLCB0MSk7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgyKTtcbiAgfSk7XG5cbiAgaXQoXCJwYXJ0bmVyIHdpdGhvdXQgYm91bmQgbmNjIGlzIGEgbm8tb3AgKGRlZmVuc2l2ZSlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHBhcnRuZXIgPSBuZXcgTmNjUGFydG5lcigpO1xuICAgIGNvbnN0IHRva2VuID0gbmV3IFRva2VuKG51bGwsIG1rRmFjdCgxLCBcIlhcIiwgMSksIHt9KTtcbiAgICBjb25zdCBzdWJUb2tlbiA9IG5ldyBUb2tlbih0b2tlbiwgbWtGYWN0KDIsIFwiWVwiLCAxKSwge30pO1xuICAgIC8vIE5vIE5jY05vZGUgYXR0YWNoZWQg4oCUIGFjdGl2YXRlL2RlYWN0aXZhdGUgbXVzdCBub3QgdGhyb3dcbiAgICBleHBlY3QoKCkgPT4gcGFydG5lci5sZWZ0QWN0aXZhdGUoc3ViVG9rZW4sIHRva2VuKSkubm90LnRvVGhyb3coKTtcbiAgICBleHBlY3QoKCkgPT4gcGFydG5lci5sZWZ0RGVhY3RpdmF0ZShzdWJUb2tlbiwgdG9rZW4pKS5ub3QudG9UaHJvdygpO1xuICB9KTtcblxuICBpdChcInN1Yi1tYXRjaCBhY3RpdmF0ZSBmb3IgdW5rbm93biBvdXRlciB0b2tlbiBkb2VzIG5vdCBzcHVyaW91c2x5IGVtaXRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHBhcnRuZXIgPSBuZXcgTmNjUGFydG5lcigpO1xuICAgIGNvbnN0IG5jYyA9IG5ldyBOY2NOb2RlKHBhcnRuZXIpO1xuICAgIGNvbnN0IG91dE1lbSA9IG5ldyBCZXRhTWVtb3J5KCk7XG4gICAgbmNjLmFkZERvd25zdHJlYW1BY3RpdmF0ZSgodCkgPT4gb3V0TWVtLmxlZnRBY3RpdmF0ZSh0KSk7XG4gICAgbmNjLmFkZERvd25zdHJlYW1EZWFjdGl2YXRlKCh0KSA9PiBvdXRNZW0ubGVmdERlYWN0aXZhdGUodCkpO1xuXG4gICAgLy8gT3V0ZXIgdG9rZW4gd2FzIG5ldmVyIHBhc3NlZCB0byBuY2MubGVmdEFjdGl2YXRlXG4gICAgY29uc3Qgb3V0ZXJHaG9zdCA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoMSwgXCJYXCIsIDEpLCB7fSk7XG4gICAgY29uc3Qgc3ViID0gbmV3IFRva2VuKG91dGVyR2hvc3QsIG1rRmFjdCgyLCBcIllcIiwgMSksIHt9KTtcbiAgICBwYXJ0bmVyLmxlZnRBY3RpdmF0ZShzdWIsIG91dGVyR2hvc3QpO1xuICAgIHBhcnRuZXIubGVmdERlYWN0aXZhdGUoc3ViLCBvdXRlckdob3N0KTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvc3JjL25jYy50ZXN0LnRzIn0= diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/667bd8c80d5efca30ab186d6beccba2fcf695a95 b/IJGn1F-WxLUCbfU1lu8pU/ssr/667bd8c80d5efca30ab186d6beccba2fcf695a95 deleted file mode 100644 index 9c770e3..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/667bd8c80d5efca30ab186d6beccba2fcf695a95 +++ /dev/null @@ -1,65 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "FilterNode", { enumerable: true, configurable: true, get(){ try { return FilterNode } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/registry.ts", {"importedNames":["UnknownPredicateError"]}); -class FilterNode { - #specs; - #registry; - #activateListeners = []; - #deactivateListeners = []; - /** - * Tokens that previously passed every predicate. Used to route - * deactivations: only forwarded tokens require downstream withdrawal. - * Identity (reference) tracking matches the rest of the beta network. - */ - #passedTokens = /* @__PURE__ */ new Set(); - /** - * @throws UnknownPredicateError if any spec names a predicate that is not - * registered on `registry`. Validation happens up-front so wiring errors - * surface at construction time, not at the first activation. - */ - constructor(specs, registry) { - registry.verify(specs.map((s) => s.predicate)); - this.#specs = specs; - this.#registry = registry; - } - /** Subscribe to forwarded tokens. Listeners fire in registration order. */ - addDownstreamActivate(listener) { - this.#activateListeners.push(listener); - } - /** Subscribe to withdrawals. Listeners fire in registration order. */ - addDownstreamDeactivate(listener) { - this.#deactivateListeners.push(listener); - } - /** - * Evaluate the conjunction of registered predicates against `token`. - * Forwards downstream only if every predicate returns `true`. - */ - leftActivate(token) { - if (!this.#allPass(token.bindings)) return; - this.#passedTokens.add(token); - for (const listener of this.#activateListeners) { - listener(token); - } - } - /** - * Withdraw a token. Downstream listeners fire only if the token was - * previously forwarded — tokens blocked by the filter never reached - * downstream consumers and must not produce phantom deactivations. - */ - leftDeactivate(token) { - if (!this.#passedTokens.delete(token)) return; - for (const listener of this.#deactivateListeners) { - listener(token); - } - } - #allPass(bindings) { - for (const spec of this.#specs) { - const predFn = this.#registry.get(spec.predicate); - if (!predFn) throw new __vite_ssr_import_0__.UnknownPredicateError(spec.predicate); - if (!predFn(bindings, spec.args)) return false; - }; - return true; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQTBCQTtBQW9CTyxNQUFNLFdBQVc7QUFBQSxFQUNiO0FBQUEsRUFDQTtBQUFBLEVBQ0EscUJBQXlDLENBQUM7QUFBQSxFQUMxQyx1QkFBNkMsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU05QyxnQkFBZ0Isb0JBQUksSUFBVztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU94QyxZQUFZLE9BQThCLFVBQTZCO0FBQ3JFLGFBQVMsT0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDO0FBQzdDLFNBQUssU0FBUztBQUNkLFNBQUssWUFBWTtBQUFBLEVBQ25CO0FBQUE7QUFBQSxFQUdBLHNCQUFzQixVQUFrQztBQUN0RCxTQUFLLG1CQUFtQixLQUFLLFFBQVE7QUFBQSxFQUN2QztBQUFBO0FBQUEsRUFHQSx3QkFBd0IsVUFBb0M7QUFDMUQsU0FBSyxxQkFBcUIsS0FBSyxRQUFRO0FBQUEsRUFDekM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTUEsYUFBYSxPQUFvQjtBQUMvQixRQUFJLENBQUMsS0FBSyxTQUFTLE1BQU0sUUFBUSxFQUFHO0FBQ3BDLFNBQUssY0FBYyxJQUFJLEtBQUs7QUFDNUIsZUFBVyxZQUFZLEtBQUssb0JBQW9CO0FBQzlDLGVBQVMsS0FBSztBQUFBLElBQ2hCO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLGVBQWUsT0FBb0I7QUFDakMsUUFBSSxDQUFDLEtBQUssY0FBYyxPQUFPLEtBQUssRUFBRztBQUN2QyxlQUFXLFlBQVksS0FBSyxzQkFBc0I7QUFDaEQsZUFBUyxLQUFLO0FBQUEsSUFDaEI7QUFBQSxFQUNGO0FBQUEsRUFFQSxTQUFTLFVBQTZCO0FBQ3BDLGVBQVcsUUFBUSxLQUFLLFFBQVE7QUFDOUIsWUFBTSxTQUFTLEtBQUssVUFBVSxJQUFJLEtBQUssU0FBUztBQUloRCxVQUFJLENBQUMsT0FBUSxPQUFNLElBQUksNENBQXNCLEtBQUssU0FBUztBQUMzRCxVQUFJLENBQUMsT0FBTyxVQUFVLEtBQUssSUFBSSxFQUFHLFFBQU87QUFBQSxJQUMzQztBQUNBLFdBQU87QUFBQSxFQUNUO0FBQ0YiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImNvbmRpdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZpbHRlck5vZGUg4oCUIGFwcGxpZXMgcmVnaXN0ZXJlZCBwcmVkaWNhdGVzIHRvIHRva2Vucy5cbiAqXG4gKiBQZXIgYHBhY2thZ2VzL3JldGUvU1BFQy5tZCDCp0pTT04gUnVsZSBTY2hlbWFgIGZpbHRlcnMgYXJlIGRlY2xhcmVkIGFzXG4gKiBgeyBwcmVkaWNhdGU6IHN0cmluZywgYXJnczogdW5rbm93bltdIH1gIHBhaXJzIGFuZCBleGVjdXRlZCBhZ2FpbnN0IHRoZVxuICogY3VycmVudCB2YXJpYWJsZSBiaW5kaW5ncyBvZiBhIHRva2VuLiBQcmVkaWNhdGVzIHRoZW1zZWx2ZXMgbGl2ZSBpbiBhXG4gKiB7QGxpbmsgUHJlZGljYXRlUmVnaXN0cnl9IHNvIHJ1bGUgZGVmaW5pdGlvbnMgcmVtYWluIHB1cmUgZGF0YSDigJQgdGhlcmUgYXJlXG4gKiBubyBpbmxpbmUgY2xvc3VyZXMsIG5vIGBldmFsYCwgbm8gYEZ1bmN0aW9uYC1mcm9tLXN0cmluZy5cbiAqXG4gKiBBIEZpbHRlck5vZGUgc2l0cyBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBiZXRhIG5ldHdvcmsgYmV0d2VlbiBhbiB1cHN0cmVhbVxuICogc291cmNlICh7QGxpbmsgSm9pbk5vZGV9IG9yIHtAbGluayBCZXRhTWVtb3J5fSkgYW5kIGEgZG93bnN0cmVhbSBjb25zdW1lclxuICogKGFub3RoZXIgYmV0YSBtZW1vcnkgb3IgYSB7QGxpbmsgUHJvZHVjdGlvbk5vZGV9KS4gU2VtYW50aWNzOlxuICpcbiAqIC0ge0BsaW5rIGxlZnRBY3RpdmF0ZX06IGV2YWx1YXRlIGV2ZXJ5IHNwZWMgYWdhaW5zdCBgdG9rZW4uYmluZGluZ3NgLiBJZlxuICogICBBTEwgcmV0dXJuIGB0cnVlYCwgdGhlIHRva2VuIGlzIGZvcndhcmRlZCB0byBkb3duc3RyZWFtIGFjdGl2YXRlXG4gKiAgIGxpc3RlbmVycy4gVGhlIHRva2VuIHJlZmVyZW5jZSBpcyByZWNvcmRlZCBpbiB7QGxpbmsgcGFzc2VkVG9rZW5zfSBzb1xuICogICBzdWJzZXF1ZW50IGRlYWN0aXZhdGlvbiBjYW4gYmUgcm91dGVkIGNvcnJlY3RseS5cbiAqIC0ge0BsaW5rIGxlZnREZWFjdGl2YXRlfTogb25seSBmaXJlIGRvd25zdHJlYW0gZGVhY3RpdmF0ZSBsaXN0ZW5lcnMgaWYgdGhlXG4gKiAgIHRva2VuIHdhcyBwcmV2aW91c2x5IGZvcndhcmRlZC4gVG9rZW5zIHRoYXQgbmV2ZXIgcGFzc2VkIHRoZSBmaWx0ZXJcbiAqICAgbmV2ZXIgcmVhY2hlZCBkb3duc3RyZWFtIG5vZGVzLCBzbyB0aGVpciB3aXRoZHJhd2FsIG11c3QgYmUgYSBuby1vcC5cbiAqXG4gKiBNdWx0aXBsZSBzcGVjcyBhcmUgY29tYmluZWQgd2l0aCBjb25qdW5jdGlvbiAoQU5EKS4gQW4gZW1wdHkgc3BlYyBsaXN0XG4gKiBwYXNzZXMgZXZlcnkgdG9rZW4gKHZhY3VvdXMgQU5EKSwgd2hpY2gga2VlcHMgdGhlIGNvbnN0cnVjdG9yIHRvdGFsIOKAlCBhXG4gKiBmaWx0ZXIgd2l0aCBubyBwcmVkaWNhdGVzIGlzIHN0cnVjdHVyYWxseSBpZGVudGljYWwgdG8gYSBwYXNzLXRocm91Z2guXG4gKi9cbmltcG9ydCB0eXBlIHsgQmluZGluZ3MsIFRva2VuIH0gZnJvbSBcIi4vYmV0YS5qc1wiO1xuaW1wb3J0IHsgdHlwZSBQcmVkaWNhdGVSZWdpc3RyeSwgVW5rbm93blByZWRpY2F0ZUVycm9yIH0gZnJvbSBcIi4vcmVnaXN0cnkuanNcIjtcblxuLyoqXG4gKiBEZWNsYXJhdGl2ZSBkZXNjcmlwdGlvbiBvZiBhIHNpbmdsZSBwcmVkaWNhdGUgYXBwbGljYXRpb24uXG4gKlxuICogYHByZWRpY2F0ZWAgbXVzdCBuYW1lIGEgZnVuY3Rpb24gcHJldmlvdXNseSByZWdpc3RlcmVkIG9uIHRoZVxuICoge0BsaW5rIFByZWRpY2F0ZVJlZ2lzdHJ5fSBwYXNzZWQgdG8gdGhlIEZpbHRlck5vZGUgY29uc3RydWN0b3IuIGBhcmdzYFxuICogaXMgdGhlIHN0YXRpYyBwYXJhbWV0ZXIgbGlzdCBmb3J3YXJkZWQgdG8gdGhlIHByZWRpY2F0ZSBhdCBldmFsdWF0aW9uXG4gKiB0aW1lLCBhbG9uZ3NpZGUgdGhlIHRva2VuJ3MgY3VycmVudCBiaW5kaW5ncy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJTcGVjIHtcbiAgLyoqIFJlZ2lzdGVyZWQgcHJlZGljYXRlIG5hbWUuICovXG4gIHJlYWRvbmx5IHByZWRpY2F0ZTogc3RyaW5nO1xuICAvKiogU3RhdGljIGFyZ3VtZW50cyBwYXNzZWQgYWxvbmdzaWRlIHRoZSBtYXRjaCBiaW5kaW5ncy4gKi9cbiAgcmVhZG9ubHkgYXJnczogcmVhZG9ubHkgdW5rbm93bltdO1xufVxuXG50eXBlIEFjdGl2YXRlTGlzdGVuZXIgPSAodG9rZW46IFRva2VuKSA9PiB2b2lkO1xudHlwZSBEZWFjdGl2YXRlTGlzdGVuZXIgPSAodG9rZW46IFRva2VuKSA9PiB2b2lkO1xuXG5leHBvcnQgY2xhc3MgRmlsdGVyTm9kZSB7XG4gIHJlYWRvbmx5ICNzcGVjczogcmVhZG9ubHkgRmlsdGVyU3BlY1tdO1xuICByZWFkb25seSAjcmVnaXN0cnk6IFByZWRpY2F0ZVJlZ2lzdHJ5O1xuICByZWFkb25seSAjYWN0aXZhdGVMaXN0ZW5lcnM6IEFjdGl2YXRlTGlzdGVuZXJbXSA9IFtdO1xuICByZWFkb25seSAjZGVhY3RpdmF0ZUxpc3RlbmVyczogRGVhY3RpdmF0ZUxpc3RlbmVyW10gPSBbXTtcbiAgLyoqXG4gICAqIFRva2VucyB0aGF0IHByZXZpb3VzbHkgcGFzc2VkIGV2ZXJ5IHByZWRpY2F0ZS4gVXNlZCB0byByb3V0ZVxuICAgKiBkZWFjdGl2YXRpb25zOiBvbmx5IGZvcndhcmRlZCB0b2tlbnMgcmVxdWlyZSBkb3duc3RyZWFtIHdpdGhkcmF3YWwuXG4gICAqIElkZW50aXR5IChyZWZlcmVuY2UpIHRyYWNraW5nIG1hdGNoZXMgdGhlIHJlc3Qgb2YgdGhlIGJldGEgbmV0d29yay5cbiAgICovXG4gIHJlYWRvbmx5ICNwYXNzZWRUb2tlbnMgPSBuZXcgU2V0PFRva2VuPigpO1xuXG4gIC8qKlxuICAgKiBAdGhyb3dzIFVua25vd25QcmVkaWNhdGVFcnJvciBpZiBhbnkgc3BlYyBuYW1lcyBhIHByZWRpY2F0ZSB0aGF0IGlzIG5vdFxuICAgKiAgIHJlZ2lzdGVyZWQgb24gYHJlZ2lzdHJ5YC4gVmFsaWRhdGlvbiBoYXBwZW5zIHVwLWZyb250IHNvIHdpcmluZyBlcnJvcnNcbiAgICogICBzdXJmYWNlIGF0IGNvbnN0cnVjdGlvbiB0aW1lLCBub3QgYXQgdGhlIGZpcnN0IGFjdGl2YXRpb24uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzcGVjczogcmVhZG9ubHkgRmlsdGVyU3BlY1tdLCByZWdpc3RyeTogUHJlZGljYXRlUmVnaXN0cnkpIHtcbiAgICByZWdpc3RyeS52ZXJpZnkoc3BlY3MubWFwKChzKSA9PiBzLnByZWRpY2F0ZSkpO1xuICAgIHRoaXMuI3NwZWNzID0gc3BlY3M7XG4gICAgdGhpcy4jcmVnaXN0cnkgPSByZWdpc3RyeTtcbiAgfVxuXG4gIC8qKiBTdWJzY3JpYmUgdG8gZm9yd2FyZGVkIHRva2Vucy4gTGlzdGVuZXJzIGZpcmUgaW4gcmVnaXN0cmF0aW9uIG9yZGVyLiAqL1xuICBhZGREb3duc3RyZWFtQWN0aXZhdGUobGlzdGVuZXI6IEFjdGl2YXRlTGlzdGVuZXIpOiB2b2lkIHtcbiAgICB0aGlzLiNhY3RpdmF0ZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKiBTdWJzY3JpYmUgdG8gd2l0aGRyYXdhbHMuIExpc3RlbmVycyBmaXJlIGluIHJlZ2lzdHJhdGlvbiBvcmRlci4gKi9cbiAgYWRkRG93bnN0cmVhbURlYWN0aXZhdGUobGlzdGVuZXI6IERlYWN0aXZhdGVMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuI2RlYWN0aXZhdGVMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGUgdGhlIGNvbmp1bmN0aW9uIG9mIHJlZ2lzdGVyZWQgcHJlZGljYXRlcyBhZ2FpbnN0IGB0b2tlbmAuXG4gICAqIEZvcndhcmRzIGRvd25zdHJlYW0gb25seSBpZiBldmVyeSBwcmVkaWNhdGUgcmV0dXJucyBgdHJ1ZWAuXG4gICAqL1xuICBsZWZ0QWN0aXZhdGUodG9rZW46IFRva2VuKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLiNhbGxQYXNzKHRva2VuLmJpbmRpbmdzKSkgcmV0dXJuO1xuICAgIHRoaXMuI3Bhc3NlZFRva2Vucy5hZGQodG9rZW4pO1xuICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy4jYWN0aXZhdGVMaXN0ZW5lcnMpIHtcbiAgICAgIGxpc3RlbmVyKHRva2VuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2l0aGRyYXcgYSB0b2tlbi4gRG93bnN0cmVhbSBsaXN0ZW5lcnMgZmlyZSBvbmx5IGlmIHRoZSB0b2tlbiB3YXNcbiAgICogcHJldmlvdXNseSBmb3J3YXJkZWQg4oCUIHRva2VucyBibG9ja2VkIGJ5IHRoZSBmaWx0ZXIgbmV2ZXIgcmVhY2hlZFxuICAgKiBkb3duc3RyZWFtIGNvbnN1bWVycyBhbmQgbXVzdCBub3QgcHJvZHVjZSBwaGFudG9tIGRlYWN0aXZhdGlvbnMuXG4gICAqL1xuICBsZWZ0RGVhY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuI3Bhc3NlZFRva2Vucy5kZWxldGUodG9rZW4pKSByZXR1cm47XG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNkZWFjdGl2YXRlTGlzdGVuZXJzKSB7XG4gICAgICBsaXN0ZW5lcih0b2tlbik7XG4gICAgfVxuICB9XG5cbiAgI2FsbFBhc3MoYmluZGluZ3M6IEJpbmRpbmdzKTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBzcGVjIG9mIHRoaXMuI3NwZWNzKSB7XG4gICAgICBjb25zdCBwcmVkRm4gPSB0aGlzLiNyZWdpc3RyeS5nZXQoc3BlYy5wcmVkaWNhdGUpO1xuICAgICAgLy8gQ29uc3RydWN0b3ItdGltZSB2ZXJpZmljYXRpb24gcnVsZXMgdGhpcyBvdXQsIGJ1dCB0aGUgcnVudGltZSBndWFyZFxuICAgICAgLy8ga2VlcHMgdGhlIGZhaWx1cmUgbW9kZSBsb3VkIHJhdGhlciB0aGFuIHNpbGVudCBpZiBhIHByZWRpY2F0ZSBpc1xuICAgICAgLy8gc29tZWhvdyB1bnJlZ2lzdGVyZWQgYmV0d2VlbiBjb25zdHJ1Y3Rpb24gYW5kIGFjdGl2YXRpb24uXG4gICAgICBpZiAoIXByZWRGbikgdGhyb3cgbmV3IFVua25vd25QcmVkaWNhdGVFcnJvcihzcGVjLnByZWRpY2F0ZSk7XG4gICAgICBpZiAoIXByZWRGbihiaW5kaW5ncywgc3BlYy5hcmdzKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIl0sImZpbGUiOiIvc3JjL2NvbmRpdGlvbi50cyJ9 diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/75c3f427e31351da668473419c1935b85733a3ac b/IJGn1F-WxLUCbfU1lu8pU/ssr/75c3f427e31351da668473419c1935b85733a3ac deleted file mode 100644 index 9378c86..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/75c3f427e31351da668473419c1935b85733a3ac +++ /dev/null @@ -1,27 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "v", { enumerable: true, configurable: true, get(){ try { return v } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "defineRule", { enumerable: true, configurable: true, get(){ try { return defineRule } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/registry.ts", {"importedNames":["HandlerRegistry"]}); -function v(name) { - return { __type: "variable", name }; -}; -function defineRule(opts) { - opts.registry.verify([opts.handler]); - const conditions = opts.what.map((w) => { - const base2 = { - id: w.id ?? null, - attr: w.attr, - binding: w.binding ?? null - }; - return w.idBinding !== void 0 ? { ...base2, idBinding: w.idBinding } : base2; - }); - const base = { - name: opts.name, - salience: opts.salience ?? 0, - conditions, - handler: opts.handler - }; - return opts.handlerArgs !== void 0 ? { ...base, handlerArgs: opts.handlerArgs } : base; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7QUFNQTtBQVNPLFNBQVMsRUFBRSxNQUFrQztBQUNsRCxTQUFPLEVBQUUsUUFBUSxZQUFZLEtBQUs7QUFDcEM7QUF3Q08sU0FBUyxXQUFXLE1BQXNDO0FBRS9ELE9BQUssU0FBUyxPQUFPLENBQUMsS0FBSyxPQUFPLENBQUM7QUFFbkMsUUFBTSxhQUE4QixLQUFLLEtBQUssSUFBSSxDQUFDLE1BQU07QUFDdkQsVUFBTUEsUUFBTztBQUFBLE1BQ1gsSUFBSSxFQUFFLE1BQU07QUFBQSxNQUNaLE1BQU0sRUFBRTtBQUFBLE1BQ1IsU0FBUyxFQUFFLFdBQVc7QUFBQSxJQUN4QjtBQUNBLFdBQU8sRUFBRSxjQUFjLFNBQ25CLEVBQUUsR0FBR0EsT0FBTSxXQUFXLEVBQUUsVUFBVSxJQUNsQ0E7QUFBQSxFQUNOLENBQUM7QUFFRCxRQUFNLE9BQU87QUFBQSxJQUNYLE1BQU0sS0FBSztBQUFBLElBQ1gsVUFBVSxLQUFLLFlBQVk7QUFBQSxJQUMzQjtBQUFBLElBQ0EsU0FBUyxLQUFLO0FBQUEsRUFDaEI7QUFDQSxTQUFPLEtBQUssZ0JBQWdCLFNBQ3hCLEVBQUUsR0FBRyxNQUFNLGFBQWEsS0FBSyxZQUFZLElBQ3pDO0FBQ04iLCJuYW1lcyI6WyJiYXNlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImJ1aWxkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSdWxlIGJ1aWxkZXIg4oCUIGZsdWVudCBBUEkgZm9yIGRlZmluaW5nIFJldGUgcHJvZHVjdGlvbnMuXG4gKiBQZXIgU1BFQy5tZCDCp0pTT04gUnVsZSBTY2hlbWEuXG4gKi9cbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiLi9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgQXR0cktleSB9IGZyb20gXCIuL3dtLmpzXCI7XG5pbXBvcnQgeyBIYW5kbGVyUmVnaXN0cnkgfSBmcm9tIFwiLi9yZWdpc3RyeS5qc1wiO1xuXG4vKiogVmFyaWFibGUgYmluZGluZyBkZXNjcmlwdG9yIOKAlCB1c2VkIGluIHJ1bGUgY29uZGl0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFyaWFibGVEZXNjcmlwdG9yIHtcbiAgcmVhZG9ubHkgX190eXBlOiBcInZhcmlhYmxlXCI7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuLyoqIENyZWF0ZSBhIHZhcmlhYmxlIGJpbmRpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gdihuYW1lOiBzdHJpbmcpOiBWYXJpYWJsZURlc2NyaXB0b3Ige1xuICByZXR1cm4geyBfX3R5cGU6IFwidmFyaWFibGVcIiwgbmFtZSB9O1xufVxuXG4vKiogQSBjb25kaXRpb24gaW4gYSBydWxlJ3MgTEhTICh3aGF0IGJsb2NrKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZUNvbmRpdGlvbiB7XG4gIC8qKiBFbnRpdHkgaWQgdG8gbWF0Y2gsIG51bGwgPSB3aWxkY2FyZC4gKi9cbiAgcmVhZG9ubHkgaWQ6IEVudGl0eUlkIHwgbnVsbDtcbiAgLyoqIEF0dHJpYnV0ZSBrZXkgdG8gbWF0Y2guICovXG4gIHJlYWRvbmx5IGF0dHI6IEF0dHJLZXk7XG4gIC8qKiBWYXJpYWJsZSBuYW1lIHRvIGJpbmQgdGhlIFZBTFVFIHRvLiAqL1xuICByZWFkb25seSBiaW5kaW5nOiBWYXJpYWJsZURlc2NyaXB0b3IgfCBudWxsO1xuICAvKiogVmFyaWFibGUgbmFtZSB0byBiaW5kIHRoZSBFTlRJVFkgSUQgdG8uICovXG4gIHJlYWRvbmx5IGlkQmluZGluZz86IFZhcmlhYmxlRGVzY3JpcHRvcjtcbn1cblxuLyoqIEZ1bGx5LXJlc29sdmVkIHJ1bGUgZGVmaW5pdGlvbiBwcm9kdWNlZCBieSBkZWZpbmVSdWxlKCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVEZWZpbml0aW9uIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBzYWxpZW5jZTogbnVtYmVyO1xuICByZWFkb25seSBjb25kaXRpb25zOiByZWFkb25seSBSdWxlQ29uZGl0aW9uW107XG4gIHJlYWRvbmx5IGhhbmRsZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgaGFuZGxlckFyZ3M/OiByZWFkb25seSB1bmtub3duW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVmaW5lUnVsZU9wdHMge1xuICBuYW1lOiBzdHJpbmc7XG4gIHNhbGllbmNlPzogbnVtYmVyO1xuICB3aGF0OiBBcnJheTx7XG4gICAgaWQ6IEVudGl0eUlkIHwgbnVsbDtcbiAgICBhdHRyOiBBdHRyS2V5O1xuICAgIGJpbmRpbmc/OiBWYXJpYWJsZURlc2NyaXB0b3I7XG4gICAgaWRCaW5kaW5nPzogVmFyaWFibGVEZXNjcmlwdG9yO1xuICB9PjtcbiAgaGFuZGxlcjogc3RyaW5nO1xuICBoYW5kbGVyQXJncz86IHJlYWRvbmx5IHVua25vd25bXTtcbiAgcmVnaXN0cnk6IEhhbmRsZXJSZWdpc3RyeTtcbn1cblxuLyoqXG4gKiBEZWZpbmUgYSBydWxlLCB2YWxpZGF0aW5nIHRoYXQgYWxsIHJlZmVyZW5jZWQgaGFuZGxlcnMgYXJlIHJlZ2lzdGVyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVSdWxlKG9wdHM6IERlZmluZVJ1bGVPcHRzKTogUnVsZURlZmluaXRpb24ge1xuICAvLyBWYWxpZGF0ZSBoYW5kbGVyIHJlZ2lzdHJhdGlvblxuICBvcHRzLnJlZ2lzdHJ5LnZlcmlmeShbb3B0cy5oYW5kbGVyXSk7XG5cbiAgY29uc3QgY29uZGl0aW9uczogUnVsZUNvbmRpdGlvbltdID0gb3B0cy53aGF0Lm1hcCgodykgPT4ge1xuICAgIGNvbnN0IGJhc2UgPSB7XG4gICAgICBpZDogdy5pZCA/PyBudWxsLFxuICAgICAgYXR0cjogdy5hdHRyLFxuICAgICAgYmluZGluZzogdy5iaW5kaW5nID8/IG51bGwsXG4gICAgfTtcbiAgICByZXR1cm4gdy5pZEJpbmRpbmcgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7IC4uLmJhc2UsIGlkQmluZGluZzogdy5pZEJpbmRpbmcgfVxuICAgICAgOiBiYXNlO1xuICB9KTtcblxuICBjb25zdCBiYXNlID0ge1xuICAgIG5hbWU6IG9wdHMubmFtZSxcbiAgICBzYWxpZW5jZTogb3B0cy5zYWxpZW5jZSA/PyAwLFxuICAgIGNvbmRpdGlvbnMsXG4gICAgaGFuZGxlcjogb3B0cy5oYW5kbGVyLFxuICB9O1xuICByZXR1cm4gb3B0cy5oYW5kbGVyQXJncyAhPT0gdW5kZWZpbmVkXG4gICAgPyB7IC4uLmJhc2UsIGhhbmRsZXJBcmdzOiBvcHRzLmhhbmRsZXJBcmdzIH1cbiAgICA6IGJhc2U7XG59XG4iXSwiZmlsZSI6Ii9zcmMvYnVpbGRlci50cyJ9 diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/827e2340f78f871ce090d705d86460e4ffa4101d b/IJGn1F-WxLUCbfU1lu8pU/ssr/827e2340f78f871ce090d705d86460e4ffa4101d deleted file mode 100644 index e853c0f..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/827e2340f78f871ce090d705d86460e4ffa4101d +++ /dev/null @@ -1,222 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("vitest", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/aggregate.ts", {"importedNames":["AggregationNode"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/beta.ts", {"importedNames":["Token","BetaMemory"]}); -const mkId = (n) => n; -const mkFact = (id, attr, value) => ({ - id: mkId(id), - attr, - value -}); -const mkToken = (id, bindings) => new __vite_ssr_import_2__.Token(null, mkFact(id, "X", id), bindings); -function setup(kind, inputVar, resultVar) { - const agg = new __vite_ssr_import_1__.AggregationNode(kind, inputVar, resultVar); - const outMem = new __vite_ssr_import_2__.BetaMemory(); - agg.addDownstreamActivate((t) => outMem.leftActivate(t)); - agg.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - agg.init(); - return { agg, outMem }; -} -(0,__vite_ssr_import_0__.describe)("AggregationNode — count", () => { - (0,__vite_ssr_import_0__.it)("emits count=0 initially (no matches)", () => { - const { outMem } = setup("count", "hp", "total"); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(outMem.tokens[0]?.bindings["total"]).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("increments count on each match activate", () => { - const { agg, outMem } = setup("count", "hp", "total"); - agg.leftActivate(mkToken(1, { hp: 10 })); - agg.leftActivate(mkToken(2, { hp: 20 })); - agg.leftActivate(mkToken(3, { hp: 30 })); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - const latest = outMem.tokens[outMem.tokens.length - 1]; - (0,__vite_ssr_import_0__.expect)(latest?.bindings["total"]).toBe(3); - }); - (0,__vite_ssr_import_0__.it)("decrements count on match deactivate", () => { - const { agg, outMem } = setup("count", "hp", "total"); - const t1 = mkToken(1, { hp: 10 }); - const t2 = mkToken(2, { hp: 20 }); - agg.leftActivate(t1); - agg.leftActivate(t2); - agg.leftDeactivate(t1); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - const latest = outMem.tokens[outMem.tokens.length - 1]; - (0,__vite_ssr_import_0__.expect)(latest?.bindings["total"]).toBe(1); - }); -}); -(0,__vite_ssr_import_0__.describe)("AggregationNode — sum", () => { - (0,__vite_ssr_import_0__.it)("emits sum=0 initially", () => { - const { outMem } = setup("sum", "hp", "total"); - (0,__vite_ssr_import_0__.expect)(outMem.tokens[0]?.bindings["total"]).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("sums numeric values", () => { - const { agg, outMem } = setup("sum", "hp", "total"); - agg.leftActivate(mkToken(1, { hp: 10 })); - agg.leftActivate(mkToken(2, { hp: 25 })); - agg.leftActivate(mkToken(3, { hp: 5 })); - const latest = outMem.tokens[outMem.tokens.length - 1]; - (0,__vite_ssr_import_0__.expect)(latest?.bindings["total"]).toBe(40); - }); - (0,__vite_ssr_import_0__.it)("sum updates incrementally on retract (not full recompute from scratch)", () => { - const { agg, outMem } = setup("sum", "hp", "total"); - const t1 = mkToken(1, { hp: 10 }); - const t2 = mkToken(2, { hp: 25 }); - agg.leftActivate(t1); - agg.leftActivate(t2); - agg.leftDeactivate(t1); - const latest = outMem.tokens[outMem.tokens.length - 1]; - (0,__vite_ssr_import_0__.expect)(latest?.bindings["total"]).toBe(25); - }); - (0,__vite_ssr_import_0__.it)("sum returns to zero after retracting all contributions", () => { - const { agg, outMem } = setup("sum", "hp", "total"); - const t1 = mkToken(1, { hp: 7 }); - const t2 = mkToken(2, { hp: 3 }); - agg.leftActivate(t1); - agg.leftActivate(t2); - agg.leftDeactivate(t1); - agg.leftDeactivate(t2); - const latest = outMem.tokens[outMem.tokens.length - 1]; - (0,__vite_ssr_import_0__.expect)(latest?.bindings["total"]).toBe(0); - }); -}); -(0,__vite_ssr_import_0__.describe)("AggregationNode — min", () => { - (0,__vite_ssr_import_0__.it)("emits min=0 initially (empty)", () => { - const { outMem } = setup("min", "hp", "minHp"); - (0,__vite_ssr_import_0__.expect)(outMem.tokens[0]?.bindings["minHp"]).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("returns minimum value", () => { - const { agg, outMem } = setup("min", "hp", "minHp"); - agg.leftActivate(mkToken(1, { hp: 30 })); - agg.leftActivate(mkToken(2, { hp: 5 })); - agg.leftActivate(mkToken(3, { hp: 20 })); - const latest = outMem.tokens[outMem.tokens.length - 1]; - (0,__vite_ssr_import_0__.expect)(latest?.bindings["minHp"]).toBe(5); - }); - (0,__vite_ssr_import_0__.it)("recomputes min correctly after retracting the current minimum", () => { - const { agg, outMem } = setup("min", "hp", "minHp"); - const low = mkToken(1, { hp: 5 }); - const mid = mkToken(2, { hp: 20 }); - const hi = mkToken(3, { hp: 50 }); - agg.leftActivate(low); - agg.leftActivate(mid); - agg.leftActivate(hi); - agg.leftDeactivate(low); - const latest = outMem.tokens[outMem.tokens.length - 1]; - (0,__vite_ssr_import_0__.expect)(latest?.bindings["minHp"]).toBe(20); - }); -}); -(0,__vite_ssr_import_0__.describe)("AggregationNode — max", () => { - (0,__vite_ssr_import_0__.it)("returns maximum value", () => { - const { agg, outMem } = setup("max", "hp", "maxHp"); - agg.leftActivate(mkToken(1, { hp: 30 })); - agg.leftActivate(mkToken(2, { hp: 5 })); - agg.leftActivate(mkToken(3, { hp: 75 })); - const latest = outMem.tokens[outMem.tokens.length - 1]; - (0,__vite_ssr_import_0__.expect)(latest?.bindings["maxHp"]).toBe(75); - }); - (0,__vite_ssr_import_0__.it)("recomputes max correctly after retracting the current maximum", () => { - const { agg, outMem } = setup("max", "hp", "maxHp"); - const low = mkToken(1, { hp: 5 }); - const mid = mkToken(2, { hp: 20 }); - const hi = mkToken(3, { hp: 75 }); - agg.leftActivate(low); - agg.leftActivate(mid); - agg.leftActivate(hi); - agg.leftDeactivate(hi); - const latest = outMem.tokens[outMem.tokens.length - 1]; - (0,__vite_ssr_import_0__.expect)(latest?.bindings["maxHp"]).toBe(20); - }); -}); -(0,__vite_ssr_import_0__.describe)("AggregationNode — collect", () => { - (0,__vite_ssr_import_0__.it)("emits empty array initially", () => { - const { outMem } = setup("collect", "name", "names"); - (0,__vite_ssr_import_0__.expect)(outMem.tokens[0]?.bindings["names"]).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("collects all values into array", () => { - const { agg, outMem } = setup("collect", "name", "names"); - agg.leftActivate(mkToken(1, { name: "Alice" })); - agg.leftActivate(mkToken(2, { name: "Bob" })); - agg.leftActivate(mkToken(3, { name: "Carol" })); - const latest = outMem.tokens[outMem.tokens.length - 1]; - const names = latest?.bindings["names"]; - (0,__vite_ssr_import_0__.expect)(names).toContain("Alice"); - (0,__vite_ssr_import_0__.expect)(names).toContain("Bob"); - (0,__vite_ssr_import_0__.expect)(names).toContain("Carol"); - (0,__vite_ssr_import_0__.expect)(names).toHaveLength(3); - }); - (0,__vite_ssr_import_0__.it)("removes value on deactivate", () => { - const { agg, outMem } = setup("collect", "name", "names"); - const t1 = mkToken(1, { name: "Alice" }); - const t2 = mkToken(2, { name: "Bob" }); - agg.leftActivate(t1); - agg.leftActivate(t2); - agg.leftDeactivate(t1); - const latest = outMem.tokens[outMem.tokens.length - 1]; - const names = latest?.bindings["names"]; - (0,__vite_ssr_import_0__.expect)(names).toEqual(["Bob"]); - }); - (0,__vite_ssr_import_0__.it)("returns a fresh array each emit (no shared reference between tokens)", () => { - const { agg, outMem } = setup("collect", "name", "names"); - const t1 = mkToken(1, { name: "Alice" }); - agg.leftActivate(t1); - const first = outMem.tokens[outMem.tokens.length - 1]?.bindings["names"]; - agg.leftActivate(mkToken(2, { name: "Bob" })); - const second = outMem.tokens[outMem.tokens.length - 1]?.bindings["names"]; - (0,__vite_ssr_import_0__.expect)(first).not.toBe(second); - }); -}); -(0,__vite_ssr_import_0__.describe)("AggregationNode — emission protocol", () => { - (0,__vite_ssr_import_0__.it)("each update deactivates the previous aggregate token and activates a fresh one", () => { - const activated = []; - const deactivated = []; - const agg = new __vite_ssr_import_1__.AggregationNode("count", "hp", "total"); - agg.addDownstreamActivate((t) => activated.push(t)); - agg.addDownstreamDeactivate((t) => deactivated.push(t)); - agg.init(); - agg.leftActivate(mkToken(1, { hp: 1 })); - agg.leftActivate(mkToken(2, { hp: 2 })); - (0,__vite_ssr_import_0__.expect)(activated).toHaveLength(3); - (0,__vite_ssr_import_0__.expect)(deactivated).toHaveLength(2); - (0,__vite_ssr_import_0__.expect)(deactivated[0]).toBe(activated[0]); - (0,__vite_ssr_import_0__.expect)(deactivated[1]).toBe(activated[1]); - }); -}); -(0,__vite_ssr_import_0__.describe)("AggregationNode — defensive double-activate", () => { - (0,__vite_ssr_import_0__.it)("replaces (not double-counts) the contribution when the same token activates twice", () => { - const { agg, outMem } = setup("sum", "hp", "total"); - const t = mkToken(1, { hp: 10 }); - agg.leftActivate(t); - agg.leftActivate(t); - const latest = outMem.tokens[outMem.tokens.length - 1]; - (0,__vite_ssr_import_0__.expect)(latest?.bindings["total"]).toBe(10); - }); -}); -(0,__vite_ssr_import_0__.describe)("AggregationNode — scalability", () => { - (0,__vite_ssr_import_0__.it)("handles 1000 activations correctly (sum)", () => { - const { agg, outMem } = setup("sum", "x", "total"); - for (let i = 1; i <= 1e3; i++) { - agg.leftActivate(mkToken(i, { x: 1 })); - }; - const latest = outMem.tokens[outMem.tokens.length - 1]; - (0,__vite_ssr_import_0__.expect)(latest?.bindings["total"]).toBe(1e3); - }); - (0,__vite_ssr_import_0__.it)("handles 1000 activations correctly (count)", () => { - const { agg, outMem } = setup("count", "x", "n"); - for (let i = 1; i <= 1e3; i++) { - agg.leftActivate(mkToken(i, { x: i })); - }; - (0,__vite_ssr_import_0__.expect)(outMem.tokens[outMem.tokens.length - 1]?.bindings["n"]).toBe(1e3); - }); - (0,__vite_ssr_import_0__.it)("handles 1000 activations correctly (min/max)", () => { - const { agg: aggMin, outMem: minMem } = setup("min", "x", "m"); - const { agg: aggMax, outMem: maxMem } = setup("max", "x", "m"); - for (let i = 1; i <= 1e3; i++) { - aggMin.leftActivate(mkToken(i, { x: i })); - aggMax.leftActivate(mkToken(i, { x: i })); - }; - (0,__vite_ssr_import_0__.expect)(minMem.tokens[minMem.tokens.length - 1]?.bindings["m"]).toBe(1); - (0,__vite_ssr_import_0__.expect)(maxMem.tokens[maxMem.tokens.length - 1]?.bindings["m"]).toBe(1e3); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBSUEsTUFBTSxPQUFPLENBQUMsTUFBYztBQUM1QixNQUFNLFNBQVMsQ0FBQyxJQUFZLE1BQWMsV0FBb0I7QUFBQSxFQUM1RCxJQUFJLEtBQUssRUFBRTtBQUFBLEVBQ1g7QUFBQSxFQUNBO0FBQ0Y7QUFFQSxNQUFNLFVBQVUsQ0FBQyxJQUFZLGFBQzNCLElBQUksNEJBQU0sTUFBTSxPQUFPLElBQUksS0FBSyxFQUFFLEdBQUcsUUFBZ0Q7QUFNdkYsU0FBUyxNQUFNLE1BQW1ELFVBQWtCLFdBQW1CO0FBQ3JHLFFBQU0sTUFBTSxJQUFJLHNDQUFnQixNQUFNLFVBQVUsU0FBUztBQUN6RCxRQUFNLFNBQVMsSUFBSSxpQ0FBVztBQUM5QixNQUFJLHNCQUFzQixDQUFDLE1BQU0sT0FBTyxhQUFhLENBQUMsQ0FBQztBQUN2RCxNQUFJLHdCQUF3QixDQUFDLE1BQU0sT0FBTyxlQUFlLENBQUMsQ0FBQztBQUMzRCxNQUFJLEtBQUs7QUFDVCxTQUFPLEVBQUUsS0FBSyxPQUFPO0FBQ3ZCO0dBRUEsZ0NBQVMsMkJBQTJCLE1BQU07QUFDeEMsK0JBQUcsd0NBQXdDLE1BQU07QUFDL0MsVUFBTSxFQUFFLE9BQU8sSUFBSSxNQUFNLFNBQVMsTUFBTSxPQUFPO0FBRS9DLHFDQUFPLE9BQU8sTUFBTSxFQUFFLGFBQWEsQ0FBQztBQUNwQyxxQ0FBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLFNBQVMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQUEsRUFDcEQsQ0FBQztBQUVELCtCQUFHLDJDQUEyQyxNQUFNO0FBQ2xELFVBQU0sRUFBRSxLQUFLLE9BQU8sSUFBSSxNQUFNLFNBQVMsTUFBTSxPQUFPO0FBRXBELFFBQUksYUFBYSxRQUFRLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLFFBQUksYUFBYSxRQUFRLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLFFBQUksYUFBYSxRQUFRLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBSXZDLHFDQUFPLE9BQU8sTUFBTSxFQUFFLGFBQWEsQ0FBQztBQUNwQyxVQUFNLFNBQVMsT0FBTyxPQUFPLE9BQU8sT0FBTyxTQUFTLENBQUM7QUFDckQscUNBQU8sUUFBUSxTQUFTLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQztBQUFBLEVBQzFDLENBQUM7QUFFRCwrQkFBRyx3Q0FBd0MsTUFBTTtBQUMvQyxVQUFNLEVBQUUsS0FBSyxPQUFPLElBQUksTUFBTSxTQUFTLE1BQU0sT0FBTztBQUVwRCxVQUFNLEtBQUssUUFBUSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7QUFDaEMsVUFBTSxLQUFLLFFBQVEsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO0FBQ2hDLFFBQUksYUFBYSxFQUFFO0FBQ25CLFFBQUksYUFBYSxFQUFFO0FBQ25CLFFBQUksZUFBZSxFQUFFO0FBRXJCLHFDQUFPLE9BQU8sTUFBTSxFQUFFLGFBQWEsQ0FBQztBQUNwQyxVQUFNLFNBQVMsT0FBTyxPQUFPLE9BQU8sT0FBTyxTQUFTLENBQUM7QUFDckQscUNBQU8sUUFBUSxTQUFTLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQztBQUFBLEVBQzFDLENBQUM7QUFDSCxDQUFDO0dBRUQsZ0NBQVMseUJBQXlCLE1BQU07QUFDdEMsK0JBQUcseUJBQXlCLE1BQU07QUFDaEMsVUFBTSxFQUFFLE9BQU8sSUFBSSxNQUFNLE9BQU8sTUFBTSxPQUFPO0FBQzdDLHFDQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsU0FBUyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUM7QUFBQSxFQUNwRCxDQUFDO0FBRUQsK0JBQUcsdUJBQXVCLE1BQU07QUFDOUIsVUFBTSxFQUFFLEtBQUssT0FBTyxJQUFJLE1BQU0sT0FBTyxNQUFNLE9BQU87QUFFbEQsUUFBSSxhQUFhLFFBQVEsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkMsUUFBSSxhQUFhLFFBQVEsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkMsUUFBSSxhQUFhLFFBQVEsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFFdEMsVUFBTSxTQUFTLE9BQU8sT0FBTyxPQUFPLE9BQU8sU0FBUyxDQUFDO0FBQ3JELHFDQUFPLFFBQVEsU0FBUyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUU7QUFBQSxFQUMzQyxDQUFDO0FBRUQsK0JBQUcsMEVBQTBFLE1BQU07QUFDakYsVUFBTSxFQUFFLEtBQUssT0FBTyxJQUFJLE1BQU0sT0FBTyxNQUFNLE9BQU87QUFFbEQsVUFBTSxLQUFLLFFBQVEsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO0FBQ2hDLFVBQU0sS0FBSyxRQUFRLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztBQUNoQyxRQUFJLGFBQWEsRUFBRTtBQUNuQixRQUFJLGFBQWEsRUFBRTtBQUNuQixRQUFJLGVBQWUsRUFBRTtBQUVyQixVQUFNLFNBQVMsT0FBTyxPQUFPLE9BQU8sT0FBTyxTQUFTLENBQUM7QUFDckQscUNBQU8sUUFBUSxTQUFTLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUFBLEVBQzNDLENBQUM7QUFFRCwrQkFBRywwREFBMEQsTUFBTTtBQUNqRSxVQUFNLEVBQUUsS0FBSyxPQUFPLElBQUksTUFBTSxPQUFPLE1BQU0sT0FBTztBQUVsRCxVQUFNLEtBQUssUUFBUSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDL0IsVUFBTSxLQUFLLFFBQVEsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQy9CLFFBQUksYUFBYSxFQUFFO0FBQ25CLFFBQUksYUFBYSxFQUFFO0FBQ25CLFFBQUksZUFBZSxFQUFFO0FBQ3JCLFFBQUksZUFBZSxFQUFFO0FBRXJCLFVBQU0sU0FBUyxPQUFPLE9BQU8sT0FBTyxPQUFPLFNBQVMsQ0FBQztBQUNyRCxxQ0FBTyxRQUFRLFNBQVMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQUEsRUFDMUMsQ0FBQztBQUNILENBQUM7R0FFRCxnQ0FBUyx5QkFBeUIsTUFBTTtBQUN0QywrQkFBRyxpQ0FBaUMsTUFBTTtBQUN4QyxVQUFNLEVBQUUsT0FBTyxJQUFJLE1BQU0sT0FBTyxNQUFNLE9BQU87QUFDN0MscUNBQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxTQUFTLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQztBQUFBLEVBQ3BELENBQUM7QUFFRCwrQkFBRyx5QkFBeUIsTUFBTTtBQUNoQyxVQUFNLEVBQUUsS0FBSyxPQUFPLElBQUksTUFBTSxPQUFPLE1BQU0sT0FBTztBQUVsRCxRQUFJLGFBQWEsUUFBUSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN2QyxRQUFJLGFBQWEsUUFBUSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN0QyxRQUFJLGFBQWEsUUFBUSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUV2QyxVQUFNLFNBQVMsT0FBTyxPQUFPLE9BQU8sT0FBTyxTQUFTLENBQUM7QUFDckQscUNBQU8sUUFBUSxTQUFTLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQztBQUFBLEVBQzFDLENBQUM7QUFFRCwrQkFBRyxpRUFBaUUsTUFBTTtBQUN4RSxVQUFNLEVBQUUsS0FBSyxPQUFPLElBQUksTUFBTSxPQUFPLE1BQU0sT0FBTztBQUVsRCxVQUFNLE1BQU0sUUFBUSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEMsVUFBTSxNQUFNLFFBQVEsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO0FBQ2pDLFVBQU0sS0FBSyxRQUFRLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztBQUNoQyxRQUFJLGFBQWEsR0FBRztBQUNwQixRQUFJLGFBQWEsR0FBRztBQUNwQixRQUFJLGFBQWEsRUFBRTtBQUNuQixRQUFJLGVBQWUsR0FBRztBQUV0QixVQUFNLFNBQVMsT0FBTyxPQUFPLE9BQU8sT0FBTyxTQUFTLENBQUM7QUFDckQscUNBQU8sUUFBUSxTQUFTLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUFBLEVBQzNDLENBQUM7QUFDSCxDQUFDO0dBRUQsZ0NBQVMseUJBQXlCLE1BQU07QUFDdEMsK0JBQUcseUJBQXlCLE1BQU07QUFDaEMsVUFBTSxFQUFFLEtBQUssT0FBTyxJQUFJLE1BQU0sT0FBTyxNQUFNLE9BQU87QUFFbEQsUUFBSSxhQUFhLFFBQVEsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkMsUUFBSSxhQUFhLFFBQVEsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDdEMsUUFBSSxhQUFhLFFBQVEsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUM7QUFFdkMsVUFBTSxTQUFTLE9BQU8sT0FBTyxPQUFPLE9BQU8sU0FBUyxDQUFDO0FBQ3JELHFDQUFPLFFBQVEsU0FBUyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUU7QUFBQSxFQUMzQyxDQUFDO0FBRUQsK0JBQUcsaUVBQWlFLE1BQU07QUFDeEUsVUFBTSxFQUFFLEtBQUssT0FBTyxJQUFJLE1BQU0sT0FBTyxNQUFNLE9BQU87QUFFbEQsVUFBTSxNQUFNLFFBQVEsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hDLFVBQU0sTUFBTSxRQUFRLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztBQUNqQyxVQUFNLEtBQUssUUFBUSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7QUFDaEMsUUFBSSxhQUFhLEdBQUc7QUFDcEIsUUFBSSxhQUFhLEdBQUc7QUFDcEIsUUFBSSxhQUFhLEVBQUU7QUFDbkIsUUFBSSxlQUFlLEVBQUU7QUFFckIsVUFBTSxTQUFTLE9BQU8sT0FBTyxPQUFPLE9BQU8sU0FBUyxDQUFDO0FBQ3JELHFDQUFPLFFBQVEsU0FBUyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUU7QUFBQSxFQUMzQyxDQUFDO0FBQ0gsQ0FBQztHQUVELGdDQUFTLDZCQUE2QixNQUFNO0FBQzFDLCtCQUFHLCtCQUErQixNQUFNO0FBQ3RDLFVBQU0sRUFBRSxPQUFPLElBQUksTUFBTSxXQUFXLFFBQVEsT0FBTztBQUNuRCxxQ0FBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLFNBQVMsT0FBTyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFBQSxFQUN4RCxDQUFDO0FBRUQsK0JBQUcsa0NBQWtDLE1BQU07QUFDekMsVUFBTSxFQUFFLEtBQUssT0FBTyxJQUFJLE1BQU0sV0FBVyxRQUFRLE9BQU87QUFFeEQsUUFBSSxhQUFhLFFBQVEsR0FBRyxFQUFFLE1BQU0sUUFBUSxDQUFDLENBQUM7QUFDOUMsUUFBSSxhQUFhLFFBQVEsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDLENBQUM7QUFDNUMsUUFBSSxhQUFhLFFBQVEsR0FBRyxFQUFFLE1BQU0sUUFBUSxDQUFDLENBQUM7QUFFOUMsVUFBTSxTQUFTLE9BQU8sT0FBTyxPQUFPLE9BQU8sU0FBUyxDQUFDO0FBQ3JELFVBQU0sUUFBUSxRQUFRLFNBQVMsT0FBTztBQUN0QyxxQ0FBTyxLQUFLLEVBQUUsVUFBVSxPQUFPO0FBQy9CLHFDQUFPLEtBQUssRUFBRSxVQUFVLEtBQUs7QUFDN0IscUNBQU8sS0FBSyxFQUFFLFVBQVUsT0FBTztBQUMvQixxQ0FBTyxLQUFLLEVBQUUsYUFBYSxDQUFDO0FBQUEsRUFDOUIsQ0FBQztBQUVELCtCQUFHLCtCQUErQixNQUFNO0FBQ3RDLFVBQU0sRUFBRSxLQUFLLE9BQU8sSUFBSSxNQUFNLFdBQVcsUUFBUSxPQUFPO0FBRXhELFVBQU0sS0FBSyxRQUFRLEdBQUcsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUN2QyxVQUFNLEtBQUssUUFBUSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsUUFBSSxhQUFhLEVBQUU7QUFDbkIsUUFBSSxhQUFhLEVBQUU7QUFDbkIsUUFBSSxlQUFlLEVBQUU7QUFFckIsVUFBTSxTQUFTLE9BQU8sT0FBTyxPQUFPLE9BQU8sU0FBUyxDQUFDO0FBQ3JELFVBQU0sUUFBUSxRQUFRLFNBQVMsT0FBTztBQUN0QyxxQ0FBTyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQztBQUFBLEVBQy9CLENBQUM7QUFFRCwrQkFBRyx3RUFBd0UsTUFBTTtBQUMvRSxVQUFNLEVBQUUsS0FBSyxPQUFPLElBQUksTUFBTSxXQUFXLFFBQVEsT0FBTztBQUV4RCxVQUFNLEtBQUssUUFBUSxHQUFHLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDdkMsUUFBSSxhQUFhLEVBQUU7QUFDbkIsVUFBTSxRQUFRLE9BQU8sT0FBTyxPQUFPLE9BQU8sU0FBUyxDQUFDLEdBQUcsU0FBUyxPQUFPO0FBRXZFLFFBQUksYUFBYSxRQUFRLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQyxDQUFDO0FBQzVDLFVBQU0sU0FBUyxPQUFPLE9BQU8sT0FBTyxPQUFPLFNBQVMsQ0FBQyxHQUFHLFNBQVMsT0FBTztBQUd4RSxxQ0FBTyxLQUFLLEVBQUUsSUFBSSxLQUFLLE1BQU07QUFBQSxFQUMvQixDQUFDO0FBQ0gsQ0FBQztHQUVELGdDQUFTLHVDQUF1QyxNQUFNO0FBQ3BELCtCQUFHLGtGQUFrRixNQUFNO0FBQ3pGLFVBQU0sWUFBcUIsQ0FBQztBQUM1QixVQUFNLGNBQXVCLENBQUM7QUFDOUIsVUFBTSxNQUFNLElBQUksc0NBQWdCLFNBQVMsTUFBTSxPQUFPO0FBQ3RELFFBQUksc0JBQXNCLENBQUMsTUFBTSxVQUFVLEtBQUssQ0FBQyxDQUFDO0FBQ2xELFFBQUksd0JBQXdCLENBQUMsTUFBTSxZQUFZLEtBQUssQ0FBQyxDQUFDO0FBQ3RELFFBQUksS0FBSztBQUVULFFBQUksYUFBYSxRQUFRLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDLFFBQUksYUFBYSxRQUFRLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBR3RDLHFDQUFPLFNBQVMsRUFBRSxhQUFhLENBQUM7QUFDaEMscUNBQU8sV0FBVyxFQUFFLGFBQWEsQ0FBQztBQUVsQyxxQ0FBTyxZQUFZLENBQUMsQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLENBQUM7QUFDeEMscUNBQU8sWUFBWSxDQUFDLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxDQUFDO0FBQUEsRUFDMUMsQ0FBQztBQUNILENBQUM7R0FFRCxnQ0FBUywrQ0FBK0MsTUFBTTtBQUM1RCwrQkFBRyxxRkFBcUYsTUFBTTtBQUs1RixVQUFNLEVBQUUsS0FBSyxPQUFPLElBQUksTUFBTSxPQUFPLE1BQU0sT0FBTztBQUNsRCxVQUFNLElBQUksUUFBUSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7QUFDL0IsUUFBSSxhQUFhLENBQUM7QUFJbEIsUUFBSSxhQUFhLENBQUM7QUFFbEIsVUFBTSxTQUFTLE9BQU8sT0FBTyxPQUFPLE9BQU8sU0FBUyxDQUFDO0FBQ3JELHFDQUFPLFFBQVEsU0FBUyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUU7QUFBQSxFQUMzQyxDQUFDO0FBQ0gsQ0FBQztHQUVELGdDQUFTLGlDQUFpQyxNQUFNO0FBQzlDLCtCQUFHLDRDQUE0QyxNQUFNO0FBQ25ELFVBQU0sRUFBRSxLQUFLLE9BQU8sSUFBSSxNQUFNLE9BQU8sS0FBSyxPQUFPO0FBRWpELGFBQVMsSUFBSSxHQUFHLEtBQUssS0FBTSxLQUFLO0FBQzlCLFVBQUksYUFBYSxRQUFRLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQUEsSUFDdkM7QUFFQSxVQUFNLFNBQVMsT0FBTyxPQUFPLE9BQU8sT0FBTyxTQUFTLENBQUM7QUFDckQscUNBQU8sUUFBUSxTQUFTLE9BQU8sQ0FBQyxFQUFFLEtBQUssR0FBSTtBQUFBLEVBQzdDLENBQUM7QUFFRCwrQkFBRyw4Q0FBOEMsTUFBTTtBQUNyRCxVQUFNLEVBQUUsS0FBSyxPQUFPLElBQUksTUFBTSxTQUFTLEtBQUssR0FBRztBQUMvQyxhQUFTLElBQUksR0FBRyxLQUFLLEtBQU0sS0FBSztBQUM5QixVQUFJLGFBQWEsUUFBUSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUFBLElBQ3ZDO0FBQ0EscUNBQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxTQUFTLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBSTtBQUFBLEVBQzFFLENBQUM7QUFFRCwrQkFBRyxnREFBZ0QsTUFBTTtBQUN2RCxVQUFNLEVBQUUsS0FBSyxRQUFRLFFBQVEsT0FBTyxJQUFJLE1BQU0sT0FBTyxLQUFLLEdBQUc7QUFDN0QsVUFBTSxFQUFFLEtBQUssUUFBUSxRQUFRLE9BQU8sSUFBSSxNQUFNLE9BQU8sS0FBSyxHQUFHO0FBQzdELGFBQVMsSUFBSSxHQUFHLEtBQUssS0FBTSxLQUFLO0FBQzlCLGFBQU8sYUFBYSxRQUFRLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLGFBQU8sYUFBYSxRQUFRLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQUEsSUFDMUM7QUFDQSxxQ0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLFNBQVMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQ3JFLHFDQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sU0FBUyxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUk7QUFBQSxFQUMxRSxDQUFDO0FBQ0gsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiYWdncmVnYXRlLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbk5vZGUgfSBmcm9tIFwiLi9hZ2dyZWdhdGUuanNcIjtcbmltcG9ydCB7IFRva2VuLCBCZXRhTWVtb3J5IH0gZnJvbSBcIi4vYmV0YS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBdHRyS2V5LCBGYWN0VmFsdWUgfSBmcm9tIFwiLi93bS5qc1wiO1xuXG5jb25zdCBta0lkID0gKG46IG51bWJlcikgPT4gbiBhcyBFbnRpdHlJZDtcbmNvbnN0IG1rRmFjdCA9IChpZDogbnVtYmVyLCBhdHRyOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSA9PiAoe1xuICBpZDogbWtJZChpZCksXG4gIGF0dHI6IGF0dHIgYXMgQXR0cktleSxcbiAgdmFsdWU6IHZhbHVlIGFzIEZhY3RWYWx1ZSxcbn0pO1xuXG5jb25zdCBta1Rva2VuID0gKGlkOiBudW1iZXIsIGJpbmRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT5cbiAgbmV3IFRva2VuKG51bGwsIG1rRmFjdChpZCwgXCJYXCIsIGlkKSwgYmluZGluZ3MgYXMgUmVjb3JkPHN0cmluZywgRW50aXR5SWQgfCBGYWN0VmFsdWU+KTtcblxuLyoqXG4gKiBIZWxwZXI6IGNvbnN0cnVjdCBhIGZyZXNoIEFnZ3JlZ2F0aW9uTm9kZSB3aXJlZCB0byBhIEJldGFNZW1vcnlcbiAqIGFuZCBpbml0aWFsaXplZCwgc28gZWFjaCB0ZXN0IGNhbiBhc3NlcnQgb24gb3V0TWVtLnRva2Vucy5cbiAqL1xuZnVuY3Rpb24gc2V0dXAoa2luZDogXCJjb3VudFwiIHwgXCJzdW1cIiB8IFwibWluXCIgfCBcIm1heFwiIHwgXCJjb2xsZWN0XCIsIGlucHV0VmFyOiBzdHJpbmcsIHJlc3VsdFZhcjogc3RyaW5nKSB7XG4gIGNvbnN0IGFnZyA9IG5ldyBBZ2dyZWdhdGlvbk5vZGUoa2luZCwgaW5wdXRWYXIsIHJlc3VsdFZhcik7XG4gIGNvbnN0IG91dE1lbSA9IG5ldyBCZXRhTWVtb3J5KCk7XG4gIGFnZy5hZGREb3duc3RyZWFtQWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0QWN0aXZhdGUodCkpO1xuICBhZ2cuYWRkRG93bnN0cmVhbURlYWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0RGVhY3RpdmF0ZSh0KSk7XG4gIGFnZy5pbml0KCk7XG4gIHJldHVybiB7IGFnZywgb3V0TWVtIH07XG59XG5cbmRlc2NyaWJlKFwiQWdncmVnYXRpb25Ob2RlIOKAlCBjb3VudFwiLCAoKSA9PiB7XG4gIGl0KFwiZW1pdHMgY291bnQ9MCBpbml0aWFsbHkgKG5vIG1hdGNoZXMpXCIsICgpID0+IHtcbiAgICBjb25zdCB7IG91dE1lbSB9ID0gc2V0dXAoXCJjb3VudFwiLCBcImhwXCIsIFwidG90YWxcIik7XG4gICAgLy8gQWZ0ZXIgaW5pdCB3aXRoIG5vIG1hdGNoZXM6IGNvdW50PTAsIG9uZSB0b2tlbiB3aXRoIHRvdGFsPTBcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDEpO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zWzBdPy5iaW5kaW5nc1tcInRvdGFsXCJdKS50b0JlKDApO1xuICB9KTtcblxuICBpdChcImluY3JlbWVudHMgY291bnQgb24gZWFjaCBtYXRjaCBhY3RpdmF0ZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBhZ2csIG91dE1lbSB9ID0gc2V0dXAoXCJjb3VudFwiLCBcImhwXCIsIFwidG90YWxcIik7XG5cbiAgICBhZ2cubGVmdEFjdGl2YXRlKG1rVG9rZW4oMSwgeyBocDogMTAgfSkpO1xuICAgIGFnZy5sZWZ0QWN0aXZhdGUobWtUb2tlbigyLCB7IGhwOiAyMCB9KSk7XG4gICAgYWdnLmxlZnRBY3RpdmF0ZShta1Rva2VuKDMsIHsgaHA6IDMwIH0pKTtcblxuICAgIC8vIEVhY2ggYWN0aXZhdGlvbiBkZWFjdGl2YXRlcyBvbGQgYWdncmVnYXRlIHRva2VuIGFuZCBhY3RpdmF0ZXMgYSBuZXcgb25lLFxuICAgIC8vIHNvIG91dE1lbSBhbHdheXMgaG9sZHMgZXhhY3RseSBvbmUgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGFnZ3JlZ2F0ZS5cbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDEpO1xuICAgIGNvbnN0IGxhdGVzdCA9IG91dE1lbS50b2tlbnNbb3V0TWVtLnRva2Vucy5sZW5ndGggLSAxXTtcbiAgICBleHBlY3QobGF0ZXN0Py5iaW5kaW5nc1tcInRvdGFsXCJdKS50b0JlKDMpO1xuICB9KTtcblxuICBpdChcImRlY3JlbWVudHMgY291bnQgb24gbWF0Y2ggZGVhY3RpdmF0ZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBhZ2csIG91dE1lbSB9ID0gc2V0dXAoXCJjb3VudFwiLCBcImhwXCIsIFwidG90YWxcIik7XG5cbiAgICBjb25zdCB0MSA9IG1rVG9rZW4oMSwgeyBocDogMTAgfSk7XG4gICAgY29uc3QgdDIgPSBta1Rva2VuKDIsIHsgaHA6IDIwIH0pO1xuICAgIGFnZy5sZWZ0QWN0aXZhdGUodDEpO1xuICAgIGFnZy5sZWZ0QWN0aXZhdGUodDIpO1xuICAgIGFnZy5sZWZ0RGVhY3RpdmF0ZSh0MSk7XG5cbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDEpO1xuICAgIGNvbnN0IGxhdGVzdCA9IG91dE1lbS50b2tlbnNbb3V0TWVtLnRva2Vucy5sZW5ndGggLSAxXTtcbiAgICBleHBlY3QobGF0ZXN0Py5iaW5kaW5nc1tcInRvdGFsXCJdKS50b0JlKDEpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIkFnZ3JlZ2F0aW9uTm9kZSDigJQgc3VtXCIsICgpID0+IHtcbiAgaXQoXCJlbWl0cyBzdW09MCBpbml0aWFsbHlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgb3V0TWVtIH0gPSBzZXR1cChcInN1bVwiLCBcImhwXCIsIFwidG90YWxcIik7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnNbMF0/LmJpbmRpbmdzW1widG90YWxcIl0pLnRvQmUoMCk7XG4gIH0pO1xuXG4gIGl0KFwic3VtcyBudW1lcmljIHZhbHVlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBhZ2csIG91dE1lbSB9ID0gc2V0dXAoXCJzdW1cIiwgXCJocFwiLCBcInRvdGFsXCIpO1xuXG4gICAgYWdnLmxlZnRBY3RpdmF0ZShta1Rva2VuKDEsIHsgaHA6IDEwIH0pKTtcbiAgICBhZ2cubGVmdEFjdGl2YXRlKG1rVG9rZW4oMiwgeyBocDogMjUgfSkpO1xuICAgIGFnZy5sZWZ0QWN0aXZhdGUobWtUb2tlbigzLCB7IGhwOiA1IH0pKTtcblxuICAgIGNvbnN0IGxhdGVzdCA9IG91dE1lbS50b2tlbnNbb3V0TWVtLnRva2Vucy5sZW5ndGggLSAxXTtcbiAgICBleHBlY3QobGF0ZXN0Py5iaW5kaW5nc1tcInRvdGFsXCJdKS50b0JlKDQwKTtcbiAgfSk7XG5cbiAgaXQoXCJzdW0gdXBkYXRlcyBpbmNyZW1lbnRhbGx5IG9uIHJldHJhY3QgKG5vdCBmdWxsIHJlY29tcHV0ZSBmcm9tIHNjcmF0Y2gpXCIsICgpID0+IHtcbiAgICBjb25zdCB7IGFnZywgb3V0TWVtIH0gPSBzZXR1cChcInN1bVwiLCBcImhwXCIsIFwidG90YWxcIik7XG5cbiAgICBjb25zdCB0MSA9IG1rVG9rZW4oMSwgeyBocDogMTAgfSk7XG4gICAgY29uc3QgdDIgPSBta1Rva2VuKDIsIHsgaHA6IDI1IH0pO1xuICAgIGFnZy5sZWZ0QWN0aXZhdGUodDEpO1xuICAgIGFnZy5sZWZ0QWN0aXZhdGUodDIpO1xuICAgIGFnZy5sZWZ0RGVhY3RpdmF0ZSh0MSk7IC8vIHJlbW92ZSAxMCDihpIgdG90YWwgc2hvdWxkIGRyb3AgYnkgZXhhY3RseSAxMFxuXG4gICAgY29uc3QgbGF0ZXN0ID0gb3V0TWVtLnRva2Vuc1tvdXRNZW0udG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgIGV4cGVjdChsYXRlc3Q/LmJpbmRpbmdzW1widG90YWxcIl0pLnRvQmUoMjUpO1xuICB9KTtcblxuICBpdChcInN1bSByZXR1cm5zIHRvIHplcm8gYWZ0ZXIgcmV0cmFjdGluZyBhbGwgY29udHJpYnV0aW9uc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBhZ2csIG91dE1lbSB9ID0gc2V0dXAoXCJzdW1cIiwgXCJocFwiLCBcInRvdGFsXCIpO1xuXG4gICAgY29uc3QgdDEgPSBta1Rva2VuKDEsIHsgaHA6IDcgfSk7XG4gICAgY29uc3QgdDIgPSBta1Rva2VuKDIsIHsgaHA6IDMgfSk7XG4gICAgYWdnLmxlZnRBY3RpdmF0ZSh0MSk7XG4gICAgYWdnLmxlZnRBY3RpdmF0ZSh0Mik7XG4gICAgYWdnLmxlZnREZWFjdGl2YXRlKHQxKTtcbiAgICBhZ2cubGVmdERlYWN0aXZhdGUodDIpO1xuXG4gICAgY29uc3QgbGF0ZXN0ID0gb3V0TWVtLnRva2Vuc1tvdXRNZW0udG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgIGV4cGVjdChsYXRlc3Q/LmJpbmRpbmdzW1widG90YWxcIl0pLnRvQmUoMCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiQWdncmVnYXRpb25Ob2RlIOKAlCBtaW5cIiwgKCkgPT4ge1xuICBpdChcImVtaXRzIG1pbj0wIGluaXRpYWxseSAoZW1wdHkpXCIsICgpID0+IHtcbiAgICBjb25zdCB7IG91dE1lbSB9ID0gc2V0dXAoXCJtaW5cIiwgXCJocFwiLCBcIm1pbkhwXCIpO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zWzBdPy5iaW5kaW5nc1tcIm1pbkhwXCJdKS50b0JlKDApO1xuICB9KTtcblxuICBpdChcInJldHVybnMgbWluaW11bSB2YWx1ZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBhZ2csIG91dE1lbSB9ID0gc2V0dXAoXCJtaW5cIiwgXCJocFwiLCBcIm1pbkhwXCIpO1xuXG4gICAgYWdnLmxlZnRBY3RpdmF0ZShta1Rva2VuKDEsIHsgaHA6IDMwIH0pKTtcbiAgICBhZ2cubGVmdEFjdGl2YXRlKG1rVG9rZW4oMiwgeyBocDogNSB9KSk7XG4gICAgYWdnLmxlZnRBY3RpdmF0ZShta1Rva2VuKDMsIHsgaHA6IDIwIH0pKTtcblxuICAgIGNvbnN0IGxhdGVzdCA9IG91dE1lbS50b2tlbnNbb3V0TWVtLnRva2Vucy5sZW5ndGggLSAxXTtcbiAgICBleHBlY3QobGF0ZXN0Py5iaW5kaW5nc1tcIm1pbkhwXCJdKS50b0JlKDUpO1xuICB9KTtcblxuICBpdChcInJlY29tcHV0ZXMgbWluIGNvcnJlY3RseSBhZnRlciByZXRyYWN0aW5nIHRoZSBjdXJyZW50IG1pbmltdW1cIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgYWdnLCBvdXRNZW0gfSA9IHNldHVwKFwibWluXCIsIFwiaHBcIiwgXCJtaW5IcFwiKTtcblxuICAgIGNvbnN0IGxvdyA9IG1rVG9rZW4oMSwgeyBocDogNSB9KTtcbiAgICBjb25zdCBtaWQgPSBta1Rva2VuKDIsIHsgaHA6IDIwIH0pO1xuICAgIGNvbnN0IGhpID0gbWtUb2tlbigzLCB7IGhwOiA1MCB9KTtcbiAgICBhZ2cubGVmdEFjdGl2YXRlKGxvdyk7XG4gICAgYWdnLmxlZnRBY3RpdmF0ZShtaWQpO1xuICAgIGFnZy5sZWZ0QWN0aXZhdGUoaGkpO1xuICAgIGFnZy5sZWZ0RGVhY3RpdmF0ZShsb3cpO1xuXG4gICAgY29uc3QgbGF0ZXN0ID0gb3V0TWVtLnRva2Vuc1tvdXRNZW0udG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgIGV4cGVjdChsYXRlc3Q/LmJpbmRpbmdzW1wibWluSHBcIl0pLnRvQmUoMjApO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIkFnZ3JlZ2F0aW9uTm9kZSDigJQgbWF4XCIsICgpID0+IHtcbiAgaXQoXCJyZXR1cm5zIG1heGltdW0gdmFsdWVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgYWdnLCBvdXRNZW0gfSA9IHNldHVwKFwibWF4XCIsIFwiaHBcIiwgXCJtYXhIcFwiKTtcblxuICAgIGFnZy5sZWZ0QWN0aXZhdGUobWtUb2tlbigxLCB7IGhwOiAzMCB9KSk7XG4gICAgYWdnLmxlZnRBY3RpdmF0ZShta1Rva2VuKDIsIHsgaHA6IDUgfSkpO1xuICAgIGFnZy5sZWZ0QWN0aXZhdGUobWtUb2tlbigzLCB7IGhwOiA3NSB9KSk7XG5cbiAgICBjb25zdCBsYXRlc3QgPSBvdXRNZW0udG9rZW5zW291dE1lbS50b2tlbnMubGVuZ3RoIC0gMV07XG4gICAgZXhwZWN0KGxhdGVzdD8uYmluZGluZ3NbXCJtYXhIcFwiXSkudG9CZSg3NSk7XG4gIH0pO1xuXG4gIGl0KFwicmVjb21wdXRlcyBtYXggY29ycmVjdGx5IGFmdGVyIHJldHJhY3RpbmcgdGhlIGN1cnJlbnQgbWF4aW11bVwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBhZ2csIG91dE1lbSB9ID0gc2V0dXAoXCJtYXhcIiwgXCJocFwiLCBcIm1heEhwXCIpO1xuXG4gICAgY29uc3QgbG93ID0gbWtUb2tlbigxLCB7IGhwOiA1IH0pO1xuICAgIGNvbnN0IG1pZCA9IG1rVG9rZW4oMiwgeyBocDogMjAgfSk7XG4gICAgY29uc3QgaGkgPSBta1Rva2VuKDMsIHsgaHA6IDc1IH0pO1xuICAgIGFnZy5sZWZ0QWN0aXZhdGUobG93KTtcbiAgICBhZ2cubGVmdEFjdGl2YXRlKG1pZCk7XG4gICAgYWdnLmxlZnRBY3RpdmF0ZShoaSk7XG4gICAgYWdnLmxlZnREZWFjdGl2YXRlKGhpKTtcblxuICAgIGNvbnN0IGxhdGVzdCA9IG91dE1lbS50b2tlbnNbb3V0TWVtLnRva2Vucy5sZW5ndGggLSAxXTtcbiAgICBleHBlY3QobGF0ZXN0Py5iaW5kaW5nc1tcIm1heEhwXCJdKS50b0JlKDIwKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJBZ2dyZWdhdGlvbk5vZGUg4oCUIGNvbGxlY3RcIiwgKCkgPT4ge1xuICBpdChcImVtaXRzIGVtcHR5IGFycmF5IGluaXRpYWxseVwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBvdXRNZW0gfSA9IHNldHVwKFwiY29sbGVjdFwiLCBcIm5hbWVcIiwgXCJuYW1lc1wiKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2Vuc1swXT8uYmluZGluZ3NbXCJuYW1lc1wiXSkudG9FcXVhbChbXSk7XG4gIH0pO1xuXG4gIGl0KFwiY29sbGVjdHMgYWxsIHZhbHVlcyBpbnRvIGFycmF5XCIsICgpID0+IHtcbiAgICBjb25zdCB7IGFnZywgb3V0TWVtIH0gPSBzZXR1cChcImNvbGxlY3RcIiwgXCJuYW1lXCIsIFwibmFtZXNcIik7XG5cbiAgICBhZ2cubGVmdEFjdGl2YXRlKG1rVG9rZW4oMSwgeyBuYW1lOiBcIkFsaWNlXCIgfSkpO1xuICAgIGFnZy5sZWZ0QWN0aXZhdGUobWtUb2tlbigyLCB7IG5hbWU6IFwiQm9iXCIgfSkpO1xuICAgIGFnZy5sZWZ0QWN0aXZhdGUobWtUb2tlbigzLCB7IG5hbWU6IFwiQ2Fyb2xcIiB9KSk7XG5cbiAgICBjb25zdCBsYXRlc3QgPSBvdXRNZW0udG9rZW5zW291dE1lbS50b2tlbnMubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgbmFtZXMgPSBsYXRlc3Q/LmJpbmRpbmdzW1wibmFtZXNcIl0gYXMgc3RyaW5nW107XG4gICAgZXhwZWN0KG5hbWVzKS50b0NvbnRhaW4oXCJBbGljZVwiKTtcbiAgICBleHBlY3QobmFtZXMpLnRvQ29udGFpbihcIkJvYlwiKTtcbiAgICBleHBlY3QobmFtZXMpLnRvQ29udGFpbihcIkNhcm9sXCIpO1xuICAgIGV4cGVjdChuYW1lcykudG9IYXZlTGVuZ3RoKDMpO1xuICB9KTtcblxuICBpdChcInJlbW92ZXMgdmFsdWUgb24gZGVhY3RpdmF0ZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBhZ2csIG91dE1lbSB9ID0gc2V0dXAoXCJjb2xsZWN0XCIsIFwibmFtZVwiLCBcIm5hbWVzXCIpO1xuXG4gICAgY29uc3QgdDEgPSBta1Rva2VuKDEsIHsgbmFtZTogXCJBbGljZVwiIH0pO1xuICAgIGNvbnN0IHQyID0gbWtUb2tlbigyLCB7IG5hbWU6IFwiQm9iXCIgfSk7XG4gICAgYWdnLmxlZnRBY3RpdmF0ZSh0MSk7XG4gICAgYWdnLmxlZnRBY3RpdmF0ZSh0Mik7XG4gICAgYWdnLmxlZnREZWFjdGl2YXRlKHQxKTtcblxuICAgIGNvbnN0IGxhdGVzdCA9IG91dE1lbS50b2tlbnNbb3V0TWVtLnRva2Vucy5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBuYW1lcyA9IGxhdGVzdD8uYmluZGluZ3NbXCJuYW1lc1wiXSBhcyBzdHJpbmdbXTtcbiAgICBleHBlY3QobmFtZXMpLnRvRXF1YWwoW1wiQm9iXCJdKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIGEgZnJlc2ggYXJyYXkgZWFjaCBlbWl0IChubyBzaGFyZWQgcmVmZXJlbmNlIGJldHdlZW4gdG9rZW5zKVwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBhZ2csIG91dE1lbSB9ID0gc2V0dXAoXCJjb2xsZWN0XCIsIFwibmFtZVwiLCBcIm5hbWVzXCIpO1xuXG4gICAgY29uc3QgdDEgPSBta1Rva2VuKDEsIHsgbmFtZTogXCJBbGljZVwiIH0pO1xuICAgIGFnZy5sZWZ0QWN0aXZhdGUodDEpO1xuICAgIGNvbnN0IGZpcnN0ID0gb3V0TWVtLnRva2Vuc1tvdXRNZW0udG9rZW5zLmxlbmd0aCAtIDFdPy5iaW5kaW5nc1tcIm5hbWVzXCJdIGFzIHN0cmluZ1tdO1xuXG4gICAgYWdnLmxlZnRBY3RpdmF0ZShta1Rva2VuKDIsIHsgbmFtZTogXCJCb2JcIiB9KSk7XG4gICAgY29uc3Qgc2Vjb25kID0gb3V0TWVtLnRva2Vuc1tvdXRNZW0udG9rZW5zLmxlbmd0aCAtIDFdPy5iaW5kaW5nc1tcIm5hbWVzXCJdIGFzIHN0cmluZ1tdO1xuXG4gICAgLy8gRGlzdGluY3QgYXJyYXlzLCBzbyBtdXRhdGluZyBgZmlyc3RgIG11c3Qgbm90IGFmZmVjdCBgc2Vjb25kYC5cbiAgICBleHBlY3QoZmlyc3QpLm5vdC50b0JlKHNlY29uZCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiQWdncmVnYXRpb25Ob2RlIOKAlCBlbWlzc2lvbiBwcm90b2NvbFwiLCAoKSA9PiB7XG4gIGl0KFwiZWFjaCB1cGRhdGUgZGVhY3RpdmF0ZXMgdGhlIHByZXZpb3VzIGFnZ3JlZ2F0ZSB0b2tlbiBhbmQgYWN0aXZhdGVzIGEgZnJlc2ggb25lXCIsICgpID0+IHtcbiAgICBjb25zdCBhY3RpdmF0ZWQ6IFRva2VuW10gPSBbXTtcbiAgICBjb25zdCBkZWFjdGl2YXRlZDogVG9rZW5bXSA9IFtdO1xuICAgIGNvbnN0IGFnZyA9IG5ldyBBZ2dyZWdhdGlvbk5vZGUoXCJjb3VudFwiLCBcImhwXCIsIFwidG90YWxcIik7XG4gICAgYWdnLmFkZERvd25zdHJlYW1BY3RpdmF0ZSgodCkgPT4gYWN0aXZhdGVkLnB1c2godCkpO1xuICAgIGFnZy5hZGREb3duc3RyZWFtRGVhY3RpdmF0ZSgodCkgPT4gZGVhY3RpdmF0ZWQucHVzaCh0KSk7XG4gICAgYWdnLmluaXQoKTsgLy8gZW1pdHMgaW5pdGlhbCB0b2tlbiAoY291bnQ9MClcblxuICAgIGFnZy5sZWZ0QWN0aXZhdGUobWtUb2tlbigxLCB7IGhwOiAxIH0pKTsgLy8gY291bnQg4oaSIDFcbiAgICBhZ2cubGVmdEFjdGl2YXRlKG1rVG9rZW4oMiwgeyBocDogMiB9KSk7IC8vIGNvdW50IOKGkiAyXG5cbiAgICAvLyBpbml0ICsgMiBhY3RpdmF0aW9ucyA9IDMgYWN0aXZhdGlvbnM7IDIgZGVhY3RpdmF0aW9ucyAob2YgcHJpb3IgYWdncmVnYXRlIHRva2VucykuXG4gICAgZXhwZWN0KGFjdGl2YXRlZCkudG9IYXZlTGVuZ3RoKDMpO1xuICAgIGV4cGVjdChkZWFjdGl2YXRlZCkudG9IYXZlTGVuZ3RoKDIpO1xuICAgIC8vIERlYWN0aXZhdGVkIHRva2VucyBtdXN0IGJlIHRoZSBmaXJzdCB0d28gYWN0aXZhdGVkIG9uZXMgKGluIG9yZGVyKS5cbiAgICBleHBlY3QoZGVhY3RpdmF0ZWRbMF0pLnRvQmUoYWN0aXZhdGVkWzBdKTtcbiAgICBleHBlY3QoZGVhY3RpdmF0ZWRbMV0pLnRvQmUoYWN0aXZhdGVkWzFdKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJBZ2dyZWdhdGlvbk5vZGUg4oCUIGRlZmVuc2l2ZSBkb3VibGUtYWN0aXZhdGVcIiwgKCkgPT4ge1xuICBpdChcInJlcGxhY2VzIChub3QgZG91YmxlLWNvdW50cykgdGhlIGNvbnRyaWJ1dGlvbiB3aGVuIHRoZSBzYW1lIHRva2VuIGFjdGl2YXRlcyB0d2ljZVwiLCAoKSA9PiB7XG4gICAgLy8gTm90IGEgbm9ybWFsIHVwc3RyZWFtIHBhdHRlcm4sIGJ1dCBkZWZlbmRzIGFnYWluc3QgYSBzdWJ0bGUgY2xhc3Mgb2ZcbiAgICAvLyByZXdpcmluZyBidWdzIHdoZXJlIGEgdG9rZW4gaXMgcmUtYWN0aXZhdGVkIHdpdGggYSBjaGFuZ2VkIGJpbmRpbmdcbiAgICAvLyB3aXRob3V0IGFuIGludGVydmVuaW5nIGRlYWN0aXZhdGUuIFRoZSBzdW0gbXVzdCByZWZsZWN0IHRoZSBuZXcgdmFsdWUsXG4gICAgLy8gbm90IG9sZCArIG5ldy5cbiAgICBjb25zdCB7IGFnZywgb3V0TWVtIH0gPSBzZXR1cChcInN1bVwiLCBcImhwXCIsIFwidG90YWxcIik7XG4gICAgY29uc3QgdCA9IG1rVG9rZW4oMSwgeyBocDogMTAgfSk7XG4gICAgYWdnLmxlZnRBY3RpdmF0ZSh0KTtcbiAgICAvLyBNdXRhdGluZyB0aGUgdG9rZW4ncyBiaW5kaW5ncyBpc24ndCBzdXBwb3J0ZWQgdXBzdHJlYW0sIGJ1dCB3ZSBtaW1pY1xuICAgIC8vIHRoZSBlZmZlY3QgYnkgY29uc3RydWN0aW5nIGEgc2Vjb25kIGFjdGl2YXRpb24gZm9yIHRoZSBzYW1lIHJlZmVyZW5jZS5cbiAgICAvLyBUaGUgbm9kZSBtdXN0IHRyZWF0IHRoZSBzZWNvbmQgYWN0aXZhdGUgYXMgYSByZXBsYWNlbWVudC5cbiAgICBhZ2cubGVmdEFjdGl2YXRlKHQpO1xuXG4gICAgY29uc3QgbGF0ZXN0ID0gb3V0TWVtLnRva2Vuc1tvdXRNZW0udG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgIGV4cGVjdChsYXRlc3Q/LmJpbmRpbmdzW1widG90YWxcIl0pLnRvQmUoMTApO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIkFnZ3JlZ2F0aW9uTm9kZSDigJQgc2NhbGFiaWxpdHlcIiwgKCkgPT4ge1xuICBpdChcImhhbmRsZXMgMTAwMCBhY3RpdmF0aW9ucyBjb3JyZWN0bHkgKHN1bSlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgYWdnLCBvdXRNZW0gfSA9IHNldHVwKFwic3VtXCIsIFwieFwiLCBcInRvdGFsXCIpO1xuXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTAwMDsgaSsrKSB7XG4gICAgICBhZ2cubGVmdEFjdGl2YXRlKG1rVG9rZW4oaSwgeyB4OiAxIH0pKTsgLy8gZWFjaCBjb250cmlidXRlcyAxXG4gICAgfVxuXG4gICAgY29uc3QgbGF0ZXN0ID0gb3V0TWVtLnRva2Vuc1tvdXRNZW0udG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgIGV4cGVjdChsYXRlc3Q/LmJpbmRpbmdzW1widG90YWxcIl0pLnRvQmUoMTAwMCk7XG4gIH0pO1xuXG4gIGl0KFwiaGFuZGxlcyAxMDAwIGFjdGl2YXRpb25zIGNvcnJlY3RseSAoY291bnQpXCIsICgpID0+IHtcbiAgICBjb25zdCB7IGFnZywgb3V0TWVtIH0gPSBzZXR1cChcImNvdW50XCIsIFwieFwiLCBcIm5cIik7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTAwMDsgaSsrKSB7XG4gICAgICBhZ2cubGVmdEFjdGl2YXRlKG1rVG9rZW4oaSwgeyB4OiBpIH0pKTtcbiAgICB9XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnNbb3V0TWVtLnRva2Vucy5sZW5ndGggLSAxXT8uYmluZGluZ3NbXCJuXCJdKS50b0JlKDEwMDApO1xuICB9KTtcblxuICBpdChcImhhbmRsZXMgMTAwMCBhY3RpdmF0aW9ucyBjb3JyZWN0bHkgKG1pbi9tYXgpXCIsICgpID0+IHtcbiAgICBjb25zdCB7IGFnZzogYWdnTWluLCBvdXRNZW06IG1pbk1lbSB9ID0gc2V0dXAoXCJtaW5cIiwgXCJ4XCIsIFwibVwiKTtcbiAgICBjb25zdCB7IGFnZzogYWdnTWF4LCBvdXRNZW06IG1heE1lbSB9ID0gc2V0dXAoXCJtYXhcIiwgXCJ4XCIsIFwibVwiKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAxMDAwOyBpKyspIHtcbiAgICAgIGFnZ01pbi5sZWZ0QWN0aXZhdGUobWtUb2tlbihpLCB7IHg6IGkgfSkpO1xuICAgICAgYWdnTWF4LmxlZnRBY3RpdmF0ZShta1Rva2VuKGksIHsgeDogaSB9KSk7XG4gICAgfVxuICAgIGV4cGVjdChtaW5NZW0udG9rZW5zW21pbk1lbS50b2tlbnMubGVuZ3RoIC0gMV0/LmJpbmRpbmdzW1wibVwiXSkudG9CZSgxKTtcbiAgICBleHBlY3QobWF4TWVtLnRva2Vuc1ttYXhNZW0udG9rZW5zLmxlbmd0aCAtIDFdPy5iaW5kaW5nc1tcIm1cIl0pLnRvQmUoMTAwMCk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvcmV0ZS9zcmMvYWdncmVnYXRlLnRlc3QudHMifQ== diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/886e79af9836e3b49335d4ce04024fcf74e6fa37 b/IJGn1F-WxLUCbfU1lu8pU/ssr/886e79af9836e3b49335d4ce04024fcf74e6fa37 deleted file mode 100644 index 3bbd8be..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/886e79af9836e3b49335d4ce04024fcf74e6fa37 +++ /dev/null @@ -1,85 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "SnapshotManager", { enumerable: true, configurable: true, get(){ try { return SnapshotManager } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("immer", {"importedNames":["produce","enableMapSet"]}); -(0,__vite_ssr_import_0__.enableMapSet)(); -class SnapshotManager { - #snapshots = []; - #tickCount = 0; - #interval; - constructor(interval = 30) { - if (interval <= 0 || !Number.isInteger(interval)) { - throw new Error(`SnapshotManager interval must be positive integer, got ${interval}`); - }; - this.#interval = interval; - } - get snapshotCount() { - return this.#snapshots.length; - } - get tickCount() { - return this.#tickCount; - } - get interval() { - return this.#interval; - } - /** - * Call after each fireRules() completes (tick boundary). - * Takes a snapshot when the tick counter hits an interval multiple. - */ - onTick(facts, currentSeq) { - this.#tickCount++; - if (this.#tickCount % this.#interval === 0) { - this.#captureSnapshot(facts, currentSeq); - } - } - /** - * Manually take a snapshot without incrementing the tick counter. - * Useful for session-start baselines or explicit save points. - */ - takeSnapshot(facts, currentSeq) { - this.#captureSnapshot(facts, currentSeq); - } - #captureSnapshot(facts, currentSeq) { - const frozen = (0,__vite_ssr_import_0__.produce)(/* @__PURE__ */ new Map(), (draft) => { - for (const f of facts) { - let attrMap = draft.get(f.id); - if (!attrMap) { - attrMap = /* @__PURE__ */ new Map(); - draft.set(f.id, attrMap); - }; - attrMap.set(f.attr, f.value); - } - }); - this.#snapshots.push({ - seq: currentSeq, - tick: this.#tickCount, - facts: frozen - }); - } - /** - * Return the most recent snapshot with seq <= atOrBeforeSeq, or null - * if none exists. Snapshots are appended in seq order, so we scan forward - * and track the last qualifying entry. - */ - getNearestSnapshot(atOrBeforeSeq) { - let best = null; - for (const snap of this.#snapshots) { - if (snap.seq <= atOrBeforeSeq) { - best = snap; - } else { - break; - } - }; - return best; - } - /** Return all snapshots in order. Primarily for tests / diagnostics. */ - getAllSnapshots() { - return this.#snapshots; - } - /** Discard all snapshots and reset the tick counter. */ - clear() { - this.#snapshots.length = 0; - this.#tickCount = 0; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQWFBO0dBS0Esb0NBQWE7QUFxQk4sTUFBTSxnQkFBZ0I7QUFBQSxFQUNsQixhQUF5QixDQUFDO0FBQUEsRUFDbkMsYUFBYTtBQUFBLEVBQ0o7QUFBQSxFQUVULFlBQVksV0FBVyxJQUFJO0FBQ3pCLFFBQUksWUFBWSxLQUFLLENBQUMsT0FBTyxVQUFVLFFBQVEsR0FBRztBQUNoRCxZQUFNLElBQUksTUFBTSwwREFBMEQsUUFBUSxFQUFFO0FBQUEsSUFDdEY7QUFDQSxTQUFLLFlBQVk7QUFBQSxFQUNuQjtBQUFBLEVBRUEsSUFBSSxnQkFBd0I7QUFDMUIsV0FBTyxLQUFLLFdBQVc7QUFBQSxFQUN6QjtBQUFBLEVBRUEsSUFBSSxZQUFvQjtBQUN0QixXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUEsRUFFQSxJQUFJLFdBQW1CO0FBQ3JCLFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTUEsT0FBTyxPQUE4QixZQUEwQjtBQUM3RCxTQUFLO0FBQ0wsUUFBSSxLQUFLLGFBQWEsS0FBSyxjQUFjLEdBQUc7QUFDMUMsV0FBSyxpQkFBaUIsT0FBTyxVQUFVO0FBQUEsSUFDekM7QUFBQSxFQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1BLGFBQWEsT0FBOEIsWUFBMEI7QUFDbkUsU0FBSyxpQkFBaUIsT0FBTyxVQUFVO0FBQUEsRUFDekM7QUFBQSxFQUVBLGlCQUFpQixPQUE4QixZQUEwQjtBQU92RSxVQUFNLFlBQVMsK0JBQVEsb0JBQUksSUFBSSxHQUFtQixDQUFDLFVBQVU7QUFDM0QsaUJBQVcsS0FBSyxPQUFPO0FBQ3JCLFlBQUksVUFBVSxNQUFNLElBQUksRUFBRSxFQUFFO0FBQzVCLFlBQUksQ0FBQyxTQUFTO0FBQ1osb0JBQVUsb0JBQUksSUFBSTtBQUNsQixnQkFBTSxJQUFJLEVBQUUsSUFBSSxPQUFPO0FBQUEsUUFDekI7QUFDQSxnQkFBUSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUs7QUFBQSxNQUM3QjtBQUFBLElBQ0YsQ0FBQztBQUNELFNBQUssV0FBVyxLQUFLO0FBQUEsTUFDbkIsS0FBSztBQUFBLE1BQ0wsTUFBTSxLQUFLO0FBQUEsTUFDWCxPQUFPO0FBQUEsSUFDVCxDQUFDO0FBQUEsRUFDSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLG1CQUFtQixlQUF3QztBQUN6RCxRQUFJLE9BQXdCO0FBQzVCLGVBQVcsUUFBUSxLQUFLLFlBQVk7QUFDbEMsVUFBSSxLQUFLLE9BQU8sZUFBZTtBQUM3QixlQUFPO0FBQUEsTUFDVCxPQUFPO0FBRUw7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQSxFQUdBLGtCQUF1QztBQUNyQyxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUE7QUFBQSxFQUdBLFFBQWM7QUFDWixTQUFLLFdBQVcsU0FBUztBQUN6QixTQUFLLGFBQWE7QUFBQSxFQUNwQjtBQUNGIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJzbmFwc2hvdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNuYXBzaG90TWFuYWdlciDigJQgSW1tZXItYmFja2VkIHdvcmtpbmctbWVtb3J5IHNuYXBzaG90cyBhdCB0aWNrIGJvdW5kYXJpZXMuXG4gKlxuICogQSBcInRpY2tcIiBpcyBvbmUgY2FsbCB0byBmaXJlUnVsZXMoKS4gRXZlcnkgTiB0aWNrcywgYSBzdHJ1Y3R1cmFsbHktc2hhcmVkXG4gKiBJbW1lciBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBmYWN0IHN0YXRlIGlzIGNhcHR1cmVkIGZvciB1c2UgYnkgdGltZS10cmF2ZWxcbiAqIC8gcmVwbGF5IC8gcm9sbGJhY2sgc3Vic3lzdGVtcy5cbiAqXG4gKiBTbmFwc2hvdHMgYXJlIHRha2VuIG9ubHkgYXQgdGljayBib3VuZGFyaWVzIChhZnRlciBmaXJlUnVsZXMoKSByZXNvbHZlcyksXG4gKiBuZXZlciBtaWQtdGljay5cbiAqXG4gKiBQZXIgUDMuMiDigJQgdXNlcyBJbW1lcidzIHByb2R1Y2UoKSArIGVuYWJsZU1hcFNldCgpIGZvciBzdHJ1Y3R1cmFsIHNoYXJpbmdcbiAqIG9uIE1hcDxFbnRpdHlJZCwgTWFwPEF0dHJLZXksIEZhY3RWYWx1ZT4+LlxuICovXG5pbXBvcnQgeyBwcm9kdWNlLCBlbmFibGVNYXBTZXQgfSBmcm9tIFwiaW1tZXJcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiLi9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgQXR0cktleSwgRmFjdFZhbHVlIH0gZnJvbSBcIi4vd20uanNcIjtcblxuLy8gRW5hYmxlIE1hcC9TZXQgc3VwcG9ydCBpbiBJbW1lciDigJQgbXVzdCBydW4gYmVmb3JlIGFueSBwcm9kdWNlKCkgb24gTWFwcy5cbmVuYWJsZU1hcFNldCgpO1xuXG5leHBvcnQgdHlwZSBJbW11dGFibGVGYWN0cyA9IFJlYWRvbmx5TWFwPEVudGl0eUlkLCBSZWFkb25seU1hcDxBdHRyS2V5LCBGYWN0VmFsdWU+PjtcbmV4cG9ydCB0eXBlIE11dGFibGVGYWN0cyA9IE1hcDxFbnRpdHlJZCwgTWFwPEF0dHJLZXksIEZhY3RWYWx1ZT4+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNuYXBzaG90IHtcbiAgcmVhZG9ubHkgc2VxOiBudW1iZXI7XG4gIHJlYWRvbmx5IHRpY2s6IG51bWJlcjtcbiAgcmVhZG9ubHkgZmFjdHM6IEltbXV0YWJsZUZhY3RzO1xufVxuXG4vKipcbiAqIElucHV0IGZhY3QgcmVjb3JkIOKAlCBtaXJyb3JzIFdvcmtpbmdNZW1vcnkuYWxsRmFjdHMoKSBvdXRwdXQgc28gY2FsbGVyc1xuICogbmV2ZXIgbmVlZCB0byBleHBvc2UgaW50ZXJuYWwgTWFwIHN0YXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhY3RSZWNvcmQge1xuICByZWFkb25seSBpZDogRW50aXR5SWQ7XG4gIHJlYWRvbmx5IGF0dHI6IEF0dHJLZXk7XG4gIHJlYWRvbmx5IHZhbHVlOiBGYWN0VmFsdWU7XG59XG5cbmV4cG9ydCBjbGFzcyBTbmFwc2hvdE1hbmFnZXIge1xuICByZWFkb25seSAjc25hcHNob3RzOiBTbmFwc2hvdFtdID0gW107XG4gICN0aWNrQ291bnQgPSAwO1xuICByZWFkb25seSAjaW50ZXJ2YWw6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihpbnRlcnZhbCA9IDMwKSB7XG4gICAgaWYgKGludGVydmFsIDw9IDAgfHwgIU51bWJlci5pc0ludGVnZXIoaW50ZXJ2YWwpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNuYXBzaG90TWFuYWdlciBpbnRlcnZhbCBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXIsIGdvdCAke2ludGVydmFsfWApO1xuICAgIH1cbiAgICB0aGlzLiNpbnRlcnZhbCA9IGludGVydmFsO1xuICB9XG5cbiAgZ2V0IHNuYXBzaG90Q291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jc25hcHNob3RzLmxlbmd0aDtcbiAgfVxuXG4gIGdldCB0aWNrQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jdGlja0NvdW50O1xuICB9XG5cbiAgZ2V0IGludGVydmFsKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI2ludGVydmFsO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGwgYWZ0ZXIgZWFjaCBmaXJlUnVsZXMoKSBjb21wbGV0ZXMgKHRpY2sgYm91bmRhcnkpLlxuICAgKiBUYWtlcyBhIHNuYXBzaG90IHdoZW4gdGhlIHRpY2sgY291bnRlciBoaXRzIGFuIGludGVydmFsIG11bHRpcGxlLlxuICAgKi9cbiAgb25UaWNrKGZhY3RzOiByZWFkb25seSBGYWN0UmVjb3JkW10sIGN1cnJlbnRTZXE6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuI3RpY2tDb3VudCsrO1xuICAgIGlmICh0aGlzLiN0aWNrQ291bnQgJSB0aGlzLiNpbnRlcnZhbCA9PT0gMCkge1xuICAgICAgdGhpcy4jY2FwdHVyZVNuYXBzaG90KGZhY3RzLCBjdXJyZW50U2VxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWFudWFsbHkgdGFrZSBhIHNuYXBzaG90IHdpdGhvdXQgaW5jcmVtZW50aW5nIHRoZSB0aWNrIGNvdW50ZXIuXG4gICAqIFVzZWZ1bCBmb3Igc2Vzc2lvbi1zdGFydCBiYXNlbGluZXMgb3IgZXhwbGljaXQgc2F2ZSBwb2ludHMuXG4gICAqL1xuICB0YWtlU25hcHNob3QoZmFjdHM6IHJlYWRvbmx5IEZhY3RSZWNvcmRbXSwgY3VycmVudFNlcTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy4jY2FwdHVyZVNuYXBzaG90KGZhY3RzLCBjdXJyZW50U2VxKTtcbiAgfVxuXG4gICNjYXB0dXJlU25hcHNob3QoZmFjdHM6IHJlYWRvbmx5IEZhY3RSZWNvcmRbXSwgY3VycmVudFNlcTogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gQnVpbGQgdGhlIGZhY3QgbWFwIElOU0lERSBwcm9kdWNlKCkgc28gSW1tZXIgdHJhY2tzIGV2ZXJ5IG5lc3RlZCBNYXBcbiAgICAvLyBhbmQgZGVlcC1mcmVlemVzIHRoZSBlbnRpcmUgc3RydWN0dXJlLiBhbGxGYWN0cygpIGlucHV0IGlzIGRldGVybWluaXN0aWNcbiAgICAvLyBwZXIgU1BFQyDCp0l0ZXJhdGlvbiBPcmRlci4gU3RydWN0dXJhbCBzaGFyaW5nIGFjcm9zcyBzdWNjZXNzaXZlIHNuYXBzaG90c1xuICAgIC8vIHN0aWxsIGFwcGxpZXMgZm9yIHVuY2hhbmdlZCBicmFuY2hlcyB3aGVuIHRoZSBzYW1lIGJhc2UgZHJhZnQgaXMgZXZvbHZlZDtcbiAgICAvLyBoZXJlIHdlIHJlYnVpbGQgZWFjaCB0aW1lIGJ1dCBwYXkgb25seSBmb3IgdGhlIE1hcCBhbGxvY2F0aW9uLCBub3QgZm9yXG4gICAgLy8gY29weWluZyBlYWNoIGZhY3QgdmFsdWUgKHZhbHVlcyBhcmUgc3RvcmVkIGJ5IHJlZmVyZW5jZSkuXG4gICAgY29uc3QgZnJvemVuID0gcHJvZHVjZShuZXcgTWFwKCkgYXMgTXV0YWJsZUZhY3RzLCAoZHJhZnQpID0+IHtcbiAgICAgIGZvciAoY29uc3QgZiBvZiBmYWN0cykge1xuICAgICAgICBsZXQgYXR0ck1hcCA9IGRyYWZ0LmdldChmLmlkKTtcbiAgICAgICAgaWYgKCFhdHRyTWFwKSB7XG4gICAgICAgICAgYXR0ck1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgICBkcmFmdC5zZXQoZi5pZCwgYXR0ck1hcCk7XG4gICAgICAgIH1cbiAgICAgICAgYXR0ck1hcC5zZXQoZi5hdHRyLCBmLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9KSBhcyBJbW11dGFibGVGYWN0cztcbiAgICB0aGlzLiNzbmFwc2hvdHMucHVzaCh7XG4gICAgICBzZXE6IGN1cnJlbnRTZXEsXG4gICAgICB0aWNrOiB0aGlzLiN0aWNrQ291bnQsXG4gICAgICBmYWN0czogZnJvemVuLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbW9zdCByZWNlbnQgc25hcHNob3Qgd2l0aCBzZXEgPD0gYXRPckJlZm9yZVNlcSwgb3IgbnVsbFxuICAgKiBpZiBub25lIGV4aXN0cy4gU25hcHNob3RzIGFyZSBhcHBlbmRlZCBpbiBzZXEgb3JkZXIsIHNvIHdlIHNjYW4gZm9yd2FyZFxuICAgKiBhbmQgdHJhY2sgdGhlIGxhc3QgcXVhbGlmeWluZyBlbnRyeS5cbiAgICovXG4gIGdldE5lYXJlc3RTbmFwc2hvdChhdE9yQmVmb3JlU2VxOiBudW1iZXIpOiBTbmFwc2hvdCB8IG51bGwge1xuICAgIGxldCBiZXN0OiBTbmFwc2hvdCB8IG51bGwgPSBudWxsO1xuICAgIGZvciAoY29uc3Qgc25hcCBvZiB0aGlzLiNzbmFwc2hvdHMpIHtcbiAgICAgIGlmIChzbmFwLnNlcSA8PSBhdE9yQmVmb3JlU2VxKSB7XG4gICAgICAgIGJlc3QgPSBzbmFwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU25hcHNob3RzIGFyZSBtb25vdG9uaWNhbGx5IG9yZGVyZWQgYnkgc2VxIOKAlCBzdG9wIHNjYW5uaW5nLlxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJlc3Q7XG4gIH1cblxuICAvKiogUmV0dXJuIGFsbCBzbmFwc2hvdHMgaW4gb3JkZXIuIFByaW1hcmlseSBmb3IgdGVzdHMgLyBkaWFnbm9zdGljcy4gKi9cbiAgZ2V0QWxsU25hcHNob3RzKCk6IHJlYWRvbmx5IFNuYXBzaG90W10ge1xuICAgIHJldHVybiB0aGlzLiNzbmFwc2hvdHM7XG4gIH1cblxuICAvKiogRGlzY2FyZCBhbGwgc25hcHNob3RzIGFuZCByZXNldCB0aGUgdGljayBjb3VudGVyLiAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLiNzbmFwc2hvdHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLiN0aWNrQ291bnQgPSAwO1xuICB9XG59XG4iXSwiZmlsZSI6Ii9zcmMvc25hcHNob3QudHMifQ== diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/958c3465f1775b65389eef9a14a218554757cddc b/IJGn1F-WxLUCbfU1lu8pU/ssr/958c3465f1775b65389eef9a14a218554757cddc deleted file mode 100644 index 0e9be75..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/958c3465f1775b65389eef9a14a218554757cddc +++ /dev/null @@ -1,147 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("vitest", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/replay.ts", {"importedNames":["stateHash","replayFromLog"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/eventlog.ts", {"importedNames":["EventLog"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/session.ts", {"importedNames":["Session"]}); -const mkId = (n) => n; -(0,__vite_ssr_import_0__.describe)("stateHash()", () => { - (0,__vite_ssr_import_0__.it)("produces a zero-padded 8-char hex string", () => { - const session = new __vite_ssr_import_3__.Session({ autoFire: false }); - session.insert(mkId(1), "X", 42); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.stateHash)(session)).toMatch(/^[0-9a-f]{8}$/); - }); - (0,__vite_ssr_import_0__.it)("empty session hashes to the djb2 empty-string seed", () => { - const session = new __vite_ssr_import_3__.Session({ autoFire: false }); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.stateHash)(session)).toBe("00001505"); - }); - (0,__vite_ssr_import_0__.it)("identical facts → identical hash", () => { - const s1 = new __vite_ssr_import_3__.Session({ autoFire: false }); - s1.insert(mkId(1), "X", 42); - s1.insert(mkId(2), "Y", "hello"); - const s2 = new __vite_ssr_import_3__.Session({ autoFire: false }); - s2.insert(mkId(1), "X", 42); - s2.insert(mkId(2), "Y", "hello"); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.stateHash)(s1)).toBe((0,__vite_ssr_import_1__.stateHash)(s2)); - }); - (0,__vite_ssr_import_0__.it)("different values → different hash", () => { - const s1 = new __vite_ssr_import_3__.Session({ autoFire: false }); - s1.insert(mkId(1), "X", 42); - const s2 = new __vite_ssr_import_3__.Session({ autoFire: false }); - s2.insert(mkId(1), "X", 43); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.stateHash)(s1)).not.toBe((0,__vite_ssr_import_1__.stateHash)(s2)); - }); - (0,__vite_ssr_import_0__.it)("different attr → different hash", () => { - const s1 = new __vite_ssr_import_3__.Session({ autoFire: false }); - s1.insert(mkId(1), "X", 1); - const s2 = new __vite_ssr_import_3__.Session({ autoFire: false }); - s2.insert(mkId(1), "Y", 1); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.stateHash)(s1)).not.toBe((0,__vite_ssr_import_1__.stateHash)(s2)); - }); - (0,__vite_ssr_import_0__.it)("insertion order is irrelevant (allFacts sorts)", () => { - const s1 = new __vite_ssr_import_3__.Session({ autoFire: false }); - s1.insert(mkId(1), "A", 1); - s1.insert(mkId(2), "B", 2); - s1.insert(mkId(3), "C", 3); - const s2 = new __vite_ssr_import_3__.Session({ autoFire: false }); - s2.insert(mkId(3), "C", 3); - s2.insert(mkId(2), "B", 2); - s2.insert(mkId(1), "A", 1); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.stateHash)(s1)).toBe((0,__vite_ssr_import_1__.stateHash)(s2)); - }); - (0,__vite_ssr_import_0__.it)("nested object values hash deterministically across sessions", () => { - const s1 = new __vite_ssr_import_3__.Session({ autoFire: false }); - s1.insert(mkId(1), "pos", { x: 1, y: 2 }); - const s2 = new __vite_ssr_import_3__.Session({ autoFire: false }); - s2.insert(mkId(1), "pos", { x: 1, y: 2 }); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.stateHash)(s1)).toBe((0,__vite_ssr_import_1__.stateHash)(s2)); - }); -}); -(0,__vite_ssr_import_0__.describe)("replayFromLog()", () => { - (0,__vite_ssr_import_0__.it)("round-trips inserts to a state-hash match", () => { - const log = new __vite_ssr_import_2__.EventLog(); - const original = new __vite_ssr_import_3__.Session({ autoFire: false, eventLog: log }); - original.insert(mkId(1), "X", 42); - original.insert(mkId(2), "Y", "hello"); - original.insert(mkId(3), "Z", true); - const replayed = (0,__vite_ssr_import_1__.replayFromLog)(log.getAll()); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.stateHash)(replayed)).toBe((0,__vite_ssr_import_1__.stateHash)(original)); - }); - (0,__vite_ssr_import_0__.it)("round-trips retracts", () => { - const log = new __vite_ssr_import_2__.EventLog(); - const original = new __vite_ssr_import_3__.Session({ autoFire: false, eventLog: log }); - original.insert(mkId(1), "X", 42); - original.insert(mkId(2), "Y", "hello"); - original.retract(mkId(1), "X"); - const replayed = (0,__vite_ssr_import_1__.replayFromLog)(log.getAll()); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.stateHash)(replayed)).toBe((0,__vite_ssr_import_1__.stateHash)(original)); - (0,__vite_ssr_import_0__.expect)(replayed.contains(mkId(1), "X")).toBe(false); - (0,__vite_ssr_import_0__.expect)(replayed.contains(mkId(2), "Y")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("round-trips updates (retract-then-insert sequences)", () => { - const log = new __vite_ssr_import_2__.EventLog(); - const original = new __vite_ssr_import_3__.Session({ autoFire: false, eventLog: log }); - original.insert(mkId(1), "X", 1); - original.insert(mkId(1), "X", 2); - original.insert(mkId(1), "X", 3); - const replayed = (0,__vite_ssr_import_1__.replayFromLog)(log.getAll()); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.stateHash)(replayed)).toBe((0,__vite_ssr_import_1__.stateHash)(original)); - (0,__vite_ssr_import_0__.expect)(replayed.get(mkId(1), "X")).toBe(3); - }); - (0,__vite_ssr_import_0__.it)("skips derived (negative-id) events defensively", () => { - const log = new __vite_ssr_import_2__.EventLog(); - const original = new __vite_ssr_import_3__.Session({ autoFire: false, eventLog: log }); - original.insert(mkId(1), "X", 42); - const rawEvents = [ - ...log.getAll(), - // Forged derived event — should be ignored. - { - seq: 999, - ts: 0, - kind: "insert", - id: -1, - attr: "Derived", - value: "nope" - } - ]; - const replayed = (0,__vite_ssr_import_1__.replayFromLog)(rawEvents); - (0,__vite_ssr_import_0__.expect)(replayed.contains(-1, "Derived")).toBe(false); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.stateHash)(replayed)).toBe((0,__vite_ssr_import_1__.stateHash)(original)); - }); - (0,__vite_ssr_import_0__.it)("ignores unknown event kinds (forward-compatible)", () => { - const log = new __vite_ssr_import_2__.EventLog(); - const original = new __vite_ssr_import_3__.Session({ autoFire: false, eventLog: log }); - original.insert(mkId(1), "X", 42); - const rawEvents = [ - ...log.getAll(), - { seq: 999, ts: 0, kind: "snapshot" } - ]; - const replayed = (0,__vite_ssr_import_1__.replayFromLog)(rawEvents); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.stateHash)(replayed)).toBe((0,__vite_ssr_import_1__.stateHash)(original)); - }); - (0,__vite_ssr_import_0__.it)("fuzz: 10 replays of the same operation sequence yield identical hashes", () => { - const hashes = []; - for (let run = 0; run < 10; run++) { - const log = new __vite_ssr_import_2__.EventLog(); - const session = new __vite_ssr_import_3__.Session({ autoFire: false, eventLog: log }); - session.insert(mkId(1), "A", 100); - session.insert(mkId(2), "B", "test"); - session.insert(mkId(3), "C", true); - session.retract(mkId(1), "A"); - session.insert(mkId(1), "A", 200); - session.insert(mkId(4), "D", { nested: [1, 2, 3] }); - const replayed = (0,__vite_ssr_import_1__.replayFromLog)(log.getAll()); - hashes.push((0,__vite_ssr_import_1__.stateHash)(replayed)); - }; - (0,__vite_ssr_import_0__.expect)(new Set(hashes).size).toBe(1); - }); - (0,__vite_ssr_import_0__.it)("replay is isolated: new Session has its own id counter and no shared state", () => { - const log = new __vite_ssr_import_2__.EventLog(); - const original = new __vite_ssr_import_3__.Session({ autoFire: false, eventLog: log }); - original.insert(mkId(1), "X", 1); - const replayed = (0,__vite_ssr_import_1__.replayFromLog)(log.getAll()); - original.insert(mkId(2), "Y", 2); - (0,__vite_ssr_import_0__.expect)(replayed.contains(mkId(2), "Y")).toBe(false); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RyxDQUFDLEVBQUUsQ0FBQztBQUNsRCxZQUFNLGNBQVcscUNBQWMsSUFBSSxPQUFPLENBQUM7QUFDM0MsYUFBTyxRQUFLLGlDQUFVLFFBQVEsQ0FBQztBQUFBLElBQ2pDO0FBQ0EscUNBQU8sSUFBSSxJQUFJLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDO0FBQUEsRUFDckMsQ0FBQztBQUVELCtCQUFHLDhFQUE4RSxNQUFNO0FBQ3JGLFVBQU0sTUFBTSxJQUFJLCtCQUFTO0FBQ3pCLFVBQU0sV0FBVyxJQUFJLDhCQUFRLEVBQUUsVUFBVSxPQUFPLFVBQVUsSUFBSSxDQUFDO0FBQy9ELGFBQVMsT0FBTyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDL0IsVUFBTSxjQUFXLHFDQUFjLElBQUksT0FBTyxDQUFDO0FBRTNDLGFBQVMsT0FBTyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDL0IscUNBQU8sU0FBUyxTQUFTLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEtBQUssS0FBSztBQUFBLEVBQ3BELENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJyZXBsYXkudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgaXQsIGV4cGVjdCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB7IHN0YXRlSGFzaCwgcmVwbGF5RnJvbUxvZyB9IGZyb20gXCIuL3JlcGxheS5qc1wiO1xuaW1wb3J0IHsgRXZlbnRMb2cgfSBmcm9tIFwiLi9ldmVudGxvZy5qc1wiO1xuaW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gXCIuL3Nlc3Npb24uanNcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiLi9zY2hlbWEuanNcIjtcblxuY29uc3QgbWtJZCA9IChuOiBudW1iZXIpID0+IG4gYXMgRW50aXR5SWQ7XG5cbmRlc2NyaWJlKFwic3RhdGVIYXNoKClcIiwgKCkgPT4ge1xuICBpdChcInByb2R1Y2VzIGEgemVyby1wYWRkZWQgOC1jaGFyIGhleCBzdHJpbmdcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBzZXNzaW9uLmluc2VydChta0lkKDEpLCBcIlhcIiwgNDIpO1xuICAgIGV4cGVjdChzdGF0ZUhhc2goc2Vzc2lvbikpLnRvTWF0Y2goL15bMC05YS1mXXs4fSQvKTtcbiAgfSk7XG5cbiAgaXQoXCJlbXB0eSBzZXNzaW9uIGhhc2hlcyB0byB0aGUgZGpiMiBlbXB0eS1zdHJpbmcgc2VlZFwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIC8vIGRqYjIgc2VlZCA9IDUzODEg4oaSIDB4MTUwNVxuICAgIGV4cGVjdChzdGF0ZUhhc2goc2Vzc2lvbikpLnRvQmUoXCIwMDAwMTUwNVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJpZGVudGljYWwgZmFjdHMg4oaSIGlkZW50aWNhbCBoYXNoXCIsICgpID0+IHtcbiAgICBjb25zdCBzMSA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIHMxLmluc2VydChta0lkKDEpLCBcIlhcIiwgNDIpO1xuICAgIHMxLmluc2VydChta0lkKDIpLCBcIllcIiwgXCJoZWxsb1wiKTtcbiAgICBjb25zdCBzMiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIHMyLmluc2VydChta0lkKDEpLCBcIlhcIiwgNDIpO1xuICAgIHMyLmluc2VydChta0lkKDIpLCBcIllcIiwgXCJoZWxsb1wiKTtcbiAgICBleHBlY3Qoc3RhdGVIYXNoKHMxKSkudG9CZShzdGF0ZUhhc2goczIpKTtcbiAgfSk7XG5cbiAgaXQoXCJkaWZmZXJlbnQgdmFsdWVzIOKGkiBkaWZmZXJlbnQgaGFzaFwiLCAoKSA9PiB7XG4gICAgY29uc3QgczEgPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBzMS5pbnNlcnQobWtJZCgxKSwgXCJYXCIsIDQyKTtcbiAgICBjb25zdCBzMiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIHMyLmluc2VydChta0lkKDEpLCBcIlhcIiwgNDMpO1xuICAgIGV4cGVjdChzdGF0ZUhhc2goczEpKS5ub3QudG9CZShzdGF0ZUhhc2goczIpKTtcbiAgfSk7XG5cbiAgaXQoXCJkaWZmZXJlbnQgYXR0ciDihpIgZGlmZmVyZW50IGhhc2hcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHMxID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgczEuaW5zZXJ0KG1rSWQoMSksIFwiWFwiLCAxKTtcbiAgICBjb25zdCBzMiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIHMyLmluc2VydChta0lkKDEpLCBcIllcIiwgMSk7XG4gICAgZXhwZWN0KHN0YXRlSGFzaChzMSkpLm5vdC50b0JlKHN0YXRlSGFzaChzMikpO1xuICB9KTtcblxuICBpdChcImluc2VydGlvbiBvcmRlciBpcyBpcnJlbGV2YW50IChhbGxGYWN0cyBzb3J0cylcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHMxID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgczEuaW5zZXJ0KG1rSWQoMSksIFwiQVwiLCAxKTtcbiAgICBzMS5pbnNlcnQobWtJZCgyKSwgXCJCXCIsIDIpO1xuICAgIHMxLmluc2VydChta0lkKDMpLCBcIkNcIiwgMyk7XG4gICAgY29uc3QgczIgPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBzMi5pbnNlcnQobWtJZCgzKSwgXCJDXCIsIDMpO1xuICAgIHMyLmluc2VydChta0lkKDIpLCBcIkJcIiwgMik7XG4gICAgczIuaW5zZXJ0KG1rSWQoMSksIFwiQVwiLCAxKTtcbiAgICBleHBlY3Qoc3RhdGVIYXNoKHMxKSkudG9CZShzdGF0ZUhhc2goczIpKTtcbiAgfSk7XG5cbiAgaXQoXCJuZXN0ZWQgb2JqZWN0IHZhbHVlcyBoYXNoIGRldGVybWluaXN0aWNhbGx5IGFjcm9zcyBzZXNzaW9uc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgczEgPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSB9KTtcbiAgICBzMS5pbnNlcnQobWtJZCgxKSwgXCJwb3NcIiwgeyB4OiAxLCB5OiAyIH0pO1xuICAgIGNvbnN0IHMyID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gICAgczIuaW5zZXJ0KG1rSWQoMSksIFwicG9zXCIsIHsgeDogMSwgeTogMiB9KTtcbiAgICBleHBlY3Qoc3RhdGVIYXNoKHMxKSkudG9CZShzdGF0ZUhhc2goczIpKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJyZXBsYXlGcm9tTG9nKClcIiwgKCkgPT4ge1xuICBpdChcInJvdW5kLXRyaXBzIGluc2VydHMgdG8gYSBzdGF0ZS1oYXNoIG1hdGNoXCIsICgpID0+IHtcbiAgICBjb25zdCBsb2cgPSBuZXcgRXZlbnRMb2coKTtcbiAgICBjb25zdCBvcmlnaW5hbCA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlLCBldmVudExvZzogbG9nIH0pO1xuICAgIG9yaWdpbmFsLmluc2VydChta0lkKDEpLCBcIlhcIiwgNDIpO1xuICAgIG9yaWdpbmFsLmluc2VydChta0lkKDIpLCBcIllcIiwgXCJoZWxsb1wiKTtcbiAgICBvcmlnaW5hbC5pbnNlcnQobWtJZCgzKSwgXCJaXCIsIHRydWUpO1xuXG4gICAgY29uc3QgcmVwbGF5ZWQgPSByZXBsYXlGcm9tTG9nKGxvZy5nZXRBbGwoKSk7XG4gICAgZXhwZWN0KHN0YXRlSGFzaChyZXBsYXllZCkpLnRvQmUoc3RhdGVIYXNoKG9yaWdpbmFsKSk7XG4gIH0pO1xuXG4gIGl0KFwicm91bmQtdHJpcHMgcmV0cmFjdHNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGxvZyA9IG5ldyBFdmVudExvZygpO1xuICAgIGNvbnN0IG9yaWdpbmFsID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UsIGV2ZW50TG9nOiBsb2cgfSk7XG4gICAgb3JpZ2luYWwuaW5zZXJ0KG1rSWQoMSksIFwiWFwiLCA0Mik7XG4gICAgb3JpZ2luYWwuaW5zZXJ0KG1rSWQoMiksIFwiWVwiLCBcImhlbGxvXCIpO1xuICAgIG9yaWdpbmFsLnJldHJhY3QobWtJZCgxKSwgXCJYXCIpO1xuXG4gICAgY29uc3QgcmVwbGF5ZWQgPSByZXBsYXlGcm9tTG9nKGxvZy5nZXRBbGwoKSk7XG4gICAgZXhwZWN0KHN0YXRlSGFzaChyZXBsYXllZCkpLnRvQmUoc3RhdGVIYXNoKG9yaWdpbmFsKSk7XG4gICAgZXhwZWN0KHJlcGxheWVkLmNvbnRhaW5zKG1rSWQoMSksIFwiWFwiKSkudG9CZShmYWxzZSk7XG4gICAgZXhwZWN0KHJlcGxheWVkLmNvbnRhaW5zKG1rSWQoMiksIFwiWVwiKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJyb3VuZC10cmlwcyB1cGRhdGVzIChyZXRyYWN0LXRoZW4taW5zZXJ0IHNlcXVlbmNlcylcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGxvZyA9IG5ldyBFdmVudExvZygpO1xuICAgIGNvbnN0IG9yaWdpbmFsID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UsIGV2ZW50TG9nOiBsb2cgfSk7XG4gICAgb3JpZ2luYWwuaW5zZXJ0KG1rSWQoMSksIFwiWFwiLCAxKTtcbiAgICBvcmlnaW5hbC5pbnNlcnQobWtJZCgxKSwgXCJYXCIsIDIpOyAvLyB1cGRhdGVcbiAgICBvcmlnaW5hbC5pbnNlcnQobWtJZCgxKSwgXCJYXCIsIDMpOyAvLyB1cGRhdGVcblxuICAgIGNvbnN0IHJlcGxheWVkID0gcmVwbGF5RnJvbUxvZyhsb2cuZ2V0QWxsKCkpO1xuICAgIGV4cGVjdChzdGF0ZUhhc2gocmVwbGF5ZWQpKS50b0JlKHN0YXRlSGFzaChvcmlnaW5hbCkpO1xuICAgIGV4cGVjdChyZXBsYXllZC5nZXQobWtJZCgxKSwgXCJYXCIpKS50b0JlKDMpO1xuICB9KTtcblxuICBpdChcInNraXBzIGRlcml2ZWQgKG5lZ2F0aXZlLWlkKSBldmVudHMgZGVmZW5zaXZlbHlcIiwgKCkgPT4ge1xuICAgIC8vIFN5bnRoZXNpemUgYSBsb2cgdGhhdCBjb250YWlucyBhIG5lZ2F0aXZlLWlkIGV2ZW50IGV2ZW4gdGhvdWdoXG4gICAgLy8gdGhlIFNlc3Npb24gd291bGQgbmV2ZXIgcmVjb3JkIG9uZS4gUmVwbGF5IG11c3QgaWdub3JlIGl0LlxuICAgIGNvbnN0IGxvZyA9IG5ldyBFdmVudExvZygpO1xuICAgIGNvbnN0IG9yaWdpbmFsID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UsIGV2ZW50TG9nOiBsb2cgfSk7XG4gICAgb3JpZ2luYWwuaW5zZXJ0KG1rSWQoMSksIFwiWFwiLCA0Mik7XG5cbiAgICBjb25zdCByYXdFdmVudHMgPSBbXG4gICAgICAuLi5sb2cuZ2V0QWxsKCksXG4gICAgICAvLyBGb3JnZWQgZGVyaXZlZCBldmVudCDigJQgc2hvdWxkIGJlIGlnbm9yZWQuXG4gICAgICB7XG4gICAgICAgIHNlcTogOTk5LFxuICAgICAgICB0czogMCxcbiAgICAgICAga2luZDogXCJpbnNlcnRcIiBhcyBjb25zdCxcbiAgICAgICAgaWQ6IC0xIGFzIEVudGl0eUlkLFxuICAgICAgICBhdHRyOiBcIkRlcml2ZWRcIixcbiAgICAgICAgdmFsdWU6IFwibm9wZVwiLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgY29uc3QgcmVwbGF5ZWQgPSByZXBsYXlGcm9tTG9nKHJhd0V2ZW50cyk7XG4gICAgZXhwZWN0KHJlcGxheWVkLmNvbnRhaW5zKC0xIGFzIEVudGl0eUlkLCBcIkRlcml2ZWRcIikpLnRvQmUoZmFsc2UpO1xuICAgIGV4cGVjdChzdGF0ZUhhc2gocmVwbGF5ZWQpKS50b0JlKHN0YXRlSGFzaChvcmlnaW5hbCkpO1xuICB9KTtcblxuICBpdChcImlnbm9yZXMgdW5rbm93biBldmVudCBraW5kcyAoZm9yd2FyZC1jb21wYXRpYmxlKVwiLCAoKSA9PiB7XG4gICAgY29uc3QgbG9nID0gbmV3IEV2ZW50TG9nKCk7XG4gICAgY29uc3Qgb3JpZ2luYWwgPSBuZXcgU2Vzc2lvbih7IGF1dG9GaXJlOiBmYWxzZSwgZXZlbnRMb2c6IGxvZyB9KTtcbiAgICBvcmlnaW5hbC5pbnNlcnQobWtJZCgxKSwgXCJYXCIsIDQyKTtcblxuICAgIGNvbnN0IHJhd0V2ZW50cyA9IFtcbiAgICAgIC4uLmxvZy5nZXRBbGwoKSxcbiAgICAgIHsgc2VxOiA5OTksIHRzOiAwLCBraW5kOiBcInNuYXBzaG90XCIgYXMgdW5rbm93biBhcyBcImZpcmVcIiB9LFxuICAgIF07XG4gICAgY29uc3QgcmVwbGF5ZWQgPSByZXBsYXlGcm9tTG9nKHJhd0V2ZW50cyk7XG4gICAgZXhwZWN0KHN0YXRlSGFzaChyZXBsYXllZCkpLnRvQmUoc3RhdGVIYXNoKG9yaWdpbmFsKSk7XG4gIH0pO1xuXG4gIGl0KFwiZnV6ejogMTAgcmVwbGF5cyBvZiB0aGUgc2FtZSBvcGVyYXRpb24gc2VxdWVuY2UgeWllbGQgaWRlbnRpY2FsIGhhc2hlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgaGFzaGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAobGV0IHJ1biA9IDA7IHJ1biA8IDEwOyBydW4rKykge1xuICAgICAgY29uc3QgbG9nID0gbmV3IEV2ZW50TG9nKCk7XG4gICAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UsIGV2ZW50TG9nOiBsb2cgfSk7XG4gICAgICBzZXNzaW9uLmluc2VydChta0lkKDEpLCBcIkFcIiwgMTAwKTtcbiAgICAgIHNlc3Npb24uaW5zZXJ0KG1rSWQoMiksIFwiQlwiLCBcInRlc3RcIik7XG4gICAgICBzZXNzaW9uLmluc2VydChta0lkKDMpLCBcIkNcIiwgdHJ1ZSk7XG4gICAgICBzZXNzaW9uLnJldHJhY3QobWtJZCgxKSwgXCJBXCIpO1xuICAgICAgc2Vzc2lvbi5pbnNlcnQobWtJZCgxKSwgXCJBXCIsIDIwMCk7IC8vIHJlLWluc2VydFxuICAgICAgc2Vzc2lvbi5pbnNlcnQobWtJZCg0KSwgXCJEXCIsIHsgbmVzdGVkOiBbMSwgMiwgM10gfSk7XG4gICAgICBjb25zdCByZXBsYXllZCA9IHJlcGxheUZyb21Mb2cobG9nLmdldEFsbCgpKTtcbiAgICAgIGhhc2hlcy5wdXNoKHN0YXRlSGFzaChyZXBsYXllZCkpO1xuICAgIH1cbiAgICBleHBlY3QobmV3IFNldChoYXNoZXMpLnNpemUpLnRvQmUoMSk7XG4gIH0pO1xuXG4gIGl0KFwicmVwbGF5IGlzIGlzb2xhdGVkOiBuZXcgU2Vzc2lvbiBoYXMgaXRzIG93biBpZCBjb3VudGVyIGFuZCBubyBzaGFyZWQgc3RhdGVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGxvZyA9IG5ldyBFdmVudExvZygpO1xuICAgIGNvbnN0IG9yaWdpbmFsID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UsIGV2ZW50TG9nOiBsb2cgfSk7XG4gICAgb3JpZ2luYWwuaW5zZXJ0KG1rSWQoMSksIFwiWFwiLCAxKTtcbiAgICBjb25zdCByZXBsYXllZCA9IHJlcGxheUZyb21Mb2cobG9nLmdldEFsbCgpKTtcbiAgICAvLyBSZXBsYXkgZG9lcyBub3QgbXV0YXRlIHRoZSBvcmlnaW5hbC5cbiAgICBvcmlnaW5hbC5pbnNlcnQobWtJZCgyKSwgXCJZXCIsIDIpO1xuICAgIGV4cGVjdChyZXBsYXllZC5jb250YWlucyhta0lkKDIpLCBcIllcIikpLnRvQmUoZmFsc2UpO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvc3JjL3JlcGxheS50ZXN0LnRzIn0= diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/999b109347b67fd75be7f129a894f74893f1d45f b/IJGn1F-WxLUCbfU1lu8pU/ssr/999b109347b67fd75be7f129a894f74893f1d45f deleted file mode 100644 index 5b2b53f..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/999b109347b67fd75be7f129a894f74893f1d45f +++ /dev/null @@ -1,119 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("vitest", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/conflict.ts", {"importedNames":["orderActivations"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/beta.ts", {"importedNames":["Token"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/session.ts", {"importedNames":["Session"]}); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/registry.ts", {"importedNames":["HandlerRegistry"]}); -const __vite_ssr_import_5__ = await __vite_ssr_import__("/src/builder.ts", {"importedNames":["defineRule","v"]}); -const ROOT_FACT = { id: 0, attr: "__root", value: null }; -const dummyToken = new __vite_ssr_import_2__.Token(null, ROOT_FACT, {}); -function mkActivation(name, salience, conditionCount, addedAt) { - const rule = { - name, - salience, - conditions: Array.from({ length: conditionCount }, () => ({})), - handler: "noop", - addedAt - }; - return { rule, token: dummyToken }; -} -(0,__vite_ssr_import_0__.describe)("G6 — conflict resolution ordering", () => { - (0,__vite_ssr_import_0__.it)("higher salience fires first", () => { - const activations = [ - mkActivation("low", 0, 1, 0), - mkActivation("high", 10, 1, 1), - mkActivation("mid", 5, 1, 2) - ]; - const ordered = (0,__vite_ssr_import_1__.orderActivations)(activations); - (0,__vite_ssr_import_0__.expect)(ordered[0]?.rule.name).toBe("high"); - (0,__vite_ssr_import_0__.expect)(ordered[1]?.rule.name).toBe("mid"); - (0,__vite_ssr_import_0__.expect)(ordered[2]?.rule.name).toBe("low"); - }); - (0,__vite_ssr_import_0__.it)("salience ties broken by specificity (more conditions wins)", () => { - const activations = [ - mkActivation("oneCondition", 10, 1, 0), - mkActivation("twoConditions", 10, 2, 1), - mkActivation("threeConditions", 10, 3, 2) - ]; - const ordered = (0,__vite_ssr_import_1__.orderActivations)(activations); - (0,__vite_ssr_import_0__.expect)(ordered[0]?.rule.name).toBe("threeConditions"); - (0,__vite_ssr_import_0__.expect)(ordered[1]?.rule.name).toBe("twoConditions"); - (0,__vite_ssr_import_0__.expect)(ordered[2]?.rule.name).toBe("oneCondition"); - }); - (0,__vite_ssr_import_0__.it)("salience and specificity ties broken by insertion order ascending", () => { - const activations = [ - mkActivation("added2", 5, 2, 2), - mkActivation("added0", 5, 2, 0), - mkActivation("added1", 5, 2, 1) - ]; - const ordered = (0,__vite_ssr_import_1__.orderActivations)(activations); - (0,__vite_ssr_import_0__.expect)(ordered[0]?.rule.name).toBe("added0"); - (0,__vite_ssr_import_0__.expect)(ordered[1]?.rule.name).toBe("added1"); - (0,__vite_ssr_import_0__.expect)(ordered[2]?.rule.name).toBe("added2"); - }); - (0,__vite_ssr_import_0__.it)("mixed case: salience, then specificity, then addedAt", () => { - const activations = [ - mkActivation("ruleC", 5, 3, 2), - // low salience, many conditions - mkActivation("ruleA", 10, 1, 0), - // high salience, 1 condition - mkActivation("ruleB", 10, 2, 1) - // high salience, 2 conditions - ]; - const ordered = (0,__vite_ssr_import_1__.orderActivations)(activations); - (0,__vite_ssr_import_0__.expect)(ordered[0]?.rule.name).toBe("ruleB"); - (0,__vite_ssr_import_0__.expect)(ordered[1]?.rule.name).toBe("ruleA"); - (0,__vite_ssr_import_0__.expect)(ordered[2]?.rule.name).toBe("ruleC"); - }); - (0,__vite_ssr_import_0__.it)("empty activations list → empty result", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.orderActivations)([])).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("single activation → unchanged", () => { - const single = [mkActivation("only", 10, 2, 0)]; - const ordered = (0,__vite_ssr_import_1__.orderActivations)(single); - (0,__vite_ssr_import_0__.expect)(ordered).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(ordered[0]?.rule.name).toBe("only"); - }); - (0,__vite_ssr_import_0__.it)("orderActivations does not mutate the input array", () => { - const activations = [ - mkActivation("b", 5, 1, 0), - mkActivation("a", 10, 1, 1) - ]; - const original = [...activations]; - (0,__vite_ssr_import_1__.orderActivations)(activations); - (0,__vite_ssr_import_0__.expect)(activations[0]?.rule.name).toBe(original[0]?.rule.name); - (0,__vite_ssr_import_0__.expect)(activations[1]?.rule.name).toBe(original[1]?.rule.name); - }); - (0,__vite_ssr_import_0__.it)("Session._getOrderableRules returns rules in addedAt order with correct salience", () => { - const registry = new __vite_ssr_import_4__.HandlerRegistry(); - registry.register("noop", () => { - }); - const session = new __vite_ssr_import_3__.Session({ autoFire: false }); - const r1 = (0,__vite_ssr_import_5__.defineRule)({ - name: "rule1", - salience: 0, - what: [{ id: null, attr: "X", binding: (0,__vite_ssr_import_5__.v)("x") }], - handler: "noop", - registry - }); - const r2 = (0,__vite_ssr_import_5__.defineRule)({ - name: "rule2", - salience: 10, - what: [{ id: null, attr: "Y", binding: (0,__vite_ssr_import_5__.v)("y") }], - handler: "noop", - registry - }); - session.add(r1); - session.add(r2); - const orderable = session._getOrderableRules(); - (0,__vite_ssr_import_0__.expect)(orderable).toHaveLength(2); - (0,__vite_ssr_import_0__.expect)(orderable[0]?.name).toBe("rule1"); - (0,__vite_ssr_import_0__.expect)(orderable[0]?.salience).toBe(0); - (0,__vite_ssr_import_0__.expect)(orderable[0]?.addedAt).toBe(0); - (0,__vite_ssr_import_0__.expect)(orderable[1]?.name).toBe("rule2"); - (0,__vite_ssr_import_0__.expect)(orderable[1]?.salience).toBe(10); - (0,__vite_ssr_import_0__.expect)(orderable[1]?.addedAt).toBe(1); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0EsTUFBTSxZQUF1QixFQUFFLElBQUksR0FBZSxNQUFNLFVBQVUsT0FBTyxLQUFLO0FBQzlFLE1BQU0sYUFBYSxJQUFJLDRCQUFNLE1BQU0sV0FBVyxDQUFDLENBQUM7QUFFaEQsU0FBUyxhQUNQLE1BQ0EsVUFDQSxnQkFDQSxTQUNZO0FBQ1osUUFBTSxPQUFzQjtBQUFBLElBQzFCO0FBQUEsSUFDQTtBQUFBLElBQ0EsWUFBWSxNQUFNLEtBQUssRUFBRSxRQUFRLGVBQWUsR0FBRyxPQUFPLENBQUMsRUFBRTtBQUFBLElBQzdELFNBQVM7QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUNBLFNBQU8sRUFBRSxNQUFNLE9BQU8sV0FBVztBQUNuQztHQUVBLGdDQUFTLHFDQUFxQyxNQUFNO0FBQ2xELCtCQUFHLCtCQUErQixNQUFNO0FBQ3RDLFVBQU0sY0FBYztBQUFBLE1BQ2xCLGFBQWEsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUFBLE1BQzNCLGFBQWEsUUFBUSxJQUFJLEdBQUcsQ0FBQztBQUFBLE1BQzdCLGFBQWEsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUFBLElBQzdCO0FBRUEsVUFBTSxhQUFVLHdDQUFpQixXQUFXO0FBQzVDLHFDQUFPLFFBQVEsQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLEtBQUssTUFBTTtBQUN6QyxxQ0FBTyxRQUFRLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRSxLQUFLLEtBQUs7QUFDeEMscUNBQU8sUUFBUSxDQUFDLEdBQUcsS0FBSyxJQUFJLEVBQUUsS0FBSyxLQUFLO0FBQUEsRUFDMUMsQ0FBQztBQUVELCtCQUFHLDhEQUE4RCxNQUFNO0FBQ3JFLFVBQU0sY0FBYztBQUFBLE1BQ2xCLGFBQWEsZ0JBQWdCLElBQUksR0FBRyxDQUFDO0FBQUEsTUFDckMsYUFBYSxpQkFBaUIsSUFBSSxHQUFHLENBQUM7QUFBQSxNQUN0QyxhQUFhLG1CQUFtQixJQUFJLEdBQUcsQ0FBQztBQUFBLElBQzFDO0FBRUEsVUFBTSxhQUFVLHdDQUFpQixXQUFXO0FBQzVDLHFDQUFPLFFBQVEsQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLEtBQUssaUJBQWlCO0FBQ3BELHFDQUFPLFFBQVEsQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLEtBQUssZUFBZTtBQUNsRCxxQ0FBTyxRQUFRLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRSxLQUFLLGNBQWM7QUFBQSxFQUNuRCxDQUFDO0FBRUQsK0JBQUcscUVBQXFFLE1BQU07QUFDNUUsVUFBTSxjQUFjO0FBQUEsTUFDbEIsYUFBYSxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQUEsTUFDOUIsYUFBYSxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQUEsTUFDOUIsYUFBYSxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQUEsSUFDaEM7QUFFQSxVQUFNLGFBQVUsd0NBQWlCLFdBQVc7QUFDNUMscUNBQU8sUUFBUSxDQUFDLEdBQUcsS0FBSyxJQUFJLEVBQUUsS0FBSyxRQUFRO0FBQzNDLHFDQUFPLFFBQVEsQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLEtBQUssUUFBUTtBQUMzQyxxQ0FBTyxRQUFRLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRSxLQUFLLFFBQVE7QUFBQSxFQUM3QyxDQUFDO0FBRUQsK0JBQUcsd0RBQXdELE1BQU07QUFDL0QsVUFBTSxjQUFjO0FBQUEsTUFDbEIsYUFBYSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQUE7QUFBQSxNQUM3QixhQUFhLFNBQVMsSUFBSSxHQUFHLENBQUM7QUFBQTtBQUFBLE1BQzlCLGFBQWEsU0FBUyxJQUFJLEdBQUcsQ0FBQztBQUFBO0FBQUEsSUFDaEM7QUFFQSxVQUFNLGFBQVUsd0NBQWlCLFdBQVc7QUFHNUMscUNBQU8sUUFBUSxDQUFDLEdBQUcsS0FBSyxJQUFJLEVBQUUsS0FBSyxPQUFPO0FBQzFDLHFDQUFPLFFBQVEsQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLEtBQUssT0FBTztBQUMxQyxxQ0FBTyxRQUFRLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRSxLQUFLLE9BQU87QUFBQSxFQUM1QyxDQUFDO0FBRUQsK0JBQUcseUNBQXlDLE1BQU07QUFDaEQsd0NBQU8sd0NBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDO0FBQUEsRUFDN0MsQ0FBQztBQUVELCtCQUFHLGlDQUFpQyxNQUFNO0FBQ3hDLFVBQU0sU0FBUyxDQUFDLGFBQWEsUUFBUSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzlDLFVBQU0sYUFBVSx3Q0FBaUIsTUFBTTtBQUN2QyxxQ0FBTyxPQUFPLEVBQUUsYUFBYSxDQUFDO0FBQzlCLHFDQUFPLFFBQVEsQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLEtBQUssTUFBTTtBQUFBLEVBQzNDLENBQUM7QUFFRCwrQkFBRyxvREFBb0QsTUFBTTtBQUMzRCxVQUFNLGNBQWM7QUFBQSxNQUNsQixhQUFhLEtBQUssR0FBRyxHQUFHLENBQUM7QUFBQSxNQUN6QixhQUFhLEtBQUssSUFBSSxHQUFHLENBQUM7QUFBQSxJQUM1QjtBQUNBLFVBQU0sV0FBVyxDQUFDLEdBQUcsV0FBVztBQUNoQywrQ0FBaUIsV0FBVztBQUM1QixxQ0FBTyxZQUFZLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRSxLQUFLLFNBQVMsQ0FBQyxHQUFHLEtBQUssSUFBSTtBQUM3RCxxQ0FBTyxZQUFZLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRSxLQUFLLFNBQVMsQ0FBQyxHQUFHLEtBQUssSUFBSTtBQUFBLEVBQy9ELENBQUM7QUFFRCwrQkFBRyxtRkFBbUYsTUFBTTtBQUMxRixVQUFNLFdBQVcsSUFBSSxzQ0FBZ0I7QUFDckMsYUFBUyxTQUFTLFFBQVEsTUFBTTtBQUFBLElBQUMsQ0FBQztBQUVsQyxVQUFNLFVBQVUsSUFBSSw4QkFBUSxFQUFFLFVBQVUsTUFBTSxDQUFDO0FBRS9DLFVBQU0sUUFBSyxrQ0FBVztBQUFBLE1BQ3BCLE1BQU07QUFBQSxNQUNOLFVBQVU7QUFBQSxNQUNWLE1BQU0sQ0FBQyxFQUFFLElBQUksTUFBTSxNQUFNLEtBQUssWUFBUyx5QkFBRSxHQUFHLEVBQUUsQ0FBQztBQUFBLE1BQy9DLFNBQVM7QUFBQSxNQUNUO0FBQUEsSUFDRixDQUFDO0FBQ0QsVUFBTSxRQUFLLGtDQUFXO0FBQUEsTUFDcEIsTUFBTTtBQUFBLE1BQ04sVUFBVTtBQUFBLE1BQ1YsTUFBTSxDQUFDLEVBQUUsSUFBSSxNQUFNLE1BQU0sS0FBSyxZQUFTLHlCQUFFLEdBQUcsRUFBRSxDQUFDO0FBQUEsTUFDL0MsU0FBUztBQUFBLE1BQ1Q7QUFBQSxJQUNGLENBQUM7QUFDRCxZQUFRLElBQUksRUFBRTtBQUNkLFlBQVEsSUFBSSxFQUFFO0FBRWQsVUFBTSxZQUFZLFFBQVEsbUJBQW1CO0FBQzdDLHFDQUFPLFNBQVMsRUFBRSxhQUFhLENBQUM7QUFDaEMscUNBQU8sVUFBVSxDQUFDLEdBQUcsSUFBSSxFQUFFLEtBQUssT0FBTztBQUN2QyxxQ0FBTyxVQUFVLENBQUMsR0FBRyxRQUFRLEVBQUUsS0FBSyxDQUFDO0FBQ3JDLHFDQUFPLFVBQVUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxLQUFLLENBQUM7QUFDcEMscUNBQU8sVUFBVSxDQUFDLEdBQUcsSUFBSSxFQUFFLEtBQUssT0FBTztBQUN2QyxxQ0FBTyxVQUFVLENBQUMsR0FBRyxRQUFRLEVBQUUsS0FBSyxFQUFFO0FBQ3RDLHFDQUFPLFVBQVUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxLQUFLLENBQUM7QUFBQSxFQUN0QyxDQUFDO0FBQ0gsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiZzYtY29uZmxpY3QtcmVzb2x1dGlvbi50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRzYg4oCUIENvbmZsaWN0IHJlc29sdXRpb24gb3JkZXJpbmdcbiAqXG4gKiBQYXJhcnVsZXMgb3JpZ2luOiB0ZXN0cy90ZXN0Mi5uaW0gXCJyZWN1cnNpb24gbGltaXRcIiAocnVsZTEvcnVsZTIvcnVsZTMgY2FzY2FkZSlcbiAqIGFuZCBTUEVDLm1kIMKnQ29uZmxpY3QgUmVzb2x1dGlvbiB3aGljaCBkZWZpbmVzIHNhbGllbmNlIOKGkiBzcGVjaWZpY2l0eSDihpIgYWRkZWRBdC5cbiAqXG4gKiBQYXJhcnVsZXMgdXNlcyBzYWxpZW5jZSBpbiBydWxlIGRlY2xhcmF0aW9ucyB0byBjb250cm9sIGZpcmluZyBvcmRlci5cbiAqIE91ciBlbmdpbmUgaW1wbGVtZW50cyB0aGUgc2FtZSB0aHJlZS1rZXkgc29ydCB2aWEgb3JkZXJBY3RpdmF0aW9ucygpOlxuICogICAxLiBTYWxpZW5jZSBkZXNjZW5kaW5nXG4gKiAgIDIuIFNwZWNpZmljaXR5ICgjIGNvbmRpdGlvbnMpIGRlc2NlbmRpbmdcbiAqICAgMy4gSW5zZXJ0aW9uIG9yZGVyIGFzY2VuZGluZ1xuICpcbiAqIFRoaXMgZ29sZGVuIHRlc3QgdmVyaWZpZXMgdGhlIHB1cmUgb3JkZXJpbmcgZnVuY3Rpb24sIHdoaWNoIGlzIHRoZVxuICogY29uZmxpY3QtcmVzb2x1dGlvbiBrZXJuZWwgdGhhdCB0aGUgZnV0dXJlIGFnZW5kYSB3aWxsIGNhbGwuXG4gKi9cbmltcG9ydCB7IGRlc2NyaWJlLCBpdCwgZXhwZWN0IH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IHsgb3JkZXJBY3RpdmF0aW9ucyB9IGZyb20gXCIuLi8uLi9zcmMvY29uZmxpY3QuanNcIjtcbmltcG9ydCB7IFRva2VuIH0gZnJvbSBcIi4uLy4uL3NyYy9iZXRhLmpzXCI7XG5pbXBvcnQgeyBTZXNzaW9uIH0gZnJvbSBcIi4uLy4uL3NyYy9zZXNzaW9uLmpzXCI7XG5pbXBvcnQgeyBIYW5kbGVyUmVnaXN0cnkgfSBmcm9tIFwiLi4vLi4vc3JjL3JlZ2lzdHJ5LmpzXCI7XG5pbXBvcnQgeyBkZWZpbmVSdWxlLCB2IH0gZnJvbSBcIi4uLy4uL3NyYy9idWlsZGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGl2YXRpb24sIE9yZGVyYWJsZVJ1bGUgfSBmcm9tIFwiLi4vLi4vc3JjL2NvbmZsaWN0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eUlkIH0gZnJvbSBcIi4uLy4uL3NyYy9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgVG9rZW5GYWN0IH0gZnJvbSBcIi4uLy4uL3NyYy9iZXRhLmpzXCI7XG5cbmNvbnN0IFJPT1RfRkFDVDogVG9rZW5GYWN0ID0geyBpZDogMCBhcyBFbnRpdHlJZCwgYXR0cjogXCJfX3Jvb3RcIiwgdmFsdWU6IG51bGwgfTtcbmNvbnN0IGR1bW15VG9rZW4gPSBuZXcgVG9rZW4obnVsbCwgUk9PVF9GQUNULCB7fSk7XG5cbmZ1bmN0aW9uIG1rQWN0aXZhdGlvbihcbiAgbmFtZTogc3RyaW5nLFxuICBzYWxpZW5jZTogbnVtYmVyLFxuICBjb25kaXRpb25Db3VudDogbnVtYmVyLFxuICBhZGRlZEF0OiBudW1iZXIsXG4pOiBBY3RpdmF0aW9uIHtcbiAgY29uc3QgcnVsZTogT3JkZXJhYmxlUnVsZSA9IHtcbiAgICBuYW1lLFxuICAgIHNhbGllbmNlLFxuICAgIGNvbmRpdGlvbnM6IEFycmF5LmZyb20oeyBsZW5ndGg6IGNvbmRpdGlvbkNvdW50IH0sICgpID0+ICh7fSkpLFxuICAgIGhhbmRsZXI6IFwibm9vcFwiLFxuICAgIGFkZGVkQXQsXG4gIH07XG4gIHJldHVybiB7IHJ1bGUsIHRva2VuOiBkdW1teVRva2VuIH07XG59XG5cbmRlc2NyaWJlKFwiRzYg4oCUIGNvbmZsaWN0IHJlc29sdXRpb24gb3JkZXJpbmdcIiwgKCkgPT4ge1xuICBpdChcImhpZ2hlciBzYWxpZW5jZSBmaXJlcyBmaXJzdFwiLCAoKSA9PiB7XG4gICAgY29uc3QgYWN0aXZhdGlvbnMgPSBbXG4gICAgICBta0FjdGl2YXRpb24oXCJsb3dcIiwgMCwgMSwgMCksXG4gICAgICBta0FjdGl2YXRpb24oXCJoaWdoXCIsIDEwLCAxLCAxKSxcbiAgICAgIG1rQWN0aXZhdGlvbihcIm1pZFwiLCA1LCAxLCAyKSxcbiAgICBdO1xuXG4gICAgY29uc3Qgb3JkZXJlZCA9IG9yZGVyQWN0aXZhdGlvbnMoYWN0aXZhdGlvbnMpO1xuICAgIGV4cGVjdChvcmRlcmVkWzBdPy5ydWxlLm5hbWUpLnRvQmUoXCJoaWdoXCIpO1xuICAgIGV4cGVjdChvcmRlcmVkWzFdPy5ydWxlLm5hbWUpLnRvQmUoXCJtaWRcIik7XG4gICAgZXhwZWN0KG9yZGVyZWRbMl0/LnJ1bGUubmFtZSkudG9CZShcImxvd1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJzYWxpZW5jZSB0aWVzIGJyb2tlbiBieSBzcGVjaWZpY2l0eSAobW9yZSBjb25kaXRpb25zIHdpbnMpXCIsICgpID0+IHtcbiAgICBjb25zdCBhY3RpdmF0aW9ucyA9IFtcbiAgICAgIG1rQWN0aXZhdGlvbihcIm9uZUNvbmRpdGlvblwiLCAxMCwgMSwgMCksXG4gICAgICBta0FjdGl2YXRpb24oXCJ0d29Db25kaXRpb25zXCIsIDEwLCAyLCAxKSxcbiAgICAgIG1rQWN0aXZhdGlvbihcInRocmVlQ29uZGl0aW9uc1wiLCAxMCwgMywgMiksXG4gICAgXTtcblxuICAgIGNvbnN0IG9yZGVyZWQgPSBvcmRlckFjdGl2YXRpb25zKGFjdGl2YXRpb25zKTtcbiAgICBleHBlY3Qob3JkZXJlZFswXT8ucnVsZS5uYW1lKS50b0JlKFwidGhyZWVDb25kaXRpb25zXCIpO1xuICAgIGV4cGVjdChvcmRlcmVkWzFdPy5ydWxlLm5hbWUpLnRvQmUoXCJ0d29Db25kaXRpb25zXCIpO1xuICAgIGV4cGVjdChvcmRlcmVkWzJdPy5ydWxlLm5hbWUpLnRvQmUoXCJvbmVDb25kaXRpb25cIik7XG4gIH0pO1xuXG4gIGl0KFwic2FsaWVuY2UgYW5kIHNwZWNpZmljaXR5IHRpZXMgYnJva2VuIGJ5IGluc2VydGlvbiBvcmRlciBhc2NlbmRpbmdcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGFjdGl2YXRpb25zID0gW1xuICAgICAgbWtBY3RpdmF0aW9uKFwiYWRkZWQyXCIsIDUsIDIsIDIpLFxuICAgICAgbWtBY3RpdmF0aW9uKFwiYWRkZWQwXCIsIDUsIDIsIDApLFxuICAgICAgbWtBY3RpdmF0aW9uKFwiYWRkZWQxXCIsIDUsIDIsIDEpLFxuICAgIF07XG5cbiAgICBjb25zdCBvcmRlcmVkID0gb3JkZXJBY3RpdmF0aW9ucyhhY3RpdmF0aW9ucyk7XG4gICAgZXhwZWN0KG9yZGVyZWRbMF0/LnJ1bGUubmFtZSkudG9CZShcImFkZGVkMFwiKTtcbiAgICBleHBlY3Qob3JkZXJlZFsxXT8ucnVsZS5uYW1lKS50b0JlKFwiYWRkZWQxXCIpO1xuICAgIGV4cGVjdChvcmRlcmVkWzJdPy5ydWxlLm5hbWUpLnRvQmUoXCJhZGRlZDJcIik7XG4gIH0pO1xuXG4gIGl0KFwibWl4ZWQgY2FzZTogc2FsaWVuY2UsIHRoZW4gc3BlY2lmaWNpdHksIHRoZW4gYWRkZWRBdFwiLCAoKSA9PiB7XG4gICAgY29uc3QgYWN0aXZhdGlvbnMgPSBbXG4gICAgICBta0FjdGl2YXRpb24oXCJydWxlQ1wiLCA1LCAzLCAyKSwgICAvLyBsb3cgc2FsaWVuY2UsIG1hbnkgY29uZGl0aW9uc1xuICAgICAgbWtBY3RpdmF0aW9uKFwicnVsZUFcIiwgMTAsIDEsIDApLCAgLy8gaGlnaCBzYWxpZW5jZSwgMSBjb25kaXRpb25cbiAgICAgIG1rQWN0aXZhdGlvbihcInJ1bGVCXCIsIDEwLCAyLCAxKSwgIC8vIGhpZ2ggc2FsaWVuY2UsIDIgY29uZGl0aW9uc1xuICAgIF07XG5cbiAgICBjb25zdCBvcmRlcmVkID0gb3JkZXJBY3RpdmF0aW9ucyhhY3RpdmF0aW9ucyk7XG4gICAgLy8gQiA+IEEgKHNhbWUgc2FsaWVuY2UsIEIgaGFzIG1vcmUgY29uZGl0aW9ucylcbiAgICAvLyBBID4gQyAoaGlnaGVyIHNhbGllbmNlKVxuICAgIGV4cGVjdChvcmRlcmVkWzBdPy5ydWxlLm5hbWUpLnRvQmUoXCJydWxlQlwiKTtcbiAgICBleHBlY3Qob3JkZXJlZFsxXT8ucnVsZS5uYW1lKS50b0JlKFwicnVsZUFcIik7XG4gICAgZXhwZWN0KG9yZGVyZWRbMl0/LnJ1bGUubmFtZSkudG9CZShcInJ1bGVDXCIpO1xuICB9KTtcblxuICBpdChcImVtcHR5IGFjdGl2YXRpb25zIGxpc3Qg4oaSIGVtcHR5IHJlc3VsdFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KG9yZGVyQWN0aXZhdGlvbnMoW10pKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xuXG4gIGl0KFwic2luZ2xlIGFjdGl2YXRpb24g4oaSIHVuY2hhbmdlZFwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2luZ2xlID0gW21rQWN0aXZhdGlvbihcIm9ubHlcIiwgMTAsIDIsIDApXTtcbiAgICBjb25zdCBvcmRlcmVkID0gb3JkZXJBY3RpdmF0aW9ucyhzaW5nbGUpO1xuICAgIGV4cGVjdChvcmRlcmVkKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgZXhwZWN0KG9yZGVyZWRbMF0/LnJ1bGUubmFtZSkudG9CZShcIm9ubHlcIik7XG4gIH0pO1xuXG4gIGl0KFwib3JkZXJBY3RpdmF0aW9ucyBkb2VzIG5vdCBtdXRhdGUgdGhlIGlucHV0IGFycmF5XCIsICgpID0+IHtcbiAgICBjb25zdCBhY3RpdmF0aW9ucyA9IFtcbiAgICAgIG1rQWN0aXZhdGlvbihcImJcIiwgNSwgMSwgMCksXG4gICAgICBta0FjdGl2YXRpb24oXCJhXCIsIDEwLCAxLCAxKSxcbiAgICBdO1xuICAgIGNvbnN0IG9yaWdpbmFsID0gWy4uLmFjdGl2YXRpb25zXTtcbiAgICBvcmRlckFjdGl2YXRpb25zKGFjdGl2YXRpb25zKTtcbiAgICBleHBlY3QoYWN0aXZhdGlvbnNbMF0/LnJ1bGUubmFtZSkudG9CZShvcmlnaW5hbFswXT8ucnVsZS5uYW1lKTtcbiAgICBleHBlY3QoYWN0aXZhdGlvbnNbMV0/LnJ1bGUubmFtZSkudG9CZShvcmlnaW5hbFsxXT8ucnVsZS5uYW1lKTtcbiAgfSk7XG5cbiAgaXQoXCJTZXNzaW9uLl9nZXRPcmRlcmFibGVSdWxlcyByZXR1cm5zIHJ1bGVzIGluIGFkZGVkQXQgb3JkZXIgd2l0aCBjb3JyZWN0IHNhbGllbmNlXCIsICgpID0+IHtcbiAgICBjb25zdCByZWdpc3RyeSA9IG5ldyBIYW5kbGVyUmVnaXN0cnkoKTtcbiAgICByZWdpc3RyeS5yZWdpc3RlcihcIm5vb3BcIiwgKCkgPT4ge30pO1xuXG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuXG4gICAgY29uc3QgcjEgPSBkZWZpbmVSdWxlKHtcbiAgICAgIG5hbWU6IFwicnVsZTFcIixcbiAgICAgIHNhbGllbmNlOiAwLFxuICAgICAgd2hhdDogW3sgaWQ6IG51bGwsIGF0dHI6IFwiWFwiLCBiaW5kaW5nOiB2KFwieFwiKSB9XSxcbiAgICAgIGhhbmRsZXI6IFwibm9vcFwiLFxuICAgICAgcmVnaXN0cnksXG4gICAgfSk7XG4gICAgY29uc3QgcjIgPSBkZWZpbmVSdWxlKHtcbiAgICAgIG5hbWU6IFwicnVsZTJcIixcbiAgICAgIHNhbGllbmNlOiAxMCxcbiAgICAgIHdoYXQ6IFt7IGlkOiBudWxsLCBhdHRyOiBcIllcIiwgYmluZGluZzogdihcInlcIikgfV0sXG4gICAgICBoYW5kbGVyOiBcIm5vb3BcIixcbiAgICAgIHJlZ2lzdHJ5LFxuICAgIH0pO1xuICAgIHNlc3Npb24uYWRkKHIxKTtcbiAgICBzZXNzaW9uLmFkZChyMik7XG5cbiAgICBjb25zdCBvcmRlcmFibGUgPSBzZXNzaW9uLl9nZXRPcmRlcmFibGVSdWxlcygpO1xuICAgIGV4cGVjdChvcmRlcmFibGUpLnRvSGF2ZUxlbmd0aCgyKTtcbiAgICBleHBlY3Qob3JkZXJhYmxlWzBdPy5uYW1lKS50b0JlKFwicnVsZTFcIik7XG4gICAgZXhwZWN0KG9yZGVyYWJsZVswXT8uc2FsaWVuY2UpLnRvQmUoMCk7XG4gICAgZXhwZWN0KG9yZGVyYWJsZVswXT8uYWRkZWRBdCkudG9CZSgwKTtcbiAgICBleHBlY3Qob3JkZXJhYmxlWzFdPy5uYW1lKS50b0JlKFwicnVsZTJcIik7XG4gICAgZXhwZWN0KG9yZGVyYWJsZVsxXT8uc2FsaWVuY2UpLnRvQmUoMTApO1xuICAgIGV4cGVjdChvcmRlcmFibGVbMV0/LmFkZGVkQXQpLnRvQmUoMSk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvcmV0ZS90ZXN0cy9nb2xkZW4vZzYtY29uZmxpY3QtcmVzb2x1dGlvbi50ZXN0LnRzIn0= diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/9f0b6ad014a45665df4dbaf45124a060c9753232 b/IJGn1F-WxLUCbfU1lu8pU/ssr/9f0b6ad014a45665df4dbaf45124a060c9753232 deleted file mode 100644 index 673baa9..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/9f0b6ad014a45665df4dbaf45124a060c9753232 +++ /dev/null @@ -1,149 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "Session", { enumerable: true, configurable: true, get(){ try { return Session } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/wm.ts", {"importedNames":["WorkingMemory"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/alpha.ts", {"importedNames":["AlphaNetwork"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/cycle.ts", {"importedNames":["RecursionLimitExceededError"]}); -class Session { - #wm; - #alpha; - #rules = []; - #opts; - #eventLog; - #idCounter = 0; - /** - * Internal recursion depth counter for fireRules(). - * Underscore prefix signals package-internal use; not exported from index. - * Per SPEC.md §Cycle Detection. - */ - _fireDepth = 0; - constructor(opts = {}) { - this.#opts = { - autoFire: opts.autoFire ?? true, - recursionLimit: opts.recursionLimit ?? 64 - }; - this.#eventLog = opts.eventLog; - this.#wm = new __vite_ssr_import_0__.WorkingMemory(); - this.#alpha = new __vite_ssr_import_1__.AlphaNetwork(); - this.#wm.onInsert((id, attr, value) => { - this.#alpha.notifyInsert(id, attr, value); - }); - this.#wm.onRetract((id, attr, value) => { - this.#alpha.notifyRetract(id, attr, value); - }); - } - /** Mint a new unique EntityId (server-authoritative per SPEC.md §ID Authority). */ - nextId() { - return ++this.#idCounter; - } - /** - * Insert (or update) a fact. If autoFire, triggers fireRules(). - * - * When an {@link EventLog} is attached, records the mutation — - * updates are recorded as a retract-of-old-value followed by an - * insert-of-new-value, mirroring the WM's internal update semantics - * (see wm.ts). Derived facts (negative ids) are never logged. - */ - insert(id, attr, value) { - const log = this.#eventLog; - const shouldLog = log !== void 0 && id >= 0; - if (shouldLog) { - const oldValue = this.#wm.get(id, attr); - if (oldValue !== void 0 || this.#wm.contains(id, attr)) { - log.appendRetract(id, attr, oldValue); - } - }; - this.#wm.insert(id, attr, value); - if (shouldLog) log.appendInsert(id, attr, value); - if (this.#opts.autoFire) this.fireRules(); - } - /** - * Retract a fact. If autoFire, triggers fireRules(). - * - * When an {@link EventLog} is attached, the previous value is read - * from WM before the retraction and recorded on the event so replay - * can reconstruct the missing fact. Retracting a non-existent fact - * is a no-op and is not logged. - */ - retract(id, attr) { - const log = this.#eventLog; - const shouldLog = log !== void 0 && id >= 0; - let oldValue; - let existed = false; - if (shouldLog) { - existed = this.#wm.contains(id, attr); - if (existed) oldValue = this.#wm.get(id, attr); - }; - this.#wm.retract(id, attr); - if (shouldLog && existed) log.appendRetract(id, attr, oldValue); - if (this.#opts.autoFire) this.fireRules(); - } - /** Get fact value. */ - get(id, attr) { - return this.#wm.get(id, attr); - } - /** Check fact existence. */ - contains(id, attr) { - return this.#wm.contains(id, attr); - } - /** Return all facts sorted [id asc, attr asc]. */ - allFacts() { - return this.#wm.allFacts(); - } - /** - * Register a rule with the session. - * Accepts a RuleDefinition produced by defineRule() (see builder.ts). - * - * Each registration is assigned a zero-based `addedAt` index, exposed - * via {@link _getOrderableRules} for the conflict-resolution sort - * (see conflict.ts, SPEC.md §Conflict Resolution). - */ - add(rule) { - this.#rules.push({ rule, addedAt: this.#rules.length }); - } - /** - * Package-internal accessor returning registered rules in a shape - * compatible with {@link OrderableRule} (i.e. with `addedAt` attached). - * - * Used by the agenda/beta network to build {@link Activation} values - * that can be passed to {@link orderActivations}. Not exported from - * the package index — consumers should go through `fireRules()`. - */ - _getOrderableRules() { - return this.#rules.map(({ rule, addedAt }) => ({ - name: rule.name, - salience: rule.salience, - conditions: rule.conditions, - handler: rule.handler, - addedAt - })); - } - /** - * Fire all pending rule activations in deterministic order. - * Returns the count of rule firings. - * Per SPEC.md §Conflict Resolution: salience desc → specificity desc → insertion order asc. - * Per SPEC.md §Cycle Detection: throws RecursionLimitExceededError when depth exceeds limit. - * A limit of 0 disables the check. - */ - fireRules(opts) { - const limit = opts?.recursionLimit ?? this.#opts.recursionLimit; - if (limit > 0 && this._fireDepth >= limit) { - throw new __vite_ssr_import_2__.RecursionLimitExceededError(this._fireDepth, []); - }; - this._fireDepth++; - try { - return 0; - } finally { - this._fireDepth--; - } - } - /** Expose AlphaNetwork for wiring by beta/join nodes (package-internal). */ - _getAlpha() { - return this.#alpha; - } - /** Expose WorkingMemory for wiring by production nodes (package-internal). */ - _getWM() { - return this.#wm; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQUtBO0FBQ0E7QUFJQTtBQTRCTyxNQUFNLFFBQVE7QUFBQSxFQUNWO0FBQUEsRUFDQTtBQUFBLEVBQ0EsU0FBMkIsQ0FBQztBQUFBLEVBQzVCO0FBQUEsRUFDQTtBQUFBLEVBQ1QsYUFBYTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9iLGFBQWE7QUFBQSxFQUViLFlBQVksT0FBdUIsQ0FBQyxHQUFHO0FBQ3JDLFNBQUssUUFBUTtBQUFBLE1BQ1gsVUFBVSxLQUFLLFlBQVk7QUFBQSxNQUMzQixnQkFBZ0IsS0FBSyxrQkFBa0I7QUFBQSxJQUN6QztBQUNBLFNBQUssWUFBWSxLQUFLO0FBQ3RCLFNBQUssTUFBTSxJQUFJLG9DQUFjO0FBQzdCLFNBQUssU0FBUyxJQUFJLG1DQUFhO0FBRy9CLFNBQUssSUFBSSxTQUFTLENBQUMsSUFBSSxNQUFNLFVBQVU7QUFDckMsV0FBSyxPQUFPLGFBQWEsSUFBSSxNQUFNLEtBQUs7QUFBQSxJQUMxQyxDQUFDO0FBQ0QsU0FBSyxJQUFJLFVBQVUsQ0FBQyxJQUFJLE1BQU0sVUFBVTtBQUN0QyxXQUFLLE9BQU8sY0FBYyxJQUFJLE1BQU0sS0FBSztBQUFBLElBQzNDLENBQUM7QUFBQSxFQUNIO0FBQUE7QUFBQSxFQUdBLFNBQW1CO0FBQ2pCLFdBQU8sRUFBRSxLQUFLO0FBQUEsRUFDaEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFVQSxPQUFPLElBQWMsTUFBZSxPQUF3QjtBQUMxRCxVQUFNLE1BQU0sS0FBSztBQUNqQixVQUFNLFlBQVksUUFBUSxVQUFjLE1BQWlCO0FBQ3pELFFBQUksV0FBVztBQUNiLFlBQU0sV0FBVyxLQUFLLElBQUksSUFBSSxJQUFJLElBQUk7QUFDdEMsVUFBSSxhQUFhLFVBQWEsS0FBSyxJQUFJLFNBQVMsSUFBSSxJQUFJLEdBQUc7QUFDekQsWUFBSSxjQUFjLElBQUksTUFBTSxRQUFRO0FBQUEsTUFDdEM7QUFBQSxJQUNGO0FBQ0EsU0FBSyxJQUFJLE9BQU8sSUFBSSxNQUFNLEtBQUs7QUFDL0IsUUFBSSxVQUFXLEtBQUksYUFBYSxJQUFJLE1BQU0sS0FBSztBQUMvQyxRQUFJLEtBQUssTUFBTSxTQUFVLE1BQUssVUFBVTtBQUFBLEVBQzFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVUEsUUFBUSxJQUFjLE1BQXFCO0FBQ3pDLFVBQU0sTUFBTSxLQUFLO0FBQ2pCLFVBQU0sWUFBWSxRQUFRLFVBQWMsTUFBaUI7QUFDekQsUUFBSTtBQUNKLFFBQUksVUFBVTtBQUNkLFFBQUksV0FBVztBQUNiLGdCQUFVLEtBQUssSUFBSSxTQUFTLElBQUksSUFBSTtBQUNwQyxVQUFJLFFBQVMsWUFBVyxLQUFLLElBQUksSUFBSSxJQUFJLElBQUk7QUFBQSxJQUMvQztBQUNBLFNBQUssSUFBSSxRQUFRLElBQUksSUFBSTtBQUN6QixRQUFJLGFBQWEsUUFBUyxLQUFJLGNBQWMsSUFBSSxNQUFNLFFBQVE7QUFDOUQsUUFBSSxLQUFLLE1BQU0sU0FBVSxNQUFLLFVBQVU7QUFBQSxFQUMxQztBQUFBO0FBQUEsRUFHQSxJQUFJLElBQWMsTUFBc0M7QUFDdEQsV0FBTyxLQUFLLElBQUksSUFBSSxJQUFJLElBQUk7QUFBQSxFQUM5QjtBQUFBO0FBQUEsRUFHQSxTQUFTLElBQWMsTUFBd0I7QUFDN0MsV0FBTyxLQUFLLElBQUksU0FBUyxJQUFJLElBQUk7QUFBQSxFQUNuQztBQUFBO0FBQUEsRUFHQSxXQUFrRDtBQUNoRCxXQUFPLEtBQUssSUFBSSxTQUFTO0FBQUEsRUFDM0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFVQSxJQUFJLE1BQTRCO0FBQzlCLFNBQUssT0FBTyxLQUFLLEVBQUUsTUFBTSxTQUFTLEtBQUssT0FBTyxPQUFPLENBQUM7QUFBQSxFQUN4RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVVBLHFCQUErQztBQUM3QyxXQUFPLEtBQUssT0FBTyxJQUFJLENBQUMsRUFBRSxNQUFNLFFBQVEsT0FBTztBQUFBLE1BQzdDLE1BQU0sS0FBSztBQUFBLE1BQ1gsVUFBVSxLQUFLO0FBQUEsTUFDZixZQUFZLEtBQUs7QUFBQSxNQUNqQixTQUFTLEtBQUs7QUFBQSxNQUNkO0FBQUEsSUFDRixFQUFFO0FBQUEsRUFDSjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTQSxVQUFVLE1BQTRDO0FBQ3BELFVBQU0sUUFBUSxNQUFNLGtCQUFrQixLQUFLLE1BQU07QUFDakQsUUFBSSxRQUFRLEtBQUssS0FBSyxjQUFjLE9BQU87QUFDekMsWUFBTSxJQUFJLGtEQUE0QixLQUFLLFlBQVksQ0FBQyxDQUFDO0FBQUEsSUFDM0Q7QUFDQSxTQUFLO0FBQ0wsUUFBSTtBQUdGLGFBQU87QUFBQSxJQUNULFVBQUU7QUFDQSxXQUFLO0FBQUEsSUFDUDtBQUFBLEVBQ0Y7QUFBQTtBQUFBLEVBR0EsWUFBMEI7QUFDeEIsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBO0FBQUEsRUFHQSxTQUF3QjtBQUN0QixXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQ0YiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInNlc3Npb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTZXNzaW9uIOKAlCBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgQHBhcmF0eXBlL3JldGUgZW5naW5lLlxuICogT3ducyBXb3JraW5nTWVtb3J5LCBBbHBoYU5ldHdvcmssIGFuZCB0aGUgcHJvZHVjdGlvbiBhZ2VuZGEuXG4gKiBQZXIgU1BFQy5tZCDCp0lEIEF1dGhvcml0eSwgwqdDb25mbGljdCBSZXNvbHV0aW9uLCDCp1JIUyBQdXJpdHkgQ29udHJhY3QuXG4gKi9cbmltcG9ydCB7IFdvcmtpbmdNZW1vcnksIHR5cGUgQXR0cktleSwgdHlwZSBGYWN0VmFsdWUgfSBmcm9tIFwiLi93bS5qc1wiO1xuaW1wb3J0IHsgQWxwaGFOZXR3b3JrIH0gZnJvbSBcIi4vYWxwaGEuanNcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiLi9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgUnVsZURlZmluaXRpb24gfSBmcm9tIFwiLi9idWlsZGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IE9yZGVyYWJsZVJ1bGUgfSBmcm9tIFwiLi9jb25mbGljdC5qc1wiO1xuaW1wb3J0IHsgUmVjdXJzaW9uTGltaXRFeGNlZWRlZEVycm9yIH0gZnJvbSBcIi4vY3ljbGUuanNcIjtcbmltcG9ydCB0eXBlIHsgRXZlbnRMb2cgfSBmcm9tIFwiLi9ldmVudGxvZy5qc1wiO1xuXG4vKipcbiAqIEludGVybmFsIHJlY29yZCBwYWlyaW5nIGEgcmVnaXN0ZXJlZCB7QGxpbmsgUnVsZURlZmluaXRpb259IHdpdGggaXRzXG4gKiB6ZXJvLWJhc2VkIGluc2VydGlvbiBpbmRleC4gVGhlIGluZGV4IGlzIHRoZSB0aGlyZCB0aWVicmVha2VyIHVzZWQgYnlcbiAqIHtAbGluayBvcmRlckFjdGl2YXRpb25zfSAoc2VlIGNvbmZsaWN0LnRzKS5cbiAqL1xuaW50ZXJmYWNlIFJlZ2lzdGVyZWRSdWxlIHtcbiAgcmVhZG9ubHkgcnVsZTogUnVsZURlZmluaXRpb247XG4gIHJlYWRvbmx5IGFkZGVkQXQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uT3B0aW9ucyB7XG4gIC8qKiBJZiB0cnVlLCBmaXJlUnVsZXMoKSBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBhZnRlciBlYWNoIGluc2VydC9yZXRyYWN0LiBEZWZhdWx0OiB0cnVlLiAqL1xuICBhdXRvRmlyZT86IGJvb2xlYW47XG4gIC8qKiBNYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCBmb3IgZmlyZVJ1bGVzKCkuIERlZmF1bHQ6IDY0LiAqL1xuICByZWN1cnNpb25MaW1pdD86IG51bWJlcjtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGFwcGVuZC1vbmx5IHtAbGluayBFdmVudExvZ30uIFdoZW4gcHJvdmlkZWQsIHVzZXItaW5pdGlhdGVkXG4gICAqIHtAbGluayBTZXNzaW9uLmluc2VydH0gYW5kIHtAbGluayBTZXNzaW9uLnJldHJhY3R9IGNhbGxzIGFwcGVuZCBhXG4gICAqIGNvcnJlc3BvbmRpbmcgZXZlbnQuIERlcml2ZWQgZmFjdHMgKG5lZ2F0aXZlIHtAbGluayBFbnRpdHlJZH1zKSBhcmVcbiAgICogZXhjbHVkZWQg4oCUIHBlciBTUEVDLm1kIMKnVHJ1dGggTWFpbnRlbmFuY2UgdGhleSBhcmUgcmUtZGVyaXZlZCBvblxuICAgKiByZXBsYXkgcmF0aGVyIHRoYW4gcmVjb3JkZWQgZGlyZWN0bHkuXG4gICAqL1xuICBldmVudExvZz86IEV2ZW50TG9nO1xufVxuXG5leHBvcnQgY2xhc3MgU2Vzc2lvbiB7XG4gIHJlYWRvbmx5ICN3bTogV29ya2luZ01lbW9yeTtcbiAgcmVhZG9ubHkgI2FscGhhOiBBbHBoYU5ldHdvcms7XG4gIHJlYWRvbmx5ICNydWxlczogUmVnaXN0ZXJlZFJ1bGVbXSA9IFtdO1xuICByZWFkb25seSAjb3B0czogUmVxdWlyZWQ8UGljazxTZXNzaW9uT3B0aW9ucywgXCJhdXRvRmlyZVwiIHwgXCJyZWN1cnNpb25MaW1pdFwiPj47XG4gIHJlYWRvbmx5ICNldmVudExvZzogRXZlbnRMb2cgfCB1bmRlZmluZWQ7XG4gICNpZENvdW50ZXIgPSAwO1xuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCByZWN1cnNpb24gZGVwdGggY291bnRlciBmb3IgZmlyZVJ1bGVzKCkuXG4gICAqIFVuZGVyc2NvcmUgcHJlZml4IHNpZ25hbHMgcGFja2FnZS1pbnRlcm5hbCB1c2U7IG5vdCBleHBvcnRlZCBmcm9tIGluZGV4LlxuICAgKiBQZXIgU1BFQy5tZCDCp0N5Y2xlIERldGVjdGlvbi5cbiAgICovXG4gIF9maXJlRGVwdGggPSAwO1xuXG4gIGNvbnN0cnVjdG9yKG9wdHM6IFNlc3Npb25PcHRpb25zID0ge30pIHtcbiAgICB0aGlzLiNvcHRzID0ge1xuICAgICAgYXV0b0ZpcmU6IG9wdHMuYXV0b0ZpcmUgPz8gdHJ1ZSxcbiAgICAgIHJlY3Vyc2lvbkxpbWl0OiBvcHRzLnJlY3Vyc2lvbkxpbWl0ID8/IDY0LFxuICAgIH07XG4gICAgdGhpcy4jZXZlbnRMb2cgPSBvcHRzLmV2ZW50TG9nO1xuICAgIHRoaXMuI3dtID0gbmV3IFdvcmtpbmdNZW1vcnkoKTtcbiAgICB0aGlzLiNhbHBoYSA9IG5ldyBBbHBoYU5ldHdvcmsoKTtcblxuICAgIC8vIFdpcmUgV29ya2luZ01lbW9yeSBldmVudHMgdG8gQWxwaGFOZXR3b3JrXG4gICAgdGhpcy4jd20ub25JbnNlcnQoKGlkLCBhdHRyLCB2YWx1ZSkgPT4ge1xuICAgICAgdGhpcy4jYWxwaGEubm90aWZ5SW5zZXJ0KGlkLCBhdHRyLCB2YWx1ZSk7XG4gICAgfSk7XG4gICAgdGhpcy4jd20ub25SZXRyYWN0KChpZCwgYXR0ciwgdmFsdWUpID0+IHtcbiAgICAgIHRoaXMuI2FscGhhLm5vdGlmeVJldHJhY3QoaWQsIGF0dHIsIHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBNaW50IGEgbmV3IHVuaXF1ZSBFbnRpdHlJZCAoc2VydmVyLWF1dGhvcml0YXRpdmUgcGVyIFNQRUMubWQgwqdJRCBBdXRob3JpdHkpLiAqL1xuICBuZXh0SWQoKTogRW50aXR5SWQge1xuICAgIHJldHVybiArK3RoaXMuI2lkQ291bnRlciBhcyBFbnRpdHlJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnNlcnQgKG9yIHVwZGF0ZSkgYSBmYWN0LiBJZiBhdXRvRmlyZSwgdHJpZ2dlcnMgZmlyZVJ1bGVzKCkuXG4gICAqXG4gICAqIFdoZW4gYW4ge0BsaW5rIEV2ZW50TG9nfSBpcyBhdHRhY2hlZCwgcmVjb3JkcyB0aGUgbXV0YXRpb24g4oCUXG4gICAqIHVwZGF0ZXMgYXJlIHJlY29yZGVkIGFzIGEgcmV0cmFjdC1vZi1vbGQtdmFsdWUgZm9sbG93ZWQgYnkgYW5cbiAgICogaW5zZXJ0LW9mLW5ldy12YWx1ZSwgbWlycm9yaW5nIHRoZSBXTSdzIGludGVybmFsIHVwZGF0ZSBzZW1hbnRpY3NcbiAgICogKHNlZSB3bS50cykuIERlcml2ZWQgZmFjdHMgKG5lZ2F0aXZlIGlkcykgYXJlIG5ldmVyIGxvZ2dlZC5cbiAgICovXG4gIGluc2VydChpZDogRW50aXR5SWQsIGF0dHI6IEF0dHJLZXksIHZhbHVlOiBGYWN0VmFsdWUpOiB2b2lkIHtcbiAgICBjb25zdCBsb2cgPSB0aGlzLiNldmVudExvZztcbiAgICBjb25zdCBzaG91bGRMb2cgPSBsb2cgIT09IHVuZGVmaW5lZCAmJiAoaWQgYXMgbnVtYmVyKSA+PSAwO1xuICAgIGlmIChzaG91bGRMb2cpIHtcbiAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy4jd20uZ2V0KGlkLCBhdHRyKTtcbiAgICAgIGlmIChvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8IHRoaXMuI3dtLmNvbnRhaW5zKGlkLCBhdHRyKSkge1xuICAgICAgICBsb2cuYXBwZW5kUmV0cmFjdChpZCwgYXR0ciwgb2xkVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLiN3bS5pbnNlcnQoaWQsIGF0dHIsIHZhbHVlKTtcbiAgICBpZiAoc2hvdWxkTG9nKSBsb2cuYXBwZW5kSW5zZXJ0KGlkLCBhdHRyLCB2YWx1ZSk7XG4gICAgaWYgKHRoaXMuI29wdHMuYXV0b0ZpcmUpIHRoaXMuZmlyZVJ1bGVzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmFjdCBhIGZhY3QuIElmIGF1dG9GaXJlLCB0cmlnZ2VycyBmaXJlUnVsZXMoKS5cbiAgICpcbiAgICogV2hlbiBhbiB7QGxpbmsgRXZlbnRMb2d9IGlzIGF0dGFjaGVkLCB0aGUgcHJldmlvdXMgdmFsdWUgaXMgcmVhZFxuICAgKiBmcm9tIFdNIGJlZm9yZSB0aGUgcmV0cmFjdGlvbiBhbmQgcmVjb3JkZWQgb24gdGhlIGV2ZW50IHNvIHJlcGxheVxuICAgKiBjYW4gcmVjb25zdHJ1Y3QgdGhlIG1pc3NpbmcgZmFjdC4gUmV0cmFjdGluZyBhIG5vbi1leGlzdGVudCBmYWN0XG4gICAqIGlzIGEgbm8tb3AgYW5kIGlzIG5vdCBsb2dnZWQuXG4gICAqL1xuICByZXRyYWN0KGlkOiBFbnRpdHlJZCwgYXR0cjogQXR0cktleSk6IHZvaWQge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMuI2V2ZW50TG9nO1xuICAgIGNvbnN0IHNob3VsZExvZyA9IGxvZyAhPT0gdW5kZWZpbmVkICYmIChpZCBhcyBudW1iZXIpID49IDA7XG4gICAgbGV0IG9sZFZhbHVlOiBGYWN0VmFsdWUgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGV4aXN0ZWQgPSBmYWxzZTtcbiAgICBpZiAoc2hvdWxkTG9nKSB7XG4gICAgICBleGlzdGVkID0gdGhpcy4jd20uY29udGFpbnMoaWQsIGF0dHIpO1xuICAgICAgaWYgKGV4aXN0ZWQpIG9sZFZhbHVlID0gdGhpcy4jd20uZ2V0KGlkLCBhdHRyKTtcbiAgICB9XG4gICAgdGhpcy4jd20ucmV0cmFjdChpZCwgYXR0cik7XG4gICAgaWYgKHNob3VsZExvZyAmJiBleGlzdGVkKSBsb2cuYXBwZW5kUmV0cmFjdChpZCwgYXR0ciwgb2xkVmFsdWUpO1xuICAgIGlmICh0aGlzLiNvcHRzLmF1dG9GaXJlKSB0aGlzLmZpcmVSdWxlcygpO1xuICB9XG5cbiAgLyoqIEdldCBmYWN0IHZhbHVlLiAqL1xuICBnZXQoaWQ6IEVudGl0eUlkLCBhdHRyOiBBdHRyS2V5KTogRmFjdFZhbHVlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jd20uZ2V0KGlkLCBhdHRyKTtcbiAgfVxuXG4gIC8qKiBDaGVjayBmYWN0IGV4aXN0ZW5jZS4gKi9cbiAgY29udGFpbnMoaWQ6IEVudGl0eUlkLCBhdHRyOiBBdHRyS2V5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI3dtLmNvbnRhaW5zKGlkLCBhdHRyKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm4gYWxsIGZhY3RzIHNvcnRlZCBbaWQgYXNjLCBhdHRyIGFzY10uICovXG4gIGFsbEZhY3RzKCk6IFJldHVyblR5cGU8V29ya2luZ01lbW9yeVtcImFsbEZhY3RzXCJdPiB7XG4gICAgcmV0dXJuIHRoaXMuI3dtLmFsbEZhY3RzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBydWxlIHdpdGggdGhlIHNlc3Npb24uXG4gICAqIEFjY2VwdHMgYSBSdWxlRGVmaW5pdGlvbiBwcm9kdWNlZCBieSBkZWZpbmVSdWxlKCkgKHNlZSBidWlsZGVyLnRzKS5cbiAgICpcbiAgICogRWFjaCByZWdpc3RyYXRpb24gaXMgYXNzaWduZWQgYSB6ZXJvLWJhc2VkIGBhZGRlZEF0YCBpbmRleCwgZXhwb3NlZFxuICAgKiB2aWEge0BsaW5rIF9nZXRPcmRlcmFibGVSdWxlc30gZm9yIHRoZSBjb25mbGljdC1yZXNvbHV0aW9uIHNvcnRcbiAgICogKHNlZSBjb25mbGljdC50cywgU1BFQy5tZCDCp0NvbmZsaWN0IFJlc29sdXRpb24pLlxuICAgKi9cbiAgYWRkKHJ1bGU6IFJ1bGVEZWZpbml0aW9uKTogdm9pZCB7XG4gICAgdGhpcy4jcnVsZXMucHVzaCh7IHJ1bGUsIGFkZGVkQXQ6IHRoaXMuI3J1bGVzLmxlbmd0aCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYWNrYWdlLWludGVybmFsIGFjY2Vzc29yIHJldHVybmluZyByZWdpc3RlcmVkIHJ1bGVzIGluIGEgc2hhcGVcbiAgICogY29tcGF0aWJsZSB3aXRoIHtAbGluayBPcmRlcmFibGVSdWxlfSAoaS5lLiB3aXRoIGBhZGRlZEF0YCBhdHRhY2hlZCkuXG4gICAqXG4gICAqIFVzZWQgYnkgdGhlIGFnZW5kYS9iZXRhIG5ldHdvcmsgdG8gYnVpbGQge0BsaW5rIEFjdGl2YXRpb259IHZhbHVlc1xuICAgKiB0aGF0IGNhbiBiZSBwYXNzZWQgdG8ge0BsaW5rIG9yZGVyQWN0aXZhdGlvbnN9LiBOb3QgZXhwb3J0ZWQgZnJvbVxuICAgKiB0aGUgcGFja2FnZSBpbmRleCDigJQgY29uc3VtZXJzIHNob3VsZCBnbyB0aHJvdWdoIGBmaXJlUnVsZXMoKWAuXG4gICAqL1xuICBfZ2V0T3JkZXJhYmxlUnVsZXMoKTogcmVhZG9ubHkgT3JkZXJhYmxlUnVsZVtdIHtcbiAgICByZXR1cm4gdGhpcy4jcnVsZXMubWFwKCh7IHJ1bGUsIGFkZGVkQXQgfSkgPT4gKHtcbiAgICAgIG5hbWU6IHJ1bGUubmFtZSxcbiAgICAgIHNhbGllbmNlOiBydWxlLnNhbGllbmNlLFxuICAgICAgY29uZGl0aW9uczogcnVsZS5jb25kaXRpb25zLFxuICAgICAgaGFuZGxlcjogcnVsZS5oYW5kbGVyLFxuICAgICAgYWRkZWRBdCxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogRmlyZSBhbGwgcGVuZGluZyBydWxlIGFjdGl2YXRpb25zIGluIGRldGVybWluaXN0aWMgb3JkZXIuXG4gICAqIFJldHVybnMgdGhlIGNvdW50IG9mIHJ1bGUgZmlyaW5ncy5cbiAgICogUGVyIFNQRUMubWQgwqdDb25mbGljdCBSZXNvbHV0aW9uOiBzYWxpZW5jZSBkZXNjIOKGkiBzcGVjaWZpY2l0eSBkZXNjIOKGkiBpbnNlcnRpb24gb3JkZXIgYXNjLlxuICAgKiBQZXIgU1BFQy5tZCDCp0N5Y2xlIERldGVjdGlvbjogdGhyb3dzIFJlY3Vyc2lvbkxpbWl0RXhjZWVkZWRFcnJvciB3aGVuIGRlcHRoIGV4Y2VlZHMgbGltaXQuXG4gICAqIEEgbGltaXQgb2YgMCBkaXNhYmxlcyB0aGUgY2hlY2suXG4gICAqL1xuICBmaXJlUnVsZXMob3B0cz86IHsgcmVjdXJzaW9uTGltaXQ/OiBudW1iZXIgfSk6IG51bWJlciB7XG4gICAgY29uc3QgbGltaXQgPSBvcHRzPy5yZWN1cnNpb25MaW1pdCA/PyB0aGlzLiNvcHRzLnJlY3Vyc2lvbkxpbWl0O1xuICAgIGlmIChsaW1pdCA+IDAgJiYgdGhpcy5fZmlyZURlcHRoID49IGxpbWl0KSB7XG4gICAgICB0aHJvdyBuZXcgUmVjdXJzaW9uTGltaXRFeGNlZWRlZEVycm9yKHRoaXMuX2ZpcmVEZXB0aCwgW10pO1xuICAgIH1cbiAgICB0aGlzLl9maXJlRGVwdGgrKztcbiAgICB0cnkge1xuICAgICAgLy8gU3R1Yjogbm8gcHJvZHVjdGlvbiBub2RlcyB3aXJlZCB5ZXQgKFBoYXNlIDEuNyspXG4gICAgICAvLyBSZXR1cm5zIDAgdW50aWwgYmV0YSBuZXR3b3JrICsgcHJvZHVjdGlvbiBub2RlcyBhcmUgaW50ZWdyYXRlZC5cbiAgICAgIHJldHVybiAwO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9maXJlRGVwdGgtLTtcbiAgICB9XG4gIH1cblxuICAvKiogRXhwb3NlIEFscGhhTmV0d29yayBmb3Igd2lyaW5nIGJ5IGJldGEvam9pbiBub2RlcyAocGFja2FnZS1pbnRlcm5hbCkuICovXG4gIF9nZXRBbHBoYSgpOiBBbHBoYU5ldHdvcmsge1xuICAgIHJldHVybiB0aGlzLiNhbHBoYTtcbiAgfVxuXG4gIC8qKiBFeHBvc2UgV29ya2luZ01lbW9yeSBmb3Igd2lyaW5nIGJ5IHByb2R1Y3Rpb24gbm9kZXMgKHBhY2thZ2UtaW50ZXJuYWwpLiAqL1xuICBfZ2V0V00oKTogV29ya2luZ01lbW9yeSB7XG4gICAgcmV0dXJuIHRoaXMuI3dtO1xuICB9XG59XG4iXSwiZmlsZSI6Ii9zcmMvc2Vzc2lvbi50cyJ9 diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/9fc1165fea3f0efa2c86975b4117ca9317a7181d b/IJGn1F-WxLUCbfU1lu8pU/ssr/9fc1165fea3f0efa2c86975b4117ca9317a7181d deleted file mode 100644 index 3c780db..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/9fc1165fea3f0efa2c86975b4117ca9317a7181d +++ /dev/null @@ -1,153 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "AggregationNode", { enumerable: true, configurable: true, get(){ try { return AggregationNode } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/beta.ts", {"importedNames":["Token"]}); -const AGG_FACT = { - id: -1, - attr: "__agg__", - value: null -}; -class AggregationNode { - constructor(kind, inputVar, resultVar) { - this.kind = kind; - this.inputVar = inputVar; - this.resultVar = resultVar; - } - #activateListeners = []; - #deactivateListeners = []; - /** - * All current input matches keyed by their upstream token, mapped to - * the binding value this node is aggregating over. - * - * Keyed by the token reference (not by binding value) so that two - * tokens contributing the same value — e.g. two units both at `hp=10` - * — are tracked independently and both contribute to `count`, `sum`, - * `collect`, etc. - */ - #values = /* @__PURE__ */ new Map(); - /** Running sum, kept in sync with {@link #values} for O(1) update on sum. */ - #sumTotal = 0; - /** The currently-active aggregate token downstream, or `null` if {@link init} - * has not yet been called. */ - #currentToken = null; - addDownstreamActivate(listener) { - this.#activateListeners.push(listener); - } - addDownstreamDeactivate(listener) { - this.#deactivateListeners.push(listener); - } - /** - * Emit the initial aggregate token (reflecting zero input matches). - * - * Must be called after wiring downstream listeners. Aggregation nodes - * differ from BetaMemory / JoinNode in that they always hold one active - * downstream token — even with no inputs the aggregate is defined - * (count=0, sum=0, collect=[]) and rules may legitimately depend on it. - */ - init() { - this.#emitUpdate(); - } - /** - * Record a new input match and emit the updated aggregate. - * - * Idempotency: re-activating the same token reference is not supported - * by upstream callers (BetaMemory always deactivates before re-activating - * a changed partial match). We overwrite silently to avoid a silent - * double-count of `sum` in that degenerate case, but the caller should - * not rely on this. - */ - leftActivate(token) { - const value = this.#readValue(token); - if (this.#values.has(token) && this.kind === "sum") { - const prev = this.#values.get(token); - if (typeof prev === "number") this.#sumTotal -= prev; - }; - this.#values.set(token, value); - if (this.kind === "sum" && typeof value === "number") { - this.#sumTotal += value; - }; - this.#emitUpdate(); - } - /** - * Retract an input match and emit the updated aggregate. - * - * Unknown tokens are a no-op on the internal state but still trigger a - * downstream emit, mirroring {@link BetaMemory.leftDeactivate}'s lenient - * contract — downstream may have derived tokens that need to settle to - * a consistent aggregate value regardless. - */ - leftDeactivate(token) { - const had = this.#values.has(token); - if (had && this.kind === "sum") { - const prev = this.#values.get(token); - if (typeof prev === "number") this.#sumTotal -= prev; - }; - this.#values.delete(token); - this.#emitUpdate(); - } - /** - * Read the aggregation value from the given token's bindings. - * - * Falls back to `0` when the binding is missing so that callers who - * incorrectly wire the node don't crash; aggregated bindings that are - * missing would be a network-wiring bug which surfaces as "sum not - * changing" rather than an opaque `NaN`. - */ - #readValue(token) { - const v = token.bindings[this.inputVar]; - return v === void 0 ? 0 : v; - } - /** - * Deactivate the previous aggregate token (if any) and activate a new - * one carrying the freshly-computed result. - */ - #emitUpdate() { - const result = this.#materialize(); - const bindings = { [this.resultVar]: result }; - const newToken = new __vite_ssr_import_0__.Token(null, AGG_FACT, bindings); - const prev = this.#currentToken; - this.#currentToken = newToken; - if (prev !== null) { - for (const listener of this.#deactivateListeners) listener(prev); - }; - for (const listener of this.#activateListeners) listener(newToken); - } - /** Compute the current aggregate value from internal state. */ - #materialize() { - switch (this.kind) { - case "count": - return this.#values.size; - case "sum": - return this.#sumTotal; - case "min": - return this.#scanExtremum("min"); - case "max": - return this.#scanExtremum("max"); - case "collect": - return [...this.#values.values()]; - } - } - /** - * Scan the current value set for the min or max. - * - * Returns `0` for the empty set (see module header for rationale) so - * downstream rules don't have to special-case `undefined`. Non-numeric - * values are skipped — if the caller aggregates `min` over a string - * binding, that is a wiring bug; the best recoverable behaviour is to - * ignore the non-numeric entries rather than emit `NaN`. - */ - #scanExtremum(which) { - if (this.#values.size === 0) return 0; - let best = null; - for (const v of this.#values.values()) { - if (typeof v !== "number") continue; - if (best === null) { - best = v; - } else if (which === "min" ? v < best : v > best) { - best = v; - } - }; - return best ?? 0; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQStEQTtBQXVCQSxNQUFNLFdBQVc7QUFBQSxFQUNmLElBQUk7QUFBQSxFQUNKLE1BQU07QUFBQSxFQUNOLE9BQU87QUFDVDtBQUVPLE1BQU0sZ0JBQWdCO0FBQUEsRUFzQjNCLFlBQ1csTUFFQSxVQUVBLFdBQ1Q7QUFMUztBQUVBO0FBRUE7QUFBQSxFQUNSO0FBQUEsRUEzQk0scUJBQXlDLENBQUM7QUFBQSxFQUMxQyx1QkFBNkMsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVzlDLFVBQVUsb0JBQUksSUFBc0I7QUFBQTtBQUFBLEVBRzdDLFlBQVk7QUFBQTtBQUFBO0FBQUEsRUFJWixnQkFBOEI7QUFBQSxFQVU5QixzQkFBc0IsVUFBa0M7QUFDdEQsU0FBSyxtQkFBbUIsS0FBSyxRQUFRO0FBQUEsRUFDdkM7QUFBQSxFQUVBLHdCQUF3QixVQUFvQztBQUMxRCxTQUFLLHFCQUFxQixLQUFLLFFBQVE7QUFBQSxFQUN6QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVVBLE9BQWE7QUFDWCxTQUFLLFlBQVk7QUFBQSxFQUNuQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBV0EsYUFBYSxPQUFvQjtBQUMvQixVQUFNLFFBQVEsS0FBSyxXQUFXLEtBQUs7QUFLbkMsUUFBSSxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssS0FBSyxTQUFTLE9BQU87QUFDbEQsWUFBTSxPQUFPLEtBQUssUUFBUSxJQUFJLEtBQUs7QUFDbkMsVUFBSSxPQUFPLFNBQVMsU0FBVSxNQUFLLGFBQWE7QUFBQSxJQUNsRDtBQUVBLFNBQUssUUFBUSxJQUFJLE9BQU8sS0FBSztBQUU3QixRQUFJLEtBQUssU0FBUyxTQUFTLE9BQU8sVUFBVSxVQUFVO0FBQ3BELFdBQUssYUFBYTtBQUFBLElBQ3BCO0FBRUEsU0FBSyxZQUFZO0FBQUEsRUFDbkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFVQSxlQUFlLE9BQW9CO0FBQ2pDLFVBQU0sTUFBTSxLQUFLLFFBQVEsSUFBSSxLQUFLO0FBQ2xDLFFBQUksT0FBTyxLQUFLLFNBQVMsT0FBTztBQUM5QixZQUFNLE9BQU8sS0FBSyxRQUFRLElBQUksS0FBSztBQUNuQyxVQUFJLE9BQU8sU0FBUyxTQUFVLE1BQUssYUFBYTtBQUFBLElBQ2xEO0FBQ0EsU0FBSyxRQUFRLE9BQU8sS0FBSztBQUN6QixTQUFLLFlBQVk7QUFBQSxFQUNuQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVVBLFdBQVcsT0FBeUI7QUFDbEMsVUFBTSxJQUFJLE1BQU0sU0FBUyxLQUFLLFFBQVE7QUFDdEMsV0FBTyxNQUFNLFNBQVksSUFBSTtBQUFBLEVBQy9CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1BLGNBQW9CO0FBQ2xCLFVBQU0sU0FBUyxLQUFLLGFBQWE7QUFDakMsVUFBTSxXQUFxQixFQUFFLENBQUMsS0FBSyxTQUFTLEdBQUcsT0FBTztBQUN0RCxVQUFNLFdBQVcsSUFBSSw0QkFBTSxNQUFNLFVBQVUsUUFBUTtBQUtuRCxVQUFNLE9BQU8sS0FBSztBQUNsQixTQUFLLGdCQUFnQjtBQUVyQixRQUFJLFNBQVMsTUFBTTtBQUNqQixpQkFBVyxZQUFZLEtBQUsscUJBQXNCLFVBQVMsSUFBSTtBQUFBLElBQ2pFO0FBQ0EsZUFBVyxZQUFZLEtBQUssbUJBQW9CLFVBQVMsUUFBUTtBQUFBLEVBQ25FO0FBQUE7QUFBQSxFQUdBLGVBQTBCO0FBQ3hCLFlBQVEsS0FBSyxNQUFNO0FBQUEsTUFDakIsS0FBSztBQUNILGVBQU8sS0FBSyxRQUFRO0FBQUEsTUFFdEIsS0FBSztBQUVILGVBQU8sS0FBSztBQUFBLE1BRWQsS0FBSztBQUNILGVBQU8sS0FBSyxjQUFjLEtBQUs7QUFBQSxNQUVqQyxLQUFLO0FBQ0gsZUFBTyxLQUFLLGNBQWMsS0FBSztBQUFBLE1BRWpDLEtBQUs7QUFJSCxlQUFPLENBQUMsR0FBRyxLQUFLLFFBQVEsT0FBTyxDQUFDO0FBQUEsSUFDcEM7QUFBQSxFQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFXQSxjQUFjLE9BQThCO0FBQzFDLFFBQUksS0FBSyxRQUFRLFNBQVMsRUFBRyxRQUFPO0FBQ3BDLFFBQUksT0FBc0I7QUFDMUIsZUFBVyxLQUFLLEtBQUssUUFBUSxPQUFPLEdBQUc7QUFDckMsVUFBSSxPQUFPLE1BQU0sU0FBVTtBQUMzQixVQUFJLFNBQVMsTUFBTTtBQUNqQixlQUFPO0FBQUEsTUFDVCxXQUFXLFVBQVUsUUFBUSxJQUFJLE9BQU8sSUFBSSxNQUFNO0FBQ2hELGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUNBLFdBQU8sUUFBUTtBQUFBLEVBQ2pCO0FBQ0YiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImFnZ3JlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFnZ3JlZ2F0aW9uTm9kZSDigJQgbWFpbnRhaW5zIGEgcnVubmluZyBhZ2dyZWdhdGUgb3ZlciBtYXRjaCBiaW5kaW5ncyBhbmRcbiAqIGVtaXRzIGEgc2luZ2xlIFwiYWdncmVnYXRlIHRva2VuXCIgZG93bnN0cmVhbSB3aG9zZSBiaW5kaW5nIGZvciB0aGUgcmVzdWx0XG4gKiB2YXJpYWJsZSByZWZsZWN0cyB0aGUgY3VycmVudCBhZ2dyZWdhdGUgdmFsdWUuXG4gKlxuICogUGVyIGBwYWNrYWdlcy9yZXRlL1NQRUMubWQgwqdSZXRlIElJIFJlZmVyZW5jZSBUYXJnZXRgICh0YWJsZSByb3dcbiAqIFwiQWdncmVnYXRpb25Ob2RlXCIpLCBzdXBwb3J0ZWQgYWdncmVnYXRvcnMgYXJlOlxuICpcbiAqICAgLSBgY291bnRgICAg4oCUIG51bWJlciBvZiBpbnB1dCBtYXRjaGVzIChPKDEpIHVwZGF0ZSkuXG4gKiAgIC0gYHN1bWAgICAgIOKAlCBudW1lcmljIHN1bSAoTygxKSB1cGRhdGUsIGluY3JlbWVudGFsIG9uIGJvdGggc2lkZXMpLlxuICogICAtIGBtaW5gICAgICDigJQgbWluaW11bSBudW1lcmljIHZhbHVlIChPKG4pIHNjYW4gb24gdXBkYXRlOyBzZWUgbm90ZSkuXG4gKiAgIC0gYG1heGAgICAgIOKAlCBtYXhpbXVtIG51bWVyaWMgdmFsdWUgKE8obikgc2NhbiBvbiB1cGRhdGU7IHNlZSBub3RlKS5cbiAqICAgLSBgY29sbGVjdGAg4oCUIGFycmF5IG9mIGFsbCB2YWx1ZXMgKHVuc29ydGVkOyBPKG4pIGNvcHkgcGVyIGVtaXQpLlxuICpcbiAqICMjIyBEb3duc3RyZWFtIGVtaXNzaW9uIHByb3RvY29sXG4gKlxuICogQW4gQWdncmVnYXRpb25Ob2RlIGFsd2F5cyBoYXMgKmV4YWN0bHkgb25lKiBhY3RpdmUgYWdncmVnYXRlIHRva2VuIGF0IGFcbiAqIHRpbWUgYWZ0ZXIge0BsaW5rIGluaXR9IGhhcyBiZWVuIGNhbGxlZC4gV2hlbiB0aGUgYWdncmVnYXRlIHZhbHVlXG4gKiBjaGFuZ2VzLCB0aGUgbm9kZTpcbiAqXG4gKiAgIDEuIERlYWN0aXZhdGVzIHRoZSBwcmV2aW91cyBhZ2dyZWdhdGUgdG9rZW4gKGxpc3RlbmVycyBmaXJlKS5cbiAqICAgMi4gQWN0aXZhdGVzIGEgZnJlc2ggdG9rZW4gY2FycnlpbmcgdGhlIG5ldyB2YWx1ZSAobGlzdGVuZXJzIGZpcmUpLlxuICpcbiAqIFRoaXMgbWF0Y2hlcyBob3cgZG93bnN0cmVhbSBCZXRhTWVtb3J5L0pvaW5Ob2RlL1Byb2R1Y3Rpb25Ob2RlIGhhbmRsZVxuICogdXBkYXRlIHNlbWFudGljcyDigJQgdGhleSByZWx5IG9uIGRlYWN0aXZhdGUtdGhlbi1hY3RpdmF0ZSwgbm90IG9uIHRva2VuXG4gKiBtdXRhdGlvbi4ge0BsaW5rIFRva2VufSBpcyBpbW11dGFibGUgYnkgY29udmVudGlvbiwgc28gd2UgYWxsb2NhdGUgYSBuZXdcbiAqIHRva2VuIG9uIGV2ZXJ5IGNoYW5nZSByYXRoZXIgdGhhbiBtdXRhdGluZyBgYmluZGluZ3NgLlxuICpcbiAqICMjIyBJbmNyZW1lbnRhbCBzdHJhdGVneVxuICpcbiAqIEZvciBgc3VtYCwgdGhlIG5vZGUgdHJhY2tzIGEgcnVubmluZyB0b3RhbCBhbmQgdXBkYXRlcyBieSArdmFsdWUgb25cbiAqIGFjdGl2YXRlIC8g4oiSdmFsdWUgb24gZGVhY3RpdmF0ZS4gVGhpcyBhdm9pZHMgYSBmdWxsIHNjYW4gb2YgdGhlIGlucHV0XG4gKiBzZXQgb24gZXZlcnkgcmV0cmFjdCwgd2hpY2ggaXMgdGhlIHJlcXVpcmVtZW50IGNhbGxlZCBvdXQgZm9yIGxhcmdlXG4gKiBtYXRjaCBzZXRzLlxuICpcbiAqIEZvciBgY291bnRgLCB0aGUgc2l6ZSBvZiB0aGUgdW5kZXJseWluZyB2YWx1ZSBtYXAgaXMgTygxKSB0byByZWFkLlxuICpcbiAqIEZvciBgbWluYCAvIGBtYXhgLCB3ZSBzY2FuIHRoZSBjdXJyZW50IHZhbHVlIHNldCBvbiBlYWNoIHVwZGF0ZS4gQVxuICogc29ydGVkIG11bHRpc2V0IHdvdWxkIGdpdmUgTyhsb2cgbikgdXBkYXRlIGJ1dCBhdCB0aGUgY29zdCBvZlxuICogc2lnbmlmaWNhbnQgc3RydWN0dXJhbCBjb21wbGV4aXR5OyB0aGUgc2NhbiBpcyBmYXN0ICh0aWdodCBpbm5lciBsb29wXG4gKiBvdmVyIGEgYE1hcGApIGZvciB0aGUgbWF0Y2gtc2V0IHNpemVzIHRoaXMgZW5naW5lIGlzIGRlc2lnbmVkIGZvclxuICogKGh1bmRyZWRzIHRvIGxvdyB0aG91c2FuZHMgb2YgdG9rZW5zIHBlciBub2RlKS4gVGhlIHNjYWxhYmlsaXR5IHRlc3RcbiAqIGluIGBhZ2dyZWdhdGUudGVzdC50c2AgZXhlcmNpc2VzIDEwMDAgYWN0aXZhdGlvbnMgcGVyIGFnZ3JlZ2F0b3IgdG9cbiAqIGtlZXAgdGhpcyBhc3N1bXB0aW9uIGhvbmVzdC5cbiAqXG4gKiBGb3IgYGNvbGxlY3RgLCBlYWNoIGVtaXNzaW9uIGNvcGllcyB0aGUgdmFsdWUgbGlzdCBpbnRvIGEgZnJlc2ggYXJyYXlcbiAqIHNvIGRvd25zdHJlYW0gY29kZSBjYW4gc2FmZWx5IHNuYXBzaG90IGJpbmRpbmdzIHdpdGhvdXQgb2JzZXJ2aW5nXG4gKiBsYXRlciBtdXRhdGlvbnMuXG4gKlxuICogIyMjIEVtcHR5LXNldCBzZW1hbnRpY3NcbiAqXG4gKiBXaXRoIHplcm8gaW5wdXQgbWF0Y2hlcywgdGhlIG5vZGUgZW1pdHM6XG4gKiAgIC0gYGNvdW50YCAgIOKGkiBgMGBcbiAqICAgLSBgc3VtYCAgICAg4oaSIGAwYFxuICogICAtIGBtaW5gICAgICDihpIgYDBgICAobm8gbmF0dXJhbCBcImlkZW50aXR5XCI7IGAwYCBjaG9zZW4gZm9yIGNvbnNpc3RlbmN5XG4gKiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYHN1bWAsIHNvIHJ1bGVzIGNhbiB0ZXN0IGByZXN1bHQgPiAwYCBzYWZlbHkpXG4gKiAgIC0gYG1heGAgICAgIOKGkiBgMGBcbiAqICAgLSBgY29sbGVjdGAg4oaSIGBbXWBcbiAqXG4gKiBDYWxsZXJzIHRoYXQgbmVlZCB0byBkaXN0aW5ndWlzaCBcIm5vIG1hdGNoZXNcIiBmcm9tIFwibWluIGhhcHBlbnMgdG8gYmVcbiAqIHplcm9cIiBzaG91bGQgY29tYmluZSB0aGUgYWdncmVnYXRpb24gd2l0aCBhIGNvdW50IGNvbmRpdGlvbiBvciB1c2UgYW5cbiAqIEV4aXN0ZW50aWFsTm9kZSB1cHN0cmVhbS5cbiAqL1xuaW1wb3J0IHsgVG9rZW4sIHR5cGUgQmluZGluZ3MgfSBmcm9tIFwiLi9iZXRhLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eUlkIH0gZnJvbSBcIi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEF0dHJLZXksIEZhY3RWYWx1ZSB9IGZyb20gXCIuL3dtLmpzXCI7XG5cbi8qKiBTdXBwb3J0ZWQgYWdncmVnYXRvciBraW5kcy4gRXh0ZW5kaW5nIHRoaXMgbGlzdCByZXF1aXJlcyBhIG5ldyBjYXNlIGluXG4gKiAgYGFwcGx5T25BY3RpdmF0ZWAgLyBgYXBwbHlPbkRlYWN0aXZhdGVgIC8gYG1hdGVyaWFsaXplYC4gKi9cbmV4cG9ydCB0eXBlIEFnZ3JlZ2F0b3JLaW5kID0gXCJjb3VudFwiIHwgXCJzdW1cIiB8IFwibWluXCIgfCBcIm1heFwiIHwgXCJjb2xsZWN0XCI7XG5cbnR5cGUgQWN0aXZhdGVMaXN0ZW5lciA9ICh0b2tlbjogVG9rZW4pID0+IHZvaWQ7XG50eXBlIERlYWN0aXZhdGVMaXN0ZW5lciA9ICh0b2tlbjogVG9rZW4pID0+IHZvaWQ7XG5cbi8qKlxuICogU3ludGhldGljIGZhY3QgY2FycmllZCBieSBldmVyeSBhZ2dyZWdhdGUgdG9rZW4uXG4gKlxuICogQWdncmVnYXRlIHRva2VucyBkbyBub3QgZGVyaXZlIGZyb20gYSBzaW5nbGUgd29ya2luZy1tZW1vcnkgZmFjdCDigJQgdGhleVxuICogcmVwcmVzZW50IGEgc3VtbWFyeSBvZiBtYW55LiBEb3duc3RyZWFtIG5vZGVzIHRoYXQgd2FsayBgLmZhY3RgIGZvclxuICogZGlhZ25vc3RpY3Mgd2lsbCBzZWUgdGhpcyBzZW50aW5lbCByYXRoZXIgdGhhbiBhbiBhcmJpdHJhcnkgb25lIG9mIHRoZVxuICogY29udHJpYnV0aW5nIGZhY3RzLCB3aGljaCB3b3VsZCBiZSBtaXNsZWFkaW5nLlxuICpcbiAqIFRoZSBpZCBgLTFgIGlzIG91dHNpZGUgdGhlIHJhbmdlIG9mIGFueSBhcHBsaWNhdGlvbi1hc3NpZ25lZCBlbnRpdHkgaWRcbiAqIChhbGwgcmVhbCBpZHMgYXJlIGFsbG9jYXRlZCBhcyBub24tbmVnYXRpdmUgaW50ZWdlcnMg4oCUIHNlZVxuICogYHNjaGVtYS50c2ApLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIGNvbGxpc2lvbi5cbiAqL1xuY29uc3QgQUdHX0ZBQ1QgPSB7XG4gIGlkOiAtMSBhcyB1bmtub3duIGFzIEVudGl0eUlkLFxuICBhdHRyOiBcIl9fYWdnX19cIiBhcyBBdHRyS2V5LFxuICB2YWx1ZTogbnVsbCBhcyBGYWN0VmFsdWUsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY2xhc3MgQWdncmVnYXRpb25Ob2RlIHtcbiAgcmVhZG9ubHkgI2FjdGl2YXRlTGlzdGVuZXJzOiBBY3RpdmF0ZUxpc3RlbmVyW10gPSBbXTtcbiAgcmVhZG9ubHkgI2RlYWN0aXZhdGVMaXN0ZW5lcnM6IERlYWN0aXZhdGVMaXN0ZW5lcltdID0gW107XG5cbiAgLyoqXG4gICAqIEFsbCBjdXJyZW50IGlucHV0IG1hdGNoZXMga2V5ZWQgYnkgdGhlaXIgdXBzdHJlYW0gdG9rZW4sIG1hcHBlZCB0b1xuICAgKiB0aGUgYmluZGluZyB2YWx1ZSB0aGlzIG5vZGUgaXMgYWdncmVnYXRpbmcgb3Zlci5cbiAgICpcbiAgICogS2V5ZWQgYnkgdGhlIHRva2VuIHJlZmVyZW5jZSAobm90IGJ5IGJpbmRpbmcgdmFsdWUpIHNvIHRoYXQgdHdvXG4gICAqIHRva2VucyBjb250cmlidXRpbmcgdGhlIHNhbWUgdmFsdWUg4oCUIGUuZy4gdHdvIHVuaXRzIGJvdGggYXQgYGhwPTEwYFxuICAgKiDigJQgYXJlIHRyYWNrZWQgaW5kZXBlbmRlbnRseSBhbmQgYm90aCBjb250cmlidXRlIHRvIGBjb3VudGAsIGBzdW1gLFxuICAgKiBgY29sbGVjdGAsIGV0Yy5cbiAgICovXG4gIHJlYWRvbmx5ICN2YWx1ZXMgPSBuZXcgTWFwPFRva2VuLCBGYWN0VmFsdWU+KCk7XG5cbiAgLyoqIFJ1bm5pbmcgc3VtLCBrZXB0IGluIHN5bmMgd2l0aCB7QGxpbmsgI3ZhbHVlc30gZm9yIE8oMSkgdXBkYXRlIG9uIHN1bS4gKi9cbiAgI3N1bVRvdGFsID0gMDtcblxuICAvKiogVGhlIGN1cnJlbnRseS1hY3RpdmUgYWdncmVnYXRlIHRva2VuIGRvd25zdHJlYW0sIG9yIGBudWxsYCBpZiB7QGxpbmsgaW5pdH1cbiAgICogIGhhcyBub3QgeWV0IGJlZW4gY2FsbGVkLiAqL1xuICAjY3VycmVudFRva2VuOiBUb2tlbiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IGtpbmQ6IEFnZ3JlZ2F0b3JLaW5kLFxuICAgIC8qKiBWYXJpYWJsZSBuYW1lIGluIHRoZSBpbmNvbWluZyBiaW5kaW5ncyB3aG9zZSB2YWx1ZSBpcyBhZ2dyZWdhdGVkLiAqL1xuICAgIHJlYWRvbmx5IGlucHV0VmFyOiBzdHJpbmcsXG4gICAgLyoqIFZhcmlhYmxlIG5hbWUgdXNlZCBpbiB0aGUgb3V0Z29pbmcgYWdncmVnYXRlIHRva2VuJ3MgYmluZGluZ3MuICovXG4gICAgcmVhZG9ubHkgcmVzdWx0VmFyOiBzdHJpbmcsXG4gICkge31cblxuICBhZGREb3duc3RyZWFtQWN0aXZhdGUobGlzdGVuZXI6IEFjdGl2YXRlTGlzdGVuZXIpOiB2b2lkIHtcbiAgICB0aGlzLiNhY3RpdmF0ZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIGFkZERvd25zdHJlYW1EZWFjdGl2YXRlKGxpc3RlbmVyOiBEZWFjdGl2YXRlTGlzdGVuZXIpOiB2b2lkIHtcbiAgICB0aGlzLiNkZWFjdGl2YXRlTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXQgdGhlIGluaXRpYWwgYWdncmVnYXRlIHRva2VuIChyZWZsZWN0aW5nIHplcm8gaW5wdXQgbWF0Y2hlcykuXG4gICAqXG4gICAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIHdpcmluZyBkb3duc3RyZWFtIGxpc3RlbmVycy4gQWdncmVnYXRpb24gbm9kZXNcbiAgICogZGlmZmVyIGZyb20gQmV0YU1lbW9yeSAvIEpvaW5Ob2RlIGluIHRoYXQgdGhleSBhbHdheXMgaG9sZCBvbmUgYWN0aXZlXG4gICAqIGRvd25zdHJlYW0gdG9rZW4g4oCUIGV2ZW4gd2l0aCBubyBpbnB1dHMgdGhlIGFnZ3JlZ2F0ZSBpcyBkZWZpbmVkXG4gICAqIChjb3VudD0wLCBzdW09MCwgY29sbGVjdD1bXSkgYW5kIHJ1bGVzIG1heSBsZWdpdGltYXRlbHkgZGVwZW5kIG9uIGl0LlxuICAgKi9cbiAgaW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLiNlbWl0VXBkYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3JkIGEgbmV3IGlucHV0IG1hdGNoIGFuZCBlbWl0IHRoZSB1cGRhdGVkIGFnZ3JlZ2F0ZS5cbiAgICpcbiAgICogSWRlbXBvdGVuY3k6IHJlLWFjdGl2YXRpbmcgdGhlIHNhbWUgdG9rZW4gcmVmZXJlbmNlIGlzIG5vdCBzdXBwb3J0ZWRcbiAgICogYnkgdXBzdHJlYW0gY2FsbGVycyAoQmV0YU1lbW9yeSBhbHdheXMgZGVhY3RpdmF0ZXMgYmVmb3JlIHJlLWFjdGl2YXRpbmdcbiAgICogYSBjaGFuZ2VkIHBhcnRpYWwgbWF0Y2gpLiBXZSBvdmVyd3JpdGUgc2lsZW50bHkgdG8gYXZvaWQgYSBzaWxlbnRcbiAgICogZG91YmxlLWNvdW50IG9mIGBzdW1gIGluIHRoYXQgZGVnZW5lcmF0ZSBjYXNlLCBidXQgdGhlIGNhbGxlciBzaG91bGRcbiAgICogbm90IHJlbHkgb24gdGhpcy5cbiAgICovXG4gIGxlZnRBY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuI3JlYWRWYWx1ZSh0b2tlbik7XG5cbiAgICAvLyBJZiB0aGUgdG9rZW4gaXMgYWxyZWFkeSB0cmFja2VkIChzaG91bGRuJ3QgaGFwcGVuIGluIHdlbGwtd2lyZWRcbiAgICAvLyBuZXR3b3JrcyksIHN1YnRyYWN0IHRoZSBvbGQgY29udHJpYnV0aW9uIGZyb20gdGhlIHJ1bm5pbmcgc3VtIGZpcnN0XG4gICAgLy8gc28gdGhlIG5ldyB2YWx1ZSByZXBsYWNlcyDigJQgbm90IGFkZHMgdG8g4oCUIHRoZSBvbGQuXG4gICAgaWYgKHRoaXMuI3ZhbHVlcy5oYXModG9rZW4pICYmIHRoaXMua2luZCA9PT0gXCJzdW1cIikge1xuICAgICAgY29uc3QgcHJldiA9IHRoaXMuI3ZhbHVlcy5nZXQodG9rZW4pO1xuICAgICAgaWYgKHR5cGVvZiBwcmV2ID09PSBcIm51bWJlclwiKSB0aGlzLiNzdW1Ub3RhbCAtPSBwcmV2O1xuICAgIH1cblxuICAgIHRoaXMuI3ZhbHVlcy5zZXQodG9rZW4sIHZhbHVlKTtcblxuICAgIGlmICh0aGlzLmtpbmQgPT09IFwic3VtXCIgJiYgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICB0aGlzLiNzdW1Ub3RhbCArPSB2YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLiNlbWl0VXBkYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmFjdCBhbiBpbnB1dCBtYXRjaCBhbmQgZW1pdCB0aGUgdXBkYXRlZCBhZ2dyZWdhdGUuXG4gICAqXG4gICAqIFVua25vd24gdG9rZW5zIGFyZSBhIG5vLW9wIG9uIHRoZSBpbnRlcm5hbCBzdGF0ZSBidXQgc3RpbGwgdHJpZ2dlciBhXG4gICAqIGRvd25zdHJlYW0gZW1pdCwgbWlycm9yaW5nIHtAbGluayBCZXRhTWVtb3J5LmxlZnREZWFjdGl2YXRlfSdzIGxlbmllbnRcbiAgICogY29udHJhY3Qg4oCUIGRvd25zdHJlYW0gbWF5IGhhdmUgZGVyaXZlZCB0b2tlbnMgdGhhdCBuZWVkIHRvIHNldHRsZSB0b1xuICAgKiBhIGNvbnNpc3RlbnQgYWdncmVnYXRlIHZhbHVlIHJlZ2FyZGxlc3MuXG4gICAqL1xuICBsZWZ0RGVhY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICBjb25zdCBoYWQgPSB0aGlzLiN2YWx1ZXMuaGFzKHRva2VuKTtcbiAgICBpZiAoaGFkICYmIHRoaXMua2luZCA9PT0gXCJzdW1cIikge1xuICAgICAgY29uc3QgcHJldiA9IHRoaXMuI3ZhbHVlcy5nZXQodG9rZW4pO1xuICAgICAgaWYgKHR5cGVvZiBwcmV2ID09PSBcIm51bWJlclwiKSB0aGlzLiNzdW1Ub3RhbCAtPSBwcmV2O1xuICAgIH1cbiAgICB0aGlzLiN2YWx1ZXMuZGVsZXRlKHRva2VuKTtcbiAgICB0aGlzLiNlbWl0VXBkYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVhZCB0aGUgYWdncmVnYXRpb24gdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gdG9rZW4ncyBiaW5kaW5ncy5cbiAgICpcbiAgICogRmFsbHMgYmFjayB0byBgMGAgd2hlbiB0aGUgYmluZGluZyBpcyBtaXNzaW5nIHNvIHRoYXQgY2FsbGVycyB3aG9cbiAgICogaW5jb3JyZWN0bHkgd2lyZSB0aGUgbm9kZSBkb24ndCBjcmFzaDsgYWdncmVnYXRlZCBiaW5kaW5ncyB0aGF0IGFyZVxuICAgKiBtaXNzaW5nIHdvdWxkIGJlIGEgbmV0d29yay13aXJpbmcgYnVnIHdoaWNoIHN1cmZhY2VzIGFzIFwic3VtIG5vdFxuICAgKiBjaGFuZ2luZ1wiIHJhdGhlciB0aGFuIGFuIG9wYXF1ZSBgTmFOYC5cbiAgICovXG4gICNyZWFkVmFsdWUodG9rZW46IFRva2VuKTogRmFjdFZhbHVlIHtcbiAgICBjb25zdCB2ID0gdG9rZW4uYmluZGluZ3NbdGhpcy5pbnB1dFZhcl07XG4gICAgcmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/IDAgOiB2O1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGUgdGhlIHByZXZpb3VzIGFnZ3JlZ2F0ZSB0b2tlbiAoaWYgYW55KSBhbmQgYWN0aXZhdGUgYSBuZXdcbiAgICogb25lIGNhcnJ5aW5nIHRoZSBmcmVzaGx5LWNvbXB1dGVkIHJlc3VsdC5cbiAgICovXG4gICNlbWl0VXBkYXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuI21hdGVyaWFsaXplKCk7XG4gICAgY29uc3QgYmluZGluZ3M6IEJpbmRpbmdzID0geyBbdGhpcy5yZXN1bHRWYXJdOiByZXN1bHQgfTtcbiAgICBjb25zdCBuZXdUb2tlbiA9IG5ldyBUb2tlbihudWxsLCBBR0dfRkFDVCwgYmluZGluZ3MpO1xuXG4gICAgLy8gRGVhY3RpdmF0ZSB0aGUgb2xkIGFnZ3JlZ2F0ZSB0b2tlbiBmaXJzdCwgc28gZG93bnN0cmVhbSBzZWVzIGEgY2xlYW5cbiAgICAvLyB0cmFuc2l0aW9uIChkZWFjdGl2YXRlLXRoZW4tYWN0aXZhdGUpIHJhdGhlciB0aGFuIHR3byBzaW11bHRhbmVvdXNseVxuICAgIC8vIGFjdGl2ZSBzdW1tYXJpZXMgb2YgdGhlIHNhbWUgaW5wdXQgc2V0LlxuICAgIGNvbnN0IHByZXYgPSB0aGlzLiNjdXJyZW50VG9rZW47XG4gICAgdGhpcy4jY3VycmVudFRva2VuID0gbmV3VG9rZW47XG5cbiAgICBpZiAocHJldiAhPT0gbnVsbCkge1xuICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNkZWFjdGl2YXRlTGlzdGVuZXJzKSBsaXN0ZW5lcihwcmV2KTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNhY3RpdmF0ZUxpc3RlbmVycykgbGlzdGVuZXIobmV3VG9rZW4pO1xuICB9XG5cbiAgLyoqIENvbXB1dGUgdGhlIGN1cnJlbnQgYWdncmVnYXRlIHZhbHVlIGZyb20gaW50ZXJuYWwgc3RhdGUuICovXG4gICNtYXRlcmlhbGl6ZSgpOiBGYWN0VmFsdWUge1xuICAgIHN3aXRjaCAodGhpcy5raW5kKSB7XG4gICAgICBjYXNlIFwiY291bnRcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuI3ZhbHVlcy5zaXplO1xuXG4gICAgICBjYXNlIFwic3VtXCI6XG4gICAgICAgIC8vIGAjc3VtVG90YWxgIGlzIGtlcHQgaW5jcmVtZW50YWxseSBpbiBzeW5jIG9uIGFjdGl2YXRlL2RlYWN0aXZhdGUuXG4gICAgICAgIHJldHVybiB0aGlzLiNzdW1Ub3RhbDtcblxuICAgICAgY2FzZSBcIm1pblwiOlxuICAgICAgICByZXR1cm4gdGhpcy4jc2NhbkV4dHJlbXVtKFwibWluXCIpO1xuXG4gICAgICBjYXNlIFwibWF4XCI6XG4gICAgICAgIHJldHVybiB0aGlzLiNzY2FuRXh0cmVtdW0oXCJtYXhcIik7XG5cbiAgICAgIGNhc2UgXCJjb2xsZWN0XCI6XG4gICAgICAgIC8vIEZyZXNoIGFycmF5IHBlciBlbWl0IHNvIGRvd25zdHJlYW0gc25hcHNob3RzIGFyZSBub3QgYWZmZWN0ZWQgYnlcbiAgICAgICAgLy8gbGF0ZXIgYWN0aXZhdGlvbnMg4oCUIHNlZSB0aGUgXCJmcmVzaCBhcnJheVwiIHRlc3QgaW5cbiAgICAgICAgLy8gYGFnZ3JlZ2F0ZS50ZXN0LnRzYC5cbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLiN2YWx1ZXMudmFsdWVzKCldO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTY2FuIHRoZSBjdXJyZW50IHZhbHVlIHNldCBmb3IgdGhlIG1pbiBvciBtYXguXG4gICAqXG4gICAqIFJldHVybnMgYDBgIGZvciB0aGUgZW1wdHkgc2V0IChzZWUgbW9kdWxlIGhlYWRlciBmb3IgcmF0aW9uYWxlKSBzb1xuICAgKiBkb3duc3RyZWFtIHJ1bGVzIGRvbid0IGhhdmUgdG8gc3BlY2lhbC1jYXNlIGB1bmRlZmluZWRgLiBOb24tbnVtZXJpY1xuICAgKiB2YWx1ZXMgYXJlIHNraXBwZWQg4oCUIGlmIHRoZSBjYWxsZXIgYWdncmVnYXRlcyBgbWluYCBvdmVyIGEgc3RyaW5nXG4gICAqIGJpbmRpbmcsIHRoYXQgaXMgYSB3aXJpbmcgYnVnOyB0aGUgYmVzdCByZWNvdmVyYWJsZSBiZWhhdmlvdXIgaXMgdG9cbiAgICogaWdub3JlIHRoZSBub24tbnVtZXJpYyBlbnRyaWVzIHJhdGhlciB0aGFuIGVtaXQgYE5hTmAuXG4gICAqL1xuICAjc2NhbkV4dHJlbXVtKHdoaWNoOiBcIm1pblwiIHwgXCJtYXhcIik6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuI3ZhbHVlcy5zaXplID09PSAwKSByZXR1cm4gMDtcbiAgICBsZXQgYmVzdDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgZm9yIChjb25zdCB2IG9mIHRoaXMuI3ZhbHVlcy52YWx1ZXMoKSkge1xuICAgICAgaWYgKHR5cGVvZiB2ICE9PSBcIm51bWJlclwiKSBjb250aW51ZTtcbiAgICAgIGlmIChiZXN0ID09PSBudWxsKSB7XG4gICAgICAgIGJlc3QgPSB2O1xuICAgICAgfSBlbHNlIGlmICh3aGljaCA9PT0gXCJtaW5cIiA/IHYgPCBiZXN0IDogdiA+IGJlc3QpIHtcbiAgICAgICAgYmVzdCA9IHY7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBiZXN0ID8/IDA7XG4gIH1cbn1cbiJdLCJmaWxlIjoiL3NyYy9hZ2dyZWdhdGUudHMifQ== diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/a065c15443140b905f33d7c0aed358751306bd38 b/IJGn1F-WxLUCbfU1lu8pU/ssr/a065c15443140b905f33d7c0aed358751306bd38 deleted file mode 100644 index 1119ff1..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/a065c15443140b905f33d7c0aed358751306bd38 +++ /dev/null @@ -1,132 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("vitest", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/serialize.ts", {"importedNames":["serialize","deserialize","RULE_SCHEMA_V1"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/registry.ts", {"importedNames":["HandlerRegistry"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/builder.ts", {"importedNames":["v"]}); -const mkId = (n) => n; -function makeRegistry(...names) { - const r = new __vite_ssr_import_2__.HandlerRegistry(); - for (const name of names) r.register(name, () => { - }); - return r; -} -(0,__vite_ssr_import_0__.describe)("serialize()", () => { - (0,__vite_ssr_import_0__.it)("serializes a simple rule to JSON-compatible object", () => { - const rule = { - name: "move-player", - salience: 0, - conditions: [{ id: mkId(1), attr: "X", binding: (0,__vite_ssr_import_3__.v)("x"), idBinding: void 0 }], - handler: "moveHandler", - handlerArgs: void 0 - }; - const json = (0,__vite_ssr_import_1__.serialize)(rule); - (0,__vite_ssr_import_0__.expect)(json.name).toBe("move-player"); - (0,__vite_ssr_import_0__.expect)(json.salience).toBe(0); - (0,__vite_ssr_import_0__.expect)(json.handler).toBe("moveHandler"); - (0,__vite_ssr_import_0__.expect)(json.conditions).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(JSON.stringify(json)).not.toContain("function"); - }); - (0,__vite_ssr_import_0__.it)("serializes wildcard id as null", () => { - const rule = { - name: "wildcard", - salience: 5, - conditions: [{ id: null, attr: "Health", binding: (0,__vite_ssr_import_3__.v)("hp"), idBinding: (0,__vite_ssr_import_3__.v)("eid") }], - handler: "h", - handlerArgs: ["arg1"] - }; - const json = (0,__vite_ssr_import_1__.serialize)(rule); - (0,__vite_ssr_import_0__.expect)(json.conditions[0]?.id).toBeNull(); - (0,__vite_ssr_import_0__.expect)(json.conditions[0]?.idBinding).toBe("eid"); - (0,__vite_ssr_import_0__.expect)(json.handlerArgs).toEqual(["arg1"]); - (0,__vite_ssr_import_0__.expect)(json.salience).toBe(5); - }); - (0,__vite_ssr_import_0__.it)("serializes rule with no binding (binding: null)", () => { - const rule = { - name: "no-bind", - salience: 0, - conditions: [{ id: mkId(42), attr: "Flag", binding: null, idBinding: void 0 }], - handler: "flagHandler" - }; - const json = (0,__vite_ssr_import_1__.serialize)(rule); - (0,__vite_ssr_import_0__.expect)(json.conditions[0]?.binding).toBeNull(); - }); -}); -(0,__vite_ssr_import_0__.describe)("deserialize()", () => { - (0,__vite_ssr_import_0__.it)("deserializes a serialized rule back to RuleDefinition", () => { - const registry = makeRegistry("moveHandler"); - const rule = { - name: "round-trip-1", - salience: 0, - conditions: [{ id: mkId(1), attr: "X", binding: (0,__vite_ssr_import_3__.v)("x") }], - handler: "moveHandler" - }; - const json = (0,__vite_ssr_import_1__.serialize)(rule); - const restored = (0,__vite_ssr_import_1__.deserialize)(json, registry); - (0,__vite_ssr_import_0__.expect)(restored.name).toBe("round-trip-1"); - (0,__vite_ssr_import_0__.expect)(restored.handler).toBe("moveHandler"); - (0,__vite_ssr_import_0__.expect)(restored.conditions).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(restored.conditions[0]?.binding?.name).toBe("x"); - }); - (0,__vite_ssr_import_0__.it)("throws UnknownHandlerError for unregistered handler", () => { - const registry = new __vite_ssr_import_2__.HandlerRegistry(); - const json = { - name: "bad", - salience: 0, - conditions: [], - handler: "missingHandler" - }; - (0,__vite_ssr_import_0__.expect)(() => (0,__vite_ssr_import_1__.deserialize)(json, registry)).toThrow("UnknownHandlerError"); - }); - (0,__vite_ssr_import_0__.it)("throws on malformed JSON (missing name)", () => { - const registry = makeRegistry("h"); - const bad = { salience: 0, conditions: [], handler: "h" }; - (0,__vite_ssr_import_0__.expect)(() => (0,__vite_ssr_import_1__.deserialize)(bad, registry)).toThrow(); - }); -}); -(0,__vite_ssr_import_0__.describe)("round-trip equivalence (10 shapes)", () => { - const registry = makeRegistry("h1", "h2", "h3"); - const shapes = [ - // shape 1: minimal - { name: "s1", salience: 0, conditions: [], handler: "h1" }, - // shape 2: single condition, exact id - { name: "s2", salience: 0, conditions: [{ id: mkId(1), attr: "A", binding: (0,__vite_ssr_import_3__.v)("a") }], handler: "h1" }, - // shape 3: wildcard id - { name: "s3", salience: 0, conditions: [{ id: null, attr: "B", binding: (0,__vite_ssr_import_3__.v)("b") }], handler: "h1" }, - // shape 4: multiple conditions - { name: "s4", salience: 0, conditions: [{ id: mkId(1), attr: "X", binding: (0,__vite_ssr_import_3__.v)("x") }, { id: mkId(1), attr: "Y", binding: (0,__vite_ssr_import_3__.v)("y") }], handler: "h2" }, - // shape 5: with salience - { name: "s5", salience: 10, conditions: [{ id: null, attr: "C", binding: null }], handler: "h2" }, - // shape 6: with idBinding - { name: "s6", salience: 0, conditions: [{ id: null, attr: "D", binding: (0,__vite_ssr_import_3__.v)("d"), idBinding: (0,__vite_ssr_import_3__.v)("eid") }], handler: "h3" }, - // shape 7: with handlerArgs - { name: "s7", salience: 0, conditions: [], handler: "h1", handlerArgs: [1, "two", true] }, - // shape 8: null binding - { name: "s8", salience: 0, conditions: [{ id: mkId(5), attr: "Flag", binding: null }], handler: "h2" }, - // shape 9: high salience + multiple conditions - { name: "s9", salience: 100, conditions: [{ id: mkId(1), attr: "A", binding: (0,__vite_ssr_import_3__.v)("a") }, { id: null, attr: "B", binding: (0,__vite_ssr_import_3__.v)("b") }], handler: "h3" }, - // shape 10: empty handlerArgs - { name: "s10", salience: -5, conditions: [], handler: "h3", handlerArgs: [] } - ]; - for (const shape of shapes) { - (0,__vite_ssr_import_0__.it)(`round-trip shape: ${shape.name}`, () => { - const json = (0,__vite_ssr_import_1__.serialize)(shape); - const restored = (0,__vite_ssr_import_1__.deserialize)(json, registry); - const json2 = (0,__vite_ssr_import_1__.serialize)(restored); - (0,__vite_ssr_import_0__.expect)(JSON.stringify(json2)).toBe(JSON.stringify(json)); - }); - } -}); -(0,__vite_ssr_import_0__.describe)("RULE_SCHEMA_V1", () => { - (0,__vite_ssr_import_0__.it)("validates a valid rule JSON", () => { - const valid = { name: "x", salience: 0, conditions: [], handler: "h" }; - const result = __vite_ssr_import_1__.RULE_SCHEMA_V1.safeParse(valid); - (0,__vite_ssr_import_0__.expect)(result.success).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("rejects a rule with missing name", () => { - const bad = { salience: 0, conditions: [], handler: "h" }; - const result = __vite_ssr_import_1__.RULE_SCHEMA_V1.safeParse(bad); - (0,__vite_ssr_import_0__.expect)(result.success).toBe(false); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QU8saUNBQVUsS0FBSztBQUM1QixZQUFNLGNBQVcsbUNBQVksTUFBTSxRQUFRO0FBRTNDLFlBQU0sV0FBUSxpQ0FBVSxRQUFRO0FBQ2hDLHVDQUFPLEtBQUssVUFBVSxLQUFLLENBQUMsRUFBRSxLQUFLLEtBQUssVUFBVSxJQUFJLENBQUM7QUFBQSxJQUN6RCxDQUFDO0FBQUEsRUFDSDtBQUNGLENBQUM7R0FFRCxnQ0FBUyxrQkFBa0IsTUFBTTtBQUMvQiwrQkFBRywrQkFBK0IsTUFBTTtBQUN0QyxVQUFNLFFBQVEsRUFBRSxNQUFNLEtBQUssVUFBVSxHQUFHLFlBQVksQ0FBQyxHQUFHLFNBQVMsSUFBSTtBQUNyRSxVQUFNLFNBQVMscUNBQWUsVUFBVSxLQUFLO0FBQzdDLHFDQUFPLE9BQU8sT0FBTyxFQUFFLEtBQUssSUFBSTtBQUFBLEVBQ2xDLENBQUM7QUFFRCwrQkFBRyxvQ0FBb0MsTUFBTTtBQUMzQyxVQUFNLE1BQU0sRUFBRSxVQUFVLEdBQUcsWUFBWSxDQUFDLEdBQUcsU0FBUyxJQUFJO0FBQ3hELFVBQU0sU0FBUyxxQ0FBZSxVQUFVLEdBQUc7QUFDM0MscUNBQU8sT0FBTyxPQUFPLEVBQUUsS0FBSyxLQUFLO0FBQUEsRUFDbkMsQ0FBQztBQUNILENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInNlcmlhbGl6ZS50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBpdCwgZXhwZWN0IH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IHsgc2VyaWFsaXplLCBkZXNlcmlhbGl6ZSwgUlVMRV9TQ0hFTUFfVjEgfSBmcm9tIFwiLi9zZXJpYWxpemUuanNcIjtcbmltcG9ydCB7IEhhbmRsZXJSZWdpc3RyeSB9IGZyb20gXCIuL3JlZ2lzdHJ5LmpzXCI7XG5pbXBvcnQgeyB2IH0gZnJvbSBcIi4vYnVpbGRlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuXG5jb25zdCBta0lkID0gKG46IG51bWJlcikgPT4gbiBhcyBFbnRpdHlJZDtcblxuZnVuY3Rpb24gbWFrZVJlZ2lzdHJ5KC4uLm5hbWVzOiBzdHJpbmdbXSk6IEhhbmRsZXJSZWdpc3RyeSB7XG4gIGNvbnN0IHIgPSBuZXcgSGFuZGxlclJlZ2lzdHJ5KCk7XG4gIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykgci5yZWdpc3RlcihuYW1lLCAoKSA9PiB7fSk7XG4gIHJldHVybiByO1xufVxuXG5kZXNjcmliZShcInNlcmlhbGl6ZSgpXCIsICgpID0+IHtcbiAgaXQoXCJzZXJpYWxpemVzIGEgc2ltcGxlIHJ1bGUgdG8gSlNPTi1jb21wYXRpYmxlIG9iamVjdFwiLCAoKSA9PiB7XG4gICAgY29uc3QgcnVsZSA9IHtcbiAgICAgIG5hbWU6IFwibW92ZS1wbGF5ZXJcIixcbiAgICAgIHNhbGllbmNlOiAwLFxuICAgICAgY29uZGl0aW9uczogW3sgaWQ6IG1rSWQoMSksIGF0dHI6IFwiWFwiLCBiaW5kaW5nOiB2KFwieFwiKSwgaWRCaW5kaW5nOiB1bmRlZmluZWQgfV0sXG4gICAgICBoYW5kbGVyOiBcIm1vdmVIYW5kbGVyXCIsXG4gICAgICBoYW5kbGVyQXJnczogdW5kZWZpbmVkLFxuICAgIH07XG4gICAgY29uc3QganNvbiA9IHNlcmlhbGl6ZShydWxlKTtcbiAgICBleHBlY3QoanNvbi5uYW1lKS50b0JlKFwibW92ZS1wbGF5ZXJcIik7XG4gICAgZXhwZWN0KGpzb24uc2FsaWVuY2UpLnRvQmUoMCk7XG4gICAgZXhwZWN0KGpzb24uaGFuZGxlcikudG9CZShcIm1vdmVIYW5kbGVyXCIpO1xuICAgIGV4cGVjdChqc29uLmNvbmRpdGlvbnMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoanNvbikpLm5vdC50b0NvbnRhaW4oXCJmdW5jdGlvblwiKTsgLy8gbm8gZnVuY3Rpb24gcmVmc1xuICB9KTtcblxuICBpdChcInNlcmlhbGl6ZXMgd2lsZGNhcmQgaWQgYXMgbnVsbFwiLCAoKSA9PiB7XG4gICAgY29uc3QgcnVsZSA9IHtcbiAgICAgIG5hbWU6IFwid2lsZGNhcmRcIixcbiAgICAgIHNhbGllbmNlOiA1LFxuICAgICAgY29uZGl0aW9uczogW3sgaWQ6IG51bGwsIGF0dHI6IFwiSGVhbHRoXCIsIGJpbmRpbmc6IHYoXCJocFwiKSwgaWRCaW5kaW5nOiB2KFwiZWlkXCIpIH1dLFxuICAgICAgaGFuZGxlcjogXCJoXCIsXG4gICAgICBoYW5kbGVyQXJnczogW1wiYXJnMVwiXSxcbiAgICB9O1xuICAgIGNvbnN0IGpzb24gPSBzZXJpYWxpemUocnVsZSk7XG4gICAgZXhwZWN0KGpzb24uY29uZGl0aW9uc1swXT8uaWQpLnRvQmVOdWxsKCk7XG4gICAgZXhwZWN0KGpzb24uY29uZGl0aW9uc1swXT8uaWRCaW5kaW5nKS50b0JlKFwiZWlkXCIpO1xuICAgIGV4cGVjdChqc29uLmhhbmRsZXJBcmdzKS50b0VxdWFsKFtcImFyZzFcIl0pO1xuICAgIGV4cGVjdChqc29uLnNhbGllbmNlKS50b0JlKDUpO1xuICB9KTtcblxuICBpdChcInNlcmlhbGl6ZXMgcnVsZSB3aXRoIG5vIGJpbmRpbmcgKGJpbmRpbmc6IG51bGwpXCIsICgpID0+IHtcbiAgICBjb25zdCBydWxlID0ge1xuICAgICAgbmFtZTogXCJuby1iaW5kXCIsXG4gICAgICBzYWxpZW5jZTogMCxcbiAgICAgIGNvbmRpdGlvbnM6IFt7IGlkOiBta0lkKDQyKSwgYXR0cjogXCJGbGFnXCIsIGJpbmRpbmc6IG51bGwsIGlkQmluZGluZzogdW5kZWZpbmVkIH1dLFxuICAgICAgaGFuZGxlcjogXCJmbGFnSGFuZGxlclwiLFxuICAgIH07XG4gICAgY29uc3QganNvbiA9IHNlcmlhbGl6ZShydWxlKTtcbiAgICBleHBlY3QoanNvbi5jb25kaXRpb25zWzBdPy5iaW5kaW5nKS50b0JlTnVsbCgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImRlc2VyaWFsaXplKClcIiwgKCkgPT4ge1xuICBpdChcImRlc2VyaWFsaXplcyBhIHNlcmlhbGl6ZWQgcnVsZSBiYWNrIHRvIFJ1bGVEZWZpbml0aW9uXCIsICgpID0+IHtcbiAgICBjb25zdCByZWdpc3RyeSA9IG1ha2VSZWdpc3RyeShcIm1vdmVIYW5kbGVyXCIpO1xuICAgIGNvbnN0IHJ1bGUgPSB7XG4gICAgICBuYW1lOiBcInJvdW5kLXRyaXAtMVwiLFxuICAgICAgc2FsaWVuY2U6IDAsXG4gICAgICBjb25kaXRpb25zOiBbeyBpZDogbWtJZCgxKSwgYXR0cjogXCJYXCIsIGJpbmRpbmc6IHYoXCJ4XCIpIH1dLFxuICAgICAgaGFuZGxlcjogXCJtb3ZlSGFuZGxlclwiLFxuICAgIH07XG4gICAgY29uc3QganNvbiA9IHNlcmlhbGl6ZShydWxlKTtcbiAgICBjb25zdCByZXN0b3JlZCA9IGRlc2VyaWFsaXplKGpzb24sIHJlZ2lzdHJ5KTtcbiAgICBleHBlY3QocmVzdG9yZWQubmFtZSkudG9CZShcInJvdW5kLXRyaXAtMVwiKTtcbiAgICBleHBlY3QocmVzdG9yZWQuaGFuZGxlcikudG9CZShcIm1vdmVIYW5kbGVyXCIpO1xuICAgIGV4cGVjdChyZXN0b3JlZC5jb25kaXRpb25zKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgZXhwZWN0KHJlc3RvcmVkLmNvbmRpdGlvbnNbMF0/LmJpbmRpbmc/Lm5hbWUpLnRvQmUoXCJ4XCIpO1xuICB9KTtcblxuICBpdChcInRocm93cyBVbmtub3duSGFuZGxlckVycm9yIGZvciB1bnJlZ2lzdGVyZWQgaGFuZGxlclwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVnaXN0cnkgPSBuZXcgSGFuZGxlclJlZ2lzdHJ5KCk7XG4gICAgY29uc3QganNvbiA9IHtcbiAgICAgIG5hbWU6IFwiYmFkXCIsXG4gICAgICBzYWxpZW5jZTogMCxcbiAgICAgIGNvbmRpdGlvbnM6IFtdLFxuICAgICAgaGFuZGxlcjogXCJtaXNzaW5nSGFuZGxlclwiLFxuICAgIH07XG4gICAgZXhwZWN0KCgpID0+IGRlc2VyaWFsaXplKGpzb24sIHJlZ2lzdHJ5KSkudG9UaHJvdyhcIlVua25vd25IYW5kbGVyRXJyb3JcIik7XG4gIH0pO1xuXG4gIGl0KFwidGhyb3dzIG9uIG1hbGZvcm1lZCBKU09OIChtaXNzaW5nIG5hbWUpXCIsICgpID0+IHtcbiAgICBjb25zdCByZWdpc3RyeSA9IG1ha2VSZWdpc3RyeShcImhcIik7XG4gICAgY29uc3QgYmFkID0geyBzYWxpZW5jZTogMCwgY29uZGl0aW9uczogW10sIGhhbmRsZXI6IFwiaFwiIH07XG4gICAgZXhwZWN0KCgpID0+IGRlc2VyaWFsaXplKGJhZCBhcyBuZXZlciwgcmVnaXN0cnkpKS50b1Rocm93KCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwicm91bmQtdHJpcCBlcXVpdmFsZW5jZSAoMTAgc2hhcGVzKVwiLCAoKSA9PiB7XG4gIGNvbnN0IHJlZ2lzdHJ5ID0gbWFrZVJlZ2lzdHJ5KFwiaDFcIiwgXCJoMlwiLCBcImgzXCIpO1xuXG4gIGNvbnN0IHNoYXBlcyA9IFtcbiAgICAvLyBzaGFwZSAxOiBtaW5pbWFsXG4gICAgeyBuYW1lOiBcInMxXCIsIHNhbGllbmNlOiAwLCBjb25kaXRpb25zOiBbXSwgaGFuZGxlcjogXCJoMVwiIH0sXG4gICAgLy8gc2hhcGUgMjogc2luZ2xlIGNvbmRpdGlvbiwgZXhhY3QgaWRcbiAgICB7IG5hbWU6IFwiczJcIiwgc2FsaWVuY2U6IDAsIGNvbmRpdGlvbnM6IFt7IGlkOiBta0lkKDEpLCBhdHRyOiBcIkFcIiwgYmluZGluZzogdihcImFcIikgfV0sIGhhbmRsZXI6IFwiaDFcIiB9LFxuICAgIC8vIHNoYXBlIDM6IHdpbGRjYXJkIGlkXG4gICAgeyBuYW1lOiBcInMzXCIsIHNhbGllbmNlOiAwLCBjb25kaXRpb25zOiBbeyBpZDogbnVsbCwgYXR0cjogXCJCXCIsIGJpbmRpbmc6IHYoXCJiXCIpIH1dLCBoYW5kbGVyOiBcImgxXCIgfSxcbiAgICAvLyBzaGFwZSA0OiBtdWx0aXBsZSBjb25kaXRpb25zXG4gICAgeyBuYW1lOiBcInM0XCIsIHNhbGllbmNlOiAwLCBjb25kaXRpb25zOiBbeyBpZDogbWtJZCgxKSwgYXR0cjogXCJYXCIsIGJpbmRpbmc6IHYoXCJ4XCIpIH0sIHsgaWQ6IG1rSWQoMSksIGF0dHI6IFwiWVwiLCBiaW5kaW5nOiB2KFwieVwiKSB9XSwgaGFuZGxlcjogXCJoMlwiIH0sXG4gICAgLy8gc2hhcGUgNTogd2l0aCBzYWxpZW5jZVxuICAgIHsgbmFtZTogXCJzNVwiLCBzYWxpZW5jZTogMTAsIGNvbmRpdGlvbnM6IFt7IGlkOiBudWxsLCBhdHRyOiBcIkNcIiwgYmluZGluZzogbnVsbCB9XSwgaGFuZGxlcjogXCJoMlwiIH0sXG4gICAgLy8gc2hhcGUgNjogd2l0aCBpZEJpbmRpbmdcbiAgICB7IG5hbWU6IFwiczZcIiwgc2FsaWVuY2U6IDAsIGNvbmRpdGlvbnM6IFt7IGlkOiBudWxsLCBhdHRyOiBcIkRcIiwgYmluZGluZzogdihcImRcIiksIGlkQmluZGluZzogdihcImVpZFwiKSB9XSwgaGFuZGxlcjogXCJoM1wiIH0sXG4gICAgLy8gc2hhcGUgNzogd2l0aCBoYW5kbGVyQXJnc1xuICAgIHsgbmFtZTogXCJzN1wiLCBzYWxpZW5jZTogMCwgY29uZGl0aW9uczogW10sIGhhbmRsZXI6IFwiaDFcIiwgaGFuZGxlckFyZ3M6IFsxLCBcInR3b1wiLCB0cnVlXSB9LFxuICAgIC8vIHNoYXBlIDg6IG51bGwgYmluZGluZ1xuICAgIHsgbmFtZTogXCJzOFwiLCBzYWxpZW5jZTogMCwgY29uZGl0aW9uczogW3sgaWQ6IG1rSWQoNSksIGF0dHI6IFwiRmxhZ1wiLCBiaW5kaW5nOiBudWxsIH1dLCBoYW5kbGVyOiBcImgyXCIgfSxcbiAgICAvLyBzaGFwZSA5OiBoaWdoIHNhbGllbmNlICsgbXVsdGlwbGUgY29uZGl0aW9uc1xuICAgIHsgbmFtZTogXCJzOVwiLCBzYWxpZW5jZTogMTAwLCBjb25kaXRpb25zOiBbeyBpZDogbWtJZCgxKSwgYXR0cjogXCJBXCIsIGJpbmRpbmc6IHYoXCJhXCIpIH0sIHsgaWQ6IG51bGwsIGF0dHI6IFwiQlwiLCBiaW5kaW5nOiB2KFwiYlwiKSB9XSwgaGFuZGxlcjogXCJoM1wiIH0sXG4gICAgLy8gc2hhcGUgMTA6IGVtcHR5IGhhbmRsZXJBcmdzXG4gICAgeyBuYW1lOiBcInMxMFwiLCBzYWxpZW5jZTogLTUsIGNvbmRpdGlvbnM6IFtdLCBoYW5kbGVyOiBcImgzXCIsIGhhbmRsZXJBcmdzOiBbXSB9LFxuICBdIGFzIGNvbnN0O1xuXG4gIGZvciAoY29uc3Qgc2hhcGUgb2Ygc2hhcGVzKSB7XG4gICAgaXQoYHJvdW5kLXRyaXAgc2hhcGU6ICR7c2hhcGUubmFtZX1gLCAoKSA9PiB7XG4gICAgICBjb25zdCBqc29uID0gc2VyaWFsaXplKHNoYXBlKTtcbiAgICAgIGNvbnN0IHJlc3RvcmVkID0gZGVzZXJpYWxpemUoanNvbiwgcmVnaXN0cnkpO1xuICAgICAgLy8gUmUtc2VyaWFsaXplIHJlc3RvcmVkIGFuZCBjb21wYXJlIEpTT04gc3RyaW5nc1xuICAgICAgY29uc3QganNvbjIgPSBzZXJpYWxpemUocmVzdG9yZWQpO1xuICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGpzb24yKSkudG9CZShKU09OLnN0cmluZ2lmeShqc29uKSk7XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5kZXNjcmliZShcIlJVTEVfU0NIRU1BX1YxXCIsICgpID0+IHtcbiAgaXQoXCJ2YWxpZGF0ZXMgYSB2YWxpZCBydWxlIEpTT05cIiwgKCkgPT4ge1xuICAgIGNvbnN0IHZhbGlkID0geyBuYW1lOiBcInhcIiwgc2FsaWVuY2U6IDAsIGNvbmRpdGlvbnM6IFtdLCBoYW5kbGVyOiBcImhcIiB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IFJVTEVfU0NIRU1BX1YxLnNhZmVQYXJzZSh2YWxpZCk7XG4gICAgZXhwZWN0KHJlc3VsdC5zdWNjZXNzKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgYSBydWxlIHdpdGggbWlzc2luZyBuYW1lXCIsICgpID0+IHtcbiAgICBjb25zdCBiYWQgPSB7IHNhbGllbmNlOiAwLCBjb25kaXRpb25zOiBbXSwgaGFuZGxlcjogXCJoXCIgfTtcbiAgICBjb25zdCByZXN1bHQgPSBSVUxFX1NDSEVNQV9WMS5zYWZlUGFyc2UoYmFkKTtcbiAgICBleHBlY3QocmVzdWx0LnN1Y2Nlc3MpLnRvQmUoZmFsc2UpO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvc3JjL3NlcmlhbGl6ZS50ZXN0LnRzIn0= diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/a326fe3aa8f25949c84e65351a62ccf1d4bf05a2 b/IJGn1F-WxLUCbfU1lu8pU/ssr/a326fe3aa8f25949c84e65351a62ccf1d4bf05a2 deleted file mode 100644 index 4fef7d2..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/a326fe3aa8f25949c84e65351a62ccf1d4bf05a2 +++ /dev/null @@ -1,76 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "EventLog", { enumerable: true, configurable: true, get(){ try { return EventLog } catch {} }}); -class EventLog { - #events = []; - #seq = 0; - #clock; - /** - * @param clock — Optional wall-clock function. Defaults to `Date.now`. - * Inject a deterministic clock (e.g. `() => 0`) in tests and replay - * contexts where timestamp values must be stable across runs. - */ - constructor(clock = Date.now) { - this.#clock = clock; - } - /** Number of events logged. */ - get length() { - return this.#events.length; - } - /** - * Highest sequence number currently in the log (0 if empty). - * - * The next appended event will carry `latestSeq + 1`. - */ - get latestSeq() { - return this.#seq; - } - /** Record an insert of `(id, attr, value)`. */ - appendInsert(id, attr, value) { - this.#events.push({ - seq: ++this.#seq, - ts: this.#clock(), - kind: "insert", - id, - attr, - value - }); - } - /** - * Record a retract of `(id, attr)` with its previous `value` captured - * at the call site (so replay can reconstruct the missing fact). - */ - appendRetract(id, attr, value) { - this.#events.push({ - seq: ++this.#seq, - ts: this.#clock(), - kind: "retract", - id, - attr, - value - }); - } - /** Record a rule firing by rule name. */ - appendFire(ruleName) { - this.#events.push({ - seq: ++this.#seq, - ts: this.#clock(), - kind: "fire", - ruleName - }); - } - /** - * Return all events whose `seq` is strictly greater than `afterSeq`. - * - * Pass `0` to retrieve the full log. Callers typically store the - * last-seen seq and poll with `getSince(lastSeen)` to catch up. - */ - getSince(afterSeq) { - return this.#events.filter((e) => e.seq > afterSeq); - } - /** Return a shallow copy of all events. */ - getAll() { - return [...this.#events]; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQStDTyxNQUFNLFNBQVM7QUFBQSxFQUNYLFVBQXNCLENBQUM7QUFBQSxFQUNoQyxPQUFPO0FBQUEsRUFDRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9ULFlBQVksUUFBc0IsS0FBSyxLQUFLO0FBQzFDLFNBQUssU0FBUztBQUFBLEVBQ2hCO0FBQUE7QUFBQSxFQUdBLElBQUksU0FBaUI7QUFDbkIsV0FBTyxLQUFLLFFBQVE7QUFBQSxFQUN0QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQUksWUFBb0I7QUFDdEIsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBO0FBQUEsRUFHQSxhQUFhLElBQWMsTUFBZSxPQUF3QjtBQUNoRSxTQUFLLFFBQVEsS0FBSztBQUFBLE1BQ2hCLEtBQUssRUFBRSxLQUFLO0FBQUEsTUFDWixJQUFJLEtBQUssT0FBTztBQUFBLE1BQ2hCLE1BQU07QUFBQSxNQUNOO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNIO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1BLGNBQWMsSUFBYyxNQUFlLE9BQXdCO0FBQ2pFLFNBQUssUUFBUSxLQUFLO0FBQUEsTUFDaEIsS0FBSyxFQUFFLEtBQUs7QUFBQSxNQUNaLElBQUksS0FBSyxPQUFPO0FBQUEsTUFDaEIsTUFBTTtBQUFBLE1BQ047QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFBQTtBQUFBLEVBR0EsV0FBVyxVQUF3QjtBQUNqQyxTQUFLLFFBQVEsS0FBSztBQUFBLE1BQ2hCLEtBQUssRUFBRSxLQUFLO0FBQUEsTUFDWixJQUFJLEtBQUssT0FBTztBQUFBLE1BQ2hCLE1BQU07QUFBQSxNQUNOO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsU0FBUyxVQUF1QztBQUM5QyxXQUFPLEtBQUssUUFBUSxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sUUFBUTtBQUFBLEVBQ3BEO0FBQUE7QUFBQSxFQUdBLFNBQThCO0FBQzVCLFdBQU8sQ0FBQyxHQUFHLEtBQUssT0FBTztBQUFBLEVBQ3pCO0FBQ0YiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImV2ZW50bG9nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXZlbnRMb2cg4oCUIGFwcGVuZC1vbmx5IGV2ZW50IGxvZyBmb3IgU2Vzc2lvbiBtdXRhdGlvbnMuXG4gKlxuICogUGVyIFNQRUMubWQgwqdSZXRlIElJIFJlZmVyZW5jZSBUYXJnZXQsIHRoZSBlbmdpbmUgbXVzdCBzdXBwb3J0XG4gKiByZXBsYXktZGV0ZXJtaW5pc206IGdpdmVuIHRoZSBzYW1lIHNjaGVtYSwgcnVsZXMsIGFuZCBldmVudCBsb2csXG4gKiByZXBsYXlpbmcgZXZlbnRzIHJlcHJvZHVjZXMgaWRlbnRpY2FsIHdvcmtpbmctbWVtb3J5IGFuZCBmaXJpbmdcbiAqIHNlcXVlbmNlcy4gVGhlIEV2ZW50TG9nIGlzIHRoZSBhdXRob3JpdGF0aXZlIHRyYW5zY3JpcHQgY29uc3VtZWQgYnlcbiAqIHRoZSB0aW1lLXRyYXZlbCBhbmQgcmVwbGF5IHN5c3RlbXMgKFBoYXNlIDMpLlxuICpcbiAqIERlc2lnbiBpbnZhcmlhbnRzOlxuICogICAtIEFwcGVuZC1vbmx5LiBFdmVudHMgYXJlIG5ldmVyIHJld3JpdHRlbiBvciBkZWxldGVkLlxuICogICAtIFNlcXVlbmNlIG51bWJlcnMgYXJlIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZywgc3RhcnRpbmcgYXQgMS5cbiAqICAgLSBEZXJpdmVkIGZhY3RzIChuZWdhdGl2ZSBFbnRpdHlJZHMpIGFyZSBOT1QgbG9nZ2VkIOKAlCBzZWUgU1BFQy5tZFxuICogICAgIMKnVHJ1dGggTWFpbnRlbmFuY2U6IGRlcml2ZWQgZmFjdHMgYXJlIHJlLWRlcml2ZWQgb24gcmVwbGF5LlxuICogICAgIFRoaXMgZXhjbHVzaW9uIGlzIGVuZm9yY2VkIGF0IHRoZSBTZXNzaW9uIGludGVncmF0aW9uIGJvdW5kYXJ5XG4gKiAgICAgKHNlZSBzZXNzaW9uLnRzKSwgbm90IGluc2lkZSB0aGUgRXZlbnRMb2cgaXRzZWxmLlxuICovXG5pbXBvcnQgdHlwZSB7IEVudGl0eUlkIH0gZnJvbSBcIi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEF0dHJLZXksIEZhY3RWYWx1ZSB9IGZyb20gXCIuL3dtLmpzXCI7XG5cbi8qKiBLaW5kIG9mIGEgbG9nZ2VkIGV2ZW50LiAqL1xuZXhwb3J0IHR5cGUgRXZlbnRLaW5kID0gXCJpbnNlcnRcIiB8IFwicmV0cmFjdFwiIHwgXCJmaXJlXCI7XG5cbi8qKlxuICogQSBzaW5nbGUgZW50cnkgaW4gdGhlIHtAbGluayBFdmVudExvZ30uXG4gKlxuICogRmllbGRzIGFyZSBgcmVhZG9ubHlgIHRvIHJlaW5mb3JjZSB0aGUgYXBwZW5kLW9ubHkgY29udHJhY3Q7IG91dHNpZGVcbiAqIGNhbGxlcnMgb2J0YWluIGV2ZW50cyB0aHJvdWdoIHtAbGluayBFdmVudExvZy5nZXRBbGx9IC9cbiAqIHtAbGluayBFdmVudExvZy5nZXRTaW5jZX0sIHdoaWNoIHJldHVybiBhIHNoYWxsb3cgY29weS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dFdmVudCB7XG4gIC8qKiBNb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgc2VxdWVuY2UgbnVtYmVyLCBzdGFydGluZyBhdCAxLiAqL1xuICByZWFkb25seSBzZXE6IG51bWJlcjtcbiAgLyoqIFdhbGwtY2xvY2sgdGltZXN0YW1wIChtcyBzaW5jZSBlcG9jaCkuIENhcHR1cmVkIGF0IGFwcGVuZCB0aW1lLiAqL1xuICByZWFkb25seSB0czogbnVtYmVyO1xuICAvKiogRXZlbnQga2luZC4gKi9cbiAgcmVhZG9ubHkga2luZDogRXZlbnRLaW5kO1xuICAvKiogRW50aXR5IGlkIOKAlCBwcmVzZW50IGZvciBcImluc2VydFwiIGFuZCBcInJldHJhY3RcIi4gKi9cbiAgcmVhZG9ubHkgaWQ/OiBFbnRpdHlJZDtcbiAgLyoqIEF0dHJpYnV0ZSBuYW1lIOKAlCBwcmVzZW50IGZvciBcImluc2VydFwiIGFuZCBcInJldHJhY3RcIi4gKi9cbiAgcmVhZG9ubHkgYXR0cj86IEF0dHJLZXk7XG4gIC8qKiBGYWN0IHZhbHVlIOKAlCBwcmVzZW50IGZvciBcImluc2VydFwiIGFuZCBcInJldHJhY3RcIi4gKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBGYWN0VmFsdWU7XG4gIC8qKiBSdWxlIG5hbWUg4oCUIHByZXNlbnQgZm9yIFwiZmlyZVwiLiAqL1xuICByZWFkb25seSBydWxlTmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEV2ZW50TG9nIHtcbiAgcmVhZG9ubHkgI2V2ZW50czogTG9nRXZlbnRbXSA9IFtdO1xuICAjc2VxID0gMDtcbiAgcmVhZG9ubHkgI2Nsb2NrOiAoKSA9PiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBjbG9jayDigJQgT3B0aW9uYWwgd2FsbC1jbG9jayBmdW5jdGlvbi4gRGVmYXVsdHMgdG8gYERhdGUubm93YC5cbiAgICogICBJbmplY3QgYSBkZXRlcm1pbmlzdGljIGNsb2NrIChlLmcuIGAoKSA9PiAwYCkgaW4gdGVzdHMgYW5kIHJlcGxheVxuICAgKiAgIGNvbnRleHRzIHdoZXJlIHRpbWVzdGFtcCB2YWx1ZXMgbXVzdCBiZSBzdGFibGUgYWNyb3NzIHJ1bnMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihjbG9jazogKCkgPT4gbnVtYmVyID0gRGF0ZS5ub3cpIHtcbiAgICB0aGlzLiNjbG9jayA9IGNsb2NrO1xuICB9XG5cbiAgLyoqIE51bWJlciBvZiBldmVudHMgbG9nZ2VkLiAqL1xuICBnZXQgbGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogSGlnaGVzdCBzZXF1ZW5jZSBudW1iZXIgY3VycmVudGx5IGluIHRoZSBsb2cgKDAgaWYgZW1wdHkpLlxuICAgKlxuICAgKiBUaGUgbmV4dCBhcHBlbmRlZCBldmVudCB3aWxsIGNhcnJ5IGBsYXRlc3RTZXEgKyAxYC5cbiAgICovXG4gIGdldCBsYXRlc3RTZXEoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jc2VxO1xuICB9XG5cbiAgLyoqIFJlY29yZCBhbiBpbnNlcnQgb2YgYChpZCwgYXR0ciwgdmFsdWUpYC4gKi9cbiAgYXBwZW5kSW5zZXJ0KGlkOiBFbnRpdHlJZCwgYXR0cjogQXR0cktleSwgdmFsdWU6IEZhY3RWYWx1ZSk6IHZvaWQge1xuICAgIHRoaXMuI2V2ZW50cy5wdXNoKHtcbiAgICAgIHNlcTogKyt0aGlzLiNzZXEsXG4gICAgICB0czogdGhpcy4jY2xvY2soKSxcbiAgICAgIGtpbmQ6IFwiaW5zZXJ0XCIsXG4gICAgICBpZCxcbiAgICAgIGF0dHIsXG4gICAgICB2YWx1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmQgYSByZXRyYWN0IG9mIGAoaWQsIGF0dHIpYCB3aXRoIGl0cyBwcmV2aW91cyBgdmFsdWVgIGNhcHR1cmVkXG4gICAqIGF0IHRoZSBjYWxsIHNpdGUgKHNvIHJlcGxheSBjYW4gcmVjb25zdHJ1Y3QgdGhlIG1pc3NpbmcgZmFjdCkuXG4gICAqL1xuICBhcHBlbmRSZXRyYWN0KGlkOiBFbnRpdHlJZCwgYXR0cjogQXR0cktleSwgdmFsdWU6IEZhY3RWYWx1ZSk6IHZvaWQge1xuICAgIHRoaXMuI2V2ZW50cy5wdXNoKHtcbiAgICAgIHNlcTogKyt0aGlzLiNzZXEsXG4gICAgICB0czogdGhpcy4jY2xvY2soKSxcbiAgICAgIGtpbmQ6IFwicmV0cmFjdFwiLFxuICAgICAgaWQsXG4gICAgICBhdHRyLFxuICAgICAgdmFsdWUsXG4gICAgfSk7XG4gIH1cblxuICAvKiogUmVjb3JkIGEgcnVsZSBmaXJpbmcgYnkgcnVsZSBuYW1lLiAqL1xuICBhcHBlbmRGaXJlKHJ1bGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLiNldmVudHMucHVzaCh7XG4gICAgICBzZXE6ICsrdGhpcy4jc2VxLFxuICAgICAgdHM6IHRoaXMuI2Nsb2NrKCksXG4gICAgICBraW5kOiBcImZpcmVcIixcbiAgICAgIHJ1bGVOYW1lLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbGwgZXZlbnRzIHdob3NlIGBzZXFgIGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiBgYWZ0ZXJTZXFgLlxuICAgKlxuICAgKiBQYXNzIGAwYCB0byByZXRyaWV2ZSB0aGUgZnVsbCBsb2cuIENhbGxlcnMgdHlwaWNhbGx5IHN0b3JlIHRoZVxuICAgKiBsYXN0LXNlZW4gc2VxIGFuZCBwb2xsIHdpdGggYGdldFNpbmNlKGxhc3RTZWVuKWAgdG8gY2F0Y2ggdXAuXG4gICAqL1xuICBnZXRTaW5jZShhZnRlclNlcTogbnVtYmVyKTogcmVhZG9ubHkgTG9nRXZlbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5maWx0ZXIoKGUpID0+IGUuc2VxID4gYWZ0ZXJTZXEpO1xuICB9XG5cbiAgLyoqIFJldHVybiBhIHNoYWxsb3cgY29weSBvZiBhbGwgZXZlbnRzLiAqL1xuICBnZXRBbGwoKTogcmVhZG9ubHkgTG9nRXZlbnRbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLiNldmVudHNdO1xuICB9XG59XG4iXSwiZmlsZSI6Ii9zcmMvZXZlbnRsb2cudHMifQ== diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/a986294acbd1d665b1748e2f410b5818a265ef3f b/IJGn1F-WxLUCbfU1lu8pU/ssr/a986294acbd1d665b1748e2f410b5818a265ef3f deleted file mode 100644 index ac65795..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/a986294acbd1d665b1748e2f410b5818a265ef3f +++ /dev/null @@ -1,132 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "NccPartner", { enumerable: true, configurable: true, get(){ try { return NccPartner } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "NccNode", { enumerable: true, configurable: true, get(){ try { return NccNode } catch {} }}); -class NccPartner { - #ncc = null; - /** - * Notify the NccNode that a new complete sub-match has formed for the - * given `outerToken`. Called by the sub-network's terminal production. - */ - leftActivate(subToken, outerToken) { - this.#ncc?.onSubMatchActivate(subToken, outerToken); - } - /** - * Notify the NccNode that a previously-formed sub-match has dissolved. - */ - leftDeactivate(subToken, outerToken) { - this.#ncc?.onSubMatchDeactivate(subToken, outerToken); - } - /** - * Bind this partner to its owning NccNode. Called by the NccNode - * constructor. Rebinding is intentionally a no-op after the first call — - * a partner is paired with exactly one NccNode for life. - */ - setNcc(ncc) { - if (this.#ncc === null) { - this.#ncc = ncc; - } - } -}; -class NccNode { - #activateListeners = []; - #deactivateListeners = []; - /** Active sub-match count per outer token (absent entry ≡ 0). */ - #subMatchCount = /* @__PURE__ */ new Map(); - /** Outer tokens currently propagated downstream. */ - #passingTokens = /* @__PURE__ */ new Set(); - /** All outer tokens left-activated and not yet left-deactivated. */ - #outerTokens = /* @__PURE__ */ new Set(); - constructor(partner) { - partner.setNcc(this); - } - /** Subscribe to downstream activations (tokens passing the NCC filter). */ - addDownstreamActivate(listener) { - this.#activateListeners.push(listener); - } - /** Subscribe to downstream deactivations (tokens withdrawn). */ - addDownstreamDeactivate(listener) { - this.#deactivateListeners.push(listener); - } - /** - * Accept an outer partial match. - * - * The token is passed downstream immediately when the sub-match count - * for it is zero. If a sub-match already exists (e.g. the sub-network - * activated before the outer left input did), the token is tracked but - * withheld from downstream until the count returns to zero. - */ - leftActivate(token) { - this.#outerTokens.add(token); - const count = this.#subMatchCount.get(token) ?? 0; - if (count === 0) { - this.#passingTokens.add(token); - for (const listener of this.#activateListeners) { - listener(token); - } - } - } - /** - * Withdraw an outer partial match. - * - * If the token is currently passing, fire downstream-deactivate; otherwise - * silently drop it. The sub-match count is discarded so stale sub-match - * retractions after this point become no-ops for this token. - */ - leftDeactivate(token) { - this.#outerTokens.delete(token); - this.#subMatchCount.delete(token); - if (this.#passingTokens.has(token)) { - this.#passingTokens.delete(token); - for (const listener of this.#deactivateListeners) { - listener(token); - } - } - } - /** - * Internal: sub-network reports a new complete sub-match. - * - * Incrementing the count from 0 to 1 blocks the outer token if it is - * currently passing. The `_subToken` argument is unused by the - * count-based scheme but retained in the signature per Doorenbos so that - * more elaborate variants (e.g. preserving matched sub-tokens for - * explanation) can slot in without changing the partner protocol. - */ - onSubMatchActivate(_subToken, outerToken) { - const prev = this.#subMatchCount.get(outerToken) ?? 0; - this.#subMatchCount.set(outerToken, prev + 1); - if (prev === 0 && this.#passingTokens.has(outerToken)) { - this.#passingTokens.delete(outerToken); - for (const listener of this.#deactivateListeners) { - listener(outerToken); - } - } - } - /** - * Internal: sub-network reports a sub-match has dissolved. - * - * Decrementing the count from 1 to 0 re-activates the outer token - * downstream, provided the token has been left-activated and is not - * already passing. The count is clamped at zero to tolerate idempotent - * retractions. - */ - onSubMatchDeactivate(_subToken, outerToken) { - const prev = this.#subMatchCount.get(outerToken) ?? 0; - if (prev === 0) { - return; - }; - const next = prev - 1; - if (next === 0) { - this.#subMatchCount.delete(outerToken); - } else { - this.#subMatchCount.set(outerToken, next); - }; - if (next === 0 && this.#outerTokens.has(outerToken) && !this.#passingTokens.has(outerToken)) { - this.#passingTokens.add(outerToken); - for (const listener of this.#activateListeners) { - listener(outerToken); - } - } - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SSxVQUFVLEtBQ2hDLENBQUMsS0FBSyxlQUFlLElBQUksVUFBVSxHQUNuQztBQUNBLFdBQUssZUFBZSxJQUFJLFVBQVU7QUFDbEMsaUJBQVcsWUFBWSxLQUFLLG9CQUFvQjtBQUM5QyxpQkFBUyxVQUFVO0FBQUEsTUFDckI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJuY2MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBOY2NOb2RlICsgTmNjUGFydG5lciDigJQgc3ViY29uanVuY3Rpb24gKG5vdC1jb3VudC1jb25kaXRpb24pIG5lZ2F0aW9uLlxuICpcbiAqIFBlciBEb29yZW5ib3MgMTk5NSDCpzIuNi4zLiBVbmxpa2Ugc2ltcGxlIG5lZ2F0aW9uIChOT1Qgb2YgYSBzaW5nbGUgcGF0dGVybiksXG4gKiBOQ0MgbmVnYXRlcyBhbiBlbnRpcmUgY29uanVuY3Rpb24gb2YgTiBjb25kaXRpb25zOiB0aGUgb3V0ZXIgdG9rZW4gcGFzc2VzXG4gKiBvbmx5IGlmIHRoZXJlIGlzIE5PIGNvbWJpbmF0aW9uIG9mIGZhY3RzIHNhdGlzZnlpbmcgYWxsIE4gc3ViLWNvbmRpdGlvbnMuXG4gKlxuICogQXJjaGl0ZWN0dXJlOlxuICogICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gKiAgIOKUgiBvdXRlciBsZWZ0IGluIOKUguKUgOKUgOKUgOKUgOKUgOKUgOKWtiDilIIgICAgIE5jY05vZGUgICAgICDilILilIDilIDilIDilIDilIDilIDilrYg4pSCIGRvd25zdHJlYW0g4pSCXG4gKiAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAgICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4payXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBzdWItbWF0Y2ggbm90aWZpY2F0aW9uc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgICBOY2NQYXJ0bmVyICAg4pSCXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4payXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBmZWVkIGZyb21cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5DQyBzdWItbmV0d29yayB0ZXJtaW5hbFxuICpcbiAqIFRoZSBOQ0Mgc3ViLW5ldHdvcmsgKGEgY2hhaW4gb2Ygam9pbi9iZXRhIG5vZGVzIG1hdGNoaW5nIHRoZSBuZWdhdGVkXG4gKiBjb25qdW5jdGlvbikgaGFzIGl0cyB0ZXJtaW5hbCBmZWVkIGBwYXJ0bmVyLmxlZnRBY3RpdmF0ZShzdWJUb2tlbiwgb3V0ZXJUb2tlbilgXG4gKiB3aGVuZXZlciBhIGNvbXBsZXRlIHN1Yi1tYXRjaCBpcyBmb3JtZWQsIGFuZCBgbGVmdERlYWN0aXZhdGUoLi4uKWAgd2hlbmV2ZXJcbiAqIHRoYXQgc3ViLW1hdGNoIGRpc3NvbHZlcy4gVGhlIGBvdXRlclRva2VuYCBhcmd1bWVudCBpcyB0aGUgcGFyZW50IHBhcnRpYWxcbiAqIG1hdGNoIGZyb20gd2hpY2ggdGhlIHN1Yi1uZXR3b3JrIGV4dGVuZGVkIOKAlCB0aGlzIGlzIHRoZSB0b2tlbiB3aG9zZVxuICogcGFzcy9ibG9jayBzdGF0ZSBkZXBlbmRzIG9uIHRoZSBzdWItbWF0Y2ggY291bnQuXG4gKlxuICogVGhlIE5jY05vZGUgbWFpbnRhaW5zIGEgcmVmZXJlbmNlIGNvdW50IG9mIGFjdGl2ZSBzdWItbWF0Y2hlcyBwZXIgb3V0ZXJcbiAqIHRva2VuOiB3aGVuIHRoZSBjb3VudCB0cmFuc2l0aW9ucyAwIOKGkiAxIGFuIG91dGVyIHRva2VuIHRoYXQgd2FzIHBhc3NpbmdcbiAqIGRvd25zdHJlYW0gaXMgd2l0aGRyYXduOyB3aGVuIGl0IHRyYW5zaXRpb25zIDEg4oaSIDAgdGhlIHRva2VuIGlzXG4gKiByZS1hY3RpdmF0ZWQgZG93bnN0cmVhbSAocHJvdmlkZWQgdGhlIG91dGVyIHRva2VuIGlzIHN0aWxsIGtub3duKS5cbiAqL1xuaW1wb3J0IHR5cGUgeyBUb2tlbiB9IGZyb20gXCIuL2JldGEuanNcIjtcblxuLyoqIExpc3RlbmVyIGludm9rZWQgd2hlbiBhbiBvdXRlciB0b2tlbiBwYXNzZXMgZG93bnN0cmVhbS4gKi9cbnR5cGUgQWN0aXZhdGVMaXN0ZW5lciA9ICh0b2tlbjogVG9rZW4pID0+IHZvaWQ7XG4vKiogTGlzdGVuZXIgaW52b2tlZCB3aGVuIGFuIG91dGVyIHRva2VuIGlzIHdpdGhkcmF3biBkb3duc3RyZWFtLiAqL1xudHlwZSBEZWFjdGl2YXRlTGlzdGVuZXIgPSAodG9rZW46IFRva2VuKSA9PiB2b2lkO1xuXG4vKipcbiAqIFRlcm1pbmFsIG5vZGUgZm9yIHRoZSBOQ0Mgc3ViLW5ldHdvcmsuXG4gKlxuICogQ2FycmllcyBhIGJhY2stcmVmZXJlbmNlIHRvIGl0cyB7QGxpbmsgTmNjTm9kZX07IHRoZSBOY2NOb2RlIGlzIHNldFxuICogZXhhY3RseSBvbmNlIGJ5IHRoZSBOY2NOb2RlJ3MgY29uc3RydWN0b3IuIElmIHRoZSBwYXJ0bmVyIGlzIG5vdCB5ZXRcbiAqIHdpcmVkIHRvIGFuIE5jY05vZGUsIGFjdGl2YXRpb25zIGFyZSBzaWxlbnRseSBpZ25vcmVkIOKAlCB0aGlzIGtlZXBzXG4gKiBjb25zdHJ1Y3Rpb24gb3JkZXIgb2YgYG5ldyBOY2NQYXJ0bmVyKClgIC8gYG5ldyBOY2NOb2RlKHBhcnRuZXIpYFxuICogZmxleGlibGUgZm9yIHRlc3RzIGFuZCBidWlsZGVyIGNvZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBOY2NQYXJ0bmVyIHtcbiAgI25jYzogTmNjTm9kZSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBOb3RpZnkgdGhlIE5jY05vZGUgdGhhdCBhIG5ldyBjb21wbGV0ZSBzdWItbWF0Y2ggaGFzIGZvcm1lZCBmb3IgdGhlXG4gICAqIGdpdmVuIGBvdXRlclRva2VuYC4gQ2FsbGVkIGJ5IHRoZSBzdWItbmV0d29yaydzIHRlcm1pbmFsIHByb2R1Y3Rpb24uXG4gICAqL1xuICBsZWZ0QWN0aXZhdGUoc3ViVG9rZW46IFRva2VuLCBvdXRlclRva2VuOiBUb2tlbik6IHZvaWQge1xuICAgIHRoaXMuI25jYz8ub25TdWJNYXRjaEFjdGl2YXRlKHN1YlRva2VuLCBvdXRlclRva2VuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZnkgdGhlIE5jY05vZGUgdGhhdCBhIHByZXZpb3VzbHktZm9ybWVkIHN1Yi1tYXRjaCBoYXMgZGlzc29sdmVkLlxuICAgKi9cbiAgbGVmdERlYWN0aXZhdGUoc3ViVG9rZW46IFRva2VuLCBvdXRlclRva2VuOiBUb2tlbik6IHZvaWQge1xuICAgIHRoaXMuI25jYz8ub25TdWJNYXRjaERlYWN0aXZhdGUoc3ViVG9rZW4sIG91dGVyVG9rZW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmQgdGhpcyBwYXJ0bmVyIHRvIGl0cyBvd25pbmcgTmNjTm9kZS4gQ2FsbGVkIGJ5IHRoZSBOY2NOb2RlXG4gICAqIGNvbnN0cnVjdG9yLiBSZWJpbmRpbmcgaXMgaW50ZW50aW9uYWxseSBhIG5vLW9wIGFmdGVyIHRoZSBmaXJzdCBjYWxsIOKAlFxuICAgKiBhIHBhcnRuZXIgaXMgcGFpcmVkIHdpdGggZXhhY3RseSBvbmUgTmNjTm9kZSBmb3IgbGlmZS5cbiAgICovXG4gIHNldE5jYyhuY2M6IE5jY05vZGUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jbmNjID09PSBudWxsKSB7XG4gICAgICB0aGlzLiNuY2MgPSBuY2M7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQmV0YS1uZXR3b3JrIG5vZGUgaW1wbGVtZW50aW5nIHN1YmNvbmp1bmN0aW9uIG5lZ2F0aW9uLlxuICpcbiAqIERvd25zdHJlYW0gc3Vic2NyaWJlcnMgc2VlIGFuIG91dGVyIHRva2VuIGlmZiB0aGUgTkNDIHN1Yi1uZXR3b3JrIHlpZWxkc1xuICogemVybyBjb21wbGV0ZSBzdWItbWF0Y2hlcyBmb3IgaXQuIEFycml2YWxzIGFuZCBkZXBhcnR1cmVzIG9mIHN1Yi1tYXRjaGVzXG4gKiBhcmUgcmVwb3J0ZWQgdmlhIHRoZSBwYWlyZWQge0BsaW5rIE5jY1BhcnRuZXJ9LlxuICovXG5leHBvcnQgY2xhc3MgTmNjTm9kZSB7XG4gIHJlYWRvbmx5ICNhY3RpdmF0ZUxpc3RlbmVyczogQWN0aXZhdGVMaXN0ZW5lcltdID0gW107XG4gIHJlYWRvbmx5ICNkZWFjdGl2YXRlTGlzdGVuZXJzOiBEZWFjdGl2YXRlTGlzdGVuZXJbXSA9IFtdO1xuXG4gIC8qKiBBY3RpdmUgc3ViLW1hdGNoIGNvdW50IHBlciBvdXRlciB0b2tlbiAoYWJzZW50IGVudHJ5IOKJoSAwKS4gKi9cbiAgcmVhZG9ubHkgI3N1Yk1hdGNoQ291bnQgPSBuZXcgTWFwPFRva2VuLCBudW1iZXI+KCk7XG4gIC8qKiBPdXRlciB0b2tlbnMgY3VycmVudGx5IHByb3BhZ2F0ZWQgZG93bnN0cmVhbS4gKi9cbiAgcmVhZG9ubHkgI3Bhc3NpbmdUb2tlbnMgPSBuZXcgU2V0PFRva2VuPigpO1xuICAvKiogQWxsIG91dGVyIHRva2VucyBsZWZ0LWFjdGl2YXRlZCBhbmQgbm90IHlldCBsZWZ0LWRlYWN0aXZhdGVkLiAqL1xuICByZWFkb25seSAjb3V0ZXJUb2tlbnMgPSBuZXcgU2V0PFRva2VuPigpO1xuXG4gIGNvbnN0cnVjdG9yKHBhcnRuZXI6IE5jY1BhcnRuZXIpIHtcbiAgICBwYXJ0bmVyLnNldE5jYyh0aGlzKTtcbiAgfVxuXG4gIC8qKiBTdWJzY3JpYmUgdG8gZG93bnN0cmVhbSBhY3RpdmF0aW9ucyAodG9rZW5zIHBhc3NpbmcgdGhlIE5DQyBmaWx0ZXIpLiAqL1xuICBhZGREb3duc3RyZWFtQWN0aXZhdGUobGlzdGVuZXI6IEFjdGl2YXRlTGlzdGVuZXIpOiB2b2lkIHtcbiAgICB0aGlzLiNhY3RpdmF0ZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKiBTdWJzY3JpYmUgdG8gZG93bnN0cmVhbSBkZWFjdGl2YXRpb25zICh0b2tlbnMgd2l0aGRyYXduKS4gKi9cbiAgYWRkRG93bnN0cmVhbURlYWN0aXZhdGUobGlzdGVuZXI6IERlYWN0aXZhdGVMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuI2RlYWN0aXZhdGVMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICAvKipcbiAgICogQWNjZXB0IGFuIG91dGVyIHBhcnRpYWwgbWF0Y2guXG4gICAqXG4gICAqIFRoZSB0b2tlbiBpcyBwYXNzZWQgZG93bnN0cmVhbSBpbW1lZGlhdGVseSB3aGVuIHRoZSBzdWItbWF0Y2ggY291bnRcbiAgICogZm9yIGl0IGlzIHplcm8uIElmIGEgc3ViLW1hdGNoIGFscmVhZHkgZXhpc3RzIChlLmcuIHRoZSBzdWItbmV0d29ya1xuICAgKiBhY3RpdmF0ZWQgYmVmb3JlIHRoZSBvdXRlciBsZWZ0IGlucHV0IGRpZCksIHRoZSB0b2tlbiBpcyB0cmFja2VkIGJ1dFxuICAgKiB3aXRoaGVsZCBmcm9tIGRvd25zdHJlYW0gdW50aWwgdGhlIGNvdW50IHJldHVybnMgdG8gemVyby5cbiAgICovXG4gIGxlZnRBY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICB0aGlzLiNvdXRlclRva2Vucy5hZGQodG9rZW4pO1xuICAgIGNvbnN0IGNvdW50ID0gdGhpcy4jc3ViTWF0Y2hDb3VudC5nZXQodG9rZW4pID8/IDA7XG5cbiAgICBpZiAoY291bnQgPT09IDApIHtcbiAgICAgIHRoaXMuI3Bhc3NpbmdUb2tlbnMuYWRkKHRva2VuKTtcbiAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy4jYWN0aXZhdGVMaXN0ZW5lcnMpIHtcbiAgICAgICAgbGlzdGVuZXIodG9rZW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaXRoZHJhdyBhbiBvdXRlciBwYXJ0aWFsIG1hdGNoLlxuICAgKlxuICAgKiBJZiB0aGUgdG9rZW4gaXMgY3VycmVudGx5IHBhc3NpbmcsIGZpcmUgZG93bnN0cmVhbS1kZWFjdGl2YXRlOyBvdGhlcndpc2VcbiAgICogc2lsZW50bHkgZHJvcCBpdC4gVGhlIHN1Yi1tYXRjaCBjb3VudCBpcyBkaXNjYXJkZWQgc28gc3RhbGUgc3ViLW1hdGNoXG4gICAqIHJldHJhY3Rpb25zIGFmdGVyIHRoaXMgcG9pbnQgYmVjb21lIG5vLW9wcyBmb3IgdGhpcyB0b2tlbi5cbiAgICovXG4gIGxlZnREZWFjdGl2YXRlKHRva2VuOiBUb2tlbik6IHZvaWQge1xuICAgIHRoaXMuI291dGVyVG9rZW5zLmRlbGV0ZSh0b2tlbik7XG4gICAgdGhpcy4jc3ViTWF0Y2hDb3VudC5kZWxldGUodG9rZW4pO1xuXG4gICAgaWYgKHRoaXMuI3Bhc3NpbmdUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgdGhpcy4jcGFzc2luZ1Rva2Vucy5kZWxldGUodG9rZW4pO1xuICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNkZWFjdGl2YXRlTGlzdGVuZXJzKSB7XG4gICAgICAgIGxpc3RlbmVyKHRva2VuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWw6IHN1Yi1uZXR3b3JrIHJlcG9ydHMgYSBuZXcgY29tcGxldGUgc3ViLW1hdGNoLlxuICAgKlxuICAgKiBJbmNyZW1lbnRpbmcgdGhlIGNvdW50IGZyb20gMCB0byAxIGJsb2NrcyB0aGUgb3V0ZXIgdG9rZW4gaWYgaXQgaXNcbiAgICogY3VycmVudGx5IHBhc3NpbmcuIFRoZSBgX3N1YlRva2VuYCBhcmd1bWVudCBpcyB1bnVzZWQgYnkgdGhlXG4gICAqIGNvdW50LWJhc2VkIHNjaGVtZSBidXQgcmV0YWluZWQgaW4gdGhlIHNpZ25hdHVyZSBwZXIgRG9vcmVuYm9zIHNvIHRoYXRcbiAgICogbW9yZSBlbGFib3JhdGUgdmFyaWFudHMgKGUuZy4gcHJlc2VydmluZyBtYXRjaGVkIHN1Yi10b2tlbnMgZm9yXG4gICAqIGV4cGxhbmF0aW9uKSBjYW4gc2xvdCBpbiB3aXRob3V0IGNoYW5naW5nIHRoZSBwYXJ0bmVyIHByb3RvY29sLlxuICAgKi9cbiAgb25TdWJNYXRjaEFjdGl2YXRlKF9zdWJUb2tlbjogVG9rZW4sIG91dGVyVG9rZW46IFRva2VuKTogdm9pZCB7XG4gICAgY29uc3QgcHJldiA9IHRoaXMuI3N1Yk1hdGNoQ291bnQuZ2V0KG91dGVyVG9rZW4pID8/IDA7XG4gICAgdGhpcy4jc3ViTWF0Y2hDb3VudC5zZXQob3V0ZXJUb2tlbiwgcHJldiArIDEpO1xuXG4gICAgaWYgKHByZXYgPT09IDAgJiYgdGhpcy4jcGFzc2luZ1Rva2Vucy5oYXMob3V0ZXJUb2tlbikpIHtcbiAgICAgIHRoaXMuI3Bhc3NpbmdUb2tlbnMuZGVsZXRlKG91dGVyVG9rZW4pO1xuICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNkZWFjdGl2YXRlTGlzdGVuZXJzKSB7XG4gICAgICAgIGxpc3RlbmVyKG91dGVyVG9rZW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbDogc3ViLW5ldHdvcmsgcmVwb3J0cyBhIHN1Yi1tYXRjaCBoYXMgZGlzc29sdmVkLlxuICAgKlxuICAgKiBEZWNyZW1lbnRpbmcgdGhlIGNvdW50IGZyb20gMSB0byAwIHJlLWFjdGl2YXRlcyB0aGUgb3V0ZXIgdG9rZW5cbiAgICogZG93bnN0cmVhbSwgcHJvdmlkZWQgdGhlIHRva2VuIGhhcyBiZWVuIGxlZnQtYWN0aXZhdGVkIGFuZCBpcyBub3RcbiAgICogYWxyZWFkeSBwYXNzaW5nLiBUaGUgY291bnQgaXMgY2xhbXBlZCBhdCB6ZXJvIHRvIHRvbGVyYXRlIGlkZW1wb3RlbnRcbiAgICogcmV0cmFjdGlvbnMuXG4gICAqL1xuICBvblN1Yk1hdGNoRGVhY3RpdmF0ZShfc3ViVG9rZW46IFRva2VuLCBvdXRlclRva2VuOiBUb2tlbik6IHZvaWQge1xuICAgIGNvbnN0IHByZXYgPSB0aGlzLiNzdWJNYXRjaENvdW50LmdldChvdXRlclRva2VuKSA/PyAwO1xuICAgIGlmIChwcmV2ID09PSAwKSB7XG4gICAgICByZXR1cm47IC8vIGNsYW1wIOKAlCBpZ25vcmUgc3B1cmlvdXMgcmV0cmFjdHNcbiAgICB9XG4gICAgY29uc3QgbmV4dCA9IHByZXYgLSAxO1xuICAgIGlmIChuZXh0ID09PSAwKSB7XG4gICAgICB0aGlzLiNzdWJNYXRjaENvdW50LmRlbGV0ZShvdXRlclRva2VuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jc3ViTWF0Y2hDb3VudC5zZXQob3V0ZXJUb2tlbiwgbmV4dCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgbmV4dCA9PT0gMCAmJlxuICAgICAgdGhpcy4jb3V0ZXJUb2tlbnMuaGFzKG91dGVyVG9rZW4pICYmXG4gICAgICAhdGhpcy4jcGFzc2luZ1Rva2Vucy5oYXMob3V0ZXJUb2tlbilcbiAgICApIHtcbiAgICAgIHRoaXMuI3Bhc3NpbmdUb2tlbnMuYWRkKG91dGVyVG9rZW4pO1xuICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNhY3RpdmF0ZUxpc3RlbmVycykge1xuICAgICAgICBsaXN0ZW5lcihvdXRlclRva2VuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdLCJmaWxlIjoiL3NyYy9uY2MudHMifQ== diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/abed934cafdc3023c71ae51f026a0b9c82f3b770 b/IJGn1F-WxLUCbfU1lu8pU/ssr/abed934cafdc3023c71ae51f026a0b9c82f3b770 deleted file mode 100644 index ed3a88e..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/abed934cafdc3023c71ae51f026a0b9c82f3b770 +++ /dev/null @@ -1,101 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("vitest", {"importedNames":["describe","it","expect","vi"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/wm.ts", {"importedNames":["WorkingMemory"]}); -(0,__vite_ssr_import_0__.describe)("WorkingMemory", () => { - const mkId = (n) => n; - (0,__vite_ssr_import_0__.it)("inserts a fact and retrieves it with get()", () => { - const wm = new __vite_ssr_import_1__.WorkingMemory(); - wm.insert(mkId(1), "Health", 100); - (0,__vite_ssr_import_0__.expect)(wm.get(mkId(1), "Health")).toBe(100); - }); - (0,__vite_ssr_import_0__.it)("insert with same id+attr replaces existing value (update semantics)", () => { - const wm = new __vite_ssr_import_1__.WorkingMemory(); - wm.insert(mkId(1), "Health", 100); - wm.insert(mkId(1), "Health", 50); - (0,__vite_ssr_import_0__.expect)(wm.get(mkId(1), "Health")).toBe(50); - }); - (0,__vite_ssr_import_0__.it)("get() returns undefined for missing fact", () => { - const wm = new __vite_ssr_import_1__.WorkingMemory(); - (0,__vite_ssr_import_0__.expect)(wm.get(mkId(1), "Health")).toBeUndefined(); - }); - (0,__vite_ssr_import_0__.it)("contains() returns true when fact exists", () => { - const wm = new __vite_ssr_import_1__.WorkingMemory(); - wm.insert(mkId(2), "Active", true); - (0,__vite_ssr_import_0__.expect)(wm.contains(mkId(2), "Active")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("contains() returns false when fact missing", () => { - const wm = new __vite_ssr_import_1__.WorkingMemory(); - (0,__vite_ssr_import_0__.expect)(wm.contains(mkId(2), "Active")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("retract() removes a fact, returns true", () => { - const wm = new __vite_ssr_import_1__.WorkingMemory(); - wm.insert(mkId(3), "Name", "Alice"); - const result = wm.retract(mkId(3), "Name"); - (0,__vite_ssr_import_0__.expect)(result).toBe(true); - (0,__vite_ssr_import_0__.expect)(wm.get(mkId(3), "Name")).toBeUndefined(); - }); - (0,__vite_ssr_import_0__.it)("retract() returns false for non-existent fact", () => { - const wm = new __vite_ssr_import_1__.WorkingMemory(); - const result = wm.retract(mkId(99), "Health"); - (0,__vite_ssr_import_0__.expect)(result).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("allFacts() returns sorted [id asc, attr asc] array", () => { - const wm = new __vite_ssr_import_1__.WorkingMemory(); - wm.insert(mkId(2), "Z", "z"); - wm.insert(mkId(1), "B", "b"); - wm.insert(mkId(1), "A", "a"); - wm.insert(mkId(2), "A", "a2"); - const facts = wm.allFacts(); - (0,__vite_ssr_import_0__.expect)(facts).toHaveLength(4); - (0,__vite_ssr_import_0__.expect)(facts[0]).toMatchObject({ id: 1, attr: "A" }); - (0,__vite_ssr_import_0__.expect)(facts[1]).toMatchObject({ id: 1, attr: "B" }); - (0,__vite_ssr_import_0__.expect)(facts[2]).toMatchObject({ id: 2, attr: "A" }); - (0,__vite_ssr_import_0__.expect)(facts[3]).toMatchObject({ id: 2, attr: "Z" }); - }); - (0,__vite_ssr_import_0__.it)("allFacts() is deterministic across multiple calls (same insertion order)", () => { - const wm = new __vite_ssr_import_1__.WorkingMemory(); - wm.insert(mkId(5), "X", 1); - wm.insert(mkId(3), "Y", 2); - const first = wm.allFacts().map((f) => `${f.id}:${String(f.attr)}`); - const second = wm.allFacts().map((f) => `${f.id}:${String(f.attr)}`); - (0,__vite_ssr_import_0__.expect)(first).toEqual(second); - }); - (0,__vite_ssr_import_0__.it)("calls insert listener when a fact is inserted", () => { - const wm = new __vite_ssr_import_1__.WorkingMemory(); - const listener = __vite_ssr_import_0__.vi.fn(); - wm.onInsert(listener); - wm.insert(mkId(1), "Health", 10); - (0,__vite_ssr_import_0__.expect)(listener).toHaveBeenCalledOnce(); - (0,__vite_ssr_import_0__.expect)(listener).toHaveBeenCalledWith(mkId(1), "Health", 10); - }); - (0,__vite_ssr_import_0__.it)("calls retract listener when a fact is retracted", () => { - const wm = new __vite_ssr_import_1__.WorkingMemory(); - const listener = __vite_ssr_import_0__.vi.fn(); - wm.onRetract(listener); - wm.insert(mkId(1), "Health", 10); - wm.retract(mkId(1), "Health"); - (0,__vite_ssr_import_0__.expect)(listener).toHaveBeenCalledOnce(); - (0,__vite_ssr_import_0__.expect)(listener).toHaveBeenCalledWith(mkId(1), "Health", 10); - }); - (0,__vite_ssr_import_0__.it)("calls insert listener on update (retract+insert of same id+attr)", () => { - const wm = new __vite_ssr_import_1__.WorkingMemory(); - const retractFn = __vite_ssr_import_0__.vi.fn(); - const insertFn = __vite_ssr_import_0__.vi.fn(); - wm.onRetract(retractFn); - wm.onInsert(insertFn); - wm.insert(mkId(1), "Health", 10); - wm.insert(mkId(1), "Health", 20); - (0,__vite_ssr_import_0__.expect)(insertFn).toHaveBeenCalledTimes(2); - (0,__vite_ssr_import_0__.expect)(retractFn).toHaveBeenCalledTimes(1); - (0,__vite_ssr_import_0__.expect)(retractFn).toHaveBeenCalledWith(mkId(1), "Health", 10); - }); - (0,__vite_ssr_import_0__.it)("does not call retract listener when retracting non-existent fact", () => { - const wm = new __vite_ssr_import_1__.WorkingMemory(); - const listener = __vite_ssr_import_0__.vi.fn(); - wm.onRetract(listener); - wm.retract(mkId(99), "Health"); - (0,__vite_ssr_import_0__.expect)(listener).not.toHaveBeenCalled(); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFFRCwrQkFBRyxvRUFBb0UsTUFBTTtBQUMzRSxVQUFNLEtBQUssSUFBSSxvQ0FBYztBQUM3QixVQUFNLFlBQVkseUJBQUcsR0FBRztBQUN4QixVQUFNLFdBQVcseUJBQUcsR0FBRztBQUN2QixPQUFHLFVBQVUsU0FBUztBQUN0QixPQUFHLFNBQVMsUUFBUTtBQUNwQixPQUFHLE9BQU8sS0FBSyxDQUFDLEdBQUcsVUFBVSxFQUFFO0FBQy9CLE9BQUcsT0FBTyxLQUFLLENBQUMsR0FBRyxVQUFVLEVBQUU7QUFHL0IscUNBQU8sUUFBUSxFQUFFLHNCQUFzQixDQUFDO0FBQ3hDLHFDQUFPLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQztBQUN6QyxxQ0FBTyxTQUFTLEVBQUUscUJBQXFCLEtBQUssQ0FBQyxHQUFHLFVBQVUsRUFBRTtBQUFBLEVBQzlELENBQUM7QUFFRCwrQkFBRyxvRUFBb0UsTUFBTTtBQUMzRSxVQUFNLEtBQUssSUFBSSxvQ0FBYztBQUM3QixVQUFNLFdBQVcseUJBQUcsR0FBRztBQUN2QixPQUFHLFVBQVUsUUFBUTtBQUNyQixPQUFHLFFBQVEsS0FBSyxFQUFFLEdBQUcsUUFBUTtBQUM3QixxQ0FBTyxRQUFRLEVBQUUsSUFBSSxpQkFBaUI7QUFBQSxFQUN4QyxDQUFDO0FBQ0gsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsid20udGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgaXQsIGV4cGVjdCwgdmkgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgeyBXb3JraW5nTWVtb3J5IH0gZnJvbSBcIi4vd20uanNcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiLi9zY2hlbWEuanNcIjtcblxuZGVzY3JpYmUoXCJXb3JraW5nTWVtb3J5XCIsICgpID0+IHtcbiAgY29uc3QgbWtJZCA9IChuOiBudW1iZXIpID0+IG4gYXMgRW50aXR5SWQ7XG5cbiAgaXQoXCJpbnNlcnRzIGEgZmFjdCBhbmQgcmV0cmlldmVzIGl0IHdpdGggZ2V0KClcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHdtID0gbmV3IFdvcmtpbmdNZW1vcnkoKTtcbiAgICB3bS5pbnNlcnQobWtJZCgxKSwgXCJIZWFsdGhcIiwgMTAwKTtcbiAgICBleHBlY3Qod20uZ2V0KG1rSWQoMSksIFwiSGVhbHRoXCIpKS50b0JlKDEwMCk7XG4gIH0pO1xuXG4gIGl0KFwiaW5zZXJ0IHdpdGggc2FtZSBpZCthdHRyIHJlcGxhY2VzIGV4aXN0aW5nIHZhbHVlICh1cGRhdGUgc2VtYW50aWNzKVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgd20gPSBuZXcgV29ya2luZ01lbW9yeSgpO1xuICAgIHdtLmluc2VydChta0lkKDEpLCBcIkhlYWx0aFwiLCAxMDApO1xuICAgIHdtLmluc2VydChta0lkKDEpLCBcIkhlYWx0aFwiLCA1MCk7XG4gICAgZXhwZWN0KHdtLmdldChta0lkKDEpLCBcIkhlYWx0aFwiKSkudG9CZSg1MCk7XG4gIH0pO1xuXG4gIGl0KFwiZ2V0KCkgcmV0dXJucyB1bmRlZmluZWQgZm9yIG1pc3NpbmcgZmFjdFwiLCAoKSA9PiB7XG4gICAgY29uc3Qgd20gPSBuZXcgV29ya2luZ01lbW9yeSgpO1xuICAgIGV4cGVjdCh3bS5nZXQobWtJZCgxKSwgXCJIZWFsdGhcIikpLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJjb250YWlucygpIHJldHVybnMgdHJ1ZSB3aGVuIGZhY3QgZXhpc3RzXCIsICgpID0+IHtcbiAgICBjb25zdCB3bSA9IG5ldyBXb3JraW5nTWVtb3J5KCk7XG4gICAgd20uaW5zZXJ0KG1rSWQoMiksIFwiQWN0aXZlXCIsIHRydWUpO1xuICAgIGV4cGVjdCh3bS5jb250YWlucyhta0lkKDIpLCBcIkFjdGl2ZVwiKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJjb250YWlucygpIHJldHVybnMgZmFsc2Ugd2hlbiBmYWN0IG1pc3NpbmdcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHdtID0gbmV3IFdvcmtpbmdNZW1vcnkoKTtcbiAgICBleHBlY3Qod20uY29udGFpbnMobWtJZCgyKSwgXCJBY3RpdmVcIikpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcInJldHJhY3QoKSByZW1vdmVzIGEgZmFjdCwgcmV0dXJucyB0cnVlXCIsICgpID0+IHtcbiAgICBjb25zdCB3bSA9IG5ldyBXb3JraW5nTWVtb3J5KCk7XG4gICAgd20uaW5zZXJ0KG1rSWQoMyksIFwiTmFtZVwiLCBcIkFsaWNlXCIpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHdtLnJldHJhY3QobWtJZCgzKSwgXCJOYW1lXCIpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KHdtLmdldChta0lkKDMpLCBcIk5hbWVcIikpLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXRyYWN0KCkgcmV0dXJucyBmYWxzZSBmb3Igbm9uLWV4aXN0ZW50IGZhY3RcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHdtID0gbmV3IFdvcmtpbmdNZW1vcnkoKTtcbiAgICBjb25zdCByZXN1bHQgPSB3bS5yZXRyYWN0KG1rSWQoOTkpLCBcIkhlYWx0aFwiKTtcbiAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJhbGxGYWN0cygpIHJldHVybnMgc29ydGVkIFtpZCBhc2MsIGF0dHIgYXNjXSBhcnJheVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgd20gPSBuZXcgV29ya2luZ01lbW9yeSgpO1xuICAgIHdtLmluc2VydChta0lkKDIpLCBcIlpcIiwgXCJ6XCIpO1xuICAgIHdtLmluc2VydChta0lkKDEpLCBcIkJcIiwgXCJiXCIpO1xuICAgIHdtLmluc2VydChta0lkKDEpLCBcIkFcIiwgXCJhXCIpO1xuICAgIHdtLmluc2VydChta0lkKDIpLCBcIkFcIiwgXCJhMlwiKTtcbiAgICBjb25zdCBmYWN0cyA9IHdtLmFsbEZhY3RzKCk7XG4gICAgZXhwZWN0KGZhY3RzKS50b0hhdmVMZW5ndGgoNCk7XG4gICAgZXhwZWN0KGZhY3RzWzBdKS50b01hdGNoT2JqZWN0KHsgaWQ6IDEsIGF0dHI6IFwiQVwiIH0pO1xuICAgIGV4cGVjdChmYWN0c1sxXSkudG9NYXRjaE9iamVjdCh7IGlkOiAxLCBhdHRyOiBcIkJcIiB9KTtcbiAgICBleHBlY3QoZmFjdHNbMl0pLnRvTWF0Y2hPYmplY3QoeyBpZDogMiwgYXR0cjogXCJBXCIgfSk7XG4gICAgZXhwZWN0KGZhY3RzWzNdKS50b01hdGNoT2JqZWN0KHsgaWQ6IDIsIGF0dHI6IFwiWlwiIH0pO1xuICB9KTtcblxuICBpdChcImFsbEZhY3RzKCkgaXMgZGV0ZXJtaW5pc3RpYyBhY3Jvc3MgbXVsdGlwbGUgY2FsbHMgKHNhbWUgaW5zZXJ0aW9uIG9yZGVyKVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgd20gPSBuZXcgV29ya2luZ01lbW9yeSgpO1xuICAgIHdtLmluc2VydChta0lkKDUpLCBcIlhcIiwgMSk7XG4gICAgd20uaW5zZXJ0KG1rSWQoMyksIFwiWVwiLCAyKTtcbiAgICBjb25zdCBmaXJzdCA9IHdtLmFsbEZhY3RzKCkubWFwKChmKSA9PiBgJHtmLmlkfToke1N0cmluZyhmLmF0dHIpfWApO1xuICAgIGNvbnN0IHNlY29uZCA9IHdtLmFsbEZhY3RzKCkubWFwKChmKSA9PiBgJHtmLmlkfToke1N0cmluZyhmLmF0dHIpfWApO1xuICAgIGV4cGVjdChmaXJzdCkudG9FcXVhbChzZWNvbmQpO1xuICB9KTtcblxuICBpdChcImNhbGxzIGluc2VydCBsaXN0ZW5lciB3aGVuIGEgZmFjdCBpcyBpbnNlcnRlZFwiLCAoKSA9PiB7XG4gICAgY29uc3Qgd20gPSBuZXcgV29ya2luZ01lbW9yeSgpO1xuICAgIGNvbnN0IGxpc3RlbmVyID0gdmkuZm4oKTtcbiAgICB3bS5vbkluc2VydChsaXN0ZW5lcik7XG4gICAgd20uaW5zZXJ0KG1rSWQoMSksIFwiSGVhbHRoXCIsIDEwKTtcbiAgICBleHBlY3QobGlzdGVuZXIpLnRvSGF2ZUJlZW5DYWxsZWRPbmNlKCk7XG4gICAgZXhwZWN0KGxpc3RlbmVyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChta0lkKDEpLCBcIkhlYWx0aFwiLCAxMCk7XG4gIH0pO1xuXG4gIGl0KFwiY2FsbHMgcmV0cmFjdCBsaXN0ZW5lciB3aGVuIGEgZmFjdCBpcyByZXRyYWN0ZWRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHdtID0gbmV3IFdvcmtpbmdNZW1vcnkoKTtcbiAgICBjb25zdCBsaXN0ZW5lciA9IHZpLmZuKCk7XG4gICAgd20ub25SZXRyYWN0KGxpc3RlbmVyKTtcbiAgICB3bS5pbnNlcnQobWtJZCgxKSwgXCJIZWFsdGhcIiwgMTApO1xuICAgIHdtLnJldHJhY3QobWtJZCgxKSwgXCJIZWFsdGhcIik7XG4gICAgZXhwZWN0KGxpc3RlbmVyKS50b0hhdmVCZWVuQ2FsbGVkT25jZSgpO1xuICAgIGV4cGVjdChsaXN0ZW5lcikudG9IYXZlQmVlbkNhbGxlZFdpdGgobWtJZCgxKSwgXCJIZWFsdGhcIiwgMTApO1xuICB9KTtcblxuICBpdChcImNhbGxzIGluc2VydCBsaXN0ZW5lciBvbiB1cGRhdGUgKHJldHJhY3QraW5zZXJ0IG9mIHNhbWUgaWQrYXR0cilcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHdtID0gbmV3IFdvcmtpbmdNZW1vcnkoKTtcbiAgICBjb25zdCByZXRyYWN0Rm4gPSB2aS5mbigpO1xuICAgIGNvbnN0IGluc2VydEZuID0gdmkuZm4oKTtcbiAgICB3bS5vblJldHJhY3QocmV0cmFjdEZuKTtcbiAgICB3bS5vbkluc2VydChpbnNlcnRGbik7XG4gICAgd20uaW5zZXJ0KG1rSWQoMSksIFwiSGVhbHRoXCIsIDEwKTtcbiAgICB3bS5pbnNlcnQobWtJZCgxKSwgXCJIZWFsdGhcIiwgMjApOyAvLyB1cGRhdGVcbiAgICAvLyBGaXJzdCBpbnNlcnQ6IGluc2VydEZuIGNhbGxlZCB3aXRoIDEwXG4gICAgLy8gVXBkYXRlOiByZXRyYWN0Rm4gY2FsbGVkIHdpdGggb2xkIHZhbHVlIDEwLCB0aGVuIGluc2VydEZuIGNhbGxlZCB3aXRoIDIwXG4gICAgZXhwZWN0KGluc2VydEZuKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG4gICAgZXhwZWN0KHJldHJhY3RGbikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgIGV4cGVjdChyZXRyYWN0Rm4pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKG1rSWQoMSksIFwiSGVhbHRoXCIsIDEwKTtcbiAgfSk7XG5cbiAgaXQoXCJkb2VzIG5vdCBjYWxsIHJldHJhY3QgbGlzdGVuZXIgd2hlbiByZXRyYWN0aW5nIG5vbi1leGlzdGVudCBmYWN0XCIsICgpID0+IHtcbiAgICBjb25zdCB3bSA9IG5ldyBXb3JraW5nTWVtb3J5KCk7XG4gICAgY29uc3QgbGlzdGVuZXIgPSB2aS5mbigpO1xuICAgIHdtLm9uUmV0cmFjdChsaXN0ZW5lcik7XG4gICAgd20ucmV0cmFjdChta0lkKDk5KSwgXCJIZWFsdGhcIik7XG4gICAgZXhwZWN0KGxpc3RlbmVyKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvc3JjL3dtLnRlc3QudHMifQ== diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/b451dbe98797931b016352248d2dc02dcf0d4709 b/IJGn1F-WxLUCbfU1lu8pU/ssr/b451dbe98797931b016352248d2dc02dcf0d4709 deleted file mode 100644 index 32b27be..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/b451dbe98797931b016352248d2dc02dcf0d4709 +++ /dev/null @@ -1,74 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "WorkingMemory", { enumerable: true, configurable: true, get(){ try { return WorkingMemory } catch {} }}); -class WorkingMemory { - // Map> - #store = /* @__PURE__ */ new Map(); - #insertListeners = []; - #retractListeners = []; - /** Insert (or update) a fact. On update, fires retract listener for old value first. */ - insert(id, attr, value) { - let attrMap = this.#store.get(id); - if (!attrMap) { - attrMap = /* @__PURE__ */ new Map(); - this.#store.set(id, attrMap); - }; - if (attrMap.has(attr)) { - const oldValue = attrMap.get(attr); - for (const listener of this.#retractListeners) { - listener(id, attr, oldValue); - } - }; - attrMap.set(attr, value); - for (const listener of this.#insertListeners) { - listener(id, attr, value); - } - } - /** Retract a fact. Returns true if fact existed, false otherwise. */ - retract(id, attr) { - const attrMap = this.#store.get(id); - if (!attrMap?.has(attr)) return false; - const oldValue = attrMap.get(attr); - attrMap.delete(attr); - if (attrMap.size === 0) this.#store.delete(id); - for (const listener of this.#retractListeners) { - listener(id, attr, oldValue); - }; - return true; - } - /** Get the value of a fact, or undefined if not present. */ - get(id, attr) { - return this.#store.get(id)?.get(attr); - } - /** Check if a fact exists. */ - contains(id, attr) { - return this.#store.get(id)?.has(attr) ?? false; - } - /** - * Return all facts as a sorted array. - * Sort order: id asc (numeric), then attr asc (lexicographic). - * Per SPEC.md §Iteration Order — deterministic, never raw Map iteration in hot paths. - */ - allFacts() { - const result = []; - for (const [id, attrMap] of this.#store) { - for (const [attr, value] of attrMap) { - result.push({ id, attr, value }); - } - }; - result.sort((a, b) => { - if (a.id !== b.id) return a.id - b.id; - return a.attr < b.attr ? -1 : a.attr > b.attr ? 1 : 0; - }); - return result; - } - /** Register a listener called after each insert (including update inserts). */ - onInsert(listener) { - this.#insertListeners.push(listener); - } - /** Register a listener called before each retract (including update retracts). */ - onRetract(listener) { - this.#retractListeners.push(listener); - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQVlPLE1BQU0sY0FBYztBQUFBO0FBQUEsRUFFaEIsU0FBUyxvQkFBSSxJQUF1QztBQUFBLEVBQ3BELG1CQUFxQyxDQUFDO0FBQUEsRUFDdEMsb0JBQXVDLENBQUM7QUFBQTtBQUFBLEVBR2pELE9BQU8sSUFBYyxNQUFlLE9BQXdCO0FBQzFELFFBQUksVUFBVSxLQUFLLE9BQU8sSUFBSSxFQUFFO0FBQ2hDLFFBQUksQ0FBQyxTQUFTO0FBQ1osZ0JBQVUsb0JBQUksSUFBSTtBQUNsQixXQUFLLE9BQU8sSUFBSSxJQUFJLE9BQU87QUFBQSxJQUM3QjtBQUVBLFFBQUksUUFBUSxJQUFJLElBQUksR0FBRztBQUNyQixZQUFNLFdBQVcsUUFBUSxJQUFJLElBQUk7QUFDakMsaUJBQVcsWUFBWSxLQUFLLG1CQUFtQjtBQUM3QyxpQkFBUyxJQUFJLE1BQU0sUUFBUTtBQUFBLE1BQzdCO0FBQUEsSUFDRjtBQUNBLFlBQVEsSUFBSSxNQUFNLEtBQUs7QUFDdkIsZUFBVyxZQUFZLEtBQUssa0JBQWtCO0FBQzVDLGVBQVMsSUFBSSxNQUFNLEtBQUs7QUFBQSxJQUMxQjtBQUFBLEVBQ0Y7QUFBQTtBQUFBLEVBR0EsUUFBUSxJQUFjLE1BQXdCO0FBQzVDLFVBQU0sVUFBVSxLQUFLLE9BQU8sSUFBSSxFQUFFO0FBQ2xDLFFBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxFQUFHLFFBQU87QUFDaEMsVUFBTSxXQUFXLFFBQVEsSUFBSSxJQUFJO0FBQ2pDLFlBQVEsT0FBTyxJQUFJO0FBQ25CLFFBQUksUUFBUSxTQUFTLEVBQUcsTUFBSyxPQUFPLE9BQU8sRUFBRTtBQUM3QyxlQUFXLFlBQVksS0FBSyxtQkFBbUI7QUFDN0MsZUFBUyxJQUFJLE1BQU0sUUFBUTtBQUFBLElBQzdCO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFBQTtBQUFBLEVBR0EsSUFBSSxJQUFjLE1BQXNDO0FBQ3RELFdBQU8sS0FBSyxPQUFPLElBQUksRUFBRSxHQUFHLElBQUksSUFBSTtBQUFBLEVBQ3RDO0FBQUE7QUFBQSxFQUdBLFNBQVMsSUFBYyxNQUF3QjtBQUM3QyxXQUFPLEtBQUssT0FBTyxJQUFJLEVBQUUsR0FBRyxJQUFJLElBQUksS0FBSztBQUFBLEVBQzNDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsV0FBcUU7QUFDbkUsVUFBTSxTQUFtRSxDQUFDO0FBQzFFLGVBQVcsQ0FBQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7QUFDdkMsaUJBQVcsQ0FBQyxNQUFNLEtBQUssS0FBSyxTQUFTO0FBQ25DLGVBQU8sS0FBSyxFQUFFLElBQUksTUFBTSxNQUFNLENBQUM7QUFBQSxNQUNqQztBQUFBLElBQ0Y7QUFFQSxXQUFPLEtBQUssQ0FBQyxHQUFHLE1BQU07QUFDcEIsVUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFJLFFBQVEsRUFBRSxLQUFpQixFQUFFO0FBQ2hELGFBQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sSUFBSTtBQUFBLElBQ3RELENBQUM7QUFDRCxXQUFPO0FBQUEsRUFDVDtBQUFBO0FBQUEsRUFHQSxTQUFTLFVBQWdDO0FBQ3ZDLFNBQUssaUJBQWlCLEtBQUssUUFBUTtBQUFBLEVBQ3JDO0FBQUE7QUFBQSxFQUdBLFVBQVUsVUFBaUM7QUFDekMsU0FBSyxrQkFBa0IsS0FBSyxRQUFRO0FBQUEsRUFDdEM7QUFDRiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsid20udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXb3JraW5nTWVtb3J5IOKAlCBzdG9yZXMgRUFWIGZhY3RzLlxuICogUGVyIFNQRUMubWQgwqdGYWN0IE1vZGVsIGFuZCDCp0l0ZXJhdGlvbiBPcmRlci5cbiAqL1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuXG5leHBvcnQgdHlwZSBBdHRyS2V5ID0gc3RyaW5nO1xuZXhwb3J0IHR5cGUgRmFjdFZhbHVlID0gdW5rbm93bjtcblxudHlwZSBJbnNlcnRMaXN0ZW5lciA9IChpZDogRW50aXR5SWQsIGF0dHI6IEF0dHJLZXksIHZhbHVlOiBGYWN0VmFsdWUpID0+IHZvaWQ7XG50eXBlIFJldHJhY3RMaXN0ZW5lciA9IChpZDogRW50aXR5SWQsIGF0dHI6IEF0dHJLZXksIG9sZFZhbHVlOiBGYWN0VmFsdWUpID0+IHZvaWQ7XG5cbmV4cG9ydCBjbGFzcyBXb3JraW5nTWVtb3J5IHtcbiAgLy8gTWFwPGVudGl0eUlkLCBNYXA8YXR0cktleSwgdmFsdWU+PlxuICByZWFkb25seSAjc3RvcmUgPSBuZXcgTWFwPEVudGl0eUlkLCBNYXA8QXR0cktleSwgRmFjdFZhbHVlPj4oKTtcbiAgcmVhZG9ubHkgI2luc2VydExpc3RlbmVyczogSW5zZXJ0TGlzdGVuZXJbXSA9IFtdO1xuICByZWFkb25seSAjcmV0cmFjdExpc3RlbmVyczogUmV0cmFjdExpc3RlbmVyW10gPSBbXTtcblxuICAvKiogSW5zZXJ0IChvciB1cGRhdGUpIGEgZmFjdC4gT24gdXBkYXRlLCBmaXJlcyByZXRyYWN0IGxpc3RlbmVyIGZvciBvbGQgdmFsdWUgZmlyc3QuICovXG4gIGluc2VydChpZDogRW50aXR5SWQsIGF0dHI6IEF0dHJLZXksIHZhbHVlOiBGYWN0VmFsdWUpOiB2b2lkIHtcbiAgICBsZXQgYXR0ck1hcCA9IHRoaXMuI3N0b3JlLmdldChpZCk7XG4gICAgaWYgKCFhdHRyTWFwKSB7XG4gICAgICBhdHRyTWFwID0gbmV3IE1hcCgpO1xuICAgICAgdGhpcy4jc3RvcmUuc2V0KGlkLCBhdHRyTWFwKTtcbiAgICB9XG4gICAgLy8gSWYgZXhpc3RpbmcsIGZpcmUgcmV0cmFjdCBmb3Igb2xkIHZhbHVlICh1cGRhdGUgc2VtYW50aWNzKVxuICAgIGlmIChhdHRyTWFwLmhhcyhhdHRyKSkge1xuICAgICAgY29uc3Qgb2xkVmFsdWUgPSBhdHRyTWFwLmdldChhdHRyKTtcbiAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy4jcmV0cmFjdExpc3RlbmVycykge1xuICAgICAgICBsaXN0ZW5lcihpZCwgYXR0ciwgb2xkVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBhdHRyTWFwLnNldChhdHRyLCB2YWx1ZSk7XG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNpbnNlcnRMaXN0ZW5lcnMpIHtcbiAgICAgIGxpc3RlbmVyKGlkLCBhdHRyLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJldHJhY3QgYSBmYWN0LiBSZXR1cm5zIHRydWUgaWYgZmFjdCBleGlzdGVkLCBmYWxzZSBvdGhlcndpc2UuICovXG4gIHJldHJhY3QoaWQ6IEVudGl0eUlkLCBhdHRyOiBBdHRyS2V5KTogYm9vbGVhbiB7XG4gICAgY29uc3QgYXR0ck1hcCA9IHRoaXMuI3N0b3JlLmdldChpZCk7XG4gICAgaWYgKCFhdHRyTWFwPy5oYXMoYXR0cikpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBvbGRWYWx1ZSA9IGF0dHJNYXAuZ2V0KGF0dHIpO1xuICAgIGF0dHJNYXAuZGVsZXRlKGF0dHIpO1xuICAgIGlmIChhdHRyTWFwLnNpemUgPT09IDApIHRoaXMuI3N0b3JlLmRlbGV0ZShpZCk7XG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNyZXRyYWN0TGlzdGVuZXJzKSB7XG4gICAgICBsaXN0ZW5lcihpZCwgYXR0ciwgb2xkVmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIHZhbHVlIG9mIGEgZmFjdCwgb3IgdW5kZWZpbmVkIGlmIG5vdCBwcmVzZW50LiAqL1xuICBnZXQoaWQ6IEVudGl0eUlkLCBhdHRyOiBBdHRyS2V5KTogRmFjdFZhbHVlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jc3RvcmUuZ2V0KGlkKT8uZ2V0KGF0dHIpO1xuICB9XG5cbiAgLyoqIENoZWNrIGlmIGEgZmFjdCBleGlzdHMuICovXG4gIGNvbnRhaW5zKGlkOiBFbnRpdHlJZCwgYXR0cjogQXR0cktleSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNzdG9yZS5nZXQoaWQpPy5oYXMoYXR0cikgPz8gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCBmYWN0cyBhcyBhIHNvcnRlZCBhcnJheS5cbiAgICogU29ydCBvcmRlcjogaWQgYXNjIChudW1lcmljKSwgdGhlbiBhdHRyIGFzYyAobGV4aWNvZ3JhcGhpYykuXG4gICAqIFBlciBTUEVDLm1kIMKnSXRlcmF0aW9uIE9yZGVyIOKAlCBkZXRlcm1pbmlzdGljLCBuZXZlciByYXcgTWFwIGl0ZXJhdGlvbiBpbiBob3QgcGF0aHMuXG4gICAqL1xuICBhbGxGYWN0cygpOiBBcnJheTx7IGlkOiBFbnRpdHlJZDsgYXR0cjogQXR0cktleTsgdmFsdWU6IEZhY3RWYWx1ZSB9PiB7XG4gICAgY29uc3QgcmVzdWx0OiBBcnJheTx7IGlkOiBFbnRpdHlJZDsgYXR0cjogQXR0cktleTsgdmFsdWU6IEZhY3RWYWx1ZSB9PiA9IFtdO1xuICAgIGZvciAoY29uc3QgW2lkLCBhdHRyTWFwXSBvZiB0aGlzLiNzdG9yZSkge1xuICAgICAgZm9yIChjb25zdCBbYXR0ciwgdmFsdWVdIG9mIGF0dHJNYXApIHtcbiAgICAgICAgcmVzdWx0LnB1c2goeyBpZCwgYXR0ciwgdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFNvcnQ6IGlkIGFzYyAobnVtZXJpYyksIHRoZW4gYXR0ciBhc2MgKGxleGljb2dyYXBoaWMpLlxuICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBpZiAoYS5pZCAhPT0gYi5pZCkgcmV0dXJuIChhLmlkIGFzIG51bWJlcikgLSAoYi5pZCBhcyBudW1iZXIpO1xuICAgICAgcmV0dXJuIGEuYXR0ciA8IGIuYXR0ciA/IC0xIDogYS5hdHRyID4gYi5hdHRyID8gMSA6IDA7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKiBSZWdpc3RlciBhIGxpc3RlbmVyIGNhbGxlZCBhZnRlciBlYWNoIGluc2VydCAoaW5jbHVkaW5nIHVwZGF0ZSBpbnNlcnRzKS4gKi9cbiAgb25JbnNlcnQobGlzdGVuZXI6IEluc2VydExpc3RlbmVyKTogdm9pZCB7XG4gICAgdGhpcy4jaW5zZXJ0TGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqIFJlZ2lzdGVyIGEgbGlzdGVuZXIgY2FsbGVkIGJlZm9yZSBlYWNoIHJldHJhY3QgKGluY2x1ZGluZyB1cGRhdGUgcmV0cmFjdHMpLiAqL1xuICBvblJldHJhY3QobGlzdGVuZXI6IFJldHJhY3RMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuI3JldHJhY3RMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cbn1cbiJdLCJmaWxlIjoiL3NyYy93bS50cyJ9 diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/b7d67486f74642811525c6073035fb5993b9d6f4 b/IJGn1F-WxLUCbfU1lu8pU/ssr/b7d67486f74642811525c6073035fb5993b9d6f4 deleted file mode 100644 index e4aa962..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/b7d67486f74642811525c6073035fb5993b9d6f4 +++ /dev/null @@ -1,119 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("vitest", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/derived.ts", {"importedNames":["DerivedFactProduction"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/wm.ts", {"importedNames":["WorkingMemory"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/beta.ts", {"importedNames":["Token"]}); -const mkId = (n) => n; -const mkFact = (id, attr, value) => ({ id: mkId(id), attr, value }); -(0,__vite_ssr_import_0__.describe)("DerivedFactProduction", () => { - (0,__vite_ssr_import_0__.it)("inserts a derived fact into working memory when a match activates", () => { - const wm = new __vite_ssr_import_2__.WorkingMemory(); - const handler = (match) => [ - { attr: "AllHP", value: match["hp"] * 2 } - ]; - const prod = new __vite_ssr_import_1__.DerivedFactProduction("sum-hp", wm, handler); - const token = new __vite_ssr_import_3__.Token(null, mkFact(1, "Health", 100), { hp: 100 }); - prod.leftActivate(token); - const allFacts = wm.allFacts(); - const derived = allFacts.find((f) => f.attr === "AllHP"); - (0,__vite_ssr_import_0__.expect)(derived).toBeDefined(); - (0,__vite_ssr_import_0__.expect)(derived?.value).toBe(200); - (0,__vite_ssr_import_0__.expect)(derived?.id).toBeLessThan(0); - }); - (0,__vite_ssr_import_0__.it)("retracts derived fact when supporting match deactivates", () => { - const wm = new __vite_ssr_import_2__.WorkingMemory(); - const handler = (match) => [ - { attr: "Derived", value: match["x"] } - ]; - const prod = new __vite_ssr_import_1__.DerivedFactProduction("derive-x", wm, handler); - const token = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 42), { x: 42 }); - prod.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(wm.allFacts().find((f) => f.attr === "Derived")).toBeDefined(); - prod.leftDeactivate(token); - (0,__vite_ssr_import_0__.expect)(wm.allFacts().find((f) => f.attr === "Derived")).toBeUndefined(); - }); - (0,__vite_ssr_import_0__.it)("inserts multiple derived facts from one match", () => { - const wm = new __vite_ssr_import_2__.WorkingMemory(); - const handler = (match) => [ - { attr: "SumA", value: match["a"] }, - { attr: "SumB", value: match["b"] } - ]; - const prod = new __vite_ssr_import_1__.DerivedFactProduction("multi-derive", wm, handler); - const token = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 1), { a: 10, b: 20 }); - prod.leftActivate(token); - const facts = wm.allFacts(); - (0,__vite_ssr_import_0__.expect)(facts.find((f) => f.attr === "SumA")?.value).toBe(10); - (0,__vite_ssr_import_0__.expect)(facts.find((f) => f.attr === "SumB")?.value).toBe(20); - }); - (0,__vite_ssr_import_0__.it)("retracts all derived facts for a match when it deactivates", () => { - const wm = new __vite_ssr_import_2__.WorkingMemory(); - const handler = (match) => [ - { attr: "SumA", value: match["a"] }, - { attr: "SumB", value: match["b"] } - ]; - const prod = new __vite_ssr_import_1__.DerivedFactProduction("multi-derive", wm, handler); - const token = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 1), { a: 10, b: 20 }); - prod.leftActivate(token); - prod.leftDeactivate(token); - const facts = wm.allFacts(); - (0,__vite_ssr_import_0__.expect)(facts.find((f) => f.attr === "SumA")).toBeUndefined(); - (0,__vite_ssr_import_0__.expect)(facts.find((f) => f.attr === "SumB")).toBeUndefined(); - }); - (0,__vite_ssr_import_0__.it)("different matches produce different derived entity ids", () => { - const wm = new __vite_ssr_import_2__.WorkingMemory(); - const handler = (match) => [ - { attr: "Score", value: match["score"] } - ]; - const prod = new __vite_ssr_import_1__.DerivedFactProduction("score-derive", wm, handler); - const t1 = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 1), { score: 100 }); - const t2 = new __vite_ssr_import_3__.Token(null, mkFact(2, "X", 2), { score: 200 }); - prod.leftActivate(t1); - prod.leftActivate(t2); - const facts = wm.allFacts().filter((f) => f.attr === "Score"); - (0,__vite_ssr_import_0__.expect)(facts).toHaveLength(2); - const ids = facts.map((f) => f.id); - (0,__vite_ssr_import_0__.expect)(ids[0]).not.toBe(ids[1]); - (0,__vite_ssr_import_0__.expect)(ids.every((id) => id < 0)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("deactivating one match does not remove derived facts from other matches", () => { - const wm = new __vite_ssr_import_2__.WorkingMemory(); - const handler = (match) => [ - { attr: "Score", value: match["score"] } - ]; - const prod = new __vite_ssr_import_1__.DerivedFactProduction("score-derive", wm, handler); - const t1 = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 1), { score: 100 }); - const t2 = new __vite_ssr_import_3__.Token(null, mkFact(2, "X", 2), { score: 200 }); - prod.leftActivate(t1); - prod.leftActivate(t2); - prod.leftDeactivate(t1); - const facts = wm.allFacts().filter((f) => f.attr === "Score"); - (0,__vite_ssr_import_0__.expect)(facts).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(facts[0]?.value).toBe(200); - }); - (0,__vite_ssr_import_0__.it)("leftDeactivate on unknown token is a no-op", () => { - const wm = new __vite_ssr_import_2__.WorkingMemory(); - const handler = () => [{ attr: "X", value: 1 }]; - const prod = new __vite_ssr_import_1__.DerivedFactProduction("noop", wm, handler); - const token = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 1), {}); - (0,__vite_ssr_import_0__.expect)(() => prod.leftDeactivate(token)).not.toThrow(); - (0,__vite_ssr_import_0__.expect)(wm.allFacts()).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("handler producing no facts is valid (no-op activation/deactivation)", () => { - const wm = new __vite_ssr_import_2__.WorkingMemory(); - const handler = () => []; - const prod = new __vite_ssr_import_1__.DerivedFactProduction("empty", wm, handler); - const token = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 1), {}); - prod.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(wm.allFacts()).toHaveLength(0); - prod.leftDeactivate(token); - (0,__vite_ssr_import_0__.expect)(wm.allFacts()).toHaveLength(0); - (0,__vite_ssr_import_0__.expect)(() => prod.leftDeactivate(token)).not.toThrow(); - }); - (0,__vite_ssr_import_0__.it)("exposes ruleName for diagnostics", () => { - const wm = new __vite_ssr_import_2__.WorkingMemory(); - const prod = new __vite_ssr_import_1__.DerivedFactProduction("my-rule", wm, () => []); - (0,__vite_ssr_import_0__.expect)(prod.ruleName).toBe("my-rule"); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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UTtBQUNyRCxxQ0FBTyxHQUFHLFNBQVMsQ0FBQyxFQUFFLGFBQWEsQ0FBQztBQUFBLEVBQ3RDLENBQUM7QUFFRCwrQkFBRyx1RUFBdUUsTUFBTTtBQUM5RSxVQUFNLEtBQUssSUFBSSxvQ0FBYztBQUM3QixVQUFNLFVBQTBCLE1BQU0sQ0FBQztBQUN2QyxVQUFNLE9BQU8sSUFBSSw0Q0FBc0IsU0FBUyxJQUFJLE9BQU87QUFFM0QsVUFBTSxRQUFRLElBQUksNEJBQU0sTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELFNBQUssYUFBYSxLQUFLO0FBQ3ZCLHFDQUFPLEdBQUcsU0FBUyxDQUFDLEVBQUUsYUFBYSxDQUFDO0FBR3BDLFNBQUssZUFBZSxLQUFLO0FBQ3pCLHFDQUFPLEdBQUcsU0FBUyxDQUFDLEVBQUUsYUFBYSxDQUFDO0FBRXBDLHFDQUFPLE1BQU0sS0FBSyxlQUFlLEtBQUssQ0FBQyxFQUFFLElBQUksUUFBUTtBQUFBLEVBQ3ZELENBQUM7QUFFRCwrQkFBRyxvQ0FBb0MsTUFBTTtBQUMzQyxVQUFNLEtBQUssSUFBSSxvQ0FBYztBQUM3QixVQUFNLE9BQU8sSUFBSSw0Q0FBc0IsV0FBVyxJQUFJLE1BQU0sQ0FBQyxDQUFDO0FBQzlELHFDQUFPLEtBQUssUUFBUSxFQUFFLEtBQUssU0FBUztBQUFBLEVBQ3RDLENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJkZXJpdmVkLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgeyBEZXJpdmVkRmFjdFByb2R1Y3Rpb24sIHR5cGUgRGVyaXZlZEhhbmRsZXIgfSBmcm9tIFwiLi9kZXJpdmVkLmpzXCI7XG5pbXBvcnQgeyBXb3JraW5nTWVtb3J5IH0gZnJvbSBcIi4vd20uanNcIjtcbmltcG9ydCB7IFRva2VuIH0gZnJvbSBcIi4vYmV0YS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBdHRyS2V5LCBGYWN0VmFsdWUgfSBmcm9tIFwiLi93bS5qc1wiO1xuXG5jb25zdCBta0lkID0gKG46IG51bWJlcikgPT4gbiBhcyBFbnRpdHlJZDtcbmNvbnN0IG1rRmFjdCA9IChpZDogbnVtYmVyLCBhdHRyOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSA9PlxuICAoeyBpZDogbWtJZChpZCksIGF0dHI6IGF0dHIgYXMgQXR0cktleSwgdmFsdWU6IHZhbHVlIGFzIEZhY3RWYWx1ZSB9KTtcblxuZGVzY3JpYmUoXCJEZXJpdmVkRmFjdFByb2R1Y3Rpb25cIiwgKCkgPT4ge1xuICBpdChcImluc2VydHMgYSBkZXJpdmVkIGZhY3QgaW50byB3b3JraW5nIG1lbW9yeSB3aGVuIGEgbWF0Y2ggYWN0aXZhdGVzXCIsICgpID0+IHtcbiAgICBjb25zdCB3bSA9IG5ldyBXb3JraW5nTWVtb3J5KCk7XG4gICAgY29uc3QgaGFuZGxlcjogRGVyaXZlZEhhbmRsZXIgPSAobWF0Y2gpID0+IFtcbiAgICAgIHsgYXR0cjogXCJBbGxIUFwiLCB2YWx1ZTogKG1hdGNoW1wiaHBcIl0gYXMgbnVtYmVyKSAqIDIgfSxcbiAgICBdO1xuXG4gICAgY29uc3QgcHJvZCA9IG5ldyBEZXJpdmVkRmFjdFByb2R1Y3Rpb24oXCJzdW0taHBcIiwgd20sIGhhbmRsZXIpO1xuXG4gICAgY29uc3QgdG9rZW4gPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDEsIFwiSGVhbHRoXCIsIDEwMCksIHsgaHA6IDEwMCB9KTtcbiAgICBwcm9kLmxlZnRBY3RpdmF0ZSh0b2tlbik7XG5cbiAgICAvLyBEZXJpdmVkIGZhY3Qgc2hvdWxkIGV4aXN0IGluIFdNIHdpdGggbmVnYXRpdmUgaWRcbiAgICBjb25zdCBhbGxGYWN0cyA9IHdtLmFsbEZhY3RzKCk7XG4gICAgY29uc3QgZGVyaXZlZCA9IGFsbEZhY3RzLmZpbmQoKGYpID0+IGYuYXR0ciA9PT0gXCJBbGxIUFwiKTtcbiAgICBleHBlY3QoZGVyaXZlZCkudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3QoZGVyaXZlZD8udmFsdWUpLnRvQmUoMjAwKTtcbiAgICBleHBlY3QoZGVyaXZlZD8uaWQgYXMgbnVtYmVyKS50b0JlTGVzc1RoYW4oMCk7IC8vIG5lZ2F0aXZlIGlkXG4gIH0pO1xuXG4gIGl0KFwicmV0cmFjdHMgZGVyaXZlZCBmYWN0IHdoZW4gc3VwcG9ydGluZyBtYXRjaCBkZWFjdGl2YXRlc1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgd20gPSBuZXcgV29ya2luZ01lbW9yeSgpO1xuICAgIGNvbnN0IGhhbmRsZXI6IERlcml2ZWRIYW5kbGVyID0gKG1hdGNoKSA9PiBbXG4gICAgICB7IGF0dHI6IFwiRGVyaXZlZFwiLCB2YWx1ZTogbWF0Y2hbXCJ4XCJdIGFzIEZhY3RWYWx1ZSB9LFxuICAgIF07XG5cbiAgICBjb25zdCBwcm9kID0gbmV3IERlcml2ZWRGYWN0UHJvZHVjdGlvbihcImRlcml2ZS14XCIsIHdtLCBoYW5kbGVyKTtcbiAgICBjb25zdCB0b2tlbiA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoMSwgXCJYXCIsIDQyKSwgeyB4OiA0MiB9KTtcblxuICAgIHByb2QubGVmdEFjdGl2YXRlKHRva2VuKTtcbiAgICBleHBlY3Qod20uYWxsRmFjdHMoKS5maW5kKChmKSA9PiBmLmF0dHIgPT09IFwiRGVyaXZlZFwiKSkudG9CZURlZmluZWQoKTtcblxuICAgIHByb2QubGVmdERlYWN0aXZhdGUodG9rZW4pO1xuICAgIGV4cGVjdCh3bS5hbGxGYWN0cygpLmZpbmQoKGYpID0+IGYuYXR0ciA9PT0gXCJEZXJpdmVkXCIpKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xuXG4gIGl0KFwiaW5zZXJ0cyBtdWx0aXBsZSBkZXJpdmVkIGZhY3RzIGZyb20gb25lIG1hdGNoXCIsICgpID0+IHtcbiAgICBjb25zdCB3bSA9IG5ldyBXb3JraW5nTWVtb3J5KCk7XG4gICAgY29uc3QgaGFuZGxlcjogRGVyaXZlZEhhbmRsZXIgPSAobWF0Y2gpID0+IFtcbiAgICAgIHsgYXR0cjogXCJTdW1BXCIsIHZhbHVlOiBtYXRjaFtcImFcIl0gYXMgRmFjdFZhbHVlIH0sXG4gICAgICB7IGF0dHI6IFwiU3VtQlwiLCB2YWx1ZTogbWF0Y2hbXCJiXCJdIGFzIEZhY3RWYWx1ZSB9LFxuICAgIF07XG5cbiAgICBjb25zdCBwcm9kID0gbmV3IERlcml2ZWRGYWN0UHJvZHVjdGlvbihcIm11bHRpLWRlcml2ZVwiLCB3bSwgaGFuZGxlcik7XG4gICAgY29uc3QgdG9rZW4gPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDEsIFwiWFwiLCAxKSwgeyBhOiAxMCwgYjogMjAgfSk7XG5cbiAgICBwcm9kLmxlZnRBY3RpdmF0ZSh0b2tlbik7XG5cbiAgICBjb25zdCBmYWN0cyA9IHdtLmFsbEZhY3RzKCk7XG4gICAgZXhwZWN0KGZhY3RzLmZpbmQoKGYpID0+IGYuYXR0ciA9PT0gXCJTdW1BXCIpPy52YWx1ZSkudG9CZSgxMCk7XG4gICAgZXhwZWN0KGZhY3RzLmZpbmQoKGYpID0+IGYuYXR0ciA9PT0gXCJTdW1CXCIpPy52YWx1ZSkudG9CZSgyMCk7XG4gIH0pO1xuXG4gIGl0KFwicmV0cmFjdHMgYWxsIGRlcml2ZWQgZmFjdHMgZm9yIGEgbWF0Y2ggd2hlbiBpdCBkZWFjdGl2YXRlc1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgd20gPSBuZXcgV29ya2luZ01lbW9yeSgpO1xuICAgIGNvbnN0IGhhbmRsZXI6IERlcml2ZWRIYW5kbGVyID0gKG1hdGNoKSA9PiBbXG4gICAgICB7IGF0dHI6IFwiU3VtQVwiLCB2YWx1ZTogbWF0Y2hbXCJhXCJdIGFzIEZhY3RWYWx1ZSB9LFxuICAgICAgeyBhdHRyOiBcIlN1bUJcIiwgdmFsdWU6IG1hdGNoW1wiYlwiXSBhcyBGYWN0VmFsdWUgfSxcbiAgICBdO1xuXG4gICAgY29uc3QgcHJvZCA9IG5ldyBEZXJpdmVkRmFjdFByb2R1Y3Rpb24oXCJtdWx0aS1kZXJpdmVcIiwgd20sIGhhbmRsZXIpO1xuICAgIGNvbnN0IHRva2VuID0gbmV3IFRva2VuKG51bGwsIG1rRmFjdCgxLCBcIlhcIiwgMSksIHsgYTogMTAsIGI6IDIwIH0pO1xuXG4gICAgcHJvZC5sZWZ0QWN0aXZhdGUodG9rZW4pO1xuICAgIHByb2QubGVmdERlYWN0aXZhdGUodG9rZW4pO1xuXG4gICAgY29uc3QgZmFjdHMgPSB3bS5hbGxGYWN0cygpO1xuICAgIGV4cGVjdChmYWN0cy5maW5kKChmKSA9PiBmLmF0dHIgPT09IFwiU3VtQVwiKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChmYWN0cy5maW5kKChmKSA9PiBmLmF0dHIgPT09IFwiU3VtQlwiKSkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcblxuICBpdChcImRpZmZlcmVudCBtYXRjaGVzIHByb2R1Y2UgZGlmZmVyZW50IGRlcml2ZWQgZW50aXR5IGlkc1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgd20gPSBuZXcgV29ya2luZ01lbW9yeSgpO1xuICAgIGNvbnN0IGhhbmRsZXI6IERlcml2ZWRIYW5kbGVyID0gKG1hdGNoKSA9PiBbXG4gICAgICB7IGF0dHI6IFwiU2NvcmVcIiwgdmFsdWU6IG1hdGNoW1wic2NvcmVcIl0gYXMgRmFjdFZhbHVlIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IHByb2QgPSBuZXcgRGVyaXZlZEZhY3RQcm9kdWN0aW9uKFwic2NvcmUtZGVyaXZlXCIsIHdtLCBoYW5kbGVyKTtcbiAgICBjb25zdCB0MSA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoMSwgXCJYXCIsIDEpLCB7IHNjb3JlOiAxMDAgfSk7XG4gICAgY29uc3QgdDIgPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDIsIFwiWFwiLCAyKSwgeyBzY29yZTogMjAwIH0pO1xuXG4gICAgcHJvZC5sZWZ0QWN0aXZhdGUodDEpO1xuICAgIHByb2QubGVmdEFjdGl2YXRlKHQyKTtcblxuICAgIGNvbnN0IGZhY3RzID0gd20uYWxsRmFjdHMoKS5maWx0ZXIoKGYpID0+IGYuYXR0ciA9PT0gXCJTY29yZVwiKTtcbiAgICBleHBlY3QoZmFjdHMpLnRvSGF2ZUxlbmd0aCgyKTtcbiAgICAvLyBCb3RoIGhhdmUgbmVnYXRpdmUgaWRzLCBhbmQgdGhleSdyZSBkaWZmZXJlbnRcbiAgICBjb25zdCBpZHMgPSBmYWN0cy5tYXAoKGYpID0+IGYuaWQgYXMgbnVtYmVyKTtcbiAgICBleHBlY3QoaWRzWzBdKS5ub3QudG9CZShpZHNbMV0pO1xuICAgIGV4cGVjdChpZHMuZXZlcnkoKGlkKSA9PiBpZCA8IDApKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcImRlYWN0aXZhdGluZyBvbmUgbWF0Y2ggZG9lcyBub3QgcmVtb3ZlIGRlcml2ZWQgZmFjdHMgZnJvbSBvdGhlciBtYXRjaGVzXCIsICgpID0+IHtcbiAgICBjb25zdCB3bSA9IG5ldyBXb3JraW5nTWVtb3J5KCk7XG4gICAgY29uc3QgaGFuZGxlcjogRGVyaXZlZEhhbmRsZXIgPSAobWF0Y2gpID0+IFtcbiAgICAgIHsgYXR0cjogXCJTY29yZVwiLCB2YWx1ZTogbWF0Y2hbXCJzY29yZVwiXSBhcyBGYWN0VmFsdWUgfSxcbiAgICBdO1xuXG4gICAgY29uc3QgcHJvZCA9IG5ldyBEZXJpdmVkRmFjdFByb2R1Y3Rpb24oXCJzY29yZS1kZXJpdmVcIiwgd20sIGhhbmRsZXIpO1xuICAgIGNvbnN0IHQxID0gbmV3IFRva2VuKG51bGwsIG1rRmFjdCgxLCBcIlhcIiwgMSksIHsgc2NvcmU6IDEwMCB9KTtcbiAgICBjb25zdCB0MiA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoMiwgXCJYXCIsIDIpLCB7IHNjb3JlOiAyMDAgfSk7XG5cbiAgICBwcm9kLmxlZnRBY3RpdmF0ZSh0MSk7XG4gICAgcHJvZC5sZWZ0QWN0aXZhdGUodDIpO1xuICAgIHByb2QubGVmdERlYWN0aXZhdGUodDEpOyAvLyByZW1vdmUgb25seSB0MSdzIGRlcml2ZWQgZmFjdFxuXG4gICAgY29uc3QgZmFjdHMgPSB3bS5hbGxGYWN0cygpLmZpbHRlcigoZikgPT4gZi5hdHRyID09PSBcIlNjb3JlXCIpO1xuICAgIGV4cGVjdChmYWN0cykudG9IYXZlTGVuZ3RoKDEpO1xuICAgIGV4cGVjdChmYWN0c1swXT8udmFsdWUpLnRvQmUoMjAwKTtcbiAgfSk7XG5cbiAgaXQoXCJsZWZ0RGVhY3RpdmF0ZSBvbiB1bmtub3duIHRva2VuIGlzIGEgbm8tb3BcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHdtID0gbmV3IFdvcmtpbmdNZW1vcnkoKTtcbiAgICBjb25zdCBoYW5kbGVyOiBEZXJpdmVkSGFuZGxlciA9ICgpID0+IFt7IGF0dHI6IFwiWFwiLCB2YWx1ZTogMSB9XTtcbiAgICBjb25zdCBwcm9kID0gbmV3IERlcml2ZWRGYWN0UHJvZHVjdGlvbihcIm5vb3BcIiwgd20sIGhhbmRsZXIpO1xuXG4gICAgY29uc3QgdG9rZW4gPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDEsIFwiWFwiLCAxKSwge30pO1xuICAgIC8vIE5ldmVyIGFjdGl2YXRlZCDigJQgZGVhY3RpdmF0ZSBzaG91bGQgbm90IHRocm93IGFuZCBzaG91bGQgbm90IG11dGF0ZSBXTS5cbiAgICBleHBlY3QoKCkgPT4gcHJvZC5sZWZ0RGVhY3RpdmF0ZSh0b2tlbikpLm5vdC50b1Rocm93KCk7XG4gICAgZXhwZWN0KHdtLmFsbEZhY3RzKCkpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG5cbiAgaXQoXCJoYW5kbGVyIHByb2R1Y2luZyBubyBmYWN0cyBpcyB2YWxpZCAobm8tb3AgYWN0aXZhdGlvbi9kZWFjdGl2YXRpb24pXCIsICgpID0+IHtcbiAgICBjb25zdCB3bSA9IG5ldyBXb3JraW5nTWVtb3J5KCk7XG4gICAgY29uc3QgaGFuZGxlcjogRGVyaXZlZEhhbmRsZXIgPSAoKSA9PiBbXTtcbiAgICBjb25zdCBwcm9kID0gbmV3IERlcml2ZWRGYWN0UHJvZHVjdGlvbihcImVtcHR5XCIsIHdtLCBoYW5kbGVyKTtcblxuICAgIGNvbnN0IHRva2VuID0gbmV3IFRva2VuKG51bGwsIG1rRmFjdCgxLCBcIlhcIiwgMSksIHt9KTtcbiAgICBwcm9kLmxlZnRBY3RpdmF0ZSh0b2tlbik7XG4gICAgZXhwZWN0KHdtLmFsbEZhY3RzKCkpLnRvSGF2ZUxlbmd0aCgwKTtcblxuICAgIC8vIERlYWN0aXZhdGlvbiBvZiBhbiBhY3RpdmF0ZWQtYnV0LWVtcHR5IHRva2VuIG11c3Qgc3RpbGwgY2xlYW4gdXAuXG4gICAgcHJvZC5sZWZ0RGVhY3RpdmF0ZSh0b2tlbik7XG4gICAgZXhwZWN0KHdtLmFsbEZhY3RzKCkpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgICAvLyBTZWNvbmQgZGVhY3RpdmF0aW9uIGlzIGEgbm8tb3AgKGVudHJ5IGFscmVhZHkgcmVtb3ZlZCkuXG4gICAgZXhwZWN0KCgpID0+IHByb2QubGVmdERlYWN0aXZhdGUodG9rZW4pKS5ub3QudG9UaHJvdygpO1xuICB9KTtcblxuICBpdChcImV4cG9zZXMgcnVsZU5hbWUgZm9yIGRpYWdub3N0aWNzXCIsICgpID0+IHtcbiAgICBjb25zdCB3bSA9IG5ldyBXb3JraW5nTWVtb3J5KCk7XG4gICAgY29uc3QgcHJvZCA9IG5ldyBEZXJpdmVkRmFjdFByb2R1Y3Rpb24oXCJteS1ydWxlXCIsIHdtLCAoKSA9PiBbXSk7XG4gICAgZXhwZWN0KHByb2QucnVsZU5hbWUpLnRvQmUoXCJteS1ydWxlXCIpO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvc3JjL2Rlcml2ZWQudGVzdC50cyJ9 diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/bbbd9acd1a9aa6a50c86076077f18e8bfb248f92 b/IJGn1F-WxLUCbfU1lu8pU/ssr/bbbd9acd1a9aa6a50c86076077f18e8bfb248f92 deleted file mode 100644 index ec857ac..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/bbbd9acd1a9aa6a50c86076077f18e8bfb248f92 +++ /dev/null @@ -1,138 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("vitest", {"importedNames":["describe","it","expect","vi"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/alpha.ts", {"importedNames":["AlphaNetwork"]}); -const mkId = (n) => n; -(0,__vite_ssr_import_0__.describe)("AlphaNetwork", () => { - (0,__vite_ssr_import_0__.it)("dispatches an inserted fact to a matching node (exact id + attr)", () => { - const net = new __vite_ssr_import_1__.AlphaNetwork(); - const cond = { id: mkId(1), attr: "Health" }; - const node = net.buildNode(cond); - const listener = __vite_ssr_import_0__.vi.fn(); - node.onActivate(listener); - net.notifyInsert(mkId(1), "Health", 100); - (0,__vite_ssr_import_0__.expect)(listener).toHaveBeenCalledOnce(); - (0,__vite_ssr_import_0__.expect)(listener).toHaveBeenCalledWith(mkId(1), "Health", 100); - }); - (0,__vite_ssr_import_0__.it)("does NOT dispatch to a node with a different id", () => { - const net = new __vite_ssr_import_1__.AlphaNetwork(); - const node = net.buildNode({ id: mkId(2), attr: "Health" }); - const listener = __vite_ssr_import_0__.vi.fn(); - node.onActivate(listener); - net.notifyInsert(mkId(1), "Health", 100); - (0,__vite_ssr_import_0__.expect)(listener).not.toHaveBeenCalled(); - }); - (0,__vite_ssr_import_0__.it)("dispatches to wildcard-id node (id: null) regardless of entity", () => { - const net = new __vite_ssr_import_1__.AlphaNetwork(); - const node = net.buildNode({ id: null, attr: "Health" }); - const listener = __vite_ssr_import_0__.vi.fn(); - node.onActivate(listener); - net.notifyInsert(mkId(1), "Health", 10); - net.notifyInsert(mkId(2), "Health", 20); - net.notifyInsert(mkId(3), "Name", "Alice"); - (0,__vite_ssr_import_0__.expect)(listener).toHaveBeenCalledTimes(2); - }); - (0,__vite_ssr_import_0__.it)("does NOT dispatch fact with wrong attr even if id matches", () => { - const net = new __vite_ssr_import_1__.AlphaNetwork(); - const node = net.buildNode({ id: mkId(1), attr: "Health" }); - const listener = __vite_ssr_import_0__.vi.fn(); - node.onActivate(listener); - net.notifyInsert(mkId(1), "Position", 42); - (0,__vite_ssr_import_0__.expect)(listener).not.toHaveBeenCalled(); - }); - (0,__vite_ssr_import_0__.it)("notifyRetract removes fact from memory and calls deactivate", () => { - const net = new __vite_ssr_import_1__.AlphaNetwork(); - const node = net.buildNode({ id: null, attr: "Health" }); - const deactivateFn = __vite_ssr_import_0__.vi.fn(); - node.onDeactivate(deactivateFn); - net.notifyInsert(mkId(1), "Health", 10); - net.notifyRetract(mkId(1), "Health", 10); - (0,__vite_ssr_import_0__.expect)(deactivateFn).toHaveBeenCalledOnce(); - (0,__vite_ssr_import_0__.expect)(deactivateFn).toHaveBeenCalledWith(mkId(1), "Health", 10); - (0,__vite_ssr_import_0__.expect)(node.memory.facts).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("buildNode returns same node for same condition (memoized)", () => { - const net = new __vite_ssr_import_1__.AlphaNetwork(); - const cond = { id: null, attr: "X" }; - const node1 = net.buildNode(cond); - const node2 = net.buildNode(cond); - (0,__vite_ssr_import_0__.expect)(node1).toBe(node2); - }); - (0,__vite_ssr_import_0__.it)("buildNode returns different nodes for different conditions", () => { - const net = new __vite_ssr_import_1__.AlphaNetwork(); - const nodeA = net.buildNode({ id: null, attr: "A" }); - const nodeB = net.buildNode({ id: null, attr: "B" }); - (0,__vite_ssr_import_0__.expect)(nodeA).not.toBe(nodeB); - }); - (0,__vite_ssr_import_0__.it)("buildNode distinguishes wildcard from specific id on same attr", () => { - const net = new __vite_ssr_import_1__.AlphaNetwork(); - const wildcard = net.buildNode({ id: null, attr: "X" }); - const specific = net.buildNode({ id: mkId(1), attr: "X" }); - (0,__vite_ssr_import_0__.expect)(wildcard).not.toBe(specific); - const wildFn = __vite_ssr_import_0__.vi.fn(); - const specFn = __vite_ssr_import_0__.vi.fn(); - wildcard.onActivate(wildFn); - specific.onActivate(specFn); - net.notifyInsert(mkId(1), "X", 1); - net.notifyInsert(mkId(2), "X", 2); - (0,__vite_ssr_import_0__.expect)(wildFn).toHaveBeenCalledTimes(2); - (0,__vite_ssr_import_0__.expect)(specFn).toHaveBeenCalledTimes(1); - (0,__vite_ssr_import_0__.expect)(specFn).toHaveBeenCalledWith(mkId(1), "X", 1); - }); - (0,__vite_ssr_import_0__.it)("stores all matching facts in alpha memory, sorted [id asc, attr asc]", () => { - const net = new __vite_ssr_import_1__.AlphaNetwork(); - const node = net.buildNode({ id: null, attr: "Hp" }); - net.notifyInsert(mkId(2), "Hp", 5); - net.notifyInsert(mkId(1), "Hp", 3); - net.notifyInsert(mkId(3), "Other", 0); - (0,__vite_ssr_import_0__.expect)(node.memory.facts).toHaveLength(2); - (0,__vite_ssr_import_0__.expect)(node.memory.facts[0]).toMatchObject({ id: 1, attr: "Hp", value: 3 }); - (0,__vite_ssr_import_0__.expect)(node.memory.facts[1]).toMatchObject({ id: 2, attr: "Hp", value: 5 }); - }); - (0,__vite_ssr_import_0__.it)("notifyRetract on non-indexed attr is a no-op", () => { - const net = new __vite_ssr_import_1__.AlphaNetwork(); - const node = net.buildNode({ id: null, attr: "A" }); - const fn = __vite_ssr_import_0__.vi.fn(); - node.onDeactivate(fn); - net.notifyRetract(mkId(1), "Unknown", 0); - (0,__vite_ssr_import_0__.expect)(fn).not.toHaveBeenCalled(); - }); - (0,__vite_ssr_import_0__.it)("notifyInsert on non-indexed attr is a no-op", () => { - const net = new __vite_ssr_import_1__.AlphaNetwork(); - const node = net.buildNode({ id: null, attr: "A" }); - const fn = __vite_ssr_import_0__.vi.fn(); - node.onActivate(fn); - net.notifyInsert(mkId(1), "Unknown", 0); - (0,__vite_ssr_import_0__.expect)(fn).not.toHaveBeenCalled(); - }); - (0,__vite_ssr_import_0__.it)("supports multiple alpha nodes for the same attr (wildcard + specific)", () => { - const net = new __vite_ssr_import_1__.AlphaNetwork(); - const wild = net.buildNode({ id: null, attr: "Hp" }); - const spec = net.buildNode({ id: mkId(7), attr: "Hp" }); - const wildFn = __vite_ssr_import_0__.vi.fn(); - const specFn = __vite_ssr_import_0__.vi.fn(); - wild.onActivate(wildFn); - spec.onActivate(specFn); - net.notifyInsert(mkId(7), "Hp", 99); - (0,__vite_ssr_import_0__.expect)(wildFn).toHaveBeenCalledOnce(); - (0,__vite_ssr_import_0__.expect)(specFn).toHaveBeenCalledOnce(); - }); - (0,__vite_ssr_import_0__.it)("handles 10,000 inserts without error (scalability / inverted index O(1))", () => { - const net = new __vite_ssr_import_1__.AlphaNetwork(); - let count = 0; - const node = net.buildNode({ id: null, attr: "X" }); - node.onActivate(() => { - count++; - }); - const decoy = net.buildNode({ id: null, attr: "Y" }); - const decoyFn = __vite_ssr_import_0__.vi.fn(); - decoy.onActivate(decoyFn); - for (let i = 0; i < 1e4; i++) { - net.notifyInsert(i, "X", i); - }; - (0,__vite_ssr_import_0__.expect)(count).toBe(1e4); - (0,__vite_ssr_import_0__.expect)(node.memory.facts).toHaveLength(1e4); - (0,__vite_ssr_import_0__.expect)(decoyFn).not.toHaveBeenCalled(); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFNLE1BQU0sS0FBSyxDQUFDO0FBQ25ELFVBQU0sT0FBTyxJQUFJLFVBQVUsRUFBRSxJQUFJLEtBQUssQ0FBQyxHQUFHLE1BQU0sS0FBSyxDQUFDO0FBQ3RELFVBQU0sU0FBUyx5QkFBRyxHQUFHO0FBQ3JCLFVBQU0sU0FBUyx5QkFBRyxHQUFHO0FBQ3JCLFNBQUssV0FBVyxNQUFNO0FBQ3RCLFNBQUssV0FBVyxNQUFNO0FBRXRCLFFBQUksYUFBYSxLQUFLLENBQUMsR0FBRyxNQUFNLEVBQUU7QUFHbEMscUNBQU8sTUFBTSxFQUFFLHFCQUFxQjtBQUNwQyxxQ0FBTyxNQUFNLEVBQUUscUJBQXFCO0FBQUEsRUFDdEMsQ0FBQztBQUVELCtCQUFHLDRFQUE0RSxNQUFNO0FBQ25GLFVBQU0sTUFBTSxJQUFJLG1DQUFhO0FBQzdCLFFBQUksUUFBUTtBQUNaLFVBQU0sT0FBTyxJQUFJLFVBQVUsRUFBRSxJQUFJLE1BQU0sTUFBTSxJQUFJLENBQUM7QUFDbEQsU0FBSyxXQUFXLE1BQU07QUFDcEI7QUFBQSxJQUNGLENBQUM7QUFHRCxVQUFNLFFBQVEsSUFBSSxVQUFVLEVBQUUsSUFBSSxNQUFNLE1BQU0sSUFBSSxDQUFDO0FBQ25ELFVBQU0sVUFBVSx5QkFBRyxHQUFHO0FBQ3RCLFVBQU0sV0FBVyxPQUFPO0FBRXhCLGFBQVMsSUFBSSxHQUFHLElBQUksS0FBUSxLQUFLO0FBQy9CLFVBQUksYUFBYSxHQUFlLEtBQUssQ0FBQztBQUFBLElBQ3hDO0FBQ0EscUNBQU8sS0FBSyxFQUFFLEtBQUssR0FBTTtBQUN6QixxQ0FBTyxLQUFLLE9BQU8sS0FBSyxFQUFFLGFBQWEsR0FBTTtBQUM3QyxxQ0FBTyxPQUFPLEVBQUUsSUFBSSxpQkFBaUI7QUFBQSxFQUN2QyxDQUFDO0FBQ0gsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiYWxwaGEudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgaXQsIGV4cGVjdCwgdmkgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgeyBBbHBoYU5ldHdvcmssIHR5cGUgQWxwaGFDb25kaXRpb24gfSBmcm9tIFwiLi9hbHBoYS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuXG5jb25zdCBta0lkID0gKG46IG51bWJlcikgPT4gbiBhcyBFbnRpdHlJZDtcblxuZGVzY3JpYmUoXCJBbHBoYU5ldHdvcmtcIiwgKCkgPT4ge1xuICBpdChcImRpc3BhdGNoZXMgYW4gaW5zZXJ0ZWQgZmFjdCB0byBhIG1hdGNoaW5nIG5vZGUgKGV4YWN0IGlkICsgYXR0cilcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG5ldCA9IG5ldyBBbHBoYU5ldHdvcmsoKTtcbiAgICBjb25zdCBjb25kOiBBbHBoYUNvbmRpdGlvbiA9IHsgaWQ6IG1rSWQoMSksIGF0dHI6IFwiSGVhbHRoXCIgfTtcbiAgICBjb25zdCBub2RlID0gbmV0LmJ1aWxkTm9kZShjb25kKTtcbiAgICBjb25zdCBsaXN0ZW5lciA9IHZpLmZuKCk7XG4gICAgbm9kZS5vbkFjdGl2YXRlKGxpc3RlbmVyKTtcblxuICAgIG5ldC5ub3RpZnlJbnNlcnQobWtJZCgxKSwgXCJIZWFsdGhcIiwgMTAwKTtcbiAgICBleHBlY3QobGlzdGVuZXIpLnRvSGF2ZUJlZW5DYWxsZWRPbmNlKCk7XG4gICAgZXhwZWN0KGxpc3RlbmVyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChta0lkKDEpLCBcIkhlYWx0aFwiLCAxMDApO1xuICB9KTtcblxuICBpdChcImRvZXMgTk9UIGRpc3BhdGNoIHRvIGEgbm9kZSB3aXRoIGEgZGlmZmVyZW50IGlkXCIsICgpID0+IHtcbiAgICBjb25zdCBuZXQgPSBuZXcgQWxwaGFOZXR3b3JrKCk7XG4gICAgY29uc3Qgbm9kZSA9IG5ldC5idWlsZE5vZGUoeyBpZDogbWtJZCgyKSwgYXR0cjogXCJIZWFsdGhcIiB9KTtcbiAgICBjb25zdCBsaXN0ZW5lciA9IHZpLmZuKCk7XG4gICAgbm9kZS5vbkFjdGl2YXRlKGxpc3RlbmVyKTtcblxuICAgIG5ldC5ub3RpZnlJbnNlcnQobWtJZCgxKSwgXCJIZWFsdGhcIiwgMTAwKTsgLy8gZGlmZmVyZW50IGlkXG4gICAgZXhwZWN0KGxpc3RlbmVyKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcblxuICBpdChcImRpc3BhdGNoZXMgdG8gd2lsZGNhcmQtaWQgbm9kZSAoaWQ6IG51bGwpIHJlZ2FyZGxlc3Mgb2YgZW50aXR5XCIsICgpID0+IHtcbiAgICBjb25zdCBuZXQgPSBuZXcgQWxwaGFOZXR3b3JrKCk7XG4gICAgY29uc3Qgbm9kZSA9IG5ldC5idWlsZE5vZGUoeyBpZDogbnVsbCwgYXR0cjogXCJIZWFsdGhcIiB9KTtcbiAgICBjb25zdCBsaXN0ZW5lciA9IHZpLmZuKCk7XG4gICAgbm9kZS5vbkFjdGl2YXRlKGxpc3RlbmVyKTtcblxuICAgIG5ldC5ub3RpZnlJbnNlcnQobWtJZCgxKSwgXCJIZWFsdGhcIiwgMTApO1xuICAgIG5ldC5ub3RpZnlJbnNlcnQobWtJZCgyKSwgXCJIZWFsdGhcIiwgMjApO1xuICAgIG5ldC5ub3RpZnlJbnNlcnQobWtJZCgzKSwgXCJOYW1lXCIsIFwiQWxpY2VcIik7IC8vIGRpZmZlcmVudCBhdHRyIOKAlCBubyBtYXRjaFxuICAgIGV4cGVjdChsaXN0ZW5lcikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICB9KTtcblxuICBpdChcImRvZXMgTk9UIGRpc3BhdGNoIGZhY3Qgd2l0aCB3cm9uZyBhdHRyIGV2ZW4gaWYgaWQgbWF0Y2hlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgbmV0ID0gbmV3IEFscGhhTmV0d29yaygpO1xuICAgIGNvbnN0IG5vZGUgPSBuZXQuYnVpbGROb2RlKHsgaWQ6IG1rSWQoMSksIGF0dHI6IFwiSGVhbHRoXCIgfSk7XG4gICAgY29uc3QgbGlzdGVuZXIgPSB2aS5mbigpO1xuICAgIG5vZGUub25BY3RpdmF0ZShsaXN0ZW5lcik7XG5cbiAgICBuZXQubm90aWZ5SW5zZXJ0KG1rSWQoMSksIFwiUG9zaXRpb25cIiwgNDIpOyAvLyB3cm9uZyBhdHRyXG4gICAgZXhwZWN0KGxpc3RlbmVyKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcblxuICBpdChcIm5vdGlmeVJldHJhY3QgcmVtb3ZlcyBmYWN0IGZyb20gbWVtb3J5IGFuZCBjYWxscyBkZWFjdGl2YXRlXCIsICgpID0+IHtcbiAgICBjb25zdCBuZXQgPSBuZXcgQWxwaGFOZXR3b3JrKCk7XG4gICAgY29uc3Qgbm9kZSA9IG5ldC5idWlsZE5vZGUoeyBpZDogbnVsbCwgYXR0cjogXCJIZWFsdGhcIiB9KTtcbiAgICBjb25zdCBkZWFjdGl2YXRlRm4gPSB2aS5mbigpO1xuICAgIG5vZGUub25EZWFjdGl2YXRlKGRlYWN0aXZhdGVGbik7XG5cbiAgICBuZXQubm90aWZ5SW5zZXJ0KG1rSWQoMSksIFwiSGVhbHRoXCIsIDEwKTtcbiAgICBuZXQubm90aWZ5UmV0cmFjdChta0lkKDEpLCBcIkhlYWx0aFwiLCAxMCk7XG5cbiAgICBleHBlY3QoZGVhY3RpdmF0ZUZuKS50b0hhdmVCZWVuQ2FsbGVkT25jZSgpO1xuICAgIGV4cGVjdChkZWFjdGl2YXRlRm4pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKG1rSWQoMSksIFwiSGVhbHRoXCIsIDEwKTtcbiAgICBleHBlY3Qobm9kZS5tZW1vcnkuZmFjdHMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG5cbiAgaXQoXCJidWlsZE5vZGUgcmV0dXJucyBzYW1lIG5vZGUgZm9yIHNhbWUgY29uZGl0aW9uIChtZW1vaXplZClcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG5ldCA9IG5ldyBBbHBoYU5ldHdvcmsoKTtcbiAgICBjb25zdCBjb25kOiBBbHBoYUNvbmRpdGlvbiA9IHsgaWQ6IG51bGwsIGF0dHI6IFwiWFwiIH07XG4gICAgY29uc3Qgbm9kZTEgPSBuZXQuYnVpbGROb2RlKGNvbmQpO1xuICAgIGNvbnN0IG5vZGUyID0gbmV0LmJ1aWxkTm9kZShjb25kKTtcbiAgICBleHBlY3Qobm9kZTEpLnRvQmUobm9kZTIpO1xuICB9KTtcblxuICBpdChcImJ1aWxkTm9kZSByZXR1cm5zIGRpZmZlcmVudCBub2RlcyBmb3IgZGlmZmVyZW50IGNvbmRpdGlvbnNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG5ldCA9IG5ldyBBbHBoYU5ldHdvcmsoKTtcbiAgICBjb25zdCBub2RlQSA9IG5ldC5idWlsZE5vZGUoeyBpZDogbnVsbCwgYXR0cjogXCJBXCIgfSk7XG4gICAgY29uc3Qgbm9kZUIgPSBuZXQuYnVpbGROb2RlKHsgaWQ6IG51bGwsIGF0dHI6IFwiQlwiIH0pO1xuICAgIGV4cGVjdChub2RlQSkubm90LnRvQmUobm9kZUIpO1xuICB9KTtcblxuICBpdChcImJ1aWxkTm9kZSBkaXN0aW5ndWlzaGVzIHdpbGRjYXJkIGZyb20gc3BlY2lmaWMgaWQgb24gc2FtZSBhdHRyXCIsICgpID0+IHtcbiAgICBjb25zdCBuZXQgPSBuZXcgQWxwaGFOZXR3b3JrKCk7XG4gICAgY29uc3Qgd2lsZGNhcmQgPSBuZXQuYnVpbGROb2RlKHsgaWQ6IG51bGwsIGF0dHI6IFwiWFwiIH0pO1xuICAgIGNvbnN0IHNwZWNpZmljID0gbmV0LmJ1aWxkTm9kZSh7IGlkOiBta0lkKDEpLCBhdHRyOiBcIlhcIiB9KTtcbiAgICBleHBlY3Qod2lsZGNhcmQpLm5vdC50b0JlKHNwZWNpZmljKTtcblxuICAgIGNvbnN0IHdpbGRGbiA9IHZpLmZuKCk7XG4gICAgY29uc3Qgc3BlY0ZuID0gdmkuZm4oKTtcbiAgICB3aWxkY2FyZC5vbkFjdGl2YXRlKHdpbGRGbik7XG4gICAgc3BlY2lmaWMub25BY3RpdmF0ZShzcGVjRm4pO1xuXG4gICAgbmV0Lm5vdGlmeUluc2VydChta0lkKDEpLCBcIlhcIiwgMSk7XG4gICAgbmV0Lm5vdGlmeUluc2VydChta0lkKDIpLCBcIlhcIiwgMik7XG5cbiAgICBleHBlY3Qod2lsZEZuKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG4gICAgZXhwZWN0KHNwZWNGbikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgIGV4cGVjdChzcGVjRm4pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKG1rSWQoMSksIFwiWFwiLCAxKTtcbiAgfSk7XG5cbiAgaXQoXCJzdG9yZXMgYWxsIG1hdGNoaW5nIGZhY3RzIGluIGFscGhhIG1lbW9yeSwgc29ydGVkIFtpZCBhc2MsIGF0dHIgYXNjXVwiLCAoKSA9PiB7XG4gICAgY29uc3QgbmV0ID0gbmV3IEFscGhhTmV0d29yaygpO1xuICAgIGNvbnN0IG5vZGUgPSBuZXQuYnVpbGROb2RlKHsgaWQ6IG51bGwsIGF0dHI6IFwiSHBcIiB9KTtcblxuICAgIG5ldC5ub3RpZnlJbnNlcnQobWtJZCgyKSwgXCJIcFwiLCA1KTtcbiAgICBuZXQubm90aWZ5SW5zZXJ0KG1rSWQoMSksIFwiSHBcIiwgMyk7XG4gICAgbmV0Lm5vdGlmeUluc2VydChta0lkKDMpLCBcIk90aGVyXCIsIDApOyAvLyBubyBtYXRjaFxuXG4gICAgLy8gTWVtb3J5IHNob3VsZCBoYXZlIHNvcnRlZCBmYWN0c1xuICAgIGV4cGVjdChub2RlLm1lbW9yeS5mYWN0cykudG9IYXZlTGVuZ3RoKDIpO1xuICAgIGV4cGVjdChub2RlLm1lbW9yeS5mYWN0c1swXSkudG9NYXRjaE9iamVjdCh7IGlkOiAxLCBhdHRyOiBcIkhwXCIsIHZhbHVlOiAzIH0pO1xuICAgIGV4cGVjdChub2RlLm1lbW9yeS5mYWN0c1sxXSkudG9NYXRjaE9iamVjdCh7IGlkOiAyLCBhdHRyOiBcIkhwXCIsIHZhbHVlOiA1IH0pO1xuICB9KTtcblxuICBpdChcIm5vdGlmeVJldHJhY3Qgb24gbm9uLWluZGV4ZWQgYXR0ciBpcyBhIG5vLW9wXCIsICgpID0+IHtcbiAgICBjb25zdCBuZXQgPSBuZXcgQWxwaGFOZXR3b3JrKCk7XG4gICAgY29uc3Qgbm9kZSA9IG5ldC5idWlsZE5vZGUoeyBpZDogbnVsbCwgYXR0cjogXCJBXCIgfSk7XG4gICAgY29uc3QgZm4gPSB2aS5mbigpO1xuICAgIG5vZGUub25EZWFjdGl2YXRlKGZuKTtcblxuICAgIC8vIE5vIG5vZGUgZm9yIFwiVW5rbm93blwiIOKAlCByZXRyYWN0IHNob3VsZCBub3QgdGhyb3cgb3IgYWZmZWN0IG91ciBub2RlXG4gICAgbmV0Lm5vdGlmeVJldHJhY3QobWtJZCgxKSwgXCJVbmtub3duXCIsIDApO1xuICAgIGV4cGVjdChmbikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJub3RpZnlJbnNlcnQgb24gbm9uLWluZGV4ZWQgYXR0ciBpcyBhIG5vLW9wXCIsICgpID0+IHtcbiAgICBjb25zdCBuZXQgPSBuZXcgQWxwaGFOZXR3b3JrKCk7XG4gICAgY29uc3Qgbm9kZSA9IG5ldC5idWlsZE5vZGUoeyBpZDogbnVsbCwgYXR0cjogXCJBXCIgfSk7XG4gICAgY29uc3QgZm4gPSB2aS5mbigpO1xuICAgIG5vZGUub25BY3RpdmF0ZShmbik7XG5cbiAgICBuZXQubm90aWZ5SW5zZXJ0KG1rSWQoMSksIFwiVW5rbm93blwiLCAwKTtcbiAgICBleHBlY3QoZm4pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xuXG4gIGl0KFwic3VwcG9ydHMgbXVsdGlwbGUgYWxwaGEgbm9kZXMgZm9yIHRoZSBzYW1lIGF0dHIgKHdpbGRjYXJkICsgc3BlY2lmaWMpXCIsICgpID0+IHtcbiAgICBjb25zdCBuZXQgPSBuZXcgQWxwaGFOZXR3b3JrKCk7XG4gICAgY29uc3Qgd2lsZCA9IG5ldC5idWlsZE5vZGUoeyBpZDogbnVsbCwgYXR0cjogXCJIcFwiIH0pO1xuICAgIGNvbnN0IHNwZWMgPSBuZXQuYnVpbGROb2RlKHsgaWQ6IG1rSWQoNyksIGF0dHI6IFwiSHBcIiB9KTtcbiAgICBjb25zdCB3aWxkRm4gPSB2aS5mbigpO1xuICAgIGNvbnN0IHNwZWNGbiA9IHZpLmZuKCk7XG4gICAgd2lsZC5vbkFjdGl2YXRlKHdpbGRGbik7XG4gICAgc3BlYy5vbkFjdGl2YXRlKHNwZWNGbik7XG5cbiAgICBuZXQubm90aWZ5SW5zZXJ0KG1rSWQoNyksIFwiSHBcIiwgOTkpO1xuXG4gICAgLy8gQm90aCBzaG91bGQgYWN0aXZhdGUgZm9yIHRoaXMgZmFjdFxuICAgIGV4cGVjdCh3aWxkRm4pLnRvSGF2ZUJlZW5DYWxsZWRPbmNlKCk7XG4gICAgZXhwZWN0KHNwZWNGbikudG9IYXZlQmVlbkNhbGxlZE9uY2UoKTtcbiAgfSk7XG5cbiAgaXQoXCJoYW5kbGVzIDEwLDAwMCBpbnNlcnRzIHdpdGhvdXQgZXJyb3IgKHNjYWxhYmlsaXR5IC8gaW52ZXJ0ZWQgaW5kZXggTygxKSlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG5ldCA9IG5ldyBBbHBoYU5ldHdvcmsoKTtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGNvbnN0IG5vZGUgPSBuZXQuYnVpbGROb2RlKHsgaWQ6IG51bGwsIGF0dHI6IFwiWFwiIH0pO1xuICAgIG5vZGUub25BY3RpdmF0ZSgoKSA9PiB7XG4gICAgICBjb3VudCsrO1xuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIGEgZGVjb3kgbm9kZSBvbiBhbm90aGVyIGF0dHIgdG8gZW5zdXJlIHdlJ3JlIG5vdCBzY2FubmluZyBhbGwgbm9kZXNcbiAgICBjb25zdCBkZWNveSA9IG5ldC5idWlsZE5vZGUoeyBpZDogbnVsbCwgYXR0cjogXCJZXCIgfSk7XG4gICAgY29uc3QgZGVjb3lGbiA9IHZpLmZuKCk7XG4gICAgZGVjb3kub25BY3RpdmF0ZShkZWNveUZuKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTBfMDAwOyBpKyspIHtcbiAgICAgIG5ldC5ub3RpZnlJbnNlcnQoaSBhcyBFbnRpdHlJZCwgXCJYXCIsIGkpO1xuICAgIH1cbiAgICBleHBlY3QoY291bnQpLnRvQmUoMTBfMDAwKTtcbiAgICBleHBlY3Qobm9kZS5tZW1vcnkuZmFjdHMpLnRvSGF2ZUxlbmd0aCgxMF8wMDApO1xuICAgIGV4cGVjdChkZWNveUZuKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvc3JjL2FscGhhLnRlc3QudHMifQ== diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/c3951fd38e84a1cbe51a93f04d81f806f4c3dc83 b/IJGn1F-WxLUCbfU1lu8pU/ssr/c3951fd38e84a1cbe51a93f04d81f806f4c3dc83 deleted file mode 100644 index 15f84c2..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/c3951fd38e84a1cbe51a93f04d81f806f4c3dc83 +++ /dev/null @@ -1,200 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "JoinNode", { enumerable: true, configurable: true, get(){ try { return JoinNode } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/beta.ts", {"importedNames":["Token","BetaMemory"]}); -class JoinNode { - #activateListeners = []; - #deactivateListeners = []; - /** - * Produced tokens indexed by the right fact key `${id}:${attr}`. - * - * Each entry is the list of downstream tokens we emitted the last time the - * fact was right-activated. On {@link JoinNode.rightDeactivate} we use this - * index to retract exactly those tokens in O(matches) without scanning all - * downstream state. - * - * The key intentionally omits `value` because an alpha memory stores at - * most one value per `(id, attr)` pair at any time — reactivation after an - * update produces a fresh entry under the same key. - */ - #producedTokens = /* @__PURE__ */ new Map(); - #leftMemory; - #rightMemory; - #tests; - #valueBinding; - #idBinding; - /** - * @param leftMemory Upstream beta memory supplying partial matches. - * @param rightMemory Alpha memory supplying facts for this condition. - * @param tests Equality tests evaluated against every `(token, fact)` pair. - * @param valueBinding Variable name under which the right fact's *value* is - * recorded in produced tokens, or `null` to omit. - * @param idBinding Variable name under which the right fact's *entity id* - * is recorded in produced tokens, or `null` to omit. - */ - constructor(leftMemory, rightMemory, tests, valueBinding, idBinding) { - this.#leftMemory = leftMemory; - this.#rightMemory = rightMemory; - this.#tests = tests; - this.#valueBinding = valueBinding; - this.#idBinding = idBinding; - } - /** Subscribe to downstream activations. Listeners fire in registration order. */ - addDownstreamActivate(listener) { - this.#activateListeners.push(listener); - } - /** Subscribe to downstream deactivations. Listeners fire in registration order. */ - addDownstreamDeactivate(listener) { - this.#deactivateListeners.push(listener); - } - /** - * Process a new right-side fact. - * - * Called by the upstream AlphaNode's activate listener. Walks the left - * memory, emits one extended token per token that passes the tests, and - * records the batch under the fact key so retraction can find them. - */ - rightActivate(id, attr, value) { - const factKey = `${id}:${attr}`; - const produced = []; - for (const token of this.#leftMemory.tokens) { - if (this.#testsPass(token, id, value)) { - const newToken = this.#makeToken(token, id, attr, value); - produced.push(newToken); - for (const l of this.#activateListeners) l(newToken); - } - }; - if (produced.length > 0) { - this.#producedTokens.set(factKey, produced); - } - } - /** - * Withdraw matches derived from a retracted right-side fact. - * - * Looks up the batch recorded by {@link JoinNode.rightActivate} under the - * fact key and fires deactivate listeners for each. If there is no such - * batch (e.g. no tokens matched originally) the call is a no-op. - * - * The `_value` parameter is unused — alpha memories key by `(id, attr)` - * and updates are modelled as retract-then-insert of the same pair, so the - * key alone is sufficient. - */ - rightDeactivate(id, attr, _value) { - const factKey = `${id}:${attr}`; - const produced = this.#producedTokens.get(factKey); - if (!produced) return; - for (const token of produced) { - for (const l of this.#deactivateListeners) l(token); - }; - this.#producedTokens.delete(factKey); - } - /** - * Process a new left-side token. - * - * Called when an upstream beta memory admits a new partial match. Walks the - * (sorted) right memory and emits extended tokens for every right fact that - * passes the tests. Each produced token is also recorded in the per-fact - * index so a later retraction of either side retracts consistently. - */ - leftActivate(token) { - for (const { id, attr, value } of this.#rightMemory.facts) { - if (this.#testsPass(token, id, value)) { - const newToken = this.#makeToken(token, id, attr, value); - const factKey = `${id}:${attr}`; - let bucket = this.#producedTokens.get(factKey); - if (!bucket) { - bucket = []; - this.#producedTokens.set(factKey, bucket); - }; - bucket.push(newToken); - for (const l of this.#activateListeners) l(newToken); - } - } - } - /** - * Withdraw matches derived from a retracted left-side token. - * - * Walks the produced-tokens index and retracts every recorded token whose - * parent chain contains the deactivated token. Entries that become empty - * are removed from the index to bound memory growth over long sessions. - */ - leftDeactivate(token) { - for (const [key, tokens] of this.#producedTokens) { - const remaining = []; - const removed = []; - for (const t of tokens) { - if (this.#hasAncestor(t, token)) { - removed.push(t); - } else { - remaining.push(t); - } - }; - for (const r of removed) { - for (const l of this.#deactivateListeners) l(r); - }; - if (remaining.length === 0) { - this.#producedTokens.delete(key); - } else if (removed.length > 0) { - this.#producedTokens.set(key, remaining); - } - } - } - /** - * Evaluate every join test against `(token, right fact)`. - * - * Short-circuits on the first failing test. `idEquality` compares the right - * entity id; `valueEquality` compares the right value. A test whose - * `leftVar` is missing from the token bindings always fails — this keeps - * the node safe against builder bugs that forget to bind a variable before - * referencing it. - */ - #testsPass(token, rightId, rightValue) { - for (const test of this.#tests) { - const leftVal = token.bindings[test.leftVar]; - if (leftVal === void 0) return false; - if (test.type === "idEquality") { - if (leftVal !== rightId) return false; - } else { - if (leftVal !== rightValue) return false; - } - }; - return true; - } - /** - * Allocate the extended token for a successful `(token, fact)` pair. - * - * The new token's bindings are a shallow copy of the parent's bindings - * plus (optionally) the value and id slots configured on this node. Copy - * semantics are deliberate — sibling produced tokens must not share a - * bindings object, otherwise a later filter/handler could mutate one match - * and silently corrupt another. - */ - #makeToken(parent, rightId, rightAttr, rightValue) { - const newBindings = { ...parent.bindings }; - if (this.#valueBinding !== null) { - newBindings[this.#valueBinding] = rightValue; - }; - if (this.#idBinding !== null) { - newBindings[this.#idBinding] = rightId; - }; - const fact = { id: rightId, attr: rightAttr, value: rightValue }; - return new __vite_ssr_import_0__.Token(parent, fact, newBindings); - } - /** - * Walk a token's `parent` chain looking for `ancestor`. - * - * Equality is by object reference — tokens are never duplicated structurally - * within a chain, so reference identity is the correct relation. Returns - * `true` as soon as `ancestor` is seen, including the trivial case where - * `token === ancestor`. - */ - #hasAncestor(token, ancestor) { - let current = token; - while (current !== null) { - if (current === ancestor) return true; - current = current.parent; - }; - return false; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFLLFVBQVUsSUFBSTtBQUFBLElBQ2pDO0FBQ0EsVUFBTSxPQUFrQixFQUFFLElBQUksU0FBUyxNQUFNLFdBQVcsT0FBTyxXQUFXO0FBQzFFLFdBQU8sSUFBSSw0QkFBTSxRQUFRLE1BQU0sV0FBVztBQUFBLEVBQzVDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVUEsYUFBYSxPQUFjLFVBQTBCO0FBQ25ELFFBQUksVUFBd0I7QUFDNUIsV0FBTyxZQUFZLE1BQU07QUFDdkIsVUFBSSxZQUFZLFNBQVUsUUFBTztBQUNqQyxnQkFBVSxRQUFRO0FBQUEsSUFDcEI7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUNGIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJqb2luLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSm9pbk5vZGUg4oCUIHRoZSBjb3JlIG9mIHRoZSBSZXRlIGJldGEgbmV0d29yay5cbiAqXG4gKiBQZXIgYHBhY2thZ2VzL3JldGUvU1BFQy5tZCDCp1JldGUgSUkgUmVmZXJlbmNlIFRhcmdldGAgdGhpcyBtb2R1bGUgaW1wbGVtZW50c1xuICogdGhlIEpvaW5Ob2RlIGZyb20gdGhlIERvb3JlbmJvcyBiZXRhIG5ldHdvcmsuIEEgam9pbiBjb21iaW5lcyBhIGxlZnQgaW5wdXRcbiAqICh7QGxpbmsgQmV0YU1lbW9yeX0gb2YgcGFydGlhbCBtYXRjaGVzKSB3aXRoIGEgcmlnaHQgaW5wdXQgKHtAbGlua1xuICogQWxwaGFNZW1vcnl9IG9mIGZhY3RzIHRoYXQgcGFzc2VkIGNvbnN0YW50IHRlc3RzKSBhbmQgZW1pdHMgYSBuZXcgcGFydGlhbFxuICogbWF0Y2ggZm9yIGV2ZXJ5IGAodG9rZW4sIGZhY3QpYCBwYWlyIHRoYXQgc2F0aXNmaWVzIHRoZSBub2RlJ3MgZXF1YWxpdHlcbiAqIHRlc3RzLiBUaGlzIGlzIHRoZSBzdGVwIHRoYXQgbWFrZXMgUmV0ZSBpbmNyZW1lbnRhbDogd2hlbiBlaXRoZXIgc2lkZVxuICogY2hhbmdlcywgb25seSB0aGUgY3Jvc3MgcHJvZHVjdCBhZ2FpbnN0IHRoZSAqb3RoZXIqIHNpZGUgaXMgY29uc2lkZXJlZCxcbiAqIG5ldmVyIHRoZSBmdWxsIHdvcmtpbmcgbWVtb3J5LlxuICpcbiAqICMjIyBFcXVhbGl0eSB0ZXN0c1xuICpcbiAqIEEge0BsaW5rIEpvaW5UZXN0fSBleHByZXNzZXMgYW4gZXF1YWxpdHkgY29uc3RyYWludCBiZXR3ZWVuIGEgdmFyaWFibGVcbiAqIGFscmVhZHkgYm91bmQgYnkgdGhlIHRva2VuIGFuZCBzb21lIGZpZWxkIG9mIHRoZSByaWdodCBmYWN0LiBUd28ga2luZHMgYXJlXG4gKiByZWNvZ25pc2VkIGluIFBoYXNlIDE6XG4gKlxuICogLSBgaWRFcXVhbGl0eWAg4oCUIHRoZSByaWdodCBmYWN0J3MgKmVudGl0eSBpZCogbXVzdCBlcXVhbCBgdG9rZW4uYmluZGluZ3NbbGVmdFZhcl1gLlxuICogICBUaGlzIGlzIGhvdyBtdWx0aS1jb25kaXRpb24gcnVsZXMgZW5mb3JjZSBcInNhbWUgZW50aXR5IGFjcm9zcyBjb25kaXRpb25zXCIsXG4gKiAgIGUuZy4gYCg/aWQsIEhlYWx0aCwgP2gpIOKIpyAoP2lkLCBQb3NpdGlvbiwgP3ApYCByZXVzZXMgYD9pZGAgYnkgZW1pdHRpbmcgYW5cbiAqICAgYGlkRXF1YWxpdHlgIHRlc3QgYXQgdGhlIHNlY29uZCBqb2luLlxuICogLSBgdmFsdWVFcXVhbGl0eWAg4oCUIHRoZSByaWdodCBmYWN0J3MgKnZhbHVlKiBtdXN0IGVxdWFsIGB0b2tlbi5iaW5kaW5nc1tsZWZ0VmFyXWAuXG4gKiAgIFVzZWQgd2hlbiBhIHZhcmlhYmxlIHdhcyBib3VuZCBhcyB0aGUgdmFsdWUgb2YgYW4gZWFybGllciBjb25kaXRpb24gYW5kXG4gKiAgIG5lZWRzIHRvIGxpbmUgdXAgd2l0aCB0aGUgdmFsdWUgb2YgdGhpcyBjb25kaXRpb24gKGUuZy4gY2hhaW5pbmcgdGhyb3VnaFxuICogICBhIHBvaW50ZXItdHlwZWQgYXR0cmlidXRlKS5cbiAqXG4gKiBUZXN0cyBhcmUgY29uanVuY3RpdmUg4oCUIGEgYCh0b2tlbiwgZmFjdClgIHBhaXIgbXVzdCBzYXRpc2Z5ICpldmVyeSogdGVzdCB0b1xuICogcHJvcGFnYXRlLiBBbiBlbXB0eSB0ZXN0IGxpc3QgcHJvZHVjZXMgdGhlIGZ1bGwgY2FydGVzaWFuIHByb2R1Y3QsIHdoaWNoIGlzXG4gKiB0aGUgY29ycmVjdCBiZWhhdmlvdXIgZm9yIHRoZSBmaXJzdCBqb2luIGluIGEgcnVsZSAobm8gcHJpb3IgdmFyaWFibGVzIHRvXG4gKiBjb25zdHJhaW4pIGFuZCBmb3IgZ2VudWluZSBjcm9zcy1wcm9kdWN0IGpvaW5zLlxuICpcbiAqIEluZXF1YWxpdHkvYXJpdGhtZXRpYyBmaWx0ZXJzIGFyZSAqbm90KiBoYW5kbGVkIGhlcmUg4oCUIHRob3NlIGJlbG9uZyB0byB0aGVcbiAqIEZpbHRlck5vZGUgZnJvbSBQMS45LiBLZWVwaW5nIEpvaW5Ob2RlIGZvY3VzZWQgb24gZXF1YWxpdHkgbGV0cyB1cyBpbmRleFxuICogcmlnaHQtc2lkZSBhY2Nlc3MgaW4gbGF0ZXIgcGhhc2VzIChoYXNoLWpvaW4pIHdpdGhvdXQgcHVsbGluZyBpbiBhcmJpdHJhcnlcbiAqIHByZWRpY2F0ZXMuXG4gKlxuICogIyMjIFRva2VuIHByb2R1Y3Rpb24gYW5kIHJldHJhY3Rpb24gYm9va2tlZXBpbmdcbiAqXG4gKiBPbiBhIHN1Y2Nlc3NmdWwgam9pbiB0aGlzIG5vZGUgYWxsb2NhdGVzIGV4YWN0bHkgb25lIG5ldyB7QGxpbmsgVG9rZW59XG4gKiB3aG9zZSBgcGFyZW50YCBpcyB0aGUgbGVmdCB0b2tlbiBhbmQgd2hvc2UgYGZhY3RgIC8gYGJpbmRpbmdzYCBleHRlbmQgdGhlXG4gKiBtYXRjaCB3aXRoIHRoZSByaWdodCBmYWN0LiBEb3duc3RyZWFtIHN1YnNjcmliZXJzIHJlZ2lzdGVyZWQgdmlhXG4gKiB7QGxpbmsgSm9pbk5vZGUuYWRkRG93bnN0cmVhbUFjdGl2YXRlfSBmaXJlIGluIHJlZ2lzdHJhdGlvbiBvcmRlci5cbiAqXG4gKiBSZXRyYWN0aW9uIGlzIHRoZSBzdWJ0bGUgcGFydDpcbiAqXG4gKiAtICoqUmlnaHQgZGVhY3RpdmF0aW9uKiogKGEgZmFjdCBsZWF2ZXMgQWxwaGFNZW1vcnkpIG11c3QgcmV0cmFjdCBldmVyeVxuICogICBkb3duc3RyZWFtIHRva2VuIHRoYXQgd2FzIHByb2R1Y2VkIGZyb20gdGhhdCBmYWN0LiBXZSBpbmRleCBwcm9kdWNlZFxuICogICB0b2tlbnMgYnkgdGhlIHJpZ2h0LWZhY3Qga2V5IGAke2lkfToke2F0dHJ9YCBkdXJpbmdcbiAqICAge0BsaW5rIEpvaW5Ob2RlLnJpZ2h0QWN0aXZhdGV9IHNvIHRoZSBsb29rdXAgb24gcmV0cmFjdCBpcyBPKDEpICtcbiAqICAgTyhtYXRjaGVzKS5cbiAqIC0gKipMZWZ0IGRlYWN0aXZhdGlvbioqIChhIHRva2VuIGxlYXZlcyB0aGUgbGVmdCBCZXRhTWVtb3J5KSBtdXN0IHJldHJhY3RcbiAqICAgZXZlcnkgZG93bnN0cmVhbSB0b2tlbiB3aG9zZSBwYXJlbnQgY2hhaW4gY29udGFpbnMgdGhhdCB0b2tlbi4gV2Ugd2Fsa1xuICogICB0aGUgcHJvZHVjZWQtdG9rZW5zIG1hcCBhbmQgZmlsdGVyIGJ5IGFuY2VzdG9yIGNoZWNrLiBUaGlzIGlzIE8oUCDCtyBEKVxuICogICB3aGVyZSBQIGlzIHRoZSBwcm9kdWNlZC10b2tlbiBjb3VudCBhbmQgRCBpcyB0aGUgZGVwdGggb2YgdGhlIG1hdGNoXG4gKiAgIGNoYWluOyBQaGFzZSAxIHRyYWZmaWMgaXMgc21hbGwgZW5vdWdoIHRoYXQgdGhlIHNpbXBsZXIgaW1wbGVtZW50YXRpb25cbiAqICAgd2lucyBvdmVyIGEgcmV2ZXJzZSBpbmRleC5cbiAqXG4gKiBCb3RoIHJldHJhY3Rpb24gcGF0aHMgaW52b2tlIHJlZ2lzdGVyZWQgZGVhY3RpdmF0ZSBsaXN0ZW5lcnMgc28gZG93bnN0cmVhbVxuICogbWVtb3JpZXMgY2FuIG1pcnJvciB0aGUgY2hhbmdlLlxuICovXG5pbXBvcnQgdHlwZSB7IEVudGl0eUlkIH0gZnJvbSBcIi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEF0dHJLZXksIEZhY3RWYWx1ZSB9IGZyb20gXCIuL3dtLmpzXCI7XG5pbXBvcnQgeyB0eXBlIEJpbmRpbmdzLCBUb2tlbiwgQmV0YU1lbW9yeSwgdHlwZSBUb2tlbkZhY3QgfSBmcm9tIFwiLi9iZXRhLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEFscGhhTWVtb3J5IH0gZnJvbSBcIi4vYWxwaGEuanNcIjtcblxuLyoqXG4gKiBFcXVhbGl0eSBjb25zdHJhaW50IGJldHdlZW4gYSB0b2tlbidzIHZhcmlhYmxlIGJpbmRpbmcgYW5kIGEgcmlnaHQgZmFjdC5cbiAqXG4gKiBUaGUgZGlzY3JpbWluYW50IGB0eXBlYCBzZWxlY3RzICp3aGljaCogZmllbGQgb2YgdGhlIHJpZ2h0IGZhY3QgaXMgY29tcGFyZWQ6XG4gKiBgXCJpZEVxdWFsaXR5XCJgIGNvbXBhcmVzIGFnYWluc3QgdGhlIGZhY3QncyBlbnRpdHkgaWQgKHVzZWQgZm9yIHNhbWUtZW50aXR5XG4gKiBqb2lucyksIGBcInZhbHVlRXF1YWxpdHlcImAgY29tcGFyZXMgYWdhaW5zdCB0aGUgZmFjdCdzIHZhbHVlICh1c2VkIGZvciB2YWx1ZVxuICogdGhyZWFkaW5nKS4gSW4gYm90aCBjYXNlcyB0aGUgbGVmdCBvcGVyYW5kIGlzIGB0b2tlbi5iaW5kaW5nc1tsZWZ0VmFyXWAuXG4gKlxuICogVGhlcmUgaXMgbm8gbWVjaGFuaXNtIGZvciBjb21wYXJpbmcgdHdvIHZhcmlhYmxlcyBmcm9tIHRoZSAqc2FtZSogc2lkZVxuICogaGVyZSDigJQgdGhlIGJ1aWxkZXIgaXMgZXhwZWN0ZWQgdG8gaG9pc3Qgc3VjaCBjYXNlcyBpbnRvIGVhcmxpZXIgdGVzdHMgc29cbiAqIG9ubHkgY3Jvc3Mtc2lkZSBjb21wYXJpc29ucyByZWFjaCBKb2luTm9kZS5cbiAqL1xuZXhwb3J0IHR5cGUgSm9pblRlc3QgPVxuICB8IHtcbiAgICAgIC8qKiBSaWdodCBmYWN0J3MgZW50aXR5IGlkIG11c3QgZXF1YWwgYHRva2VuLmJpbmRpbmdzW2xlZnRWYXJdYC4gKi9cbiAgICAgIHR5cGU6IFwiaWRFcXVhbGl0eVwiO1xuICAgICAgbGVmdFZhcjogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICAvKiogUmlnaHQgZmFjdCdzIHZhbHVlIG11c3QgZXF1YWwgYHRva2VuLmJpbmRpbmdzW2xlZnRWYXJdYC4gKi9cbiAgICAgIHR5cGU6IFwidmFsdWVFcXVhbGl0eVwiO1xuICAgICAgbGVmdFZhcjogc3RyaW5nO1xuICAgIH07XG5cbi8qKiBEb3duc3RyZWFtIHN1YnNjcmliZXIgZmlyZWQgd2hlbiB0aGlzIGpvaW4gZW1pdHMgYSBuZXcgbWF0Y2guICovXG50eXBlIERvd25zdHJlYW1BY3RpdmF0ZSA9ICh0b2tlbjogVG9rZW4pID0+IHZvaWQ7XG4vKiogRG93bnN0cmVhbSBzdWJzY3JpYmVyIGZpcmVkIHdoZW4gdGhpcyBqb2luIHJldHJhY3RzIGEgcHJldmlvdXNseSBlbWl0dGVkIG1hdGNoLiAqL1xudHlwZSBEb3duc3RyZWFtRGVhY3RpdmF0ZSA9ICh0b2tlbjogVG9rZW4pID0+IHZvaWQ7XG5cbi8qKlxuICogQmV0YS1uZXR3b3JrIGpvaW4gbm9kZS5cbiAqXG4gKiBMZWZ0IGlucHV0OiBhbiB1cHN0cmVhbSB7QGxpbmsgQmV0YU1lbW9yeX0gb2YgcGFydGlhbCBtYXRjaGVzLlxuICogUmlnaHQgaW5wdXQ6IGFuIHtAbGluayBBbHBoYU1lbW9yeX0gb2YgZmFjdHMgdGhhdCBwYXNzZWQgY29uc3RhbnQgdGVzdHMuXG4gKiBPdXRwdXQ6IHplcm8gb3IgbW9yZSB7QGxpbmsgVG9rZW59cyBwZXIgYCh0b2tlbiwgZmFjdClgIHBhaXIgdGhhdCBzYXRpc2ZpZXNcbiAqIHtAbGluayBKb2luTm9kZS50ZXN0c30sIGRlbGl2ZXJlZCB0byBkb3duc3RyZWFtIHN1YnNjcmliZXJzLlxuICpcbiAqIFRoZSB0d28gXCJiaW5kaW5nIHNsb3RzXCIg4oCUIHtAbGluayB2YWx1ZUJpbmRpbmd9IGFuZCB7QGxpbmsgaWRCaW5kaW5nfSDigJQgbmFtZVxuICogdGhlIHZhcmlhYmxlcyB1bmRlciB3aGljaCB0aGUgcmlnaHQgZmFjdCdzIHZhbHVlIGFuZCBlbnRpdHkgaWQgYXJlIHJlY29yZGVkXG4gKiBpbiB0aGUgcHJvZHVjZWQgdG9rZW4ncyBiaW5kaW5ncy4gRWl0aGVyIG1heSBiZSBgbnVsbGAgaWYgdGhlIHJ1bGUgZG9lcyBub3RcbiAqIG5lZWQgdGhhdCBwcm9qZWN0aW9uIChlLmcuIGFuIGFub255bW91cy12YWx1ZSBjb25kaXRpb24gYCg/aWQsIERlYWQsIF8pYFxuICogcGFzc2VzIGBudWxsYCBmb3IgdGhlIHZhbHVlIGJpbmRpbmcpLlxuICovXG5leHBvcnQgY2xhc3MgSm9pbk5vZGUge1xuICByZWFkb25seSAjYWN0aXZhdGVMaXN0ZW5lcnM6IERvd25zdHJlYW1BY3RpdmF0ZVtdID0gW107XG4gIHJlYWRvbmx5ICNkZWFjdGl2YXRlTGlzdGVuZXJzOiBEb3duc3RyZWFtRGVhY3RpdmF0ZVtdID0gW107XG5cbiAgLyoqXG4gICAqIFByb2R1Y2VkIHRva2VucyBpbmRleGVkIGJ5IHRoZSByaWdodCBmYWN0IGtleSBgJHtpZH06JHthdHRyfWAuXG4gICAqXG4gICAqIEVhY2ggZW50cnkgaXMgdGhlIGxpc3Qgb2YgZG93bnN0cmVhbSB0b2tlbnMgd2UgZW1pdHRlZCB0aGUgbGFzdCB0aW1lIHRoZVxuICAgKiBmYWN0IHdhcyByaWdodC1hY3RpdmF0ZWQuIE9uIHtAbGluayBKb2luTm9kZS5yaWdodERlYWN0aXZhdGV9IHdlIHVzZSB0aGlzXG4gICAqIGluZGV4IHRvIHJldHJhY3QgZXhhY3RseSB0aG9zZSB0b2tlbnMgaW4gTyhtYXRjaGVzKSB3aXRob3V0IHNjYW5uaW5nIGFsbFxuICAgKiBkb3duc3RyZWFtIHN0YXRlLlxuICAgKlxuICAgKiBUaGUga2V5IGludGVudGlvbmFsbHkgb21pdHMgYHZhbHVlYCBiZWNhdXNlIGFuIGFscGhhIG1lbW9yeSBzdG9yZXMgYXRcbiAgICogbW9zdCBvbmUgdmFsdWUgcGVyIGAoaWQsIGF0dHIpYCBwYWlyIGF0IGFueSB0aW1lIOKAlCByZWFjdGl2YXRpb24gYWZ0ZXIgYW5cbiAgICogdXBkYXRlIHByb2R1Y2VzIGEgZnJlc2ggZW50cnkgdW5kZXIgdGhlIHNhbWUga2V5LlxuICAgKi9cbiAgcmVhZG9ubHkgI3Byb2R1Y2VkVG9rZW5zID0gbmV3IE1hcDxzdHJpbmcsIFRva2VuW10+KCk7XG5cbiAgcmVhZG9ubHkgI2xlZnRNZW1vcnk6IEJldGFNZW1vcnk7XG4gIHJlYWRvbmx5ICNyaWdodE1lbW9yeTogQWxwaGFNZW1vcnk7XG4gIHJlYWRvbmx5ICN0ZXN0czogcmVhZG9ubHkgSm9pblRlc3RbXTtcbiAgcmVhZG9ubHkgI3ZhbHVlQmluZGluZzogc3RyaW5nIHwgbnVsbDtcbiAgcmVhZG9ubHkgI2lkQmluZGluZzogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogQHBhcmFtIGxlZnRNZW1vcnkgICBVcHN0cmVhbSBiZXRhIG1lbW9yeSBzdXBwbHlpbmcgcGFydGlhbCBtYXRjaGVzLlxuICAgKiBAcGFyYW0gcmlnaHRNZW1vcnkgIEFscGhhIG1lbW9yeSBzdXBwbHlpbmcgZmFjdHMgZm9yIHRoaXMgY29uZGl0aW9uLlxuICAgKiBAcGFyYW0gdGVzdHMgICAgICAgIEVxdWFsaXR5IHRlc3RzIGV2YWx1YXRlZCBhZ2FpbnN0IGV2ZXJ5IGAodG9rZW4sIGZhY3QpYCBwYWlyLlxuICAgKiBAcGFyYW0gdmFsdWVCaW5kaW5nIFZhcmlhYmxlIG5hbWUgdW5kZXIgd2hpY2ggdGhlIHJpZ2h0IGZhY3QncyAqdmFsdWUqIGlzXG4gICAqICAgICAgICAgICAgICAgICAgICAgcmVjb3JkZWQgaW4gcHJvZHVjZWQgdG9rZW5zLCBvciBgbnVsbGAgdG8gb21pdC5cbiAgICogQHBhcmFtIGlkQmluZGluZyAgICBWYXJpYWJsZSBuYW1lIHVuZGVyIHdoaWNoIHRoZSByaWdodCBmYWN0J3MgKmVudGl0eSBpZCpcbiAgICogICAgICAgICAgICAgICAgICAgICBpcyByZWNvcmRlZCBpbiBwcm9kdWNlZCB0b2tlbnMsIG9yIGBudWxsYCB0byBvbWl0LlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgbGVmdE1lbW9yeTogQmV0YU1lbW9yeSxcbiAgICByaWdodE1lbW9yeTogQWxwaGFNZW1vcnksXG4gICAgdGVzdHM6IHJlYWRvbmx5IEpvaW5UZXN0W10sXG4gICAgdmFsdWVCaW5kaW5nOiBzdHJpbmcgfCBudWxsLFxuICAgIGlkQmluZGluZzogc3RyaW5nIHwgbnVsbCxcbiAgKSB7XG4gICAgdGhpcy4jbGVmdE1lbW9yeSA9IGxlZnRNZW1vcnk7XG4gICAgdGhpcy4jcmlnaHRNZW1vcnkgPSByaWdodE1lbW9yeTtcbiAgICB0aGlzLiN0ZXN0cyA9IHRlc3RzO1xuICAgIHRoaXMuI3ZhbHVlQmluZGluZyA9IHZhbHVlQmluZGluZztcbiAgICB0aGlzLiNpZEJpbmRpbmcgPSBpZEJpbmRpbmc7XG4gIH1cblxuICAvKiogU3Vic2NyaWJlIHRvIGRvd25zdHJlYW0gYWN0aXZhdGlvbnMuIExpc3RlbmVycyBmaXJlIGluIHJlZ2lzdHJhdGlvbiBvcmRlci4gKi9cbiAgYWRkRG93bnN0cmVhbUFjdGl2YXRlKGxpc3RlbmVyOiBEb3duc3RyZWFtQWN0aXZhdGUpOiB2b2lkIHtcbiAgICB0aGlzLiNhY3RpdmF0ZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKiBTdWJzY3JpYmUgdG8gZG93bnN0cmVhbSBkZWFjdGl2YXRpb25zLiBMaXN0ZW5lcnMgZmlyZSBpbiByZWdpc3RyYXRpb24gb3JkZXIuICovXG4gIGFkZERvd25zdHJlYW1EZWFjdGl2YXRlKGxpc3RlbmVyOiBEb3duc3RyZWFtRGVhY3RpdmF0ZSk6IHZvaWQge1xuICAgIHRoaXMuI2RlYWN0aXZhdGVMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBhIG5ldyByaWdodC1zaWRlIGZhY3QuXG4gICAqXG4gICAqIENhbGxlZCBieSB0aGUgdXBzdHJlYW0gQWxwaGFOb2RlJ3MgYWN0aXZhdGUgbGlzdGVuZXIuIFdhbGtzIHRoZSBsZWZ0XG4gICAqIG1lbW9yeSwgZW1pdHMgb25lIGV4dGVuZGVkIHRva2VuIHBlciB0b2tlbiB0aGF0IHBhc3NlcyB0aGUgdGVzdHMsIGFuZFxuICAgKiByZWNvcmRzIHRoZSBiYXRjaCB1bmRlciB0aGUgZmFjdCBrZXkgc28gcmV0cmFjdGlvbiBjYW4gZmluZCB0aGVtLlxuICAgKi9cbiAgcmlnaHRBY3RpdmF0ZShpZDogRW50aXR5SWQsIGF0dHI6IEF0dHJLZXksIHZhbHVlOiBGYWN0VmFsdWUpOiB2b2lkIHtcbiAgICBjb25zdCBmYWN0S2V5ID0gYCR7aWR9OiR7YXR0cn1gO1xuICAgIGNvbnN0IHByb2R1Y2VkOiBUb2tlbltdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRoaXMuI2xlZnRNZW1vcnkudG9rZW5zKSB7XG4gICAgICBpZiAodGhpcy4jdGVzdHNQYXNzKHRva2VuLCBpZCwgdmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IG5ld1Rva2VuID0gdGhpcy4jbWFrZVRva2VuKHRva2VuLCBpZCwgYXR0ciwgdmFsdWUpO1xuICAgICAgICBwcm9kdWNlZC5wdXNoKG5ld1Rva2VuKTtcbiAgICAgICAgZm9yIChjb25zdCBsIG9mIHRoaXMuI2FjdGl2YXRlTGlzdGVuZXJzKSBsKG5ld1Rva2VuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJvZHVjZWQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy4jcHJvZHVjZWRUb2tlbnMuc2V0KGZhY3RLZXksIHByb2R1Y2VkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2l0aGRyYXcgbWF0Y2hlcyBkZXJpdmVkIGZyb20gYSByZXRyYWN0ZWQgcmlnaHQtc2lkZSBmYWN0LlxuICAgKlxuICAgKiBMb29rcyB1cCB0aGUgYmF0Y2ggcmVjb3JkZWQgYnkge0BsaW5rIEpvaW5Ob2RlLnJpZ2h0QWN0aXZhdGV9IHVuZGVyIHRoZVxuICAgKiBmYWN0IGtleSBhbmQgZmlyZXMgZGVhY3RpdmF0ZSBsaXN0ZW5lcnMgZm9yIGVhY2guIElmIHRoZXJlIGlzIG5vIHN1Y2hcbiAgICogYmF0Y2ggKGUuZy4gbm8gdG9rZW5zIG1hdGNoZWQgb3JpZ2luYWxseSkgdGhlIGNhbGwgaXMgYSBuby1vcC5cbiAgICpcbiAgICogVGhlIGBfdmFsdWVgIHBhcmFtZXRlciBpcyB1bnVzZWQg4oCUIGFscGhhIG1lbW9yaWVzIGtleSBieSBgKGlkLCBhdHRyKWBcbiAgICogYW5kIHVwZGF0ZXMgYXJlIG1vZGVsbGVkIGFzIHJldHJhY3QtdGhlbi1pbnNlcnQgb2YgdGhlIHNhbWUgcGFpciwgc28gdGhlXG4gICAqIGtleSBhbG9uZSBpcyBzdWZmaWNpZW50LlxuICAgKi9cbiAgcmlnaHREZWFjdGl2YXRlKGlkOiBFbnRpdHlJZCwgYXR0cjogQXR0cktleSwgX3ZhbHVlOiBGYWN0VmFsdWUpOiB2b2lkIHtcbiAgICBjb25zdCBmYWN0S2V5ID0gYCR7aWR9OiR7YXR0cn1gO1xuICAgIGNvbnN0IHByb2R1Y2VkID0gdGhpcy4jcHJvZHVjZWRUb2tlbnMuZ2V0KGZhY3RLZXkpO1xuICAgIGlmICghcHJvZHVjZWQpIHJldHVybjtcblxuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgcHJvZHVjZWQpIHtcbiAgICAgIGZvciAoY29uc3QgbCBvZiB0aGlzLiNkZWFjdGl2YXRlTGlzdGVuZXJzKSBsKHRva2VuKTtcbiAgICB9XG4gICAgdGhpcy4jcHJvZHVjZWRUb2tlbnMuZGVsZXRlKGZhY3RLZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgYSBuZXcgbGVmdC1zaWRlIHRva2VuLlxuICAgKlxuICAgKiBDYWxsZWQgd2hlbiBhbiB1cHN0cmVhbSBiZXRhIG1lbW9yeSBhZG1pdHMgYSBuZXcgcGFydGlhbCBtYXRjaC4gV2Fsa3MgdGhlXG4gICAqIChzb3J0ZWQpIHJpZ2h0IG1lbW9yeSBhbmQgZW1pdHMgZXh0ZW5kZWQgdG9rZW5zIGZvciBldmVyeSByaWdodCBmYWN0IHRoYXRcbiAgICogcGFzc2VzIHRoZSB0ZXN0cy4gRWFjaCBwcm9kdWNlZCB0b2tlbiBpcyBhbHNvIHJlY29yZGVkIGluIHRoZSBwZXItZmFjdFxuICAgKiBpbmRleCBzbyBhIGxhdGVyIHJldHJhY3Rpb24gb2YgZWl0aGVyIHNpZGUgcmV0cmFjdHMgY29uc2lzdGVudGx5LlxuICAgKi9cbiAgbGVmdEFjdGl2YXRlKHRva2VuOiBUb2tlbik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgeyBpZCwgYXR0ciwgdmFsdWUgfSBvZiB0aGlzLiNyaWdodE1lbW9yeS5mYWN0cykge1xuICAgICAgaWYgKHRoaXMuI3Rlc3RzUGFzcyh0b2tlbiwgaWQsIHZhbHVlKSkge1xuICAgICAgICBjb25zdCBuZXdUb2tlbiA9IHRoaXMuI21ha2VUb2tlbih0b2tlbiwgaWQsIGF0dHIsIHZhbHVlKTtcbiAgICAgICAgY29uc3QgZmFjdEtleSA9IGAke2lkfToke2F0dHJ9YDtcbiAgICAgICAgbGV0IGJ1Y2tldCA9IHRoaXMuI3Byb2R1Y2VkVG9rZW5zLmdldChmYWN0S2V5KTtcbiAgICAgICAgaWYgKCFidWNrZXQpIHtcbiAgICAgICAgICBidWNrZXQgPSBbXTtcbiAgICAgICAgICB0aGlzLiNwcm9kdWNlZFRva2Vucy5zZXQoZmFjdEtleSwgYnVja2V0KTtcbiAgICAgICAgfVxuICAgICAgICBidWNrZXQucHVzaChuZXdUb2tlbik7XG4gICAgICAgIGZvciAoY29uc3QgbCBvZiB0aGlzLiNhY3RpdmF0ZUxpc3RlbmVycykgbChuZXdUb2tlbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdpdGhkcmF3IG1hdGNoZXMgZGVyaXZlZCBmcm9tIGEgcmV0cmFjdGVkIGxlZnQtc2lkZSB0b2tlbi5cbiAgICpcbiAgICogV2Fsa3MgdGhlIHByb2R1Y2VkLXRva2VucyBpbmRleCBhbmQgcmV0cmFjdHMgZXZlcnkgcmVjb3JkZWQgdG9rZW4gd2hvc2VcbiAgICogcGFyZW50IGNoYWluIGNvbnRhaW5zIHRoZSBkZWFjdGl2YXRlZCB0b2tlbi4gRW50cmllcyB0aGF0IGJlY29tZSBlbXB0eVxuICAgKiBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBpbmRleCB0byBib3VuZCBtZW1vcnkgZ3Jvd3RoIG92ZXIgbG9uZyBzZXNzaW9ucy5cbiAgICovXG4gIGxlZnREZWFjdGl2YXRlKHRva2VuOiBUb2tlbik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW2tleSwgdG9rZW5zXSBvZiB0aGlzLiNwcm9kdWNlZFRva2Vucykge1xuICAgICAgY29uc3QgcmVtYWluaW5nOiBUb2tlbltdID0gW107XG4gICAgICBjb25zdCByZW1vdmVkOiBUb2tlbltdID0gW107XG4gICAgICBmb3IgKGNvbnN0IHQgb2YgdG9rZW5zKSB7XG4gICAgICAgIGlmICh0aGlzLiNoYXNBbmNlc3Rvcih0LCB0b2tlbikpIHtcbiAgICAgICAgICByZW1vdmVkLnB1c2godCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVtYWluaW5nLnB1c2godCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgciBvZiByZW1vdmVkKSB7XG4gICAgICAgIGZvciAoY29uc3QgbCBvZiB0aGlzLiNkZWFjdGl2YXRlTGlzdGVuZXJzKSBsKHIpO1xuICAgICAgfVxuICAgICAgaWYgKHJlbWFpbmluZy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy4jcHJvZHVjZWRUb2tlbnMuZGVsZXRlKGtleSk7XG4gICAgICB9IGVsc2UgaWYgKHJlbW92ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLiNwcm9kdWNlZFRva2Vucy5zZXQoa2V5LCByZW1haW5pbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZSBldmVyeSBqb2luIHRlc3QgYWdhaW5zdCBgKHRva2VuLCByaWdodCBmYWN0KWAuXG4gICAqXG4gICAqIFNob3J0LWNpcmN1aXRzIG9uIHRoZSBmaXJzdCBmYWlsaW5nIHRlc3QuIGBpZEVxdWFsaXR5YCBjb21wYXJlcyB0aGUgcmlnaHRcbiAgICogZW50aXR5IGlkOyBgdmFsdWVFcXVhbGl0eWAgY29tcGFyZXMgdGhlIHJpZ2h0IHZhbHVlLiBBIHRlc3Qgd2hvc2VcbiAgICogYGxlZnRWYXJgIGlzIG1pc3NpbmcgZnJvbSB0aGUgdG9rZW4gYmluZGluZ3MgYWx3YXlzIGZhaWxzIOKAlCB0aGlzIGtlZXBzXG4gICAqIHRoZSBub2RlIHNhZmUgYWdhaW5zdCBidWlsZGVyIGJ1Z3MgdGhhdCBmb3JnZXQgdG8gYmluZCBhIHZhcmlhYmxlIGJlZm9yZVxuICAgKiByZWZlcmVuY2luZyBpdC5cbiAgICovXG4gICN0ZXN0c1Bhc3ModG9rZW46IFRva2VuLCByaWdodElkOiBFbnRpdHlJZCwgcmlnaHRWYWx1ZTogRmFjdFZhbHVlKTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCB0ZXN0IG9mIHRoaXMuI3Rlc3RzKSB7XG4gICAgICBjb25zdCBsZWZ0VmFsID0gdG9rZW4uYmluZGluZ3NbdGVzdC5sZWZ0VmFyXTtcbiAgICAgIGlmIChsZWZ0VmFsID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICh0ZXN0LnR5cGUgPT09IFwiaWRFcXVhbGl0eVwiKSB7XG4gICAgICAgIGlmIChsZWZ0VmFsICE9PSByaWdodElkKSByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB2YWx1ZUVxdWFsaXR5XG4gICAgICAgIGlmIChsZWZ0VmFsICE9PSByaWdodFZhbHVlKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG9jYXRlIHRoZSBleHRlbmRlZCB0b2tlbiBmb3IgYSBzdWNjZXNzZnVsIGAodG9rZW4sIGZhY3QpYCBwYWlyLlxuICAgKlxuICAgKiBUaGUgbmV3IHRva2VuJ3MgYmluZGluZ3MgYXJlIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBwYXJlbnQncyBiaW5kaW5nc1xuICAgKiBwbHVzIChvcHRpb25hbGx5KSB0aGUgdmFsdWUgYW5kIGlkIHNsb3RzIGNvbmZpZ3VyZWQgb24gdGhpcyBub2RlLiBDb3B5XG4gICAqIHNlbWFudGljcyBhcmUgZGVsaWJlcmF0ZSDigJQgc2libGluZyBwcm9kdWNlZCB0b2tlbnMgbXVzdCBub3Qgc2hhcmUgYVxuICAgKiBiaW5kaW5ncyBvYmplY3QsIG90aGVyd2lzZSBhIGxhdGVyIGZpbHRlci9oYW5kbGVyIGNvdWxkIG11dGF0ZSBvbmUgbWF0Y2hcbiAgICogYW5kIHNpbGVudGx5IGNvcnJ1cHQgYW5vdGhlci5cbiAgICovXG4gICNtYWtlVG9rZW4oXG4gICAgcGFyZW50OiBUb2tlbixcbiAgICByaWdodElkOiBFbnRpdHlJZCxcbiAgICByaWdodEF0dHI6IEF0dHJLZXksXG4gICAgcmlnaHRWYWx1ZTogRmFjdFZhbHVlLFxuICApOiBUb2tlbiB7XG4gICAgY29uc3QgbmV3QmluZGluZ3M6IEJpbmRpbmdzID0geyAuLi5wYXJlbnQuYmluZGluZ3MgfTtcbiAgICBpZiAodGhpcy4jdmFsdWVCaW5kaW5nICE9PSBudWxsKSB7XG4gICAgICBuZXdCaW5kaW5nc1t0aGlzLiN2YWx1ZUJpbmRpbmddID0gcmlnaHRWYWx1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuI2lkQmluZGluZyAhPT0gbnVsbCkge1xuICAgICAgbmV3QmluZGluZ3NbdGhpcy4jaWRCaW5kaW5nXSA9IHJpZ2h0SWQ7XG4gICAgfVxuICAgIGNvbnN0IGZhY3Q6IFRva2VuRmFjdCA9IHsgaWQ6IHJpZ2h0SWQsIGF0dHI6IHJpZ2h0QXR0ciwgdmFsdWU6IHJpZ2h0VmFsdWUgfTtcbiAgICByZXR1cm4gbmV3IFRva2VuKHBhcmVudCwgZmFjdCwgbmV3QmluZGluZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdhbGsgYSB0b2tlbidzIGBwYXJlbnRgIGNoYWluIGxvb2tpbmcgZm9yIGBhbmNlc3RvcmAuXG4gICAqXG4gICAqIEVxdWFsaXR5IGlzIGJ5IG9iamVjdCByZWZlcmVuY2Ug4oCUIHRva2VucyBhcmUgbmV2ZXIgZHVwbGljYXRlZCBzdHJ1Y3R1cmFsbHlcbiAgICogd2l0aGluIGEgY2hhaW4sIHNvIHJlZmVyZW5jZSBpZGVudGl0eSBpcyB0aGUgY29ycmVjdCByZWxhdGlvbi4gUmV0dXJuc1xuICAgKiBgdHJ1ZWAgYXMgc29vbiBhcyBgYW5jZXN0b3JgIGlzIHNlZW4sIGluY2x1ZGluZyB0aGUgdHJpdmlhbCBjYXNlIHdoZXJlXG4gICAqIGB0b2tlbiA9PT0gYW5jZXN0b3JgLlxuICAgKi9cbiAgI2hhc0FuY2VzdG9yKHRva2VuOiBUb2tlbiwgYW5jZXN0b3I6IFRva2VuKTogYm9vbGVhbiB7XG4gICAgbGV0IGN1cnJlbnQ6IFRva2VuIHwgbnVsbCA9IHRva2VuO1xuICAgIHdoaWxlIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBpZiAoY3VycmVudCA9PT0gYW5jZXN0b3IpIHJldHVybiB0cnVlO1xuICAgICAgY3VycmVudCA9IGN1cnJlbnQucGFyZW50O1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdLCJmaWxlIjoiL3NyYy9qb2luLnRzIn0= diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/c960fde1ba215ebcfc25e86c75d199ea418a6441 b/IJGn1F-WxLUCbfU1lu8pU/ssr/c960fde1ba215ebcfc25e86c75d199ea418a6441 deleted file mode 100644 index 8647105..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/c960fde1ba215ebcfc25e86c75d199ea418a6441 +++ /dev/null @@ -1,42 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "stateHash", { enumerable: true, configurable: true, get(){ try { return stateHash } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "replayFromLog", { enumerable: true, configurable: true, get(){ try { return replayFromLog } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/session.ts", {"importedNames":["Session"]}); -function stateHash(session) { - const facts = session.allFacts(); - const canonical = facts.map((f) => `${f.id}:${f.attr}=${JSON.stringify(f.value)}`).join("|"); - let hash = 5381; - for (let i = 0; i < canonical.length; i++) { - hash = (hash << 5) + hash ^ canonical.charCodeAt(i); - hash = hash >>> 0; - }; - return hash.toString(16).padStart(8, "0"); -}; -function replayFromLog(events, opts = {}) { - const session = new __vite_ssr_import_0__.Session({ ...opts, autoFire: false }); - for (const event of events) { - switch (event.kind) { - case "insert": { - if (event.id === void 0 || event.attr === void 0) continue; - if (event.id < 0) continue; - session.insert(event.id, event.attr, event.value); - break; - } - case "retract": { - if (event.id === void 0 || event.attr === void 0) continue; - if (event.id < 0) continue; - session.retract(event.id, event.attr); - break; - } - case "fire": { - session.fireRules(); - break; - } - default: - break; - } - }; - return session; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7QUFlQTtBQWVPLFNBQVMsVUFBVSxTQUEwQjtBQUNsRCxRQUFNLFFBQVEsUUFBUSxTQUFTO0FBQy9CLFFBQU0sWUFBWSxNQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFZLElBQUksRUFBRSxJQUFJLElBQUksS0FBSyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFDbkUsS0FBSyxHQUFHO0FBSVgsTUFBSSxPQUFPO0FBQ1gsV0FBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUN6QyxZQUFTLFFBQVEsS0FBSyxPQUFRLFVBQVUsV0FBVyxDQUFDO0FBQ3BELFdBQU8sU0FBUztBQUFBLEVBQ2xCO0FBQ0EsU0FBTyxLQUFLLFNBQVMsRUFBRSxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQzFDO0FBeUJPLFNBQVMsY0FDZCxRQUNBLE9BQXNCLENBQUMsR0FDZDtBQUNULFFBQU0sVUFBVSxJQUFJLDhCQUFRLEVBQUUsR0FBRyxNQUFNLFVBQVUsTUFBTSxDQUFDO0FBRXhELGFBQVcsU0FBUyxRQUFRO0FBQzFCLFlBQVEsTUFBTSxNQUFNO0FBQUEsTUFDbEIsS0FBSyxVQUFVO0FBQ2IsWUFBSSxNQUFNLE9BQU8sVUFBYSxNQUFNLFNBQVMsT0FBVztBQUN4RCxZQUFLLE1BQU0sS0FBZ0IsRUFBRztBQUM5QixnQkFBUSxPQUFPLE1BQU0sSUFBZ0IsTUFBTSxNQUFNLE1BQU0sS0FBSztBQUM1RDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLEtBQUssV0FBVztBQUNkLFlBQUksTUFBTSxPQUFPLFVBQWEsTUFBTSxTQUFTLE9BQVc7QUFDeEQsWUFBSyxNQUFNLEtBQWdCLEVBQUc7QUFDOUIsZ0JBQVEsUUFBUSxNQUFNLElBQWdCLE1BQU0sSUFBSTtBQUNoRDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLEtBQUssUUFBUTtBQUNYLGdCQUFRLFVBQVU7QUFDbEI7QUFBQSxNQUNGO0FBQUEsTUFDQTtBQUVFO0FBQUEsSUFDSjtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1QiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInJlcGxheS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlcGxheSBlbmdpbmUg4oCUIHJlY29uc3RydWN0cyB7QGxpbmsgU2Vzc2lvbn0gc3RhdGUgZnJvbSBhblxuICoge0BsaW5rIEV2ZW50TG9nfSwgYW5kIHByb2R1Y2VzIGEgZGV0ZXJtaW5pc3RpYyBoYXNoIG9mIGEgc2Vzc2lvbidzXG4gKiBjdXJyZW50IGZhY3Qgc3RhdGUgZm9yIGVxdWl2YWxlbmNlIGNoZWNraW5nLlxuICpcbiAqIFBlciBTUEVDLm1kIMKnUmVwbGF5IERldGVybWluaXNtOiBnaXZlbiB0aGUgc2FtZSBzY2hlbWEsIHJ1bGVzLCBhbmRcbiAqIGV2ZW50IGxvZywgcmVwbGF5IHByb2R1Y2VzIGJ5dGUtaWRlbnRpY2FsIHdvcmtpbmcgbWVtb3J5ICh2ZXJpZmllZFxuICogdmlhIHtAbGluayBzdGF0ZUhhc2h9KS4gRGVyaXZlZCBmYWN0cyAobmVnYXRpdmUge0BsaW5rIEVudGl0eUlkfXMpXG4gKiBhcmUgbmV2ZXIgbG9nZ2VkIOKAlCB0aGV5IGFyZSByZS1kZXJpdmVkIG5hdHVyYWxseSB3aGVuIHJ1bGVzIGZpcmVcbiAqIGR1cmluZyByZXBsYXkuXG4gKlxuICogVGhlIGhhc2ggaXMgZGpiMiAoYSBzaW1wbGUsIGRldGVybWluaXN0aWMsIG5vbi1jcnlwdG9ncmFwaGljXG4gKiBhbGdvcml0aG0pLiBDb2xsaXNpb24gcmVzaXN0YW5jZSBpcyBub3QgcmVxdWlyZWQg4oCUIHRoaXMgaXMgYVxuICogZmluZ2VycHJpbnQgZm9yIGRldGVybWluaXNtIHJlZ3Jlc3Npb24gdGVzdHMsIG5vdCBhIHNlY3VyaXR5IHByaW1pdGl2ZS5cbiAqL1xuaW1wb3J0IHsgU2Vzc2lvbiwgdHlwZSBTZXNzaW9uT3B0aW9ucyB9IGZyb20gXCIuL3Nlc3Npb24uanNcIjtcbmltcG9ydCB0eXBlIHsgTG9nRXZlbnQgfSBmcm9tIFwiLi9ldmVudGxvZy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuXG4vKipcbiAqIFByb2R1Y2UgYSBkZXRlcm1pbmlzdGljIGhhc2ggb2YgYSBzZXNzaW9uJ3MgZmFjdCBzdGF0ZS5cbiAqXG4gKiBSZWxpZXMgb24ge0BsaW5rIFNlc3Npb24uYWxsRmFjdHN9IHJldHVybmluZyBmYWN0cyBzb3J0ZWQgYnlcbiAqIGBbaWQgYXNjLCBhdHRyIGFzY11gIChzZWUgd20udHMpLiBWYWx1ZXMgYXJlIHNlcmlhbGl6ZWQgd2l0aFxuICogYEpTT04uc3RyaW5naWZ5YCwgd2hpY2ggaXMgc3RhYmxlIGZvciBwbGFpbiBKU09OLWNvbXBhdGlibGUgdmFsdWVzIOKAlFxuICogY2FsbGVycyB0aGF0IHN0b3JlIG5vbi1KU09OIHZhbHVlcyBpbiB3b3JraW5nIG1lbW9yeSBtdXN0IGVuc3VyZVxuICogdGhlaXIgc2VyaWFsaXphdGlvbiBpcyBvcmRlci1pbmRlcGVuZGVudC5cbiAqXG4gKiBPdXRwdXQgaXMgYSB6ZXJvLXBhZGRlZCA4LWNoYXJhY3RlciBoZXggc3RyaW5nICgzMi1iaXQgZGpiMikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZUhhc2goc2Vzc2lvbjogU2Vzc2lvbik6IHN0cmluZyB7XG4gIGNvbnN0IGZhY3RzID0gc2Vzc2lvbi5hbGxGYWN0cygpO1xuICBjb25zdCBjYW5vbmljYWwgPSBmYWN0c1xuICAgIC5tYXAoKGYpID0+IGAke2YuaWQgYXMgbnVtYmVyfToke2YuYXR0cn09JHtKU09OLnN0cmluZ2lmeShmLnZhbHVlKX1gKVxuICAgIC5qb2luKFwifFwiKTtcblxuICAvLyBkamIyIOKAlCBkZXRlcm1pbmlzdGljLCBubyBjcnlwdG8gZGVwZW5kZW5jeSwgc3VmZmljaWVudCBmb3JcbiAgLy8gZmluZ2VycHJpbnRpbmcgZmFjdCBzdGF0ZSBpbiB0ZXN0cyBhbmQgQ0kuXG4gIGxldCBoYXNoID0gNTM4MTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYW5vbmljYWwubGVuZ3RoOyBpKyspIHtcbiAgICBoYXNoID0gKChoYXNoIDw8IDUpICsgaGFzaCkgXiBjYW5vbmljYWwuY2hhckNvZGVBdChpKTtcbiAgICBoYXNoID0gaGFzaCA+Pj4gMDsgLy8gY29lcmNlIHRvIHVuc2lnbmVkIDMyLWJpdFxuICB9XG4gIHJldHVybiBoYXNoLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCBcIjBcIik7XG59XG5cbi8qKlxuICogT3B0aW9ucyBhY2NlcHRlZCBieSB7QGxpbmsgcmVwbGF5RnJvbUxvZ30uIE1pcnJvcnNcbiAqIHtAbGluayBTZXNzaW9uT3B0aW9uc30gbWludXMgYGF1dG9GaXJlYCBhbmQgYGV2ZW50TG9nYCwgd2hpY2ggYXJlXG4gKiBhbHdheXMgZm9yY2VkIHRvIGRldGVybWluaXN0aWMgdmFsdWVzOiBgYXV0b0ZpcmU6IGZhbHNlYCAodGhlIGxvZ1xuICogYWxyZWFkeSByZWNvcmRzIGV4cGxpY2l0IGZpcmVzIHZpYSBcImZpcmVcIiBldmVudHMpIGFuZCBubyBhdHRhY2hlZFxuICogbG9nIChyZXBsYXkgbXVzdCBub3QgcmUtcmVjb3JkIGludG8gYSBsaXZlIGxvZykuXG4gKi9cbmV4cG9ydCB0eXBlIFJlcGxheU9wdGlvbnMgPSBPbWl0PFNlc3Npb25PcHRpb25zLCBcImF1dG9GaXJlXCIgfCBcImV2ZW50TG9nXCI+O1xuXG4vKipcbiAqIFJlcGxheSBhIHNlcXVlbmNlIG9mIGxvZyBldmVudHMgb24gYSBmcmVzaCB7QGxpbmsgU2Vzc2lvbn0gYW5kXG4gKiByZXR1cm4gaXQuIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIHJ1bGVzIG9uIHRoZVxuICogc2Vzc2lvbiAqYmVmb3JlKiByZXBsYXkgaWYgcnVsZSBmaXJpbmdzIHNob3VsZCByZS1kZXJpdmUgZmFjdHMuXG4gKlxuICogRXZlbnRzIHJlY29yZGVkIGFnYWluc3QgZGVyaXZlZCBpZHMgKG5lZ2F0aXZlIHtAbGluayBFbnRpdHlJZH1zKVxuICogYXJlIGRlZmVuc2l2ZWx5IHNraXBwZWQg4oCUIHRoZSBFdmVudExvZyBjb250cmFjdCBhbHJlYWR5IGV4Y2x1ZGVzXG4gKiB0aGVtIGF0IHJlY29yZCB0aW1lLCBidXQgZ3VhcmRpbmcgaGVyZSBrZWVwcyByZXBsYXkgY29ycmVjdCBhZ2FpbnN0XG4gKiBleHRlcm5hbGx5LXNvdXJjZWQgbG9ncy5cbiAqXG4gKiBVbmtub3duIGV2ZW50IGtpbmRzIGFyZSBpZ25vcmVkIHJhdGhlciB0aGFuIHRocm93aW5nOiB0aGUgbG9nXG4gKiBmb3JtYXQgbWF5IGdhaW4gbmV3IGtpbmRzIChlLmcuIGBzbmFwc2hvdGApIHdpdGhvdXQgYnJlYWtpbmcgb2xkZXJcbiAqIHJlcGxheWVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxheUZyb21Mb2coXG4gIGV2ZW50czogcmVhZG9ubHkgTG9nRXZlbnRbXSxcbiAgb3B0czogUmVwbGF5T3B0aW9ucyA9IHt9LFxuKTogU2Vzc2lvbiB7XG4gIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IC4uLm9wdHMsIGF1dG9GaXJlOiBmYWxzZSB9KTtcblxuICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgIHN3aXRjaCAoZXZlbnQua2luZCkge1xuICAgICAgY2FzZSBcImluc2VydFwiOiB7XG4gICAgICAgIGlmIChldmVudC5pZCA9PT0gdW5kZWZpbmVkIHx8IGV2ZW50LmF0dHIgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgICAgIGlmICgoZXZlbnQuaWQgYXMgbnVtYmVyKSA8IDApIGNvbnRpbnVlO1xuICAgICAgICBzZXNzaW9uLmluc2VydChldmVudC5pZCBhcyBFbnRpdHlJZCwgZXZlbnQuYXR0ciwgZXZlbnQudmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJyZXRyYWN0XCI6IHtcbiAgICAgICAgaWYgKGV2ZW50LmlkID09PSB1bmRlZmluZWQgfHwgZXZlbnQuYXR0ciA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICAgICAgaWYgKChldmVudC5pZCBhcyBudW1iZXIpIDwgMCkgY29udGludWU7XG4gICAgICAgIHNlc3Npb24ucmV0cmFjdChldmVudC5pZCBhcyBFbnRpdHlJZCwgZXZlbnQuYXR0cik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBcImZpcmVcIjoge1xuICAgICAgICBzZXNzaW9uLmZpcmVSdWxlcygpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIEZvcndhcmQtY29tcGF0aWJsZTogaWdub3JlIHVua25vd24ga2luZHMuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzZXNzaW9uO1xufVxuIl0sImZpbGUiOiIvc3JjL3JlcGxheS50cyJ9 diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/cbc49e9df7d0f1c2b361cde0cc6363daba257635 b/IJGn1F-WxLUCbfU1lu8pU/ssr/cbc49e9df7d0f1c2b361cde0cc6363daba257635 deleted file mode 100644 index f23bfbf..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/cbc49e9df7d0f1c2b361cde0cc6363daba257635 +++ /dev/null @@ -1,190 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("vitest", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/join.ts", {"importedNames":["JoinNode"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/alpha.ts", {"importedNames":["AlphaMemory"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/beta.ts", {"importedNames":["Token","BetaMemory"]}); -const mkId = (n) => n; -function mkFact(id, attr, value) { - return { - id: mkId(id), - attr, - value - }; -} -(0,__vite_ssr_import_0__.describe)("JoinNode", () => { - (0,__vite_ssr_import_0__.it)("right-activates: when a fact is added to alpha, combines with existing tokens", () => { - const leftMem = new __vite_ssr_import_3__.BetaMemory(); - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const join = new __vite_ssr_import_1__.JoinNode(leftMem, rightMem, [], "hp", "eid"); - const rootToken = new __vite_ssr_import_3__.Token(null, mkFact(1, "Health", 100), { hp: 100 }); - leftMem.leftActivate(rootToken); - join.addDownstreamActivate((t) => outMem.leftActivate(t)); - join.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - join.rightActivate(mkId(1), "Health", 100); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(outMem.tokens[0]?.bindings["hp"]).toBe(100); - (0,__vite_ssr_import_0__.expect)(outMem.tokens[0]?.bindings["eid"]).toBe(mkId(1)); - }); - (0,__vite_ssr_import_0__.it)("left-activates: when a token arrives, combines with existing alpha facts", () => { - const leftMem = new __vite_ssr_import_3__.BetaMemory(); - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const join = new __vite_ssr_import_1__.JoinNode(leftMem, rightMem, [], "pos", "pid"); - join.addDownstreamActivate((t) => outMem.leftActivate(t)); - rightMem.addFact(mkId(2), "Position", "e4"); - const token = new __vite_ssr_import_3__.Token(null, mkFact(2, "Color", "white"), { - color: "white" - }); - join.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(outMem.tokens[0]?.bindings["pos"]).toBe("e4"); - (0,__vite_ssr_import_0__.expect)(outMem.tokens[0]?.bindings["pid"]).toBe(mkId(2)); - }); - (0,__vite_ssr_import_0__.it)("join test: idEquality — only matches when token binding equals right fact id", () => { - const leftMem = new __vite_ssr_import_3__.BetaMemory(); - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const joinTests = [{ type: "idEquality", leftVar: "eid" }]; - const join = new __vite_ssr_import_1__.JoinNode(leftMem, rightMem, joinTests, "name", null); - join.addDownstreamActivate((t) => outMem.leftActivate(t)); - const token = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", "x"), { eid: mkId(1) }); - leftMem.leftActivate(token); - rightMem.addFact(mkId(1), "Name", "Alice"); - rightMem.addFact(mkId(2), "Name", "Bob"); - join.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(outMem.tokens[0]?.bindings["name"]).toBe("Alice"); - }); - (0,__vite_ssr_import_0__.it)("join test: valueEquality — only matches when token binding equals right fact value", () => { - const leftMem = new __vite_ssr_import_3__.BetaMemory(); - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const joinTests = [{ type: "valueEquality", leftVar: "target" }]; - const join = new __vite_ssr_import_1__.JoinNode(leftMem, rightMem, joinTests, null, "owner"); - join.addDownstreamActivate((t) => outMem.leftActivate(t)); - const token = new __vite_ssr_import_3__.Token(null, mkFact(1, "Pick", 42), { target: 42 }); - leftMem.leftActivate(token); - rightMem.addFact(mkId(7), "Holds", 42); - rightMem.addFact(mkId(8), "Holds", 99); - join.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(outMem.tokens[0]?.bindings["owner"]).toBe(mkId(7)); - }); - (0,__vite_ssr_import_0__.it)("join test: no constraints — produces cartesian product", () => { - const leftMem = new __vite_ssr_import_3__.BetaMemory(); - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const join = new __vite_ssr_import_1__.JoinNode(leftMem, rightMem, [], "v", null); - join.addDownstreamActivate((t) => outMem.leftActivate(t)); - const t1 = new __vite_ssr_import_3__.Token(null, mkFact(1, "A", "a"), { a: "a" }); - const t2 = new __vite_ssr_import_3__.Token(null, mkFact(2, "A", "b"), { a: "b" }); - leftMem.leftActivate(t1); - leftMem.leftActivate(t2); - rightMem.addFact(mkId(10), "B", "z"); - rightMem.addFact(mkId(11), "B", "y"); - join.leftActivate(t1); - join.leftActivate(t2); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(4); - }); - (0,__vite_ssr_import_0__.it)("right-deactivate: removes tokens dependent on retracted right fact", () => { - const leftMem = new __vite_ssr_import_3__.BetaMemory(); - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const join = new __vite_ssr_import_1__.JoinNode(leftMem, rightMem, [], "hp", "eid"); - join.addDownstreamActivate((t) => outMem.leftActivate(t)); - join.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - const token = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", "x"), {}); - leftMem.leftActivate(token); - join.rightActivate(mkId(1), "Health", 100); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - join.rightDeactivate(mkId(1), "Health", 100); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("left-deactivate: removes downstream tokens derived from a retracted left token", () => { - const leftMem = new __vite_ssr_import_3__.BetaMemory(); - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const join = new __vite_ssr_import_1__.JoinNode(leftMem, rightMem, [], "v", "eid"); - join.addDownstreamActivate((t) => outMem.leftActivate(t)); - join.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - const tokenA = new __vite_ssr_import_3__.Token(null, mkFact(1, "A", "a"), { a: "a" }); - const tokenB = new __vite_ssr_import_3__.Token(null, mkFact(2, "A", "b"), { a: "b" }); - leftMem.leftActivate(tokenA); - leftMem.leftActivate(tokenB); - rightMem.addFact(mkId(10), "B", "z"); - join.leftActivate(tokenA); - join.leftActivate(tokenB); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(2); - join.leftDeactivate(tokenA); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(outMem.tokens[0]?.bindings["a"]).toBe("b"); - }); - (0,__vite_ssr_import_0__.it)("scalability: 100 entities, 2 conditions — produces correct token count", () => { - const leftMem = new __vite_ssr_import_3__.BetaMemory(); - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const joinTests = [{ type: "idEquality", leftVar: "eid" }]; - const join = new __vite_ssr_import_1__.JoinNode(leftMem, rightMem, joinTests, "y", null); - join.addDownstreamActivate((t) => outMem.leftActivate(t)); - for (let i = 1; i <= 100; i++) { - const t = new __vite_ssr_import_3__.Token(null, mkFact(i, "X", i), { eid: mkId(i), x: i }); - leftMem.leftActivate(t); - }; - for (let i = 1; i <= 100; i++) { - rightMem.addFact(mkId(i), "Y", i * 10); - }; - for (const token of [...leftMem.tokens]) { - join.leftActivate(token); - }; - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(100); - (0,__vite_ssr_import_0__.expect)( - outMem.tokens.every((t) => typeof t.bindings["y"] === "number") - ).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("3-condition chain (100 entities): left-activating a join produces correct count", () => { - const root = new __vite_ssr_import_3__.BetaMemory(); - const alphaX = new __vite_ssr_import_2__.AlphaMemory(); - const alphaY = new __vite_ssr_import_2__.AlphaMemory(); - const alphaZ = new __vite_ssr_import_2__.AlphaMemory(); - const mem1 = new __vite_ssr_import_3__.BetaMemory(); - const mem2 = new __vite_ssr_import_3__.BetaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const join1 = new __vite_ssr_import_1__.JoinNode(root, alphaX, [], "x", "eid"); - join1.addDownstreamActivate((t) => mem1.leftActivate(t)); - const join2 = new __vite_ssr_import_1__.JoinNode( - mem1, - alphaY, - [{ type: "idEquality", leftVar: "eid" }], - "y", - null - ); - join2.addDownstreamActivate((t) => mem2.leftActivate(t)); - mem1.addDownstreamActivate((t) => join2.leftActivate(t)); - const join3 = new __vite_ssr_import_1__.JoinNode( - mem2, - alphaZ, - [{ type: "idEquality", leftVar: "eid" }], - "z", - null - ); - join3.addDownstreamActivate((t) => outMem.leftActivate(t)); - mem2.addDownstreamActivate((t) => join3.leftActivate(t)); - for (let i = 1; i <= 100; i++) { - alphaX.addFact(mkId(i), "X", i); - alphaY.addFact(mkId(i), "Y", i * 2); - alphaZ.addFact(mkId(i), "Z", i * 3); - }; - const rootToken = new __vite_ssr_import_3__.Token(null, mkFact(0, "__root", null), {}); - root.leftActivate(rootToken); - join1.leftActivate(rootToken); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(100); - const sample = outMem.tokens[0]; - (0,__vite_ssr_import_0__.expect)(sample).toBeDefined(); - (0,__vite_ssr_import_0__.expect)(typeof sample?.bindings["x"]).toBe("number"); - (0,__vite_ssr_import_0__.expect)(typeof sample?.bindings["y"]).toBe("number"); - (0,__vite_ssr_import_0__.expect)(typeof sample?.bindings["z"]).toBe("number"); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFPLFFBQVEsU0FBUyxHQUFHLENBQUMsRUFBRSxLQUFLLFFBQVE7QUFBQSxFQUNwRCxDQUFDO0FBQ0gsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiam9pbi50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBpdCwgZXhwZWN0IH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IHsgSm9pbk5vZGUsIHR5cGUgSm9pblRlc3QgfSBmcm9tIFwiLi9qb2luLmpzXCI7XG5pbXBvcnQgeyBBbHBoYU1lbW9yeSB9IGZyb20gXCIuL2FscGhhLmpzXCI7XG5pbXBvcnQgeyBUb2tlbiwgQmV0YU1lbW9yeSB9IGZyb20gXCIuL2JldGEuanNcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiLi9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgQXR0cktleSwgRmFjdFZhbHVlIH0gZnJvbSBcIi4vd20uanNcIjtcblxuY29uc3QgbWtJZCA9IChuOiBudW1iZXIpID0+IG4gYXMgRW50aXR5SWQ7XG5cbmZ1bmN0aW9uIG1rRmFjdChpZDogbnVtYmVyLCBhdHRyOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gIHJldHVybiB7XG4gICAgaWQ6IG1rSWQoaWQpLFxuICAgIGF0dHI6IGF0dHIgYXMgQXR0cktleSxcbiAgICB2YWx1ZTogdmFsdWUgYXMgRmFjdFZhbHVlLFxuICB9O1xufVxuXG5kZXNjcmliZShcIkpvaW5Ob2RlXCIsICgpID0+IHtcbiAgaXQoXCJyaWdodC1hY3RpdmF0ZXM6IHdoZW4gYSBmYWN0IGlzIGFkZGVkIHRvIGFscGhhLCBjb21iaW5lcyB3aXRoIGV4aXN0aW5nIHRva2Vuc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgbGVmdE1lbSA9IG5ldyBCZXRhTWVtb3J5KCk7XG4gICAgY29uc3QgcmlnaHRNZW0gPSBuZXcgQWxwaGFNZW1vcnkoKTtcbiAgICBjb25zdCBvdXRNZW0gPSBuZXcgQmV0YU1lbW9yeSgpO1xuICAgIGNvbnN0IGpvaW4gPSBuZXcgSm9pbk5vZGUobGVmdE1lbSwgcmlnaHRNZW0sIFtdLCBcImhwXCIsIFwiZWlkXCIpO1xuXG4gICAgLy8gU2VlZCBsZWZ0IG1lbW9yeSB3aXRoIG9uZSB0b2tlblxuICAgIGNvbnN0IHJvb3RUb2tlbiA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoMSwgXCJIZWFsdGhcIiwgMTAwKSwgeyBocDogMTAwIH0pO1xuICAgIGxlZnRNZW0ubGVmdEFjdGl2YXRlKHJvb3RUb2tlbik7XG4gICAgam9pbi5hZGREb3duc3RyZWFtQWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0QWN0aXZhdGUodCkpO1xuICAgIGpvaW4uYWRkRG93bnN0cmVhbURlYWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0RGVhY3RpdmF0ZSh0KSk7XG5cbiAgICAvLyBSaWdodC1hY3RpdmF0ZTogZmFjdCAoMSwgXCJIZWFsdGhcIiwgMTAwKSBqb2lucyB3aXRoIHRva2VuXG4gICAgam9pbi5yaWdodEFjdGl2YXRlKG1rSWQoMSksIFwiSGVhbHRoXCIgYXMgQXR0cktleSwgMTAwIGFzIEZhY3RWYWx1ZSk7XG5cbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDEpO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zWzBdPy5iaW5kaW5nc1tcImhwXCJdKS50b0JlKDEwMCk7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnNbMF0/LmJpbmRpbmdzW1wiZWlkXCJdKS50b0JlKG1rSWQoMSkpO1xuICB9KTtcblxuICBpdChcImxlZnQtYWN0aXZhdGVzOiB3aGVuIGEgdG9rZW4gYXJyaXZlcywgY29tYmluZXMgd2l0aCBleGlzdGluZyBhbHBoYSBmYWN0c1wiLCAoKSA9PiB7XG4gICAgY29uc3QgbGVmdE1lbSA9IG5ldyBCZXRhTWVtb3J5KCk7XG4gICAgY29uc3QgcmlnaHRNZW0gPSBuZXcgQWxwaGFNZW1vcnkoKTtcbiAgICBjb25zdCBvdXRNZW0gPSBuZXcgQmV0YU1lbW9yeSgpO1xuICAgIGNvbnN0IGpvaW4gPSBuZXcgSm9pbk5vZGUobGVmdE1lbSwgcmlnaHRNZW0sIFtdLCBcInBvc1wiLCBcInBpZFwiKTtcbiAgICBqb2luLmFkZERvd25zdHJlYW1BY3RpdmF0ZSgodCkgPT4gb3V0TWVtLmxlZnRBY3RpdmF0ZSh0KSk7XG5cbiAgICAvLyBTZWVkIHJpZ2h0IG1lbW9yeSAoYWxwaGEpXG4gICAgcmlnaHRNZW0uYWRkRmFjdChta0lkKDIpLCBcIlBvc2l0aW9uXCIgYXMgQXR0cktleSwgXCJlNFwiIGFzIEZhY3RWYWx1ZSk7XG5cbiAgICAvLyBMZWZ0LWFjdGl2YXRlOiBuZXcgdG9rZW4gYXJyaXZlc1xuICAgIGNvbnN0IHRva2VuID0gbmV3IFRva2VuKG51bGwsIG1rRmFjdCgyLCBcIkNvbG9yXCIsIFwid2hpdGVcIiksIHtcbiAgICAgIGNvbG9yOiBcIndoaXRlXCIsXG4gICAgfSk7XG4gICAgam9pbi5sZWZ0QWN0aXZhdGUodG9rZW4pO1xuXG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2Vuc1swXT8uYmluZGluZ3NbXCJwb3NcIl0pLnRvQmUoXCJlNFwiKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2Vuc1swXT8uYmluZGluZ3NbXCJwaWRcIl0pLnRvQmUobWtJZCgyKSk7XG4gIH0pO1xuXG4gIGl0KFwiam9pbiB0ZXN0OiBpZEVxdWFsaXR5IOKAlCBvbmx5IG1hdGNoZXMgd2hlbiB0b2tlbiBiaW5kaW5nIGVxdWFscyByaWdodCBmYWN0IGlkXCIsICgpID0+IHtcbiAgICBjb25zdCBsZWZ0TWVtID0gbmV3IEJldGFNZW1vcnkoKTtcbiAgICBjb25zdCByaWdodE1lbSA9IG5ldyBBbHBoYU1lbW9yeSgpO1xuICAgIGNvbnN0IG91dE1lbSA9IG5ldyBCZXRhTWVtb3J5KCk7XG5cbiAgICAvLyBKb2luIHRlc3Q6IHRva2VuJ3MgJ2VpZCcgYmluZGluZyBtdXN0IGVxdWFsIHRoZSByaWdodCBmYWN0J3MgZW50aXR5IGlkXG4gICAgY29uc3Qgam9pblRlc3RzOiBKb2luVGVzdFtdID0gW3sgdHlwZTogXCJpZEVxdWFsaXR5XCIsIGxlZnRWYXI6IFwiZWlkXCIgfV07XG4gICAgY29uc3Qgam9pbiA9IG5ldyBKb2luTm9kZShsZWZ0TWVtLCByaWdodE1lbSwgam9pblRlc3RzLCBcIm5hbWVcIiwgbnVsbCk7XG4gICAgam9pbi5hZGREb3duc3RyZWFtQWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0QWN0aXZhdGUodCkpO1xuXG4gICAgLy8gVG9rZW4gd2l0aCBlaWQ9MVxuICAgIGNvbnN0IHRva2VuID0gbmV3IFRva2VuKG51bGwsIG1rRmFjdCgxLCBcIlhcIiwgXCJ4XCIpLCB7IGVpZDogbWtJZCgxKSB9KTtcbiAgICBsZWZ0TWVtLmxlZnRBY3RpdmF0ZSh0b2tlbik7XG5cbiAgICAvLyBSaWdodCBmYWN0czogZW50aXR5IDEgbWF0Y2hlcywgZW50aXR5IDIgZG9lcyBub3RcbiAgICByaWdodE1lbS5hZGRGYWN0KG1rSWQoMSksIFwiTmFtZVwiIGFzIEF0dHJLZXksIFwiQWxpY2VcIiBhcyBGYWN0VmFsdWUpO1xuICAgIHJpZ2h0TWVtLmFkZEZhY3QobWtJZCgyKSwgXCJOYW1lXCIgYXMgQXR0cktleSwgXCJCb2JcIiBhcyBGYWN0VmFsdWUpO1xuXG4gICAgLy8gTGVmdC1hY3RpdmF0ZSB3aXRoIHRoZSB0b2tlblxuICAgIGpvaW4ubGVmdEFjdGl2YXRlKHRva2VuKTtcblxuICAgIC8vIE9ubHkgdGhlIGZhY3Qgd2l0aCBpZD0xIHNob3VsZCBtYXRjaFxuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnNbMF0/LmJpbmRpbmdzW1wibmFtZVwiXSkudG9CZShcIkFsaWNlXCIpO1xuICB9KTtcblxuICBpdChcImpvaW4gdGVzdDogdmFsdWVFcXVhbGl0eSDigJQgb25seSBtYXRjaGVzIHdoZW4gdG9rZW4gYmluZGluZyBlcXVhbHMgcmlnaHQgZmFjdCB2YWx1ZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgbGVmdE1lbSA9IG5ldyBCZXRhTWVtb3J5KCk7XG4gICAgY29uc3QgcmlnaHRNZW0gPSBuZXcgQWxwaGFNZW1vcnkoKTtcbiAgICBjb25zdCBvdXRNZW0gPSBuZXcgQmV0YU1lbW9yeSgpO1xuXG4gICAgLy8gVG9rZW4ncyAndGFyZ2V0JyBiaW5kaW5nIG11c3QgZXF1YWwgdGhlIHJpZ2h0IGZhY3QncyB2YWx1ZVxuICAgIGNvbnN0IGpvaW5UZXN0czogSm9pblRlc3RbXSA9IFt7IHR5cGU6IFwidmFsdWVFcXVhbGl0eVwiLCBsZWZ0VmFyOiBcInRhcmdldFwiIH1dO1xuICAgIGNvbnN0IGpvaW4gPSBuZXcgSm9pbk5vZGUobGVmdE1lbSwgcmlnaHRNZW0sIGpvaW5UZXN0cywgbnVsbCwgXCJvd25lclwiKTtcbiAgICBqb2luLmFkZERvd25zdHJlYW1BY3RpdmF0ZSgodCkgPT4gb3V0TWVtLmxlZnRBY3RpdmF0ZSh0KSk7XG5cbiAgICBjb25zdCB0b2tlbiA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoMSwgXCJQaWNrXCIsIDQyKSwgeyB0YXJnZXQ6IDQyIH0pO1xuICAgIGxlZnRNZW0ubGVmdEFjdGl2YXRlKHRva2VuKTtcblxuICAgIHJpZ2h0TWVtLmFkZEZhY3QobWtJZCg3KSwgXCJIb2xkc1wiIGFzIEF0dHJLZXksIDQyIGFzIEZhY3RWYWx1ZSk7XG4gICAgcmlnaHRNZW0uYWRkRmFjdChta0lkKDgpLCBcIkhvbGRzXCIgYXMgQXR0cktleSwgOTkgYXMgRmFjdFZhbHVlKTtcblxuICAgIGpvaW4ubGVmdEFjdGl2YXRlKHRva2VuKTtcblxuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnNbMF0/LmJpbmRpbmdzW1wib3duZXJcIl0pLnRvQmUobWtJZCg3KSk7XG4gIH0pO1xuXG4gIGl0KFwiam9pbiB0ZXN0OiBubyBjb25zdHJhaW50cyDigJQgcHJvZHVjZXMgY2FydGVzaWFuIHByb2R1Y3RcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGxlZnRNZW0gPSBuZXcgQmV0YU1lbW9yeSgpO1xuICAgIGNvbnN0IHJpZ2h0TWVtID0gbmV3IEFscGhhTWVtb3J5KCk7XG4gICAgY29uc3Qgb3V0TWVtID0gbmV3IEJldGFNZW1vcnkoKTtcbiAgICBjb25zdCBqb2luID0gbmV3IEpvaW5Ob2RlKGxlZnRNZW0sIHJpZ2h0TWVtLCBbXSwgXCJ2XCIsIG51bGwpO1xuICAgIGpvaW4uYWRkRG93bnN0cmVhbUFjdGl2YXRlKCh0KSA9PiBvdXRNZW0ubGVmdEFjdGl2YXRlKHQpKTtcblxuICAgIGNvbnN0IHQxID0gbmV3IFRva2VuKG51bGwsIG1rRmFjdCgxLCBcIkFcIiwgXCJhXCIpLCB7IGE6IFwiYVwiIH0pO1xuICAgIGNvbnN0IHQyID0gbmV3IFRva2VuKG51bGwsIG1rRmFjdCgyLCBcIkFcIiwgXCJiXCIpLCB7IGE6IFwiYlwiIH0pO1xuICAgIGxlZnRNZW0ubGVmdEFjdGl2YXRlKHQxKTtcbiAgICBsZWZ0TWVtLmxlZnRBY3RpdmF0ZSh0Mik7XG5cbiAgICByaWdodE1lbS5hZGRGYWN0KG1rSWQoMTApLCBcIkJcIiBhcyBBdHRyS2V5LCBcInpcIiBhcyBGYWN0VmFsdWUpO1xuICAgIHJpZ2h0TWVtLmFkZEZhY3QobWtJZCgxMSksIFwiQlwiIGFzIEF0dHJLZXksIFwieVwiIGFzIEZhY3RWYWx1ZSk7XG5cbiAgICAvLyBMZWZ0LWFjdGl2YXRlIGJvdGggdG9rZW5zICh0cmlnZ2VycyBqb2luIGFnYWluc3QgZXhpc3RpbmcgcmlnaHQgZmFjdHMpXG4gICAgam9pbi5sZWZ0QWN0aXZhdGUodDEpO1xuICAgIGpvaW4ubGVmdEFjdGl2YXRlKHQyKTtcblxuICAgIC8vIDIgdG9rZW5zIMOXIDIgcmlnaHQgZmFjdHMgPSA0IG91dHB1dCB0b2tlbnNcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDQpO1xuICB9KTtcblxuICBpdChcInJpZ2h0LWRlYWN0aXZhdGU6IHJlbW92ZXMgdG9rZW5zIGRlcGVuZGVudCBvbiByZXRyYWN0ZWQgcmlnaHQgZmFjdFwiLCAoKSA9PiB7XG4gICAgY29uc3QgbGVmdE1lbSA9IG5ldyBCZXRhTWVtb3J5KCk7XG4gICAgY29uc3QgcmlnaHRNZW0gPSBuZXcgQWxwaGFNZW1vcnkoKTtcbiAgICBjb25zdCBvdXRNZW0gPSBuZXcgQmV0YU1lbW9yeSgpO1xuICAgIGNvbnN0IGpvaW4gPSBuZXcgSm9pbk5vZGUobGVmdE1lbSwgcmlnaHRNZW0sIFtdLCBcImhwXCIsIFwiZWlkXCIpO1xuICAgIGpvaW4uYWRkRG93bnN0cmVhbUFjdGl2YXRlKCh0KSA9PiBvdXRNZW0ubGVmdEFjdGl2YXRlKHQpKTtcbiAgICBqb2luLmFkZERvd25zdHJlYW1EZWFjdGl2YXRlKCh0KSA9PiBvdXRNZW0ubGVmdERlYWN0aXZhdGUodCkpO1xuXG4gICAgY29uc3QgdG9rZW4gPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDEsIFwiWFwiLCBcInhcIiksIHt9KTtcbiAgICBsZWZ0TWVtLmxlZnRBY3RpdmF0ZSh0b2tlbik7XG4gICAgam9pbi5yaWdodEFjdGl2YXRlKG1rSWQoMSksIFwiSGVhbHRoXCIgYXMgQXR0cktleSwgMTAwIGFzIEZhY3RWYWx1ZSk7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgxKTtcblxuICAgIC8vIFJpZ2h0LWRlYWN0aXZhdGVcbiAgICBqb2luLnJpZ2h0RGVhY3RpdmF0ZShta0lkKDEpLCBcIkhlYWx0aFwiIGFzIEF0dHJLZXksIDEwMCBhcyBGYWN0VmFsdWUpO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xuXG4gIGl0KFwibGVmdC1kZWFjdGl2YXRlOiByZW1vdmVzIGRvd25zdHJlYW0gdG9rZW5zIGRlcml2ZWQgZnJvbSBhIHJldHJhY3RlZCBsZWZ0IHRva2VuXCIsICgpID0+IHtcbiAgICBjb25zdCBsZWZ0TWVtID0gbmV3IEJldGFNZW1vcnkoKTtcbiAgICBjb25zdCByaWdodE1lbSA9IG5ldyBBbHBoYU1lbW9yeSgpO1xuICAgIGNvbnN0IG91dE1lbSA9IG5ldyBCZXRhTWVtb3J5KCk7XG4gICAgY29uc3Qgam9pbiA9IG5ldyBKb2luTm9kZShsZWZ0TWVtLCByaWdodE1lbSwgW10sIFwidlwiLCBcImVpZFwiKTtcbiAgICBqb2luLmFkZERvd25zdHJlYW1BY3RpdmF0ZSgodCkgPT4gb3V0TWVtLmxlZnRBY3RpdmF0ZSh0KSk7XG4gICAgam9pbi5hZGREb3duc3RyZWFtRGVhY3RpdmF0ZSgodCkgPT4gb3V0TWVtLmxlZnREZWFjdGl2YXRlKHQpKTtcblxuICAgIGNvbnN0IHRva2VuQSA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoMSwgXCJBXCIsIFwiYVwiKSwgeyBhOiBcImFcIiB9KTtcbiAgICBjb25zdCB0b2tlbkIgPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDIsIFwiQVwiLCBcImJcIiksIHsgYTogXCJiXCIgfSk7XG4gICAgbGVmdE1lbS5sZWZ0QWN0aXZhdGUodG9rZW5BKTtcbiAgICBsZWZ0TWVtLmxlZnRBY3RpdmF0ZSh0b2tlbkIpO1xuXG4gICAgcmlnaHRNZW0uYWRkRmFjdChta0lkKDEwKSwgXCJCXCIgYXMgQXR0cktleSwgXCJ6XCIgYXMgRmFjdFZhbHVlKTtcblxuICAgIGpvaW4ubGVmdEFjdGl2YXRlKHRva2VuQSk7XG4gICAgam9pbi5sZWZ0QWN0aXZhdGUodG9rZW5CKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDIpO1xuXG4gICAgLy8gUmV0cmFjdCB0b2tlbkEg4oCUIG9ubHkgaXRzIGRlc2NlbmRhbnQgc2hvdWxkIHZhbmlzaFxuICAgIGpvaW4ubGVmdERlYWN0aXZhdGUodG9rZW5BKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDEpO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zWzBdPy5iaW5kaW5nc1tcImFcIl0pLnRvQmUoXCJiXCIpO1xuICB9KTtcblxuICBpdChcInNjYWxhYmlsaXR5OiAxMDAgZW50aXRpZXMsIDIgY29uZGl0aW9ucyDigJQgcHJvZHVjZXMgY29ycmVjdCB0b2tlbiBjb3VudFwiLCAoKSA9PiB7XG4gICAgY29uc3QgbGVmdE1lbSA9IG5ldyBCZXRhTWVtb3J5KCk7XG4gICAgY29uc3QgcmlnaHRNZW0gPSBuZXcgQWxwaGFNZW1vcnkoKTtcbiAgICBjb25zdCBvdXRNZW0gPSBuZXcgQmV0YU1lbW9yeSgpO1xuICAgIGNvbnN0IGpvaW5UZXN0czogSm9pblRlc3RbXSA9IFt7IHR5cGU6IFwiaWRFcXVhbGl0eVwiLCBsZWZ0VmFyOiBcImVpZFwiIH1dO1xuICAgIGNvbnN0IGpvaW4gPSBuZXcgSm9pbk5vZGUobGVmdE1lbSwgcmlnaHRNZW0sIGpvaW5UZXN0cywgXCJ5XCIsIG51bGwpO1xuICAgIGpvaW4uYWRkRG93bnN0cmVhbUFjdGl2YXRlKCh0KSA9PiBvdXRNZW0ubGVmdEFjdGl2YXRlKHQpKTtcblxuICAgIC8vIFNlZWQgMTAwIHRva2VucyBvbiBsZWZ0IChlbnRpdGllcyAxLi4xMDAgd2l0aCBYIGJpbmRpbmcpXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTAwOyBpKyspIHtcbiAgICAgIGNvbnN0IHQgPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KGksIFwiWFwiLCBpKSwgeyBlaWQ6IG1rSWQoaSksIHg6IGkgfSk7XG4gICAgICBsZWZ0TWVtLmxlZnRBY3RpdmF0ZSh0KTtcbiAgICB9XG4gICAgLy8gU2VlZCAxMDAgbWF0Y2hpbmcgZmFjdHMgb24gcmlnaHQgKGVudGl0aWVzIDEuLjEwMCB3aXRoIFkgYmluZGluZylcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAxMDA7IGkrKykge1xuICAgICAgcmlnaHRNZW0uYWRkRmFjdChta0lkKGkpLCBcIllcIiBhcyBBdHRyS2V5LCAoaSAqIDEwKSBhcyBGYWN0VmFsdWUpO1xuICAgIH1cbiAgICAvLyBMZWZ0LWFjdGl2YXRlIGFsbCAxMDAgdG9rZW5zXG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiBbLi4ubGVmdE1lbS50b2tlbnNdKSB7XG4gICAgICBqb2luLmxlZnRBY3RpdmF0ZSh0b2tlbik7XG4gICAgfVxuICAgIC8vIEVhY2ggdG9rZW4gam9pbnMgd2l0aCBpdHMgbWF0Y2hpbmcgZW50aXR5IOKAlCAxMDAgb3V0cHV0IHRva2Vuc1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMTAwKTtcbiAgICAvLyBFYWNoIGhhcyBjb3JyZWN0IHkgYmluZGluZ1xuICAgIGV4cGVjdChcbiAgICAgIG91dE1lbS50b2tlbnMuZXZlcnkoKHQpID0+IHR5cGVvZiB0LmJpbmRpbmdzW1wieVwiXSA9PT0gXCJudW1iZXJcIiksXG4gICAgKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcIjMtY29uZGl0aW9uIGNoYWluICgxMDAgZW50aXRpZXMpOiBsZWZ0LWFjdGl2YXRpbmcgYSBqb2luIHByb2R1Y2VzIGNvcnJlY3QgY291bnRcIiwgKCkgPT4ge1xuICAgIC8vIFNpbXVsYXRlcyAoP2lkLCBYLCA/eCkg4oinICg/aWQsIFksID95KSDiiKcgKD9pZCwgWiwgP3opXG4gICAgY29uc3Qgcm9vdCA9IG5ldyBCZXRhTWVtb3J5KCk7XG4gICAgY29uc3QgYWxwaGFYID0gbmV3IEFscGhhTWVtb3J5KCk7XG4gICAgY29uc3QgYWxwaGFZID0gbmV3IEFscGhhTWVtb3J5KCk7XG4gICAgY29uc3QgYWxwaGFaID0gbmV3IEFscGhhTWVtb3J5KCk7XG5cbiAgICBjb25zdCBtZW0xID0gbmV3IEJldGFNZW1vcnkoKTtcbiAgICBjb25zdCBtZW0yID0gbmV3IEJldGFNZW1vcnkoKTtcbiAgICBjb25zdCBvdXRNZW0gPSBuZXcgQmV0YU1lbW9yeSgpO1xuXG4gICAgLy8gRmlyc3Qgam9pbjogcm9vdCDDlyBYIOKGkiBiaW5kcyBlaWQsIHggKG5vIHRlc3RzOyBzZWVkcyB0aGUgY2hhaW4pXG4gICAgY29uc3Qgam9pbjEgPSBuZXcgSm9pbk5vZGUocm9vdCwgYWxwaGFYLCBbXSwgXCJ4XCIsIFwiZWlkXCIpO1xuICAgIGpvaW4xLmFkZERvd25zdHJlYW1BY3RpdmF0ZSgodCkgPT4gbWVtMS5sZWZ0QWN0aXZhdGUodCkpO1xuXG4gICAgLy8gU2Vjb25kIGpvaW46IG1lbTEgw5cgWSB3aXRoIGlkRXF1YWxpdHkgb24gZWlkIOKGkiBiaW5kcyB5XG4gICAgY29uc3Qgam9pbjIgPSBuZXcgSm9pbk5vZGUoXG4gICAgICBtZW0xLFxuICAgICAgYWxwaGFZLFxuICAgICAgW3sgdHlwZTogXCJpZEVxdWFsaXR5XCIsIGxlZnRWYXI6IFwiZWlkXCIgfV0sXG4gICAgICBcInlcIixcbiAgICAgIG51bGwsXG4gICAgKTtcbiAgICBqb2luMi5hZGREb3duc3RyZWFtQWN0aXZhdGUoKHQpID0+IG1lbTIubGVmdEFjdGl2YXRlKHQpKTtcbiAgICBtZW0xLmFkZERvd25zdHJlYW1BY3RpdmF0ZSgodCkgPT4gam9pbjIubGVmdEFjdGl2YXRlKHQpKTtcblxuICAgIC8vIFRoaXJkIGpvaW46IG1lbTIgw5cgWiB3aXRoIGlkRXF1YWxpdHkgb24gZWlkIOKGkiBiaW5kcyB6XG4gICAgY29uc3Qgam9pbjMgPSBuZXcgSm9pbk5vZGUoXG4gICAgICBtZW0yLFxuICAgICAgYWxwaGFaLFxuICAgICAgW3sgdHlwZTogXCJpZEVxdWFsaXR5XCIsIGxlZnRWYXI6IFwiZWlkXCIgfV0sXG4gICAgICBcInpcIixcbiAgICAgIG51bGwsXG4gICAgKTtcbiAgICBqb2luMy5hZGREb3duc3RyZWFtQWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0QWN0aXZhdGUodCkpO1xuICAgIG1lbTIuYWRkRG93bnN0cmVhbUFjdGl2YXRlKCh0KSA9PiBqb2luMy5sZWZ0QWN0aXZhdGUodCkpO1xuXG4gICAgLy8gU2VlZCBhbGwgdGhyZWUgYWxwaGEgbWVtb3JpZXMgd2l0aCAxMDAgZW50aXRpZXMgZWFjaFxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDEwMDsgaSsrKSB7XG4gICAgICBhbHBoYVguYWRkRmFjdChta0lkKGkpLCBcIlhcIiBhcyBBdHRyS2V5LCBpIGFzIEZhY3RWYWx1ZSk7XG4gICAgICBhbHBoYVkuYWRkRmFjdChta0lkKGkpLCBcIllcIiBhcyBBdHRyS2V5LCAoaSAqIDIpIGFzIEZhY3RWYWx1ZSk7XG4gICAgICBhbHBoYVouYWRkRmFjdChta0lkKGkpLCBcIlpcIiBhcyBBdHRyS2V5LCAoaSAqIDMpIGFzIEZhY3RWYWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gU2VlZCBhIHNpbmdsZSByb290IFwiZHVtbXlcIiB0b2tlbjsgbGVmdC1hY3RpdmF0ZSBqb2luMSBhZ2FpbnN0IGFscGhhWFxuICAgIGNvbnN0IHJvb3RUb2tlbiA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoMCwgXCJfX3Jvb3RcIiwgbnVsbCksIHt9KTtcbiAgICByb290LmxlZnRBY3RpdmF0ZShyb290VG9rZW4pO1xuICAgIGpvaW4xLmxlZnRBY3RpdmF0ZShyb290VG9rZW4pO1xuXG4gICAgLy8gQ2hhaW4gc2hvdWxkIHlpZWxkIGV4YWN0bHkgMTAwIG91dHB1dCB0b2tlbnMgKG9uZSBwZXIgZW50aXR5KVxuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMTAwKTtcbiAgICAvLyBDaGVjayBiaW5kaW5ncyBvbiBhIHNhbXBsZVxuICAgIGNvbnN0IHNhbXBsZSA9IG91dE1lbS50b2tlbnNbMF07XG4gICAgZXhwZWN0KHNhbXBsZSkudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3QodHlwZW9mIHNhbXBsZT8uYmluZGluZ3NbXCJ4XCJdKS50b0JlKFwibnVtYmVyXCIpO1xuICAgIGV4cGVjdCh0eXBlb2Ygc2FtcGxlPy5iaW5kaW5nc1tcInlcIl0pLnRvQmUoXCJudW1iZXJcIik7XG4gICAgZXhwZWN0KHR5cGVvZiBzYW1wbGU/LmJpbmRpbmdzW1wielwiXSkudG9CZShcIm51bWJlclwiKTtcbiAgfSk7XG59KTtcbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9yZXRlL3NyYy9qb2luLnRlc3QudHMifQ== diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/df2ab80bfa3d1684d6f5763127d76a8dfb9f7b6b b/IJGn1F-WxLUCbfU1lu8pU/ssr/df2ab80bfa3d1684d6f5763127d76a8dfb9f7b6b deleted file mode 100644 index 4784208..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/df2ab80bfa3d1684d6f5763127d76a8dfb9f7b6b +++ /dev/null @@ -1,66 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "RULE_SCHEMA_V1", { enumerable: true, configurable: true, get(){ try { return RULE_SCHEMA_V1 } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "serialize", { enumerable: true, configurable: true, get(){ try { return serialize } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "deserialize", { enumerable: true, configurable: true, get(){ try { return deserialize } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("zod", {"importedNames":["z"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/registry.ts", {"importedNames":["HandlerRegistry"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/builder.ts", {"importedNames":["v"]}); - - -const ConditionSchema = __vite_ssr_import_0__.z.object({ - id: __vite_ssr_import_0__.z.union([__vite_ssr_import_0__.z.number(), __vite_ssr_import_0__.z.null()]), - attr: __vite_ssr_import_0__.z.string(), - binding: __vite_ssr_import_0__.z.string().nullable(), - idBinding: __vite_ssr_import_0__.z.string().optional() -}); -const RULE_SCHEMA_V1 = __vite_ssr_import_0__.z.object({ - name: __vite_ssr_import_0__.z.string().min(1), - salience: __vite_ssr_import_0__.z.number().default(0), - conditions: __vite_ssr_import_0__.z.array(ConditionSchema).default([]), - handler: __vite_ssr_import_0__.z.string().min(1), - handlerArgs: __vite_ssr_import_0__.z.array(__vite_ssr_import_0__.z.unknown()).optional() -}); -function serialize(rule) { - const conditions = (rule.conditions ?? []).map((c) => { - const base = { - id: c.id, - attr: c.attr, - binding: c.binding?.name ?? null - }; - return c.idBinding !== void 0 ? { ...base, idBinding: c.idBinding.name } : base; - }); - const out = { - name: rule.name, - salience: rule.salience ?? 0, - conditions, - handler: rule.handler - }; - if (rule.handlerArgs !== void 0) { - out.handlerArgs = [...rule.handlerArgs]; - }; - return out; -}; -function deserialize(json, registry) { - const parsed = RULE_SCHEMA_V1.parse(json); - registry.verify([parsed.handler]); - const conditions = parsed.conditions.map((c) => { - const base = { - id: c.id, - attr: c.attr, - binding: c.binding !== null ? (0,__vite_ssr_import_2__.v)(c.binding) : null - }; - return c.idBinding !== void 0 ? { ...base, idBinding: (0,__vite_ssr_import_2__.v)(c.idBinding) } : base; - }); - const out = { - name: parsed.name, - salience: parsed.salience, - conditions, - handler: parsed.handler - }; - if (parsed.handlerArgs !== void 0) { - return { ...out, handlerArgs: parsed.handlerArgs }; - }; - return out; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7O0FBYUE7QUFDQTtBQUNBOzs7QUFlQSxNQUFNLGtCQUFrQix3QkFBRSxPQUFPO0FBQUEsRUFDL0IsSUFBSSx3QkFBRSxNQUFNLENBQUMsd0JBQUUsT0FBTyxHQUFHLHdCQUFFLEtBQUssQ0FBQyxDQUFDO0FBQUEsRUFDbEMsTUFBTSx3QkFBRSxPQUFPO0FBQUEsRUFDZixTQUFTLHdCQUFFLE9BQU8sRUFBRSxTQUFTO0FBQUEsRUFDN0IsV0FBVyx3QkFBRSxPQUFPLEVBQUUsU0FBUztBQUNqQyxDQUFDO0FBUU0sTUFBTSxpQkFBaUIsd0JBQUUsT0FBTztBQUFBLEVBQ3JDLE1BQU0sd0JBQUUsT0FBTyxFQUFFLElBQUksQ0FBQztBQUFBLEVBQ3RCLFVBQVUsd0JBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQztBQUFBLEVBQzlCLFlBQVksd0JBQUUsTUFBTSxlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFBQSxFQUMvQyxTQUFTLHdCQUFFLE9BQU8sRUFBRSxJQUFJLENBQUM7QUFBQSxFQUN6QixhQUFhLHdCQUFFLE1BQU0sd0JBQUUsUUFBUSxDQUFDLEVBQUUsU0FBUztBQUM3QyxDQUFDO0FBa0NNLFNBQVMsVUFBVSxNQUF3QztBQUNoRSxRQUFNLGNBQWMsS0FBSyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTTtBQUNwRCxVQUFNLE9BQTZDO0FBQUEsTUFDakQsSUFBSSxFQUFFO0FBQUEsTUFDTixNQUFNLEVBQUU7QUFBQSxNQUNSLFNBQVMsRUFBRSxTQUFTLFFBQVE7QUFBQSxJQUM5QjtBQUVBLFdBQU8sRUFBRSxjQUFjLFNBQ25CLEVBQUUsR0FBRyxNQUFNLFdBQVcsRUFBRSxVQUFVLEtBQUssSUFDdkM7QUFBQSxFQUNOLENBQUM7QUFFRCxRQUFNLE1BQXNCO0FBQUEsSUFDMUIsTUFBTSxLQUFLO0FBQUEsSUFDWCxVQUFVLEtBQUssWUFBWTtBQUFBLElBQzNCO0FBQUEsSUFDQSxTQUFTLEtBQUs7QUFBQSxFQUNoQjtBQUNBLE1BQUksS0FBSyxnQkFBZ0IsUUFBVztBQUNsQyxRQUFJLGNBQWMsQ0FBQyxHQUFHLEtBQUssV0FBVztBQUFBLEVBQ3hDO0FBQ0EsU0FBTztBQUNUO0FBY08sU0FBUyxZQUNkLE1BQ0EsVUFDZ0I7QUFDaEIsUUFBTSxTQUFTLGVBQWUsTUFBTSxJQUFJO0FBSXhDLFdBQVMsT0FBTyxDQUFDLE9BQU8sT0FBTyxDQUFDO0FBRWhDLFFBQU0sYUFBOEIsT0FBTyxXQUFXLElBQUksQ0FBQyxNQUFNO0FBQy9ELFVBQU0sT0FBc0I7QUFBQSxNQUMxQixJQUFJLEVBQUU7QUFBQSxNQUNOLE1BQU0sRUFBRTtBQUFBLE1BQ1IsU0FBUyxFQUFFLFlBQVksVUFBTyx5QkFBRSxFQUFFLE9BQU8sSUFBSTtBQUFBLElBQy9DO0FBQ0EsV0FBTyxFQUFFLGNBQWMsU0FDbkIsRUFBRSxHQUFHLE1BQU0sY0FBVyx5QkFBRSxFQUFFLFNBQVMsRUFBRSxJQUNyQztBQUFBLEVBQ04sQ0FBQztBQUVELFFBQU0sTUFBc0I7QUFBQSxJQUMxQixNQUFNLE9BQU87QUFBQSxJQUNiLFVBQVUsT0FBTztBQUFBLElBQ2pCO0FBQUEsSUFDQSxTQUFTLE9BQU87QUFBQSxFQUNsQjtBQUNBLE1BQUksT0FBTyxnQkFBZ0IsUUFBVztBQUNwQyxXQUFPLEVBQUUsR0FBRyxLQUFLLGFBQWEsT0FBTyxZQUFrQztBQUFBLEVBQ3pFO0FBQ0EsU0FBTztBQUNUIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJzZXJpYWxpemUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBKU09OIHNlcmlhbGl6YXRpb24gZm9yIFJ1bGVEZWZpbml0aW9ucy5cbiAqXG4gKiBQZXIgU1BFQy5tZCDCp0pTT04gUnVsZSBTY2hlbWEg4oCUIGhhbmRsZXItcmVnaXN0cnkgcGF0dGVybiwgbm8gZXZhbCwgbm9cbiAqIGZ1bmN0aW9uLXRvLXN0cmluZyBjb252ZXJzaW9uLCBubyBhcmJpdHJhcnkgSmF2YVNjcmlwdCBlbWJlZGRlZCBpbiBKU09OLlxuICogQWxsIGV4ZWN1dGFibGUgYmVoYXZpb3VyIGlzIHJlZmVyZW5jZWQgYnkgbmFtZSBhbmQgcmVzb2x2ZWQgYWdhaW5zdCBhXG4gKiB7QGxpbmsgSGFuZGxlclJlZ2lzdHJ5fSBhdCBkZXNlcmlhbGlzYXRpb24gdGltZS5cbiAqXG4gKiB2MSBzY2hlbWEgKFJVTEVfU0NIRU1BX1YxKSBjb3ZlcnMgb3JkaW5hcnkgcG9zaXRpdmUgKGFscGhhKSBjb25kaXRpb25zLlxuICogUGhhc2UgMiBub2RlIHR5cGVzIChuZWdhdGlvbiwgZXhpc3RlbnRpYWwsIG5jYywgYWdncmVnYXRpb24pIGFuZCBmaWx0ZXJcbiAqIHByZWRpY2F0ZXMgYXJlIGludGVudGlvbmFsbHkgb21pdHRlZCBmcm9tIHYxIGFuZCB3aWxsIGJlIGFkZGVkIGluIGFcbiAqIGZ1dHVyZSBzY2hlbWEgdmVyc2lvbiB3aXRob3V0IGJhY2stY29tcGF0IHRvIHYwLlxuICovXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgSGFuZGxlclJlZ2lzdHJ5IH0gZnJvbSBcIi4vcmVnaXN0cnkuanNcIjtcbmltcG9ydCB7XG4gIHYsXG4gIHR5cGUgUnVsZUNvbmRpdGlvbixcbiAgdHlwZSBSdWxlRGVmaW5pdGlvbixcbn0gZnJvbSBcIi4vYnVpbGRlci5qc1wiO1xuXG4vKipcbiAqIFpvZCBzY2hlbWEgZm9yIGEgc2luZ2xlIHNlcmlhbGl6ZWQgY29uZGl0aW9uLlxuICpcbiAqIC0gYGlkYDogZWl0aGVyIGEgbGl0ZXJhbCBlbnRpdHkgaWQgKG51bWJlciDigJQgRW50aXR5SWQncyBicmFuZCBleGlzdHMgb25seSBpblxuICogICB0aGUgdHlwZSBzeXN0ZW0pIG9yIGBudWxsYCBmb3Igd2lsZGNhcmQuXG4gKiAtIGBhdHRyYDogdGhlIGF0dHJpYnV0ZSBrZXkgc3RyaW5nLlxuICogLSBgYmluZGluZ2A6IHRoZSB2YXJpYWJsZSBuYW1lIHRvIGJpbmQgdGhlIHZhbHVlIHRvLCBvciBgbnVsbGAgaWYgbm8gYmluZGluZy5cbiAqIC0gYGlkQmluZGluZ2A6IG9wdGlvbmFsIHZhcmlhYmxlIG5hbWUgdG8gYmluZCB0aGUgZW50aXR5IGlkIHRvLlxuICovXG5jb25zdCBDb25kaXRpb25TY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LnVuaW9uKFt6Lm51bWJlcigpLCB6Lm51bGwoKV0pLFxuICBhdHRyOiB6LnN0cmluZygpLFxuICBiaW5kaW5nOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIGlkQmluZGluZzogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSk7XG5cbi8qKlxuICogWm9kIHNjaGVtYSBmb3IgdGhlIGZ1bGwgc2VyaWFsaXplZCBydWxlIOKAlCB2MS5cbiAqXG4gKiBFeHBvcnRlZCBmb3IgZXh0ZXJuYWwgdmFsaWRhdGlvbiBwaXBlbGluZXMgKGUuZy4gbmV0d29yayBpbmdlc3Rpb24gYmVmb3JlXG4gKiBkZXNlcmlhbGlzYXRpb24sIGFkbWluIHRvb2xpbmcpIHBlciBTUEVDLm1kIMKnSlNPTiBSdWxlIFNjaGVtYS5cbiAqL1xuZXhwb3J0IGNvbnN0IFJVTEVfU0NIRU1BX1YxID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLm1pbigxKSxcbiAgc2FsaWVuY2U6IHoubnVtYmVyKCkuZGVmYXVsdCgwKSxcbiAgY29uZGl0aW9uczogei5hcnJheShDb25kaXRpb25TY2hlbWEpLmRlZmF1bHQoW10pLFxuICBoYW5kbGVyOiB6LnN0cmluZygpLm1pbigxKSxcbiAgaGFuZGxlckFyZ3M6IHouYXJyYXkoei51bmtub3duKCkpLm9wdGlvbmFsKCksXG59KTtcblxuLyoqIEluZmVycmVkIHN0YXRpYyB0eXBlIG9mIGEgc2VyaWFsaXplZCBydWxlLiAqL1xuZXhwb3J0IHR5cGUgU2VyaWFsaXplZFJ1bGUgPSB6LmluZmVyPHR5cGVvZiBSVUxFX1NDSEVNQV9WMT47XG5cbi8qKlxuICogTG9vc2UgaW5wdXQgc2hhcGUgYWNjZXB0ZWQgYnkge0BsaW5rIHNlcmlhbGl6ZX0uXG4gKlxuICogQWxsb3dzIGB1bmRlZmluZWRgIG9uIG9wdGlvbmFsIGZpZWxkcyB0byBlYXNlIGNhbGwtc2l0ZSBlcmdvbm9taWNzIHVuZGVyXG4gKiBgZXhhY3RPcHRpb25hbFByb3BlcnR5VHlwZXM6IHRydWVgLiBBdCBydW50aW1lLCBmaWVsZHMgdGhhdCBhcmUgYWJzZW50IG9yXG4gKiBleHBsaWNpdGx5IGB1bmRlZmluZWRgIGFyZSBub3JtYWxpc2VkIHRvIHNjaGVtYSBkZWZhdWx0cyBvciBvbWl0dGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6YWJsZVJ1bGUge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGhhbmRsZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgc2FsaWVuY2U/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGNvbmRpdGlvbnM/OlxuICAgIHwgUmVhZG9ubHlBcnJheTx7XG4gICAgICAgIHJlYWRvbmx5IGlkOiBSdWxlQ29uZGl0aW9uW1wiaWRcIl07XG4gICAgICAgIHJlYWRvbmx5IGF0dHI6IHN0cmluZztcbiAgICAgICAgcmVhZG9ubHkgYmluZGluZzogUnVsZUNvbmRpdGlvbltcImJpbmRpbmdcIl07XG4gICAgICAgIHJlYWRvbmx5IGlkQmluZGluZz86IFJ1bGVDb25kaXRpb25bXCJpZEJpbmRpbmdcIl0gfCB1bmRlZmluZWQ7XG4gICAgICB9PlxuICAgIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBoYW5kbGVyQXJncz86IHJlYWRvbmx5IHVua25vd25bXSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemUgYSBSdWxlRGVmaW5pdGlvbiB0byBhIHBsYWluLCBKU09OLWNvbXBhdGlibGUgb2JqZWN0LlxuICpcbiAqIFRoZSByZXN1bHQgY29udGFpbnMgb25seSBzdHJpbmdzLCBudW1iZXJzLCBib29sZWFucywgbnVsbCwgYXJyYXlzLCBhbmRcbiAqIHBsYWluIG9iamVjdHMg4oCUIG5vIGZ1bmN0aW9uIHJlZmVyZW5jZXMuIFBhc3NpbmcgdGhlIHJldHVybiB2YWx1ZSB0b1xuICogYEpTT04uc3RyaW5naWZ5YCBpcyBndWFyYW50ZWVkIHNhZmUgYW5kIGxvc3NsZXNzIGZvciB0aGUgdjEgc2NoZW1hLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplKHJ1bGU6IFNlcmlhbGl6YWJsZVJ1bGUpOiBTZXJpYWxpemVkUnVsZSB7XG4gIGNvbnN0IGNvbmRpdGlvbnMgPSAocnVsZS5jb25kaXRpb25zID8/IFtdKS5tYXAoKGMpID0+IHtcbiAgICBjb25zdCBiYXNlOiBTZXJpYWxpemVkUnVsZVtcImNvbmRpdGlvbnNcIl1bbnVtYmVyXSA9IHtcbiAgICAgIGlkOiBjLmlkLFxuICAgICAgYXR0cjogYy5hdHRyLFxuICAgICAgYmluZGluZzogYy5iaW5kaW5nPy5uYW1lID8/IG51bGwsXG4gICAgfTtcbiAgICAvLyBVbmRlciBleGFjdE9wdGlvbmFsUHJvcGVydHlUeXBlcywgb25seSBpbmNsdWRlIGlkQmluZGluZyB3aGVuIGRlZmluZWQuXG4gICAgcmV0dXJuIGMuaWRCaW5kaW5nICE9PSB1bmRlZmluZWRcbiAgICAgID8geyAuLi5iYXNlLCBpZEJpbmRpbmc6IGMuaWRCaW5kaW5nLm5hbWUgfVxuICAgICAgOiBiYXNlO1xuICB9KTtcblxuICBjb25zdCBvdXQ6IFNlcmlhbGl6ZWRSdWxlID0ge1xuICAgIG5hbWU6IHJ1bGUubmFtZSxcbiAgICBzYWxpZW5jZTogcnVsZS5zYWxpZW5jZSA/PyAwLFxuICAgIGNvbmRpdGlvbnMsXG4gICAgaGFuZGxlcjogcnVsZS5oYW5kbGVyLFxuICB9O1xuICBpZiAocnVsZS5oYW5kbGVyQXJncyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgb3V0LmhhbmRsZXJBcmdzID0gWy4uLnJ1bGUuaGFuZGxlckFyZ3NdO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogRGVzZXJpYWxpemUgYSBKU09OIG9iamVjdCBiYWNrIGludG8gYSBSdWxlRGVmaW5pdGlvbi5cbiAqXG4gKiBWYWxpZGF0ZXMgdGhlIGlucHV0IGFnYWluc3Qge0BsaW5rIFJVTEVfU0NIRU1BX1YxfSBhbmQgdGhlbiByZXNvbHZlcyB0aGVcbiAqIGhhbmRsZXIgbmFtZSBhZ2FpbnN0IGByZWdpc3RyeWAuIFRocm93czpcbiAqICAgLSBgei5ab2RFcnJvcmAgb24gbWFsZm9ybWVkIGlucHV0IChtaXNzaW5nIGZpZWxkcywgd3JvbmcgdHlwZXMpLlxuICogICAtIGBVbmtub3duSGFuZGxlckVycm9yYCB3aGVuIGBoYW5kbGVyYCBpcyBub3QgcmVnaXN0ZXJlZC5cbiAqXG4gKiBUaGUgcmVzdWx0aW5nIFJ1bGVEZWZpbml0aW9uIGlzIHN0cnVjdHVyYWxseSBpZGVudGljYWwgdG8gb25lIHByb2R1Y2VkIGJ5XG4gKiB7QGxpbmsgZGVmaW5lUnVsZX0g4oCUIHJvdW5kLXRyaXBwaW5nIHZpYSBgc2VyaWFsaXplKGRlc2VyaWFsaXplKHgpKWAgeWllbGRzIGFcbiAqIHZhbHVlIGJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBvcmlnaW5hbCBKU09OIHVuZGVyIGBKU09OLnN0cmluZ2lmeWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZShcbiAganNvbjogdW5rbm93bixcbiAgcmVnaXN0cnk6IEhhbmRsZXJSZWdpc3RyeVxuKTogUnVsZURlZmluaXRpb24ge1xuICBjb25zdCBwYXJzZWQgPSBSVUxFX1NDSEVNQV9WMS5wYXJzZShqc29uKTtcblxuICAvLyBSZWdpc3RyeSByZXNvbHV0aW9uIOKAlCBwZXIgU1BFQy5tZCDCp0pTT04gUnVsZSBTY2hlbWEsIGhhbmRsZXIgbmFtZXMgTVVTVFxuICAvLyByZXNvbHZlIG9yIHdlIHRocm93IFVua25vd25IYW5kbGVyRXJyb3IuXG4gIHJlZ2lzdHJ5LnZlcmlmeShbcGFyc2VkLmhhbmRsZXJdKTtcblxuICBjb25zdCBjb25kaXRpb25zOiBSdWxlQ29uZGl0aW9uW10gPSBwYXJzZWQuY29uZGl0aW9ucy5tYXAoKGMpID0+IHtcbiAgICBjb25zdCBiYXNlOiBSdWxlQ29uZGl0aW9uID0ge1xuICAgICAgaWQ6IGMuaWQgYXMgUnVsZUNvbmRpdGlvbltcImlkXCJdLFxuICAgICAgYXR0cjogYy5hdHRyLFxuICAgICAgYmluZGluZzogYy5iaW5kaW5nICE9PSBudWxsID8gdihjLmJpbmRpbmcpIDogbnVsbCxcbiAgICB9O1xuICAgIHJldHVybiBjLmlkQmluZGluZyAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHsgLi4uYmFzZSwgaWRCaW5kaW5nOiB2KGMuaWRCaW5kaW5nKSB9XG4gICAgICA6IGJhc2U7XG4gIH0pO1xuXG4gIGNvbnN0IG91dDogUnVsZURlZmluaXRpb24gPSB7XG4gICAgbmFtZTogcGFyc2VkLm5hbWUsXG4gICAgc2FsaWVuY2U6IHBhcnNlZC5zYWxpZW5jZSxcbiAgICBjb25kaXRpb25zLFxuICAgIGhhbmRsZXI6IHBhcnNlZC5oYW5kbGVyLFxuICB9O1xuICBpZiAocGFyc2VkLmhhbmRsZXJBcmdzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4geyAuLi5vdXQsIGhhbmRsZXJBcmdzOiBwYXJzZWQuaGFuZGxlckFyZ3MgYXMgcmVhZG9ubHkgdW5rbm93bltdIH07XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiJdLCJmaWxlIjoiL3NyYy9zZXJpYWxpemUudHMifQ== diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/eac4dfb96c341f2cddd257fefaabd20bc000c149 b/IJGn1F-WxLUCbfU1lu8pU/ssr/eac4dfb96c341f2cddd257fefaabd20bc000c149 deleted file mode 100644 index 874efda..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/eac4dfb96c341f2cddd257fefaabd20bc000c149 +++ /dev/null @@ -1,113 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("vitest", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/session.ts", {"importedNames":["Session"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/beta.ts", {"importedNames":["BetaMemory"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/beta.ts", {"importedNames":["Token"]}); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/join.ts", {"importedNames":["JoinNode"]}); -const __vite_ssr_import_5__ = await __vite_ssr_import__("/src/condition.ts", {"importedNames":["FilterNode"]}); -const __vite_ssr_import_6__ = await __vite_ssr_import__("/src/query.ts", {"importedNames":["ProductionNode"]}); -const __vite_ssr_import_7__ = await __vite_ssr_import__("/src/registry.ts", {"importedNames":["PredicateRegistry","UnknownPredicateError"]}); -const ROOT_FACT = { id: 0, attr: "__root", value: null }; -function buildFilteredHealthNetwork(threshold) { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const alpha = session._getAlpha(); - const rootMem = new __vite_ssr_import_2__.BetaMemory(); - rootMem.leftActivate(new __vite_ssr_import_3__.Token(null, ROOT_FACT, {})); - const alphaHealth = alpha.buildNode({ id: null, attr: "Health" }); - const join = new __vite_ssr_import_4__.JoinNode(rootMem, alphaHealth.memory, [], "hp", "eid"); - alphaHealth.onActivate((id, attr, value) => join.rightActivate(id, attr, value)); - alphaHealth.onDeactivate((id, attr, value) => join.rightDeactivate(id, attr, value)); - const predReg = new __vite_ssr_import_7__.PredicateRegistry(); - predReg.register("greaterThan", (match, args) => { - const hp = match["hp"]; - const limit = args[0]; - return hp > limit; - }); - const filter = new __vite_ssr_import_5__.FilterNode( - [{ predicate: "greaterThan", args: [threshold] }], - predReg - ); - join.addDownstreamActivate(filter.leftActivate.bind(filter)); - join.addDownstreamDeactivate(filter.leftDeactivate.bind(filter)); - const prod = new __vite_ssr_import_6__.ProductionNode("filteredHealthRule"); - filter.addDownstreamActivate(prod.leftActivate.bind(prod)); - filter.addDownstreamDeactivate(prod.leftDeactivate.bind(prod)); - return { session, prod, predReg }; -} -(0,__vite_ssr_import_0__.describe)("G5 — filter predicate (cond equivalent)", () => { - (0,__vite_ssr_import_0__.it)("only the entity with hp > 50 appears in matches", () => { - const { session, prod } = buildFilteredHealthNetwork(50); - const strong = session.nextId(); - const weak = session.nextId(); - session.insert(strong, "Health", 100); - session.insert(weak, "Health", 10); - (0,__vite_ssr_import_0__.expect)(prod.matches).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(prod.matches[0]?.bindings["hp"]).toBe(100); - (0,__vite_ssr_import_0__.expect)(prod.matches[0]?.bindings["eid"]).toBe(strong); - }); - (0,__vite_ssr_import_0__.it)("threshold=0: all positive health values pass", () => { - const { session, prod } = buildFilteredHealthNetwork(0); - for (let i = 0; i < 3; i++) { - const e = session.nextId(); - session.insert(e, "Health", i + 1); - }; - (0,__vite_ssr_import_0__.expect)(prod.matches).toHaveLength(3); - }); - (0,__vite_ssr_import_0__.it)("all below threshold → 0 matches", () => { - const { session, prod } = buildFilteredHealthNetwork(1e3); - for (let i = 0; i < 3; i++) { - const e = session.nextId(); - session.insert(e, "Health", i + 1); - }; - (0,__vite_ssr_import_0__.expect)(prod.matches).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("retracting a passing entity removes its match", () => { - const { session, prod } = buildFilteredHealthNetwork(50); - const e1 = session.nextId(); - session.insert(e1, "Health", 100); - (0,__vite_ssr_import_0__.expect)(prod.matches).toHaveLength(1); - session.retract(e1, "Health"); - (0,__vite_ssr_import_0__.expect)(prod.matches).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("FilterNode rejects unknown predicates at construction time", () => { - const emptyReg = new __vite_ssr_import_7__.PredicateRegistry(); - (0,__vite_ssr_import_0__.expect)( - () => new __vite_ssr_import_5__.FilterNode([{ predicate: "nonexistent", args: [] }], emptyReg) - ).toThrow((0,__vite_ssr_import_7__.UnknownPredicateError)); - }); - (0,__vite_ssr_import_0__.it)("conjunction: both predicates must pass", () => { - const session = new __vite_ssr_import_1__.Session({ autoFire: false }); - const alpha = session._getAlpha(); - const rootMem = new __vite_ssr_import_2__.BetaMemory(); - rootMem.leftActivate(new __vite_ssr_import_3__.Token(null, ROOT_FACT, {})); - const alphaHealth = alpha.buildNode({ id: null, attr: "Health" }); - const join = new __vite_ssr_import_4__.JoinNode(rootMem, alphaHealth.memory, [], "hp", "eid"); - alphaHealth.onActivate((id, attr, value) => join.rightActivate(id, attr, value)); - alphaHealth.onDeactivate((id, attr, value) => join.rightDeactivate(id, attr, value)); - const predReg = new __vite_ssr_import_7__.PredicateRegistry(); - predReg.register("greaterThan", (match, args) => match["hp"] > args[0]); - predReg.register("lessThan", (match, args) => match["hp"] < args[0]); - const filter = new __vite_ssr_import_5__.FilterNode( - [ - { predicate: "greaterThan", args: [20] }, - { predicate: "lessThan", args: [80] } - ], - predReg - ); - join.addDownstreamActivate(filter.leftActivate.bind(filter)); - join.addDownstreamDeactivate(filter.leftDeactivate.bind(filter)); - const prod = new __vite_ssr_import_6__.ProductionNode("rangeRule"); - filter.addDownstreamActivate(prod.leftActivate.bind(prod)); - filter.addDownstreamDeactivate(prod.leftDeactivate.bind(prod)); - const inRange = session.nextId(); - const tooLow = session.nextId(); - const tooHigh = session.nextId(); - session.insert(inRange, "Health", 50); - session.insert(tooLow, "Health", 10); - session.insert(tooHigh, "Health", 90); - (0,__vite_ssr_import_0__.expect)(prod.matches).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(prod.matches[0]?.bindings["hp"]).toBe(50); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBd0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQSxNQUFNLFlBQXVCLEVBQUUsSUFBSSxHQUFlLE1BQU0sVUFBVSxPQUFPLEtBQUs7QUFFOUUsU0FBUywyQkFBMkIsV0FBbUI7QUFDckQsUUFBTSxVQUFVLElBQUksOEJBQVEsRUFBRSxVQUFVLE1BQU0sQ0FBQztBQUMvQyxRQUFNLFFBQVEsUUFBUSxVQUFVO0FBRWhDLFFBQU0sVUFBVSxJQUFJLGlDQUFXO0FBQy9CLFVBQVEsYUFBYSxJQUFJLDRCQUFNLE1BQU0sV0FBVyxDQUFDLENBQUMsQ0FBQztBQUVuRCxRQUFNLGNBQWMsTUFBTSxVQUFVLEVBQUUsSUFBSSxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBQ2hFLFFBQU0sT0FBTyxJQUFJLCtCQUFTLFNBQVMsWUFBWSxRQUFRLENBQUMsR0FBRyxNQUFNLEtBQUs7QUFDdEUsY0FBWSxXQUFXLENBQUMsSUFBSSxNQUFNLFVBQVUsS0FBSyxjQUFjLElBQUksTUFBTSxLQUFLLENBQUM7QUFDL0UsY0FBWSxhQUFhLENBQUMsSUFBSSxNQUFNLFVBQVUsS0FBSyxnQkFBZ0IsSUFBSSxNQUFNLEtBQUssQ0FBQztBQUduRixRQUFNLFVBQVUsSUFBSSx3Q0FBa0I7QUFDdEMsVUFBUSxTQUFTLGVBQWUsQ0FBQyxPQUFPLFNBQVM7QUFDL0MsVUFBTSxLQUFLLE1BQU0sSUFBSTtBQUNyQixVQUFNLFFBQVEsS0FBSyxDQUFDO0FBQ3BCLFdBQU8sS0FBSztBQUFBLEVBQ2QsQ0FBQztBQUdELFFBQU0sU0FBUyxJQUFJO0FBQUEsSUFDakIsQ0FBQyxFQUFFLFdBQVcsZUFBZSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7QUFBQSxJQUNoRDtBQUFBLEVBQ0Y7QUFHQSxPQUFLLHNCQUFzQixPQUFPLGFBQWEsS0FBSyxNQUFNLENBQUM7QUFDM0QsT0FBSyx3QkFBd0IsT0FBTyxlQUFlLEtBQUssTUFBTSxDQUFDO0FBRS9ELFFBQU0sT0FBTyxJQUFJLHFDQUFlLG9CQUFvQjtBQUNwRCxTQUFPLHNCQUFzQixLQUFLLGFBQWEsS0FBSyxJQUFJLENBQUM7QUFDekQsU0FBTyx3QkFBd0IsS0FBSyxlQUFlLEtBQUssSUFBSSxDQUFDO0FBRTdELFNBQU8sRUFBRSxTQUFTLE1BQU0sUUFBUTtBQUNsQztHQUVBLGdDQUFTLDJDQUEyQyxNQUFNO0FBQ3hELCtCQUFHLG1EQUFtRCxNQUFNO0FBQzFELFVBQU0sRUFBRSxTQUFTLEtBQUssSUFBSSwyQkFBMkIsRUFBRTtBQUV2RCxVQUFNLFNBQVMsUUFBUSxPQUFPO0FBQzlCLFVBQU0sT0FBTyxRQUFRLE9BQU87QUFDNUIsWUFBUSxPQUFPLFFBQVEsVUFBVSxHQUFHO0FBQ3BDLFlBQVEsT0FBTyxNQUFNLFVBQVUsRUFBRTtBQUVqQyxxQ0FBTyxLQUFLLE9BQU8sRUFBRSxhQUFhLENBQUM7QUFDbkMscUNBQU8sS0FBSyxRQUFRLENBQUMsR0FBRyxTQUFTLElBQUksQ0FBQyxFQUFFLEtBQUssR0FBRztBQUNoRCxxQ0FBTyxLQUFLLFFBQVEsQ0FBQyxHQUFHLFNBQVMsS0FBSyxDQUFDLEVBQUUsS0FBSyxNQUFNO0FBQUEsRUFDdEQsQ0FBQztBQUVELCtCQUFHLGdEQUFnRCxNQUFNO0FBQ3ZELFVBQU0sRUFBRSxTQUFTLEtBQUssSUFBSSwyQkFBMkIsQ0FBQztBQUV0RCxhQUFTLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSztBQUMxQixZQUFNLElBQUksUUFBUSxPQUFPO0FBQ3pCLGNBQVEsT0FBTyxHQUFHLFVBQVUsSUFBSSxDQUFDO0FBQUEsSUFDbkM7QUFFQSxxQ0FBTyxLQUFLLE9BQU8sRUFBRSxhQUFhLENBQUM7QUFBQSxFQUNyQyxDQUFDO0FBRUQsK0JBQUcsbUNBQW1DLE1BQU07QUFDMUMsVUFBTSxFQUFFLFNBQVMsS0FBSyxJQUFJLDJCQUEyQixHQUFJO0FBRXpELGFBQVMsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLO0FBQzFCLFlBQU0sSUFBSSxRQUFRLE9BQU87QUFDekIsY0FBUSxPQUFPLEdBQUcsVUFBVSxJQUFJLENBQUM7QUFBQSxJQUNuQztBQUVBLHFDQUFPLEtBQUssT0FBTyxFQUFFLGFBQWEsQ0FBQztBQUFBLEVBQ3JDLENBQUM7QUFFRCwrQkFBRyxpREFBaUQsTUFBTTtBQUN4RCxVQUFNLEVBQUUsU0FBUyxLQUFLLElBQUksMkJBQTJCLEVBQUU7QUFFdkQsVUFBTSxLQUFLLFFBQVEsT0FBTztBQUMxQixZQUFRLE9BQU8sSUFBSSxVQUFVLEdBQUc7QUFDaEMscUNBQU8sS0FBSyxPQUFPLEVBQUUsYUFBYSxDQUFDO0FBRW5DLFlBQVEsUUFBUSxJQUFJLFFBQVE7QUFDNUIscUNBQU8sS0FBSyxPQUFPLEVBQUUsYUFBYSxDQUFDO0FBQUEsRUFDckMsQ0FBQztBQUVELCtCQUFHLDhEQUE4RCxNQUFNO0FBQ3JFLFVBQU0sV0FBVyxJQUFJLHdDQUFrQjtBQUN2QztBQUFBLE1BQ0UsTUFBTSxJQUFJLGlDQUFXLENBQUMsRUFBRSxXQUFXLGVBQWUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVE7QUFBQSxJQUN6RSxFQUFFLFdBQVEsNENBQXFCO0FBQUEsRUFDakMsQ0FBQztBQUVELCtCQUFHLDBDQUEwQyxNQUFNO0FBQ2pELFVBQU0sVUFBVSxJQUFJLDhCQUFRLEVBQUUsVUFBVSxNQUFNLENBQUM7QUFDL0MsVUFBTSxRQUFRLFFBQVEsVUFBVTtBQUVoQyxVQUFNLFVBQVUsSUFBSSxpQ0FBVztBQUMvQixZQUFRLGFBQWEsSUFBSSw0QkFBTSxNQUFNLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFFbkQsVUFBTSxjQUFjLE1BQU0sVUFBVSxFQUFFLElBQUksTUFBTSxNQUFNLFNBQVMsQ0FBQztBQUNoRSxVQUFNLE9BQU8sSUFBSSwrQkFBUyxTQUFTLFlBQVksUUFBUSxDQUFDLEdBQUcsTUFBTSxLQUFLO0FBQ3RFLGdCQUFZLFdBQVcsQ0FBQyxJQUFJLE1BQU0sVUFBVSxLQUFLLGNBQWMsSUFBSSxNQUFNLEtBQUssQ0FBQztBQUMvRSxnQkFBWSxhQUFhLENBQUMsSUFBSSxNQUFNLFVBQVUsS0FBSyxnQkFBZ0IsSUFBSSxNQUFNLEtBQUssQ0FBQztBQUVuRixVQUFNLFVBQVUsSUFBSSx3Q0FBa0I7QUFDdEMsWUFBUSxTQUFTLGVBQWUsQ0FBQyxPQUFPLFNBQVUsTUFBTSxJQUFJLElBQWdCLEtBQUssQ0FBQyxDQUFZO0FBQzlGLFlBQVEsU0FBUyxZQUFZLENBQUMsT0FBTyxTQUFVLE1BQU0sSUFBSSxJQUFnQixLQUFLLENBQUMsQ0FBWTtBQUczRixVQUFNLFNBQVMsSUFBSTtBQUFBLE1BQ2pCO0FBQUEsUUFDRSxFQUFFLFdBQVcsZUFBZSxNQUFNLENBQUMsRUFBRSxFQUFFO0FBQUEsUUFDdkMsRUFBRSxXQUFXLFlBQVksTUFBTSxDQUFDLEVBQUUsRUFBRTtBQUFBLE1BQ3RDO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFDQSxTQUFLLHNCQUFzQixPQUFPLGFBQWEsS0FBSyxNQUFNLENBQUM7QUFDM0QsU0FBSyx3QkFBd0IsT0FBTyxlQUFlLEtBQUssTUFBTSxDQUFDO0FBRS9ELFVBQU0sT0FBTyxJQUFJLHFDQUFlLFdBQVc7QUFDM0MsV0FBTyxzQkFBc0IsS0FBSyxhQUFhLEtBQUssSUFBSSxDQUFDO0FBQ3pELFdBQU8sd0JBQXdCLEtBQUssZUFBZSxLQUFLLElBQUksQ0FBQztBQUU3RCxVQUFNLFVBQVUsUUFBUSxPQUFPO0FBQy9CLFVBQU0sU0FBUyxRQUFRLE9BQU87QUFDOUIsVUFBTSxVQUFVLFFBQVEsT0FBTztBQUMvQixZQUFRLE9BQU8sU0FBUyxVQUFVLEVBQUU7QUFDcEMsWUFBUSxPQUFPLFFBQVEsVUFBVSxFQUFFO0FBQ25DLFlBQVEsT0FBTyxTQUFTLFVBQVUsRUFBRTtBQUVwQyxxQ0FBTyxLQUFLLE9BQU8sRUFBRSxhQUFhLENBQUM7QUFDbkMscUNBQU8sS0FBSyxRQUFRLENBQUMsR0FBRyxTQUFTLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUFBLEVBQ2pELENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJnNS1maWx0ZXItcHJlZGljYXRlLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHNSDigJQgRmlsdGVyIHByZWRpY2F0ZSAoY29uZCBlcXVpdmFsZW50KVxuICpcbiAqIFBhcmFydWxlcyBvcmlnaW46IHRlc3RzL3Rlc3QyLm5pbSBcImNvbXBsZXggdHlwZXNcIiBzdG9wUGxheWVyIHJ1bGU6XG4gKiAgIHJ1bGUgc3RvcFBsYXllcihGYWN0KTpcbiAqICAgICB3aGF0OlxuICogICAgICAgKEdsb2JhbCwgV2luZG93V2lkdGgsIHdpbmRvd1dpZHRoKVxuICogICAgICAgKFBsYXllciwgWCwgeClcbiAqICAgICBjb25kOlxuICogICAgICAgeCA+PSBmbG9hdCh3aW5kb3dXaWR0aClcbiAqICAgICAgIHdpbmRvd1dpZHRoID4gMFxuICogICAgIHRoZW46XG4gKiAgICAgICBzZXNzaW9uLmluc2VydChQbGF5ZXIsIFgsIDAuMClcbiAqXG4gKiBBbHNvOiB0ZXN0cy90ZXN0MS5uaW0gXCJjb21wbGV4IGNvbmRpdGlvbnNcIjpcbiAqICAgY29uZDpcbiAqICAgICB6ICE9IFphY2hcbiAqXG4gKiBPdXIgZXF1aXZhbGVudDogRmlsdGVyTm9kZSB3aXRoIHJlZ2lzdGVyZWQgcHJlZGljYXRlcyBmaWx0ZXJzIHRva2Vuc1xuICogdGhhdCBkb24ndCBzYXRpc2Z5IHRoZSBwcmVkaWNhdGUuIE9ubHkgZW50aXRpZXMgd2hvc2UgaHAgPiA1MCBtYXRjaC5cbiAqXG4gKiBOZXR3b3JrOlxuICogICByb290IOKGkiBqb2luKGFscGhhSGVhbHRoKSDihpIgRmlsdGVyTm9kZShcImdyZWF0ZXJUaGFuXCIsIFs1MF0pIOKGkiBwcm9kXG4gKi9cbmltcG9ydCB7IGRlc2NyaWJlLCBpdCwgZXhwZWN0IH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gXCIuLi8uLi9zcmMvc2Vzc2lvbi5qc1wiO1xuaW1wb3J0IHsgQmV0YU1lbW9yeSB9IGZyb20gXCIuLi8uLi9zcmMvYmV0YS5qc1wiO1xuaW1wb3J0IHsgVG9rZW4gfSBmcm9tIFwiLi4vLi4vc3JjL2JldGEuanNcIjtcbmltcG9ydCB7IEpvaW5Ob2RlIH0gZnJvbSBcIi4uLy4uL3NyYy9qb2luLmpzXCI7XG5pbXBvcnQgeyBGaWx0ZXJOb2RlIH0gZnJvbSBcIi4uLy4uL3NyYy9jb25kaXRpb24uanNcIjtcbmltcG9ydCB7IFByb2R1Y3Rpb25Ob2RlIH0gZnJvbSBcIi4uLy4uL3NyYy9xdWVyeS5qc1wiO1xuaW1wb3J0IHsgUHJlZGljYXRlUmVnaXN0cnksIFVua25vd25QcmVkaWNhdGVFcnJvciB9IGZyb20gXCIuLi8uLi9zcmMvcmVnaXN0cnkuanNcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiLi4vLi4vc3JjL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBUb2tlbkZhY3QgfSBmcm9tIFwiLi4vLi4vc3JjL2JldGEuanNcIjtcblxuY29uc3QgUk9PVF9GQUNUOiBUb2tlbkZhY3QgPSB7IGlkOiAwIGFzIEVudGl0eUlkLCBhdHRyOiBcIl9fcm9vdFwiLCB2YWx1ZTogbnVsbCB9O1xuXG5mdW5jdGlvbiBidWlsZEZpbHRlcmVkSGVhbHRoTmV0d29yayh0aHJlc2hvbGQ6IG51bWJlcikge1xuICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG4gIGNvbnN0IGFscGhhID0gc2Vzc2lvbi5fZ2V0QWxwaGEoKTtcblxuICBjb25zdCByb290TWVtID0gbmV3IEJldGFNZW1vcnkoKTtcbiAgcm9vdE1lbS5sZWZ0QWN0aXZhdGUobmV3IFRva2VuKG51bGwsIFJPT1RfRkFDVCwge30pKTtcblxuICBjb25zdCBhbHBoYUhlYWx0aCA9IGFscGhhLmJ1aWxkTm9kZSh7IGlkOiBudWxsLCBhdHRyOiBcIkhlYWx0aFwiIH0pO1xuICBjb25zdCBqb2luID0gbmV3IEpvaW5Ob2RlKHJvb3RNZW0sIGFscGhhSGVhbHRoLm1lbW9yeSwgW10sIFwiaHBcIiwgXCJlaWRcIik7XG4gIGFscGhhSGVhbHRoLm9uQWN0aXZhdGUoKGlkLCBhdHRyLCB2YWx1ZSkgPT4gam9pbi5yaWdodEFjdGl2YXRlKGlkLCBhdHRyLCB2YWx1ZSkpO1xuICBhbHBoYUhlYWx0aC5vbkRlYWN0aXZhdGUoKGlkLCBhdHRyLCB2YWx1ZSkgPT4gam9pbi5yaWdodERlYWN0aXZhdGUoaWQsIGF0dHIsIHZhbHVlKSk7XG5cbiAgLy8gUHJlZGljYXRlUmVnaXN0cnkgd2l0aCBhIFwiZ3JlYXRlclRoYW5cIiBwcmVkaWNhdGVcbiAgY29uc3QgcHJlZFJlZyA9IG5ldyBQcmVkaWNhdGVSZWdpc3RyeSgpO1xuICBwcmVkUmVnLnJlZ2lzdGVyKFwiZ3JlYXRlclRoYW5cIiwgKG1hdGNoLCBhcmdzKSA9PiB7XG4gICAgY29uc3QgaHAgPSBtYXRjaFtcImhwXCJdIGFzIG51bWJlcjtcbiAgICBjb25zdCBsaW1pdCA9IGFyZ3NbMF0gYXMgbnVtYmVyO1xuICAgIHJldHVybiBocCA+IGxpbWl0O1xuICB9KTtcblxuICAvLyBGaWx0ZXJOb2RlIHNpdHMgYmV0d2VlbiBqb2luIGFuZCBwcm9kXG4gIGNvbnN0IGZpbHRlciA9IG5ldyBGaWx0ZXJOb2RlKFxuICAgIFt7IHByZWRpY2F0ZTogXCJncmVhdGVyVGhhblwiLCBhcmdzOiBbdGhyZXNob2xkXSB9XSxcbiAgICBwcmVkUmVnLFxuICApO1xuXG4gIC8vIFdpcmUgam9pbiDihpIgZmlsdGVyXG4gIGpvaW4uYWRkRG93bnN0cmVhbUFjdGl2YXRlKGZpbHRlci5sZWZ0QWN0aXZhdGUuYmluZChmaWx0ZXIpKTtcbiAgam9pbi5hZGREb3duc3RyZWFtRGVhY3RpdmF0ZShmaWx0ZXIubGVmdERlYWN0aXZhdGUuYmluZChmaWx0ZXIpKTtcblxuICBjb25zdCBwcm9kID0gbmV3IFByb2R1Y3Rpb25Ob2RlKFwiZmlsdGVyZWRIZWFsdGhSdWxlXCIpO1xuICBmaWx0ZXIuYWRkRG93bnN0cmVhbUFjdGl2YXRlKHByb2QubGVmdEFjdGl2YXRlLmJpbmQocHJvZCkpO1xuICBmaWx0ZXIuYWRkRG93bnN0cmVhbURlYWN0aXZhdGUocHJvZC5sZWZ0RGVhY3RpdmF0ZS5iaW5kKHByb2QpKTtcblxuICByZXR1cm4geyBzZXNzaW9uLCBwcm9kLCBwcmVkUmVnIH07XG59XG5cbmRlc2NyaWJlKFwiRzUg4oCUIGZpbHRlciBwcmVkaWNhdGUgKGNvbmQgZXF1aXZhbGVudClcIiwgKCkgPT4ge1xuICBpdChcIm9ubHkgdGhlIGVudGl0eSB3aXRoIGhwID4gNTAgYXBwZWFycyBpbiBtYXRjaGVzXCIsICgpID0+IHtcbiAgICBjb25zdCB7IHNlc3Npb24sIHByb2QgfSA9IGJ1aWxkRmlsdGVyZWRIZWFsdGhOZXR3b3JrKDUwKTtcblxuICAgIGNvbnN0IHN0cm9uZyA9IHNlc3Npb24ubmV4dElkKCk7XG4gICAgY29uc3Qgd2VhayA9IHNlc3Npb24ubmV4dElkKCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoc3Ryb25nLCBcIkhlYWx0aFwiLCAxMDApOyAvLyBwYXNzZXM6IDEwMCA+IDUwXG4gICAgc2Vzc2lvbi5pbnNlcnQod2VhaywgXCJIZWFsdGhcIiwgMTApOyAgIC8vIGZhaWxzOiAgMTAgPiA1MFxuXG4gICAgZXhwZWN0KHByb2QubWF0Y2hlcykudG9IYXZlTGVuZ3RoKDEpO1xuICAgIGV4cGVjdChwcm9kLm1hdGNoZXNbMF0/LmJpbmRpbmdzW1wiaHBcIl0pLnRvQmUoMTAwKTtcbiAgICBleHBlY3QocHJvZC5tYXRjaGVzWzBdPy5iaW5kaW5nc1tcImVpZFwiXSkudG9CZShzdHJvbmcpO1xuICB9KTtcblxuICBpdChcInRocmVzaG9sZD0wOiBhbGwgcG9zaXRpdmUgaGVhbHRoIHZhbHVlcyBwYXNzXCIsICgpID0+IHtcbiAgICBjb25zdCB7IHNlc3Npb24sIHByb2QgfSA9IGJ1aWxkRmlsdGVyZWRIZWFsdGhOZXR3b3JrKDApO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgIGNvbnN0IGUgPSBzZXNzaW9uLm5leHRJZCgpO1xuICAgICAgc2Vzc2lvbi5pbnNlcnQoZSwgXCJIZWFsdGhcIiwgaSArIDEpO1xuICAgIH1cblxuICAgIGV4cGVjdChwcm9kLm1hdGNoZXMpLnRvSGF2ZUxlbmd0aCgzKTtcbiAgfSk7XG5cbiAgaXQoXCJhbGwgYmVsb3cgdGhyZXNob2xkIOKGkiAwIG1hdGNoZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgc2Vzc2lvbiwgcHJvZCB9ID0gYnVpbGRGaWx0ZXJlZEhlYWx0aE5ldHdvcmsoMTAwMCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgY29uc3QgZSA9IHNlc3Npb24ubmV4dElkKCk7XG4gICAgICBzZXNzaW9uLmluc2VydChlLCBcIkhlYWx0aFwiLCBpICsgMSk7XG4gICAgfVxuXG4gICAgZXhwZWN0KHByb2QubWF0Y2hlcykudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcblxuICBpdChcInJldHJhY3RpbmcgYSBwYXNzaW5nIGVudGl0eSByZW1vdmVzIGl0cyBtYXRjaFwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzZXNzaW9uLCBwcm9kIH0gPSBidWlsZEZpbHRlcmVkSGVhbHRoTmV0d29yayg1MCk7XG5cbiAgICBjb25zdCBlMSA9IHNlc3Npb24ubmV4dElkKCk7XG4gICAgc2Vzc2lvbi5pbnNlcnQoZTEsIFwiSGVhbHRoXCIsIDEwMCk7XG4gICAgZXhwZWN0KHByb2QubWF0Y2hlcykudG9IYXZlTGVuZ3RoKDEpO1xuXG4gICAgc2Vzc2lvbi5yZXRyYWN0KGUxLCBcIkhlYWx0aFwiKTtcbiAgICBleHBlY3QocHJvZC5tYXRjaGVzKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xuXG4gIGl0KFwiRmlsdGVyTm9kZSByZWplY3RzIHVua25vd24gcHJlZGljYXRlcyBhdCBjb25zdHJ1Y3Rpb24gdGltZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgZW1wdHlSZWcgPSBuZXcgUHJlZGljYXRlUmVnaXN0cnkoKTtcbiAgICBleHBlY3QoXG4gICAgICAoKSA9PiBuZXcgRmlsdGVyTm9kZShbeyBwcmVkaWNhdGU6IFwibm9uZXhpc3RlbnRcIiwgYXJnczogW10gfV0sIGVtcHR5UmVnKSxcbiAgICApLnRvVGhyb3coVW5rbm93blByZWRpY2F0ZUVycm9yKTtcbiAgfSk7XG5cbiAgaXQoXCJjb25qdW5jdGlvbjogYm90aCBwcmVkaWNhdGVzIG11c3QgcGFzc1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKHsgYXV0b0ZpcmU6IGZhbHNlIH0pO1xuICAgIGNvbnN0IGFscGhhID0gc2Vzc2lvbi5fZ2V0QWxwaGEoKTtcblxuICAgIGNvbnN0IHJvb3RNZW0gPSBuZXcgQmV0YU1lbW9yeSgpO1xuICAgIHJvb3RNZW0ubGVmdEFjdGl2YXRlKG5ldyBUb2tlbihudWxsLCBST09UX0ZBQ1QsIHt9KSk7XG5cbiAgICBjb25zdCBhbHBoYUhlYWx0aCA9IGFscGhhLmJ1aWxkTm9kZSh7IGlkOiBudWxsLCBhdHRyOiBcIkhlYWx0aFwiIH0pO1xuICAgIGNvbnN0IGpvaW4gPSBuZXcgSm9pbk5vZGUocm9vdE1lbSwgYWxwaGFIZWFsdGgubWVtb3J5LCBbXSwgXCJocFwiLCBcImVpZFwiKTtcbiAgICBhbHBoYUhlYWx0aC5vbkFjdGl2YXRlKChpZCwgYXR0ciwgdmFsdWUpID0+IGpvaW4ucmlnaHRBY3RpdmF0ZShpZCwgYXR0ciwgdmFsdWUpKTtcbiAgICBhbHBoYUhlYWx0aC5vbkRlYWN0aXZhdGUoKGlkLCBhdHRyLCB2YWx1ZSkgPT4gam9pbi5yaWdodERlYWN0aXZhdGUoaWQsIGF0dHIsIHZhbHVlKSk7XG5cbiAgICBjb25zdCBwcmVkUmVnID0gbmV3IFByZWRpY2F0ZVJlZ2lzdHJ5KCk7XG4gICAgcHJlZFJlZy5yZWdpc3RlcihcImdyZWF0ZXJUaGFuXCIsIChtYXRjaCwgYXJncykgPT4gKG1hdGNoW1wiaHBcIl0gYXMgbnVtYmVyKSA+IChhcmdzWzBdIGFzIG51bWJlcikpO1xuICAgIHByZWRSZWcucmVnaXN0ZXIoXCJsZXNzVGhhblwiLCAobWF0Y2gsIGFyZ3MpID0+IChtYXRjaFtcImhwXCJdIGFzIG51bWJlcikgPCAoYXJnc1swXSBhcyBudW1iZXIpKTtcblxuICAgIC8vIGhwID4gMjAgQU5EIGhwIDwgODBcbiAgICBjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyTm9kZShcbiAgICAgIFtcbiAgICAgICAgeyBwcmVkaWNhdGU6IFwiZ3JlYXRlclRoYW5cIiwgYXJnczogWzIwXSB9LFxuICAgICAgICB7IHByZWRpY2F0ZTogXCJsZXNzVGhhblwiLCBhcmdzOiBbODBdIH0sXG4gICAgICBdLFxuICAgICAgcHJlZFJlZyxcbiAgICApO1xuICAgIGpvaW4uYWRkRG93bnN0cmVhbUFjdGl2YXRlKGZpbHRlci5sZWZ0QWN0aXZhdGUuYmluZChmaWx0ZXIpKTtcbiAgICBqb2luLmFkZERvd25zdHJlYW1EZWFjdGl2YXRlKGZpbHRlci5sZWZ0RGVhY3RpdmF0ZS5iaW5kKGZpbHRlcikpO1xuXG4gICAgY29uc3QgcHJvZCA9IG5ldyBQcm9kdWN0aW9uTm9kZShcInJhbmdlUnVsZVwiKTtcbiAgICBmaWx0ZXIuYWRkRG93bnN0cmVhbUFjdGl2YXRlKHByb2QubGVmdEFjdGl2YXRlLmJpbmQocHJvZCkpO1xuICAgIGZpbHRlci5hZGREb3duc3RyZWFtRGVhY3RpdmF0ZShwcm9kLmxlZnREZWFjdGl2YXRlLmJpbmQocHJvZCkpO1xuXG4gICAgY29uc3QgaW5SYW5nZSA9IHNlc3Npb24ubmV4dElkKCk7XG4gICAgY29uc3QgdG9vTG93ID0gc2Vzc2lvbi5uZXh0SWQoKTtcbiAgICBjb25zdCB0b29IaWdoID0gc2Vzc2lvbi5uZXh0SWQoKTtcbiAgICBzZXNzaW9uLmluc2VydChpblJhbmdlLCBcIkhlYWx0aFwiLCA1MCk7ICAvLyBwYXNzZXMgYm90aFxuICAgIHNlc3Npb24uaW5zZXJ0KHRvb0xvdywgXCJIZWFsdGhcIiwgMTApOyAgIC8vIGZhaWxzIGdyZWF0ZXJUaGFuKDIwKVxuICAgIHNlc3Npb24uaW5zZXJ0KHRvb0hpZ2gsIFwiSGVhbHRoXCIsIDkwKTsgIC8vIGZhaWxzIGxlc3NUaGFuKDgwKVxuXG4gICAgZXhwZWN0KHByb2QubWF0Y2hlcykudG9IYXZlTGVuZ3RoKDEpO1xuICAgIGV4cGVjdChwcm9kLm1hdGNoZXNbMF0/LmJpbmRpbmdzW1wiaHBcIl0pLnRvQmUoNTApO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvdGVzdHMvZ29sZGVuL2c1LWZpbHRlci1wcmVkaWNhdGUudGVzdC50cyJ9 diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/eda9ea166e5ef80b6d3b9865d141db0cbcfbb47f b/IJGn1F-WxLUCbfU1lu8pU/ssr/eda9ea166e5ef80b6d3b9865d141db0cbcfbb47f deleted file mode 100644 index c48e1f5..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/eda9ea166e5ef80b6d3b9865d141db0cbcfbb47f +++ /dev/null @@ -1,180 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("vitest", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/negation.ts", {"importedNames":["NegationNode","UnsafeNegationError"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/alpha.ts", {"importedNames":["AlphaMemory"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/beta.ts", {"importedNames":["Token","BetaMemory"]}); -const mkId = (n) => n; -const mkFact = (id, attr, value) => ({ - id: mkId(id), - attr, - value -}); -(0,__vite_ssr_import_0__.describe)("NegationNode", () => { - (0,__vite_ssr_import_0__.it)("passes token when negated pattern has NO matching facts", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const negation = new __vite_ssr_import_1__.NegationNode(rightMem, []); - negation.addDownstreamActivate((t) => outMem.leftActivate(t)); - const token = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 1), { x: 1 }); - negation.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(outMem.tokens[0]).toBe(token); - }); - (0,__vite_ssr_import_0__.it)("blocks token when negated pattern HAS a matching fact", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const negation = new __vite_ssr_import_1__.NegationNode(rightMem, []); - negation.addDownstreamActivate((t) => outMem.leftActivate(t)); - rightMem.addFact(mkId(99), "Dead", true); - const token = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 1), { x: 1 }); - negation.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("right-activate: blocks a previously-passing token", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const negation = new __vite_ssr_import_1__.NegationNode(rightMem, []); - negation.addDownstreamActivate((t) => outMem.leftActivate(t)); - negation.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - const token = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 1), { x: 1 }); - negation.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - negation.rightActivate(mkId(99), "Dead", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("right-deactivate: unblocks a previously-blocked token", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const negation = new __vite_ssr_import_1__.NegationNode(rightMem, []); - negation.addDownstreamActivate((t) => outMem.leftActivate(t)); - negation.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - rightMem.addFact(mkId(99), "Dead", true); - const token = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 1), { x: 1 }); - negation.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - negation.rightDeactivate(mkId(99), "Dead", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - }); - (0,__vite_ssr_import_0__.it)("multiple blocking facts: token stays blocked until ALL are retracted", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const negation = new __vite_ssr_import_1__.NegationNode(rightMem, []); - negation.addDownstreamActivate((t) => outMem.leftActivate(t)); - negation.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - rightMem.addFact(mkId(1), "Dead", true); - rightMem.addFact(mkId(2), "Dead", true); - const token = new __vite_ssr_import_3__.Token(null, mkFact(3, "X", 1), {}); - negation.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - negation.rightDeactivate(mkId(1), "Dead", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - negation.rightDeactivate(mkId(2), "Dead", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - }); - (0,__vite_ssr_import_0__.it)("left-deactivate: removes a passing token from downstream", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const negation = new __vite_ssr_import_1__.NegationNode(rightMem, []); - negation.addDownstreamActivate((t) => outMem.leftActivate(t)); - negation.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - const token = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 1), {}); - negation.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - negation.leftDeactivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("left-deactivate: does NOT emit downstream-deactivate when token was blocked", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const negation = new __vite_ssr_import_1__.NegationNode(rightMem, []); - let deactivateCalls = 0; - negation.addDownstreamActivate((t) => outMem.leftActivate(t)); - negation.addDownstreamDeactivate(() => { - deactivateCalls++; - }); - rightMem.addFact(mkId(99), "Dead", true); - const token = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 1), {}); - negation.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - negation.leftDeactivate(token); - (0,__vite_ssr_import_0__.expect)(deactivateCalls).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("idEquality join test: only blocking facts matching token binding count", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const tests = [{ type: "idEquality", leftVar: "target" }]; - const negation = new __vite_ssr_import_1__.NegationNode(rightMem, tests); - negation.addDownstreamActivate((t) => outMem.leftActivate(t)); - negation.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - rightMem.addFact(mkId(42), "Dead", true); - const token = new __vite_ssr_import_3__.Token(null, mkFact(7, "X", 1), { target: mkId(7) }); - negation.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - negation.rightActivate(mkId(7), "Dead", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - negation.rightDeactivate(mkId(42), "Dead", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - negation.rightDeactivate(mkId(7), "Dead", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - }); - (0,__vite_ssr_import_0__.it)("valueEquality join test: right value must equal bound variable", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const tests = [{ type: "valueEquality", leftVar: "needle" }]; - const negation = new __vite_ssr_import_1__.NegationNode(rightMem, tests); - negation.addDownstreamActivate((t) => outMem.leftActivate(t)); - negation.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - rightMem.addFact(mkId(1), "Tag", "red"); - const tokenBlue = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 1), { needle: "blue" }); - negation.leftActivate(tokenBlue); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - const tokenRed = new __vite_ssr_import_3__.Token(null, mkFact(2, "X", 1), { needle: "red" }); - negation.leftActivate(tokenRed); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - }); - (0,__vite_ssr_import_0__.it)("idempotent right-deactivate on unknown fact does not underflow", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const negation = new __vite_ssr_import_1__.NegationNode(rightMem, []); - negation.addDownstreamActivate((t) => outMem.leftActivate(t)); - negation.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - const token = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 1), {}); - negation.leftActivate(token); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - negation.rightDeactivate( - mkId(99), - "Dead", - true - ); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - negation.rightActivate(mkId(99), "Dead", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("multiple left tokens: each tracked independently", () => { - const rightMem = new __vite_ssr_import_2__.AlphaMemory(); - const outMem = new __vite_ssr_import_3__.BetaMemory(); - const tests = [{ type: "idEquality", leftVar: "tid" }]; - const negation = new __vite_ssr_import_1__.NegationNode(rightMem, tests); - negation.addDownstreamActivate((t) => outMem.leftActivate(t)); - negation.addDownstreamDeactivate((t) => outMem.leftDeactivate(t)); - const t1 = new __vite_ssr_import_3__.Token(null, mkFact(1, "X", 1), { tid: mkId(1) }); - const t2 = new __vite_ssr_import_3__.Token(null, mkFact(2, "X", 1), { tid: mkId(2) }); - negation.leftActivate(t1); - negation.leftActivate(t2); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(2); - negation.rightActivate(mkId(1), "Dead", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(outMem.tokens[0]).toBe(t2); - negation.rightDeactivate(mkId(1), "Dead", true); - (0,__vite_ssr_import_0__.expect)(outMem.tokens).toHaveLength(2); - }); - (0,__vite_ssr_import_0__.it)("UnsafeNegationError class exists and carries the unbound var name", () => { - const err = new __vite_ssr_import_1__.UnsafeNegationError("eid"); - (0,__vite_ssr_import_0__.expect)(err).toBeInstanceOf(Error); - (0,__vite_ssr_import_0__.expect)(err).toBeInstanceOf((0,__vite_ssr_import_1__.UnsafeNegationError)); - (0,__vite_ssr_import_0__.expect)(err.name).toBe("UnsafeNegationError"); - (0,__vite_ssr_import_0__.expect)(err.message).toContain("eid"); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUMsTUFBTSxPQUFPLGVBQWUsQ0FBQyxDQUFDO0FBRWhFLFVBQU0sS0FBSyxJQUFJLDRCQUFNLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQzlELFVBQU0sS0FBSyxJQUFJLDRCQUFNLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQzlELGFBQVMsYUFBYSxFQUFFO0FBQ3hCLGFBQVMsYUFBYSxFQUFFO0FBQ3hCLHFDQUFPLE9BQU8sTUFBTSxFQUFFLGFBQWEsQ0FBQztBQUdwQyxhQUFTLGNBQWMsS0FBSyxDQUFDLEdBQUcsUUFBbUIsSUFBaUI7QUFDcEUscUNBQU8sT0FBTyxNQUFNLEVBQUUsYUFBYSxDQUFDO0FBQ3BDLHFDQUFPLE9BQU8sT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUU7QUFHaEMsYUFBUyxnQkFBZ0IsS0FBSyxDQUFDLEdBQUcsUUFBbUIsSUFBaUI7QUFDdEUscUNBQU8sT0FBTyxNQUFNLEVBQUUsYUFBYSxDQUFDO0FBQUEsRUFDdEMsQ0FBQztBQUVELCtCQUFHLHFFQUFxRSxNQUFNO0FBQzVFLFVBQU0sTUFBTSxJQUFJLDBDQUFvQixLQUFLO0FBQ3pDLHFDQUFPLEdBQUcsRUFBRSxlQUFlLEtBQUs7QUFDaEMscUNBQU8sR0FBRyxFQUFFLGtCQUFlLDBDQUFtQjtBQUM5QyxxQ0FBTyxJQUFJLElBQUksRUFBRSxLQUFLLHFCQUFxQjtBQUMzQyxxQ0FBTyxJQUFJLE9BQU8sRUFBRSxVQUFVLEtBQUs7QUFBQSxFQUNyQyxDQUFDO0FBQ0gsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsibmVnYXRpb24udGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgaXQsIGV4cGVjdCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB7IE5lZ2F0aW9uTm9kZSwgVW5zYWZlTmVnYXRpb25FcnJvciB9IGZyb20gXCIuL25lZ2F0aW9uLmpzXCI7XG5pbXBvcnQgeyBBbHBoYU1lbW9yeSB9IGZyb20gXCIuL2FscGhhLmpzXCI7XG5pbXBvcnQgeyBUb2tlbiwgQmV0YU1lbW9yeSB9IGZyb20gXCIuL2JldGEuanNcIjtcbmltcG9ydCB0eXBlIHsgSm9pblRlc3QgfSBmcm9tIFwiLi9qb2luLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eUlkIH0gZnJvbSBcIi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEF0dHJLZXksIEZhY3RWYWx1ZSB9IGZyb20gXCIuL3dtLmpzXCI7XG5cbmNvbnN0IG1rSWQgPSAobjogbnVtYmVyKSA9PiBuIGFzIEVudGl0eUlkO1xuY29uc3QgbWtGYWN0ID0gKGlkOiBudW1iZXIsIGF0dHI6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+ICh7XG4gIGlkOiBta0lkKGlkKSxcbiAgYXR0cjogYXR0ciBhcyBBdHRyS2V5LFxuICB2YWx1ZTogdmFsdWUgYXMgRmFjdFZhbHVlLFxufSk7XG5cbmRlc2NyaWJlKFwiTmVnYXRpb25Ob2RlXCIsICgpID0+IHtcbiAgaXQoXCJwYXNzZXMgdG9rZW4gd2hlbiBuZWdhdGVkIHBhdHRlcm4gaGFzIE5PIG1hdGNoaW5nIGZhY3RzXCIsICgpID0+IHtcbiAgICBjb25zdCByaWdodE1lbSA9IG5ldyBBbHBoYU1lbW9yeSgpO1xuICAgIGNvbnN0IG91dE1lbSA9IG5ldyBCZXRhTWVtb3J5KCk7XG4gICAgY29uc3QgbmVnYXRpb24gPSBuZXcgTmVnYXRpb25Ob2RlKHJpZ2h0TWVtLCBbXSk7XG4gICAgbmVnYXRpb24uYWRkRG93bnN0cmVhbUFjdGl2YXRlKCh0KSA9PiBvdXRNZW0ubGVmdEFjdGl2YXRlKHQpKTtcblxuICAgIGNvbnN0IHRva2VuID0gbmV3IFRva2VuKG51bGwsIG1rRmFjdCgxLCBcIlhcIiwgMSksIHsgeDogMSB9KTtcbiAgICBuZWdhdGlvbi5sZWZ0QWN0aXZhdGUodG9rZW4pO1xuXG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2Vuc1swXSkudG9CZSh0b2tlbik7XG4gIH0pO1xuXG4gIGl0KFwiYmxvY2tzIHRva2VuIHdoZW4gbmVnYXRlZCBwYXR0ZXJuIEhBUyBhIG1hdGNoaW5nIGZhY3RcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJpZ2h0TWVtID0gbmV3IEFscGhhTWVtb3J5KCk7XG4gICAgY29uc3Qgb3V0TWVtID0gbmV3IEJldGFNZW1vcnkoKTtcbiAgICBjb25zdCBuZWdhdGlvbiA9IG5ldyBOZWdhdGlvbk5vZGUocmlnaHRNZW0sIFtdKTtcbiAgICBuZWdhdGlvbi5hZGREb3duc3RyZWFtQWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0QWN0aXZhdGUodCkpO1xuXG4gICAgcmlnaHRNZW0uYWRkRmFjdChta0lkKDk5KSwgXCJEZWFkXCIgYXMgQXR0cktleSwgdHJ1ZSBhcyBGYWN0VmFsdWUpO1xuXG4gICAgY29uc3QgdG9rZW4gPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDEsIFwiWFwiLCAxKSwgeyB4OiAxIH0pO1xuICAgIG5lZ2F0aW9uLmxlZnRBY3RpdmF0ZSh0b2tlbik7XG5cbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcblxuICBpdChcInJpZ2h0LWFjdGl2YXRlOiBibG9ja3MgYSBwcmV2aW91c2x5LXBhc3NpbmcgdG9rZW5cIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJpZ2h0TWVtID0gbmV3IEFscGhhTWVtb3J5KCk7XG4gICAgY29uc3Qgb3V0TWVtID0gbmV3IEJldGFNZW1vcnkoKTtcbiAgICBjb25zdCBuZWdhdGlvbiA9IG5ldyBOZWdhdGlvbk5vZGUocmlnaHRNZW0sIFtdKTtcbiAgICBuZWdhdGlvbi5hZGREb3duc3RyZWFtQWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0QWN0aXZhdGUodCkpO1xuICAgIG5lZ2F0aW9uLmFkZERvd25zdHJlYW1EZWFjdGl2YXRlKCh0KSA9PiBvdXRNZW0ubGVmdERlYWN0aXZhdGUodCkpO1xuXG4gICAgY29uc3QgdG9rZW4gPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDEsIFwiWFwiLCAxKSwgeyB4OiAxIH0pO1xuICAgIG5lZ2F0aW9uLmxlZnRBY3RpdmF0ZSh0b2tlbik7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgxKTtcblxuICAgIG5lZ2F0aW9uLnJpZ2h0QWN0aXZhdGUobWtJZCg5OSksIFwiRGVhZFwiIGFzIEF0dHJLZXksIHRydWUgYXMgRmFjdFZhbHVlKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcblxuICBpdChcInJpZ2h0LWRlYWN0aXZhdGU6IHVuYmxvY2tzIGEgcHJldmlvdXNseS1ibG9ja2VkIHRva2VuXCIsICgpID0+IHtcbiAgICBjb25zdCByaWdodE1lbSA9IG5ldyBBbHBoYU1lbW9yeSgpO1xuICAgIGNvbnN0IG91dE1lbSA9IG5ldyBCZXRhTWVtb3J5KCk7XG4gICAgY29uc3QgbmVnYXRpb24gPSBuZXcgTmVnYXRpb25Ob2RlKHJpZ2h0TWVtLCBbXSk7XG4gICAgbmVnYXRpb24uYWRkRG93bnN0cmVhbUFjdGl2YXRlKCh0KSA9PiBvdXRNZW0ubGVmdEFjdGl2YXRlKHQpKTtcbiAgICBuZWdhdGlvbi5hZGREb3duc3RyZWFtRGVhY3RpdmF0ZSgodCkgPT4gb3V0TWVtLmxlZnREZWFjdGl2YXRlKHQpKTtcblxuICAgIHJpZ2h0TWVtLmFkZEZhY3QobWtJZCg5OSksIFwiRGVhZFwiIGFzIEF0dHJLZXksIHRydWUgYXMgRmFjdFZhbHVlKTtcbiAgICBjb25zdCB0b2tlbiA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoMSwgXCJYXCIsIDEpLCB7IHg6IDEgfSk7XG4gICAgbmVnYXRpb24ubGVmdEFjdGl2YXRlKHRva2VuKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDApO1xuXG4gICAgbmVnYXRpb24ucmlnaHREZWFjdGl2YXRlKG1rSWQoOTkpLCBcIkRlYWRcIiBhcyBBdHRyS2V5LCB0cnVlIGFzIEZhY3RWYWx1ZSk7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgfSk7XG5cbiAgaXQoXCJtdWx0aXBsZSBibG9ja2luZyBmYWN0czogdG9rZW4gc3RheXMgYmxvY2tlZCB1bnRpbCBBTEwgYXJlIHJldHJhY3RlZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmlnaHRNZW0gPSBuZXcgQWxwaGFNZW1vcnkoKTtcbiAgICBjb25zdCBvdXRNZW0gPSBuZXcgQmV0YU1lbW9yeSgpO1xuICAgIGNvbnN0IG5lZ2F0aW9uID0gbmV3IE5lZ2F0aW9uTm9kZShyaWdodE1lbSwgW10pO1xuICAgIG5lZ2F0aW9uLmFkZERvd25zdHJlYW1BY3RpdmF0ZSgodCkgPT4gb3V0TWVtLmxlZnRBY3RpdmF0ZSh0KSk7XG4gICAgbmVnYXRpb24uYWRkRG93bnN0cmVhbURlYWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0RGVhY3RpdmF0ZSh0KSk7XG5cbiAgICByaWdodE1lbS5hZGRGYWN0KG1rSWQoMSksIFwiRGVhZFwiIGFzIEF0dHJLZXksIHRydWUgYXMgRmFjdFZhbHVlKTtcbiAgICByaWdodE1lbS5hZGRGYWN0KG1rSWQoMiksIFwiRGVhZFwiIGFzIEF0dHJLZXksIHRydWUgYXMgRmFjdFZhbHVlKTtcblxuICAgIGNvbnN0IHRva2VuID0gbmV3IFRva2VuKG51bGwsIG1rRmFjdCgzLCBcIlhcIiwgMSksIHt9KTtcbiAgICBuZWdhdGlvbi5sZWZ0QWN0aXZhdGUodG9rZW4pO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMCk7XG5cbiAgICBuZWdhdGlvbi5yaWdodERlYWN0aXZhdGUobWtJZCgxKSwgXCJEZWFkXCIgYXMgQXR0cktleSwgdHJ1ZSBhcyBGYWN0VmFsdWUpO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMCk7XG5cbiAgICBuZWdhdGlvbi5yaWdodERlYWN0aXZhdGUobWtJZCgyKSwgXCJEZWFkXCIgYXMgQXR0cktleSwgdHJ1ZSBhcyBGYWN0VmFsdWUpO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMSk7XG4gIH0pO1xuXG4gIGl0KFwibGVmdC1kZWFjdGl2YXRlOiByZW1vdmVzIGEgcGFzc2luZyB0b2tlbiBmcm9tIGRvd25zdHJlYW1cIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJpZ2h0TWVtID0gbmV3IEFscGhhTWVtb3J5KCk7XG4gICAgY29uc3Qgb3V0TWVtID0gbmV3IEJldGFNZW1vcnkoKTtcbiAgICBjb25zdCBuZWdhdGlvbiA9IG5ldyBOZWdhdGlvbk5vZGUocmlnaHRNZW0sIFtdKTtcbiAgICBuZWdhdGlvbi5hZGREb3duc3RyZWFtQWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0QWN0aXZhdGUodCkpO1xuICAgIG5lZ2F0aW9uLmFkZERvd25zdHJlYW1EZWFjdGl2YXRlKCh0KSA9PiBvdXRNZW0ubGVmdERlYWN0aXZhdGUodCkpO1xuXG4gICAgY29uc3QgdG9rZW4gPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDEsIFwiWFwiLCAxKSwge30pO1xuICAgIG5lZ2F0aW9uLmxlZnRBY3RpdmF0ZSh0b2tlbik7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgxKTtcblxuICAgIG5lZ2F0aW9uLmxlZnREZWFjdGl2YXRlKHRva2VuKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcblxuICBpdChcImxlZnQtZGVhY3RpdmF0ZTogZG9lcyBOT1QgZW1pdCBkb3duc3RyZWFtLWRlYWN0aXZhdGUgd2hlbiB0b2tlbiB3YXMgYmxvY2tlZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmlnaHRNZW0gPSBuZXcgQWxwaGFNZW1vcnkoKTtcbiAgICBjb25zdCBvdXRNZW0gPSBuZXcgQmV0YU1lbW9yeSgpO1xuICAgIGNvbnN0IG5lZ2F0aW9uID0gbmV3IE5lZ2F0aW9uTm9kZShyaWdodE1lbSwgW10pO1xuICAgIGxldCBkZWFjdGl2YXRlQ2FsbHMgPSAwO1xuICAgIG5lZ2F0aW9uLmFkZERvd25zdHJlYW1BY3RpdmF0ZSgodCkgPT4gb3V0TWVtLmxlZnRBY3RpdmF0ZSh0KSk7XG4gICAgbmVnYXRpb24uYWRkRG93bnN0cmVhbURlYWN0aXZhdGUoKCkgPT4ge1xuICAgICAgZGVhY3RpdmF0ZUNhbGxzKys7XG4gICAgfSk7XG5cbiAgICByaWdodE1lbS5hZGRGYWN0KG1rSWQoOTkpLCBcIkRlYWRcIiBhcyBBdHRyS2V5LCB0cnVlIGFzIEZhY3RWYWx1ZSk7XG4gICAgY29uc3QgdG9rZW4gPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDEsIFwiWFwiLCAxKSwge30pO1xuICAgIG5lZ2F0aW9uLmxlZnRBY3RpdmF0ZSh0b2tlbik7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgwKTtcblxuICAgIG5lZ2F0aW9uLmxlZnREZWFjdGl2YXRlKHRva2VuKTtcbiAgICBleHBlY3QoZGVhY3RpdmF0ZUNhbGxzKS50b0JlKDApO1xuICB9KTtcblxuICBpdChcImlkRXF1YWxpdHkgam9pbiB0ZXN0OiBvbmx5IGJsb2NraW5nIGZhY3RzIG1hdGNoaW5nIHRva2VuIGJpbmRpbmcgY291bnRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJpZ2h0TWVtID0gbmV3IEFscGhhTWVtb3J5KCk7XG4gICAgY29uc3Qgb3V0TWVtID0gbmV3IEJldGFNZW1vcnkoKTtcbiAgICBjb25zdCB0ZXN0czogSm9pblRlc3RbXSA9IFt7IHR5cGU6IFwiaWRFcXVhbGl0eVwiLCBsZWZ0VmFyOiBcInRhcmdldFwiIH1dO1xuICAgIGNvbnN0IG5lZ2F0aW9uID0gbmV3IE5lZ2F0aW9uTm9kZShyaWdodE1lbSwgdGVzdHMpO1xuICAgIG5lZ2F0aW9uLmFkZERvd25zdHJlYW1BY3RpdmF0ZSgodCkgPT4gb3V0TWVtLmxlZnRBY3RpdmF0ZSh0KSk7XG4gICAgbmVnYXRpb24uYWRkRG93bnN0cmVhbURlYWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0RGVhY3RpdmF0ZSh0KSk7XG5cbiAgICAvLyBGYWN0IG9uIGVudGl0eSA0MiBpcyB1bnJlbGF0ZWQgdG8gb3VyIHRva2VuJ3MgdGFyZ2V0PTdcbiAgICByaWdodE1lbS5hZGRGYWN0KG1rSWQoNDIpLCBcIkRlYWRcIiBhcyBBdHRyS2V5LCB0cnVlIGFzIEZhY3RWYWx1ZSk7XG5cbiAgICBjb25zdCB0b2tlbiA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoNywgXCJYXCIsIDEpLCB7IHRhcmdldDogbWtJZCg3KSB9KTtcbiAgICBuZWdhdGlvbi5sZWZ0QWN0aXZhdGUodG9rZW4pO1xuICAgIC8vIFVucmVsYXRlZCBmYWN0IGRvZXMgbm90IGJsb2NrXG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgxKTtcblxuICAgIC8vIE5vdyBhIG1hdGNoaW5nIGZhY3QgYXJyaXZlc1xuICAgIG5lZ2F0aW9uLnJpZ2h0QWN0aXZhdGUobWtJZCg3KSwgXCJEZWFkXCIgYXMgQXR0cktleSwgdHJ1ZSBhcyBGYWN0VmFsdWUpO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMCk7XG5cbiAgICAvLyBVbnJlbGF0ZWQgZmFjdCByZXRyYWN0ZWQg4oCUIHN0aWxsIGJsb2NrZWQgKGRpZG4ndCBjb3VudClcbiAgICBuZWdhdGlvbi5yaWdodERlYWN0aXZhdGUobWtJZCg0MiksIFwiRGVhZFwiIGFzIEF0dHJLZXksIHRydWUgYXMgRmFjdFZhbHVlKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDApO1xuXG4gICAgLy8gTWF0Y2hpbmcgZmFjdCByZXRyYWN0ZWQg4oCUIHVuYmxvY2tlZFxuICAgIG5lZ2F0aW9uLnJpZ2h0RGVhY3RpdmF0ZShta0lkKDcpLCBcIkRlYWRcIiBhcyBBdHRyS2V5LCB0cnVlIGFzIEZhY3RWYWx1ZSk7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgfSk7XG5cbiAgaXQoXCJ2YWx1ZUVxdWFsaXR5IGpvaW4gdGVzdDogcmlnaHQgdmFsdWUgbXVzdCBlcXVhbCBib3VuZCB2YXJpYWJsZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmlnaHRNZW0gPSBuZXcgQWxwaGFNZW1vcnkoKTtcbiAgICBjb25zdCBvdXRNZW0gPSBuZXcgQmV0YU1lbW9yeSgpO1xuICAgIGNvbnN0IHRlc3RzOiBKb2luVGVzdFtdID0gW3sgdHlwZTogXCJ2YWx1ZUVxdWFsaXR5XCIsIGxlZnRWYXI6IFwibmVlZGxlXCIgfV07XG4gICAgY29uc3QgbmVnYXRpb24gPSBuZXcgTmVnYXRpb25Ob2RlKHJpZ2h0TWVtLCB0ZXN0cyk7XG4gICAgbmVnYXRpb24uYWRkRG93bnN0cmVhbUFjdGl2YXRlKCh0KSA9PiBvdXRNZW0ubGVmdEFjdGl2YXRlKHQpKTtcbiAgICBuZWdhdGlvbi5hZGREb3duc3RyZWFtRGVhY3RpdmF0ZSgodCkgPT4gb3V0TWVtLmxlZnREZWFjdGl2YXRlKHQpKTtcblxuICAgIHJpZ2h0TWVtLmFkZEZhY3QobWtJZCgxKSwgXCJUYWdcIiBhcyBBdHRyS2V5LCBcInJlZFwiIGFzIEZhY3RWYWx1ZSk7XG5cbiAgICAvLyBUb2tlbiBsb29raW5nIGZvciBcImJsdWVcIiDigJQgbm90IGJsb2NrZWRcbiAgICBjb25zdCB0b2tlbkJsdWUgPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDEsIFwiWFwiLCAxKSwgeyBuZWVkbGU6IFwiYmx1ZVwiIH0pO1xuICAgIG5lZ2F0aW9uLmxlZnRBY3RpdmF0ZSh0b2tlbkJsdWUpO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMSk7XG5cbiAgICAvLyBUb2tlbiBsb29raW5nIGZvciBcInJlZFwiIOKAlCBibG9ja2VkIGJ5IGV4aXN0aW5nIGZhY3RcbiAgICBjb25zdCB0b2tlblJlZCA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoMiwgXCJYXCIsIDEpLCB7IG5lZWRsZTogXCJyZWRcIiB9KTtcbiAgICBuZWdhdGlvbi5sZWZ0QWN0aXZhdGUodG9rZW5SZWQpO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMSk7IC8vIG9ubHkgYmx1ZSBwYXNzZWRcbiAgfSk7XG5cbiAgaXQoXCJpZGVtcG90ZW50IHJpZ2h0LWRlYWN0aXZhdGUgb24gdW5rbm93biBmYWN0IGRvZXMgbm90IHVuZGVyZmxvd1wiLCAoKSA9PiB7XG4gICAgY29uc3QgcmlnaHRNZW0gPSBuZXcgQWxwaGFNZW1vcnkoKTtcbiAgICBjb25zdCBvdXRNZW0gPSBuZXcgQmV0YU1lbW9yeSgpO1xuICAgIGNvbnN0IG5lZ2F0aW9uID0gbmV3IE5lZ2F0aW9uTm9kZShyaWdodE1lbSwgW10pO1xuICAgIG5lZ2F0aW9uLmFkZERvd25zdHJlYW1BY3RpdmF0ZSgodCkgPT4gb3V0TWVtLmxlZnRBY3RpdmF0ZSh0KSk7XG4gICAgbmVnYXRpb24uYWRkRG93bnN0cmVhbURlYWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0RGVhY3RpdmF0ZSh0KSk7XG5cbiAgICBjb25zdCB0b2tlbiA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoMSwgXCJYXCIsIDEpLCB7fSk7XG4gICAgbmVnYXRpb24ubGVmdEFjdGl2YXRlKHRva2VuKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDEpO1xuXG4gICAgLy8gUmV0cmFjdCBhIGZhY3QgdGhhdCB3YXMgbmV2ZXIgYWRkZWQg4oCUIGNvdW50IHNob3VsZCBjbGFtcCBhdCAwXG4gICAgbmVnYXRpb24ucmlnaHREZWFjdGl2YXRlKFxuICAgICAgbWtJZCg5OSksXG4gICAgICBcIkRlYWRcIiBhcyBBdHRyS2V5LFxuICAgICAgdHJ1ZSBhcyBGYWN0VmFsdWUsXG4gICAgKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2VucykudG9IYXZlTGVuZ3RoKDEpO1xuXG4gICAgLy8gUmVhbCBibG9ja2luZyBhY3RpdmF0aW9uIHN0aWxsIHdvcmtzXG4gICAgbmVnYXRpb24ucmlnaHRBY3RpdmF0ZShta0lkKDk5KSwgXCJEZWFkXCIgYXMgQXR0cktleSwgdHJ1ZSBhcyBGYWN0VmFsdWUpO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xuXG4gIGl0KFwibXVsdGlwbGUgbGVmdCB0b2tlbnM6IGVhY2ggdHJhY2tlZCBpbmRlcGVuZGVudGx5XCIsICgpID0+IHtcbiAgICBjb25zdCByaWdodE1lbSA9IG5ldyBBbHBoYU1lbW9yeSgpO1xuICAgIGNvbnN0IG91dE1lbSA9IG5ldyBCZXRhTWVtb3J5KCk7XG4gICAgY29uc3QgdGVzdHM6IEpvaW5UZXN0W10gPSBbeyB0eXBlOiBcImlkRXF1YWxpdHlcIiwgbGVmdFZhcjogXCJ0aWRcIiB9XTtcbiAgICBjb25zdCBuZWdhdGlvbiA9IG5ldyBOZWdhdGlvbk5vZGUocmlnaHRNZW0sIHRlc3RzKTtcbiAgICBuZWdhdGlvbi5hZGREb3duc3RyZWFtQWN0aXZhdGUoKHQpID0+IG91dE1lbS5sZWZ0QWN0aXZhdGUodCkpO1xuICAgIG5lZ2F0aW9uLmFkZERvd25zdHJlYW1EZWFjdGl2YXRlKCh0KSA9PiBvdXRNZW0ubGVmdERlYWN0aXZhdGUodCkpO1xuXG4gICAgY29uc3QgdDEgPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDEsIFwiWFwiLCAxKSwgeyB0aWQ6IG1rSWQoMSkgfSk7XG4gICAgY29uc3QgdDIgPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDIsIFwiWFwiLCAxKSwgeyB0aWQ6IG1rSWQoMikgfSk7XG4gICAgbmVnYXRpb24ubGVmdEFjdGl2YXRlKHQxKTtcbiAgICBuZWdhdGlvbi5sZWZ0QWN0aXZhdGUodDIpO1xuICAgIGV4cGVjdChvdXRNZW0udG9rZW5zKS50b0hhdmVMZW5ndGgoMik7XG5cbiAgICAvLyBGYWN0IGJsb2NrcyBvbmx5IHQxXG4gICAgbmVnYXRpb24ucmlnaHRBY3RpdmF0ZShta0lkKDEpLCBcIkRlYWRcIiBhcyBBdHRyS2V5LCB0cnVlIGFzIEZhY3RWYWx1ZSk7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICBleHBlY3Qob3V0TWVtLnRva2Vuc1swXSkudG9CZSh0Mik7XG5cbiAgICAvLyBSZXRyYWN0IGl0IOKAlCB0MSB1bmJsb2Nrc1xuICAgIG5lZ2F0aW9uLnJpZ2h0RGVhY3RpdmF0ZShta0lkKDEpLCBcIkRlYWRcIiBhcyBBdHRyS2V5LCB0cnVlIGFzIEZhY3RWYWx1ZSk7XG4gICAgZXhwZWN0KG91dE1lbS50b2tlbnMpLnRvSGF2ZUxlbmd0aCgyKTtcbiAgfSk7XG5cbiAgaXQoXCJVbnNhZmVOZWdhdGlvbkVycm9yIGNsYXNzIGV4aXN0cyBhbmQgY2FycmllcyB0aGUgdW5ib3VuZCB2YXIgbmFtZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgZXJyID0gbmV3IFVuc2FmZU5lZ2F0aW9uRXJyb3IoXCJlaWRcIik7XG4gICAgZXhwZWN0KGVycikudG9CZUluc3RhbmNlT2YoRXJyb3IpO1xuICAgIGV4cGVjdChlcnIpLnRvQmVJbnN0YW5jZU9mKFVuc2FmZU5lZ2F0aW9uRXJyb3IpO1xuICAgIGV4cGVjdChlcnIubmFtZSkudG9CZShcIlVuc2FmZU5lZ2F0aW9uRXJyb3JcIik7XG4gICAgZXhwZWN0KGVyci5tZXNzYWdlKS50b0NvbnRhaW4oXCJlaWRcIik7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvcmV0ZS9zcmMvbmVnYXRpb24udGVzdC50cyJ9 diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/f3059f314999130dd3f743a6efff84c800195ebc b/IJGn1F-WxLUCbfU1lu8pU/ssr/f3059f314999130dd3f743a6efff84c800195ebc deleted file mode 100644 index ee409be..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/f3059f314999130dd3f743a6efff84c800195ebc +++ /dev/null @@ -1,58 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "NoMatchError", { enumerable: true, configurable: true, get(){ try { return NoMatchError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "ProductionNode", { enumerable: true, configurable: true, get(){ try { return ProductionNode } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "query", { enumerable: true, configurable: true, get(){ try { return query } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "queryAll", { enumerable: true, configurable: true, get(){ try { return queryAll } catch {} }}); -class NoMatchError extends Error { - constructor(ruleName) { - super(`NoMatchError: no match found for rule "${ruleName}"`); - this.name = "NoMatchError"; - } -}; -class ProductionNode { - constructor(ruleName) { - this.ruleName = ruleName; - } - /** - * Accumulated matches in insertion order. - * - * Declared `readonly` so external code cannot swap the array out from - * underneath the node, but its contents are mutated internally — tests - * and downstream code rely on positional access (`matches[0]`). - */ - matches = []; - /** - * Record a new full match. - * - * Called by the upstream node (a {@link BetaMemory} or a filter node) - * when a token representing a complete match enters the network. - */ - leftActivate(token) { - this.matches.push({ token, bindings: token.bindings }); - } - /** - * Withdraw a previously-recorded match. - * - * Removes the first match whose `token` is reference-equal to the - * supplied token. Unknown tokens are a no-op: upstream memories always - * broadcast deactivations to their subscribers, even when this particular - * node never accepted the token, so silently ignoring the absent case - * keeps wiring lenient (matching {@link BetaMemory.leftDeactivate}). - */ - leftDeactivate(token) { - const idx = this.matches.findIndex((m) => m.token === token); - if (idx !== -1) { - this.matches.splice(idx, 1); - } - } -}; -function query(prod) { - const first = prod.matches[0]; - if (!first) throw new NoMatchError(prod.ruleName); - return first.bindings; -}; -function queryAll(prod) { - return prod.matches.map((m) => m.bindings); -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7OztBQTJCTyxNQUFNLHFCQUFxQixNQUFNO0FBQUEsRUFDdEMsWUFBWSxVQUFrQjtBQUM1QixVQUFNLDBDQUEwQyxRQUFRLEdBQUc7QUFDM0QsU0FBSyxPQUFPO0FBQUEsRUFDZDtBQUNGO0FBaUNPLE1BQU0sZUFBZTtBQUFBLEVBVTFCLFlBQXFCLFVBQWtCO0FBQWxCO0FBQUEsRUFBbUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBRi9CLFVBQW1CLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVU3QixhQUFhLE9BQW9CO0FBQy9CLFNBQUssUUFBUSxLQUFLLEVBQUUsT0FBTyxVQUFVLE1BQU0sU0FBUyxDQUFDO0FBQUEsRUFDdkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVdBLGVBQWUsT0FBb0I7QUFDakMsVUFBTSxNQUFNLEtBQUssUUFBUSxVQUFVLENBQUMsTUFBTSxFQUFFLFVBQVUsS0FBSztBQUMzRCxRQUFJLFFBQVEsSUFBSTtBQUNkLFdBQUssUUFBUSxPQUFPLEtBQUssQ0FBQztBQUFBLElBQzVCO0FBQUEsRUFDRjtBQUNGO0FBVU8sU0FBUyxNQUFNLE1BQWdDO0FBQ3BELFFBQU0sUUFBUSxLQUFLLFFBQVEsQ0FBQztBQUM1QixNQUFJLENBQUMsTUFBTyxPQUFNLElBQUksYUFBYSxLQUFLLFFBQVE7QUFDaEQsU0FBTyxNQUFNO0FBQ2Y7QUFXTyxTQUFTLFNBQVMsTUFBa0M7QUFDekQsU0FBTyxLQUFLLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRO0FBQzNDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJxdWVyeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByb2R1Y3Rpb25Ob2RlIOKAlCB0ZXJtaW5hbCBSZXRlIG5vZGUgYWNjdW11bGF0aW5nIGZ1bGwgbWF0Y2hlcywgcGx1cyB0aGVcbiAqIGBxdWVyeSgpYCAvIGBxdWVyeUFsbCgpYCBwb2ludC1pbi10aW1lIHF1ZXJ5IEFQSS5cbiAqXG4gKiBQZXIgYHBhY2thZ2VzL3JldGUvU1BFQy5tZCDCp0l0ZXJhdGlvbiBPcmRlcmAsIGBxdWVyeUFsbCgpYCByZXR1cm5zIHJlc3VsdHNcbiAqIGluIGEgZGV0ZXJtaW5pc3RpYyBvcmRlci4gRGV0ZXJtaW5pc20gaXMgcHJvdmlkZWQgKnVwc3RyZWFtKiBieSB0aGUgYmV0YVxuICogbmV0d29yazogaW50ZXJuYWwgYmV0YS1tZW1vcnkgdG9rZW5zIGFyZSBzb3J0ZWQgYnkgdGhlaXIgY29uc3RpdHVlbnQgZmFjdFxuICogaWRzIGluIHRoZSB2YXJpYWJsZSBvcmRlciBkZWZpbmVkIGJ5IHRoZSBydWxlJ3MgY29uZGl0aW9uIGxpc3QgKFNQRUMgwqc4MSksXG4gKiBzbyBieSB0aGUgdGltZSB0b2tlbnMgcmVhY2ggYSBgUHJvZHVjdGlvbk5vZGVgIHZpYSBgbGVmdEFjdGl2YXRlYCB0aGV5XG4gKiBhbHJlYWR5IGFycml2ZSBpbiBjYW5vbmljYWwgb3JkZXIuIGBQcm9kdWN0aW9uTm9kZWAgdGhlcmVmb3JlIHN0b3JlcyB0aGVtXG4gKiBpbiBpbnNlcnRpb24gb3JkZXIgYW5kIGBxdWVyeUFsbCgpYCByZXR1cm5zIHRoYXQgc2FtZSBvcmRlciDigJQgcmUtc29ydGluZ1xuICogaGVyZSB3b3VsZCBkaXNjYXJkIGluZm9ybWF0aW9uIChydWxlLWRlY2xhcmVkIHZhcmlhYmxlIG9yZGVyKSB0aGF0IHRoZVxuICogYmV0YSBuZXR3b3JrIGhhcyBhbHJlYWR5IGJha2VkIGluLlxuICpcbiAqIFRoaXMgbW9kdWxlIGlzIGludGVudGlvbmFsbHkgbGltaXRlZCB0byAqcG9pbnQtaW4tdGltZSogcXVlcmllcy4gUmVhY3RpdmVcbiAqIHN1YnNjcmlwdGlvbnMgKG9ic2VydmVyLXN0eWxlIEFQSXMpIGFyZSBvdXQgb2Ygc2NvcGUgZm9yIFAxLjEwIHBlciB0aGVcbiAqIHBoYXNlIHBsYW47IGhpZ2hlci1sZXZlbCBmaWx0ZXJpbmcgKGUuZy4gZmlsdGVyIGJ5IGJpbmRpbmcpIGlzIGxheWVyZWQgb25cbiAqIHRvcCBpbiBhIGxhdGVyIHBoYXNlLlxuICovXG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdzLCBUb2tlbiB9IGZyb20gXCIuL2JldGEuanNcIjtcblxuLyoqXG4gKiBUaHJvd24gYnkge0BsaW5rIHF1ZXJ5fSB3aGVuIHRoZSB0YXJnZXQge0BsaW5rIFByb2R1Y3Rpb25Ob2RlfSBoYXMgbm9cbiAqIGN1cnJlbnRseS1hY3RpdmUgbWF0Y2hlcy4gVGhlIGVycm9yIGNhcnJpZXMgdGhlIHJ1bGUgbmFtZSBzbyB0aGF0IGNhbGxlcnNcbiAqIOKAlCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHRlc3QgZmFpbHVyZXMg4oCUIGNhbiBpZGVudGlmeSB3aGljaCBwcm9kdWN0aW9uXG4gKiByYW4gZHJ5IHdpdGhvdXQgbmVlZGluZyB0byBhdHRhY2ggYSBzdGFjayBmcmFtZSBvZiBjb250ZXh0LlxuICovXG5leHBvcnQgY2xhc3MgTm9NYXRjaEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihydWxlTmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoYE5vTWF0Y2hFcnJvcjogbm8gbWF0Y2ggZm91bmQgZm9yIHJ1bGUgXCIke3J1bGVOYW1lfVwiYCk7XG4gICAgdGhpcy5uYW1lID0gXCJOb01hdGNoRXJyb3JcIjtcbiAgfVxufVxuXG4vKipcbiAqIEEgZnVsbCBtYXRjaCBhY2N1bXVsYXRlZCBieSBhIHtAbGluayBQcm9kdWN0aW9uTm9kZX0uXG4gKlxuICogYHRva2VuYCBpcyB0aGUgdW5kZXJseWluZyBiZXRhLW5ldHdvcmsgdG9rZW4gKHVzZWZ1bCBmb3IgZGlhZ25vc3RpY3MgYW5kXG4gKiBmb3IgZnV0dXJlIHRydXRoLW1haW50ZW5hbmNlIHdpcmluZyB0aGF0IG5lZWRzIHRvIHdhbGsgdGhlIG1hdGNoIGNoYWluKVxuICogYW5kIGBiaW5kaW5nc2AgaXMgdGhlIGZsYXQgdmFyaWFibGUtYmluZGluZyBtYXAgdGhhdCB0aGUgcHVibGljIHF1ZXJ5IEFQSVxuICogcmV0dXJucy4gQm90aCBmaWVsZHMgYXJlIGByZWFkb25seWAgYXQgdGhlIHR5cGUgbGV2ZWwgdG8gZGlzY291cmFnZVxuICogZXh0ZXJuYWwgbXV0YXRpb24sIGJ1dCB0aGUgYXJyYXlzIHJldHVybmVkIGJ5IHtAbGluayBxdWVyeUFsbH0gYXJlIGZyZXNoXG4gKiBjb3BpZXMgc28gY2FsbGVycyBjYW4gbXV0YXRlIHRoZW0gd2l0aG91dCBkaXN0dXJiaW5nIHRoZSBub2RlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hdGNoIHtcbiAgcmVhZG9ubHkgdG9rZW46IFRva2VuO1xuICByZWFkb25seSBiaW5kaW5nczogQmluZGluZ3M7XG59XG5cbi8qKlxuICogVGVybWluYWwgbm9kZSBpbiB0aGUgUmV0ZSBuZXR3b3JrLlxuICpcbiAqIEEgYFByb2R1Y3Rpb25Ob2RlYCBzdWJzY3JpYmVzIChpbiBhIGZ1dHVyZSB3aXJpbmcgc3RlcCkgdG8gdGhlIGZpbmFsXG4gKiBiZXRhLW1lbW9yeSBvciBmaWx0ZXIgbm9kZSBvZiBhIHJ1bGUgYW5kIGFjY3VtdWxhdGVzIHRoZSBmdWxsIG1hdGNoZXNcbiAqIHByb2R1Y2VkIGJ5IHRoYXQgcnVsZS4gSXQgZXhwb3NlczpcbiAqXG4gKiAtIGBtYXRjaGVzYCDigJQgdGhlIGN1cnJlbnRseS1hY3RpdmUgbWF0Y2hlcywgaW4gaW5zZXJ0aW9uIG9yZGVyLiBUaGUgYXJyYXlcbiAqICAgcmVmZXJlbmNlIGl0c2VsZiBpcyBzdGFibGUgKGByZWFkb25seWAgYXQgdGhlIHR5cGUgbGV2ZWwpOyBpdHMgY29udGVudHNcbiAqICAgYXJlIG11dGF0ZWQgYnkge0BsaW5rIGxlZnRBY3RpdmF0ZX0gLyB7QGxpbmsgbGVmdERlYWN0aXZhdGV9LlxuICogLSBgcnVsZU5hbWVgIOKAlCBjYXJyaWVkIGZvciBkaWFnbm9zdGljIG1lc3NhZ2VzIChzZWUge0BsaW5rIE5vTWF0Y2hFcnJvcn0pLlxuICpcbiAqIFRoZSBgbGVmdEFjdGl2YXRlYCAvIGBsZWZ0RGVhY3RpdmF0ZWAgcGFpciBtaXJyb3JzIHtAbGluayBCZXRhTWVtb3J5fSdzXG4gKiBjb250cmFjdCBzbyBhIGBQcm9kdWN0aW9uTm9kZWAgaXMgYSBkcm9wLWluIGRvd25zdHJlYW0gc3Vic2NyaWJlciBmb3IgYW55XG4gKiBub2RlIHRoYXQgZmlyZXMgbGVmdC1hY3RpdmF0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIFByb2R1Y3Rpb25Ob2RlIHtcbiAgLyoqXG4gICAqIEFjY3VtdWxhdGVkIG1hdGNoZXMgaW4gaW5zZXJ0aW9uIG9yZGVyLlxuICAgKlxuICAgKiBEZWNsYXJlZCBgcmVhZG9ubHlgIHNvIGV4dGVybmFsIGNvZGUgY2Fubm90IHN3YXAgdGhlIGFycmF5IG91dCBmcm9tXG4gICAqIHVuZGVybmVhdGggdGhlIG5vZGUsIGJ1dCBpdHMgY29udGVudHMgYXJlIG11dGF0ZWQgaW50ZXJuYWxseSDigJQgdGVzdHNcbiAgICogYW5kIGRvd25zdHJlYW0gY29kZSByZWx5IG9uIHBvc2l0aW9uYWwgYWNjZXNzIChgbWF0Y2hlc1swXWApLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF0Y2hlczogTWF0Y2hbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IHJ1bGVOYW1lOiBzdHJpbmcpIHt9XG5cbiAgLyoqXG4gICAqIFJlY29yZCBhIG5ldyBmdWxsIG1hdGNoLlxuICAgKlxuICAgKiBDYWxsZWQgYnkgdGhlIHVwc3RyZWFtIG5vZGUgKGEge0BsaW5rIEJldGFNZW1vcnl9IG9yIGEgZmlsdGVyIG5vZGUpXG4gICAqIHdoZW4gYSB0b2tlbiByZXByZXNlbnRpbmcgYSBjb21wbGV0ZSBtYXRjaCBlbnRlcnMgdGhlIG5ldHdvcmsuXG4gICAqL1xuICBsZWZ0QWN0aXZhdGUodG9rZW46IFRva2VuKTogdm9pZCB7XG4gICAgdGhpcy5tYXRjaGVzLnB1c2goeyB0b2tlbiwgYmluZGluZ3M6IHRva2VuLmJpbmRpbmdzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFdpdGhkcmF3IGEgcHJldmlvdXNseS1yZWNvcmRlZCBtYXRjaC5cbiAgICpcbiAgICogUmVtb3ZlcyB0aGUgZmlyc3QgbWF0Y2ggd2hvc2UgYHRva2VuYCBpcyByZWZlcmVuY2UtZXF1YWwgdG8gdGhlXG4gICAqIHN1cHBsaWVkIHRva2VuLiBVbmtub3duIHRva2VucyBhcmUgYSBuby1vcDogdXBzdHJlYW0gbWVtb3JpZXMgYWx3YXlzXG4gICAqIGJyb2FkY2FzdCBkZWFjdGl2YXRpb25zIHRvIHRoZWlyIHN1YnNjcmliZXJzLCBldmVuIHdoZW4gdGhpcyBwYXJ0aWN1bGFyXG4gICAqIG5vZGUgbmV2ZXIgYWNjZXB0ZWQgdGhlIHRva2VuLCBzbyBzaWxlbnRseSBpZ25vcmluZyB0aGUgYWJzZW50IGNhc2VcbiAgICoga2VlcHMgd2lyaW5nIGxlbmllbnQgKG1hdGNoaW5nIHtAbGluayBCZXRhTWVtb3J5LmxlZnREZWFjdGl2YXRlfSkuXG4gICAqL1xuICBsZWZ0RGVhY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICBjb25zdCBpZHggPSB0aGlzLm1hdGNoZXMuZmluZEluZGV4KChtKSA9PiBtLnRva2VuID09PSB0b2tlbik7XG4gICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgIHRoaXMubWF0Y2hlcy5zcGxpY2UoaWR4LCAxKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGZpcnN0IGN1cnJlbnRseS1hY3RpdmUgbWF0Y2gncyBiaW5kaW5ncywgb3IgdGhyb3dcbiAqIHtAbGluayBOb01hdGNoRXJyb3J9IGlmIHRoZSBwcm9kdWN0aW9uIGhhcyBubyBtYXRjaGVzLlxuICpcbiAqIFwiRmlyc3RcIiBpcyBkZWZpbmVkIGJ5IHRoZSBzYW1lIGluc2VydGlvbiBvcmRlciBhcyB7QGxpbmsgcXVlcnlBbGx9IOKAlCB0aGVcbiAqIHVwc3RyZWFtIGJldGEgbmV0d29yayBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHRoYXQgb3JkZXIgZGV0ZXJtaW5pc3RpY1xuICogKHNlZSBtb2R1bGUgaGVhZGVyKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5KHByb2Q6IFByb2R1Y3Rpb25Ob2RlKTogQmluZGluZ3Mge1xuICBjb25zdCBmaXJzdCA9IHByb2QubWF0Y2hlc1swXTtcbiAgaWYgKCFmaXJzdCkgdGhyb3cgbmV3IE5vTWF0Y2hFcnJvcihwcm9kLnJ1bGVOYW1lKTtcbiAgcmV0dXJuIGZpcnN0LmJpbmRpbmdzO1xufVxuXG4vKipcbiAqIFJldHVybiBhIGZyZXNoIGFycmF5IGNvbnRhaW5pbmcgdGhlIGJpbmRpbmdzIG9mIGV2ZXJ5IGN1cnJlbnRseS1hY3RpdmVcbiAqIG1hdGNoLCBpbiBpbnNlcnRpb24gb3JkZXIuXG4gKlxuICogVGhlIHJldHVybmVkIGFycmF5IGlzIGEgbmV3IGFycmF5IG9uIGV2ZXJ5IGNhbGwsIHNvIGNhbGxlcnMgbWF5IG11dGF0ZVxuICogaXQgd2l0aG91dCBhZmZlY3Rpbmcgc3Vic2VxdWVudCBxdWVyaWVzIG9yIHRoZSBwcm9kdWN0aW9uIG5vZGUuIFRoZVxuICogYmluZGluZ3Mgb2JqZWN0cyB0aGVtc2VsdmVzIGFyZSBzaGFyZWQgYnkgcmVmZXJlbmNlIHdpdGggdGhlIG5vZGUg4oCUXG4gKiB0cmVhdCB0aGVtIGFzIHJlYWQtb25seS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5QWxsKHByb2Q6IFByb2R1Y3Rpb25Ob2RlKTogQmluZGluZ3NbXSB7XG4gIHJldHVybiBwcm9kLm1hdGNoZXMubWFwKChtKSA9PiBtLmJpbmRpbmdzKTtcbn1cbiJdLCJmaWxlIjoiL3NyYy9xdWVyeS50cyJ9 diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/fc3adbd64f7d5a65dd71c62f062c319a6ce82488 b/IJGn1F-WxLUCbfU1lu8pU/ssr/fc3adbd64f7d5a65dd71c62f062c319a6ce82488 deleted file mode 100644 index b56e574..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/fc3adbd64f7d5a65dd71c62f062c319a6ce82488 +++ /dev/null @@ -1,15 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "RecursionLimitExceededError", { enumerable: true, configurable: true, get(){ try { return RecursionLimitExceededError } catch {} }}); -class RecursionLimitExceededError extends Error { - constructor(depth, activationTrace) { - const traceStr = activationTrace.length > 0 ? ` Last activations: [${activationTrace.join(" → ")}]` : ""; - super( - `RecursionLimitExceededError: recursion depth ${depth} exceeded.${traceStr}` - ); - this.depth = depth; - this.activationTrace = activationTrace; - this.name = "RecursionLimitExceededError"; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQUlPLE1BQU0sb0NBQW9DLE1BQU07QUFBQSxFQUNyRCxZQUNXLE9BQ0EsaUJBQ1Q7QUFDQSxVQUFNLFdBQ0osZ0JBQWdCLFNBQVMsSUFDckIsdUJBQXVCLGdCQUFnQixLQUFLLEtBQUssQ0FBQyxNQUNsRDtBQUNOO0FBQUEsTUFDRSxnREFBZ0QsS0FBSyxhQUFhLFFBQVE7QUFBQSxJQUM1RTtBQVRTO0FBQ0E7QUFTVCxTQUFLLE9BQU87QUFBQSxFQUNkO0FBQ0YiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImN5Y2xlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVjdXJzaW9uTGltaXRFeGNlZWRlZEVycm9yIOKAlCB0aHJvd24gd2hlbiBmaXJlUnVsZXMoKSByZWN1cnNpb24gZGVwdGggZXhjZWVkcyB0aGUgbGltaXQuXG4gKiBQZXIgU1BFQy5tZCDCp0N5Y2xlIERldGVjdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlY3Vyc2lvbkxpbWl0RXhjZWVkZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgZGVwdGg6IG51bWJlcixcbiAgICByZWFkb25seSBhY3RpdmF0aW9uVHJhY2U6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICApIHtcbiAgICBjb25zdCB0cmFjZVN0ciA9XG4gICAgICBhY3RpdmF0aW9uVHJhY2UubGVuZ3RoID4gMFxuICAgICAgICA/IGAgTGFzdCBhY3RpdmF0aW9uczogWyR7YWN0aXZhdGlvblRyYWNlLmpvaW4oXCIg4oaSIFwiKX1dYFxuICAgICAgICA6IFwiXCI7XG4gICAgc3VwZXIoXG4gICAgICBgUmVjdXJzaW9uTGltaXRFeGNlZWRlZEVycm9yOiByZWN1cnNpb24gZGVwdGggJHtkZXB0aH0gZXhjZWVkZWQuJHt0cmFjZVN0cn1gLFxuICAgICk7XG4gICAgdGhpcy5uYW1lID0gXCJSZWN1cnNpb25MaW1pdEV4Y2VlZGVkRXJyb3JcIjtcbiAgfVxufVxuIl0sImZpbGUiOiIvc3JjL2N5Y2xlLnRzIn0= diff --git a/IJGn1F-WxLUCbfU1lu8pU/ssr/fc93d79d2151156c20ca5492ba07114929726195 b/IJGn1F-WxLUCbfU1lu8pU/ssr/fc93d79d2151156c20ca5492ba07114929726195 deleted file mode 100644 index 9f5f23b..0000000 --- a/IJGn1F-WxLUCbfU1lu8pU/ssr/fc93d79d2151156c20ca5492ba07114929726195 +++ /dev/null @@ -1,155 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("vitest", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/query.ts", {"importedNames":["ProductionNode","query","queryAll","NoMatchError"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/beta.ts", {"importedNames":["Token"]}); -const mkId = (n) => n; -const mkFact = (id, attr, value) => ({ id: mkId(id), attr, value }); -(0,__vite_ssr_import_0__.describe)("ProductionNode", () => { - (0,__vite_ssr_import_0__.it)("accumulates matches when tokens are activated", () => { - const prod = new __vite_ssr_import_1__.ProductionNode("my-rule"); - const t1 = new __vite_ssr_import_2__.Token(null, mkFact(1, "Health", 100), { hp: 100, eid: mkId(1) }); - const t2 = new __vite_ssr_import_2__.Token(null, mkFact(2, "Health", 50), { hp: 50, eid: mkId(2) }); - prod.leftActivate(t1); - prod.leftActivate(t2); - (0,__vite_ssr_import_0__.expect)(prod.matches).toHaveLength(2); - }); - (0,__vite_ssr_import_0__.it)("removes matches when tokens are deactivated", () => { - const prod = new __vite_ssr_import_1__.ProductionNode("my-rule"); - const t = new __vite_ssr_import_2__.Token(null, mkFact(1, "Health", 100), { hp: 100 }); - prod.leftActivate(t); - (0,__vite_ssr_import_0__.expect)(prod.matches).toHaveLength(1); - prod.leftDeactivate(t); - (0,__vite_ssr_import_0__.expect)(prod.matches).toHaveLength(0); - }); - (0,__vite_ssr_import_0__.it)("stores match bindings from token", () => { - const prod = new __vite_ssr_import_1__.ProductionNode("rule-with-bindings"); - const bindings = { hp: 100, name: "Alice", eid: mkId(5) }; - const t = new __vite_ssr_import_2__.Token(null, mkFact(5, "Health", 100), bindings); - prod.leftActivate(t); - (0,__vite_ssr_import_0__.expect)(prod.matches[0]?.bindings["hp"]).toBe(100); - (0,__vite_ssr_import_0__.expect)(prod.matches[0]?.bindings["name"]).toBe("Alice"); - }); - (0,__vite_ssr_import_0__.it)("exposes the originating token on each match", () => { - const prod = new __vite_ssr_import_1__.ProductionNode("rule"); - const t = new __vite_ssr_import_2__.Token(null, mkFact(1, "X", 1), { x: 1 }); - prod.leftActivate(t); - (0,__vite_ssr_import_0__.expect)(prod.matches[0]?.token).toBe(t); - }); - (0,__vite_ssr_import_0__.it)("deactivating an unknown token is a no-op (does not throw, does not remove others)", () => { - const prod = new __vite_ssr_import_1__.ProductionNode("rule"); - const kept = new __vite_ssr_import_2__.Token(null, mkFact(1, "X", 1), { x: 1 }); - const stranger = new __vite_ssr_import_2__.Token(null, mkFact(2, "X", 2), { x: 2 }); - prod.leftActivate(kept); - (0,__vite_ssr_import_0__.expect)(() => prod.leftDeactivate(stranger)).not.toThrow(); - (0,__vite_ssr_import_0__.expect)(prod.matches).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(prod.matches[0]?.token).toBe(kept); - }); - (0,__vite_ssr_import_0__.it)("retains ruleName for diagnostics", () => { - const prod = new __vite_ssr_import_1__.ProductionNode("my-diagnostic-rule"); - (0,__vite_ssr_import_0__.expect)(prod.ruleName).toBe("my-diagnostic-rule"); - }); -}); -(0,__vite_ssr_import_0__.describe)("query()", () => { - (0,__vite_ssr_import_0__.it)("returns the first match bindings", () => { - const prod = new __vite_ssr_import_1__.ProductionNode("rule"); - const t = new __vite_ssr_import_2__.Token(null, mkFact(1, "X", 42), { x: 42 }); - prod.leftActivate(t); - const result = (0,__vite_ssr_import_1__.query)(prod); - (0,__vite_ssr_import_0__.expect)(result["x"]).toBe(42); - }); - (0,__vite_ssr_import_0__.it)("throws NoMatchError when no matches exist", () => { - const prod = new __vite_ssr_import_1__.ProductionNode("rule"); - (0,__vite_ssr_import_0__.expect)(() => (0,__vite_ssr_import_1__.query)(prod)).toThrow((0,__vite_ssr_import_1__.NoMatchError)); - }); - (0,__vite_ssr_import_0__.it)("throws NoMatchError with rule name in message", () => { - const prod = new __vite_ssr_import_1__.ProductionNode("my-specific-rule"); - (0,__vite_ssr_import_0__.expect)(() => (0,__vite_ssr_import_1__.query)(prod)).toThrow("my-specific-rule"); - }); - (0,__vite_ssr_import_0__.it)("returns the earliest match when multiple are active", () => { - const prod = new __vite_ssr_import_1__.ProductionNode("rule"); - const tFirst = new __vite_ssr_import_2__.Token(null, mkFact(1, "X", 1), { x: 1 }); - const tSecond = new __vite_ssr_import_2__.Token(null, mkFact(2, "X", 2), { x: 2 }); - prod.leftActivate(tFirst); - prod.leftActivate(tSecond); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.query)(prod)["x"]).toBe(1); - }); - (0,__vite_ssr_import_0__.it)("after deactivating the first match, returns the next remaining one", () => { - const prod = new __vite_ssr_import_1__.ProductionNode("rule"); - const t1 = new __vite_ssr_import_2__.Token(null, mkFact(1, "X", 1), { x: 1 }); - const t2 = new __vite_ssr_import_2__.Token(null, mkFact(2, "X", 2), { x: 2 }); - prod.leftActivate(t1); - prod.leftActivate(t2); - prod.leftDeactivate(t1); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.query)(prod)["x"]).toBe(2); - }); -}); -(0,__vite_ssr_import_0__.describe)("queryAll()", () => { - (0,__vite_ssr_import_0__.it)("returns empty array when no matches", () => { - const prod = new __vite_ssr_import_1__.ProductionNode("rule"); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.queryAll)(prod)).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("returns all matches", () => { - const prod = new __vite_ssr_import_1__.ProductionNode("rule"); - const t1 = new __vite_ssr_import_2__.Token(null, mkFact(1, "X", 1), { x: 1 }); - const t2 = new __vite_ssr_import_2__.Token(null, mkFact(2, "X", 2), { x: 2 }); - prod.leftActivate(t1); - prod.leftActivate(t2); - const results = (0,__vite_ssr_import_1__.queryAll)(prod); - (0,__vite_ssr_import_0__.expect)(results).toHaveLength(2); - }); - (0,__vite_ssr_import_0__.it)("returns matches in deterministic order (insertion order)", () => { - const prod = new __vite_ssr_import_1__.ProductionNode("rule"); - const t1 = new __vite_ssr_import_2__.Token(null, mkFact(1, "X", 10), { x: 10 }); - const t2 = new __vite_ssr_import_2__.Token(null, mkFact(2, "X", 20), { x: 20 }); - const t3 = new __vite_ssr_import_2__.Token(null, mkFact(3, "X", 30), { x: 30 }); - prod.leftActivate(t1); - prod.leftActivate(t2); - prod.leftActivate(t3); - const results = (0,__vite_ssr_import_1__.queryAll)(prod); - (0,__vite_ssr_import_0__.expect)(results[0]?.["x"]).toBe(10); - (0,__vite_ssr_import_0__.expect)(results[1]?.["x"]).toBe(20); - (0,__vite_ssr_import_0__.expect)(results[2]?.["x"]).toBe(30); - }); - (0,__vite_ssr_import_0__.it)("queryAll is stable after deactivation", () => { - const prod = new __vite_ssr_import_1__.ProductionNode("rule"); - const t1 = new __vite_ssr_import_2__.Token(null, mkFact(1, "X", 1), { x: 1 }); - const t2 = new __vite_ssr_import_2__.Token(null, mkFact(2, "X", 2), { x: 2 }); - prod.leftActivate(t1); - prod.leftActivate(t2); - prod.leftDeactivate(t1); - const results = (0,__vite_ssr_import_1__.queryAll)(prod); - (0,__vite_ssr_import_0__.expect)(results).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)(results[0]?.["x"]).toBe(2); - }); - (0,__vite_ssr_import_0__.it)("does not re-sort by bindings — later-activated tokens do not move earlier even if their entity ids are smaller", () => { - const prod = new __vite_ssr_import_1__.ProductionNode("rule"); - const tHighIdFirst = new __vite_ssr_import_2__.Token(null, mkFact(99, "X", 99), { x: 99 }); - const tLowIdSecond = new __vite_ssr_import_2__.Token(null, mkFact(1, "X", 1), { x: 1 }); - prod.leftActivate(tHighIdFirst); - prod.leftActivate(tLowIdSecond); - const results = (0,__vite_ssr_import_1__.queryAll)(prod); - (0,__vite_ssr_import_0__.expect)(results[0]?.["x"]).toBe(99); - (0,__vite_ssr_import_0__.expect)(results[1]?.["x"]).toBe(1); - }); - (0,__vite_ssr_import_0__.it)("returns a snapshot that is safe to mutate without affecting the node", () => { - const prod = new __vite_ssr_import_1__.ProductionNode("rule"); - const t = new __vite_ssr_import_2__.Token(null, mkFact(1, "X", 1), { x: 1 }); - prod.leftActivate(t); - const snapshot = (0,__vite_ssr_import_1__.queryAll)(prod); - snapshot.pop(); - (0,__vite_ssr_import_0__.expect)(prod.matches).toHaveLength(1); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.queryAll)(prod)).toHaveLength(1); - }); -}); -(0,__vite_ssr_import_0__.describe)("NoMatchError", () => { - (0,__vite_ssr_import_0__.it)("has name 'NoMatchError'", () => { - const err = new __vite_ssr_import_1__.NoMatchError("r"); - (0,__vite_ssr_import_0__.expect)(err.name).toBe("NoMatchError"); - }); - (0,__vite_ssr_import_0__.it)("is an Error instance", () => { - const err = new __vite_ssr_import_1__.NoMatchError("r"); - (0,__vite_ssr_import_0__.expect)(err).toBeInstanceOf(Error); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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W10sInNvdXJjZXMiOlsicXVlcnkudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgaXQsIGV4cGVjdCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB7IFByb2R1Y3Rpb25Ob2RlLCBxdWVyeSwgcXVlcnlBbGwsIE5vTWF0Y2hFcnJvciB9IGZyb20gXCIuL3F1ZXJ5LmpzXCI7XG5pbXBvcnQgeyBUb2tlbiB9IGZyb20gXCIuL2JldGEuanNcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiLi9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgQXR0cktleSwgRmFjdFZhbHVlIH0gZnJvbSBcIi4vd20uanNcIjtcblxuY29uc3QgbWtJZCA9IChuOiBudW1iZXIpID0+IG4gYXMgRW50aXR5SWQ7XG5jb25zdCBta0ZhY3QgPSAoaWQ6IG51bWJlciwgYXR0cjogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT5cbiAgKHsgaWQ6IG1rSWQoaWQpLCBhdHRyOiBhdHRyIGFzIEF0dHJLZXksIHZhbHVlOiB2YWx1ZSBhcyBGYWN0VmFsdWUgfSk7XG5cbmRlc2NyaWJlKFwiUHJvZHVjdGlvbk5vZGVcIiwgKCkgPT4ge1xuICBpdChcImFjY3VtdWxhdGVzIG1hdGNoZXMgd2hlbiB0b2tlbnMgYXJlIGFjdGl2YXRlZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgcHJvZCA9IG5ldyBQcm9kdWN0aW9uTm9kZShcIm15LXJ1bGVcIik7XG4gICAgY29uc3QgdDEgPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDEsIFwiSGVhbHRoXCIsIDEwMCksIHsgaHA6IDEwMCwgZWlkOiBta0lkKDEpIH0pO1xuICAgIGNvbnN0IHQyID0gbmV3IFRva2VuKG51bGwsIG1rRmFjdCgyLCBcIkhlYWx0aFwiLCA1MCksIHsgaHA6IDUwLCBlaWQ6IG1rSWQoMikgfSk7XG5cbiAgICBwcm9kLmxlZnRBY3RpdmF0ZSh0MSk7XG4gICAgcHJvZC5sZWZ0QWN0aXZhdGUodDIpO1xuXG4gICAgZXhwZWN0KHByb2QubWF0Y2hlcykudG9IYXZlTGVuZ3RoKDIpO1xuICB9KTtcblxuICBpdChcInJlbW92ZXMgbWF0Y2hlcyB3aGVuIHRva2VucyBhcmUgZGVhY3RpdmF0ZWRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHByb2QgPSBuZXcgUHJvZHVjdGlvbk5vZGUoXCJteS1ydWxlXCIpO1xuICAgIGNvbnN0IHQgPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDEsIFwiSGVhbHRoXCIsIDEwMCksIHsgaHA6IDEwMCB9KTtcblxuICAgIHByb2QubGVmdEFjdGl2YXRlKHQpO1xuICAgIGV4cGVjdChwcm9kLm1hdGNoZXMpLnRvSGF2ZUxlbmd0aCgxKTtcblxuICAgIHByb2QubGVmdERlYWN0aXZhdGUodCk7XG4gICAgZXhwZWN0KHByb2QubWF0Y2hlcykudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcblxuICBpdChcInN0b3JlcyBtYXRjaCBiaW5kaW5ncyBmcm9tIHRva2VuXCIsICgpID0+IHtcbiAgICBjb25zdCBwcm9kID0gbmV3IFByb2R1Y3Rpb25Ob2RlKFwicnVsZS13aXRoLWJpbmRpbmdzXCIpO1xuICAgIGNvbnN0IGJpbmRpbmdzID0geyBocDogMTAwLCBuYW1lOiBcIkFsaWNlXCIsIGVpZDogbWtJZCg1KSB9O1xuICAgIGNvbnN0IHQgPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDUsIFwiSGVhbHRoXCIsIDEwMCksIGJpbmRpbmdzKTtcbiAgICBwcm9kLmxlZnRBY3RpdmF0ZSh0KTtcblxuICAgIGV4cGVjdChwcm9kLm1hdGNoZXNbMF0/LmJpbmRpbmdzW1wiaHBcIl0pLnRvQmUoMTAwKTtcbiAgICBleHBlY3QocHJvZC5tYXRjaGVzWzBdPy5iaW5kaW5nc1tcIm5hbWVcIl0pLnRvQmUoXCJBbGljZVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJleHBvc2VzIHRoZSBvcmlnaW5hdGluZyB0b2tlbiBvbiBlYWNoIG1hdGNoXCIsICgpID0+IHtcbiAgICBjb25zdCBwcm9kID0gbmV3IFByb2R1Y3Rpb25Ob2RlKFwicnVsZVwiKTtcbiAgICBjb25zdCB0ID0gbmV3IFRva2VuKG51bGwsIG1rRmFjdCgxLCBcIlhcIiwgMSksIHsgeDogMSB9KTtcbiAgICBwcm9kLmxlZnRBY3RpdmF0ZSh0KTtcbiAgICBleHBlY3QocHJvZC5tYXRjaGVzWzBdPy50b2tlbikudG9CZSh0KTtcbiAgfSk7XG5cbiAgaXQoXCJkZWFjdGl2YXRpbmcgYW4gdW5rbm93biB0b2tlbiBpcyBhIG5vLW9wIChkb2VzIG5vdCB0aHJvdywgZG9lcyBub3QgcmVtb3ZlIG90aGVycylcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHByb2QgPSBuZXcgUHJvZHVjdGlvbk5vZGUoXCJydWxlXCIpO1xuICAgIGNvbnN0IGtlcHQgPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDEsIFwiWFwiLCAxKSwgeyB4OiAxIH0pO1xuICAgIGNvbnN0IHN0cmFuZ2VyID0gbmV3IFRva2VuKG51bGwsIG1rRmFjdCgyLCBcIlhcIiwgMiksIHsgeDogMiB9KTtcbiAgICBwcm9kLmxlZnRBY3RpdmF0ZShrZXB0KTtcblxuICAgIGV4cGVjdCgoKSA9PiBwcm9kLmxlZnREZWFjdGl2YXRlKHN0cmFuZ2VyKSkubm90LnRvVGhyb3coKTtcbiAgICBleHBlY3QocHJvZC5tYXRjaGVzKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgZXhwZWN0KHByb2QubWF0Y2hlc1swXT8udG9rZW4pLnRvQmUoa2VwdCk7XG4gIH0pO1xuXG4gIGl0KFwicmV0YWlucyBydWxlTmFtZSBmb3IgZGlhZ25vc3RpY3NcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHByb2QgPSBuZXcgUHJvZHVjdGlvbk5vZGUoXCJteS1kaWFnbm9zdGljLXJ1bGVcIik7XG4gICAgZXhwZWN0KHByb2QucnVsZU5hbWUpLnRvQmUoXCJteS1kaWFnbm9zdGljLXJ1bGVcIik7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwicXVlcnkoKVwiLCAoKSA9PiB7XG4gIGl0KFwicmV0dXJucyB0aGUgZmlyc3QgbWF0Y2ggYmluZGluZ3NcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHByb2QgPSBuZXcgUHJvZHVjdGlvbk5vZGUoXCJydWxlXCIpO1xuICAgIGNvbnN0IHQgPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDEsIFwiWFwiLCA0MiksIHsgeDogNDIgfSk7XG4gICAgcHJvZC5sZWZ0QWN0aXZhdGUodCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBxdWVyeShwcm9kKTtcbiAgICBleHBlY3QocmVzdWx0W1wieFwiXSkudG9CZSg0Mik7XG4gIH0pO1xuXG4gIGl0KFwidGhyb3dzIE5vTWF0Y2hFcnJvciB3aGVuIG5vIG1hdGNoZXMgZXhpc3RcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHByb2QgPSBuZXcgUHJvZHVjdGlvbk5vZGUoXCJydWxlXCIpO1xuICAgIGV4cGVjdCgoKSA9PiBxdWVyeShwcm9kKSkudG9UaHJvdyhOb01hdGNoRXJyb3IpO1xuICB9KTtcblxuICBpdChcInRocm93cyBOb01hdGNoRXJyb3Igd2l0aCBydWxlIG5hbWUgaW4gbWVzc2FnZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcHJvZCA9IG5ldyBQcm9kdWN0aW9uTm9kZShcIm15LXNwZWNpZmljLXJ1bGVcIik7XG4gICAgZXhwZWN0KCgpID0+IHF1ZXJ5KHByb2QpKS50b1Rocm93KFwibXktc3BlY2lmaWMtcnVsZVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIHRoZSBlYXJsaWVzdCBtYXRjaCB3aGVuIG11bHRpcGxlIGFyZSBhY3RpdmVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHByb2QgPSBuZXcgUHJvZHVjdGlvbk5vZGUoXCJydWxlXCIpO1xuICAgIGNvbnN0IHRGaXJzdCA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoMSwgXCJYXCIsIDEpLCB7IHg6IDEgfSk7XG4gICAgY29uc3QgdFNlY29uZCA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoMiwgXCJYXCIsIDIpLCB7IHg6IDIgfSk7XG4gICAgcHJvZC5sZWZ0QWN0aXZhdGUodEZpcnN0KTtcbiAgICBwcm9kLmxlZnRBY3RpdmF0ZSh0U2Vjb25kKTtcblxuICAgIGV4cGVjdChxdWVyeShwcm9kKVtcInhcIl0pLnRvQmUoMSk7XG4gIH0pO1xuXG4gIGl0KFwiYWZ0ZXIgZGVhY3RpdmF0aW5nIHRoZSBmaXJzdCBtYXRjaCwgcmV0dXJucyB0aGUgbmV4dCByZW1haW5pbmcgb25lXCIsICgpID0+IHtcbiAgICBjb25zdCBwcm9kID0gbmV3IFByb2R1Y3Rpb25Ob2RlKFwicnVsZVwiKTtcbiAgICBjb25zdCB0MSA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoMSwgXCJYXCIsIDEpLCB7IHg6IDEgfSk7XG4gICAgY29uc3QgdDIgPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDIsIFwiWFwiLCAyKSwgeyB4OiAyIH0pO1xuICAgIHByb2QubGVmdEFjdGl2YXRlKHQxKTtcbiAgICBwcm9kLmxlZnRBY3RpdmF0ZSh0Mik7XG4gICAgcHJvZC5sZWZ0RGVhY3RpdmF0ZSh0MSk7XG5cbiAgICBleHBlY3QocXVlcnkocHJvZClbXCJ4XCJdKS50b0JlKDIpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInF1ZXJ5QWxsKClcIiwgKCkgPT4ge1xuICBpdChcInJldHVybnMgZW1wdHkgYXJyYXkgd2hlbiBubyBtYXRjaGVzXCIsICgpID0+IHtcbiAgICBjb25zdCBwcm9kID0gbmV3IFByb2R1Y3Rpb25Ob2RlKFwicnVsZVwiKTtcbiAgICBleHBlY3QocXVlcnlBbGwocHJvZCkpLnRvRXF1YWwoW10pO1xuICB9KTtcblxuICBpdChcInJldHVybnMgYWxsIG1hdGNoZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHByb2QgPSBuZXcgUHJvZHVjdGlvbk5vZGUoXCJydWxlXCIpO1xuICAgIGNvbnN0IHQxID0gbmV3IFRva2VuKG51bGwsIG1rRmFjdCgxLCBcIlhcIiwgMSksIHsgeDogMSB9KTtcbiAgICBjb25zdCB0MiA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoMiwgXCJYXCIsIDIpLCB7IHg6IDIgfSk7XG4gICAgcHJvZC5sZWZ0QWN0aXZhdGUodDEpO1xuICAgIHByb2QubGVmdEFjdGl2YXRlKHQyKTtcbiAgICBjb25zdCByZXN1bHRzID0gcXVlcnlBbGwocHJvZCk7XG4gICAgZXhwZWN0KHJlc3VsdHMpLnRvSGF2ZUxlbmd0aCgyKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIG1hdGNoZXMgaW4gZGV0ZXJtaW5pc3RpYyBvcmRlciAoaW5zZXJ0aW9uIG9yZGVyKVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcHJvZCA9IG5ldyBQcm9kdWN0aW9uTm9kZShcInJ1bGVcIik7XG4gICAgY29uc3QgdDEgPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDEsIFwiWFwiLCAxMCksIHsgeDogMTAgfSk7XG4gICAgY29uc3QgdDIgPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDIsIFwiWFwiLCAyMCksIHsgeDogMjAgfSk7XG4gICAgY29uc3QgdDMgPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDMsIFwiWFwiLCAzMCksIHsgeDogMzAgfSk7XG4gICAgcHJvZC5sZWZ0QWN0aXZhdGUodDEpO1xuICAgIHByb2QubGVmdEFjdGl2YXRlKHQyKTtcbiAgICBwcm9kLmxlZnRBY3RpdmF0ZSh0Myk7XG4gICAgY29uc3QgcmVzdWx0cyA9IHF1ZXJ5QWxsKHByb2QpO1xuICAgIGV4cGVjdChyZXN1bHRzWzBdPy5bXCJ4XCJdKS50b0JlKDEwKTtcbiAgICBleHBlY3QocmVzdWx0c1sxXT8uW1wieFwiXSkudG9CZSgyMCk7XG4gICAgZXhwZWN0KHJlc3VsdHNbMl0/LltcInhcIl0pLnRvQmUoMzApO1xuICB9KTtcblxuICBpdChcInF1ZXJ5QWxsIGlzIHN0YWJsZSBhZnRlciBkZWFjdGl2YXRpb25cIiwgKCkgPT4ge1xuICAgIGNvbnN0IHByb2QgPSBuZXcgUHJvZHVjdGlvbk5vZGUoXCJydWxlXCIpO1xuICAgIGNvbnN0IHQxID0gbmV3IFRva2VuKG51bGwsIG1rRmFjdCgxLCBcIlhcIiwgMSksIHsgeDogMSB9KTtcbiAgICBjb25zdCB0MiA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoMiwgXCJYXCIsIDIpLCB7IHg6IDIgfSk7XG4gICAgcHJvZC5sZWZ0QWN0aXZhdGUodDEpO1xuICAgIHByb2QubGVmdEFjdGl2YXRlKHQyKTtcbiAgICBwcm9kLmxlZnREZWFjdGl2YXRlKHQxKTtcbiAgICBjb25zdCByZXN1bHRzID0gcXVlcnlBbGwocHJvZCk7XG4gICAgZXhwZWN0KHJlc3VsdHMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICBleHBlY3QocmVzdWx0c1swXT8uW1wieFwiXSkudG9CZSgyKTtcbiAgfSk7XG5cbiAgaXQoXCJkb2VzIG5vdCByZS1zb3J0IGJ5IGJpbmRpbmdzIOKAlCBsYXRlci1hY3RpdmF0ZWQgdG9rZW5zIGRvIG5vdCBtb3ZlIGVhcmxpZXIgZXZlbiBpZiB0aGVpciBlbnRpdHkgaWRzIGFyZSBzbWFsbGVyXCIsICgpID0+IHtcbiAgICBjb25zdCBwcm9kID0gbmV3IFByb2R1Y3Rpb25Ob2RlKFwicnVsZVwiKTtcbiAgICAvLyBBY3RpdmF0ZSBoaWdoLWlkIHRva2VuIGZpcnN0LCBsb3ctaWQgc2Vjb25kOyBpbnNlcnRpb24gb3JkZXIgd2lucy5cbiAgICBjb25zdCB0SGlnaElkRmlyc3QgPSBuZXcgVG9rZW4obnVsbCwgbWtGYWN0KDk5LCBcIlhcIiwgOTkpLCB7IHg6IDk5IH0pO1xuICAgIGNvbnN0IHRMb3dJZFNlY29uZCA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoMSwgXCJYXCIsIDEpLCB7IHg6IDEgfSk7XG4gICAgcHJvZC5sZWZ0QWN0aXZhdGUodEhpZ2hJZEZpcnN0KTtcbiAgICBwcm9kLmxlZnRBY3RpdmF0ZSh0TG93SWRTZWNvbmQpO1xuXG4gICAgY29uc3QgcmVzdWx0cyA9IHF1ZXJ5QWxsKHByb2QpO1xuICAgIGV4cGVjdChyZXN1bHRzWzBdPy5bXCJ4XCJdKS50b0JlKDk5KTtcbiAgICBleHBlY3QocmVzdWx0c1sxXT8uW1wieFwiXSkudG9CZSgxKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIGEgc25hcHNob3QgdGhhdCBpcyBzYWZlIHRvIG11dGF0ZSB3aXRob3V0IGFmZmVjdGluZyB0aGUgbm9kZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcHJvZCA9IG5ldyBQcm9kdWN0aW9uTm9kZShcInJ1bGVcIik7XG4gICAgY29uc3QgdCA9IG5ldyBUb2tlbihudWxsLCBta0ZhY3QoMSwgXCJYXCIsIDEpLCB7IHg6IDEgfSk7XG4gICAgcHJvZC5sZWZ0QWN0aXZhdGUodCk7XG4gICAgY29uc3Qgc25hcHNob3QgPSBxdWVyeUFsbChwcm9kKTtcbiAgICBzbmFwc2hvdC5wb3AoKTtcbiAgICBleHBlY3QocHJvZC5tYXRjaGVzKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgZXhwZWN0KHF1ZXJ5QWxsKHByb2QpKS50b0hhdmVMZW5ndGgoMSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiTm9NYXRjaEVycm9yXCIsICgpID0+IHtcbiAgaXQoXCJoYXMgbmFtZSAnTm9NYXRjaEVycm9yJ1wiLCAoKSA9PiB7XG4gICAgY29uc3QgZXJyID0gbmV3IE5vTWF0Y2hFcnJvcihcInJcIik7XG4gICAgZXhwZWN0KGVyci5uYW1lKS50b0JlKFwiTm9NYXRjaEVycm9yXCIpO1xuICB9KTtcblxuICBpdChcImlzIGFuIEVycm9yIGluc3RhbmNlXCIsICgpID0+IHtcbiAgICBjb25zdCBlcnIgPSBuZXcgTm9NYXRjaEVycm9yKFwiclwiKTtcbiAgICBleHBlY3QoZXJyKS50b0JlSW5zdGFuY2VPZihFcnJvcik7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvcmV0ZS9zcmMvcXVlcnkudGVzdC50cyJ9 diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/0db5c344d5c1329263b6e79127352c79e14ae98d b/KMr2_dqTOvh2R-Vg1E6cO/ssr/0db5c344d5c1329263b6e79127352c79e14ae98d deleted file mode 100644 index 755161f..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/0db5c344d5c1329263b6e79127352c79e14ae98d +++ /dev/null @@ -1,252 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "AggregationNode", { enumerable: true, configurable: true, get(){ try { return AggregationNode } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/beta.js", {"importedNames":["Token"]});/** - * AggregationNode — maintains a running aggregate over match bindings and - * emits a single "aggregate token" downstream whose binding for the result - * variable reflects the current aggregate value. - * - * Per `packages/rete/SPEC.md §Rete II Reference Target` (table row - * "AggregationNode"), supported aggregators are: - * - * - `count` — number of input matches (O(1) update). - * - `sum` — numeric sum (O(1) update, incremental on both sides). - * - `min` — minimum numeric value (O(n) scan on update; see note). - * - `max` — maximum numeric value (O(n) scan on update; see note). - * - `collect` — array of all values (unsorted; O(n) copy per emit). - * - * ### Downstream emission protocol - * - * An AggregationNode always has *exactly one* active aggregate token at a - * time after {@link init} has been called. When the aggregate value - * changes, the node: - * - * 1. Deactivates the previous aggregate token (listeners fire). - * 2. Activates a fresh token carrying the new value (listeners fire). - * - * This matches how downstream BetaMemory/JoinNode/ProductionNode handle - * update semantics — they rely on deactivate-then-activate, not on token - * mutation. {@link Token} is immutable by convention, so we allocate a new - * token on every change rather than mutating `bindings`. - * - * ### Incremental strategy - * - * For `sum`, the node tracks a running total and updates by +value on - * activate / −value on deactivate. This avoids a full scan of the input - * set on every retract, which is the requirement called out for large - * match sets. - * - * For `count`, the size of the underlying value map is O(1) to read. - * - * For `min` / `max`, we scan the current value set on each update. A - * sorted multiset would give O(log n) update but at the cost of - * significant structural complexity; the scan is fast (tight inner loop - * over a `Map`) for the match-set sizes this engine is designed for - * (hundreds to low thousands of tokens per node). The scalability test - * in `aggregate.test.ts` exercises 1000 activations per aggregator to - * keep this assumption honest. - * - * For `collect`, each emission copies the value list into a fresh array - * so downstream code can safely snapshot bindings without observing - * later mutations. - * - * ### Empty-set semantics - * - * With zero input matches, the node emits: - * - `count` → `0` - * - `sum` → `0` - * - `min` → `0` (no natural "identity"; `0` chosen for consistency - * with `sum`, so rules can test `result > 0` safely) - * - `max` → `0` - * - `collect` → `[]` - * - * Callers that need to distinguish "no matches" from "min happens to be - * zero" should combine the aggregation with a count condition or use an - * ExistentialNode upstream. - */ - -/** - * Synthetic fact carried by every aggregate token. - * - * Aggregate tokens do not derive from a single working-memory fact — they - * represent a summary of many. Downstream nodes that walk `.fact` for - * diagnostics will see this sentinel rather than an arbitrary one of the - * contributing facts, which would be misleading. - * - * The id `-1` is outside the range of any application-assigned entity id - * (all real ids are allocated as non-negative integers — see - * `schema.ts`), so there is no risk of collision. - */ -const AGG_FACT = { - id: -1, - attr: "__agg__", - value: null, -}; -class AggregationNode { - kind; - inputVar; - resultVar; - #activateListeners = []; - #deactivateListeners = []; - /** - * All current input matches keyed by their upstream token, mapped to - * the binding value this node is aggregating over. - * - * Keyed by the token reference (not by binding value) so that two - * tokens contributing the same value — e.g. two units both at `hp=10` - * — are tracked independently and both contribute to `count`, `sum`, - * `collect`, etc. - */ - #values = new Map(); - /** Running sum, kept in sync with {@link #values} for O(1) update on sum. */ - #sumTotal = 0; - /** The currently-active aggregate token downstream, or `null` if {@link init} - * has not yet been called. */ - #currentToken = null; - constructor(kind, - /** Variable name in the incoming bindings whose value is aggregated. */ - inputVar, - /** Variable name used in the outgoing aggregate token's bindings. */ - resultVar) { - this.kind = kind; - this.inputVar = inputVar; - this.resultVar = resultVar; - } - addDownstreamActivate(listener) { - this.#activateListeners.push(listener); - } - addDownstreamDeactivate(listener) { - this.#deactivateListeners.push(listener); - } - /** - * Emit the initial aggregate token (reflecting zero input matches). - * - * Must be called after wiring downstream listeners. Aggregation nodes - * differ from BetaMemory / JoinNode in that they always hold one active - * downstream token — even with no inputs the aggregate is defined - * (count=0, sum=0, collect=[]) and rules may legitimately depend on it. - */ - init() { - this.#emitUpdate(); - } - /** - * Record a new input match and emit the updated aggregate. - * - * Idempotency: re-activating the same token reference is not supported - * by upstream callers (BetaMemory always deactivates before re-activating - * a changed partial match). We overwrite silently to avoid a silent - * double-count of `sum` in that degenerate case, but the caller should - * not rely on this. - */ - leftActivate(token) { - const value = this.#readValue(token); - // If the token is already tracked (shouldn't happen in well-wired - // networks), subtract the old contribution from the running sum first - // so the new value replaces — not adds to — the old. - if (this.#values.has(token) && this.kind === "sum") { - const prev = this.#values.get(token); - if (typeof prev === "number") - this.#sumTotal -= prev; - }; - this.#values.set(token, value); - if (this.kind === "sum" && typeof value === "number") { - this.#sumTotal += value; - }; - this.#emitUpdate(); - } - /** - * Retract an input match and emit the updated aggregate. - * - * Unknown tokens are a no-op on the internal state but still trigger a - * downstream emit, mirroring {@link BetaMemory.leftDeactivate}'s lenient - * contract — downstream may have derived tokens that need to settle to - * a consistent aggregate value regardless. - */ - leftDeactivate(token) { - const had = this.#values.has(token); - if (had && this.kind === "sum") { - const prev = this.#values.get(token); - if (typeof prev === "number") - this.#sumTotal -= prev; - }; - this.#values.delete(token); - this.#emitUpdate(); - } - /** - * Read the aggregation value from the given token's bindings. - * - * Falls back to `0` when the binding is missing so that callers who - * incorrectly wire the node don't crash; aggregated bindings that are - * missing would be a network-wiring bug which surfaces as "sum not - * changing" rather than an opaque `NaN`. - */ - #readValue(token) { - const v = token.bindings[this.inputVar]; - return v === undefined ? 0 : v; - } - /** - * Deactivate the previous aggregate token (if any) and activate a new - * one carrying the freshly-computed result. - */ - #emitUpdate() { - const result = this.#materialize(); - const bindings = { [this.resultVar]: result }; - const newToken = new __vite_ssr_import_0__.Token(null, AGG_FACT, bindings); - // Deactivate the old aggregate token first, so downstream sees a clean - // transition (deactivate-then-activate) rather than two simultaneously - // active summaries of the same input set. - const prev = this.#currentToken; - this.#currentToken = newToken; - if (prev !== null) { - for (const listener of this.#deactivateListeners) - listener(prev); - }; - for (const listener of this.#activateListeners) - listener(newToken); - } - /** Compute the current aggregate value from internal state. */ - #materialize() { - switch (this.kind) { - case "count": - return this.#values.size; - case "sum": - // `#sumTotal` is kept incrementally in sync on activate/deactivate. - return this.#sumTotal; - case "min": - return this.#scanExtremum("min"); - case "max": - return this.#scanExtremum("max"); - case "collect": - // Fresh array per emit so downstream snapshots are not affected by - // later activations — see the "fresh array" test in - // `aggregate.test.ts`. - return [...this.#values.values()]; - } - } - /** - * Scan the current value set for the min or max. - * - * Returns `0` for the empty set (see module header for rationale) so - * downstream rules don't have to special-case `undefined`. Non-numeric - * values are skipped — if the caller aggregates `min` over a string - * binding, that is a wiring bug; the best recoverable behaviour is to - * ignore the non-numeric entries rather than emit `NaN`. - */ - #scanExtremum(which) { - if (this.#values.size === 0) - return 0; - let best = null; - for (const v of this.#values.values()) { - if (typeof v !== "number") - continue; - if (best === null) { - best = v; - } - else if (which === "min" ? v < best : v > best) { - best = v; - } - }; - return best ?? 0; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRO2dCQUFFO1lBQzNCLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtnQkFDakIsSUFBSSxHQUFHLENBQUM7WUFDVjtpQkFBTyxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUU7Z0JBQ2hELElBQUksR0FBRyxDQUFDO1lBQ1Y7UUFDRjtRQUNBLE9BQU8sSUFBSSxJQUFJLENBQUM7SUFDbEIiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9hZ2dyZWdhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBZ2dyZWdhdGlvbk5vZGUg4oCUIG1haW50YWlucyBhIHJ1bm5pbmcgYWdncmVnYXRlIG92ZXIgbWF0Y2ggYmluZGluZ3MgYW5kXG4gKiBlbWl0cyBhIHNpbmdsZSBcImFnZ3JlZ2F0ZSB0b2tlblwiIGRvd25zdHJlYW0gd2hvc2UgYmluZGluZyBmb3IgdGhlIHJlc3VsdFxuICogdmFyaWFibGUgcmVmbGVjdHMgdGhlIGN1cnJlbnQgYWdncmVnYXRlIHZhbHVlLlxuICpcbiAqIFBlciBgcGFja2FnZXMvcmV0ZS9TUEVDLm1kIMKnUmV0ZSBJSSBSZWZlcmVuY2UgVGFyZ2V0YCAodGFibGUgcm93XG4gKiBcIkFnZ3JlZ2F0aW9uTm9kZVwiKSwgc3VwcG9ydGVkIGFnZ3JlZ2F0b3JzIGFyZTpcbiAqXG4gKiAgIC0gYGNvdW50YCAgIOKAlCBudW1iZXIgb2YgaW5wdXQgbWF0Y2hlcyAoTygxKSB1cGRhdGUpLlxuICogICAtIGBzdW1gICAgICDigJQgbnVtZXJpYyBzdW0gKE8oMSkgdXBkYXRlLCBpbmNyZW1lbnRhbCBvbiBib3RoIHNpZGVzKS5cbiAqICAgLSBgbWluYCAgICAg4oCUIG1pbmltdW0gbnVtZXJpYyB2YWx1ZSAoTyhuKSBzY2FuIG9uIHVwZGF0ZTsgc2VlIG5vdGUpLlxuICogICAtIGBtYXhgICAgICDigJQgbWF4aW11bSBudW1lcmljIHZhbHVlIChPKG4pIHNjYW4gb24gdXBkYXRlOyBzZWUgbm90ZSkuXG4gKiAgIC0gYGNvbGxlY3RgIOKAlCBhcnJheSBvZiBhbGwgdmFsdWVzICh1bnNvcnRlZDsgTyhuKSBjb3B5IHBlciBlbWl0KS5cbiAqXG4gKiAjIyMgRG93bnN0cmVhbSBlbWlzc2lvbiBwcm90b2NvbFxuICpcbiAqIEFuIEFnZ3JlZ2F0aW9uTm9kZSBhbHdheXMgaGFzICpleGFjdGx5IG9uZSogYWN0aXZlIGFnZ3JlZ2F0ZSB0b2tlbiBhdCBhXG4gKiB0aW1lIGFmdGVyIHtAbGluayBpbml0fSBoYXMgYmVlbiBjYWxsZWQuIFdoZW4gdGhlIGFnZ3JlZ2F0ZSB2YWx1ZVxuICogY2hhbmdlcywgdGhlIG5vZGU6XG4gKlxuICogICAxLiBEZWFjdGl2YXRlcyB0aGUgcHJldmlvdXMgYWdncmVnYXRlIHRva2VuIChsaXN0ZW5lcnMgZmlyZSkuXG4gKiAgIDIuIEFjdGl2YXRlcyBhIGZyZXNoIHRva2VuIGNhcnJ5aW5nIHRoZSBuZXcgdmFsdWUgKGxpc3RlbmVycyBmaXJlKS5cbiAqXG4gKiBUaGlzIG1hdGNoZXMgaG93IGRvd25zdHJlYW0gQmV0YU1lbW9yeS9Kb2luTm9kZS9Qcm9kdWN0aW9uTm9kZSBoYW5kbGVcbiAqIHVwZGF0ZSBzZW1hbnRpY3Mg4oCUIHRoZXkgcmVseSBvbiBkZWFjdGl2YXRlLXRoZW4tYWN0aXZhdGUsIG5vdCBvbiB0b2tlblxuICogbXV0YXRpb24uIHtAbGluayBUb2tlbn0gaXMgaW1tdXRhYmxlIGJ5IGNvbnZlbnRpb24sIHNvIHdlIGFsbG9jYXRlIGEgbmV3XG4gKiB0b2tlbiBvbiBldmVyeSBjaGFuZ2UgcmF0aGVyIHRoYW4gbXV0YXRpbmcgYGJpbmRpbmdzYC5cbiAqXG4gKiAjIyMgSW5jcmVtZW50YWwgc3RyYXRlZ3lcbiAqXG4gKiBGb3IgYHN1bWAsIHRoZSBub2RlIHRyYWNrcyBhIHJ1bm5pbmcgdG90YWwgYW5kIHVwZGF0ZXMgYnkgK3ZhbHVlIG9uXG4gKiBhY3RpdmF0ZSAvIOKIknZhbHVlIG9uIGRlYWN0aXZhdGUuIFRoaXMgYXZvaWRzIGEgZnVsbCBzY2FuIG9mIHRoZSBpbnB1dFxuICogc2V0IG9uIGV2ZXJ5IHJldHJhY3QsIHdoaWNoIGlzIHRoZSByZXF1aXJlbWVudCBjYWxsZWQgb3V0IGZvciBsYXJnZVxuICogbWF0Y2ggc2V0cy5cbiAqXG4gKiBGb3IgYGNvdW50YCwgdGhlIHNpemUgb2YgdGhlIHVuZGVybHlpbmcgdmFsdWUgbWFwIGlzIE8oMSkgdG8gcmVhZC5cbiAqXG4gKiBGb3IgYG1pbmAgLyBgbWF4YCwgd2Ugc2NhbiB0aGUgY3VycmVudCB2YWx1ZSBzZXQgb24gZWFjaCB1cGRhdGUuIEFcbiAqIHNvcnRlZCBtdWx0aXNldCB3b3VsZCBnaXZlIE8obG9nIG4pIHVwZGF0ZSBidXQgYXQgdGhlIGNvc3Qgb2ZcbiAqIHNpZ25pZmljYW50IHN0cnVjdHVyYWwgY29tcGxleGl0eTsgdGhlIHNjYW4gaXMgZmFzdCAodGlnaHQgaW5uZXIgbG9vcFxuICogb3ZlciBhIGBNYXBgKSBmb3IgdGhlIG1hdGNoLXNldCBzaXplcyB0aGlzIGVuZ2luZSBpcyBkZXNpZ25lZCBmb3JcbiAqIChodW5kcmVkcyB0byBsb3cgdGhvdXNhbmRzIG9mIHRva2VucyBwZXIgbm9kZSkuIFRoZSBzY2FsYWJpbGl0eSB0ZXN0XG4gKiBpbiBgYWdncmVnYXRlLnRlc3QudHNgIGV4ZXJjaXNlcyAxMDAwIGFjdGl2YXRpb25zIHBlciBhZ2dyZWdhdG9yIHRvXG4gKiBrZWVwIHRoaXMgYXNzdW1wdGlvbiBob25lc3QuXG4gKlxuICogRm9yIGBjb2xsZWN0YCwgZWFjaCBlbWlzc2lvbiBjb3BpZXMgdGhlIHZhbHVlIGxpc3QgaW50byBhIGZyZXNoIGFycmF5XG4gKiBzbyBkb3duc3RyZWFtIGNvZGUgY2FuIHNhZmVseSBzbmFwc2hvdCBiaW5kaW5ncyB3aXRob3V0IG9ic2VydmluZ1xuICogbGF0ZXIgbXV0YXRpb25zLlxuICpcbiAqICMjIyBFbXB0eS1zZXQgc2VtYW50aWNzXG4gKlxuICogV2l0aCB6ZXJvIGlucHV0IG1hdGNoZXMsIHRoZSBub2RlIGVtaXRzOlxuICogICAtIGBjb3VudGAgICDihpIgYDBgXG4gKiAgIC0gYHN1bWAgICAgIOKGkiBgMGBcbiAqICAgLSBgbWluYCAgICAg4oaSIGAwYCAgKG5vIG5hdHVyYWwgXCJpZGVudGl0eVwiOyBgMGAgY2hvc2VuIGZvciBjb25zaXN0ZW5jeVxuICogICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGBzdW1gLCBzbyBydWxlcyBjYW4gdGVzdCBgcmVzdWx0ID4gMGAgc2FmZWx5KVxuICogICAtIGBtYXhgICAgICDihpIgYDBgXG4gKiAgIC0gYGNvbGxlY3RgIOKGkiBgW11gXG4gKlxuICogQ2FsbGVycyB0aGF0IG5lZWQgdG8gZGlzdGluZ3Vpc2ggXCJubyBtYXRjaGVzXCIgZnJvbSBcIm1pbiBoYXBwZW5zIHRvIGJlXG4gKiB6ZXJvXCIgc2hvdWxkIGNvbWJpbmUgdGhlIGFnZ3JlZ2F0aW9uIHdpdGggYSBjb3VudCBjb25kaXRpb24gb3IgdXNlIGFuXG4gKiBFeGlzdGVudGlhbE5vZGUgdXBzdHJlYW0uXG4gKi9cbmltcG9ydCB7IFRva2VuLCB0eXBlIEJpbmRpbmdzIH0gZnJvbSBcIi4vYmV0YS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBdHRyS2V5LCBGYWN0VmFsdWUgfSBmcm9tIFwiLi93bS5qc1wiO1xuXG4vKiogU3VwcG9ydGVkIGFnZ3JlZ2F0b3Iga2luZHMuIEV4dGVuZGluZyB0aGlzIGxpc3QgcmVxdWlyZXMgYSBuZXcgY2FzZSBpblxuICogIGBhcHBseU9uQWN0aXZhdGVgIC8gYGFwcGx5T25EZWFjdGl2YXRlYCAvIGBtYXRlcmlhbGl6ZWAuICovXG5leHBvcnQgdHlwZSBBZ2dyZWdhdG9yS2luZCA9IFwiY291bnRcIiB8IFwic3VtXCIgfCBcIm1pblwiIHwgXCJtYXhcIiB8IFwiY29sbGVjdFwiO1xuXG50eXBlIEFjdGl2YXRlTGlzdGVuZXIgPSAodG9rZW46IFRva2VuKSA9PiB2b2lkO1xudHlwZSBEZWFjdGl2YXRlTGlzdGVuZXIgPSAodG9rZW46IFRva2VuKSA9PiB2b2lkO1xuXG4vKipcbiAqIFN5bnRoZXRpYyBmYWN0IGNhcnJpZWQgYnkgZXZlcnkgYWdncmVnYXRlIHRva2VuLlxuICpcbiAqIEFnZ3JlZ2F0ZSB0b2tlbnMgZG8gbm90IGRlcml2ZSBmcm9tIGEgc2luZ2xlIHdvcmtpbmctbWVtb3J5IGZhY3Qg4oCUIHRoZXlcbiAqIHJlcHJlc2VudCBhIHN1bW1hcnkgb2YgbWFueS4gRG93bnN0cmVhbSBub2RlcyB0aGF0IHdhbGsgYC5mYWN0YCBmb3JcbiAqIGRpYWdub3N0aWNzIHdpbGwgc2VlIHRoaXMgc2VudGluZWwgcmF0aGVyIHRoYW4gYW4gYXJiaXRyYXJ5IG9uZSBvZiB0aGVcbiAqIGNvbnRyaWJ1dGluZyBmYWN0cywgd2hpY2ggd291bGQgYmUgbWlzbGVhZGluZy5cbiAqXG4gKiBUaGUgaWQgYC0xYCBpcyBvdXRzaWRlIHRoZSByYW5nZSBvZiBhbnkgYXBwbGljYXRpb24tYXNzaWduZWQgZW50aXR5IGlkXG4gKiAoYWxsIHJlYWwgaWRzIGFyZSBhbGxvY2F0ZWQgYXMgbm9uLW5lZ2F0aXZlIGludGVnZXJzIOKAlCBzZWVcbiAqIGBzY2hlbWEudHNgKSwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBjb2xsaXNpb24uXG4gKi9cbmNvbnN0IEFHR19GQUNUID0ge1xuICBpZDogLTEgYXMgdW5rbm93biBhcyBFbnRpdHlJZCxcbiAgYXR0cjogXCJfX2FnZ19fXCIgYXMgQXR0cktleSxcbiAgdmFsdWU6IG51bGwgYXMgRmFjdFZhbHVlLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNsYXNzIEFnZ3JlZ2F0aW9uTm9kZSB7XG4gIHJlYWRvbmx5ICNhY3RpdmF0ZUxpc3RlbmVyczogQWN0aXZhdGVMaXN0ZW5lcltdID0gW107XG4gIHJlYWRvbmx5ICNkZWFjdGl2YXRlTGlzdGVuZXJzOiBEZWFjdGl2YXRlTGlzdGVuZXJbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBBbGwgY3VycmVudCBpbnB1dCBtYXRjaGVzIGtleWVkIGJ5IHRoZWlyIHVwc3RyZWFtIHRva2VuLCBtYXBwZWQgdG9cbiAgICogdGhlIGJpbmRpbmcgdmFsdWUgdGhpcyBub2RlIGlzIGFnZ3JlZ2F0aW5nIG92ZXIuXG4gICAqXG4gICAqIEtleWVkIGJ5IHRoZSB0b2tlbiByZWZlcmVuY2UgKG5vdCBieSBiaW5kaW5nIHZhbHVlKSBzbyB0aGF0IHR3b1xuICAgKiB0b2tlbnMgY29udHJpYnV0aW5nIHRoZSBzYW1lIHZhbHVlIOKAlCBlLmcuIHR3byB1bml0cyBib3RoIGF0IGBocD0xMGBcbiAgICog4oCUIGFyZSB0cmFja2VkIGluZGVwZW5kZW50bHkgYW5kIGJvdGggY29udHJpYnV0ZSB0byBgY291bnRgLCBgc3VtYCxcbiAgICogYGNvbGxlY3RgLCBldGMuXG4gICAqL1xuICByZWFkb25seSAjdmFsdWVzID0gbmV3IE1hcDxUb2tlbiwgRmFjdFZhbHVlPigpO1xuXG4gIC8qKiBSdW5uaW5nIHN1bSwga2VwdCBpbiBzeW5jIHdpdGgge0BsaW5rICN2YWx1ZXN9IGZvciBPKDEpIHVwZGF0ZSBvbiBzdW0uICovXG4gICNzdW1Ub3RhbCA9IDA7XG5cbiAgLyoqIFRoZSBjdXJyZW50bHktYWN0aXZlIGFnZ3JlZ2F0ZSB0b2tlbiBkb3duc3RyZWFtLCBvciBgbnVsbGAgaWYge0BsaW5rIGluaXR9XG4gICAqICBoYXMgbm90IHlldCBiZWVuIGNhbGxlZC4gKi9cbiAgI2N1cnJlbnRUb2tlbjogVG9rZW4gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBraW5kOiBBZ2dyZWdhdG9yS2luZCxcbiAgICAvKiogVmFyaWFibGUgbmFtZSBpbiB0aGUgaW5jb21pbmcgYmluZGluZ3Mgd2hvc2UgdmFsdWUgaXMgYWdncmVnYXRlZC4gKi9cbiAgICByZWFkb25seSBpbnB1dFZhcjogc3RyaW5nLFxuICAgIC8qKiBWYXJpYWJsZSBuYW1lIHVzZWQgaW4gdGhlIG91dGdvaW5nIGFnZ3JlZ2F0ZSB0b2tlbidzIGJpbmRpbmdzLiAqL1xuICAgIHJlYWRvbmx5IHJlc3VsdFZhcjogc3RyaW5nLFxuICApIHt9XG5cbiAgYWRkRG93bnN0cmVhbUFjdGl2YXRlKGxpc3RlbmVyOiBBY3RpdmF0ZUxpc3RlbmVyKTogdm9pZCB7XG4gICAgdGhpcy4jYWN0aXZhdGVMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICBhZGREb3duc3RyZWFtRGVhY3RpdmF0ZShsaXN0ZW5lcjogRGVhY3RpdmF0ZUxpc3RlbmVyKTogdm9pZCB7XG4gICAgdGhpcy4jZGVhY3RpdmF0ZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0IHRoZSBpbml0aWFsIGFnZ3JlZ2F0ZSB0b2tlbiAocmVmbGVjdGluZyB6ZXJvIGlucHV0IG1hdGNoZXMpLlxuICAgKlxuICAgKiBNdXN0IGJlIGNhbGxlZCBhZnRlciB3aXJpbmcgZG93bnN0cmVhbSBsaXN0ZW5lcnMuIEFnZ3JlZ2F0aW9uIG5vZGVzXG4gICAqIGRpZmZlciBmcm9tIEJldGFNZW1vcnkgLyBKb2luTm9kZSBpbiB0aGF0IHRoZXkgYWx3YXlzIGhvbGQgb25lIGFjdGl2ZVxuICAgKiBkb3duc3RyZWFtIHRva2VuIOKAlCBldmVuIHdpdGggbm8gaW5wdXRzIHRoZSBhZ2dyZWdhdGUgaXMgZGVmaW5lZFxuICAgKiAoY291bnQ9MCwgc3VtPTAsIGNvbGxlY3Q9W10pIGFuZCBydWxlcyBtYXkgbGVnaXRpbWF0ZWx5IGRlcGVuZCBvbiBpdC5cbiAgICovXG4gIGluaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jZW1pdFVwZGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCBhIG5ldyBpbnB1dCBtYXRjaCBhbmQgZW1pdCB0aGUgdXBkYXRlZCBhZ2dyZWdhdGUuXG4gICAqXG4gICAqIElkZW1wb3RlbmN5OiByZS1hY3RpdmF0aW5nIHRoZSBzYW1lIHRva2VuIHJlZmVyZW5jZSBpcyBub3Qgc3VwcG9ydGVkXG4gICAqIGJ5IHVwc3RyZWFtIGNhbGxlcnMgKEJldGFNZW1vcnkgYWx3YXlzIGRlYWN0aXZhdGVzIGJlZm9yZSByZS1hY3RpdmF0aW5nXG4gICAqIGEgY2hhbmdlZCBwYXJ0aWFsIG1hdGNoKS4gV2Ugb3ZlcndyaXRlIHNpbGVudGx5IHRvIGF2b2lkIGEgc2lsZW50XG4gICAqIGRvdWJsZS1jb3VudCBvZiBgc3VtYCBpbiB0aGF0IGRlZ2VuZXJhdGUgY2FzZSwgYnV0IHRoZSBjYWxsZXIgc2hvdWxkXG4gICAqIG5vdCByZWx5IG9uIHRoaXMuXG4gICAqL1xuICBsZWZ0QWN0aXZhdGUodG9rZW46IFRva2VuKTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLiNyZWFkVmFsdWUodG9rZW4pO1xuXG4gICAgLy8gSWYgdGhlIHRva2VuIGlzIGFscmVhZHkgdHJhY2tlZCAoc2hvdWxkbid0IGhhcHBlbiBpbiB3ZWxsLXdpcmVkXG4gICAgLy8gbmV0d29ya3MpLCBzdWJ0cmFjdCB0aGUgb2xkIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSBydW5uaW5nIHN1bSBmaXJzdFxuICAgIC8vIHNvIHRoZSBuZXcgdmFsdWUgcmVwbGFjZXMg4oCUIG5vdCBhZGRzIHRvIOKAlCB0aGUgb2xkLlxuICAgIGlmICh0aGlzLiN2YWx1ZXMuaGFzKHRva2VuKSAmJiB0aGlzLmtpbmQgPT09IFwic3VtXCIpIHtcbiAgICAgIGNvbnN0IHByZXYgPSB0aGlzLiN2YWx1ZXMuZ2V0KHRva2VuKTtcbiAgICAgIGlmICh0eXBlb2YgcHJldiA9PT0gXCJudW1iZXJcIikgdGhpcy4jc3VtVG90YWwgLT0gcHJldjtcbiAgICB9XG5cbiAgICB0aGlzLiN2YWx1ZXMuc2V0KHRva2VuLCB2YWx1ZSk7XG5cbiAgICBpZiAodGhpcy5raW5kID09PSBcInN1bVwiICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgdGhpcy4jc3VtVG90YWwgKz0gdmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy4jZW1pdFVwZGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJhY3QgYW4gaW5wdXQgbWF0Y2ggYW5kIGVtaXQgdGhlIHVwZGF0ZWQgYWdncmVnYXRlLlxuICAgKlxuICAgKiBVbmtub3duIHRva2VucyBhcmUgYSBuby1vcCBvbiB0aGUgaW50ZXJuYWwgc3RhdGUgYnV0IHN0aWxsIHRyaWdnZXIgYVxuICAgKiBkb3duc3RyZWFtIGVtaXQsIG1pcnJvcmluZyB7QGxpbmsgQmV0YU1lbW9yeS5sZWZ0RGVhY3RpdmF0ZX0ncyBsZW5pZW50XG4gICAqIGNvbnRyYWN0IOKAlCBkb3duc3RyZWFtIG1heSBoYXZlIGRlcml2ZWQgdG9rZW5zIHRoYXQgbmVlZCB0byBzZXR0bGUgdG9cbiAgICogYSBjb25zaXN0ZW50IGFnZ3JlZ2F0ZSB2YWx1ZSByZWdhcmRsZXNzLlxuICAgKi9cbiAgbGVmdERlYWN0aXZhdGUodG9rZW46IFRva2VuKTogdm9pZCB7XG4gICAgY29uc3QgaGFkID0gdGhpcy4jdmFsdWVzLmhhcyh0b2tlbik7XG4gICAgaWYgKGhhZCAmJiB0aGlzLmtpbmQgPT09IFwic3VtXCIpIHtcbiAgICAgIGNvbnN0IHByZXYgPSB0aGlzLiN2YWx1ZXMuZ2V0KHRva2VuKTtcbiAgICAgIGlmICh0eXBlb2YgcHJldiA9PT0gXCJudW1iZXJcIikgdGhpcy4jc3VtVG90YWwgLT0gcHJldjtcbiAgICB9XG4gICAgdGhpcy4jdmFsdWVzLmRlbGV0ZSh0b2tlbik7XG4gICAgdGhpcy4jZW1pdFVwZGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgdGhlIGFnZ3JlZ2F0aW9uIHZhbHVlIGZyb20gdGhlIGdpdmVuIHRva2VuJ3MgYmluZGluZ3MuXG4gICAqXG4gICAqIEZhbGxzIGJhY2sgdG8gYDBgIHdoZW4gdGhlIGJpbmRpbmcgaXMgbWlzc2luZyBzbyB0aGF0IGNhbGxlcnMgd2hvXG4gICAqIGluY29ycmVjdGx5IHdpcmUgdGhlIG5vZGUgZG9uJ3QgY3Jhc2g7IGFnZ3JlZ2F0ZWQgYmluZGluZ3MgdGhhdCBhcmVcbiAgICogbWlzc2luZyB3b3VsZCBiZSBhIG5ldHdvcmstd2lyaW5nIGJ1ZyB3aGljaCBzdXJmYWNlcyBhcyBcInN1bSBub3RcbiAgICogY2hhbmdpbmdcIiByYXRoZXIgdGhhbiBhbiBvcGFxdWUgYE5hTmAuXG4gICAqL1xuICAjcmVhZFZhbHVlKHRva2VuOiBUb2tlbik6IEZhY3RWYWx1ZSB7XG4gICAgY29uc3QgdiA9IHRva2VuLmJpbmRpbmdzW3RoaXMuaW5wdXRWYXJdO1xuICAgIHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAwIDogdjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlIHRoZSBwcmV2aW91cyBhZ2dyZWdhdGUgdG9rZW4gKGlmIGFueSkgYW5kIGFjdGl2YXRlIGEgbmV3XG4gICAqIG9uZSBjYXJyeWluZyB0aGUgZnJlc2hseS1jb21wdXRlZCByZXN1bHQuXG4gICAqL1xuICAjZW1pdFVwZGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLiNtYXRlcmlhbGl6ZSgpO1xuICAgIGNvbnN0IGJpbmRpbmdzOiBCaW5kaW5ncyA9IHsgW3RoaXMucmVzdWx0VmFyXTogcmVzdWx0IH07XG4gICAgY29uc3QgbmV3VG9rZW4gPSBuZXcgVG9rZW4obnVsbCwgQUdHX0ZBQ1QsIGJpbmRpbmdzKTtcblxuICAgIC8vIERlYWN0aXZhdGUgdGhlIG9sZCBhZ2dyZWdhdGUgdG9rZW4gZmlyc3QsIHNvIGRvd25zdHJlYW0gc2VlcyBhIGNsZWFuXG4gICAgLy8gdHJhbnNpdGlvbiAoZGVhY3RpdmF0ZS10aGVuLWFjdGl2YXRlKSByYXRoZXIgdGhhbiB0d28gc2ltdWx0YW5lb3VzbHlcbiAgICAvLyBhY3RpdmUgc3VtbWFyaWVzIG9mIHRoZSBzYW1lIGlucHV0IHNldC5cbiAgICBjb25zdCBwcmV2ID0gdGhpcy4jY3VycmVudFRva2VuO1xuICAgIHRoaXMuI2N1cnJlbnRUb2tlbiA9IG5ld1Rva2VuO1xuXG4gICAgaWYgKHByZXYgIT09IG51bGwpIHtcbiAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy4jZGVhY3RpdmF0ZUxpc3RlbmVycykgbGlzdGVuZXIocHJldik7XG4gICAgfVxuICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy4jYWN0aXZhdGVMaXN0ZW5lcnMpIGxpc3RlbmVyKG5ld1Rva2VuKTtcbiAgfVxuXG4gIC8qKiBDb21wdXRlIHRoZSBjdXJyZW50IGFnZ3JlZ2F0ZSB2YWx1ZSBmcm9tIGludGVybmFsIHN0YXRlLiAqL1xuICAjbWF0ZXJpYWxpemUoKTogRmFjdFZhbHVlIHtcbiAgICBzd2l0Y2ggKHRoaXMua2luZCkge1xuICAgICAgY2FzZSBcImNvdW50XCI6XG4gICAgICAgIHJldHVybiB0aGlzLiN2YWx1ZXMuc2l6ZTtcblxuICAgICAgY2FzZSBcInN1bVwiOlxuICAgICAgICAvLyBgI3N1bVRvdGFsYCBpcyBrZXB0IGluY3JlbWVudGFsbHkgaW4gc3luYyBvbiBhY3RpdmF0ZS9kZWFjdGl2YXRlLlxuICAgICAgICByZXR1cm4gdGhpcy4jc3VtVG90YWw7XG5cbiAgICAgIGNhc2UgXCJtaW5cIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuI3NjYW5FeHRyZW11bShcIm1pblwiKTtcblxuICAgICAgY2FzZSBcIm1heFwiOlxuICAgICAgICByZXR1cm4gdGhpcy4jc2NhbkV4dHJlbXVtKFwibWF4XCIpO1xuXG4gICAgICBjYXNlIFwiY29sbGVjdFwiOlxuICAgICAgICAvLyBGcmVzaCBhcnJheSBwZXIgZW1pdCBzbyBkb3duc3RyZWFtIHNuYXBzaG90cyBhcmUgbm90IGFmZmVjdGVkIGJ5XG4gICAgICAgIC8vIGxhdGVyIGFjdGl2YXRpb25zIOKAlCBzZWUgdGhlIFwiZnJlc2ggYXJyYXlcIiB0ZXN0IGluXG4gICAgICAgIC8vIGBhZ2dyZWdhdGUudGVzdC50c2AuXG4gICAgICAgIHJldHVybiBbLi4udGhpcy4jdmFsdWVzLnZhbHVlcygpXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2NhbiB0aGUgY3VycmVudCB2YWx1ZSBzZXQgZm9yIHRoZSBtaW4gb3IgbWF4LlxuICAgKlxuICAgKiBSZXR1cm5zIGAwYCBmb3IgdGhlIGVtcHR5IHNldCAoc2VlIG1vZHVsZSBoZWFkZXIgZm9yIHJhdGlvbmFsZSkgc29cbiAgICogZG93bnN0cmVhbSBydWxlcyBkb24ndCBoYXZlIHRvIHNwZWNpYWwtY2FzZSBgdW5kZWZpbmVkYC4gTm9uLW51bWVyaWNcbiAgICogdmFsdWVzIGFyZSBza2lwcGVkIOKAlCBpZiB0aGUgY2FsbGVyIGFnZ3JlZ2F0ZXMgYG1pbmAgb3ZlciBhIHN0cmluZ1xuICAgKiBiaW5kaW5nLCB0aGF0IGlzIGEgd2lyaW5nIGJ1ZzsgdGhlIGJlc3QgcmVjb3ZlcmFibGUgYmVoYXZpb3VyIGlzIHRvXG4gICAqIGlnbm9yZSB0aGUgbm9uLW51bWVyaWMgZW50cmllcyByYXRoZXIgdGhhbiBlbWl0IGBOYU5gLlxuICAgKi9cbiAgI3NjYW5FeHRyZW11bSh3aGljaDogXCJtaW5cIiB8IFwibWF4XCIpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLiN2YWx1ZXMuc2l6ZSA9PT0gMCkgcmV0dXJuIDA7XG4gICAgbGV0IGJlc3Q6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIGZvciAoY29uc3QgdiBvZiB0aGlzLiN2YWx1ZXMudmFsdWVzKCkpIHtcbiAgICAgIGlmICh0eXBlb2YgdiAhPT0gXCJudW1iZXJcIikgY29udGludWU7XG4gICAgICBpZiAoYmVzdCA9PT0gbnVsbCkge1xuICAgICAgICBiZXN0ID0gdjtcbiAgICAgIH0gZWxzZSBpZiAod2hpY2ggPT09IFwibWluXCIgPyB2IDwgYmVzdCA6IHYgPiBiZXN0KSB7XG4gICAgICAgIGJlc3QgPSB2O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmVzdCA/PyAwO1xuICB9XG59XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvcmV0ZS9kaXN0L2FnZ3JlZ2F0ZS5qcyJ9 diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/1594dee83aebde54195c5a79edc06f3158e84895 b/KMr2_dqTOvh2R-Vg1E6cO/ssr/1594dee83aebde54195c5a79edc06f3158e84895 deleted file mode 100644 index fbb2b61..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/1594dee83aebde54195c5a79edc06f3158e84895 +++ /dev/null @@ -1,50 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "RateLimiter", { enumerable: true, configurable: true, get(){ try { return RateLimiter } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "getAllowedOrigins", { enumerable: true, configurable: true, get(){ try { return getAllowedOrigins } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "checkOrigin", { enumerable: true, configurable: true, get(){ try { return checkOrigin } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "MAX_MESSAGE_BYTES", { enumerable: true, configurable: true, get(){ try { return MAX_MESSAGE_BYTES } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "checkMessageSize", { enumerable: true, configurable: true, get(){ try { return checkMessageSize } catch {} }}); -class RateLimiter { - #capacity; - #refillRate; - // tokens per second - #tokens; - #lastRefill; - constructor(capacity = 20, refillRate = 100) { - this.#capacity = capacity; - this.#refillRate = refillRate; - this.#tokens = capacity; - this.#lastRefill = performance.now(); - } - /** - * Returns true if the message is allowed; false if rate-limited. - * Refills tokens based on elapsed time since last call. - */ - consume() { - const now = performance.now(); - const elapsed = (now - this.#lastRefill) / 1e3; - this.#tokens = Math.min( - this.#capacity, - this.#tokens + elapsed * this.#refillRate - ); - this.#lastRefill = now; - if (this.#tokens < 1) return false; - this.#tokens -= 1; - return true; - } -}; -function getAllowedOrigins() { - const env = process.env.ALLOWED_ORIGINS ?? "http://localhost:5173"; - return new Set(env.split(",").map((o) => o.trim())); -}; -function checkOrigin(requestOrigin) { - if (!requestOrigin) return false; - return getAllowedOrigins().has(requestOrigin); -}; -const MAX_MESSAGE_BYTES = 64 * 1024; -function checkMessageSize(msg) { - const size = typeof msg === "string" ? Buffer.byteLength(msg, "utf8") : msg.length; - return size <= MAX_MESSAGE_BYTES; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7QUFPTyxNQUFNLFlBQVk7QUFBQSxFQUNkO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFDVDtBQUFBLEVBQ0E7QUFBQSxFQUVBLFlBQVksV0FBVyxJQUFJLGFBQWEsS0FBSztBQUMzQyxTQUFLLFlBQVk7QUFDakIsU0FBSyxjQUFjO0FBQ25CLFNBQUssVUFBVTtBQUNmLFNBQUssY0FBYyxZQUFZLElBQUk7QUFBQSxFQUNyQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNQSxVQUFtQjtBQUNqQixVQUFNLE1BQU0sWUFBWSxJQUFJO0FBQzVCLFVBQU0sV0FBVyxNQUFNLEtBQUssZUFBZTtBQUMzQyxTQUFLLFVBQVUsS0FBSztBQUFBLE1BQ2xCLEtBQUs7QUFBQSxNQUNMLEtBQUssVUFBVSxVQUFVLEtBQUs7QUFBQSxJQUNoQztBQUNBLFNBQUssY0FBYztBQUVuQixRQUFJLEtBQUssVUFBVSxFQUFHLFFBQU87QUFDN0IsU0FBSyxXQUFXO0FBQ2hCLFdBQU87QUFBQSxFQUNUO0FBQ0Y7QUFNTyxTQUFTLG9CQUFpQztBQUMvQyxRQUFNLE1BQU0sUUFBUSxJQUFJLG1CQUFtQjtBQUMzQyxTQUFPLElBQUksSUFBSSxJQUFJLE1BQU0sR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDcEQ7QUFNTyxTQUFTLFlBQVksZUFBdUM7QUFDakUsTUFBSSxDQUFDLGNBQWUsUUFBTztBQUMzQixTQUFPLGtCQUFrQixFQUFFLElBQUksYUFBYTtBQUM5QztBQU1PLE1BQU0sb0JBQW9CLEtBQUs7QUFLL0IsU0FBUyxpQkFBaUIsS0FBK0I7QUFDOUQsUUFBTSxPQUNKLE9BQU8sUUFBUSxXQUFXLE9BQU8sV0FBVyxLQUFLLE1BQU0sSUFBSSxJQUFJO0FBQ2pFLFNBQU8sUUFBUTtBQUNqQiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsibWlkZGxld2FyZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBXZWJTb2NrZXQgbWlkZGxld2FyZTogcmF0ZSBsaW1pdGluZywgb3JpZ2luIGFsbG93LWxpc3QsIG1lc3NhZ2Ugc2l6ZSBjYXAuXG4vLyBTZWUgUFJPVE9DT0wubWQgZm9yIGZ1bGwgc3BlYy5cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSYXRlIGxpbWl0ZXIg4oCUIHRva2VuLWJ1Y2tldCBhbGdvcml0aG0sIHBlciBjb25uZWN0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGNsYXNzIFJhdGVMaW1pdGVyIHtcbiAgcmVhZG9ubHkgI2NhcGFjaXR5OiBudW1iZXI7XG4gIHJlYWRvbmx5ICNyZWZpbGxSYXRlOiBudW1iZXI7IC8vIHRva2VucyBwZXIgc2Vjb25kXG4gICN0b2tlbnM6IG51bWJlcjtcbiAgI2xhc3RSZWZpbGw6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihjYXBhY2l0eSA9IDIwLCByZWZpbGxSYXRlID0gMTAwKSB7XG4gICAgdGhpcy4jY2FwYWNpdHkgPSBjYXBhY2l0eTtcbiAgICB0aGlzLiNyZWZpbGxSYXRlID0gcmVmaWxsUmF0ZTtcbiAgICB0aGlzLiN0b2tlbnMgPSBjYXBhY2l0eTtcbiAgICB0aGlzLiNsYXN0UmVmaWxsID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBtZXNzYWdlIGlzIGFsbG93ZWQ7IGZhbHNlIGlmIHJhdGUtbGltaXRlZC5cbiAgICogUmVmaWxscyB0b2tlbnMgYmFzZWQgb24gZWxhcHNlZCB0aW1lIHNpbmNlIGxhc3QgY2FsbC5cbiAgICovXG4gIGNvbnN1bWUoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgbm93ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgY29uc3QgZWxhcHNlZCA9IChub3cgLSB0aGlzLiNsYXN0UmVmaWxsKSAvIDEwMDA7IC8vIHNlY29uZHNcbiAgICB0aGlzLiN0b2tlbnMgPSBNYXRoLm1pbihcbiAgICAgIHRoaXMuI2NhcGFjaXR5LFxuICAgICAgdGhpcy4jdG9rZW5zICsgZWxhcHNlZCAqIHRoaXMuI3JlZmlsbFJhdGUsXG4gICAgKTtcbiAgICB0aGlzLiNsYXN0UmVmaWxsID0gbm93O1xuXG4gICAgaWYgKHRoaXMuI3Rva2VucyA8IDEpIHJldHVybiBmYWxzZTtcbiAgICB0aGlzLiN0b2tlbnMgLT0gMTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE9yaWdpbiBhbGxvdy1saXN0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbG93ZWRPcmlnaW5zKCk6IFNldDxzdHJpbmc+IHtcbiAgY29uc3QgZW52ID0gcHJvY2Vzcy5lbnYuQUxMT1dFRF9PUklHSU5TID8/IFwiaHR0cDovL2xvY2FsaG9zdDo1MTczXCI7XG4gIHJldHVybiBuZXcgU2V0KGVudi5zcGxpdChcIixcIikubWFwKChvKSA9PiBvLnRyaW0oKSkpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSB3aGVuIHJlcXVlc3RPcmlnaW4gaXMgcHJlc2VudCBhbmQgaW4gdGhlIGFsbG93LWxpc3QuXG4gKiBBIG51bGwvZW1wdHkgb3JpZ2luIGlzIGFsd2F5cyByZWplY3RlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrT3JpZ2luKHJlcXVlc3RPcmlnaW46IHN0cmluZyB8IG51bGwpOiBib29sZWFuIHtcbiAgaWYgKCFyZXF1ZXN0T3JpZ2luKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBnZXRBbGxvd2VkT3JpZ2lucygpLmhhcyhyZXF1ZXN0T3JpZ2luKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBNZXNzYWdlIHNpemUgY2FwIOKAlCA2NCBLQlxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBNQVhfTUVTU0FHRV9CWVRFUyA9IDY0ICogMTAyNDsgLy8gNjQgS0JcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgbWVzc2FnZSBpcyB3aXRoaW4gdGhlIDY0IEtCIGxpbWl0OyBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja01lc3NhZ2VTaXplKG1zZzogc3RyaW5nIHwgQnVmZmVyKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNpemUgPVxuICAgIHR5cGVvZiBtc2cgPT09IFwic3RyaW5nXCIgPyBCdWZmZXIuYnl0ZUxlbmd0aChtc2csIFwidXRmOFwiKSA6IG1zZy5sZW5ndGg7XG4gIHJldHVybiBzaXplIDw9IE1BWF9NRVNTQUdFX0JZVEVTO1xufVxuIl0sImZpbGUiOiIvc3JjL21pZGRsZXdhcmUudHMifQ== diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/189749634973e9d7cce1d22ca0415a5f155605a2 b/KMr2_dqTOvh2R-Vg1E6cO/ssr/189749634973e9d7cce1d22ca0415a5f155605a2 deleted file mode 100644 index fa1c84e..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/189749634973e9d7cce1d22ca0415a5f155605a2 +++ /dev/null @@ -1,72 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "FilterNode", { enumerable: true, configurable: true, get(){ try { return FilterNode } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/registry.js", {"importedNames":["UnknownPredicateError"]}); -class FilterNode { - #specs; - #registry; - #activateListeners = []; - #deactivateListeners = []; - /** - * Tokens that previously passed every predicate. Used to route - * deactivations: only forwarded tokens require downstream withdrawal. - * Identity (reference) tracking matches the rest of the beta network. - */ - #passedTokens = new Set(); - /** - * @throws UnknownPredicateError if any spec names a predicate that is not - * registered on `registry`. Validation happens up-front so wiring errors - * surface at construction time, not at the first activation. - */ - constructor(specs, registry) { - registry.verify(specs.map((s) => s.predicate)); - this.#specs = specs; - this.#registry = registry; - } - /** Subscribe to forwarded tokens. Listeners fire in registration order. */ - addDownstreamActivate(listener) { - this.#activateListeners.push(listener); - } - /** Subscribe to withdrawals. Listeners fire in registration order. */ - addDownstreamDeactivate(listener) { - this.#deactivateListeners.push(listener); - } - /** - * Evaluate the conjunction of registered predicates against `token`. - * Forwards downstream only if every predicate returns `true`. - */ - leftActivate(token) { - if (!this.#allPass(token.bindings)) - return; - this.#passedTokens.add(token); - for (const listener of this.#activateListeners) { - listener(token); - } - } - /** - * Withdraw a token. Downstream listeners fire only if the token was - * previously forwarded — tokens blocked by the filter never reached - * downstream consumers and must not produce phantom deactivations. - */ - leftDeactivate(token) { - if (!this.#passedTokens.delete(token)) - return; - for (const listener of this.#deactivateListeners) { - listener(token); - } - } - #allPass(bindings) { - for (const spec of this.#specs) { - const predFn = this.#registry.get(spec.predicate); - // Constructor-time verification rules this out, but the runtime guard - // keeps the failure mode loud rather than silent if a predicate is - // somehow unregistered between construction and activation. - if (!predFn) - throw new __vite_ssr_import_0__.UnknownPredicateError(spec.predicate); - if (!predFn(bindings, spec.args)) - return false; - }; - return true; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQTBCQTtBQW9CTSxNQUFPLFVBQVU7SUFDWixNQUFNO0lBQ04sU0FBUztJQUNULGtCQUFrQixHQUF1QixFQUFFO0lBQzNDLG9CQUFvQixHQUF5QixFQUFFO0lBQ3hEOzs7OztJQUtTLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBUztJQUV6Qzs7Ozs7SUFLQSxZQUFZLEtBQTRCLEVBQUUsUUFBMkI7UUFDbkUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLO1FBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUTtJQUMzQjtJQUVBO0lBQ0EscUJBQXFCLENBQUMsUUFBMEI7UUFDOUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDeEM7SUFFQTtJQUNBLHVCQUF1QixDQUFDLFFBQTRCO1FBQ2xELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzFDO0lBRUE7Ozs7SUFJQSxZQUFZLENBQUMsS0FBWTtRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQUU7UUFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQzdCLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzlDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDakI7SUFDRjtJQUVBOzs7OztJQUtBLGNBQWMsQ0FBQyxLQUFZO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFBRTtRQUN2QyxLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUNoRCxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ2pCO0lBQ0Y7SUFFQSxRQUFRLENBQUMsUUFBa0I7UUFDekIsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQzlCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDakQ7WUFDQTtZQUNBO1lBQ0EsSUFBSSxDQUFDLE1BQU07Z0JBQUUsTUFBTSxJQUFJLDJDQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDNUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFBRSxPQUFPLEtBQUs7UUFDaEQ7UUFDQSxPQUFPLElBQUk7SUFDYiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2NvbmRpdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZpbHRlck5vZGUg4oCUIGFwcGxpZXMgcmVnaXN0ZXJlZCBwcmVkaWNhdGVzIHRvIHRva2Vucy5cbiAqXG4gKiBQZXIgYHBhY2thZ2VzL3JldGUvU1BFQy5tZCDCp0pTT04gUnVsZSBTY2hlbWFgIGZpbHRlcnMgYXJlIGRlY2xhcmVkIGFzXG4gKiBgeyBwcmVkaWNhdGU6IHN0cmluZywgYXJnczogdW5rbm93bltdIH1gIHBhaXJzIGFuZCBleGVjdXRlZCBhZ2FpbnN0IHRoZVxuICogY3VycmVudCB2YXJpYWJsZSBiaW5kaW5ncyBvZiBhIHRva2VuLiBQcmVkaWNhdGVzIHRoZW1zZWx2ZXMgbGl2ZSBpbiBhXG4gKiB7QGxpbmsgUHJlZGljYXRlUmVnaXN0cnl9IHNvIHJ1bGUgZGVmaW5pdGlvbnMgcmVtYWluIHB1cmUgZGF0YSDigJQgdGhlcmUgYXJlXG4gKiBubyBpbmxpbmUgY2xvc3VyZXMsIG5vIGBldmFsYCwgbm8gYEZ1bmN0aW9uYC1mcm9tLXN0cmluZy5cbiAqXG4gKiBBIEZpbHRlck5vZGUgc2l0cyBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBiZXRhIG5ldHdvcmsgYmV0d2VlbiBhbiB1cHN0cmVhbVxuICogc291cmNlICh7QGxpbmsgSm9pbk5vZGV9IG9yIHtAbGluayBCZXRhTWVtb3J5fSkgYW5kIGEgZG93bnN0cmVhbSBjb25zdW1lclxuICogKGFub3RoZXIgYmV0YSBtZW1vcnkgb3IgYSB7QGxpbmsgUHJvZHVjdGlvbk5vZGV9KS4gU2VtYW50aWNzOlxuICpcbiAqIC0ge0BsaW5rIGxlZnRBY3RpdmF0ZX06IGV2YWx1YXRlIGV2ZXJ5IHNwZWMgYWdhaW5zdCBgdG9rZW4uYmluZGluZ3NgLiBJZlxuICogICBBTEwgcmV0dXJuIGB0cnVlYCwgdGhlIHRva2VuIGlzIGZvcndhcmRlZCB0byBkb3duc3RyZWFtIGFjdGl2YXRlXG4gKiAgIGxpc3RlbmVycy4gVGhlIHRva2VuIHJlZmVyZW5jZSBpcyByZWNvcmRlZCBpbiB7QGxpbmsgcGFzc2VkVG9rZW5zfSBzb1xuICogICBzdWJzZXF1ZW50IGRlYWN0aXZhdGlvbiBjYW4gYmUgcm91dGVkIGNvcnJlY3RseS5cbiAqIC0ge0BsaW5rIGxlZnREZWFjdGl2YXRlfTogb25seSBmaXJlIGRvd25zdHJlYW0gZGVhY3RpdmF0ZSBsaXN0ZW5lcnMgaWYgdGhlXG4gKiAgIHRva2VuIHdhcyBwcmV2aW91c2x5IGZvcndhcmRlZC4gVG9rZW5zIHRoYXQgbmV2ZXIgcGFzc2VkIHRoZSBmaWx0ZXJcbiAqICAgbmV2ZXIgcmVhY2hlZCBkb3duc3RyZWFtIG5vZGVzLCBzbyB0aGVpciB3aXRoZHJhd2FsIG11c3QgYmUgYSBuby1vcC5cbiAqXG4gKiBNdWx0aXBsZSBzcGVjcyBhcmUgY29tYmluZWQgd2l0aCBjb25qdW5jdGlvbiAoQU5EKS4gQW4gZW1wdHkgc3BlYyBsaXN0XG4gKiBwYXNzZXMgZXZlcnkgdG9rZW4gKHZhY3VvdXMgQU5EKSwgd2hpY2gga2VlcHMgdGhlIGNvbnN0cnVjdG9yIHRvdGFsIOKAlCBhXG4gKiBmaWx0ZXIgd2l0aCBubyBwcmVkaWNhdGVzIGlzIHN0cnVjdHVyYWxseSBpZGVudGljYWwgdG8gYSBwYXNzLXRocm91Z2guXG4gKi9cbmltcG9ydCB0eXBlIHsgQmluZGluZ3MsIFRva2VuIH0gZnJvbSBcIi4vYmV0YS5qc1wiO1xuaW1wb3J0IHsgdHlwZSBQcmVkaWNhdGVSZWdpc3RyeSwgVW5rbm93blByZWRpY2F0ZUVycm9yIH0gZnJvbSBcIi4vcmVnaXN0cnkuanNcIjtcblxuLyoqXG4gKiBEZWNsYXJhdGl2ZSBkZXNjcmlwdGlvbiBvZiBhIHNpbmdsZSBwcmVkaWNhdGUgYXBwbGljYXRpb24uXG4gKlxuICogYHByZWRpY2F0ZWAgbXVzdCBuYW1lIGEgZnVuY3Rpb24gcHJldmlvdXNseSByZWdpc3RlcmVkIG9uIHRoZVxuICoge0BsaW5rIFByZWRpY2F0ZVJlZ2lzdHJ5fSBwYXNzZWQgdG8gdGhlIEZpbHRlck5vZGUgY29uc3RydWN0b3IuIGBhcmdzYFxuICogaXMgdGhlIHN0YXRpYyBwYXJhbWV0ZXIgbGlzdCBmb3J3YXJkZWQgdG8gdGhlIHByZWRpY2F0ZSBhdCBldmFsdWF0aW9uXG4gKiB0aW1lLCBhbG9uZ3NpZGUgdGhlIHRva2VuJ3MgY3VycmVudCBiaW5kaW5ncy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJTcGVjIHtcbiAgLyoqIFJlZ2lzdGVyZWQgcHJlZGljYXRlIG5hbWUuICovXG4gIHJlYWRvbmx5IHByZWRpY2F0ZTogc3RyaW5nO1xuICAvKiogU3RhdGljIGFyZ3VtZW50cyBwYXNzZWQgYWxvbmdzaWRlIHRoZSBtYXRjaCBiaW5kaW5ncy4gKi9cbiAgcmVhZG9ubHkgYXJnczogcmVhZG9ubHkgdW5rbm93bltdO1xufVxuXG50eXBlIEFjdGl2YXRlTGlzdGVuZXIgPSAodG9rZW46IFRva2VuKSA9PiB2b2lkO1xudHlwZSBEZWFjdGl2YXRlTGlzdGVuZXIgPSAodG9rZW46IFRva2VuKSA9PiB2b2lkO1xuXG5leHBvcnQgY2xhc3MgRmlsdGVyTm9kZSB7XG4gIHJlYWRvbmx5ICNzcGVjczogcmVhZG9ubHkgRmlsdGVyU3BlY1tdO1xuICByZWFkb25seSAjcmVnaXN0cnk6IFByZWRpY2F0ZVJlZ2lzdHJ5O1xuICByZWFkb25seSAjYWN0aXZhdGVMaXN0ZW5lcnM6IEFjdGl2YXRlTGlzdGVuZXJbXSA9IFtdO1xuICByZWFkb25seSAjZGVhY3RpdmF0ZUxpc3RlbmVyczogRGVhY3RpdmF0ZUxpc3RlbmVyW10gPSBbXTtcbiAgLyoqXG4gICAqIFRva2VucyB0aGF0IHByZXZpb3VzbHkgcGFzc2VkIGV2ZXJ5IHByZWRpY2F0ZS4gVXNlZCB0byByb3V0ZVxuICAgKiBkZWFjdGl2YXRpb25zOiBvbmx5IGZvcndhcmRlZCB0b2tlbnMgcmVxdWlyZSBkb3duc3RyZWFtIHdpdGhkcmF3YWwuXG4gICAqIElkZW50aXR5IChyZWZlcmVuY2UpIHRyYWNraW5nIG1hdGNoZXMgdGhlIHJlc3Qgb2YgdGhlIGJldGEgbmV0d29yay5cbiAgICovXG4gIHJlYWRvbmx5ICNwYXNzZWRUb2tlbnMgPSBuZXcgU2V0PFRva2VuPigpO1xuXG4gIC8qKlxuICAgKiBAdGhyb3dzIFVua25vd25QcmVkaWNhdGVFcnJvciBpZiBhbnkgc3BlYyBuYW1lcyBhIHByZWRpY2F0ZSB0aGF0IGlzIG5vdFxuICAgKiAgIHJlZ2lzdGVyZWQgb24gYHJlZ2lzdHJ5YC4gVmFsaWRhdGlvbiBoYXBwZW5zIHVwLWZyb250IHNvIHdpcmluZyBlcnJvcnNcbiAgICogICBzdXJmYWNlIGF0IGNvbnN0cnVjdGlvbiB0aW1lLCBub3QgYXQgdGhlIGZpcnN0IGFjdGl2YXRpb24uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzcGVjczogcmVhZG9ubHkgRmlsdGVyU3BlY1tdLCByZWdpc3RyeTogUHJlZGljYXRlUmVnaXN0cnkpIHtcbiAgICByZWdpc3RyeS52ZXJpZnkoc3BlY3MubWFwKChzKSA9PiBzLnByZWRpY2F0ZSkpO1xuICAgIHRoaXMuI3NwZWNzID0gc3BlY3M7XG4gICAgdGhpcy4jcmVnaXN0cnkgPSByZWdpc3RyeTtcbiAgfVxuXG4gIC8qKiBTdWJzY3JpYmUgdG8gZm9yd2FyZGVkIHRva2Vucy4gTGlzdGVuZXJzIGZpcmUgaW4gcmVnaXN0cmF0aW9uIG9yZGVyLiAqL1xuICBhZGREb3duc3RyZWFtQWN0aXZhdGUobGlzdGVuZXI6IEFjdGl2YXRlTGlzdGVuZXIpOiB2b2lkIHtcbiAgICB0aGlzLiNhY3RpdmF0ZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKiBTdWJzY3JpYmUgdG8gd2l0aGRyYXdhbHMuIExpc3RlbmVycyBmaXJlIGluIHJlZ2lzdHJhdGlvbiBvcmRlci4gKi9cbiAgYWRkRG93bnN0cmVhbURlYWN0aXZhdGUobGlzdGVuZXI6IERlYWN0aXZhdGVMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuI2RlYWN0aXZhdGVMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGUgdGhlIGNvbmp1bmN0aW9uIG9mIHJlZ2lzdGVyZWQgcHJlZGljYXRlcyBhZ2FpbnN0IGB0b2tlbmAuXG4gICAqIEZvcndhcmRzIGRvd25zdHJlYW0gb25seSBpZiBldmVyeSBwcmVkaWNhdGUgcmV0dXJucyBgdHJ1ZWAuXG4gICAqL1xuICBsZWZ0QWN0aXZhdGUodG9rZW46IFRva2VuKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLiNhbGxQYXNzKHRva2VuLmJpbmRpbmdzKSkgcmV0dXJuO1xuICAgIHRoaXMuI3Bhc3NlZFRva2Vucy5hZGQodG9rZW4pO1xuICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy4jYWN0aXZhdGVMaXN0ZW5lcnMpIHtcbiAgICAgIGxpc3RlbmVyKHRva2VuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2l0aGRyYXcgYSB0b2tlbi4gRG93bnN0cmVhbSBsaXN0ZW5lcnMgZmlyZSBvbmx5IGlmIHRoZSB0b2tlbiB3YXNcbiAgICogcHJldmlvdXNseSBmb3J3YXJkZWQg4oCUIHRva2VucyBibG9ja2VkIGJ5IHRoZSBmaWx0ZXIgbmV2ZXIgcmVhY2hlZFxuICAgKiBkb3duc3RyZWFtIGNvbnN1bWVycyBhbmQgbXVzdCBub3QgcHJvZHVjZSBwaGFudG9tIGRlYWN0aXZhdGlvbnMuXG4gICAqL1xuICBsZWZ0RGVhY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuI3Bhc3NlZFRva2Vucy5kZWxldGUodG9rZW4pKSByZXR1cm47XG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNkZWFjdGl2YXRlTGlzdGVuZXJzKSB7XG4gICAgICBsaXN0ZW5lcih0b2tlbik7XG4gICAgfVxuICB9XG5cbiAgI2FsbFBhc3MoYmluZGluZ3M6IEJpbmRpbmdzKTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBzcGVjIG9mIHRoaXMuI3NwZWNzKSB7XG4gICAgICBjb25zdCBwcmVkRm4gPSB0aGlzLiNyZWdpc3RyeS5nZXQoc3BlYy5wcmVkaWNhdGUpO1xuICAgICAgLy8gQ29uc3RydWN0b3ItdGltZSB2ZXJpZmljYXRpb24gcnVsZXMgdGhpcyBvdXQsIGJ1dCB0aGUgcnVudGltZSBndWFyZFxuICAgICAgLy8ga2VlcHMgdGhlIGZhaWx1cmUgbW9kZSBsb3VkIHJhdGhlciB0aGFuIHNpbGVudCBpZiBhIHByZWRpY2F0ZSBpc1xuICAgICAgLy8gc29tZWhvdyB1bnJlZ2lzdGVyZWQgYmV0d2VlbiBjb25zdHJ1Y3Rpb24gYW5kIGFjdGl2YXRpb24uXG4gICAgICBpZiAoIXByZWRGbikgdGhyb3cgbmV3IFVua25vd25QcmVkaWNhdGVFcnJvcihzcGVjLnByZWRpY2F0ZSk7XG4gICAgICBpZiAoIXByZWRGbihiaW5kaW5ncywgc3BlYy5hcmdzKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvZGlzdC9jb25kaXRpb24uanMifQ== diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/1c3d8bc54c74c954d05023e4d1afbf5b334e002d b/KMr2_dqTOvh2R-Vg1E6cO/ssr/1c3d8bc54c74c954d05023e4d1afbf5b334e002d deleted file mode 100644 index 96efbb2..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/1c3d8bc54c74c954d05023e4d1afbf5b334e002d +++ /dev/null @@ -1,227 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "JoinNode", { enumerable: true, configurable: true, get(){ try { return JoinNode } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/beta.js", {"importedNames":["Token","BetaMemory"]}); -/** - * Beta-network join node. - * - * Left input: an upstream {@link BetaMemory} of partial matches. - * Right input: an {@link AlphaMemory} of facts that passed constant tests. - * Output: zero or more {@link Token}s per `(token, fact)` pair that satisfies - * {@link JoinNode.tests}, delivered to downstream subscribers. - * - * The two "binding slots" — {@link valueBinding} and {@link idBinding} — name - * the variables under which the right fact's value and entity id are recorded - * in the produced token's bindings. Either may be `null` if the rule does not - * need that projection (e.g. an anonymous-value condition `(?id, Dead, _)` - * passes `null` for the value binding). - */ -class JoinNode { - #activateListeners = []; - #deactivateListeners = []; - /** - * Produced tokens indexed by the right fact key `${id}:${attr}`. - * - * Each entry is the list of downstream tokens we emitted the last time the - * fact was right-activated. On {@link JoinNode.rightDeactivate} we use this - * index to retract exactly those tokens in O(matches) without scanning all - * downstream state. - * - * The key intentionally omits `value` because an alpha memory stores at - * most one value per `(id, attr)` pair at any time — reactivation after an - * update produces a fresh entry under the same key. - */ - #producedTokens = new Map(); - #leftMemory; - #rightMemory; - #tests; - #valueBinding; - #idBinding; - /** - * @param leftMemory Upstream beta memory supplying partial matches. - * @param rightMemory Alpha memory supplying facts for this condition. - * @param tests Equality tests evaluated against every `(token, fact)` pair. - * @param valueBinding Variable name under which the right fact's *value* is - * recorded in produced tokens, or `null` to omit. - * @param idBinding Variable name under which the right fact's *entity id* - * is recorded in produced tokens, or `null` to omit. - */ - constructor(leftMemory, rightMemory, tests, valueBinding, idBinding) { - this.#leftMemory = leftMemory; - this.#rightMemory = rightMemory; - this.#tests = tests; - this.#valueBinding = valueBinding; - this.#idBinding = idBinding; - } - /** Subscribe to downstream activations. Listeners fire in registration order. */ - addDownstreamActivate(listener) { - this.#activateListeners.push(listener); - } - /** Subscribe to downstream deactivations. Listeners fire in registration order. */ - addDownstreamDeactivate(listener) { - this.#deactivateListeners.push(listener); - } - /** - * Process a new right-side fact. - * - * Called by the upstream AlphaNode's activate listener. Walks the left - * memory, emits one extended token per token that passes the tests, and - * records the batch under the fact key so retraction can find them. - */ - rightActivate(id, attr, value) { - const factKey = `${id}:${attr}`; - const produced = []; - for (const token of this.#leftMemory.tokens) { - if (this.#testsPass(token, id, value)) { - const newToken = this.#makeToken(token, id, attr, value); - produced.push(newToken); - for (const l of this.#activateListeners) - l(newToken); - } - }; - if (produced.length > 0) { - this.#producedTokens.set(factKey, produced); - } - } - /** - * Withdraw matches derived from a retracted right-side fact. - * - * Looks up the batch recorded by {@link JoinNode.rightActivate} under the - * fact key and fires deactivate listeners for each. If there is no such - * batch (e.g. no tokens matched originally) the call is a no-op. - * - * The `_value` parameter is unused — alpha memories key by `(id, attr)` - * and updates are modelled as retract-then-insert of the same pair, so the - * key alone is sufficient. - */ - rightDeactivate(id, attr, _value) { - const factKey = `${id}:${attr}`; - const produced = this.#producedTokens.get(factKey); - if (!produced) - return; - for (const token of produced) { - for (const l of this.#deactivateListeners) - l(token); - }; - this.#producedTokens.delete(factKey); - } - /** - * Process a new left-side token. - * - * Called when an upstream beta memory admits a new partial match. Walks the - * (sorted) right memory and emits extended tokens for every right fact that - * passes the tests. Each produced token is also recorded in the per-fact - * index so a later retraction of either side retracts consistently. - */ - leftActivate(token) { - for (const { id, attr, value } of this.#rightMemory.facts) { - if (this.#testsPass(token, id, value)) { - const newToken = this.#makeToken(token, id, attr, value); - const factKey = `${id}:${attr}`; - let bucket = this.#producedTokens.get(factKey); - if (!bucket) { - bucket = []; - this.#producedTokens.set(factKey, bucket); - }; - bucket.push(newToken); - for (const l of this.#activateListeners) - l(newToken); - } - } - } - /** - * Withdraw matches derived from a retracted left-side token. - * - * Walks the produced-tokens index and retracts every recorded token whose - * parent chain contains the deactivated token. Entries that become empty - * are removed from the index to bound memory growth over long sessions. - */ - leftDeactivate(token) { - for (const [key, tokens] of this.#producedTokens) { - const remaining = []; - const removed = []; - for (const t of tokens) { - if (this.#hasAncestor(t, token)) { - removed.push(t); - } - else { - remaining.push(t); - } - }; - for (const r of removed) { - for (const l of this.#deactivateListeners) - l(r); - }; - if (remaining.length === 0) { - this.#producedTokens.delete(key); - } - else if (removed.length > 0) { - this.#producedTokens.set(key, remaining); - } - } - } - /** - * Evaluate every join test against `(token, right fact)`. - * - * Short-circuits on the first failing test. `idEquality` compares the right - * entity id; `valueEquality` compares the right value. A test whose - * `leftVar` is missing from the token bindings always fails — this keeps - * the node safe against builder bugs that forget to bind a variable before - * referencing it. - */ - #testsPass(token, rightId, rightValue) { - for (const test of this.#tests) { - const leftVal = token.bindings[test.leftVar]; - if (leftVal === undefined) - return false; - if (test.type === "idEquality") { - if (leftVal !== rightId) - return false; - } - else { - // valueEquality - if (leftVal !== rightValue) - return false; - } - }; - return true; - } - /** - * Allocate the extended token for a successful `(token, fact)` pair. - * - * The new token's bindings are a shallow copy of the parent's bindings - * plus (optionally) the value and id slots configured on this node. Copy - * semantics are deliberate — sibling produced tokens must not share a - * bindings object, otherwise a later filter/handler could mutate one match - * and silently corrupt another. - */ - #makeToken(parent, rightId, rightAttr, rightValue) { - const newBindings = { ...parent.bindings }; - if (this.#valueBinding !== null) { - newBindings[this.#valueBinding] = rightValue; - }; - if (this.#idBinding !== null) { - newBindings[this.#idBinding] = rightId; - }; - const fact = { id: rightId, attr: rightAttr, value: rightValue }; - return new __vite_ssr_import_0__.Token(parent, fact, newBindings); - } - /** - * Walk a token's `parent` chain looking for `ancestor`. - * - * Equality is by object reference — tokens are never duplicated structurally - * within a chain, so reference identity is the correct relation. Returns - * `true` as soon as `ancestor` is seen, including the trivial case where - * `token === ancestor`. - */ - #hasAncestor(token, ancestor) { - let current = token; - while (current !== null) { - if (current === ancestor) - return true; - current = current.parent; - }; - return false; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFXLENBQUM7SUFDN0M7SUFFQTs7Ozs7Ozs7SUFRQSxZQUFZLENBQUMsS0FBWSxFQUFFLFFBQWU7UUFDeEMsSUFBSSxPQUFPLEdBQWlCLEtBQUs7UUFDakMsT0FBTyxPQUFPLEtBQUssSUFBSSxFQUFFO1lBQ3ZCLElBQUksT0FBTyxLQUFLLFFBQVE7Z0JBQUUsT0FBTyxJQUFJO1lBQ3JDLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTTtRQUMxQjtRQUNBLE9BQU8sS0FBSztJQUNkIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyIuLi9zcmMvam9pbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEpvaW5Ob2RlIOKAlCB0aGUgY29yZSBvZiB0aGUgUmV0ZSBiZXRhIG5ldHdvcmsuXG4gKlxuICogUGVyIGBwYWNrYWdlcy9yZXRlL1NQRUMubWQgwqdSZXRlIElJIFJlZmVyZW5jZSBUYXJnZXRgIHRoaXMgbW9kdWxlIGltcGxlbWVudHNcbiAqIHRoZSBKb2luTm9kZSBmcm9tIHRoZSBEb29yZW5ib3MgYmV0YSBuZXR3b3JrLiBBIGpvaW4gY29tYmluZXMgYSBsZWZ0IGlucHV0XG4gKiAoe0BsaW5rIEJldGFNZW1vcnl9IG9mIHBhcnRpYWwgbWF0Y2hlcykgd2l0aCBhIHJpZ2h0IGlucHV0ICh7QGxpbmtcbiAqIEFscGhhTWVtb3J5fSBvZiBmYWN0cyB0aGF0IHBhc3NlZCBjb25zdGFudCB0ZXN0cykgYW5kIGVtaXRzIGEgbmV3IHBhcnRpYWxcbiAqIG1hdGNoIGZvciBldmVyeSBgKHRva2VuLCBmYWN0KWAgcGFpciB0aGF0IHNhdGlzZmllcyB0aGUgbm9kZSdzIGVxdWFsaXR5XG4gKiB0ZXN0cy4gVGhpcyBpcyB0aGUgc3RlcCB0aGF0IG1ha2VzIFJldGUgaW5jcmVtZW50YWw6IHdoZW4gZWl0aGVyIHNpZGVcbiAqIGNoYW5nZXMsIG9ubHkgdGhlIGNyb3NzIHByb2R1Y3QgYWdhaW5zdCB0aGUgKm90aGVyKiBzaWRlIGlzIGNvbnNpZGVyZWQsXG4gKiBuZXZlciB0aGUgZnVsbCB3b3JraW5nIG1lbW9yeS5cbiAqXG4gKiAjIyMgRXF1YWxpdHkgdGVzdHNcbiAqXG4gKiBBIHtAbGluayBKb2luVGVzdH0gZXhwcmVzc2VzIGFuIGVxdWFsaXR5IGNvbnN0cmFpbnQgYmV0d2VlbiBhIHZhcmlhYmxlXG4gKiBhbHJlYWR5IGJvdW5kIGJ5IHRoZSB0b2tlbiBhbmQgc29tZSBmaWVsZCBvZiB0aGUgcmlnaHQgZmFjdC4gVHdvIGtpbmRzIGFyZVxuICogcmVjb2duaXNlZCBpbiBQaGFzZSAxOlxuICpcbiAqIC0gYGlkRXF1YWxpdHlgIOKAlCB0aGUgcmlnaHQgZmFjdCdzICplbnRpdHkgaWQqIG11c3QgZXF1YWwgYHRva2VuLmJpbmRpbmdzW2xlZnRWYXJdYC5cbiAqICAgVGhpcyBpcyBob3cgbXVsdGktY29uZGl0aW9uIHJ1bGVzIGVuZm9yY2UgXCJzYW1lIGVudGl0eSBhY3Jvc3MgY29uZGl0aW9uc1wiLFxuICogICBlLmcuIGAoP2lkLCBIZWFsdGgsID9oKSDiiKcgKD9pZCwgUG9zaXRpb24sID9wKWAgcmV1c2VzIGA/aWRgIGJ5IGVtaXR0aW5nIGFuXG4gKiAgIGBpZEVxdWFsaXR5YCB0ZXN0IGF0IHRoZSBzZWNvbmQgam9pbi5cbiAqIC0gYHZhbHVlRXF1YWxpdHlgIOKAlCB0aGUgcmlnaHQgZmFjdCdzICp2YWx1ZSogbXVzdCBlcXVhbCBgdG9rZW4uYmluZGluZ3NbbGVmdFZhcl1gLlxuICogICBVc2VkIHdoZW4gYSB2YXJpYWJsZSB3YXMgYm91bmQgYXMgdGhlIHZhbHVlIG9mIGFuIGVhcmxpZXIgY29uZGl0aW9uIGFuZFxuICogICBuZWVkcyB0byBsaW5lIHVwIHdpdGggdGhlIHZhbHVlIG9mIHRoaXMgY29uZGl0aW9uIChlLmcuIGNoYWluaW5nIHRocm91Z2hcbiAqICAgYSBwb2ludGVyLXR5cGVkIGF0dHJpYnV0ZSkuXG4gKlxuICogVGVzdHMgYXJlIGNvbmp1bmN0aXZlIOKAlCBhIGAodG9rZW4sIGZhY3QpYCBwYWlyIG11c3Qgc2F0aXNmeSAqZXZlcnkqIHRlc3QgdG9cbiAqIHByb3BhZ2F0ZS4gQW4gZW1wdHkgdGVzdCBsaXN0IHByb2R1Y2VzIHRoZSBmdWxsIGNhcnRlc2lhbiBwcm9kdWN0LCB3aGljaCBpc1xuICogdGhlIGNvcnJlY3QgYmVoYXZpb3VyIGZvciB0aGUgZmlyc3Qgam9pbiBpbiBhIHJ1bGUgKG5vIHByaW9yIHZhcmlhYmxlcyB0b1xuICogY29uc3RyYWluKSBhbmQgZm9yIGdlbnVpbmUgY3Jvc3MtcHJvZHVjdCBqb2lucy5cbiAqXG4gKiBJbmVxdWFsaXR5L2FyaXRobWV0aWMgZmlsdGVycyBhcmUgKm5vdCogaGFuZGxlZCBoZXJlIOKAlCB0aG9zZSBiZWxvbmcgdG8gdGhlXG4gKiBGaWx0ZXJOb2RlIGZyb20gUDEuOS4gS2VlcGluZyBKb2luTm9kZSBmb2N1c2VkIG9uIGVxdWFsaXR5IGxldHMgdXMgaW5kZXhcbiAqIHJpZ2h0LXNpZGUgYWNjZXNzIGluIGxhdGVyIHBoYXNlcyAoaGFzaC1qb2luKSB3aXRob3V0IHB1bGxpbmcgaW4gYXJiaXRyYXJ5XG4gKiBwcmVkaWNhdGVzLlxuICpcbiAqICMjIyBUb2tlbiBwcm9kdWN0aW9uIGFuZCByZXRyYWN0aW9uIGJvb2trZWVwaW5nXG4gKlxuICogT24gYSBzdWNjZXNzZnVsIGpvaW4gdGhpcyBub2RlIGFsbG9jYXRlcyBleGFjdGx5IG9uZSBuZXcge0BsaW5rIFRva2VufVxuICogd2hvc2UgYHBhcmVudGAgaXMgdGhlIGxlZnQgdG9rZW4gYW5kIHdob3NlIGBmYWN0YCAvIGBiaW5kaW5nc2AgZXh0ZW5kIHRoZVxuICogbWF0Y2ggd2l0aCB0aGUgcmlnaHQgZmFjdC4gRG93bnN0cmVhbSBzdWJzY3JpYmVycyByZWdpc3RlcmVkIHZpYVxuICoge0BsaW5rIEpvaW5Ob2RlLmFkZERvd25zdHJlYW1BY3RpdmF0ZX0gZmlyZSBpbiByZWdpc3RyYXRpb24gb3JkZXIuXG4gKlxuICogUmV0cmFjdGlvbiBpcyB0aGUgc3VidGxlIHBhcnQ6XG4gKlxuICogLSAqKlJpZ2h0IGRlYWN0aXZhdGlvbioqIChhIGZhY3QgbGVhdmVzIEFscGhhTWVtb3J5KSBtdXN0IHJldHJhY3QgZXZlcnlcbiAqICAgZG93bnN0cmVhbSB0b2tlbiB0aGF0IHdhcyBwcm9kdWNlZCBmcm9tIHRoYXQgZmFjdC4gV2UgaW5kZXggcHJvZHVjZWRcbiAqICAgdG9rZW5zIGJ5IHRoZSByaWdodC1mYWN0IGtleSBgJHtpZH06JHthdHRyfWAgZHVyaW5nXG4gKiAgIHtAbGluayBKb2luTm9kZS5yaWdodEFjdGl2YXRlfSBzbyB0aGUgbG9va3VwIG9uIHJldHJhY3QgaXMgTygxKSArXG4gKiAgIE8obWF0Y2hlcykuXG4gKiAtICoqTGVmdCBkZWFjdGl2YXRpb24qKiAoYSB0b2tlbiBsZWF2ZXMgdGhlIGxlZnQgQmV0YU1lbW9yeSkgbXVzdCByZXRyYWN0XG4gKiAgIGV2ZXJ5IGRvd25zdHJlYW0gdG9rZW4gd2hvc2UgcGFyZW50IGNoYWluIGNvbnRhaW5zIHRoYXQgdG9rZW4uIFdlIHdhbGtcbiAqICAgdGhlIHByb2R1Y2VkLXRva2VucyBtYXAgYW5kIGZpbHRlciBieSBhbmNlc3RvciBjaGVjay4gVGhpcyBpcyBPKFAgwrcgRClcbiAqICAgd2hlcmUgUCBpcyB0aGUgcHJvZHVjZWQtdG9rZW4gY291bnQgYW5kIEQgaXMgdGhlIGRlcHRoIG9mIHRoZSBtYXRjaFxuICogICBjaGFpbjsgUGhhc2UgMSB0cmFmZmljIGlzIHNtYWxsIGVub3VnaCB0aGF0IHRoZSBzaW1wbGVyIGltcGxlbWVudGF0aW9uXG4gKiAgIHdpbnMgb3ZlciBhIHJldmVyc2UgaW5kZXguXG4gKlxuICogQm90aCByZXRyYWN0aW9uIHBhdGhzIGludm9rZSByZWdpc3RlcmVkIGRlYWN0aXZhdGUgbGlzdGVuZXJzIHNvIGRvd25zdHJlYW1cbiAqIG1lbW9yaWVzIGNhbiBtaXJyb3IgdGhlIGNoYW5nZS5cbiAqL1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBdHRyS2V5LCBGYWN0VmFsdWUgfSBmcm9tIFwiLi93bS5qc1wiO1xuaW1wb3J0IHsgdHlwZSBCaW5kaW5ncywgVG9rZW4sIEJldGFNZW1vcnksIHR5cGUgVG9rZW5GYWN0IH0gZnJvbSBcIi4vYmV0YS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBbHBoYU1lbW9yeSB9IGZyb20gXCIuL2FscGhhLmpzXCI7XG5cbi8qKlxuICogRXF1YWxpdHkgY29uc3RyYWludCBiZXR3ZWVuIGEgdG9rZW4ncyB2YXJpYWJsZSBiaW5kaW5nIGFuZCBhIHJpZ2h0IGZhY3QuXG4gKlxuICogVGhlIGRpc2NyaW1pbmFudCBgdHlwZWAgc2VsZWN0cyAqd2hpY2gqIGZpZWxkIG9mIHRoZSByaWdodCBmYWN0IGlzIGNvbXBhcmVkOlxuICogYFwiaWRFcXVhbGl0eVwiYCBjb21wYXJlcyBhZ2FpbnN0IHRoZSBmYWN0J3MgZW50aXR5IGlkICh1c2VkIGZvciBzYW1lLWVudGl0eVxuICogam9pbnMpLCBgXCJ2YWx1ZUVxdWFsaXR5XCJgIGNvbXBhcmVzIGFnYWluc3QgdGhlIGZhY3QncyB2YWx1ZSAodXNlZCBmb3IgdmFsdWVcbiAqIHRocmVhZGluZykuIEluIGJvdGggY2FzZXMgdGhlIGxlZnQgb3BlcmFuZCBpcyBgdG9rZW4uYmluZGluZ3NbbGVmdFZhcl1gLlxuICpcbiAqIFRoZXJlIGlzIG5vIG1lY2hhbmlzbSBmb3IgY29tcGFyaW5nIHR3byB2YXJpYWJsZXMgZnJvbSB0aGUgKnNhbWUqIHNpZGVcbiAqIGhlcmUg4oCUIHRoZSBidWlsZGVyIGlzIGV4cGVjdGVkIHRvIGhvaXN0IHN1Y2ggY2FzZXMgaW50byBlYXJsaWVyIHRlc3RzIHNvXG4gKiBvbmx5IGNyb3NzLXNpZGUgY29tcGFyaXNvbnMgcmVhY2ggSm9pbk5vZGUuXG4gKi9cbmV4cG9ydCB0eXBlIEpvaW5UZXN0ID1cbiAgfCB7XG4gICAgICAvKiogUmlnaHQgZmFjdCdzIGVudGl0eSBpZCBtdXN0IGVxdWFsIGB0b2tlbi5iaW5kaW5nc1tsZWZ0VmFyXWAuICovXG4gICAgICB0eXBlOiBcImlkRXF1YWxpdHlcIjtcbiAgICAgIGxlZnRWYXI6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgLyoqIFJpZ2h0IGZhY3QncyB2YWx1ZSBtdXN0IGVxdWFsIGB0b2tlbi5iaW5kaW5nc1tsZWZ0VmFyXWAuICovXG4gICAgICB0eXBlOiBcInZhbHVlRXF1YWxpdHlcIjtcbiAgICAgIGxlZnRWYXI6IHN0cmluZztcbiAgICB9O1xuXG4vKiogRG93bnN0cmVhbSBzdWJzY3JpYmVyIGZpcmVkIHdoZW4gdGhpcyBqb2luIGVtaXRzIGEgbmV3IG1hdGNoLiAqL1xudHlwZSBEb3duc3RyZWFtQWN0aXZhdGUgPSAodG9rZW46IFRva2VuKSA9PiB2b2lkO1xuLyoqIERvd25zdHJlYW0gc3Vic2NyaWJlciBmaXJlZCB3aGVuIHRoaXMgam9pbiByZXRyYWN0cyBhIHByZXZpb3VzbHkgZW1pdHRlZCBtYXRjaC4gKi9cbnR5cGUgRG93bnN0cmVhbURlYWN0aXZhdGUgPSAodG9rZW46IFRva2VuKSA9PiB2b2lkO1xuXG4vKipcbiAqIEJldGEtbmV0d29yayBqb2luIG5vZGUuXG4gKlxuICogTGVmdCBpbnB1dDogYW4gdXBzdHJlYW0ge0BsaW5rIEJldGFNZW1vcnl9IG9mIHBhcnRpYWwgbWF0Y2hlcy5cbiAqIFJpZ2h0IGlucHV0OiBhbiB7QGxpbmsgQWxwaGFNZW1vcnl9IG9mIGZhY3RzIHRoYXQgcGFzc2VkIGNvbnN0YW50IHRlc3RzLlxuICogT3V0cHV0OiB6ZXJvIG9yIG1vcmUge0BsaW5rIFRva2VufXMgcGVyIGAodG9rZW4sIGZhY3QpYCBwYWlyIHRoYXQgc2F0aXNmaWVzXG4gKiB7QGxpbmsgSm9pbk5vZGUudGVzdHN9LCBkZWxpdmVyZWQgdG8gZG93bnN0cmVhbSBzdWJzY3JpYmVycy5cbiAqXG4gKiBUaGUgdHdvIFwiYmluZGluZyBzbG90c1wiIOKAlCB7QGxpbmsgdmFsdWVCaW5kaW5nfSBhbmQge0BsaW5rIGlkQmluZGluZ30g4oCUIG5hbWVcbiAqIHRoZSB2YXJpYWJsZXMgdW5kZXIgd2hpY2ggdGhlIHJpZ2h0IGZhY3QncyB2YWx1ZSBhbmQgZW50aXR5IGlkIGFyZSByZWNvcmRlZFxuICogaW4gdGhlIHByb2R1Y2VkIHRva2VuJ3MgYmluZGluZ3MuIEVpdGhlciBtYXkgYmUgYG51bGxgIGlmIHRoZSBydWxlIGRvZXMgbm90XG4gKiBuZWVkIHRoYXQgcHJvamVjdGlvbiAoZS5nLiBhbiBhbm9ueW1vdXMtdmFsdWUgY29uZGl0aW9uIGAoP2lkLCBEZWFkLCBfKWBcbiAqIHBhc3NlcyBgbnVsbGAgZm9yIHRoZSB2YWx1ZSBiaW5kaW5nKS5cbiAqL1xuZXhwb3J0IGNsYXNzIEpvaW5Ob2RlIHtcbiAgcmVhZG9ubHkgI2FjdGl2YXRlTGlzdGVuZXJzOiBEb3duc3RyZWFtQWN0aXZhdGVbXSA9IFtdO1xuICByZWFkb25seSAjZGVhY3RpdmF0ZUxpc3RlbmVyczogRG93bnN0cmVhbURlYWN0aXZhdGVbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBQcm9kdWNlZCB0b2tlbnMgaW5kZXhlZCBieSB0aGUgcmlnaHQgZmFjdCBrZXkgYCR7aWR9OiR7YXR0cn1gLlxuICAgKlxuICAgKiBFYWNoIGVudHJ5IGlzIHRoZSBsaXN0IG9mIGRvd25zdHJlYW0gdG9rZW5zIHdlIGVtaXR0ZWQgdGhlIGxhc3QgdGltZSB0aGVcbiAgICogZmFjdCB3YXMgcmlnaHQtYWN0aXZhdGVkLiBPbiB7QGxpbmsgSm9pbk5vZGUucmlnaHREZWFjdGl2YXRlfSB3ZSB1c2UgdGhpc1xuICAgKiBpbmRleCB0byByZXRyYWN0IGV4YWN0bHkgdGhvc2UgdG9rZW5zIGluIE8obWF0Y2hlcykgd2l0aG91dCBzY2FubmluZyBhbGxcbiAgICogZG93bnN0cmVhbSBzdGF0ZS5cbiAgICpcbiAgICogVGhlIGtleSBpbnRlbnRpb25hbGx5IG9taXRzIGB2YWx1ZWAgYmVjYXVzZSBhbiBhbHBoYSBtZW1vcnkgc3RvcmVzIGF0XG4gICAqIG1vc3Qgb25lIHZhbHVlIHBlciBgKGlkLCBhdHRyKWAgcGFpciBhdCBhbnkgdGltZSDigJQgcmVhY3RpdmF0aW9uIGFmdGVyIGFuXG4gICAqIHVwZGF0ZSBwcm9kdWNlcyBhIGZyZXNoIGVudHJ5IHVuZGVyIHRoZSBzYW1lIGtleS5cbiAgICovXG4gIHJlYWRvbmx5ICNwcm9kdWNlZFRva2VucyA9IG5ldyBNYXA8c3RyaW5nLCBUb2tlbltdPigpO1xuXG4gIHJlYWRvbmx5ICNsZWZ0TWVtb3J5OiBCZXRhTWVtb3J5O1xuICByZWFkb25seSAjcmlnaHRNZW1vcnk6IEFscGhhTWVtb3J5O1xuICByZWFkb25seSAjdGVzdHM6IHJlYWRvbmx5IEpvaW5UZXN0W107XG4gIHJlYWRvbmx5ICN2YWx1ZUJpbmRpbmc6IHN0cmluZyB8IG51bGw7XG4gIHJlYWRvbmx5ICNpZEJpbmRpbmc6IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBsZWZ0TWVtb3J5ICAgVXBzdHJlYW0gYmV0YSBtZW1vcnkgc3VwcGx5aW5nIHBhcnRpYWwgbWF0Y2hlcy5cbiAgICogQHBhcmFtIHJpZ2h0TWVtb3J5ICBBbHBoYSBtZW1vcnkgc3VwcGx5aW5nIGZhY3RzIGZvciB0aGlzIGNvbmRpdGlvbi5cbiAgICogQHBhcmFtIHRlc3RzICAgICAgICBFcXVhbGl0eSB0ZXN0cyBldmFsdWF0ZWQgYWdhaW5zdCBldmVyeSBgKHRva2VuLCBmYWN0KWAgcGFpci5cbiAgICogQHBhcmFtIHZhbHVlQmluZGluZyBWYXJpYWJsZSBuYW1lIHVuZGVyIHdoaWNoIHRoZSByaWdodCBmYWN0J3MgKnZhbHVlKiBpc1xuICAgKiAgICAgICAgICAgICAgICAgICAgIHJlY29yZGVkIGluIHByb2R1Y2VkIHRva2Vucywgb3IgYG51bGxgIHRvIG9taXQuXG4gICAqIEBwYXJhbSBpZEJpbmRpbmcgICAgVmFyaWFibGUgbmFtZSB1bmRlciB3aGljaCB0aGUgcmlnaHQgZmFjdCdzICplbnRpdHkgaWQqXG4gICAqICAgICAgICAgICAgICAgICAgICAgaXMgcmVjb3JkZWQgaW4gcHJvZHVjZWQgdG9rZW5zLCBvciBgbnVsbGAgdG8gb21pdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIGxlZnRNZW1vcnk6IEJldGFNZW1vcnksXG4gICAgcmlnaHRNZW1vcnk6IEFscGhhTWVtb3J5LFxuICAgIHRlc3RzOiByZWFkb25seSBKb2luVGVzdFtdLFxuICAgIHZhbHVlQmluZGluZzogc3RyaW5nIHwgbnVsbCxcbiAgICBpZEJpbmRpbmc6IHN0cmluZyB8IG51bGwsXG4gICkge1xuICAgIHRoaXMuI2xlZnRNZW1vcnkgPSBsZWZ0TWVtb3J5O1xuICAgIHRoaXMuI3JpZ2h0TWVtb3J5ID0gcmlnaHRNZW1vcnk7XG4gICAgdGhpcy4jdGVzdHMgPSB0ZXN0cztcbiAgICB0aGlzLiN2YWx1ZUJpbmRpbmcgPSB2YWx1ZUJpbmRpbmc7XG4gICAgdGhpcy4jaWRCaW5kaW5nID0gaWRCaW5kaW5nO1xuICB9XG5cbiAgLyoqIFN1YnNjcmliZSB0byBkb3duc3RyZWFtIGFjdGl2YXRpb25zLiBMaXN0ZW5lcnMgZmlyZSBpbiByZWdpc3RyYXRpb24gb3JkZXIuICovXG4gIGFkZERvd25zdHJlYW1BY3RpdmF0ZShsaXN0ZW5lcjogRG93bnN0cmVhbUFjdGl2YXRlKTogdm9pZCB7XG4gICAgdGhpcy4jYWN0aXZhdGVMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICAvKiogU3Vic2NyaWJlIHRvIGRvd25zdHJlYW0gZGVhY3RpdmF0aW9ucy4gTGlzdGVuZXJzIGZpcmUgaW4gcmVnaXN0cmF0aW9uIG9yZGVyLiAqL1xuICBhZGREb3duc3RyZWFtRGVhY3RpdmF0ZShsaXN0ZW5lcjogRG93bnN0cmVhbURlYWN0aXZhdGUpOiB2b2lkIHtcbiAgICB0aGlzLiNkZWFjdGl2YXRlTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgYSBuZXcgcmlnaHQtc2lkZSBmYWN0LlxuICAgKlxuICAgKiBDYWxsZWQgYnkgdGhlIHVwc3RyZWFtIEFscGhhTm9kZSdzIGFjdGl2YXRlIGxpc3RlbmVyLiBXYWxrcyB0aGUgbGVmdFxuICAgKiBtZW1vcnksIGVtaXRzIG9uZSBleHRlbmRlZCB0b2tlbiBwZXIgdG9rZW4gdGhhdCBwYXNzZXMgdGhlIHRlc3RzLCBhbmRcbiAgICogcmVjb3JkcyB0aGUgYmF0Y2ggdW5kZXIgdGhlIGZhY3Qga2V5IHNvIHJldHJhY3Rpb24gY2FuIGZpbmQgdGhlbS5cbiAgICovXG4gIHJpZ2h0QWN0aXZhdGUoaWQ6IEVudGl0eUlkLCBhdHRyOiBBdHRyS2V5LCB2YWx1ZTogRmFjdFZhbHVlKTogdm9pZCB7XG4gICAgY29uc3QgZmFjdEtleSA9IGAke2lkfToke2F0dHJ9YDtcbiAgICBjb25zdCBwcm9kdWNlZDogVG9rZW5bXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiB0aGlzLiNsZWZ0TWVtb3J5LnRva2Vucykge1xuICAgICAgaWYgKHRoaXMuI3Rlc3RzUGFzcyh0b2tlbiwgaWQsIHZhbHVlKSkge1xuICAgICAgICBjb25zdCBuZXdUb2tlbiA9IHRoaXMuI21ha2VUb2tlbih0b2tlbiwgaWQsIGF0dHIsIHZhbHVlKTtcbiAgICAgICAgcHJvZHVjZWQucHVzaChuZXdUb2tlbik7XG4gICAgICAgIGZvciAoY29uc3QgbCBvZiB0aGlzLiNhY3RpdmF0ZUxpc3RlbmVycykgbChuZXdUb2tlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb2R1Y2VkLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuI3Byb2R1Y2VkVG9rZW5zLnNldChmYWN0S2V5LCBwcm9kdWNlZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdpdGhkcmF3IG1hdGNoZXMgZGVyaXZlZCBmcm9tIGEgcmV0cmFjdGVkIHJpZ2h0LXNpZGUgZmFjdC5cbiAgICpcbiAgICogTG9va3MgdXAgdGhlIGJhdGNoIHJlY29yZGVkIGJ5IHtAbGluayBKb2luTm9kZS5yaWdodEFjdGl2YXRlfSB1bmRlciB0aGVcbiAgICogZmFjdCBrZXkgYW5kIGZpcmVzIGRlYWN0aXZhdGUgbGlzdGVuZXJzIGZvciBlYWNoLiBJZiB0aGVyZSBpcyBubyBzdWNoXG4gICAqIGJhdGNoIChlLmcuIG5vIHRva2VucyBtYXRjaGVkIG9yaWdpbmFsbHkpIHRoZSBjYWxsIGlzIGEgbm8tb3AuXG4gICAqXG4gICAqIFRoZSBgX3ZhbHVlYCBwYXJhbWV0ZXIgaXMgdW51c2VkIOKAlCBhbHBoYSBtZW1vcmllcyBrZXkgYnkgYChpZCwgYXR0cilgXG4gICAqIGFuZCB1cGRhdGVzIGFyZSBtb2RlbGxlZCBhcyByZXRyYWN0LXRoZW4taW5zZXJ0IG9mIHRoZSBzYW1lIHBhaXIsIHNvIHRoZVxuICAgKiBrZXkgYWxvbmUgaXMgc3VmZmljaWVudC5cbiAgICovXG4gIHJpZ2h0RGVhY3RpdmF0ZShpZDogRW50aXR5SWQsIGF0dHI6IEF0dHJLZXksIF92YWx1ZTogRmFjdFZhbHVlKTogdm9pZCB7XG4gICAgY29uc3QgZmFjdEtleSA9IGAke2lkfToke2F0dHJ9YDtcbiAgICBjb25zdCBwcm9kdWNlZCA9IHRoaXMuI3Byb2R1Y2VkVG9rZW5zLmdldChmYWN0S2V5KTtcbiAgICBpZiAoIXByb2R1Y2VkKSByZXR1cm47XG5cbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHByb2R1Y2VkKSB7XG4gICAgICBmb3IgKGNvbnN0IGwgb2YgdGhpcy4jZGVhY3RpdmF0ZUxpc3RlbmVycykgbCh0b2tlbik7XG4gICAgfVxuICAgIHRoaXMuI3Byb2R1Y2VkVG9rZW5zLmRlbGV0ZShmYWN0S2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGEgbmV3IGxlZnQtc2lkZSB0b2tlbi5cbiAgICpcbiAgICogQ2FsbGVkIHdoZW4gYW4gdXBzdHJlYW0gYmV0YSBtZW1vcnkgYWRtaXRzIGEgbmV3IHBhcnRpYWwgbWF0Y2guIFdhbGtzIHRoZVxuICAgKiAoc29ydGVkKSByaWdodCBtZW1vcnkgYW5kIGVtaXRzIGV4dGVuZGVkIHRva2VucyBmb3IgZXZlcnkgcmlnaHQgZmFjdCB0aGF0XG4gICAqIHBhc3NlcyB0aGUgdGVzdHMuIEVhY2ggcHJvZHVjZWQgdG9rZW4gaXMgYWxzbyByZWNvcmRlZCBpbiB0aGUgcGVyLWZhY3RcbiAgICogaW5kZXggc28gYSBsYXRlciByZXRyYWN0aW9uIG9mIGVpdGhlciBzaWRlIHJldHJhY3RzIGNvbnNpc3RlbnRseS5cbiAgICovXG4gIGxlZnRBY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHsgaWQsIGF0dHIsIHZhbHVlIH0gb2YgdGhpcy4jcmlnaHRNZW1vcnkuZmFjdHMpIHtcbiAgICAgIGlmICh0aGlzLiN0ZXN0c1Bhc3ModG9rZW4sIGlkLCB2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgbmV3VG9rZW4gPSB0aGlzLiNtYWtlVG9rZW4odG9rZW4sIGlkLCBhdHRyLCB2YWx1ZSk7XG4gICAgICAgIGNvbnN0IGZhY3RLZXkgPSBgJHtpZH06JHthdHRyfWA7XG4gICAgICAgIGxldCBidWNrZXQgPSB0aGlzLiNwcm9kdWNlZFRva2Vucy5nZXQoZmFjdEtleSk7XG4gICAgICAgIGlmICghYnVja2V0KSB7XG4gICAgICAgICAgYnVja2V0ID0gW107XG4gICAgICAgICAgdGhpcy4jcHJvZHVjZWRUb2tlbnMuc2V0KGZhY3RLZXksIGJ1Y2tldCk7XG4gICAgICAgIH1cbiAgICAgICAgYnVja2V0LnB1c2gobmV3VG9rZW4pO1xuICAgICAgICBmb3IgKGNvbnN0IGwgb2YgdGhpcy4jYWN0aXZhdGVMaXN0ZW5lcnMpIGwobmV3VG9rZW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaXRoZHJhdyBtYXRjaGVzIGRlcml2ZWQgZnJvbSBhIHJldHJhY3RlZCBsZWZ0LXNpZGUgdG9rZW4uXG4gICAqXG4gICAqIFdhbGtzIHRoZSBwcm9kdWNlZC10b2tlbnMgaW5kZXggYW5kIHJldHJhY3RzIGV2ZXJ5IHJlY29yZGVkIHRva2VuIHdob3NlXG4gICAqIHBhcmVudCBjaGFpbiBjb250YWlucyB0aGUgZGVhY3RpdmF0ZWQgdG9rZW4uIEVudHJpZXMgdGhhdCBiZWNvbWUgZW1wdHlcbiAgICogYXJlIHJlbW92ZWQgZnJvbSB0aGUgaW5kZXggdG8gYm91bmQgbWVtb3J5IGdyb3d0aCBvdmVyIGxvbmcgc2Vzc2lvbnMuXG4gICAqL1xuICBsZWZ0RGVhY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHRva2Vuc10gb2YgdGhpcy4jcHJvZHVjZWRUb2tlbnMpIHtcbiAgICAgIGNvbnN0IHJlbWFpbmluZzogVG9rZW5bXSA9IFtdO1xuICAgICAgY29uc3QgcmVtb3ZlZDogVG9rZW5bXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0IG9mIHRva2Vucykge1xuICAgICAgICBpZiAodGhpcy4jaGFzQW5jZXN0b3IodCwgdG9rZW4pKSB7XG4gICAgICAgICAgcmVtb3ZlZC5wdXNoKHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbWFpbmluZy5wdXNoKHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHIgb2YgcmVtb3ZlZCkge1xuICAgICAgICBmb3IgKGNvbnN0IGwgb2YgdGhpcy4jZGVhY3RpdmF0ZUxpc3RlbmVycykgbChyKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZW1haW5pbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuI3Byb2R1Y2VkVG9rZW5zLmRlbGV0ZShrZXkpO1xuICAgICAgfSBlbHNlIGlmIChyZW1vdmVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy4jcHJvZHVjZWRUb2tlbnMuc2V0KGtleSwgcmVtYWluaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGUgZXZlcnkgam9pbiB0ZXN0IGFnYWluc3QgYCh0b2tlbiwgcmlnaHQgZmFjdClgLlxuICAgKlxuICAgKiBTaG9ydC1jaXJjdWl0cyBvbiB0aGUgZmlyc3QgZmFpbGluZyB0ZXN0LiBgaWRFcXVhbGl0eWAgY29tcGFyZXMgdGhlIHJpZ2h0XG4gICAqIGVudGl0eSBpZDsgYHZhbHVlRXF1YWxpdHlgIGNvbXBhcmVzIHRoZSByaWdodCB2YWx1ZS4gQSB0ZXN0IHdob3NlXG4gICAqIGBsZWZ0VmFyYCBpcyBtaXNzaW5nIGZyb20gdGhlIHRva2VuIGJpbmRpbmdzIGFsd2F5cyBmYWlscyDigJQgdGhpcyBrZWVwc1xuICAgKiB0aGUgbm9kZSBzYWZlIGFnYWluc3QgYnVpbGRlciBidWdzIHRoYXQgZm9yZ2V0IHRvIGJpbmQgYSB2YXJpYWJsZSBiZWZvcmVcbiAgICogcmVmZXJlbmNpbmcgaXQuXG4gICAqL1xuICAjdGVzdHNQYXNzKHRva2VuOiBUb2tlbiwgcmlnaHRJZDogRW50aXR5SWQsIHJpZ2h0VmFsdWU6IEZhY3RWYWx1ZSk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3QgdGVzdCBvZiB0aGlzLiN0ZXN0cykge1xuICAgICAgY29uc3QgbGVmdFZhbCA9IHRva2VuLmJpbmRpbmdzW3Rlc3QubGVmdFZhcl07XG4gICAgICBpZiAobGVmdFZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAodGVzdC50eXBlID09PSBcImlkRXF1YWxpdHlcIikge1xuICAgICAgICBpZiAobGVmdFZhbCAhPT0gcmlnaHRJZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdmFsdWVFcXVhbGl0eVxuICAgICAgICBpZiAobGVmdFZhbCAhPT0gcmlnaHRWYWx1ZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvY2F0ZSB0aGUgZXh0ZW5kZWQgdG9rZW4gZm9yIGEgc3VjY2Vzc2Z1bCBgKHRva2VuLCBmYWN0KWAgcGFpci5cbiAgICpcbiAgICogVGhlIG5ldyB0b2tlbidzIGJpbmRpbmdzIGFyZSBhIHNoYWxsb3cgY29weSBvZiB0aGUgcGFyZW50J3MgYmluZGluZ3NcbiAgICogcGx1cyAob3B0aW9uYWxseSkgdGhlIHZhbHVlIGFuZCBpZCBzbG90cyBjb25maWd1cmVkIG9uIHRoaXMgbm9kZS4gQ29weVxuICAgKiBzZW1hbnRpY3MgYXJlIGRlbGliZXJhdGUg4oCUIHNpYmxpbmcgcHJvZHVjZWQgdG9rZW5zIG11c3Qgbm90IHNoYXJlIGFcbiAgICogYmluZGluZ3Mgb2JqZWN0LCBvdGhlcndpc2UgYSBsYXRlciBmaWx0ZXIvaGFuZGxlciBjb3VsZCBtdXRhdGUgb25lIG1hdGNoXG4gICAqIGFuZCBzaWxlbnRseSBjb3JydXB0IGFub3RoZXIuXG4gICAqL1xuICAjbWFrZVRva2VuKFxuICAgIHBhcmVudDogVG9rZW4sXG4gICAgcmlnaHRJZDogRW50aXR5SWQsXG4gICAgcmlnaHRBdHRyOiBBdHRyS2V5LFxuICAgIHJpZ2h0VmFsdWU6IEZhY3RWYWx1ZSxcbiAgKTogVG9rZW4ge1xuICAgIGNvbnN0IG5ld0JpbmRpbmdzOiBCaW5kaW5ncyA9IHsgLi4ucGFyZW50LmJpbmRpbmdzIH07XG4gICAgaWYgKHRoaXMuI3ZhbHVlQmluZGluZyAhPT0gbnVsbCkge1xuICAgICAgbmV3QmluZGluZ3NbdGhpcy4jdmFsdWVCaW5kaW5nXSA9IHJpZ2h0VmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLiNpZEJpbmRpbmcgIT09IG51bGwpIHtcbiAgICAgIG5ld0JpbmRpbmdzW3RoaXMuI2lkQmluZGluZ10gPSByaWdodElkO1xuICAgIH1cbiAgICBjb25zdCBmYWN0OiBUb2tlbkZhY3QgPSB7IGlkOiByaWdodElkLCBhdHRyOiByaWdodEF0dHIsIHZhbHVlOiByaWdodFZhbHVlIH07XG4gICAgcmV0dXJuIG5ldyBUb2tlbihwYXJlbnQsIGZhY3QsIG5ld0JpbmRpbmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXYWxrIGEgdG9rZW4ncyBgcGFyZW50YCBjaGFpbiBsb29raW5nIGZvciBgYW5jZXN0b3JgLlxuICAgKlxuICAgKiBFcXVhbGl0eSBpcyBieSBvYmplY3QgcmVmZXJlbmNlIOKAlCB0b2tlbnMgYXJlIG5ldmVyIGR1cGxpY2F0ZWQgc3RydWN0dXJhbGx5XG4gICAqIHdpdGhpbiBhIGNoYWluLCBzbyByZWZlcmVuY2UgaWRlbnRpdHkgaXMgdGhlIGNvcnJlY3QgcmVsYXRpb24uIFJldHVybnNcbiAgICogYHRydWVgIGFzIHNvb24gYXMgYGFuY2VzdG9yYCBpcyBzZWVuLCBpbmNsdWRpbmcgdGhlIHRyaXZpYWwgY2FzZSB3aGVyZVxuICAgKiBgdG9rZW4gPT09IGFuY2VzdG9yYC5cbiAgICovXG4gICNoYXNBbmNlc3Rvcih0b2tlbjogVG9rZW4sIGFuY2VzdG9yOiBUb2tlbik6IGJvb2xlYW4ge1xuICAgIGxldCBjdXJyZW50OiBUb2tlbiB8IG51bGwgPSB0b2tlbjtcbiAgICB3aGlsZSAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGN1cnJlbnQgPT09IGFuY2VzdG9yKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvcmV0ZS9kaXN0L2pvaW4uanMifQ== diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/1f67b058354b3349f9e57ea7dbc1e4abbb9fb928 b/KMr2_dqTOvh2R-Vg1E6cO/ssr/1f67b058354b3349f9e57ea7dbc1e4abbb9fb928 deleted file mode 100644 index e935007..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/1f67b058354b3349f9e57ea7dbc1e4abbb9fb928 +++ /dev/null @@ -1,99 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "Token", { enumerable: true, configurable: true, get(){ try { return Token } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "BetaMemory", { enumerable: true, configurable: true, get(){ try { return BetaMemory } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "BetaMemoryNode", { enumerable: true, configurable: true, get(){ try { return BetaMemory } catch {} }}); -/** - * A single node in the partial-match chain. - * - * A root token has `parent === null` and represents the match produced by the - * left-most condition of a rule. Each subsequent successful join appends a - * child token whose `parent` points at the previous token in the chain, its - * `fact` is the newly-joined fact, and its `bindings` are the merged - * variable bindings after applying the new fact. - * - * Tokens are compared by reference everywhere in the network — two tokens - * constructed from structurally-identical arguments are NOT considered equal. - * This lets the beta memory use `Array#indexOf` for O(n) removal without - * worrying about structural-hash collisions. - */ -class Token { - parent; - fact; - bindings; - constructor( - /** Parent token in the match chain, or `null` for a root token. */ - parent, - /** The fact that extended the match at this level. */ - fact, - /** Accumulated variable bindings up to and including this token. */ - bindings) { - this.parent = parent; - this.fact = fact; - this.bindings = bindings; - } -}; -/** - * Beta-network memory node. - * - * Stores the set of partial matches (tokens) that have reached this point in - * the network and forwards left-activations / left-deactivations to - * downstream subscribers in registration order. - * - * The public `tokens` array is declared `readonly` so external code cannot - * reassign it, but its contents are mutated by the memory itself on - * {@link leftActivate} / {@link leftDeactivate}. Tests rely on positional - * access (`tokens[0]`), so the array is intentionally left indexable rather - * than wrapped in a `Set` or hidden behind a method. - */ -class BetaMemory { - /** Currently-active tokens, in insertion order. */ - tokens = []; - #activateListeners = []; - #deactivateListeners = []; - /** - * Accept a new partial match. - * - * The token is appended to {@link tokens} and all downstream activate - * listeners are invoked synchronously in registration order. Listeners see - * a memory view that already contains the new token. - */ - leftActivate(token) { - this.tokens.push(token); - for (const listener of this.#activateListeners) { - listener(token); - } - } - /** - * Withdraw a partial match. - * - * Removes the token by reference (first occurrence) if present. Always - * fires downstream deactivate listeners, even if the token was not found — - * downstream memories may still hold derived tokens that need to be - * withdrawn, and they perform their own presence checks. - */ - leftDeactivate(token) { - const idx = this.tokens.indexOf(token); - if (idx !== -1) { - this.tokens.splice(idx, 1); - }; - for (const listener of this.#deactivateListeners) { - listener(token); - } - } - /** Subscribe to left-activations. Listeners fire in registration order. */ - addDownstreamActivate(listener) { - this.#activateListeners.push(listener); - } - /** Subscribe to left-deactivations. Listeners fire in registration order. */ - addDownstreamDeactivate(listener) { - this.#deactivateListeners.push(listener); - } -}; -/** - * Alias for {@link BetaMemory} used when the memory is a node in the network - * wiring graph (as distinct from the dummy top-node memory that seeds - * every rule). Kept as a separate export so downstream modules can document - * intent without introducing a structural difference. - */ - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7O0FBMENBOzs7Ozs7Ozs7Ozs7OztBQWNNLE1BQU8sS0FBSztJQUdFO0lBRUE7SUFFQTtJQU5sQjtJQUNFO0lBQ2dCLE1BQW9CO0lBQ3BDO0lBQ2dCLElBQWU7SUFDL0I7SUFDZ0IsUUFBa0I7UUFKbEIsV0FBTSxHQUFOLE1BQU07UUFFTixTQUFJLEdBQUosSUFBSTtRQUVKLGFBQVEsR0FBUixRQUFRO0lBQ3ZCOztBQVFMOzs7Ozs7Ozs7Ozs7O0FBYU0sTUFBTyxVQUFVO0lBQ3JCO0lBQ1MsTUFBTSxHQUFZLEVBQUU7SUFFcEIsa0JBQWtCLEdBQTRCLEVBQUU7SUFDaEQsb0JBQW9CLEdBQThCLEVBQUU7SUFFN0Q7Ozs7Ozs7SUFPQSxZQUFZLENBQUMsS0FBWTtRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdkIsS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDOUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUNqQjtJQUNGO0lBRUE7Ozs7Ozs7O0lBUUEsY0FBYyxDQUFDLEtBQVk7UUFDekIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3RDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1QjtRQUNBLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQ2hELFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDakI7SUFDRjtJQUVBO0lBQ0EscUJBQXFCLENBQUMsUUFBK0I7UUFDbkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDeEM7SUFFQTtJQUNBLHVCQUF1QixDQUFDLFFBQWlDO1FBQ3ZELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzFDOztBQUdGIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyIuLi9zcmMvYmV0YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJldGFNZW1vcnkgYW5kIFRva2VuIOKAlCBwYXJ0aWFsIG1hdGNoIHN0b3JhZ2UgZm9yIHRoZSBSZXRlIGJldGEgbmV0d29yay5cbiAqXG4gKiBQZXIgYHBhY2thZ2VzL3JldGUvU1BFQy5tZCDCp1JldGUgSUkgUmVmZXJlbmNlIFRhcmdldGAgdGhpcyBtb2R1bGUgaW1wbGVtZW50c1xuICogdGhlIEJldGFNZW1vcnkgbm9kZSB0eXBlIGZyb20gdGhlIERvb3JlbmJvcyBiZXRhIG5ldHdvcmsuXG4gKlxuICogQSB7QGxpbmsgVG9rZW59IHJlcHJlc2VudHMgYSBwYXJ0aWFsIG1hdGNoOiBhIGZhY3QgcGx1cyBhIHJlZmVyZW5jZSB0byBhXG4gKiBwYXJlbnQgdG9rZW4sIHNvIHRoZSBmdWxsIGNoYWluIG9mIGZhY3RzIHRoYXQgY29udHJpYnV0ZWQgdG8gdGhlIG1hdGNoIGlzXG4gKiByZWNvdmVyZWQgYnkgd2Fsa2luZyBgLnBhcmVudGAgdG8gbnVsbC4gVGhpcyBtaXJyb3JzIERvb3JlbmJvcyDCpzIuMyBhbmRcbiAqIGtlZXBzIHRva2VuIGNvbnN0cnVjdGlvbiBPKDEpIOKAlCBvbmx5IHRoZSBuZXdseS1qb2luZWQgZmFjdCBhbmQgaXRzIG1lcmdlZFxuICogYmluZGluZ3MgYXJlIGFsbG9jYXRlZCBwZXIgbGV2ZWwsIG5ldmVyIHRoZSBmdWxsIGxpc3QuXG4gKlxuICogQSB7QGxpbmsgQmV0YU1lbW9yeX0gc3RvcmVzIHRoZSBzZXQgb2YgY3VycmVudGx5LWFjdGl2ZSB0b2tlbnMgYW5kXG4gKiBwcm9wYWdhdGVzIGxlZnQtYWN0aXZhdGUgLyBsZWZ0LWRlYWN0aXZhdGUgbm90aWZpY2F0aW9ucyB0byBkb3duc3RyZWFtXG4gKiBzdWJzY3JpYmVycy4gRG93bnN0cmVhbSBub2RlcyBhcmUgZXhwZWN0ZWQgdG8gYmUge0BsaW5rIEpvaW5Ob2RlfXNcbiAqIChpbXBsZW1lbnRlZCBpbiBQMS44KSBvciB7QGxpbmsgUHJvZHVjdGlvbk5vZGV9czsgdGhpcyBtb2R1bGUgZG9lcyBub3RcbiAqIGNvbmNlcm4gaXRzZWxmIHdpdGggam9pbiBzZW1hbnRpY3MuXG4gKi9cbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiLi9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgQXR0cktleSwgRmFjdFZhbHVlIH0gZnJvbSBcIi4vd20uanNcIjtcblxuLyoqXG4gKiBWYXJpYWJsZS1iaW5kaW5nIG1hcCBmb3IgYSB0b2tlbi5cbiAqXG4gKiBLZXlzIGFyZSB0aGUgdmFyaWFibGUgbmFtZXMgZGVjbGFyZWQgaW4gYSBydWxlJ3MgY29uZGl0aW9ucyAoZS5nLiBgXCJocFwiYCxcbiAqIGBcImlkXCJgKTsgdmFsdWVzIGFyZSB0aGUgY29uY3JldGUgZW50aXR5IGlkcyBvciBmYWN0IHZhbHVlcyBib3VuZCB0byB0aG9zZVxuICogdmFyaWFibGVzIGF0IHRoaXMgcG9pbnQgaW4gdGhlIHBhcnRpYWwgbWF0Y2guXG4gKi9cbmV4cG9ydCB0eXBlIEJpbmRpbmdzID0gUmVjb3JkPHN0cmluZywgRW50aXR5SWQgfCBGYWN0VmFsdWU+O1xuXG4vKipcbiAqIFRoZSBmYWN0IHRyaXBsZSB0aGF0IG1vc3QgcmVjZW50bHkgZXh0ZW5kZWQgYSB0b2tlbi5cbiAqXG4gKiBUaGlzIG1pcnJvcnMgdGhlIHNoYXBlIHVzZWQgYnkge0BsaW5rIEFscGhhTWVtb3J5fSBhbmQge0BsaW5rIFdvcmtpbmdNZW1vcnl9XG4gKiDigJQgdGhlIGJldGEgbmV0d29yayBuZXZlciByZS13cmFwcyBmYWN0cywgaXQganVzdCByZWZlcmVuY2VzIHRoZW0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5GYWN0IHtcbiAgcmVhZG9ubHkgaWQ6IEVudGl0eUlkO1xuICByZWFkb25seSBhdHRyOiBBdHRyS2V5O1xuICByZWFkb25seSB2YWx1ZTogRmFjdFZhbHVlO1xufVxuXG4vKipcbiAqIEEgc2luZ2xlIG5vZGUgaW4gdGhlIHBhcnRpYWwtbWF0Y2ggY2hhaW4uXG4gKlxuICogQSByb290IHRva2VuIGhhcyBgcGFyZW50ID09PSBudWxsYCBhbmQgcmVwcmVzZW50cyB0aGUgbWF0Y2ggcHJvZHVjZWQgYnkgdGhlXG4gKiBsZWZ0LW1vc3QgY29uZGl0aW9uIG9mIGEgcnVsZS4gRWFjaCBzdWJzZXF1ZW50IHN1Y2Nlc3NmdWwgam9pbiBhcHBlbmRzIGFcbiAqIGNoaWxkIHRva2VuIHdob3NlIGBwYXJlbnRgIHBvaW50cyBhdCB0aGUgcHJldmlvdXMgdG9rZW4gaW4gdGhlIGNoYWluLCBpdHNcbiAqIGBmYWN0YCBpcyB0aGUgbmV3bHktam9pbmVkIGZhY3QsIGFuZCBpdHMgYGJpbmRpbmdzYCBhcmUgdGhlIG1lcmdlZFxuICogdmFyaWFibGUgYmluZGluZ3MgYWZ0ZXIgYXBwbHlpbmcgdGhlIG5ldyBmYWN0LlxuICpcbiAqIFRva2VucyBhcmUgY29tcGFyZWQgYnkgcmVmZXJlbmNlIGV2ZXJ5d2hlcmUgaW4gdGhlIG5ldHdvcmsg4oCUIHR3byB0b2tlbnNcbiAqIGNvbnN0cnVjdGVkIGZyb20gc3RydWN0dXJhbGx5LWlkZW50aWNhbCBhcmd1bWVudHMgYXJlIE5PVCBjb25zaWRlcmVkIGVxdWFsLlxuICogVGhpcyBsZXRzIHRoZSBiZXRhIG1lbW9yeSB1c2UgYEFycmF5I2luZGV4T2ZgIGZvciBPKG4pIHJlbW92YWwgd2l0aG91dFxuICogd29ycnlpbmcgYWJvdXQgc3RydWN0dXJhbC1oYXNoIGNvbGxpc2lvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUb2tlbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIC8qKiBQYXJlbnQgdG9rZW4gaW4gdGhlIG1hdGNoIGNoYWluLCBvciBgbnVsbGAgZm9yIGEgcm9vdCB0b2tlbi4gKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgcGFyZW50OiBUb2tlbiB8IG51bGwsXG4gICAgLyoqIFRoZSBmYWN0IHRoYXQgZXh0ZW5kZWQgdGhlIG1hdGNoIGF0IHRoaXMgbGV2ZWwuICovXG4gICAgcHVibGljIHJlYWRvbmx5IGZhY3Q6IFRva2VuRmFjdCxcbiAgICAvKiogQWNjdW11bGF0ZWQgdmFyaWFibGUgYmluZGluZ3MgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGlzIHRva2VuLiAqL1xuICAgIHB1YmxpYyByZWFkb25seSBiaW5kaW5nczogQmluZGluZ3MsXG4gICkge31cbn1cblxuLyoqIERvd25zdHJlYW0gc3Vic2NyaWJlciBmaXJlZCBhZnRlciBhIHRva2VuIGVudGVycyBiZXRhIG1lbW9yeS4gKi9cbnR5cGUgVG9rZW5BY3RpdmF0ZUxpc3RlbmVyID0gKHRva2VuOiBUb2tlbikgPT4gdm9pZDtcbi8qKiBEb3duc3RyZWFtIHN1YnNjcmliZXIgZmlyZWQgYWZ0ZXIgYSB0b2tlbiBsZWF2ZXMgYmV0YSBtZW1vcnkuICovXG50eXBlIFRva2VuRGVhY3RpdmF0ZUxpc3RlbmVyID0gKHRva2VuOiBUb2tlbikgPT4gdm9pZDtcblxuLyoqXG4gKiBCZXRhLW5ldHdvcmsgbWVtb3J5IG5vZGUuXG4gKlxuICogU3RvcmVzIHRoZSBzZXQgb2YgcGFydGlhbCBtYXRjaGVzICh0b2tlbnMpIHRoYXQgaGF2ZSByZWFjaGVkIHRoaXMgcG9pbnQgaW5cbiAqIHRoZSBuZXR3b3JrIGFuZCBmb3J3YXJkcyBsZWZ0LWFjdGl2YXRpb25zIC8gbGVmdC1kZWFjdGl2YXRpb25zIHRvXG4gKiBkb3duc3RyZWFtIHN1YnNjcmliZXJzIGluIHJlZ2lzdHJhdGlvbiBvcmRlci5cbiAqXG4gKiBUaGUgcHVibGljIGB0b2tlbnNgIGFycmF5IGlzIGRlY2xhcmVkIGByZWFkb25seWAgc28gZXh0ZXJuYWwgY29kZSBjYW5ub3RcbiAqIHJlYXNzaWduIGl0LCBidXQgaXRzIGNvbnRlbnRzIGFyZSBtdXRhdGVkIGJ5IHRoZSBtZW1vcnkgaXRzZWxmIG9uXG4gKiB7QGxpbmsgbGVmdEFjdGl2YXRlfSAvIHtAbGluayBsZWZ0RGVhY3RpdmF0ZX0uIFRlc3RzIHJlbHkgb24gcG9zaXRpb25hbFxuICogYWNjZXNzIChgdG9rZW5zWzBdYCksIHNvIHRoZSBhcnJheSBpcyBpbnRlbnRpb25hbGx5IGxlZnQgaW5kZXhhYmxlIHJhdGhlclxuICogdGhhbiB3cmFwcGVkIGluIGEgYFNldGAgb3IgaGlkZGVuIGJlaGluZCBhIG1ldGhvZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEJldGFNZW1vcnkge1xuICAvKiogQ3VycmVudGx5LWFjdGl2ZSB0b2tlbnMsIGluIGluc2VydGlvbiBvcmRlci4gKi9cbiAgcmVhZG9ubHkgdG9rZW5zOiBUb2tlbltdID0gW107XG5cbiAgcmVhZG9ubHkgI2FjdGl2YXRlTGlzdGVuZXJzOiBUb2tlbkFjdGl2YXRlTGlzdGVuZXJbXSA9IFtdO1xuICByZWFkb25seSAjZGVhY3RpdmF0ZUxpc3RlbmVyczogVG9rZW5EZWFjdGl2YXRlTGlzdGVuZXJbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBBY2NlcHQgYSBuZXcgcGFydGlhbCBtYXRjaC5cbiAgICpcbiAgICogVGhlIHRva2VuIGlzIGFwcGVuZGVkIHRvIHtAbGluayB0b2tlbnN9IGFuZCBhbGwgZG93bnN0cmVhbSBhY3RpdmF0ZVxuICAgKiBsaXN0ZW5lcnMgYXJlIGludm9rZWQgc3luY2hyb25vdXNseSBpbiByZWdpc3RyYXRpb24gb3JkZXIuIExpc3RlbmVycyBzZWVcbiAgICogYSBtZW1vcnkgdmlldyB0aGF0IGFscmVhZHkgY29udGFpbnMgdGhlIG5ldyB0b2tlbi5cbiAgICovXG4gIGxlZnRBY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICB0aGlzLnRva2Vucy5wdXNoKHRva2VuKTtcbiAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMuI2FjdGl2YXRlTGlzdGVuZXJzKSB7XG4gICAgICBsaXN0ZW5lcih0b2tlbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdpdGhkcmF3IGEgcGFydGlhbCBtYXRjaC5cbiAgICpcbiAgICogUmVtb3ZlcyB0aGUgdG9rZW4gYnkgcmVmZXJlbmNlIChmaXJzdCBvY2N1cnJlbmNlKSBpZiBwcmVzZW50LiBBbHdheXNcbiAgICogZmlyZXMgZG93bnN0cmVhbSBkZWFjdGl2YXRlIGxpc3RlbmVycywgZXZlbiBpZiB0aGUgdG9rZW4gd2FzIG5vdCBmb3VuZCDigJRcbiAgICogZG93bnN0cmVhbSBtZW1vcmllcyBtYXkgc3RpbGwgaG9sZCBkZXJpdmVkIHRva2VucyB0aGF0IG5lZWQgdG8gYmVcbiAgICogd2l0aGRyYXduLCBhbmQgdGhleSBwZXJmb3JtIHRoZWlyIG93biBwcmVzZW5jZSBjaGVja3MuXG4gICAqL1xuICBsZWZ0RGVhY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICBjb25zdCBpZHggPSB0aGlzLnRva2Vucy5pbmRleE9mKHRva2VuKTtcbiAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgdGhpcy50b2tlbnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy4jZGVhY3RpdmF0ZUxpc3RlbmVycykge1xuICAgICAgbGlzdGVuZXIodG9rZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTdWJzY3JpYmUgdG8gbGVmdC1hY3RpdmF0aW9ucy4gTGlzdGVuZXJzIGZpcmUgaW4gcmVnaXN0cmF0aW9uIG9yZGVyLiAqL1xuICBhZGREb3duc3RyZWFtQWN0aXZhdGUobGlzdGVuZXI6IFRva2VuQWN0aXZhdGVMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuI2FjdGl2YXRlTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqIFN1YnNjcmliZSB0byBsZWZ0LWRlYWN0aXZhdGlvbnMuIExpc3RlbmVycyBmaXJlIGluIHJlZ2lzdHJhdGlvbiBvcmRlci4gKi9cbiAgYWRkRG93bnN0cmVhbURlYWN0aXZhdGUobGlzdGVuZXI6IFRva2VuRGVhY3RpdmF0ZUxpc3RlbmVyKTogdm9pZCB7XG4gICAgdGhpcy4jZGVhY3RpdmF0ZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxufVxuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgQmV0YU1lbW9yeX0gdXNlZCB3aGVuIHRoZSBtZW1vcnkgaXMgYSBub2RlIGluIHRoZSBuZXR3b3JrXG4gKiB3aXJpbmcgZ3JhcGggKGFzIGRpc3RpbmN0IGZyb20gdGhlIGR1bW15IHRvcC1ub2RlIG1lbW9yeSB0aGF0IHNlZWRzXG4gKiBldmVyeSBydWxlKS4gS2VwdCBhcyBhIHNlcGFyYXRlIGV4cG9ydCBzbyBkb3duc3RyZWFtIG1vZHVsZXMgY2FuIGRvY3VtZW50XG4gKiBpbnRlbnQgd2l0aG91dCBpbnRyb2R1Y2luZyBhIHN0cnVjdHVyYWwgZGlmZmVyZW5jZS5cbiAqL1xuZXhwb3J0IHsgQmV0YU1lbW9yeSBhcyBCZXRhTWVtb3J5Tm9kZSB9O1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvZGlzdC9iZXRhLmpzIn0= diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/253f0b3eee530ac4b1075b53dfcb3c5ede308968 b/KMr2_dqTOvh2R-Vg1E6cO/ssr/253f0b3eee530ac4b1075b53dfcb3c5ede308968 deleted file mode 100644 index 58cf9d8..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/253f0b3eee530ac4b1075b53dfcb3c5ede308968 +++ /dev/null @@ -1,118 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "RULE_SCHEMA_V1", { enumerable: true, configurable: true, get(){ try { return RULE_SCHEMA_V1 } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "serialize", { enumerable: true, configurable: true, get(){ try { return serialize } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "deserialize", { enumerable: true, configurable: true, get(){ try { return deserialize } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("zod", {"importedNames":["z"]});const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/registry.js", {"importedNames":["HandlerRegistry"]});const __vite_ssr_import_2__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/builder.js", {"importedNames":["v"]});/** - * JSON serialization for RuleDefinitions. - * - * Per SPEC.md §JSON Rule Schema — handler-registry pattern, no eval, no - * function-to-string conversion, no arbitrary JavaScript embedded in JSON. - * All executable behaviour is referenced by name and resolved against a - * {@link HandlerRegistry} at deserialisation time. - * - * v1 schema (RULE_SCHEMA_V1) covers ordinary positive (alpha) conditions. - * Phase 2 node types (negation, existential, ncc, aggregation) and filter - * predicates are intentionally omitted from v1 and will be added in a - * future schema version without back-compat to v0. - */ - - - -/** - * Zod schema for a single serialized condition. - * - * - `id`: either a literal entity id (number — EntityId's brand exists only in - * the type system) or `null` for wildcard. - * - `attr`: the attribute key string. - * - `binding`: the variable name to bind the value to, or `null` if no binding. - * - `idBinding`: optional variable name to bind the entity id to. - */ -const ConditionSchema = __vite_ssr_import_0__.z.object({ - id: __vite_ssr_import_0__.z.union([__vite_ssr_import_0__.z.number(), __vite_ssr_import_0__.z.null()]), - attr: __vite_ssr_import_0__.z.string(), - binding: __vite_ssr_import_0__.z.string().nullable(), - idBinding: __vite_ssr_import_0__.z.string().optional(), -}); -/** - * Zod schema for the full serialized rule — v1. - * - * Exported for external validation pipelines (e.g. network ingestion before - * deserialisation, admin tooling) per SPEC.md §JSON Rule Schema. - */ -const RULE_SCHEMA_V1 = __vite_ssr_import_0__.z.object({ - name: __vite_ssr_import_0__.z.string().min(1), - salience: __vite_ssr_import_0__.z.number().default(0), - conditions: __vite_ssr_import_0__.z.array(ConditionSchema).default([]), - handler: __vite_ssr_import_0__.z.string().min(1), - handlerArgs: __vite_ssr_import_0__.z.array(__vite_ssr_import_0__.z.unknown()).optional(), -}); -/** - * Serialize a RuleDefinition to a plain, JSON-compatible object. - * - * The result contains only strings, numbers, booleans, null, arrays, and - * plain objects — no function references. Passing the return value to - * `JSON.stringify` is guaranteed safe and lossless for the v1 schema. - */ -function serialize(rule) { - const conditions = (rule.conditions ?? []).map((c) => { - const base = { - id: c.id, - attr: c.attr, - binding: c.binding?.name ?? null, - }; - // Under exactOptionalPropertyTypes, only include idBinding when defined. - return c.idBinding !== undefined - ? { ...base, idBinding: c.idBinding.name } - : base; - }); - const out = { - name: rule.name, - salience: rule.salience ?? 0, - conditions, - handler: rule.handler, - }; - if (rule.handlerArgs !== undefined) { - out.handlerArgs = [...rule.handlerArgs]; - }; - return out; -}; -/** - * Deserialize a JSON object back into a RuleDefinition. - * - * Validates the input against {@link RULE_SCHEMA_V1} and then resolves the - * handler name against `registry`. Throws: - * - `z.ZodError` on malformed input (missing fields, wrong types). - * - `UnknownHandlerError` when `handler` is not registered. - * - * The resulting RuleDefinition is structurally identical to one produced by - * {@link defineRule} — round-tripping via `serialize(deserialize(x))` yields a - * value byte-identical to the original JSON under `JSON.stringify`. - */ -function deserialize(json, registry) { - const parsed = RULE_SCHEMA_V1.parse(json); - // Registry resolution — per SPEC.md §JSON Rule Schema, handler names MUST - // resolve or we throw UnknownHandlerError. - registry.verify([parsed.handler]); - const conditions = parsed.conditions.map((c) => { - const base = { - id: c.id, - attr: c.attr, - binding: c.binding !== null ? (0,__vite_ssr_import_2__.v)(c.binding) : null, - }; - return c.idBinding !== undefined - ? { ...base, idBinding: (0,__vite_ssr_import_2__.v)(c.idBinding) } - : base; - }); - const out = { - name: parsed.name, - salience: parsed.salience, - conditions, - handler: parsed.handler, - }; - if (parsed.handlerArgs !== undefined) { - return { ...out, handlerArgs: parsed.handlerArgs }; - }; - return out; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUssSUFBSSxDQUFDLENBQUMsSUFBQyx3QkFBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtTQUNsRDtRQUNELE9BQU8sQ0FBQyxDQUFDLFNBQVMsS0FBSztZQUNyQixDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxTQUFTLEtBQUUsd0JBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxJQUFJO0lBQ1YsQ0FBQyxDQUFDO0lBRUYsTUFBTSxHQUFHLEdBQW1CO1FBQzFCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtRQUNqQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7UUFDekIsVUFBVTtRQUNWLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztLQUN4QjtJQUNELElBQUksTUFBTSxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUU7UUFDcEMsT0FBTyxFQUFFLEdBQUcsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBaUMsRUFBRTtJQUMxRTtJQUNBLE9BQU8sR0FBRztBQUNaIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyIuLi9zcmMvc2VyaWFsaXplLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSlNPTiBzZXJpYWxpemF0aW9uIGZvciBSdWxlRGVmaW5pdGlvbnMuXG4gKlxuICogUGVyIFNQRUMubWQgwqdKU09OIFJ1bGUgU2NoZW1hIOKAlCBoYW5kbGVyLXJlZ2lzdHJ5IHBhdHRlcm4sIG5vIGV2YWwsIG5vXG4gKiBmdW5jdGlvbi10by1zdHJpbmcgY29udmVyc2lvbiwgbm8gYXJiaXRyYXJ5IEphdmFTY3JpcHQgZW1iZWRkZWQgaW4gSlNPTi5cbiAqIEFsbCBleGVjdXRhYmxlIGJlaGF2aW91ciBpcyByZWZlcmVuY2VkIGJ5IG5hbWUgYW5kIHJlc29sdmVkIGFnYWluc3QgYVxuICoge0BsaW5rIEhhbmRsZXJSZWdpc3RyeX0gYXQgZGVzZXJpYWxpc2F0aW9uIHRpbWUuXG4gKlxuICogdjEgc2NoZW1hIChSVUxFX1NDSEVNQV9WMSkgY292ZXJzIG9yZGluYXJ5IHBvc2l0aXZlIChhbHBoYSkgY29uZGl0aW9ucy5cbiAqIFBoYXNlIDIgbm9kZSB0eXBlcyAobmVnYXRpb24sIGV4aXN0ZW50aWFsLCBuY2MsIGFnZ3JlZ2F0aW9uKSBhbmQgZmlsdGVyXG4gKiBwcmVkaWNhdGVzIGFyZSBpbnRlbnRpb25hbGx5IG9taXR0ZWQgZnJvbSB2MSBhbmQgd2lsbCBiZSBhZGRlZCBpbiBhXG4gKiBmdXR1cmUgc2NoZW1hIHZlcnNpb24gd2l0aG91dCBiYWNrLWNvbXBhdCB0byB2MC5cbiAqL1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IEhhbmRsZXJSZWdpc3RyeSB9IGZyb20gXCIuL3JlZ2lzdHJ5LmpzXCI7XG5pbXBvcnQge1xuICB2LFxuICB0eXBlIFJ1bGVDb25kaXRpb24sXG4gIHR5cGUgUnVsZURlZmluaXRpb24sXG59IGZyb20gXCIuL2J1aWxkZXIuanNcIjtcblxuLyoqXG4gKiBab2Qgc2NoZW1hIGZvciBhIHNpbmdsZSBzZXJpYWxpemVkIGNvbmRpdGlvbi5cbiAqXG4gKiAtIGBpZGA6IGVpdGhlciBhIGxpdGVyYWwgZW50aXR5IGlkIChudW1iZXIg4oCUIEVudGl0eUlkJ3MgYnJhbmQgZXhpc3RzIG9ubHkgaW5cbiAqICAgdGhlIHR5cGUgc3lzdGVtKSBvciBgbnVsbGAgZm9yIHdpbGRjYXJkLlxuICogLSBgYXR0cmA6IHRoZSBhdHRyaWJ1dGUga2V5IHN0cmluZy5cbiAqIC0gYGJpbmRpbmdgOiB0aGUgdmFyaWFibGUgbmFtZSB0byBiaW5kIHRoZSB2YWx1ZSB0bywgb3IgYG51bGxgIGlmIG5vIGJpbmRpbmcuXG4gKiAtIGBpZEJpbmRpbmdgOiBvcHRpb25hbCB2YXJpYWJsZSBuYW1lIHRvIGJpbmQgdGhlIGVudGl0eSBpZCB0by5cbiAqL1xuY29uc3QgQ29uZGl0aW9uU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogei51bmlvbihbei5udW1iZXIoKSwgei5udWxsKCldKSxcbiAgYXR0cjogei5zdHJpbmcoKSxcbiAgYmluZGluZzogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBpZEJpbmRpbmc6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuXG4vKipcbiAqIFpvZCBzY2hlbWEgZm9yIHRoZSBmdWxsIHNlcmlhbGl6ZWQgcnVsZSDigJQgdjEuXG4gKlxuICogRXhwb3J0ZWQgZm9yIGV4dGVybmFsIHZhbGlkYXRpb24gcGlwZWxpbmVzIChlLmcuIG5ldHdvcmsgaW5nZXN0aW9uIGJlZm9yZVxuICogZGVzZXJpYWxpc2F0aW9uLCBhZG1pbiB0b29saW5nKSBwZXIgU1BFQy5tZCDCp0pTT04gUnVsZSBTY2hlbWEuXG4gKi9cbmV4cG9ydCBjb25zdCBSVUxFX1NDSEVNQV9WMSA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKS5taW4oMSksXG4gIHNhbGllbmNlOiB6Lm51bWJlcigpLmRlZmF1bHQoMCksXG4gIGNvbmRpdGlvbnM6IHouYXJyYXkoQ29uZGl0aW9uU2NoZW1hKS5kZWZhdWx0KFtdKSxcbiAgaGFuZGxlcjogei5zdHJpbmcoKS5taW4oMSksXG4gIGhhbmRsZXJBcmdzOiB6LmFycmF5KHoudW5rbm93bigpKS5vcHRpb25hbCgpLFxufSk7XG5cbi8qKiBJbmZlcnJlZCBzdGF0aWMgdHlwZSBvZiBhIHNlcmlhbGl6ZWQgcnVsZS4gKi9cbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWRSdWxlID0gei5pbmZlcjx0eXBlb2YgUlVMRV9TQ0hFTUFfVjE+O1xuXG4vKipcbiAqIExvb3NlIGlucHV0IHNoYXBlIGFjY2VwdGVkIGJ5IHtAbGluayBzZXJpYWxpemV9LlxuICpcbiAqIEFsbG93cyBgdW5kZWZpbmVkYCBvbiBvcHRpb25hbCBmaWVsZHMgdG8gZWFzZSBjYWxsLXNpdGUgZXJnb25vbWljcyB1bmRlclxuICogYGV4YWN0T3B0aW9uYWxQcm9wZXJ0eVR5cGVzOiB0cnVlYC4gQXQgcnVudGltZSwgZmllbGRzIHRoYXQgYXJlIGFic2VudCBvclxuICogZXhwbGljaXRseSBgdW5kZWZpbmVkYCBhcmUgbm9ybWFsaXNlZCB0byBzY2hlbWEgZGVmYXVsdHMgb3Igb21pdHRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemFibGVSdWxlIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBoYW5kbGVyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNhbGllbmNlPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBjb25kaXRpb25zPzpcbiAgICB8IFJlYWRvbmx5QXJyYXk8e1xuICAgICAgICByZWFkb25seSBpZDogUnVsZUNvbmRpdGlvbltcImlkXCJdO1xuICAgICAgICByZWFkb25seSBhdHRyOiBzdHJpbmc7XG4gICAgICAgIHJlYWRvbmx5IGJpbmRpbmc6IFJ1bGVDb25kaXRpb25bXCJiaW5kaW5nXCJdO1xuICAgICAgICByZWFkb25seSBpZEJpbmRpbmc/OiBSdWxlQ29uZGl0aW9uW1wiaWRCaW5kaW5nXCJdIHwgdW5kZWZpbmVkO1xuICAgICAgfT5cbiAgICB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgaGFuZGxlckFyZ3M/OiByZWFkb25seSB1bmtub3duW10gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogU2VyaWFsaXplIGEgUnVsZURlZmluaXRpb24gdG8gYSBwbGFpbiwgSlNPTi1jb21wYXRpYmxlIG9iamVjdC5cbiAqXG4gKiBUaGUgcmVzdWx0IGNvbnRhaW5zIG9ubHkgc3RyaW5ncywgbnVtYmVycywgYm9vbGVhbnMsIG51bGwsIGFycmF5cywgYW5kXG4gKiBwbGFpbiBvYmplY3RzIOKAlCBubyBmdW5jdGlvbiByZWZlcmVuY2VzLiBQYXNzaW5nIHRoZSByZXR1cm4gdmFsdWUgdG9cbiAqIGBKU09OLnN0cmluZ2lmeWAgaXMgZ3VhcmFudGVlZCBzYWZlIGFuZCBsb3NzbGVzcyBmb3IgdGhlIHYxIHNjaGVtYS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZShydWxlOiBTZXJpYWxpemFibGVSdWxlKTogU2VyaWFsaXplZFJ1bGUge1xuICBjb25zdCBjb25kaXRpb25zID0gKHJ1bGUuY29uZGl0aW9ucyA/PyBbXSkubWFwKChjKSA9PiB7XG4gICAgY29uc3QgYmFzZTogU2VyaWFsaXplZFJ1bGVbXCJjb25kaXRpb25zXCJdW251bWJlcl0gPSB7XG4gICAgICBpZDogYy5pZCxcbiAgICAgIGF0dHI6IGMuYXR0cixcbiAgICAgIGJpbmRpbmc6IGMuYmluZGluZz8ubmFtZSA/PyBudWxsLFxuICAgIH07XG4gICAgLy8gVW5kZXIgZXhhY3RPcHRpb25hbFByb3BlcnR5VHlwZXMsIG9ubHkgaW5jbHVkZSBpZEJpbmRpbmcgd2hlbiBkZWZpbmVkLlxuICAgIHJldHVybiBjLmlkQmluZGluZyAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHsgLi4uYmFzZSwgaWRCaW5kaW5nOiBjLmlkQmluZGluZy5uYW1lIH1cbiAgICAgIDogYmFzZTtcbiAgfSk7XG5cbiAgY29uc3Qgb3V0OiBTZXJpYWxpemVkUnVsZSA9IHtcbiAgICBuYW1lOiBydWxlLm5hbWUsXG4gICAgc2FsaWVuY2U6IHJ1bGUuc2FsaWVuY2UgPz8gMCxcbiAgICBjb25kaXRpb25zLFxuICAgIGhhbmRsZXI6IHJ1bGUuaGFuZGxlcixcbiAgfTtcbiAgaWYgKHJ1bGUuaGFuZGxlckFyZ3MgIT09IHVuZGVmaW5lZCkge1xuICAgIG91dC5oYW5kbGVyQXJncyA9IFsuLi5ydWxlLmhhbmRsZXJBcmdzXTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIERlc2VyaWFsaXplIGEgSlNPTiBvYmplY3QgYmFjayBpbnRvIGEgUnVsZURlZmluaXRpb24uXG4gKlxuICogVmFsaWRhdGVzIHRoZSBpbnB1dCBhZ2FpbnN0IHtAbGluayBSVUxFX1NDSEVNQV9WMX0gYW5kIHRoZW4gcmVzb2x2ZXMgdGhlXG4gKiBoYW5kbGVyIG5hbWUgYWdhaW5zdCBgcmVnaXN0cnlgLiBUaHJvd3M6XG4gKiAgIC0gYHouWm9kRXJyb3JgIG9uIG1hbGZvcm1lZCBpbnB1dCAobWlzc2luZyBmaWVsZHMsIHdyb25nIHR5cGVzKS5cbiAqICAgLSBgVW5rbm93bkhhbmRsZXJFcnJvcmAgd2hlbiBgaGFuZGxlcmAgaXMgbm90IHJlZ2lzdGVyZWQuXG4gKlxuICogVGhlIHJlc3VsdGluZyBSdWxlRGVmaW5pdGlvbiBpcyBzdHJ1Y3R1cmFsbHkgaWRlbnRpY2FsIHRvIG9uZSBwcm9kdWNlZCBieVxuICoge0BsaW5rIGRlZmluZVJ1bGV9IOKAlCByb3VuZC10cmlwcGluZyB2aWEgYHNlcmlhbGl6ZShkZXNlcmlhbGl6ZSh4KSlgIHlpZWxkcyBhXG4gKiB2YWx1ZSBieXRlLWlkZW50aWNhbCB0byB0aGUgb3JpZ2luYWwgSlNPTiB1bmRlciBgSlNPTi5zdHJpbmdpZnlgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzZXJpYWxpemUoXG4gIGpzb246IHVua25vd24sXG4gIHJlZ2lzdHJ5OiBIYW5kbGVyUmVnaXN0cnlcbik6IFJ1bGVEZWZpbml0aW9uIHtcbiAgY29uc3QgcGFyc2VkID0gUlVMRV9TQ0hFTUFfVjEucGFyc2UoanNvbik7XG5cbiAgLy8gUmVnaXN0cnkgcmVzb2x1dGlvbiDigJQgcGVyIFNQRUMubWQgwqdKU09OIFJ1bGUgU2NoZW1hLCBoYW5kbGVyIG5hbWVzIE1VU1RcbiAgLy8gcmVzb2x2ZSBvciB3ZSB0aHJvdyBVbmtub3duSGFuZGxlckVycm9yLlxuICByZWdpc3RyeS52ZXJpZnkoW3BhcnNlZC5oYW5kbGVyXSk7XG5cbiAgY29uc3QgY29uZGl0aW9uczogUnVsZUNvbmRpdGlvbltdID0gcGFyc2VkLmNvbmRpdGlvbnMubWFwKChjKSA9PiB7XG4gICAgY29uc3QgYmFzZTogUnVsZUNvbmRpdGlvbiA9IHtcbiAgICAgIGlkOiBjLmlkIGFzIFJ1bGVDb25kaXRpb25bXCJpZFwiXSxcbiAgICAgIGF0dHI6IGMuYXR0cixcbiAgICAgIGJpbmRpbmc6IGMuYmluZGluZyAhPT0gbnVsbCA/IHYoYy5iaW5kaW5nKSA6IG51bGwsXG4gICAgfTtcbiAgICByZXR1cm4gYy5pZEJpbmRpbmcgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7IC4uLmJhc2UsIGlkQmluZGluZzogdihjLmlkQmluZGluZykgfVxuICAgICAgOiBiYXNlO1xuICB9KTtcblxuICBjb25zdCBvdXQ6IFJ1bGVEZWZpbml0aW9uID0ge1xuICAgIG5hbWU6IHBhcnNlZC5uYW1lLFxuICAgIHNhbGllbmNlOiBwYXJzZWQuc2FsaWVuY2UsXG4gICAgY29uZGl0aW9ucyxcbiAgICBoYW5kbGVyOiBwYXJzZWQuaGFuZGxlcixcbiAgfTtcbiAgaWYgKHBhcnNlZC5oYW5kbGVyQXJncyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHsgLi4ub3V0LCBoYW5kbGVyQXJnczogcGFyc2VkLmhhbmRsZXJBcmdzIGFzIHJlYWRvbmx5IHVua25vd25bXSB9O1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvcmV0ZS9kaXN0L3NlcmlhbGl6ZS5qcyJ9 diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/2907f03a94e8c5fca188f0af6ce6627c14f9e3ea b/KMr2_dqTOvh2R-Vg1E6cO/ssr/2907f03a94e8c5fca188f0af6ce6627c14f9e3ea deleted file mode 100644 index 85a17bf..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/2907f03a94e8c5fca188f0af6ce6627c14f9e3ea +++ /dev/null @@ -1,171 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("vitest", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/rooms.ts", {"importedNames":["RoomRegistry","__test__"]}); -const CODE_RE = /^[A-Z0-9]{6}$/; -const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/; -(0,__vite_ssr_import_0__.describe)("RoomRegistry.createRoom", () => { - (0,__vite_ssr_import_0__.it)("returns a 6-char uppercase alphanumeric code", () => { - const reg = new __vite_ssr_import_1__.RoomRegistry(); - const { code } = reg.createRoom(); - (0,__vite_ssr_import_0__.expect)(code).toMatch(CODE_RE); - }); - (0,__vite_ssr_import_0__.it)("assigns white to the creator and returns a UUID v4 token", () => { - const reg = new __vite_ssr_import_1__.RoomRegistry(); - const { code, token, color } = reg.createRoom(); - (0,__vite_ssr_import_0__.expect)(color).toBe("white"); - (0,__vite_ssr_import_0__.expect)(token).toMatch(UUID_RE); - const player = reg.getPlayerByToken(code, token); - (0,__vite_ssr_import_0__.expect)(player).toBeDefined(); - (0,__vite_ssr_import_0__.expect)(player?.color).toBe("white"); - (0,__vite_ssr_import_0__.expect)(player?.connected).toBe(true); - (0,__vite_ssr_import_0__.expect)(player?.lastSeq).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("stores rulesetIds defensively (caller mutation does not leak)", () => { - const reg = new __vite_ssr_import_1__.RoomRegistry(); - const rules = ["pawns-move-backward"]; - const { code } = reg.createRoom(rules); - rules.push("piece-hp"); - const room = reg.getRoom(code); - (0,__vite_ssr_import_0__.expect)(room?.rulesetIds).toEqual(["pawns-move-backward"]); - }); - (0,__vite_ssr_import_0__.it)("defaults rulesetIds to an empty array when omitted", () => { - const reg = new __vite_ssr_import_1__.RoomRegistry(); - const { code } = reg.createRoom(); - (0,__vite_ssr_import_0__.expect)(reg.getRoom(code)?.rulesetIds).toEqual([]); - }); -}); -(0,__vite_ssr_import_0__.describe)("RoomRegistry.joinRoom", () => { - (0,__vite_ssr_import_0__.it)("assigns black to the second player and echoes active rules", () => { - const reg = new __vite_ssr_import_1__.RoomRegistry(); - const { code } = reg.createRoom(["pawns-move-backward"]); - const result = reg.joinRoom(code); - if ("error" in result) { - throw new Error(`expected success, got ${result.error}`); - }; - (0,__vite_ssr_import_0__.expect)(result.color).toBe("black"); - (0,__vite_ssr_import_0__.expect)(result.token).toMatch(UUID_RE); - (0,__vite_ssr_import_0__.expect)(result.activeRules).toEqual(["pawns-move-backward"]); - const player = reg.getPlayerByToken(code, result.token); - (0,__vite_ssr_import_0__.expect)(player?.color).toBe("black"); - (0,__vite_ssr_import_0__.expect)(player?.connected).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("returns ROOM_NOT_FOUND for an unknown code", () => { - const reg = new __vite_ssr_import_1__.RoomRegistry(); - const result = reg.joinRoom("ZZZZZZ"); - (0,__vite_ssr_import_0__.expect)(result).toEqual({ error: "ROOM_NOT_FOUND" }); - }); - (0,__vite_ssr_import_0__.it)("returns ROOM_FULL when a third player tries to join", () => { - const reg = new __vite_ssr_import_1__.RoomRegistry(); - const { code } = reg.createRoom(); - const second = reg.joinRoom(code); - (0,__vite_ssr_import_0__.expect)("error" in second).toBe(false); - const third = reg.joinRoom(code); - (0,__vite_ssr_import_0__.expect)(third).toEqual({ error: "ROOM_FULL" }); - }); - (0,__vite_ssr_import_0__.it)("issues distinct tokens for white and black", () => { - const reg = new __vite_ssr_import_1__.RoomRegistry(); - const { code, token: whiteToken } = reg.createRoom(); - const join = reg.joinRoom(code); - if ("error" in join) throw new Error(join.error); - (0,__vite_ssr_import_0__.expect)(join.token).not.toBe(whiteToken); - }); -}); -(0,__vite_ssr_import_0__.describe)("RoomRegistry.leaveRoom", () => { - (0,__vite_ssr_import_0__.it)("removes the player and returns true", () => { - const reg = new __vite_ssr_import_1__.RoomRegistry(); - const { code, token } = reg.createRoom(); - const join = reg.joinRoom(code); - if ("error" in join) throw new Error(join.error); - (0,__vite_ssr_import_0__.expect)(reg.leaveRoom(code, join.token)).toBe(true); - (0,__vite_ssr_import_0__.expect)(reg.getPlayerByToken(code, join.token)).toBeUndefined(); - (0,__vite_ssr_import_0__.expect)(reg.getRoom(code)).toBeDefined(); - (0,__vite_ssr_import_0__.expect)(reg.getPlayerByToken(code, token)).toBeDefined(); - }); - (0,__vite_ssr_import_0__.it)("destroys the room once the last player leaves", () => { - const reg = new __vite_ssr_import_1__.RoomRegistry(); - const { code, token } = reg.createRoom(); - (0,__vite_ssr_import_0__.expect)(reg.leaveRoom(code, token)).toBe(true); - (0,__vite_ssr_import_0__.expect)(reg.getRoom(code)).toBeUndefined(); - }); - (0,__vite_ssr_import_0__.it)("returns false when the room does not exist", () => { - const reg = new __vite_ssr_import_1__.RoomRegistry(); - (0,__vite_ssr_import_0__.expect)(reg.leaveRoom("ZZZZZZ", "nope")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("returns false when the token does not match any player", () => { - const reg = new __vite_ssr_import_1__.RoomRegistry(); - const { code } = reg.createRoom(); - (0,__vite_ssr_import_0__.expect)(reg.leaveRoom(code, "not-a-real-token")).toBe(false); - }); -}); -(0,__vite_ssr_import_0__.describe)("RoomRegistry.getPlayerByToken", () => { - (0,__vite_ssr_import_0__.it)("returns the matching player", () => { - const reg = new __vite_ssr_import_1__.RoomRegistry(); - const { code, token } = reg.createRoom(); - const player = reg.getPlayerByToken(code, token); - (0,__vite_ssr_import_0__.expect)(player?.token).toBe(token); - (0,__vite_ssr_import_0__.expect)(player?.color).toBe("white"); - }); - (0,__vite_ssr_import_0__.it)("returns undefined for an unknown room", () => { - const reg = new __vite_ssr_import_1__.RoomRegistry(); - (0,__vite_ssr_import_0__.expect)(reg.getPlayerByToken("ZZZZZZ", "any")).toBeUndefined(); - }); - (0,__vite_ssr_import_0__.it)("returns undefined for an unknown token", () => { - const reg = new __vite_ssr_import_1__.RoomRegistry(); - const { code } = reg.createRoom(); - (0,__vite_ssr_import_0__.expect)(reg.getPlayerByToken(code, "not-a-real-token")).toBeUndefined(); - }); -}); -(0,__vite_ssr_import_0__.describe)("RoomRegistry connection state", () => { - (0,__vite_ssr_import_0__.it)("markDisconnected flips connected to false", () => { - const reg = new __vite_ssr_import_1__.RoomRegistry(); - const { code, token } = reg.createRoom(); - reg.markDisconnected(code, token); - (0,__vite_ssr_import_0__.expect)(reg.getPlayerByToken(code, token)?.connected).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("markConnected flips connected back to true", () => { - const reg = new __vite_ssr_import_1__.RoomRegistry(); - const { code, token } = reg.createRoom(); - reg.markDisconnected(code, token); - reg.markConnected(code, token); - (0,__vite_ssr_import_0__.expect)(reg.getPlayerByToken(code, token)?.connected).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("no-ops silently on unknown rooms/tokens", () => { - const reg = new __vite_ssr_import_1__.RoomRegistry(); - (0,__vite_ssr_import_0__.expect)(() => { - reg.markDisconnected("ZZZZZZ", "x"); - }).not.toThrow(); - (0,__vite_ssr_import_0__.expect)(() => { - reg.markConnected("ZZZZZZ", "x"); - }).not.toThrow(); - }); -}); -(0,__vite_ssr_import_0__.describe)("RoomRegistry code generator", () => { - (0,__vite_ssr_import_0__.it)("produces 1000 unique codes (fuzz)", () => { - const codes = /* @__PURE__ */ new Set(); - for (let i = 0; i < 1e3; i++) { - codes.add(__vite_ssr_import_1__.__test__.generateCode()); - }; - (0,__vite_ssr_import_0__.expect)(codes.size).toBe(1e3); - }); - (0,__vite_ssr_import_0__.it)("only emits characters from the declared alphabet", () => { - const alphabet = new Set(__vite_ssr_import_1__.__test__.CODE_ALPHABET); - for (let i = 0; i < 200; i++) { - const code = __vite_ssr_import_1__.__test__.generateCode(); - (0,__vite_ssr_import_0__.expect)(code.length).toBe(__vite_ssr_import_1__.__test__.CODE_LENGTH); - for (const ch of code) { - (0,__vite_ssr_import_0__.expect)(alphabet.has(ch)).toBe(true); - } - } - }); - (0,__vite_ssr_import_0__.it)("createRoom never returns duplicate codes across 500 rooms", () => { - const reg = new __vite_ssr_import_1__.RoomRegistry(); - const codes = /* @__PURE__ */ new Set(); - for (let i = 0; i < 500; i++) { - const { code } = reg.createRoom(); - codes.add(code); - }; - (0,__vite_ssr_import_0__.expect)(codes.size).toBe(500); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFTLGFBQWE7QUFDbkMsdUNBQU8sS0FBSyxNQUFNLEVBQUUsS0FBSywrQkFBUyxXQUFXO0FBQzdDLGlCQUFXLE1BQU0sTUFBTTtBQUNyQix5Q0FBTyxTQUFTLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJO0FBQUEsTUFDcEM7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBRUQsK0JBQUcsNkRBQTZELE1BQU07QUFDcEUsVUFBTSxNQUFNLElBQUksbUNBQWE7QUFDN0IsVUFBTSxRQUFRLG9CQUFJLElBQVk7QUFDOUIsYUFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLEtBQUs7QUFDNUIsWUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLFdBQVc7QUFDaEMsWUFBTSxJQUFJLElBQUk7QUFBQSxJQUNoQjtBQUNBLHFDQUFPLE1BQU0sSUFBSSxFQUFFLEtBQUssR0FBRztBQUFBLEVBQzdCLENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJyb29tcy50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBpdCwgZXhwZWN0IH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IHsgUm9vbVJlZ2lzdHJ5LCBfX3Rlc3RfXyB9IGZyb20gXCIuL3Jvb21zLmpzXCI7XG5cbmNvbnN0IENPREVfUkUgPSAvXltBLVowLTldezZ9JC87XG5jb25zdCBVVUlEX1JFID1cbiAgL15bMC05YS1mXXs4fS1bMC05YS1mXXs0fS00WzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9JC87XG5cbmRlc2NyaWJlKFwiUm9vbVJlZ2lzdHJ5LmNyZWF0ZVJvb21cIiwgKCkgPT4ge1xuICBpdChcInJldHVybnMgYSA2LWNoYXIgdXBwZXJjYXNlIGFscGhhbnVtZXJpYyBjb2RlXCIsICgpID0+IHtcbiAgICBjb25zdCByZWcgPSBuZXcgUm9vbVJlZ2lzdHJ5KCk7XG4gICAgY29uc3QgeyBjb2RlIH0gPSByZWcuY3JlYXRlUm9vbSgpO1xuICAgIGV4cGVjdChjb2RlKS50b01hdGNoKENPREVfUkUpO1xuICB9KTtcblxuICBpdChcImFzc2lnbnMgd2hpdGUgdG8gdGhlIGNyZWF0b3IgYW5kIHJldHVybnMgYSBVVUlEIHY0IHRva2VuXCIsICgpID0+IHtcbiAgICBjb25zdCByZWcgPSBuZXcgUm9vbVJlZ2lzdHJ5KCk7XG4gICAgY29uc3QgeyBjb2RlLCB0b2tlbiwgY29sb3IgfSA9IHJlZy5jcmVhdGVSb29tKCk7XG4gICAgZXhwZWN0KGNvbG9yKS50b0JlKFwid2hpdGVcIik7XG4gICAgZXhwZWN0KHRva2VuKS50b01hdGNoKFVVSURfUkUpO1xuICAgIGNvbnN0IHBsYXllciA9IHJlZy5nZXRQbGF5ZXJCeVRva2VuKGNvZGUsIHRva2VuKTtcbiAgICBleHBlY3QocGxheWVyKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChwbGF5ZXI/LmNvbG9yKS50b0JlKFwid2hpdGVcIik7XG4gICAgZXhwZWN0KHBsYXllcj8uY29ubmVjdGVkKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChwbGF5ZXI/Lmxhc3RTZXEpLnRvQmUoMCk7XG4gIH0pO1xuXG4gIGl0KFwic3RvcmVzIHJ1bGVzZXRJZHMgZGVmZW5zaXZlbHkgKGNhbGxlciBtdXRhdGlvbiBkb2VzIG5vdCBsZWFrKVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVnID0gbmV3IFJvb21SZWdpc3RyeSgpO1xuICAgIGNvbnN0IHJ1bGVzID0gW1wicGF3bnMtbW92ZS1iYWNrd2FyZFwiXTtcbiAgICBjb25zdCB7IGNvZGUgfSA9IHJlZy5jcmVhdGVSb29tKHJ1bGVzKTtcbiAgICBydWxlcy5wdXNoKFwicGllY2UtaHBcIik7XG4gICAgY29uc3Qgcm9vbSA9IHJlZy5nZXRSb29tKGNvZGUpO1xuICAgIGV4cGVjdChyb29tPy5ydWxlc2V0SWRzKS50b0VxdWFsKFtcInBhd25zLW1vdmUtYmFja3dhcmRcIl0pO1xuICB9KTtcblxuICBpdChcImRlZmF1bHRzIHJ1bGVzZXRJZHMgdG8gYW4gZW1wdHkgYXJyYXkgd2hlbiBvbWl0dGVkXCIsICgpID0+IHtcbiAgICBjb25zdCByZWcgPSBuZXcgUm9vbVJlZ2lzdHJ5KCk7XG4gICAgY29uc3QgeyBjb2RlIH0gPSByZWcuY3JlYXRlUm9vbSgpO1xuICAgIGV4cGVjdChyZWcuZ2V0Um9vbShjb2RlKT8ucnVsZXNldElkcykudG9FcXVhbChbXSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiUm9vbVJlZ2lzdHJ5LmpvaW5Sb29tXCIsICgpID0+IHtcbiAgaXQoXCJhc3NpZ25zIGJsYWNrIHRvIHRoZSBzZWNvbmQgcGxheWVyIGFuZCBlY2hvZXMgYWN0aXZlIHJ1bGVzXCIsICgpID0+IHtcbiAgICBjb25zdCByZWcgPSBuZXcgUm9vbVJlZ2lzdHJ5KCk7XG4gICAgY29uc3QgeyBjb2RlIH0gPSByZWcuY3JlYXRlUm9vbShbXCJwYXducy1tb3ZlLWJhY2t3YXJkXCJdKTtcbiAgICBjb25zdCByZXN1bHQgPSByZWcuam9pblJvb20oY29kZSk7XG4gICAgaWYgKFwiZXJyb3JcIiBpbiByZXN1bHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgc3VjY2VzcywgZ290ICR7cmVzdWx0LmVycm9yfWApO1xuICAgIH1cbiAgICBleHBlY3QocmVzdWx0LmNvbG9yKS50b0JlKFwiYmxhY2tcIik7XG4gICAgZXhwZWN0KHJlc3VsdC50b2tlbikudG9NYXRjaChVVUlEX1JFKTtcbiAgICBleHBlY3QocmVzdWx0LmFjdGl2ZVJ1bGVzKS50b0VxdWFsKFtcInBhd25zLW1vdmUtYmFja3dhcmRcIl0pO1xuICAgIGNvbnN0IHBsYXllciA9IHJlZy5nZXRQbGF5ZXJCeVRva2VuKGNvZGUsIHJlc3VsdC50b2tlbik7XG4gICAgZXhwZWN0KHBsYXllcj8uY29sb3IpLnRvQmUoXCJibGFja1wiKTtcbiAgICBleHBlY3QocGxheWVyPy5jb25uZWN0ZWQpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyBST09NX05PVF9GT1VORCBmb3IgYW4gdW5rbm93biBjb2RlXCIsICgpID0+IHtcbiAgICBjb25zdCByZWcgPSBuZXcgUm9vbVJlZ2lzdHJ5KCk7XG4gICAgY29uc3QgcmVzdWx0ID0gcmVnLmpvaW5Sb29tKFwiWlpaWlpaXCIpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBlcnJvcjogXCJST09NX05PVF9GT1VORFwiIH0pO1xuICB9KTtcblxuICBpdChcInJldHVybnMgUk9PTV9GVUxMIHdoZW4gYSB0aGlyZCBwbGF5ZXIgdHJpZXMgdG8gam9pblwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVnID0gbmV3IFJvb21SZWdpc3RyeSgpO1xuICAgIGNvbnN0IHsgY29kZSB9ID0gcmVnLmNyZWF0ZVJvb20oKTtcbiAgICBjb25zdCBzZWNvbmQgPSByZWcuam9pblJvb20oY29kZSk7XG4gICAgZXhwZWN0KFwiZXJyb3JcIiBpbiBzZWNvbmQpLnRvQmUoZmFsc2UpO1xuICAgIGNvbnN0IHRoaXJkID0gcmVnLmpvaW5Sb29tKGNvZGUpO1xuICAgIGV4cGVjdCh0aGlyZCkudG9FcXVhbCh7IGVycm9yOiBcIlJPT01fRlVMTFwiIH0pO1xuICB9KTtcblxuICBpdChcImlzc3VlcyBkaXN0aW5jdCB0b2tlbnMgZm9yIHdoaXRlIGFuZCBibGFja1wiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVnID0gbmV3IFJvb21SZWdpc3RyeSgpO1xuICAgIGNvbnN0IHsgY29kZSwgdG9rZW46IHdoaXRlVG9rZW4gfSA9IHJlZy5jcmVhdGVSb29tKCk7XG4gICAgY29uc3Qgam9pbiA9IHJlZy5qb2luUm9vbShjb2RlKTtcbiAgICBpZiAoXCJlcnJvclwiIGluIGpvaW4pIHRocm93IG5ldyBFcnJvcihqb2luLmVycm9yKTtcbiAgICBleHBlY3Qoam9pbi50b2tlbikubm90LnRvQmUod2hpdGVUb2tlbik7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiUm9vbVJlZ2lzdHJ5LmxlYXZlUm9vbVwiLCAoKSA9PiB7XG4gIGl0KFwicmVtb3ZlcyB0aGUgcGxheWVyIGFuZCByZXR1cm5zIHRydWVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlZyA9IG5ldyBSb29tUmVnaXN0cnkoKTtcbiAgICBjb25zdCB7IGNvZGUsIHRva2VuIH0gPSByZWcuY3JlYXRlUm9vbSgpO1xuICAgIGNvbnN0IGpvaW4gPSByZWcuam9pblJvb20oY29kZSk7XG4gICAgaWYgKFwiZXJyb3JcIiBpbiBqb2luKSB0aHJvdyBuZXcgRXJyb3Ioam9pbi5lcnJvcik7XG4gICAgZXhwZWN0KHJlZy5sZWF2ZVJvb20oY29kZSwgam9pbi50b2tlbikpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KHJlZy5nZXRQbGF5ZXJCeVRva2VuKGNvZGUsIGpvaW4udG9rZW4pKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgLy8gV2hpdGUgaXMgc3RpbGwgaGVyZSwgc28gdGhlIHJvb20gbGl2ZXMgb24uXG4gICAgZXhwZWN0KHJlZy5nZXRSb29tKGNvZGUpKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChyZWcuZ2V0UGxheWVyQnlUb2tlbihjb2RlLCB0b2tlbikpLnRvQmVEZWZpbmVkKCk7XG4gIH0pO1xuXG4gIGl0KFwiZGVzdHJveXMgdGhlIHJvb20gb25jZSB0aGUgbGFzdCBwbGF5ZXIgbGVhdmVzXCIsICgpID0+IHtcbiAgICBjb25zdCByZWcgPSBuZXcgUm9vbVJlZ2lzdHJ5KCk7XG4gICAgY29uc3QgeyBjb2RlLCB0b2tlbiB9ID0gcmVnLmNyZWF0ZVJvb20oKTtcbiAgICBleHBlY3QocmVnLmxlYXZlUm9vbShjb2RlLCB0b2tlbikpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KHJlZy5nZXRSb29tKGNvZGUpKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyBmYWxzZSB3aGVuIHRoZSByb29tIGRvZXMgbm90IGV4aXN0XCIsICgpID0+IHtcbiAgICBjb25zdCByZWcgPSBuZXcgUm9vbVJlZ2lzdHJ5KCk7XG4gICAgZXhwZWN0KHJlZy5sZWF2ZVJvb20oXCJaWlpaWlpcIiwgXCJub3BlXCIpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIGZhbHNlIHdoZW4gdGhlIHRva2VuIGRvZXMgbm90IG1hdGNoIGFueSBwbGF5ZXJcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlZyA9IG5ldyBSb29tUmVnaXN0cnkoKTtcbiAgICBjb25zdCB7IGNvZGUgfSA9IHJlZy5jcmVhdGVSb29tKCk7XG4gICAgZXhwZWN0KHJlZy5sZWF2ZVJvb20oY29kZSwgXCJub3QtYS1yZWFsLXRva2VuXCIpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJSb29tUmVnaXN0cnkuZ2V0UGxheWVyQnlUb2tlblwiLCAoKSA9PiB7XG4gIGl0KFwicmV0dXJucyB0aGUgbWF0Y2hpbmcgcGxheWVyXCIsICgpID0+IHtcbiAgICBjb25zdCByZWcgPSBuZXcgUm9vbVJlZ2lzdHJ5KCk7XG4gICAgY29uc3QgeyBjb2RlLCB0b2tlbiB9ID0gcmVnLmNyZWF0ZVJvb20oKTtcbiAgICBjb25zdCBwbGF5ZXIgPSByZWcuZ2V0UGxheWVyQnlUb2tlbihjb2RlLCB0b2tlbik7XG4gICAgZXhwZWN0KHBsYXllcj8udG9rZW4pLnRvQmUodG9rZW4pO1xuICAgIGV4cGVjdChwbGF5ZXI/LmNvbG9yKS50b0JlKFwid2hpdGVcIik7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyB1bmRlZmluZWQgZm9yIGFuIHVua25vd24gcm9vbVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVnID0gbmV3IFJvb21SZWdpc3RyeSgpO1xuICAgIGV4cGVjdChyZWcuZ2V0UGxheWVyQnlUb2tlbihcIlpaWlpaWlwiLCBcImFueVwiKSkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcblxuICBpdChcInJldHVybnMgdW5kZWZpbmVkIGZvciBhbiB1bmtub3duIHRva2VuXCIsICgpID0+IHtcbiAgICBjb25zdCByZWcgPSBuZXcgUm9vbVJlZ2lzdHJ5KCk7XG4gICAgY29uc3QgeyBjb2RlIH0gPSByZWcuY3JlYXRlUm9vbSgpO1xuICAgIGV4cGVjdChyZWcuZ2V0UGxheWVyQnlUb2tlbihjb2RlLCBcIm5vdC1hLXJlYWwtdG9rZW5cIikpLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJSb29tUmVnaXN0cnkgY29ubmVjdGlvbiBzdGF0ZVwiLCAoKSA9PiB7XG4gIGl0KFwibWFya0Rpc2Nvbm5lY3RlZCBmbGlwcyBjb25uZWN0ZWQgdG8gZmFsc2VcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlZyA9IG5ldyBSb29tUmVnaXN0cnkoKTtcbiAgICBjb25zdCB7IGNvZGUsIHRva2VuIH0gPSByZWcuY3JlYXRlUm9vbSgpO1xuICAgIHJlZy5tYXJrRGlzY29ubmVjdGVkKGNvZGUsIHRva2VuKTtcbiAgICBleHBlY3QocmVnLmdldFBsYXllckJ5VG9rZW4oY29kZSwgdG9rZW4pPy5jb25uZWN0ZWQpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcIm1hcmtDb25uZWN0ZWQgZmxpcHMgY29ubmVjdGVkIGJhY2sgdG8gdHJ1ZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVnID0gbmV3IFJvb21SZWdpc3RyeSgpO1xuICAgIGNvbnN0IHsgY29kZSwgdG9rZW4gfSA9IHJlZy5jcmVhdGVSb29tKCk7XG4gICAgcmVnLm1hcmtEaXNjb25uZWN0ZWQoY29kZSwgdG9rZW4pO1xuICAgIHJlZy5tYXJrQ29ubmVjdGVkKGNvZGUsIHRva2VuKTtcbiAgICBleHBlY3QocmVnLmdldFBsYXllckJ5VG9rZW4oY29kZSwgdG9rZW4pPy5jb25uZWN0ZWQpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwibm8tb3BzIHNpbGVudGx5IG9uIHVua25vd24gcm9vbXMvdG9rZW5zXCIsICgpID0+IHtcbiAgICBjb25zdCByZWcgPSBuZXcgUm9vbVJlZ2lzdHJ5KCk7XG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIHJlZy5tYXJrRGlzY29ubmVjdGVkKFwiWlpaWlpaXCIsIFwieFwiKTtcbiAgICB9KS5ub3QudG9UaHJvdygpO1xuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICByZWcubWFya0Nvbm5lY3RlZChcIlpaWlpaWlwiLCBcInhcIik7XG4gICAgfSkubm90LnRvVGhyb3coKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJSb29tUmVnaXN0cnkgY29kZSBnZW5lcmF0b3JcIiwgKCkgPT4ge1xuICBpdChcInByb2R1Y2VzIDEwMDAgdW5pcXVlIGNvZGVzIChmdXp6KVwiLCAoKSA9PiB7XG4gICAgY29uc3QgY29kZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykge1xuICAgICAgY29kZXMuYWRkKF9fdGVzdF9fLmdlbmVyYXRlQ29kZSgpKTtcbiAgICB9XG4gICAgZXhwZWN0KGNvZGVzLnNpemUpLnRvQmUoMTAwMCk7XG4gIH0pO1xuXG4gIGl0KFwib25seSBlbWl0cyBjaGFyYWN0ZXJzIGZyb20gdGhlIGRlY2xhcmVkIGFscGhhYmV0XCIsICgpID0+IHtcbiAgICBjb25zdCBhbHBoYWJldCA9IG5ldyBTZXQoX190ZXN0X18uQ09ERV9BTFBIQUJFVCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMDA7IGkrKykge1xuICAgICAgY29uc3QgY29kZSA9IF9fdGVzdF9fLmdlbmVyYXRlQ29kZSgpO1xuICAgICAgZXhwZWN0KGNvZGUubGVuZ3RoKS50b0JlKF9fdGVzdF9fLkNPREVfTEVOR1RIKTtcbiAgICAgIGZvciAoY29uc3QgY2ggb2YgY29kZSkge1xuICAgICAgICBleHBlY3QoYWxwaGFiZXQuaGFzKGNoKSkudG9CZSh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwiY3JlYXRlUm9vbSBuZXZlciByZXR1cm5zIGR1cGxpY2F0ZSBjb2RlcyBhY3Jvc3MgNTAwIHJvb21zXCIsICgpID0+IHtcbiAgICBjb25zdCByZWcgPSBuZXcgUm9vbVJlZ2lzdHJ5KCk7XG4gICAgY29uc3QgY29kZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7XG4gICAgICBjb25zdCB7IGNvZGUgfSA9IHJlZy5jcmVhdGVSb29tKCk7XG4gICAgICBjb2Rlcy5hZGQoY29kZSk7XG4gICAgfVxuICAgIGV4cGVjdChjb2Rlcy5zaXplKS50b0JlKDUwMCk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvc2VydmVyL3NyYy9yb29tcy50ZXN0LnRzIn0= diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/2c0949419de9479defe2393e86c2c024245e4ebc b/KMr2_dqTOvh2R-Vg1E6cO/ssr/2c0949419de9479defe2393e86c2c024245e4ebc deleted file mode 100644 index c8b1df6..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/2c0949419de9479defe2393e86c2c024245e4ebc +++ /dev/null @@ -1,457 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "roomRegistry", { enumerable: true, configurable: true, get(){ try { return roomRegistry } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "sessionRegistry", { enumerable: true, configurable: true, get(){ try { return sessionRegistry } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "registerConnection", { enumerable: true, configurable: true, get(){ try { return registerConnection } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "unregisterConnection", { enumerable: true, configurable: true, get(){ try { return unregisterConnection } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "handleMessage", { enumerable: true, configurable: true, get(){ try { return handleMessage } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/src/game-session.ts", {"importedNames":["GameSessionRegistry"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/logger.ts", {"importedNames":["logger"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/logging.ts", {"importedNames":["incMessages","incMovesFail","incMovesOk","recordTickDuration","setActiveRooms"]}); - - - - - - -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/middleware.ts", {"importedNames":["RateLimiter"]}); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/src/protocol.ts", {"importedNames":["PROTOCOL_VERSION","validateMessageString"]}); - - - -const __vite_ssr_import_5__ = await __vite_ssr_import__("/src/reconnect.ts", {"importedNames":["DEFAULT_GRACE_MS","reconnectManager"]}); -const __vite_ssr_import_6__ = await __vite_ssr_import__("/src/rooms.ts", {"importedNames":["RoomRegistry"]}); -const __vite_ssr_import_7__ = await __vite_ssr_import__("/src/layouts.ts", {"importedNames":["resolveLayoutRequest","toResolvedLayout"]}); -const connections = /* @__PURE__ */ new Map(); -const roomRegistry = new __vite_ssr_import_6__.RoomRegistry(); -const sessionRegistry = new __vite_ssr_import_0__.GameSessionRegistry(); -let serverSeq = 0; -function nextSeq() { - serverSeq += 1; - return serverSeq; -} -function registerConnection(ws) { - connections.set(ws.data.clientId, ws); -}; -function unregisterConnection(ws) { - connections.delete(ws.data.clientId); - const { roomCode, token } = ws.data; - if (roomCode === void 0 || token === void 0) return; - const player = roomRegistry.getPlayerByToken(roomCode, token); - if (!player) return; - roomRegistry.markDisconnected(roomCode, token); - __vite_ssr_import_5__.reconnectManager.startGrace(token, (0,__vite_ssr_import_5__.DEFAULT_GRACE_MS), () => { - broadcastGameEnd(roomCode, token, "player_left"); - roomRegistry.leaveRoom(roomCode, token); - if (roomRegistry.getRoom(roomCode) === void 0) { - sessionRegistry.delete(roomCode); - }; - (0,__vite_ssr_import_2__.setActiveRooms)(roomRegistry.getRoomCount()); - }); -}; -function sendTo(ws, msg) { - ws.send(JSON.stringify(msg)); -} -function getConnectionsInRoom(code) { - const room = roomRegistry.getRoom(code); - if (!room) return []; - const sockets = []; - const byToken = /* @__PURE__ */ new Map(); - for (const ws of connections.values()) { - if (ws.data.token !== void 0) byToken.set(ws.data.token, ws); - }; - for (const token of room.players.keys()) { - const ws = byToken.get(token); - if (ws !== void 0) sockets.push(ws); - }; - return sockets; -} -function broadcastToRoom(code, msg) { - const json = JSON.stringify(msg); - for (const ws of getConnectionsInRoom(code)) { - ws.send(json); - } -} -function envelope(type, payload) { - return { - v: __vite_ssr_import_4__.PROTOCOL_VERSION, - seq: nextSeq(), - ts: Date.now(), - type, - payload - }; -} -function errorMessage(code, message, fatal) { - return envelope("error", { code, message, fatal }); -} -function handleMessage(ws, raw) { - (0,__vite_ssr_import_2__.incMessages)(); - const str = typeof raw === "string" ? raw : raw.toString("utf8"); - const result = (0,__vite_ssr_import_4__.validateMessageString)(str); - if (!result.ok) { - const code = result.error.startsWith("VERSION_MISMATCH") ? "VERSION_MISMATCH" : "INVALID_MESSAGE"; - sendTo(ws, errorMessage(code, result.error, true)); - ws.close(); - return; - }; - const msg = result.data; - switch (msg.type) { - case "room.create": - handleRoomCreate(ws, msg.payload); - break; - case "room.join": - handleRoomJoin(ws, msg.payload, msg.token); - break; - case "room.leave": - handleRoomLeave(ws); - break; - case "game.move": - handleGameMove(ws, msg.payload); - break; - case "room.setPresets": - handleSetPresets(ws, msg.payload); - break; - case "room.created": - case "room.joined": - case "game.state": - case "game.delta": - case "game.end": - case "game.presets": - case "error": - sendTo( - ws, - errorMessage( - "INVALID_MESSAGE", - `server-only message type "${msg.type}" received from client`, - false - ) - ); - break; - } -}; -function handleRoomCreate(ws, payload) { - if (ws.data.roomCode !== void 0) { - sendTo( - ws, - errorMessage( - "INVALID_MESSAGE", - "connection already bound to a room", - false - ) - ); - return; - }; - const layoutResult = (0,__vite_ssr_import_7__.resolveLayoutRequest)(payload.layout); - if (!layoutResult.ok) { - sendTo(ws, errorMessage("LAYOUT_INVALID", layoutResult.error, false)); - return; - }; - const resolvedLayout = layoutResult.layout; - const rulesetIds = payload.rulesetIds ?? []; - const { code, token, color } = roomRegistry.createRoom( - [...rulesetIds], - resolvedLayout - ); - sessionRegistry.create(code, rulesetIds, resolvedLayout); - ws.data.roomCode = code; - ws.data.token = token; - (0,__vite_ssr_import_2__.setActiveRooms)(roomRegistry.getRoomCount()); - __vite_ssr_import_1__.logger.child({ clientId: ws.data.clientId, roomCode: code }).info("room.create"); - sendTo( - ws, - envelope("room.created", { - code, - token, - color, - layout: (0,__vite_ssr_import_7__.toResolvedLayout)(resolvedLayout) - }) - ); -} -function handleRoomJoin(ws, payload, envelopeToken) { - if (ws.data.roomCode !== void 0) { - sendTo( - ws, - errorMessage( - "INVALID_MESSAGE", - "connection already bound to a room", - false - ) - ); - return; - }; - if (envelopeToken !== void 0) { - const existing = roomRegistry.getPlayerByToken( - payload.code, - envelopeToken - ); - if (existing && __vite_ssr_import_5__.reconnectManager.isPending(envelopeToken)) { - handleReconnect(ws, payload.code, existing.token, existing.color); - return; - } - }; - const result = roomRegistry.joinRoom(payload.code); - if ("error" in result) { - sendTo( - ws, - errorMessage(result.error, `room ${payload.code}: ${result.error}`, false) - ); - return; - }; - ws.data.roomCode = payload.code; - ws.data.token = result.token; - __vite_ssr_import_1__.logger.child({ clientId: ws.data.clientId, roomCode: payload.code }).info("room.join"); - sendTo( - ws, - envelope("room.joined", { - code: payload.code, - token: result.token, - color: result.color, - activeRules: result.activeRules, - layout: (0,__vite_ssr_import_7__.toResolvedLayout)(result.layout) - }) - ); - const session = sessionRegistry.get(payload.code); - if (!session) { - __vite_ssr_import_1__.logger.child({ roomCode: payload.code }).error("room.join: missing session for existing room"); - return; - }; - broadcastToRoom( - payload.code, - envelope("game.state", { - facts: session.getAllFacts(), - turn: session.getTurn(), - lastSeq: 0, - moveHistory: [], - activeRules: [...result.activeRules], - activations: session.getPresetActivations(), - // fen is a UI convenience for v1; we haven't wired FEN generation - // on the server yet, so we send an empty string. Clients that need - // FEN can derive it from `facts`. - fen: "" - }) - ); -} -function handleReconnect(ws, code, token, color) { - const missed = __vite_ssr_import_5__.reconnectManager.cancelGrace(token); - if (missed === void 0) { - sendTo( - ws, - errorMessage( - "ROOM_NOT_FOUND", - `reconnect grace expired for room ${code}`, - false - ) - ); - return; - }; - const session = sessionRegistry.get(code); - const room = roomRegistry.getRoom(code); - if (!session || !room) { - sendTo( - ws, - errorMessage( - "ROOM_NOT_FOUND", - `reconnect: room ${code} no longer exists`, - false - ) - ); - return; - }; - roomRegistry.markConnected(code, token); - ws.data.roomCode = code; - ws.data.token = token; - __vite_ssr_import_1__.logger.child({ clientId: ws.data.clientId, roomCode: code }).info("room.join (reconnect)"); - sendTo( - ws, - envelope("room.joined", { - code, - token, - color, - activeRules: [...room.rulesetIds] - }) - ); - sendTo( - ws, - envelope("game.state", { - facts: session.getAllFacts(), - turn: session.getTurn(), - // lastSeq tells the client the highest delta seq it can expect - // to have already processed. For a reconnect we set it to the - // most recent buffered seq (or 0 if nothing was missed) so the - // client can detect any subsequent gaps. - lastSeq: missed.length > 0 ? missed[missed.length - 1]?.seq ?? 0 : 0, - moveHistory: [], - activeRules: [...room.rulesetIds], - activations: session.getPresetActivations(), - fen: "" - }) - ); - for (const delta of missed) { - sendTo(ws, envelope("game.delta", delta.payload)); - } -} -function handleRoomLeave(ws) { - const { roomCode, token } = ws.data; - if (roomCode === void 0 || token === void 0) { - sendTo( - ws, - errorMessage( - "INVALID_MESSAGE", - "room.leave: not currently in a room", - false - ) - ); - return; - }; - broadcastGameEnd(roomCode, token, "player_left"); - roomRegistry.leaveRoom(roomCode, token); - if (roomRegistry.getRoom(roomCode) === void 0) { - sessionRegistry.delete(roomCode); - }; - (0,__vite_ssr_import_2__.setActiveRooms)(roomRegistry.getRoomCount()); - delete ws.data.roomCode; - delete ws.data.token; -} -function handleGameMove(ws, payload) { - const { roomCode, token } = ws.data; - if (roomCode === void 0 || token === void 0) { - sendTo( - ws, - errorMessage("BAD_TOKEN", "not authenticated into a room", false) - ); - return; - }; - const player = roomRegistry.getPlayerByToken(roomCode, token); - if (!player) { - sendTo(ws, errorMessage("BAD_TOKEN", "unknown token for room", false)); - return; - }; - const session = sessionRegistry.get(roomCode); - if (!session) { - sendTo( - ws, - errorMessage( - "INVALID_MESSAGE", - "internal error: missing game session", - true - ) - ); - ws.close(); - return; - }; - if (player.color !== session.getTurn()) { - (0,__vite_ssr_import_2__.incMovesFail)(); - sendTo( - ws, - errorMessage("NOT_YOUR_TURN", "it is not your turn", false) - ); - return; - }; - const presetsBefore = session.getPresetActivations(); - const tickStart = performance.now(); - const moveResult = session.applyMove( - payload.from, - payload.to, - payload.promoteTo - ); - if (!moveResult.ok) { - (0,__vite_ssr_import_2__.incMovesFail)(); - const code = moveResult.error; - sendTo( - ws, - errorMessage( - code, - code === "GAME_OVER" ? "game is already over" : `illegal move ${payload.from}->${payload.to}`, - false - ) - ); - return; - }; - (0,__vite_ssr_import_2__.incMovesOk)(); - (0,__vite_ssr_import_2__.recordTickDuration)(performance.now() - tickStart); - const moveNotation = payload.from + payload.to + (payload.promoteTo ? payload.promoteTo[0] ?? "" : ""); - const deltaPayload = { - inserted: moveResult.inserted, - retracted: moveResult.retracted, - moveNotation, - turn: moveResult.turn, - gameOver: moveResult.gameOver - }; - const deltaMsg = envelope("game.delta", deltaPayload); - broadcastToRoom(roomCode, deltaMsg); - bufferDeltaForDisconnected(roomCode, token, deltaMsg.seq, deltaPayload); - const presetsAfter = session.getPresetActivations(); - if (JSON.stringify(presetsBefore) !== JSON.stringify(presetsAfter)) { - broadcastPresets(roomCode, presetsAfter); - }; - if (moveResult.gameOver !== null) { - broadcastToRoom( - roomCode, - envelope("game.end", { - winner: moveResult.gameOver.winner, - reason: moveResult.gameOver.reason, - finalFen: "" - }) - ); - } -} -function handleSetPresets(ws, payload) { - const { roomCode, token } = ws.data; - if (roomCode === void 0 || token === void 0) { - sendTo( - ws, - errorMessage("BAD_TOKEN", "not authenticated into a room", false) - ); - return; - }; - const session = sessionRegistry.get(roomCode); - if (!session) { - sendTo( - ws, - errorMessage("INVALID_MESSAGE", "internal error: missing game session", true) - ); - ws.close(); - return; - }; - const result = session.setPresets(payload.activations); - if (!result.ok) { - sendTo(ws, errorMessage("INVALID_MESSAGE", result.error, false)); - return; - }; - broadcastPresets(roomCode, session.getPresetActivations()); -} -function broadcastPresets(code, activations) { - broadcastToRoom(code, envelope("game.presets", { activations })); -} -function bufferDeltaForDisconnected(code, moverToken, seq, payload) { - const room = roomRegistry.getRoom(code); - if (!room) return; - for (const player of room.players.values()) { - if (player.token === moverToken) continue; - if (__vite_ssr_import_5__.reconnectManager.isPending(player.token)) { - __vite_ssr_import_5__.reconnectManager.bufferDelta(player.token, seq, payload); - } - } -} -function broadcastGameEnd(code, leaverToken, reason) { - const room = roomRegistry.getRoom(code); - if (!room) return; - let winner = "draw"; - for (const p of room.players.values()) { - if (p.token !== leaverToken) { - winner = p.color; - break; - } - }; - const msg = envelope("game.end", { - winner, - reason, - finalFen: "" - }); - const json = JSON.stringify(msg); - for (const ws of getConnectionsInRoom(code)) { - if (ws.data.token === leaverToken) continue; - ws.send(json); - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7QUFZQTtBQUNBO0FBQ0E7Ozs7Ozs7QUFPQTtBQUNBOzs7O0FBWUE7QUFDQTtBQUNBO0FBc0JBLE1BQU0sY0FBYyxvQkFBSSxJQUF5QztBQUUxRCxNQUFNLGVBQWUsSUFBSSxtQ0FBYTtBQUN0QyxNQUFNLGtCQUFrQixJQUFJLDBDQUFvQjtBQU92RCxJQUFJLFlBQVk7QUFDaEIsU0FBUyxVQUFrQjtBQUN6QixlQUFhO0FBQ2IsU0FBTztBQUNUO0FBTU8sU0FBUyxtQkFBbUIsSUFBdUM7QUFDeEUsY0FBWSxJQUFJLEdBQUcsS0FBSyxVQUFVLEVBQUU7QUFDdEM7QUFFTyxTQUFTLHFCQUFxQixJQUF1QztBQUMxRSxjQUFZLE9BQU8sR0FBRyxLQUFLLFFBQVE7QUFLbkMsUUFBTSxFQUFFLFVBQVUsTUFBTSxJQUFJLEdBQUc7QUFDL0IsTUFBSSxhQUFhLFVBQWEsVUFBVSxPQUFXO0FBSW5ELFFBQU0sU0FBUyxhQUFhLGlCQUFpQixVQUFVLEtBQUs7QUFDNUQsTUFBSSxDQUFDLE9BQVE7QUFFYixlQUFhLGlCQUFpQixVQUFVLEtBQUs7QUFLN0MseUNBQWlCLFdBQVcsVUFBTyx5Q0FBa0IsTUFBTTtBQU16RCxxQkFBaUIsVUFBVSxPQUFPLGFBQWE7QUFDL0MsaUJBQWEsVUFBVSxVQUFVLEtBQUs7QUFDdEMsUUFBSSxhQUFhLFFBQVEsUUFBUSxNQUFNLFFBQVc7QUFDaEQsc0JBQWdCLE9BQU8sUUFBUTtBQUFBLElBQ2pDO0FBQ0EsNkNBQWUsYUFBYSxhQUFhLENBQUM7QUFBQSxFQUM1QyxDQUFDO0FBQ0g7QUFNQSxTQUFTLE9BQU8sSUFBaUMsS0FBMEI7QUFDekUsS0FBRyxLQUFLLEtBQUssVUFBVSxHQUFHLENBQUM7QUFDN0I7QUFFQSxTQUFTLHFCQUNQLE1BQytCO0FBQy9CLFFBQU0sT0FBTyxhQUFhLFFBQVEsSUFBSTtBQUN0QyxNQUFJLENBQUMsS0FBTSxRQUFPLENBQUM7QUFDbkIsUUFBTSxVQUF5QyxDQUFDO0FBS2hELFFBQU0sVUFBVSxvQkFBSSxJQUF5QztBQUM3RCxhQUFXLE1BQU0sWUFBWSxPQUFPLEdBQUc7QUFDckMsUUFBSSxHQUFHLEtBQUssVUFBVSxPQUFXLFNBQVEsSUFBSSxHQUFHLEtBQUssT0FBTyxFQUFFO0FBQUEsRUFDaEU7QUFDQSxhQUFXLFNBQVMsS0FBSyxRQUFRLEtBQUssR0FBRztBQUN2QyxVQUFNLEtBQUssUUFBUSxJQUFJLEtBQUs7QUFDNUIsUUFBSSxPQUFPLE9BQVcsU0FBUSxLQUFLLEVBQUU7QUFBQSxFQUN2QztBQUNBLFNBQU87QUFDVDtBQUVBLFNBQVMsZ0JBQWdCLE1BQWMsS0FBMEI7QUFDL0QsUUFBTSxPQUFPLEtBQUssVUFBVSxHQUFHO0FBQy9CLGFBQVcsTUFBTSxxQkFBcUIsSUFBSSxHQUFHO0FBQzNDLE9BQUcsS0FBSyxJQUFJO0FBQUEsRUFDZDtBQUNGO0FBTUEsU0FBUyxTQUNQLE1BQ0EsU0FDZTtBQUtmLFNBQU87QUFBQSxJQUNMLEdBQUc7QUFBQSxJQUNILEtBQUssUUFBUTtBQUFBLElBQ2IsSUFBSSxLQUFLLElBQUk7QUFBQSxJQUNiO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFDRjtBQUVBLFNBQVMsYUFDUCxNQUNBLFNBQ0EsT0FDZTtBQUNmLFNBQU8sU0FBUyxTQUFTLEVBQUUsTUFBTSxTQUFTLE1BQU0sQ0FBQztBQUNuRDtBQVlPLFNBQVMsY0FDZCxJQUNBLEtBQ007QUFDTix3Q0FBWTtBQUNaLFFBQU0sTUFBTSxPQUFPLFFBQVEsV0FBVyxNQUFNLElBQUksU0FBUyxNQUFNO0FBRS9ELFFBQU0sWUFBUyw2Q0FBc0IsR0FBRztBQUN4QyxNQUFJLENBQUMsT0FBTyxJQUFJO0FBS2QsVUFBTSxPQUFrQixPQUFPLE1BQU0sV0FBVyxrQkFBa0IsSUFDOUQscUJBQ0E7QUFDSixXQUFPLElBQUksYUFBYSxNQUFNLE9BQU8sT0FBTyxJQUFJLENBQUM7QUFDakQsT0FBRyxNQUFNO0FBQ1Q7QUFBQSxFQUNGO0FBRUEsUUFBTSxNQUFNLE9BQU87QUFJbkIsVUFBUSxJQUFJLE1BQU07QUFBQSxJQUNoQixLQUFLO0FBQ0gsdUJBQWlCLElBQUksSUFBSSxPQUFPO0FBQ2hDO0FBQUEsSUFDRixLQUFLO0FBS0gscUJBQWUsSUFBSSxJQUFJLFNBQVMsSUFBSSxLQUFLO0FBQ3pDO0FBQUEsSUFDRixLQUFLO0FBQ0gsc0JBQWdCLEVBQUU7QUFDbEI7QUFBQSxJQUNGLEtBQUs7QUFDSCxxQkFBZSxJQUFJLElBQUksT0FBTztBQUM5QjtBQUFBLElBQ0YsS0FBSztBQUNILHVCQUFpQixJQUFJLElBQUksT0FBTztBQUNoQztBQUFBLElBQ0YsS0FBSztBQUFBLElBQ0wsS0FBSztBQUFBLElBQ0wsS0FBSztBQUFBLElBQ0wsS0FBSztBQUFBLElBQ0wsS0FBSztBQUFBLElBQ0wsS0FBSztBQUFBLElBQ0wsS0FBSztBQUNIO0FBQUEsUUFDRTtBQUFBLFFBQ0E7QUFBQSxVQUNFO0FBQUEsVUFDQSw2QkFBNkIsSUFBSSxJQUFJO0FBQUEsVUFDckM7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUNBO0FBQUEsRUFDSjtBQUNGO0FBTUEsU0FBUyxpQkFDUCxJQUNBLFNBQ007QUFDTixNQUFJLEdBQUcsS0FBSyxhQUFhLFFBQVc7QUFDbEM7QUFBQSxNQUNFO0FBQUEsTUFDQTtBQUFBLFFBQ0U7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQ0E7QUFBQSxFQUNGO0FBS0EsUUFBTSxrQkFBZSw0Q0FBcUIsUUFBUSxNQUFNO0FBQ3hELE1BQUksQ0FBQyxhQUFhLElBQUk7QUFDcEIsV0FBTyxJQUFJLGFBQWEsa0JBQWtCLGFBQWEsT0FBTyxLQUFLLENBQUM7QUFDcEU7QUFBQSxFQUNGO0FBQ0EsUUFBTSxpQkFBaUIsYUFBYTtBQUVwQyxRQUFNLGFBQWEsUUFBUSxjQUFjLENBQUM7QUFDMUMsUUFBTSxFQUFFLE1BQU0sT0FBTyxNQUFNLElBQUksYUFBYTtBQUFBLElBQzFDLENBQUMsR0FBRyxVQUFVO0FBQUEsSUFDZDtBQUFBLEVBQ0Y7QUFDQSxrQkFBZ0IsT0FBTyxNQUFNLFlBQVksY0FBYztBQUN2RCxLQUFHLEtBQUssV0FBVztBQUNuQixLQUFHLEtBQUssUUFBUTtBQUNoQiwyQ0FBZSxhQUFhLGFBQWEsQ0FBQztBQUMxQywrQkFDRyxNQUFNLEVBQUUsVUFBVSxHQUFHLEtBQUssVUFBVSxVQUFVLEtBQUssQ0FBQyxFQUNwRCxLQUFLLGFBQWE7QUFDckI7QUFBQSxJQUNFO0FBQUEsSUFDQSxTQUFTLGdCQUFnQjtBQUFBLE1BQ3ZCO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLFdBQVEsd0NBQWlCLGNBQWM7QUFBQSxJQUN6QyxDQUFDO0FBQUEsRUFDSDtBQUNGO0FBRUEsU0FBUyxlQUNQLElBQ0EsU0FDQSxlQUNNO0FBQ04sTUFBSSxHQUFHLEtBQUssYUFBYSxRQUFXO0FBQ2xDO0FBQUEsTUFDRTtBQUFBLE1BQ0E7QUFBQSxRQUNFO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUNBO0FBQUEsRUFDRjtBQVlBLE1BQUksa0JBQWtCLFFBQVc7QUFDL0IsVUFBTSxXQUFXLGFBQWE7QUFBQSxNQUM1QixRQUFRO0FBQUEsTUFDUjtBQUFBLElBQ0Y7QUFDQSxRQUFJLFlBQVksdUNBQWlCLFVBQVUsYUFBYSxHQUFHO0FBQ3pELHNCQUFnQixJQUFJLFFBQVEsTUFBTSxTQUFTLE9BQU8sU0FBUyxLQUFLO0FBQ2hFO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLFNBQVMsYUFBYSxTQUFTLFFBQVEsSUFBSTtBQUNqRCxNQUFJLFdBQVcsUUFBUTtBQUNyQjtBQUFBLE1BQ0U7QUFBQSxNQUNBLGFBQWEsT0FBTyxPQUFPLFFBQVEsUUFBUSxJQUFJLEtBQUssT0FBTyxLQUFLLElBQUksS0FBSztBQUFBLElBQzNFO0FBQ0E7QUFBQSxFQUNGO0FBQ0EsS0FBRyxLQUFLLFdBQVcsUUFBUTtBQUMzQixLQUFHLEtBQUssUUFBUSxPQUFPO0FBQ3ZCLCtCQUNHLE1BQU0sRUFBRSxVQUFVLEdBQUcsS0FBSyxVQUFVLFVBQVUsUUFBUSxLQUFLLENBQUMsRUFDNUQsS0FBSyxXQUFXO0FBRW5CO0FBQUEsSUFDRTtBQUFBLElBQ0EsU0FBUyxlQUFlO0FBQUEsTUFDdEIsTUFBTSxRQUFRO0FBQUEsTUFDZCxPQUFPLE9BQU87QUFBQSxNQUNkLE9BQU8sT0FBTztBQUFBLE1BQ2QsYUFBYSxPQUFPO0FBQUEsTUFDcEIsV0FBUSx3Q0FBaUIsT0FBTyxNQUFNO0FBQUEsSUFDeEMsQ0FBQztBQUFBLEVBQ0g7QUFLQSxRQUFNLFVBQVUsZ0JBQWdCLElBQUksUUFBUSxJQUFJO0FBQ2hELE1BQUksQ0FBQyxTQUFTO0FBQ1osaUNBQ0csTUFBTSxFQUFFLFVBQVUsUUFBUSxLQUFLLENBQUMsRUFDaEMsTUFBTSw4Q0FBOEM7QUFDdkQ7QUFBQSxFQUNGO0FBQ0E7QUFBQSxJQUNFLFFBQVE7QUFBQSxJQUNSLFNBQVMsY0FBYztBQUFBLE1BQ3JCLE9BQU8sUUFBUSxZQUFZO0FBQUEsTUFDM0IsTUFBTSxRQUFRLFFBQVE7QUFBQSxNQUN0QixTQUFTO0FBQUEsTUFDVCxhQUFhLENBQUM7QUFBQSxNQUNkLGFBQWEsQ0FBQyxHQUFHLE9BQU8sV0FBVztBQUFBLE1BQ25DLGFBQWEsUUFBUSxxQkFBcUI7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUkxQyxLQUFLO0FBQUEsSUFDUCxDQUFDO0FBQUEsRUFDSDtBQUNGO0FBZ0JBLFNBQVMsZ0JBQ1AsSUFDQSxNQUNBLE9BQ0EsT0FDTTtBQUtOLFFBQU0sU0FBUyx1Q0FBaUIsWUFBWSxLQUFLO0FBQ2pELE1BQUksV0FBVyxRQUFXO0FBQ3hCO0FBQUEsTUFDRTtBQUFBLE1BQ0E7QUFBQSxRQUNFO0FBQUEsUUFDQSxvQ0FBb0MsSUFBSTtBQUFBLFFBQ3hDO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQTtBQUFBLEVBQ0Y7QUFDQSxRQUFNLFVBQVUsZ0JBQWdCLElBQUksSUFBSTtBQUN4QyxRQUFNLE9BQU8sYUFBYSxRQUFRLElBQUk7QUFDdEMsTUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNO0FBQ3JCO0FBQUEsTUFDRTtBQUFBLE1BQ0E7QUFBQSxRQUNFO0FBQUEsUUFDQSxtQkFBbUIsSUFBSTtBQUFBLFFBQ3ZCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQTtBQUFBLEVBQ0Y7QUFFQSxlQUFhLGNBQWMsTUFBTSxLQUFLO0FBQ3RDLEtBQUcsS0FBSyxXQUFXO0FBQ25CLEtBQUcsS0FBSyxRQUFRO0FBQ2hCLCtCQUNHLE1BQU0sRUFBRSxVQUFVLEdBQUcsS0FBSyxVQUFVLFVBQVUsS0FBSyxDQUFDLEVBQ3BELEtBQUssdUJBQXVCO0FBRS9CO0FBQUEsSUFDRTtBQUFBLElBQ0EsU0FBUyxlQUFlO0FBQUEsTUFDdEI7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0EsYUFBYSxDQUFDLEdBQUcsS0FBSyxVQUFVO0FBQUEsSUFDbEMsQ0FBQztBQUFBLEVBQ0g7QUFJQTtBQUFBLElBQ0U7QUFBQSxJQUNBLFNBQVMsY0FBYztBQUFBLE1BQ3JCLE9BQU8sUUFBUSxZQUFZO0FBQUEsTUFDM0IsTUFBTSxRQUFRLFFBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS3RCLFNBQVMsT0FBTyxTQUFTLElBQUssT0FBTyxPQUFPLFNBQVMsQ0FBQyxHQUFHLE9BQU8sSUFBSztBQUFBLE1BQ3JFLGFBQWEsQ0FBQztBQUFBLE1BQ2QsYUFBYSxDQUFDLEdBQUcsS0FBSyxVQUFVO0FBQUEsTUFDaEMsYUFBYSxRQUFRLHFCQUFxQjtBQUFBLE1BQzFDLEtBQUs7QUFBQSxJQUNQLENBQUM7QUFBQSxFQUNIO0FBS0EsYUFBVyxTQUFTLFFBQVE7QUFDMUIsV0FBTyxJQUFJLFNBQVMsY0FBYyxNQUFNLE9BQU8sQ0FBQztBQUFBLEVBQ2xEO0FBQ0Y7QUFFQSxTQUFTLGdCQUFnQixJQUF1QztBQUM5RCxRQUFNLEVBQUUsVUFBVSxNQUFNLElBQUksR0FBRztBQUMvQixNQUFJLGFBQWEsVUFBYSxVQUFVLFFBQVc7QUFDakQ7QUFBQSxNQUNFO0FBQUEsTUFDQTtBQUFBLFFBQ0U7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQ0E7QUFBQSxFQUNGO0FBQ0EsbUJBQWlCLFVBQVUsT0FBTyxhQUFhO0FBQy9DLGVBQWEsVUFBVSxVQUFVLEtBQUs7QUFHdEMsTUFBSSxhQUFhLFFBQVEsUUFBUSxNQUFNLFFBQVc7QUFDaEQsb0JBQWdCLE9BQU8sUUFBUTtBQUFBLEVBQ2pDO0FBQ0EsMkNBQWUsYUFBYSxhQUFhLENBQUM7QUFDMUMsU0FBTyxHQUFHLEtBQUs7QUFDZixTQUFPLEdBQUcsS0FBSztBQUNqQjtBQUVBLFNBQVMsZUFDUCxJQUNBLFNBQ007QUFDTixRQUFNLEVBQUUsVUFBVSxNQUFNLElBQUksR0FBRztBQUMvQixNQUFJLGFBQWEsVUFBYSxVQUFVLFFBQVc7QUFDakQ7QUFBQSxNQUNFO0FBQUEsTUFDQSxhQUFhLGFBQWEsaUNBQWlDLEtBQUs7QUFBQSxJQUNsRTtBQUNBO0FBQUEsRUFDRjtBQUNBLFFBQU0sU0FBUyxhQUFhLGlCQUFpQixVQUFVLEtBQUs7QUFDNUQsTUFBSSxDQUFDLFFBQVE7QUFDWCxXQUFPLElBQUksYUFBYSxhQUFhLDBCQUEwQixLQUFLLENBQUM7QUFDckU7QUFBQSxFQUNGO0FBQ0EsUUFBTSxVQUFVLGdCQUFnQixJQUFJLFFBQVE7QUFDNUMsTUFBSSxDQUFDLFNBQVM7QUFHWjtBQUFBLE1BQ0U7QUFBQSxNQUNBO0FBQUEsUUFDRTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQSxPQUFHLE1BQU07QUFDVDtBQUFBLEVBQ0Y7QUFNQSxNQUFJLE9BQU8sVUFBVSxRQUFRLFFBQVEsR0FBRztBQUN0QywyQ0FBYTtBQUNiO0FBQUEsTUFDRTtBQUFBLE1BQ0EsYUFBYSxpQkFBaUIsdUJBQXVCLEtBQUs7QUFBQSxJQUM1RDtBQUNBO0FBQUEsRUFDRjtBQU1BLFFBQU0sZ0JBQWdCLFFBQVEscUJBQXFCO0FBRW5ELFFBQU0sWUFBWSxZQUFZLElBQUk7QUFDbEMsUUFBTSxhQUFhLFFBQVE7QUFBQSxJQUN6QixRQUFRO0FBQUEsSUFDUixRQUFRO0FBQUEsSUFDUixRQUFRO0FBQUEsRUFDVjtBQUNBLE1BQUksQ0FBQyxXQUFXLElBQUk7QUFDbEIsMkNBQWE7QUFDYixVQUFNLE9BQWtCLFdBQVc7QUFDbkM7QUFBQSxNQUNFO0FBQUEsTUFDQTtBQUFBLFFBQ0U7QUFBQSxRQUNBLFNBQVMsY0FDTCx5QkFDQSxnQkFBZ0IsUUFBUSxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQUEsUUFDL0M7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUNBO0FBQUEsRUFDRjtBQUNBLHVDQUFXO0FBQ1gsK0NBQW1CLFlBQVksSUFBSSxJQUFJLFNBQVM7QUFLaEQsUUFBTSxlQUNKLFFBQVEsT0FDUixRQUFRLE1BQ1AsUUFBUSxZQUFZLFFBQVEsVUFBVSxDQUFDLEtBQUssS0FBSztBQUVwRCxRQUFNLGVBQWU7QUFBQSxJQUNuQixVQUFVLFdBQVc7QUFBQSxJQUNyQixXQUFXLFdBQVc7QUFBQSxJQUN0QjtBQUFBLElBQ0EsTUFBTSxXQUFXO0FBQUEsSUFDakIsVUFBVSxXQUFXO0FBQUEsRUFDdkI7QUFDQSxRQUFNLFdBQVcsU0FBUyxjQUFjLFlBQVk7QUFJcEQsa0JBQWdCLFVBQVUsUUFBUTtBQUNsQyw2QkFBMkIsVUFBVSxPQUFPLFNBQVMsS0FBSyxZQUFZO0FBT3RFLFFBQU0sZUFBZSxRQUFRLHFCQUFxQjtBQUNsRCxNQUFJLEtBQUssVUFBVSxhQUFhLE1BQU0sS0FBSyxVQUFVLFlBQVksR0FBRztBQUNsRSxxQkFBaUIsVUFBVSxZQUFZO0FBQUEsRUFDekM7QUFJQSxNQUFJLFdBQVcsYUFBYSxNQUFNO0FBQ2hDO0FBQUEsTUFDRTtBQUFBLE1BQ0EsU0FBUyxZQUFZO0FBQUEsUUFDbkIsUUFBUSxXQUFXLFNBQVM7QUFBQSxRQUM1QixRQUFRLFdBQVcsU0FBUztBQUFBLFFBQzVCLFVBQVU7QUFBQSxNQUNaLENBQUM7QUFBQSxJQUNIO0FBQUEsRUFDRjtBQUNGO0FBRUEsU0FBUyxpQkFDUCxJQUNBLFNBQ007QUFDTixRQUFNLEVBQUUsVUFBVSxNQUFNLElBQUksR0FBRztBQUMvQixNQUFJLGFBQWEsVUFBYSxVQUFVLFFBQVc7QUFDakQ7QUFBQSxNQUNFO0FBQUEsTUFDQSxhQUFhLGFBQWEsaUNBQWlDLEtBQUs7QUFBQSxJQUNsRTtBQUNBO0FBQUEsRUFDRjtBQUNBLFFBQU0sVUFBVSxnQkFBZ0IsSUFBSSxRQUFRO0FBQzVDLE1BQUksQ0FBQyxTQUFTO0FBQ1o7QUFBQSxNQUNFO0FBQUEsTUFDQSxhQUFhLG1CQUFtQix3Q0FBd0MsSUFBSTtBQUFBLElBQzlFO0FBQ0EsT0FBRyxNQUFNO0FBQ1Q7QUFBQSxFQUNGO0FBT0EsUUFBTSxTQUFTLFFBQVEsV0FBVyxRQUFRLFdBQVc7QUFDckQsTUFBSSxDQUFDLE9BQU8sSUFBSTtBQUNkLFdBQU8sSUFBSSxhQUFhLG1CQUFtQixPQUFPLE9BQU8sS0FBSyxDQUFDO0FBQy9EO0FBQUEsRUFDRjtBQUVBLG1CQUFpQixVQUFVLFFBQVEscUJBQXFCLENBQUM7QUFDM0Q7QUFLQSxTQUFTLGlCQUNQLE1BQ0EsYUFDTTtBQUNOLGtCQUFnQixNQUFNLFNBQVMsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDakU7QUFZQSxTQUFTLDJCQUNQLE1BQ0EsWUFDQSxLQUNBLFNBQ007QUFDTixRQUFNLE9BQU8sYUFBYSxRQUFRLElBQUk7QUFDdEMsTUFBSSxDQUFDLEtBQU07QUFDWCxhQUFXLFVBQVUsS0FBSyxRQUFRLE9BQU8sR0FBRztBQUMxQyxRQUFJLE9BQU8sVUFBVSxXQUFZO0FBSWpDLFFBQUksdUNBQWlCLFVBQVUsT0FBTyxLQUFLLEdBQUc7QUFDNUMsNkNBQWlCLFlBQVksT0FBTyxPQUFPLEtBQUssT0FBTztBQUFBLElBQ3pEO0FBQUEsRUFDRjtBQUNGO0FBT0EsU0FBUyxpQkFDUCxNQUNBLGFBQ0EsUUFDTTtBQUNOLFFBQU0sT0FBTyxhQUFhLFFBQVEsSUFBSTtBQUN0QyxNQUFJLENBQUMsS0FBTTtBQUVYLE1BQUksU0FBcUM7QUFDekMsYUFBVyxLQUFLLEtBQUssUUFBUSxPQUFPLEdBQUc7QUFDckMsUUFBSSxFQUFFLFVBQVUsYUFBYTtBQUMzQixlQUFTLEVBQUU7QUFDWDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsUUFBTSxNQUFNLFNBQVMsWUFBWTtBQUFBLElBQy9CO0FBQUEsSUFDQTtBQUFBLElBQ0EsVUFBVTtBQUFBLEVBQ1osQ0FBQztBQUNELFFBQU0sT0FBTyxLQUFLLFVBQVUsR0FBRztBQUMvQixhQUFXLE1BQU0scUJBQXFCLElBQUksR0FBRztBQUMzQyxRQUFJLEdBQUcsS0FBSyxVQUFVLFlBQWE7QUFDbkMsT0FBRyxLQUFLLElBQUk7QUFBQSxFQUNkO0FBQ0YiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImJyb2FkY2FzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBXZWJTb2NrZXQgbWVzc2FnZSByb3V0ZXIgKyBmYWN0LWRlbHRhIGJyb2FkY2FzdGVyIChQNC42KS5cbi8vXG4vLyBBbGwgaW5ib3VuZCBjbGllbnQgZnJhbWVzIGZ1bm5lbCB0aHJvdWdoIGhhbmRsZU1lc3NhZ2UuIFBlci1jb25uZWN0aW9uXG4vLyBzdGF0ZSAoY2xpZW50SWQsIHJvb21Db2RlLCB0b2tlbiwgcmF0ZUxpbWl0ZXIpIGxpdmVzIG9uIHdzLmRhdGE7IHRoZVxuLy8gYXV0aG9yaXRhdGl2ZSByb29tIGFuZCBzZXNzaW9uIHN0YXRlIGxpdmVzIG9uIG1vZHVsZS1zY29wZWQgcmVnaXN0cmllc1xuLy8gc2hhcmVkIGFjcm9zcyB0aGUgcHJvY2Vzcy4gVGhlIG9ubHkgc2lkZS1lZmZlY3RzIGFyZTpcbi8vICAgMS4gbXV0YXRpbmcgUm9vbVJlZ2lzdHJ5IC8gR2FtZVNlc3Npb25SZWdpc3RyeVxuLy8gICAyLiBzZW5kaW5nIGZyYW1lcyB0byBpbmRpdmlkdWFsIHNvY2tldHMgb3IgYnJvYWRjYXN0aW5nIHRvIGEgcm9vbVxuLy8gTm90aGluZyBpbiB0aGlzIG1vZHVsZSB0b3VjaGVzIHRoZSBmaWxlc3lzdGVtLCBuZXR3b3JrIEkvTyBiZXlvbmQgV1MsXG4vLyBvciB0aGUgZXZlbnQgbG9vcCB2aWEgdGltZXJzIOKAlCBoYW5kbGVycyBhcmUgc3luY2hyb25vdXMgYW5kIE8oZmFjdHMpLlxuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJXZWJTb2NrZXQgfSBmcm9tIFwiYnVuXCI7XG5cbmltcG9ydCB7IEdhbWVTZXNzaW9uUmVnaXN0cnkgfSBmcm9tIFwiLi9nYW1lLXNlc3Npb24uanNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dlci5qc1wiO1xuaW1wb3J0IHtcbiAgaW5jTWVzc2FnZXMsXG4gIGluY01vdmVzRmFpbCxcbiAgaW5jTW92ZXNPayxcbiAgcmVjb3JkVGlja0R1cmF0aW9uLFxuICBzZXRBY3RpdmVSb29tcyxcbn0gZnJvbSBcIi4vbG9nZ2luZy5qc1wiO1xuaW1wb3J0IHsgUmF0ZUxpbWl0ZXIgfSBmcm9tIFwiLi9taWRkbGV3YXJlLmpzXCI7XG5pbXBvcnQge1xuICBQUk9UT0NPTF9WRVJTSU9OLFxuICB2YWxpZGF0ZU1lc3NhZ2VTdHJpbmcsXG4gIHR5cGUgRXJyb3JDb2RlLFxuICB0eXBlIEZhY3QgYXMgV2lyZUZhY3QsXG4gIHR5cGUgR2FtZU1vdmVQYXlsb2FkLFxuICB0eXBlIFByZXNldEFjdGl2YXRpb24sXG4gIHR5cGUgUm9vbUNyZWF0ZVBheWxvYWQsXG4gIHR5cGUgUm9vbUpvaW5QYXlsb2FkLFxuICB0eXBlIFJvb21TZXRQcmVzZXRzUGF5bG9hZCxcbiAgdHlwZSBTZXJ2ZXJNZXNzYWdlLFxufSBmcm9tIFwiLi9wcm90b2NvbC5qc1wiO1xuaW1wb3J0IHsgREVGQVVMVF9HUkFDRV9NUywgcmVjb25uZWN0TWFuYWdlciB9IGZyb20gXCIuL3JlY29ubmVjdC5qc1wiO1xuaW1wb3J0IHsgUm9vbVJlZ2lzdHJ5IH0gZnJvbSBcIi4vcm9vbXMuanNcIjtcbmltcG9ydCB7IHJlc29sdmVMYXlvdXRSZXF1ZXN0LCB0b1Jlc29sdmVkTGF5b3V0IH0gZnJvbSBcIi4vbGF5b3V0cy5qc1wiO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFBlci1jb25uZWN0aW9uIGRhdGEgY2FycmllZCBvbiB3cy5kYXRhXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBDbGllbnREYXRhIHtcbiAgLyoqIFByb2Nlc3MtdW5pcXVlIGNvbm5lY3Rpb24gaWQgKHJhbmRvbVVVSUQpLCBtaW50ZWQgYXQgdXBncmFkZSB0aW1lLiAqL1xuICBjbGllbnRJZDogc3RyaW5nO1xuICAvKiogUm9vbSB0aGUgc29ja2V0IGlzIGN1cnJlbnRseSBhdXRoZW50aWNhdGVkIGludG8sIGlmIGFueS4gKi9cbiAgcm9vbUNvZGU/OiBzdHJpbmc7XG4gIC8qKiBQbGF5ZXIgdG9rZW4gd2l0aGluIGByb29tQ29kZWAuIEF1dGhlbnRpY2F0ZXMgc3Vic2VxdWVudCBtZXNzYWdlcy4gKi9cbiAgdG9rZW4/OiBzdHJpbmc7XG4gIC8qKiBMYXp5LWluaXRpYWxpc2VkIG9uIGZpcnN0IG1lc3NhZ2U7IG9uZSBidWNrZXQgcGVyIGNvbm5lY3Rpb24uICovXG4gIHJhdGVMaW1pdGVyPzogUmF0ZUxpbWl0ZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTW9kdWxlIHN0YXRlIOKAlCBzaGFyZWQgYWNyb3NzIHRoZSBwcm9jZXNzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIGNsaWVudElkIOKGkiBzb2NrZXQuIFVzZWQgdG8gcmVzb2x2ZSByb29tIOKGkiBzb2NrZXRzIHZpYSB0b2tlbiBsb29rdXAuICovXG5jb25zdCBjb25uZWN0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBTZXJ2ZXJXZWJTb2NrZXQ8Q2xpZW50RGF0YT4+KCk7XG5cbmV4cG9ydCBjb25zdCByb29tUmVnaXN0cnkgPSBuZXcgUm9vbVJlZ2lzdHJ5KCk7XG5leHBvcnQgY29uc3Qgc2Vzc2lvblJlZ2lzdHJ5ID0gbmV3IEdhbWVTZXNzaW9uUmVnaXN0cnkoKTtcblxuLyoqXG4gKiBNb25vdG9uaWMgc2VydmVyLXNpZGUgc2VxdWVuY2UgY291bnRlci4gRXZlcnkgb3V0Ym91bmQgZnJhbWUgY2Fycmllc1xuICogYHNlcSA9IG5leHRTZXEoKWAgc28gY2xpZW50cyBjYW4gb3JkZXIgbWVzc2FnZXMgZXZlbiBpZiB0aGUgdHJhbnNwb3J0XG4gKiByZW9yZGVycyAoaXQgc2hvdWxkbid0IG92ZXIgYSBzaW5nbGUgV1MsIGJ1dCBjbGllbnRzIHJlY29ubmVjdCkuXG4gKi9cbmxldCBzZXJ2ZXJTZXEgPSAwO1xuZnVuY3Rpb24gbmV4dFNlcSgpOiBudW1iZXIge1xuICBzZXJ2ZXJTZXEgKz0gMTtcbiAgcmV0dXJuIHNlcnZlclNlcTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDb25uZWN0aW9uIGxpZmVjeWNsZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckNvbm5lY3Rpb24od3M6IFNlcnZlcldlYlNvY2tldDxDbGllbnREYXRhPik6IHZvaWQge1xuICBjb25uZWN0aW9ucy5zZXQod3MuZGF0YS5jbGllbnRJZCwgd3MpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5yZWdpc3RlckNvbm5lY3Rpb24od3M6IFNlcnZlcldlYlNvY2tldDxDbGllbnREYXRhPik6IHZvaWQge1xuICBjb25uZWN0aW9ucy5kZWxldGUod3MuZGF0YS5jbGllbnRJZCk7XG4gIC8vIElmIHRoZSBzb2NrZXQgd2FzIGJvdW5kIHRvIGEgcm9vbSwgbWFyayB0aGUgc2xvdCBkaXNjb25uZWN0ZWQgYW5kXG4gIC8vIHN0YXJ0IHRoZSA2MC1zZWNvbmQgcmVjb25uZWN0IGdyYWNlIHdpbmRvdy4gV2UgaW50ZW50aW9uYWxseSBkbyBOT1RcbiAgLy8gbGVhdmVSb29tIGhlcmUg4oCUIGRpc2Nvbm5lY3Qg4omgIGxlYXZlIHBlciBQUk9UT0NPTC5tZC4gVGhlIHNsb3Qgc3RheXNcbiAgLy8gYWxpdmUgdW50aWwgdGhlIHRpbWVyIGZpcmVzIG9yIHRoZSBjbGllbnQgcmV0dXJucyB3aXRoIGl0cyB0b2tlbi5cbiAgY29uc3QgeyByb29tQ29kZSwgdG9rZW4gfSA9IHdzLmRhdGE7XG4gIGlmIChyb29tQ29kZSA9PT0gdW5kZWZpbmVkIHx8IHRva2VuID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuICAvLyBTaG9ydC1jaXJjdWl0OiBpZiB0aGUgcm9vbSBvciBzbG90IGhhcyBhbHJlYWR5IGJlZW4gdG9ybiBkb3duIChlLmcuXG4gIC8vIG9wcG9uZW50IGxlZnQgZmlyc3QpLCB0aGVyZSdzIG5vdGhpbmcgdG8gcHJlc2VydmUuXG4gIGNvbnN0IHBsYXllciA9IHJvb21SZWdpc3RyeS5nZXRQbGF5ZXJCeVRva2VuKHJvb21Db2RlLCB0b2tlbik7XG4gIGlmICghcGxheWVyKSByZXR1cm47XG5cbiAgcm9vbVJlZ2lzdHJ5Lm1hcmtEaXNjb25uZWN0ZWQocm9vbUNvZGUsIHRva2VuKTtcblxuICAvLyBDYXB0dXJlIHJvb21Db2RlICsgdG9rZW4gaW50byB0aGUgY2xvc3VyZSBzbyBvbkV4cGlyZSBkb2Vzbid0IG5lZWRcbiAgLy8gYW55IGFtYmllbnQgYHRoaXNgLiBUaGUgY2xvc3VyZSBydW5zIHVwIHRvIERFRkFVTFRfR1JBQ0VfTVMgbGF0ZXJcbiAgLy8gb24gdGhlIGV2ZW50IGxvb3Ag4oCUIGJ5IHRoZW4gd3MuZGF0YSBtYXkgYWxyZWFkeSBiZSBHQydkLlxuICByZWNvbm5lY3RNYW5hZ2VyLnN0YXJ0R3JhY2UodG9rZW4sIERFRkFVTFRfR1JBQ0VfTVMsICgpID0+IHtcbiAgICAvLyBHcmFjZSBleHBpcmVkIHdpdGhvdXQgYSByZWNvbm5lY3Qg4oCUIHRyZWF0IGFzIGEgcmVhbCBkZXBhcnR1cmUuXG4gICAgLy8gQnJvYWRjYXN0IGdhbWUuZW5kIHRvIHRoZSByZW1haW5pbmcgcGxheWVyLCBkcm9wIHRoZSBzZXNzaW9uLFxuICAgIC8vIGFuZCByZW1vdmUgdGhlIHNsb3QgZnJvbSB0aGUgcm9vbS4gRGVmZW5zaXZlOiB0aGUgcm9vbSAvIHNlc3Npb25cbiAgICAvLyBtYXkgaGF2ZSBiZWVuIHRvcm4gZG93biBieSB0aGUgb3Bwb25lbnQgbGVhdmluZyBkdXJpbmcgdGhlXG4gICAgLy8gd2luZG93OyBldmVyeSBsb29rdXAgYmVsb3cgdG9sZXJhdGVzIG1pc3Npbmcgc3RhdGUuXG4gICAgYnJvYWRjYXN0R2FtZUVuZChyb29tQ29kZSwgdG9rZW4sIFwicGxheWVyX2xlZnRcIik7XG4gICAgcm9vbVJlZ2lzdHJ5LmxlYXZlUm9vbShyb29tQ29kZSwgdG9rZW4pO1xuICAgIGlmIChyb29tUmVnaXN0cnkuZ2V0Um9vbShyb29tQ29kZSkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2Vzc2lvblJlZ2lzdHJ5LmRlbGV0ZShyb29tQ29kZSk7XG4gICAgfVxuICAgIHNldEFjdGl2ZVJvb21zKHJvb21SZWdpc3RyeS5nZXRSb29tQ291bnQoKSk7XG4gIH0pO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNlbmQgaGVscGVyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHNlbmRUbyh3czogU2VydmVyV2ViU29ja2V0PENsaWVudERhdGE+LCBtc2c6IFNlcnZlck1lc3NhZ2UpOiB2b2lkIHtcbiAgd3Muc2VuZChKU09OLnN0cmluZ2lmeShtc2cpKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29ubmVjdGlvbnNJblJvb20oXG4gIGNvZGU6IHN0cmluZyxcbik6IFNlcnZlcldlYlNvY2tldDxDbGllbnREYXRhPltdIHtcbiAgY29uc3Qgcm9vbSA9IHJvb21SZWdpc3RyeS5nZXRSb29tKGNvZGUpO1xuICBpZiAoIXJvb20pIHJldHVybiBbXTtcbiAgY29uc3Qgc29ja2V0czogU2VydmVyV2ViU29ja2V0PENsaWVudERhdGE+W10gPSBbXTtcbiAgLy8gQnVpbGQgYSB0b2tlbiDihpIgc29ja2V0IGxvb2t1cCBmcm9tIHRoZSBmbGF0IGNvbm5lY3Rpb25zIG1hcCBvbmNlIHBlclxuICAvLyBicm9hZGNhc3QuIFJvb21zIGhhdmUg4omkIDIgcGxheWVycyBhbmQgY29ubmVjdGlvbnMgYXJlIOKJpCB+ZmV3IGh1bmRyZWRcbiAgLy8gaW4gdjEsIHNvIGEgbGluZWFyIHNjYW4gaXMgZmluZSBhbmQgYXZvaWRzIGEgc2Vjb25kYXJ5IGluZGV4IHRoYXRcbiAgLy8gd291bGQgbmVlZCBjYWNoZS1pbnZhbGlkYXRpb24gb24gZXZlcnkgYXV0aCBjaGFuZ2UuXG4gIGNvbnN0IGJ5VG9rZW4gPSBuZXcgTWFwPHN0cmluZywgU2VydmVyV2ViU29ja2V0PENsaWVudERhdGE+PigpO1xuICBmb3IgKGNvbnN0IHdzIG9mIGNvbm5lY3Rpb25zLnZhbHVlcygpKSB7XG4gICAgaWYgKHdzLmRhdGEudG9rZW4gIT09IHVuZGVmaW5lZCkgYnlUb2tlbi5zZXQod3MuZGF0YS50b2tlbiwgd3MpO1xuICB9XG4gIGZvciAoY29uc3QgdG9rZW4gb2Ygcm9vbS5wbGF5ZXJzLmtleXMoKSkge1xuICAgIGNvbnN0IHdzID0gYnlUb2tlbi5nZXQodG9rZW4pO1xuICAgIGlmICh3cyAhPT0gdW5kZWZpbmVkKSBzb2NrZXRzLnB1c2god3MpO1xuICB9XG4gIHJldHVybiBzb2NrZXRzO1xufVxuXG5mdW5jdGlvbiBicm9hZGNhc3RUb1Jvb20oY29kZTogc3RyaW5nLCBtc2c6IFNlcnZlck1lc3NhZ2UpOiB2b2lkIHtcbiAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KG1zZyk7XG4gIGZvciAoY29uc3Qgd3Mgb2YgZ2V0Q29ubmVjdGlvbnNJblJvb20oY29kZSkpIHtcbiAgICB3cy5zZW5kKGpzb24pO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRW52ZWxvcGUgYnVpbGRlcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBlbnZlbG9wZTxUIGV4dGVuZHMgU2VydmVyTWVzc2FnZVtcInR5cGVcIl0sIFA+KFxuICB0eXBlOiBULFxuICBwYXlsb2FkOiBQLFxuKTogU2VydmVyTWVzc2FnZSB7XG4gIC8vIFRoZSB6b2QgdW5pb24gZW5mb3JjZXMgcGF5bG9hZC10eXBlIGNvcnJlbGF0aW9uIGF0IHBhcnNlIHRpbWU7IGhlcmVcbiAgLy8gd2UgdHJ1c3QgdGhlIGNhbGxlciAob3VyIG93biBoYW5kbGVycykgdG8gcGFzcyB0aGUgcmlnaHQgcGF5bG9hZCBmb3JcbiAgLy8gdGhlIGRlY2xhcmVkIHR5cGUuIENhc3QgaXMgbmFycm93IOKAlCBubyBgYW55YCwganVzdCBhIHR5cGUgYXNzZXJ0aW9uXG4gIC8vIHRvIHRoZSBkaXNjcmltaW5hdGVkIHVuaW9uIGJyYW5jaCBzaGFwZS5cbiAgcmV0dXJuIHtcbiAgICB2OiBQUk9UT0NPTF9WRVJTSU9OLFxuICAgIHNlcTogbmV4dFNlcSgpLFxuICAgIHRzOiBEYXRlLm5vdygpLFxuICAgIHR5cGUsXG4gICAgcGF5bG9hZCxcbiAgfSBhcyBTZXJ2ZXJNZXNzYWdlO1xufVxuXG5mdW5jdGlvbiBlcnJvck1lc3NhZ2UoXG4gIGNvZGU6IEVycm9yQ29kZSxcbiAgbWVzc2FnZTogc3RyaW5nLFxuICBmYXRhbDogYm9vbGVhbixcbik6IFNlcnZlck1lc3NhZ2Uge1xuICByZXR1cm4gZW52ZWxvcGUoXCJlcnJvclwiLCB7IGNvZGUsIG1lc3NhZ2UsIGZhdGFsIH0pO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1lc3NhZ2UgZGlzcGF0Y2hcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEVudHJ5IHBvaW50IGZvciBldmVyeSBpbmJvdW5kIFdTIGZyYW1lLiBPcmRlciBvZiBjaGVja3MgbWlycm9yc1xuICogUFJPVE9DT0wubWQgwqdFcnJvciBIYW5kbGluZzogZnJhbWluZyDihpIgc2l6ZSDihpIgcGFyc2Ug4oaSIGRpc3BhdGNoLlxuICogU2l6ZSBjaGVjayBpcyBoYW5kbGVkIGJ5IHRoZSBjYWxsZXIgKG1pZGRsZXdhcmUpIGJlZm9yZSB3ZSBzZWUgdGhlXG4gKiBmcmFtZTsgaGVyZSB3ZSBvbmx5IGhhbmRsZSBwYXJzZSArIHJvdXRpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVNZXNzYWdlKFxuICB3czogU2VydmVyV2ViU29ja2V0PENsaWVudERhdGE+LFxuICByYXc6IHN0cmluZyB8IEJ1ZmZlcixcbik6IHZvaWQge1xuICBpbmNNZXNzYWdlcygpO1xuICBjb25zdCBzdHIgPSB0eXBlb2YgcmF3ID09PSBcInN0cmluZ1wiID8gcmF3IDogcmF3LnRvU3RyaW5nKFwidXRmOFwiKTtcblxuICBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZU1lc3NhZ2VTdHJpbmcoc3RyKTtcbiAgaWYgKCFyZXN1bHQub2spIHtcbiAgICAvLyBWRVJTSU9OX01JU01BVENIIGlzIGZhdGFsIHBlciBQUk9UT0NPTC5tZDsgb3RoZXIgcGFyc2UgZmFpbHVyZXMgYXJlXG4gICAgLy8gc3RpbGwgZmF0YWwgaW4gdjEgYmVjYXVzZSB3ZSBoYXZlIG5vIHdheSB0byByZXN5bmMgb24gYSBtYWxmb3JtZWRcbiAgICAvLyBzdHJlYW0uIENsb3NpbmcgdGhlIHNvY2tldCBwcmV2ZW50cyBhIG1pc2JlaGF2aW5nIGNsaWVudCBmcm9tXG4gICAgLy8gZmxvb2RpbmcgdXMgd2l0aCBnYXJiYWdlIHdoaWxlIGNvbnN1bWluZyByYXRlLWxpbWl0IHRva2Vucy5cbiAgICBjb25zdCBjb2RlOiBFcnJvckNvZGUgPSByZXN1bHQuZXJyb3Iuc3RhcnRzV2l0aChcIlZFUlNJT05fTUlTTUFUQ0hcIilcbiAgICAgID8gXCJWRVJTSU9OX01JU01BVENIXCJcbiAgICAgIDogXCJJTlZBTElEX01FU1NBR0VcIjtcbiAgICBzZW5kVG8od3MsIGVycm9yTWVzc2FnZShjb2RlLCByZXN1bHQuZXJyb3IsIHRydWUpKTtcbiAgICB3cy5jbG9zZSgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG1zZyA9IHJlc3VsdC5kYXRhO1xuICAvLyBTZXJ2ZXItb3JpZ2luYXRlZCBtZXNzYWdlcyBhcnJpdmluZyBmcm9tIGEgY2xpZW50IGFyZSBwcm90b2NvbCBlcnJvcnNcbiAgLy8g4oCUIHdlIG5ldmVyIGV4cGVjdCB0byBzZWUgdGhlbSBpbmJvdW5kLiBUaGUgdW5pb24gaW5jbHVkZXMgdGhlbSBzbyB0aGVcbiAgLy8gc2luZ2xlIFNjaGVtYSBjYW4gcm91bmQtdHJpcDsgaGVyZSB3ZSBnYXRlIHRoZW0gb3V0LlxuICBzd2l0Y2ggKG1zZy50eXBlKSB7XG4gICAgY2FzZSBcInJvb20uY3JlYXRlXCI6XG4gICAgICBoYW5kbGVSb29tQ3JlYXRlKHdzLCBtc2cucGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwicm9vbS5qb2luXCI6XG4gICAgICAvLyBgdG9rZW5gIGlzIGFuIE9QVElPTkFMIGVudmVsb3BlLWxldmVsIGZpZWxkIChzZWUgcHJvdG9jb2wudHNcbiAgICAgIC8vIGBlbnZlbG9wZVNoYXBlYCkuIFJlY29ubmVjdGluZyBjbGllbnRzIHJlcGxheSB0aGVpciBvcmlnaW5hbFxuICAgICAgLy8gdG9rZW4gaGVyZSBzbyBoYW5kbGVSb29tSm9pbiBjYW4gZGlzdGluZ3Vpc2ggcmVjb25uZWN0IGZyb21cbiAgICAgIC8vIGEgZnJlc2ggam9pbi4gRnJlc2ggam9pbnMgc2ltcGx5IG9taXQgaXQuXG4gICAgICBoYW5kbGVSb29tSm9pbih3cywgbXNnLnBheWxvYWQsIG1zZy50b2tlbik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwicm9vbS5sZWF2ZVwiOlxuICAgICAgaGFuZGxlUm9vbUxlYXZlKHdzKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJnYW1lLm1vdmVcIjpcbiAgICAgIGhhbmRsZUdhbWVNb3ZlKHdzLCBtc2cucGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwicm9vbS5zZXRQcmVzZXRzXCI6XG4gICAgICBoYW5kbGVTZXRQcmVzZXRzKHdzLCBtc2cucGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwicm9vbS5jcmVhdGVkXCI6XG4gICAgY2FzZSBcInJvb20uam9pbmVkXCI6XG4gICAgY2FzZSBcImdhbWUuc3RhdGVcIjpcbiAgICBjYXNlIFwiZ2FtZS5kZWx0YVwiOlxuICAgIGNhc2UgXCJnYW1lLmVuZFwiOlxuICAgIGNhc2UgXCJnYW1lLnByZXNldHNcIjpcbiAgICBjYXNlIFwiZXJyb3JcIjpcbiAgICAgIHNlbmRUbyhcbiAgICAgICAgd3MsXG4gICAgICAgIGVycm9yTWVzc2FnZShcbiAgICAgICAgICBcIklOVkFMSURfTUVTU0FHRVwiLFxuICAgICAgICAgIGBzZXJ2ZXItb25seSBtZXNzYWdlIHR5cGUgXCIke21zZy50eXBlfVwiIHJlY2VpdmVkIGZyb20gY2xpZW50YCxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEhhbmRsZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gaGFuZGxlUm9vbUNyZWF0ZShcbiAgd3M6IFNlcnZlcldlYlNvY2tldDxDbGllbnREYXRhPixcbiAgcGF5bG9hZDogUm9vbUNyZWF0ZVBheWxvYWQsXG4pOiB2b2lkIHtcbiAgaWYgKHdzLmRhdGEucm9vbUNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgIHNlbmRUbyhcbiAgICAgIHdzLFxuICAgICAgZXJyb3JNZXNzYWdlKFxuICAgICAgICBcIklOVkFMSURfTUVTU0FHRVwiLFxuICAgICAgICBcImNvbm5lY3Rpb24gYWxyZWFkeSBib3VuZCB0byBhIHJvb21cIixcbiAgICAgICAgZmFsc2UsXG4gICAgICApLFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gUmVzb2x2ZSB0aGUgbGF5b3V0IHJlcXVlc3QgKHByZW1hZGUgbG9va3VwIC8gRkVOIHBhcnNlIC8gY3VzdG9tXG4gIC8vIHBpZWNlcykgYW5kIHJ1biB2YWxpZGF0ZUxheW91dCBhZ2FpbnN0IGl0LiBJbnZhbGlkIGxheW91dHMgZmFpbFxuICAvLyBDUkVBVEUgYmVmb3JlIGFueSBzdGF0ZSBpcyB3cml0dGVuLlxuICBjb25zdCBsYXlvdXRSZXN1bHQgPSByZXNvbHZlTGF5b3V0UmVxdWVzdChwYXlsb2FkLmxheW91dCk7XG4gIGlmICghbGF5b3V0UmVzdWx0Lm9rKSB7XG4gICAgc2VuZFRvKHdzLCBlcnJvck1lc3NhZ2UoXCJMQVlPVVRfSU5WQUxJRFwiLCBsYXlvdXRSZXN1bHQuZXJyb3IsIGZhbHNlKSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHJlc29sdmVkTGF5b3V0ID0gbGF5b3V0UmVzdWx0LmxheW91dDtcblxuICBjb25zdCBydWxlc2V0SWRzID0gcGF5bG9hZC5ydWxlc2V0SWRzID8/IFtdO1xuICBjb25zdCB7IGNvZGUsIHRva2VuLCBjb2xvciB9ID0gcm9vbVJlZ2lzdHJ5LmNyZWF0ZVJvb20oXG4gICAgWy4uLnJ1bGVzZXRJZHNdLFxuICAgIHJlc29sdmVkTGF5b3V0LFxuICApO1xuICBzZXNzaW9uUmVnaXN0cnkuY3JlYXRlKGNvZGUsIHJ1bGVzZXRJZHMsIHJlc29sdmVkTGF5b3V0KTtcbiAgd3MuZGF0YS5yb29tQ29kZSA9IGNvZGU7XG4gIHdzLmRhdGEudG9rZW4gPSB0b2tlbjtcbiAgc2V0QWN0aXZlUm9vbXMocm9vbVJlZ2lzdHJ5LmdldFJvb21Db3VudCgpKTtcbiAgbG9nZ2VyXG4gICAgLmNoaWxkKHsgY2xpZW50SWQ6IHdzLmRhdGEuY2xpZW50SWQsIHJvb21Db2RlOiBjb2RlIH0pXG4gICAgLmluZm8oXCJyb29tLmNyZWF0ZVwiKTtcbiAgc2VuZFRvKFxuICAgIHdzLFxuICAgIGVudmVsb3BlKFwicm9vbS5jcmVhdGVkXCIsIHtcbiAgICAgIGNvZGUsXG4gICAgICB0b2tlbixcbiAgICAgIGNvbG9yLFxuICAgICAgbGF5b3V0OiB0b1Jlc29sdmVkTGF5b3V0KHJlc29sdmVkTGF5b3V0KSxcbiAgICB9KSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlUm9vbUpvaW4oXG4gIHdzOiBTZXJ2ZXJXZWJTb2NrZXQ8Q2xpZW50RGF0YT4sXG4gIHBheWxvYWQ6IFJvb21Kb2luUGF5bG9hZCxcbiAgZW52ZWxvcGVUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuKTogdm9pZCB7XG4gIGlmICh3cy5kYXRhLnJvb21Db2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICBzZW5kVG8oXG4gICAgICB3cyxcbiAgICAgIGVycm9yTWVzc2FnZShcbiAgICAgICAgXCJJTlZBTElEX01FU1NBR0VcIixcbiAgICAgICAgXCJjb25uZWN0aW9uIGFscmVhZHkgYm91bmQgdG8gYSByb29tXCIsXG4gICAgICAgIGZhbHNlLFxuICAgICAgKSxcbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIC0tLS0gUmVjb25uZWN0IHBhdGggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gVGhyZWUgY29uZGl0aW9ucyBtdXN0IEFMTCBob2xkIGZvciB0aGlzIHRvIGJlIGEgcmVjb25uZWN0OlxuICAvLyAgIDEuIEVudmVsb3BlIGNhcnJpZXMgYSB0b2tlbiAodGhlIGNsaWVudCBjbGFpbXMgaXQncyByZXR1cm5pbmcpLlxuICAvLyAgIDIuIFRoYXQgdG9rZW4gYmVsb25ncyB0byBhIFJvb21QbGF5ZXIgaW4gYGNvZGVgICh0b2tlbiBpcyB2YWxpZCkuXG4gIC8vICAgMy4gQSBncmFjZSB3aW5kb3cgaXMgY3VycmVudGx5IHBlbmRpbmcgZm9yIHRoYXQgdG9rZW4gKHRoZSBzbG90XG4gIC8vICAgICAgd2FzIHJlY2VudGx5IGRpc2Nvbm5lY3RlZCBhbmQgaGFzbid0IGV4cGlyZWQgeWV0KS5cbiAgLy8gQW55IGZhaWx1cmUgZmFsbHMgdGhyb3VnaCB0byB0aGUgbm9ybWFsIGpvaW4gcGF0aCDigJQgYSBib2d1cyB0b2tlblxuICAvLyBzaG91bGQgbm90IHJldmVhbCB3aGV0aGVyIGEgbWF0Y2hpbmcgc2xvdCBleGlzdHMsIHNvIGEgbWlzbWF0Y2hlZFxuICAvLyByZWNvbm5lY3QgYXR0ZW1wdCBiZWhhdmVzIGFzIGEgZnJlc2ggc2Vjb25kLXBsYXllciBqb2luIGF0dGVtcHQsXG4gIC8vIHdoaWNoIHdpbGwgeWllbGQgUk9PTV9GVUxMIGlmIHRoZSByb29tIGlzIGFscmVhZHkgb2NjdXBpZWQuXG4gIGlmIChlbnZlbG9wZVRva2VuICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBleGlzdGluZyA9IHJvb21SZWdpc3RyeS5nZXRQbGF5ZXJCeVRva2VuKFxuICAgICAgcGF5bG9hZC5jb2RlLFxuICAgICAgZW52ZWxvcGVUb2tlbixcbiAgICApO1xuICAgIGlmIChleGlzdGluZyAmJiByZWNvbm5lY3RNYW5hZ2VyLmlzUGVuZGluZyhlbnZlbG9wZVRva2VuKSkge1xuICAgICAgaGFuZGxlUmVjb25uZWN0KHdzLCBwYXlsb2FkLmNvZGUsIGV4aXN0aW5nLnRva2VuLCBleGlzdGluZy5jb2xvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gcm9vbVJlZ2lzdHJ5LmpvaW5Sb29tKHBheWxvYWQuY29kZSk7XG4gIGlmIChcImVycm9yXCIgaW4gcmVzdWx0KSB7XG4gICAgc2VuZFRvKFxuICAgICAgd3MsXG4gICAgICBlcnJvck1lc3NhZ2UocmVzdWx0LmVycm9yLCBgcm9vbSAke3BheWxvYWQuY29kZX06ICR7cmVzdWx0LmVycm9yfWAsIGZhbHNlKSxcbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuICB3cy5kYXRhLnJvb21Db2RlID0gcGF5bG9hZC5jb2RlO1xuICB3cy5kYXRhLnRva2VuID0gcmVzdWx0LnRva2VuO1xuICBsb2dnZXJcbiAgICAuY2hpbGQoeyBjbGllbnRJZDogd3MuZGF0YS5jbGllbnRJZCwgcm9vbUNvZGU6IHBheWxvYWQuY29kZSB9KVxuICAgIC5pbmZvKFwicm9vbS5qb2luXCIpO1xuXG4gIHNlbmRUbyhcbiAgICB3cyxcbiAgICBlbnZlbG9wZShcInJvb20uam9pbmVkXCIsIHtcbiAgICAgIGNvZGU6IHBheWxvYWQuY29kZSxcbiAgICAgIHRva2VuOiByZXN1bHQudG9rZW4sXG4gICAgICBjb2xvcjogcmVzdWx0LmNvbG9yLFxuICAgICAgYWN0aXZlUnVsZXM6IHJlc3VsdC5hY3RpdmVSdWxlcyxcbiAgICAgIGxheW91dDogdG9SZXNvbHZlZExheW91dChyZXN1bHQubGF5b3V0KSxcbiAgICB9KSxcbiAgKTtcblxuICAvLyBTZWNvbmQgcGxheWVyIGpvaW5lZCDihpIgc2VuZCBnYW1lLnN0YXRlIHRvIEJPVEggcGxheWVycyBzbyB0aGUgVUkgY2FuXG4gIC8vIHJlbmRlciB0aGUgc3RhcnRpbmcgcG9zaXRpb24uIFRoZSBzZXNzaW9uIHdhcyBjcmVhdGVkIG9uIHJvb20uY3JlYXRlXG4gIC8vIHNvIGl0IG11c3QgZXhpc3Q7IGRlZmVuc2l2ZSBsb29rdXAgbG9ncyBhbmQgYmFpbHMgaWYgaXQgZG9lc24ndC5cbiAgY29uc3Qgc2Vzc2lvbiA9IHNlc3Npb25SZWdpc3RyeS5nZXQocGF5bG9hZC5jb2RlKTtcbiAgaWYgKCFzZXNzaW9uKSB7XG4gICAgbG9nZ2VyXG4gICAgICAuY2hpbGQoeyByb29tQ29kZTogcGF5bG9hZC5jb2RlIH0pXG4gICAgICAuZXJyb3IoXCJyb29tLmpvaW46IG1pc3Npbmcgc2Vzc2lvbiBmb3IgZXhpc3Rpbmcgcm9vbVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgYnJvYWRjYXN0VG9Sb29tKFxuICAgIHBheWxvYWQuY29kZSxcbiAgICBlbnZlbG9wZShcImdhbWUuc3RhdGVcIiwge1xuICAgICAgZmFjdHM6IHNlc3Npb24uZ2V0QWxsRmFjdHMoKSxcbiAgICAgIHR1cm46IHNlc3Npb24uZ2V0VHVybigpLFxuICAgICAgbGFzdFNlcTogMCxcbiAgICAgIG1vdmVIaXN0b3J5OiBbXSxcbiAgICAgIGFjdGl2ZVJ1bGVzOiBbLi4ucmVzdWx0LmFjdGl2ZVJ1bGVzXSxcbiAgICAgIGFjdGl2YXRpb25zOiBzZXNzaW9uLmdldFByZXNldEFjdGl2YXRpb25zKCksXG4gICAgICAvLyBmZW4gaXMgYSBVSSBjb252ZW5pZW5jZSBmb3IgdjE7IHdlIGhhdmVuJ3Qgd2lyZWQgRkVOIGdlbmVyYXRpb25cbiAgICAgIC8vIG9uIHRoZSBzZXJ2ZXIgeWV0LCBzbyB3ZSBzZW5kIGFuIGVtcHR5IHN0cmluZy4gQ2xpZW50cyB0aGF0IG5lZWRcbiAgICAgIC8vIEZFTiBjYW4gZGVyaXZlIGl0IGZyb20gYGZhY3RzYC5cbiAgICAgIGZlbjogXCJcIixcbiAgICB9KSxcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXN1bWUgYSBkaXNjb25uZWN0ZWQgc2xvdC4gQ2FuY2VscyB0aGUgZ3JhY2UgdGltZXIsIHJlYmluZHMgdGhlXG4gKiBzb2NrZXQgdG8gdGhlIHJvb20sIHNlbmRzIGEgYHJvb20uam9pbmVkYCBhY2tub3dsZWRnZW1lbnQsIGEgZnJlc2hcbiAqIGBnYW1lLnN0YXRlYCBzbmFwc2hvdCwgdGhlbiByZXBsYXlzIGV2ZXJ5IGBnYW1lLmRlbHRhYCB0aGF0IHdhc1xuICogYnVmZmVyZWQgd2hpbGUgdGhlIGNsaWVudCB3YXMgYXdheSDigJQgaW4gdGhlIG9yaWdpbmFsIHNlcSBvcmRlciBzb1xuICogdGhlIGNsaWVudCdzIGZhY3Qgc3RvcmUgZW5kcyB1cCBpbiB0aGUgc2FtZSBzdGF0ZSBhcyB0aGUgb3Bwb25lbnQncy5cbiAqXG4gKiBUaGUgcmVwbGF5ZWQgZGVsdGFzIGFyZSByZS1lbnZlbG9wZWQgd2l0aCBhIE5FVyBzZXJ2ZXIgc2VxICh0aGVcbiAqIG9yaWdpbmFsIHNlcSBpcyBwcmVzZXJ2ZWQgaW5zaWRlIHRoZSBwYXlsb2FkIHZpYSBnYW1lLnN0YXRlLmxhc3RTZXFcbiAqIHNlbWFudGljcyBvbiB0aGUgY2xpZW50KS4gV2UgZG9uJ3QgcmVwbGF5IHRoZSBoaXN0b3JpY2FsIHNlcSB2ZXJiYXRpbVxuICogYmVjYXVzZSBkb2luZyBzbyB3b3VsZCByZXF1aXJlIGEgc2Vjb25kLCBzZXBhcmF0ZSBjb3VudGVyIHNwYWNlIGFuZFxuICogdGhlIHByb3RvY29sIGRvZXNuJ3QgbmVlZCBpdDogdGhlIGNsaWVudCB0cmVhdHMgZGVsdGFzIGFzIGF1dGhvcml0YXRpdmVcbiAqIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgZW52ZWxvcGUgc2VxLlxuICovXG5mdW5jdGlvbiBoYW5kbGVSZWNvbm5lY3QoXG4gIHdzOiBTZXJ2ZXJXZWJTb2NrZXQ8Q2xpZW50RGF0YT4sXG4gIGNvZGU6IHN0cmluZyxcbiAgdG9rZW46IHN0cmluZyxcbiAgY29sb3I6IFwid2hpdGVcIiB8IFwiYmxhY2tcIixcbik6IHZvaWQge1xuICAvLyBjYW5jZWxHcmFjZSBNVVNUIHJldHVybiBkZWx0YXMgKGlzUGVuZGluZyB3YXMgdHJ1ZSBhYm92ZSksIGJ1dCB3ZVxuICAvLyBkZWZlbmQgYWdhaW5zdCBhIHJhY2Ugd2hlcmUgdGhlIHRpbWVyIGZpcmVzIGJldHdlZW4gdGhlIGlzUGVuZGluZ1xuICAvLyBjaGVjayBhbmQgaGVyZS4gSWYgdGhlIHdpbmRvdyBleHBpcmVkIHdlIGZhbGwgYmFjayB0byB0cmVhdGluZyB0aGlzXG4gIC8vIGFzIGEgZmFpbGVkIHJlY29ubmVjdCDigJQgdGhlIGNhbGxlciBhbHJlYWR5IGVtaXR0ZWQgZ2FtZS5lbmQuXG4gIGNvbnN0IG1pc3NlZCA9IHJlY29ubmVjdE1hbmFnZXIuY2FuY2VsR3JhY2UodG9rZW4pO1xuICBpZiAobWlzc2VkID09PSB1bmRlZmluZWQpIHtcbiAgICBzZW5kVG8oXG4gICAgICB3cyxcbiAgICAgIGVycm9yTWVzc2FnZShcbiAgICAgICAgXCJST09NX05PVF9GT1VORFwiLFxuICAgICAgICBgcmVjb25uZWN0IGdyYWNlIGV4cGlyZWQgZm9yIHJvb20gJHtjb2RlfWAsXG4gICAgICAgIGZhbHNlLFxuICAgICAgKSxcbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBzZXNzaW9uID0gc2Vzc2lvblJlZ2lzdHJ5LmdldChjb2RlKTtcbiAgY29uc3Qgcm9vbSA9IHJvb21SZWdpc3RyeS5nZXRSb29tKGNvZGUpO1xuICBpZiAoIXNlc3Npb24gfHwgIXJvb20pIHtcbiAgICBzZW5kVG8oXG4gICAgICB3cyxcbiAgICAgIGVycm9yTWVzc2FnZShcbiAgICAgICAgXCJST09NX05PVF9GT1VORFwiLFxuICAgICAgICBgcmVjb25uZWN0OiByb29tICR7Y29kZX0gbm8gbG9uZ2VyIGV4aXN0c2AsXG4gICAgICAgIGZhbHNlLFxuICAgICAgKSxcbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJvb21SZWdpc3RyeS5tYXJrQ29ubmVjdGVkKGNvZGUsIHRva2VuKTtcbiAgd3MuZGF0YS5yb29tQ29kZSA9IGNvZGU7XG4gIHdzLmRhdGEudG9rZW4gPSB0b2tlbjtcbiAgbG9nZ2VyXG4gICAgLmNoaWxkKHsgY2xpZW50SWQ6IHdzLmRhdGEuY2xpZW50SWQsIHJvb21Db2RlOiBjb2RlIH0pXG4gICAgLmluZm8oXCJyb29tLmpvaW4gKHJlY29ubmVjdClcIik7XG5cbiAgc2VuZFRvKFxuICAgIHdzLFxuICAgIGVudmVsb3BlKFwicm9vbS5qb2luZWRcIiwge1xuICAgICAgY29kZSxcbiAgICAgIHRva2VuLFxuICAgICAgY29sb3IsXG4gICAgICBhY3RpdmVSdWxlczogWy4uLnJvb20ucnVsZXNldElkc10sXG4gICAgfSksXG4gICk7XG5cbiAgLy8gU25hcHNob3Q6IGF1dGhvcml0YXRpdmUgc3RhdGUgZm9yIHRoZSByZXR1cm5pbmcgY2xpZW50LiBUaGUgY2xpZW50XG4gIC8vIGRpc2NhcmRzIGl0cyBsb2NhbCBmYWN0IHN0b3JlIGFuZCByZWJ1aWxkcyBmcm9tIHRoaXMgZnJhbWUuXG4gIHNlbmRUbyhcbiAgICB3cyxcbiAgICBlbnZlbG9wZShcImdhbWUuc3RhdGVcIiwge1xuICAgICAgZmFjdHM6IHNlc3Npb24uZ2V0QWxsRmFjdHMoKSxcbiAgICAgIHR1cm46IHNlc3Npb24uZ2V0VHVybigpLFxuICAgICAgLy8gbGFzdFNlcSB0ZWxscyB0aGUgY2xpZW50IHRoZSBoaWdoZXN0IGRlbHRhIHNlcSBpdCBjYW4gZXhwZWN0XG4gICAgICAvLyB0byBoYXZlIGFscmVhZHkgcHJvY2Vzc2VkLiBGb3IgYSByZWNvbm5lY3Qgd2Ugc2V0IGl0IHRvIHRoZVxuICAgICAgLy8gbW9zdCByZWNlbnQgYnVmZmVyZWQgc2VxIChvciAwIGlmIG5vdGhpbmcgd2FzIG1pc3NlZCkgc28gdGhlXG4gICAgICAvLyBjbGllbnQgY2FuIGRldGVjdCBhbnkgc3Vic2VxdWVudCBnYXBzLlxuICAgICAgbGFzdFNlcTogbWlzc2VkLmxlbmd0aCA+IDAgPyAobWlzc2VkW21pc3NlZC5sZW5ndGggLSAxXT8uc2VxID8/IDApIDogMCxcbiAgICAgIG1vdmVIaXN0b3J5OiBbXSxcbiAgICAgIGFjdGl2ZVJ1bGVzOiBbLi4ucm9vbS5ydWxlc2V0SWRzXSxcbiAgICAgIGFjdGl2YXRpb25zOiBzZXNzaW9uLmdldFByZXNldEFjdGl2YXRpb25zKCksXG4gICAgICBmZW46IFwiXCIsXG4gICAgfSksXG4gICk7XG5cbiAgLy8gUmVwbGF5IGJ1ZmZlcmVkIGRlbHRhcyBJTiBPUkRFUi4gV2UgcmUtZW52ZWxvcGUgZWFjaCBvbmUgc28gaXRcbiAgLy8gY2FycmllcyBhIGZyZXNoLCBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgc2VxIHJlbGF0aXZlIHRvIG90aGVyXG4gIC8vIHNlcnZlciB0cmFmZmljIG9uIHRoaXMgc29ja2V0LlxuICBmb3IgKGNvbnN0IGRlbHRhIG9mIG1pc3NlZCkge1xuICAgIHNlbmRUbyh3cywgZW52ZWxvcGUoXCJnYW1lLmRlbHRhXCIsIGRlbHRhLnBheWxvYWQpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVSb29tTGVhdmUod3M6IFNlcnZlcldlYlNvY2tldDxDbGllbnREYXRhPik6IHZvaWQge1xuICBjb25zdCB7IHJvb21Db2RlLCB0b2tlbiB9ID0gd3MuZGF0YTtcbiAgaWYgKHJvb21Db2RlID09PSB1bmRlZmluZWQgfHwgdG9rZW4gPT09IHVuZGVmaW5lZCkge1xuICAgIHNlbmRUbyhcbiAgICAgIHdzLFxuICAgICAgZXJyb3JNZXNzYWdlKFxuICAgICAgICBcIklOVkFMSURfTUVTU0FHRVwiLFxuICAgICAgICBcInJvb20ubGVhdmU6IG5vdCBjdXJyZW50bHkgaW4gYSByb29tXCIsXG4gICAgICAgIGZhbHNlLFxuICAgICAgKSxcbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuICBicm9hZGNhc3RHYW1lRW5kKHJvb21Db2RlLCB0b2tlbiwgXCJwbGF5ZXJfbGVmdFwiKTtcbiAgcm9vbVJlZ2lzdHJ5LmxlYXZlUm9vbShyb29tQ29kZSwgdG9rZW4pO1xuICAvLyBJZiB0aGUgcm9vbSBpcyBub3cgZW1wdHksIHJlYXAgaXRzIHNlc3Npb24gdG9vIHNvIGEgcmVjeWNsZWQgY29kZVxuICAvLyBkb2Vzbid0IGFjY2lkZW50YWxseSByZXN1bWUgYSBzdGFsZSBnYW1lLlxuICBpZiAocm9vbVJlZ2lzdHJ5LmdldFJvb20ocm9vbUNvZGUpID09PSB1bmRlZmluZWQpIHtcbiAgICBzZXNzaW9uUmVnaXN0cnkuZGVsZXRlKHJvb21Db2RlKTtcbiAgfVxuICBzZXRBY3RpdmVSb29tcyhyb29tUmVnaXN0cnkuZ2V0Um9vbUNvdW50KCkpO1xuICBkZWxldGUgd3MuZGF0YS5yb29tQ29kZTtcbiAgZGVsZXRlIHdzLmRhdGEudG9rZW47XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUdhbWVNb3ZlKFxuICB3czogU2VydmVyV2ViU29ja2V0PENsaWVudERhdGE+LFxuICBwYXlsb2FkOiBHYW1lTW92ZVBheWxvYWQsXG4pOiB2b2lkIHtcbiAgY29uc3QgeyByb29tQ29kZSwgdG9rZW4gfSA9IHdzLmRhdGE7XG4gIGlmIChyb29tQ29kZSA9PT0gdW5kZWZpbmVkIHx8IHRva2VuID09PSB1bmRlZmluZWQpIHtcbiAgICBzZW5kVG8oXG4gICAgICB3cyxcbiAgICAgIGVycm9yTWVzc2FnZShcIkJBRF9UT0tFTlwiLCBcIm5vdCBhdXRoZW50aWNhdGVkIGludG8gYSByb29tXCIsIGZhbHNlKSxcbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBwbGF5ZXIgPSByb29tUmVnaXN0cnkuZ2V0UGxheWVyQnlUb2tlbihyb29tQ29kZSwgdG9rZW4pO1xuICBpZiAoIXBsYXllcikge1xuICAgIHNlbmRUbyh3cywgZXJyb3JNZXNzYWdlKFwiQkFEX1RPS0VOXCIsIFwidW5rbm93biB0b2tlbiBmb3Igcm9vbVwiLCBmYWxzZSkpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBzZXNzaW9uID0gc2Vzc2lvblJlZ2lzdHJ5LmdldChyb29tQ29kZSk7XG4gIGlmICghc2Vzc2lvbikge1xuICAgIC8vIFNlc3Npb24gbWlzc2luZyBidXQgcm9vbSBleGlzdHM6IGludGVybmFsIGluY29uc2lzdGVuY3kuIFN1cmZhY2VcbiAgICAvLyBhcyBJTlZBTElEX01FU1NBR0Ugc28gdGhlIGNsaWVudCBkaXNjb25uZWN0cyBhbmQgcmUtam9pbnMgY2xlYW4uXG4gICAgc2VuZFRvKFxuICAgICAgd3MsXG4gICAgICBlcnJvck1lc3NhZ2UoXG4gICAgICAgIFwiSU5WQUxJRF9NRVNTQUdFXCIsXG4gICAgICAgIFwiaW50ZXJuYWwgZXJyb3I6IG1pc3NpbmcgZ2FtZSBzZXNzaW9uXCIsXG4gICAgICAgIHRydWUsXG4gICAgICApLFxuICAgICk7XG4gICAgd3MuY2xvc2UoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUdXJuIGdhdGUg4oCUIGFwcGx5TW92ZSB3b3VsZCBjYXRjaCB0aGlzIHRvbyAodGhlIGVuZ2luZSBvbmx5IG9mZmVyc1xuICAvLyBtb3ZlcyBmb3IgdGhlIGN1cnJlbnQgc2lkZSksIGJ1dCB3ZSByZXR1cm4gTk9UX1lPVVJfVFVSTiBzcGVjaWZpY2FsbHlcbiAgLy8gc28gY2xpZW50cyBjYW4gZGlzdGluZ3Vpc2ggXCJ5b3UncmUgcHJlbW92aW5nXCIgZnJvbSBcInRoYXQgbW92ZSBpc1xuICAvLyBpbGxlZ2FsIGZvciB0aGUgc2lkZSB0byBtb3ZlXCIuXG4gIGlmIChwbGF5ZXIuY29sb3IgIT09IHNlc3Npb24uZ2V0VHVybigpKSB7XG4gICAgaW5jTW92ZXNGYWlsKCk7XG4gICAgc2VuZFRvKFxuICAgICAgd3MsXG4gICAgICBlcnJvck1lc3NhZ2UoXCJOT1RfWU9VUl9UVVJOXCIsIFwiaXQgaXMgbm90IHlvdXIgdHVyblwiLCBmYWxzZSksXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBTbmFwc2hvdCB0aGUgcHJlc2V0IHNldCBiZWZvcmUgdGhlIG1vdmUgc28gd2UgY2FuIGRldGVjdCB3aGV0aGVyXG4gIC8vIGFueSBkdXJhdGlvbnMgZXhwaXJlZCBkdXJpbmcgYHRpY2tBZnRlck1vdmVgLiBXZSBvbmx5IGJyb2FkY2FzdFxuICAvLyBgZ2FtZS5wcmVzZXRzYCB3aGVuIHRoZSBzZXQgYWN0dWFsbHkgY2hhbmdlZCDigJQgb3RoZXJ3aXNlIHRoZVxuICAvLyBtZXNzYWdlIGlzIG5vaXNlLlxuICBjb25zdCBwcmVzZXRzQmVmb3JlID0gc2Vzc2lvbi5nZXRQcmVzZXRBY3RpdmF0aW9ucygpO1xuXG4gIGNvbnN0IHRpY2tTdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBjb25zdCBtb3ZlUmVzdWx0ID0gc2Vzc2lvbi5hcHBseU1vdmUoXG4gICAgcGF5bG9hZC5mcm9tLFxuICAgIHBheWxvYWQudG8sXG4gICAgcGF5bG9hZC5wcm9tb3RlVG8sXG4gICk7XG4gIGlmICghbW92ZVJlc3VsdC5vaykge1xuICAgIGluY01vdmVzRmFpbCgpO1xuICAgIGNvbnN0IGNvZGU6IEVycm9yQ29kZSA9IG1vdmVSZXN1bHQuZXJyb3I7XG4gICAgc2VuZFRvKFxuICAgICAgd3MsXG4gICAgICBlcnJvck1lc3NhZ2UoXG4gICAgICAgIGNvZGUsXG4gICAgICAgIGNvZGUgPT09IFwiR0FNRV9PVkVSXCJcbiAgICAgICAgICA/IFwiZ2FtZSBpcyBhbHJlYWR5IG92ZXJcIlxuICAgICAgICAgIDogYGlsbGVnYWwgbW92ZSAke3BheWxvYWQuZnJvbX0tPiR7cGF5bG9hZC50b31gLFxuICAgICAgICBmYWxzZSxcbiAgICAgICksXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaW5jTW92ZXNPaygpO1xuICByZWNvcmRUaWNrRHVyYXRpb24ocGVyZm9ybWFuY2Uubm93KCkgLSB0aWNrU3RhcnQpO1xuXG4gIC8vIHYxIG1vdmUgbm90YXRpb24gaXMgY29tcGFjdCBgZnJvbXRvW3Byb21vdGlvbl1gLiBQUk9UT0NPTC5tZCBleGFtcGxlXG4gIC8vIHVzZXMgXCJlMmU0XCI7IHByb21vdGlvbiBpcyBhcHBlbmRlZCBhcyB0aGUgZmlyc3QgbGV0dGVyIGxvd2VyLWNhc2VcbiAgLy8gKGUuZy4gXCJlN2U4cVwiKS4gRnVsbCBTQU4gaXMgYSBmb2xsb3ctdXAuXG4gIGNvbnN0IG1vdmVOb3RhdGlvbiA9XG4gICAgcGF5bG9hZC5mcm9tICtcbiAgICBwYXlsb2FkLnRvICtcbiAgICAocGF5bG9hZC5wcm9tb3RlVG8gPyBwYXlsb2FkLnByb21vdGVUb1swXSA/PyBcIlwiIDogXCJcIik7XG5cbiAgY29uc3QgZGVsdGFQYXlsb2FkID0ge1xuICAgIGluc2VydGVkOiBtb3ZlUmVzdWx0Lmluc2VydGVkIHNhdGlzZmllcyBXaXJlRmFjdFtdLFxuICAgIHJldHJhY3RlZDogbW92ZVJlc3VsdC5yZXRyYWN0ZWQgc2F0aXNmaWVzIFdpcmVGYWN0W10sXG4gICAgbW92ZU5vdGF0aW9uLFxuICAgIHR1cm46IG1vdmVSZXN1bHQudHVybixcbiAgICBnYW1lT3ZlcjogbW92ZVJlc3VsdC5nYW1lT3ZlcixcbiAgfTtcbiAgY29uc3QgZGVsdGFNc2cgPSBlbnZlbG9wZShcImdhbWUuZGVsdGFcIiwgZGVsdGFQYXlsb2FkKTtcbiAgLy8gQnJvYWRjYXN0IHRvIGN1cnJlbnRseS1jb25uZWN0ZWQgc29ja2V0cyBpbiB0aGUgcm9vbSwgQU5EIGJ1ZmZlciBhXG4gIC8vIGNvcHkgZm9yIGV2ZXJ5IHNsb3QgdGhhdCBpcyBtaWQtZ3JhY2Utd2luZG93IHNvIGEgcmVjb25uZWN0aW5nXG4gIC8vIGNsaWVudCBjYW4gcmVwbGF5IHRoZSBkZWx0YSBvbiByZXR1cm4uXG4gIGJyb2FkY2FzdFRvUm9vbShyb29tQ29kZSwgZGVsdGFNc2cpO1xuICBidWZmZXJEZWx0YUZvckRpc2Nvbm5lY3RlZChyb29tQ29kZSwgdG9rZW4sIGRlbHRhTXNnLnNlcSwgZGVsdGFQYXlsb2FkKTtcblxuICAvLyBJZiBhbnkgcHJlc2V0IGR1cmF0aW9ucyBleHBpcmVkIGR1cmluZyB0aGlzIG1vdmUncyB0aWNrLCBwdXNoIHRoZVxuICAvLyBuZXcgc2V0IHNvIGNsaWVudHMgc3RvcCByZW5kZXJpbmcgdGhvc2UgcnVsZXMuIFdlIHNraXAgdGhlIGJyb2FkY2FzdFxuICAvLyB3aGVuIHRoZSBzZXQgaXMgYnl0ZS1pZGVudGljYWwgdG8gcHJlLW1vdmUg4oCUIHRoZSBjb21tb24gY2FzZSDigJRcbiAgLy8gc28gYSB2YW5pbGxhIGdhbWUgZG9lc24ndCBnZW5lcmF0ZSBhIGBnYW1lLnByZXNldHNgIG1lc3NhZ2Ugb25cbiAgLy8gZXZlcnkgaGFsZi1tb3ZlLlxuICBjb25zdCBwcmVzZXRzQWZ0ZXIgPSBzZXNzaW9uLmdldFByZXNldEFjdGl2YXRpb25zKCk7XG4gIGlmIChKU09OLnN0cmluZ2lmeShwcmVzZXRzQmVmb3JlKSAhPT0gSlNPTi5zdHJpbmdpZnkocHJlc2V0c0FmdGVyKSkge1xuICAgIGJyb2FkY2FzdFByZXNldHMocm9vbUNvZGUsIHByZXNldHNBZnRlcik7XG4gIH1cblxuICAvLyBUZXJtaW5hbCBwb3NpdGlvbnMgYWxzbyBnZXQgYW4gZXhwbGljaXQgZ2FtZS5lbmQgZm9yIGNsYXJpdHkgcGVyXG4gIC8vIFBST1RPQ09MLm1kIMKnZ2FtZS5lbmQuIGBmaW5hbEZlbmAgaXMgZW1wdHkgZm9yIHYxIChzZWUgbm90ZSBhYm92ZSkuXG4gIGlmIChtb3ZlUmVzdWx0LmdhbWVPdmVyICE9PSBudWxsKSB7XG4gICAgYnJvYWRjYXN0VG9Sb29tKFxuICAgICAgcm9vbUNvZGUsXG4gICAgICBlbnZlbG9wZShcImdhbWUuZW5kXCIsIHtcbiAgICAgICAgd2lubmVyOiBtb3ZlUmVzdWx0LmdhbWVPdmVyLndpbm5lcixcbiAgICAgICAgcmVhc29uOiBtb3ZlUmVzdWx0LmdhbWVPdmVyLnJlYXNvbixcbiAgICAgICAgZmluYWxGZW46IFwiXCIsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVNldFByZXNldHMoXG4gIHdzOiBTZXJ2ZXJXZWJTb2NrZXQ8Q2xpZW50RGF0YT4sXG4gIHBheWxvYWQ6IFJvb21TZXRQcmVzZXRzUGF5bG9hZCxcbik6IHZvaWQge1xuICBjb25zdCB7IHJvb21Db2RlLCB0b2tlbiB9ID0gd3MuZGF0YTtcbiAgaWYgKHJvb21Db2RlID09PSB1bmRlZmluZWQgfHwgdG9rZW4gPT09IHVuZGVmaW5lZCkge1xuICAgIHNlbmRUbyhcbiAgICAgIHdzLFxuICAgICAgZXJyb3JNZXNzYWdlKFwiQkFEX1RPS0VOXCIsIFwibm90IGF1dGhlbnRpY2F0ZWQgaW50byBhIHJvb21cIiwgZmFsc2UpLFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHNlc3Npb24gPSBzZXNzaW9uUmVnaXN0cnkuZ2V0KHJvb21Db2RlKTtcbiAgaWYgKCFzZXNzaW9uKSB7XG4gICAgc2VuZFRvKFxuICAgICAgd3MsXG4gICAgICBlcnJvck1lc3NhZ2UoXCJJTlZBTElEX01FU1NBR0VcIiwgXCJpbnRlcm5hbCBlcnJvcjogbWlzc2luZyBnYW1lIHNlc3Npb25cIiwgdHJ1ZSksXG4gICAgKTtcbiAgICB3cy5jbG9zZSgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGJ5IGhhbmRpbmcgdG8gdGhlIEdhbWVTZXNzaW9uIHdoaWNoIGRlbGVnYXRlcyB0b1xuICAvLyBBY3RpdmVQcmVzZXRTZXQuIEJhZCBpbnB1dHMgKHVua25vd24gaWQsIGluY29tcGF0aWJsZSBwYWlyIHVuZGVyXG4gIC8vIG92ZXJsYXBwaW5nIHNjb3BlLCBtaXNzaW5nIHJlcXVpcmVtZW50KSBjb21lIGJhY2sgYXMgc3RydWN0dXJlZFxuICAvLyBlcnJvcnMgdGhhdCB3ZSBzdXJmYWNlIGFzIElOVkFMSURfTUVTU0FHRSBzbyB0aGUgY2xpZW50IGNhbiBzaG93XG4gIC8vIHRoZW0gd2l0aG91dCBkaXNjb25uZWN0aW5nLlxuICBjb25zdCByZXN1bHQgPSBzZXNzaW9uLnNldFByZXNldHMocGF5bG9hZC5hY3RpdmF0aW9ucyk7XG4gIGlmICghcmVzdWx0Lm9rKSB7XG4gICAgc2VuZFRvKHdzLCBlcnJvck1lc3NhZ2UoXCJJTlZBTElEX01FU1NBR0VcIiwgcmVzdWx0LmVycm9yLCBmYWxzZSkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGJyb2FkY2FzdFByZXNldHMocm9vbUNvZGUsIHNlc3Npb24uZ2V0UHJlc2V0QWN0aXZhdGlvbnMoKSk7XG59XG5cbi8qKiBCcm9hZGNhc3QgdGhlIGN1cnJlbnQgcHJlc2V0IHNldCB0byBldmVyeW9uZSBpbiBgY29kZWAuIFVzZWQgYm90aFxuICogIGFmdGVyIGFuIGV4cGxpY2l0IGByb29tLnNldFByZXNldHNgIGFuZCBhZnRlciBhIG1vdmUgd2hvc2UgZHVyYXRpb25cbiAqICB0aWNrIGV4cGlyZWQgc29tZSBlbnRyaWVzLiAqL1xuZnVuY3Rpb24gYnJvYWRjYXN0UHJlc2V0cyhcbiAgY29kZTogc3RyaW5nLFxuICBhY3RpdmF0aW9uczogUHJlc2V0QWN0aXZhdGlvbltdLFxuKTogdm9pZCB7XG4gIGJyb2FkY2FzdFRvUm9vbShjb2RlLCBlbnZlbG9wZShcImdhbWUucHJlc2V0c1wiLCB7IGFjdGl2YXRpb25zIH0pKTtcbn1cblxuLyoqXG4gKiBGb3IgZXZlcnkgT1RIRVIgcGxheWVyIGluIGBjb2RlYCB3aG9zZSBzbG90IGlzIG1pZC1ncmFjZS13aW5kb3dcbiAqIChkaXNjb25uZWN0ZWQpLCBidWZmZXIgYSBjb3B5IG9mIGEganVzdC1icm9hZGNhc3QgZGVsdGEgc28gdGhlXG4gKiByZWNvbm5lY3QgcGF0aCBjYW4gcmVwbGF5IGl0LiBgbW92ZXJUb2tlbmAgaXMgdGhlIHNlbmRlciDigJQgd2UgbmV2ZXJcbiAqIGJ1ZmZlciBiYWNrIHRvIHRoZSBwbGF5ZXIgd2hvIG1hZGUgdGhlIG1vdmUuXG4gKlxuICogVGhlIGJ1ZmZlciBpcyBrZXllZCBvbiB0aGUgb3Bwb25lbnQncyB0b2tlbi4gRGVsZWdhdGVzIHRoZVxuICogcGVuZGluZy1jaGVjayB0byBSZWNvbm5lY3RNYW5hZ2VyIHNvIHdlIGRvbid0IGRvdWJsZS1idWZmZXIgZm9yIGFcbiAqIHNsb3QgdGhhdCB3YXMgYWxyZWFkeSB0b3JuIGRvd24uXG4gKi9cbmZ1bmN0aW9uIGJ1ZmZlckRlbHRhRm9yRGlzY29ubmVjdGVkKFxuICBjb2RlOiBzdHJpbmcsXG4gIG1vdmVyVG9rZW46IHN0cmluZyxcbiAgc2VxOiBudW1iZXIsXG4gIHBheWxvYWQ6IG9iamVjdCxcbik6IHZvaWQge1xuICBjb25zdCByb29tID0gcm9vbVJlZ2lzdHJ5LmdldFJvb20oY29kZSk7XG4gIGlmICghcm9vbSkgcmV0dXJuO1xuICBmb3IgKGNvbnN0IHBsYXllciBvZiByb29tLnBsYXllcnMudmFsdWVzKCkpIHtcbiAgICBpZiAocGxheWVyLnRva2VuID09PSBtb3ZlclRva2VuKSBjb250aW51ZTtcbiAgICAvLyBidWZmZXJEZWx0YSBpdHNlbGYgbm8tb3BzIHdoZW4gbm8gd2luZG93IGlzIHBlbmRpbmcsIGJ1dCB0aGVcbiAgICAvLyBleHBsaWNpdCBjaGVjayBkb2N1bWVudHMgaW50ZW50IGFuZCBhdm9pZHMgYnVpbGRpbmcgdW5uZWNlc3NhcnlcbiAgICAvLyBjbG9zdXJlcyBvbiB0aGUgaG90IHBhdGguXG4gICAgaWYgKHJlY29ubmVjdE1hbmFnZXIuaXNQZW5kaW5nKHBsYXllci50b2tlbikpIHtcbiAgICAgIHJlY29ubmVjdE1hbmFnZXIuYnVmZmVyRGVsdGEocGxheWVyLnRva2VuLCBzZXEsIHBheWxvYWQpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEJyb2FkY2FzdCBhIGdhbWUuZW5kIHRvIGV2ZXJ5b25lIGluIGBjb2RlYCBFWENFUFQgdGhlIHBsYXllciB3aG9zZVxuICogdG9rZW4gaXMgYGxlYXZlclRva2VuYC4gVXNlZCB3aGVuIGEgcGxheWVyIGRpc2Nvbm5lY3RzIG9yIGxlYXZlc1xuICogdm9sdW50YXJpbHkg4oCUIHRoZXkgZG9uJ3QgbmVlZCB0byBoZWFyIGFib3V0IHRoZWlyIG93biBkZXBhcnR1cmUuXG4gKi9cbmZ1bmN0aW9uIGJyb2FkY2FzdEdhbWVFbmQoXG4gIGNvZGU6IHN0cmluZyxcbiAgbGVhdmVyVG9rZW46IHN0cmluZyxcbiAgcmVhc29uOiBcInBsYXllcl9sZWZ0XCIsXG4pOiB2b2lkIHtcbiAgY29uc3Qgcm9vbSA9IHJvb21SZWdpc3RyeS5nZXRSb29tKGNvZGUpO1xuICBpZiAoIXJvb20pIHJldHVybjtcbiAgLy8gV2lubmVyIGlzIHRoZSAqb3RoZXIqIHBsYXllciBpZiB3ZSBjYW4gaWRlbnRpZnkgdGhlbTsgb3RoZXJ3aXNlIGRyYXcuXG4gIGxldCB3aW5uZXI6IFwid2hpdGVcIiB8IFwiYmxhY2tcIiB8IFwiZHJhd1wiID0gXCJkcmF3XCI7XG4gIGZvciAoY29uc3QgcCBvZiByb29tLnBsYXllcnMudmFsdWVzKCkpIHtcbiAgICBpZiAocC50b2tlbiAhPT0gbGVhdmVyVG9rZW4pIHtcbiAgICAgIHdpbm5lciA9IHAuY29sb3I7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgY29uc3QgbXNnID0gZW52ZWxvcGUoXCJnYW1lLmVuZFwiLCB7XG4gICAgd2lubmVyLFxuICAgIHJlYXNvbixcbiAgICBmaW5hbEZlbjogXCJcIixcbiAgfSk7XG4gIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShtc2cpO1xuICBmb3IgKGNvbnN0IHdzIG9mIGdldENvbm5lY3Rpb25zSW5Sb29tKGNvZGUpKSB7XG4gICAgaWYgKHdzLmRhdGEudG9rZW4gPT09IGxlYXZlclRva2VuKSBjb250aW51ZTtcbiAgICB3cy5zZW5kKGpzb24pO1xuICB9XG59XG4iXSwiZmlsZSI6Ii9zcmMvYnJvYWRjYXN0LnRzIn0= diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/2de3dd191927de7c69694b1da7bb4bfe2f119a3e b/KMr2_dqTOvh2R-Vg1E6cO/ssr/2de3dd191927de7c69694b1da7bb4bfe2f119a3e deleted file mode 100644 index 79166dc..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/2de3dd191927de7c69694b1da7bb4bfe2f119a3e +++ /dev/null @@ -1,159 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "ExistentialNode", { enumerable: true, configurable: true, get(){ try { return ExistentialNode } catch {} }}); -class ExistentialNode { - #activateListeners = []; - #deactivateListeners = []; - /** Support count per left token — # of right facts currently matching it. */ - #supportCount = new Map(); - /** Tokens currently passing downstream (count >= 1). */ - #activeTokens = new Set(); - /** All left tokens seen and not yet left-deactivated. */ - #leftTokens = []; - #rightMemory; - #tests; - /** - * @param rightMemory Alpha memory supplying the support facts for this EXISTS. - * @param tests Equality tests evaluated against every `(token, right fact)` - * pair. An empty list accepts every right fact as support, - * which degenerates EXISTS to "any fact of this shape exists". - */ - constructor(rightMemory, tests) { - this.#rightMemory = rightMemory; - this.#tests = tests; - } - /** Subscribe to downstream activations. Listeners fire in registration order. */ - addDownstreamActivate(listener) { - this.#activateListeners.push(listener); - } - /** Subscribe to downstream deactivations. Listeners fire in registration order. */ - addDownstreamDeactivate(listener) { - this.#deactivateListeners.push(listener); - } - /** - * Process a new left-side token. - * - * Counts matching right facts already in {@link AlphaMemory} and, if at - * least one is present, records the token as active and fires downstream - * activate listeners exactly once. - */ - leftActivate(token) { - this.#leftTokens.push(token); - const count = this.#countMatchingFacts(token); - this.#supportCount.set(token, count); - if (count >= 1) { - this.#activeTokens.add(token); - for (const l of this.#activateListeners) - l(token); - } - } - /** - * Withdraw a left-side token. - * - * If the token was currently active (count >= 1 at the time of deactivation) - * the downstream deactivate listeners fire once. Always cleans up the - * per-token state regardless of whether the token was active. Unknown - * tokens (never seen on the left) are silently ignored so that upstream - * retractions never throw because of a missed book-keeping entry. - */ - leftDeactivate(token) { - const idx = this.#leftTokens.indexOf(token); - if (idx === -1) - return; - this.#leftTokens.splice(idx, 1); - if (this.#activeTokens.has(token)) { - this.#activeTokens.delete(token); - for (const l of this.#deactivateListeners) - l(token); - }; - this.#supportCount.delete(token); - } - /** - * Process a newly-matching right-side fact. - * - * For every left token that this fact supports, increment the support - * count. On the 0 → 1 transition (and *only* that transition) the token - * becomes active and downstream activate listeners fire. Subsequent - * increments (1 → 2, 2 → 3, …) leave the active set unchanged, which is - * what gives EXISTS its single-activation-per-token guarantee. - */ - rightActivate(id, _attr, value) { - for (const token of this.#leftTokens) { - if (!this.#factMatchesToken(token, id, value)) - continue; - const prev = this.#supportCount.get(token) ?? 0; - this.#supportCount.set(token, prev + 1); - // Transition 0 → 1: activate. All higher transitions are no-ops. - if (prev === 0) { - this.#activeTokens.add(token); - for (const l of this.#activateListeners) - l(token); - } - } - } - /** - * Process a retracted right-side fact. - * - * For every left token this fact was supporting, decrement the support - * count. On the 1 → 0 transition the token leaves the active set and - * downstream deactivate listeners fire. Transitions that remain >= 1 - * (e.g. 2 → 1) leave the active set unchanged. - * - * The count is floored at 0 as a defensive measure — an upstream retraction - * for a fact that was never counted should be a no-op rather than a - * crash, matching the tolerance expressed in {@link BetaMemory.leftDeactivate}. - */ - rightDeactivate(id, _attr, value) { - for (const token of this.#leftTokens) { - if (!this.#factMatchesToken(token, id, value)) - continue; - const prev = this.#supportCount.get(token) ?? 0; - if (prev === 0) - continue; // nothing to decrement; stay at 0. - const next = prev - 1; - this.#supportCount.set(token, next); - // Transition 1 → 0: deactivate. - if (next === 0 && this.#activeTokens.has(token)) { - this.#activeTokens.delete(token); - for (const l of this.#deactivateListeners) - l(token); - } - } - } - /** Count right-memory facts currently matching `token`. */ - #countMatchingFacts(token) { - let count = 0; - for (const fact of this.#rightMemory.facts) { - if (this.#factMatchesToken(token, fact.id, fact.value)) - count++; - }; - return count; - } - /** - * Evaluate every join test against `(token, right fact)`. - * - * Semantics match {@link JoinNode}'s internal test predicate: - * `idEquality` compares the right entity id against `token.bindings[leftVar]`; - * `valueEquality` compares the right value. A test whose `leftVar` is not - * bound on the token always fails — the same defensive behaviour as - * JoinNode, for the same reason (guards against builder bugs). - */ - #factMatchesToken(token, rightId, rightValue) { - for (const test of this.#tests) { - const leftVal = token.bindings[test.leftVar]; - if (leftVal === undefined) - return false; - if (test.type === "idEquality") { - if (leftVal !== rightId) - return false; - } - else { - // valueEquality - if (leftVal !== rightValue) - return false; - } - }; - return true; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QU8sQ0FBQztZQUM1QyxJQUFJLE9BQU8sS0FBSyxTQUFTO2dCQUFFLE9BQU8sS0FBSztZQUN2QyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFO2dCQUM5QixJQUFJLE9BQU8sS0FBSyxPQUFPO29CQUFFLE9BQU8sS0FBSztZQUN2QztpQkFBTztnQkFDTDtnQkFDQSxJQUFJLE9BQU8sS0FBSyxVQUFVO29CQUFFLE9BQU8sS0FBSztZQUMxQztRQUNGO1FBQ0EsT0FBTyxJQUFJO0lBQ2IiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9leGlzdGVudGlhbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEV4aXN0ZW50aWFsTm9kZSDigJQgRVhJU1RTIHBhdHRlcm4uXG4gKlxuICogUGVyIERvb3JlbmJvcyAxOTk1IMKnMi42LjIuIFBhc3NlcyBhIHRva2VuIGRvd25zdHJlYW0gd2hlbiAqKmF0IGxlYXN0IG9uZSoqXG4gKiByaWdodC1zaWRlIGZhY3Qgc2F0aXNmaWVzIHRoaXMgbm9kZSdzIGVxdWFsaXR5IHRlc3RzIGFnYWluc3QgdGhlIHRva2VuLlxuICpcbiAqIFN0cnVjdHVyYWxseSwgRXhpc3RlbnRpYWxOb2RlIGlzIHRoZSBkdWFsIG9mIE5lZ2F0aW9uTm9kZSAoUDIuMSk6IGJvdGhcbiAqIG1haW50YWluIGEgcGVyLXRva2VuICpzdXBwb3J0IGNvdW50KiBvZiBtYXRjaGluZyByaWdodCBmYWN0cywgYnV0IHRoZVxuICogYWN0aXZhdGlvbiBwcmVkaWNhdGUgaXMgaW52ZXJ0ZWQuXG4gKlxuICogICBOZWdhdGlvbk5vZGU6ICAgIGRvd25zdHJlYW0gYWN0aXZlIGlmZiBjb3VudCA9PT0gMCAgKE5PVClcbiAqICAgRXhpc3RlbnRpYWxOb2RlOiBkb3duc3RyZWFtIGFjdGl2ZSBpZmYgY291bnQgID49IDEgIChFWElTVFMpXG4gKlxuICogIyMjIEZpcmluZyBzZW1hbnRpY3NcbiAqXG4gKiBEb3duc3RyZWFtIGFjdGl2YXRlIGxpc3RlbmVycyBmaXJlICoqZXhhY3RseSBvbmNlKiogd2hlbiB0aGUgY291bnRcbiAqIHRyYW5zaXRpb25zIDAg4oaSIDEgZm9yIGEgdG9rZW4uIFN1YnNlcXVlbnQgcmlnaHQtYWN0aXZhdGVzIHRoYXQgdGFrZSB0aGVcbiAqIGNvdW50IDEg4oaSIDIsIDIg4oaSIDMsIGV0Yy4gZG8gKipub3QqKiByZS1maXJlIHRoZSBkb3duc3RyZWFtIOKAlCB0aGlzIGlzIHRoZVxuICogZGVkdXBsaWNhdGlvbiBndWFyYW50ZWUgcmVxdWlyZWQgYnkgRVhJU1RTOiB0aGUgcnVsZSBzaG91bGQgbWF0Y2ggYVxuICogc2luZ2xlIHRpbWUgcmVnYXJkbGVzcyBvZiBob3cgbWFueSBzdXBwb3J0aW5nIGZhY3RzIGV4aXN0LlxuICpcbiAqIERvd25zdHJlYW0gZGVhY3RpdmF0ZSBsaXN0ZW5lcnMgZmlyZSAqKmV4YWN0bHkgb25jZSoqIHdoZW4gdGhlIGNvdW50XG4gKiB0cmFuc2l0aW9ucyAxIOKGkiAwIChvciB3aGVuIHRoZSBsZWZ0IHRva2VuIGl0c2VsZiBpcyByZXRyYWN0ZWQgd2hpbGVcbiAqIGN1cnJlbnRseSBhY3RpdmUpLlxuICpcbiAqICMjIyBXaHkgbm90IHNoYXJlIGNvZGUgd2l0aCBOZWdhdGlvbk5vZGVcbiAqXG4gKiBEZXNwaXRlIHRoZSBzdHJ1Y3R1cmFsIHNpbWlsYXJpdHksIHRoZSB0d28gbm9kZXMgYXJlIGtlcHQgc2VwYXJhdGU6XG4gKlxuICogLSBUaGUgYWN0aXZhdGlvbiBwcmVkaWNhdGUgZGl2ZXJnZXMgYXQgc2V2ZXJhbCBicmFuY2hlcyAoaW5pdGlhbCBjb3VudCxcbiAqICAgcmlnaHRBY3RpdmF0ZSB0cmFuc2l0aW9uLCByaWdodERlYWN0aXZhdGUgdHJhbnNpdGlvbiksIG5vdCBqdXN0IGFcbiAqICAgc2luZ2xlIGNvbXBhcmlzb24sIHNvIGEgc2hhcmVkIGJhc2UgY2xhc3Mgd291bGQgYmUgdW5pZm9ybWx5IGd1YXJkZWRcbiAqICAgb24gYSBtb2RlIGZsYWcg4oCUIGxlc3MgcmVhZGFibGUgdGhhbiB0d28gZm9jdXNlZCBpbXBsZW1lbnRhdGlvbnMuXG4gKiAtIEVhY2ggbm9kZSBpcyBzbWFsbCAofjEwMCBMT0MpLiBUaGUgZHVwbGljYXRpb24gY29zdCBpcyBsb3c7IHRoZVxuICogICBjb3VwbGluZyBjb3N0IG9mIGEgc2hhcmVkIGFic3RyYWN0aW9uIHdvdWxkIGJlIGhpZ2hlci5cbiAqXG4gKiAjIyMgSW52YXJpYW50c1xuICpcbiAqIC0gYHN1cHBvcnRDb3VudC5nZXQodG9rZW4pYCBpcyBkZWZpbmVkIGZvciBldmVyeSB0b2tlbiBjdXJyZW50bHkgaW5cbiAqICAgYGxlZnRUb2tlbnNgLCBhbmQgZXF1YWxzIHRoZSBudW1iZXIgb2YgcmlnaHQtbWVtb3J5IGZhY3RzIHRoYXQgcGFzc1xuICogICB7QGxpbmsgRXhpc3RlbnRpYWxOb2RlLmZhY3RNYXRjaGVzVG9rZW59IGZvciB0aGF0IHRva2VuLlxuICogLSBgYWN0aXZlVG9rZW5zLmhhcyh0b2tlbilgIGlmZiBgKHN1cHBvcnRDb3VudC5nZXQodG9rZW4pID8/IDApID49IDFgLlxuICogLSBBIHRva2VuIGluIGBhY3RpdmVUb2tlbnNgIGhhcyBoYWQgZXhhY3RseSBvbmUgdW5iYWxhbmNlZCBhY3RpdmF0ZVxuICogICBsaXN0ZW5lciBjYWxsICh0aGUgZGVhY3RpdmF0ZSBoYXMgbm90IHlldCBmaXJlZCkuXG4gKi9cbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiLi9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgQXR0cktleSwgRmFjdFZhbHVlIH0gZnJvbSBcIi4vd20uanNcIjtcbmltcG9ydCB0eXBlIHsgVG9rZW4gfSBmcm9tIFwiLi9iZXRhLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEFscGhhTWVtb3J5IH0gZnJvbSBcIi4vYWxwaGEuanNcIjtcbmltcG9ydCB0eXBlIHsgSm9pblRlc3QgfSBmcm9tIFwiLi9qb2luLmpzXCI7XG5cbnR5cGUgQWN0aXZhdGVMaXN0ZW5lciA9ICh0b2tlbjogVG9rZW4pID0+IHZvaWQ7XG50eXBlIERlYWN0aXZhdGVMaXN0ZW5lciA9ICh0b2tlbjogVG9rZW4pID0+IHZvaWQ7XG5cbmV4cG9ydCBjbGFzcyBFeGlzdGVudGlhbE5vZGUge1xuICByZWFkb25seSAjYWN0aXZhdGVMaXN0ZW5lcnM6IEFjdGl2YXRlTGlzdGVuZXJbXSA9IFtdO1xuICByZWFkb25seSAjZGVhY3RpdmF0ZUxpc3RlbmVyczogRGVhY3RpdmF0ZUxpc3RlbmVyW10gPSBbXTtcblxuICAvKiogU3VwcG9ydCBjb3VudCBwZXIgbGVmdCB0b2tlbiDigJQgIyBvZiByaWdodCBmYWN0cyBjdXJyZW50bHkgbWF0Y2hpbmcgaXQuICovXG4gIHJlYWRvbmx5ICNzdXBwb3J0Q291bnQgPSBuZXcgTWFwPFRva2VuLCBudW1iZXI+KCk7XG4gIC8qKiBUb2tlbnMgY3VycmVudGx5IHBhc3NpbmcgZG93bnN0cmVhbSAoY291bnQgPj0gMSkuICovXG4gIHJlYWRvbmx5ICNhY3RpdmVUb2tlbnMgPSBuZXcgU2V0PFRva2VuPigpO1xuICAvKiogQWxsIGxlZnQgdG9rZW5zIHNlZW4gYW5kIG5vdCB5ZXQgbGVmdC1kZWFjdGl2YXRlZC4gKi9cbiAgcmVhZG9ubHkgI2xlZnRUb2tlbnM6IFRva2VuW10gPSBbXTtcblxuICByZWFkb25seSAjcmlnaHRNZW1vcnk6IEFscGhhTWVtb3J5O1xuICByZWFkb25seSAjdGVzdHM6IHJlYWRvbmx5IEpvaW5UZXN0W107XG5cbiAgLyoqXG4gICAqIEBwYXJhbSByaWdodE1lbW9yeSBBbHBoYSBtZW1vcnkgc3VwcGx5aW5nIHRoZSBzdXBwb3J0IGZhY3RzIGZvciB0aGlzIEVYSVNUUy5cbiAgICogQHBhcmFtIHRlc3RzICAgICAgIEVxdWFsaXR5IHRlc3RzIGV2YWx1YXRlZCBhZ2FpbnN0IGV2ZXJ5IGAodG9rZW4sIHJpZ2h0IGZhY3QpYFxuICAgKiAgICAgICAgICAgICAgICAgICAgcGFpci4gQW4gZW1wdHkgbGlzdCBhY2NlcHRzIGV2ZXJ5IHJpZ2h0IGZhY3QgYXMgc3VwcG9ydCxcbiAgICogICAgICAgICAgICAgICAgICAgIHdoaWNoIGRlZ2VuZXJhdGVzIEVYSVNUUyB0byBcImFueSBmYWN0IG9mIHRoaXMgc2hhcGUgZXhpc3RzXCIuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihyaWdodE1lbW9yeTogQWxwaGFNZW1vcnksIHRlc3RzOiByZWFkb25seSBKb2luVGVzdFtdKSB7XG4gICAgdGhpcy4jcmlnaHRNZW1vcnkgPSByaWdodE1lbW9yeTtcbiAgICB0aGlzLiN0ZXN0cyA9IHRlc3RzO1xuICB9XG5cbiAgLyoqIFN1YnNjcmliZSB0byBkb3duc3RyZWFtIGFjdGl2YXRpb25zLiBMaXN0ZW5lcnMgZmlyZSBpbiByZWdpc3RyYXRpb24gb3JkZXIuICovXG4gIGFkZERvd25zdHJlYW1BY3RpdmF0ZShsaXN0ZW5lcjogQWN0aXZhdGVMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuI2FjdGl2YXRlTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqIFN1YnNjcmliZSB0byBkb3duc3RyZWFtIGRlYWN0aXZhdGlvbnMuIExpc3RlbmVycyBmaXJlIGluIHJlZ2lzdHJhdGlvbiBvcmRlci4gKi9cbiAgYWRkRG93bnN0cmVhbURlYWN0aXZhdGUobGlzdGVuZXI6IERlYWN0aXZhdGVMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuI2RlYWN0aXZhdGVMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBhIG5ldyBsZWZ0LXNpZGUgdG9rZW4uXG4gICAqXG4gICAqIENvdW50cyBtYXRjaGluZyByaWdodCBmYWN0cyBhbHJlYWR5IGluIHtAbGluayBBbHBoYU1lbW9yeX0gYW5kLCBpZiBhdFxuICAgKiBsZWFzdCBvbmUgaXMgcHJlc2VudCwgcmVjb3JkcyB0aGUgdG9rZW4gYXMgYWN0aXZlIGFuZCBmaXJlcyBkb3duc3RyZWFtXG4gICAqIGFjdGl2YXRlIGxpc3RlbmVycyBleGFjdGx5IG9uY2UuXG4gICAqL1xuICBsZWZ0QWN0aXZhdGUodG9rZW46IFRva2VuKTogdm9pZCB7XG4gICAgdGhpcy4jbGVmdFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICBjb25zdCBjb3VudCA9IHRoaXMuI2NvdW50TWF0Y2hpbmdGYWN0cyh0b2tlbik7XG4gICAgdGhpcy4jc3VwcG9ydENvdW50LnNldCh0b2tlbiwgY291bnQpO1xuXG4gICAgaWYgKGNvdW50ID49IDEpIHtcbiAgICAgIHRoaXMuI2FjdGl2ZVRva2Vucy5hZGQodG9rZW4pO1xuICAgICAgZm9yIChjb25zdCBsIG9mIHRoaXMuI2FjdGl2YXRlTGlzdGVuZXJzKSBsKHRva2VuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2l0aGRyYXcgYSBsZWZ0LXNpZGUgdG9rZW4uXG4gICAqXG4gICAqIElmIHRoZSB0b2tlbiB3YXMgY3VycmVudGx5IGFjdGl2ZSAoY291bnQgPj0gMSBhdCB0aGUgdGltZSBvZiBkZWFjdGl2YXRpb24pXG4gICAqIHRoZSBkb3duc3RyZWFtIGRlYWN0aXZhdGUgbGlzdGVuZXJzIGZpcmUgb25jZS4gQWx3YXlzIGNsZWFucyB1cCB0aGVcbiAgICogcGVyLXRva2VuIHN0YXRlIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgdG9rZW4gd2FzIGFjdGl2ZS4gVW5rbm93blxuICAgKiB0b2tlbnMgKG5ldmVyIHNlZW4gb24gdGhlIGxlZnQpIGFyZSBzaWxlbnRseSBpZ25vcmVkIHNvIHRoYXQgdXBzdHJlYW1cbiAgICogcmV0cmFjdGlvbnMgbmV2ZXIgdGhyb3cgYmVjYXVzZSBvZiBhIG1pc3NlZCBib29rLWtlZXBpbmcgZW50cnkuXG4gICAqL1xuICBsZWZ0RGVhY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICBjb25zdCBpZHggPSB0aGlzLiNsZWZ0VG9rZW5zLmluZGV4T2YodG9rZW4pO1xuICAgIGlmIChpZHggPT09IC0xKSByZXR1cm47XG4gICAgdGhpcy4jbGVmdFRva2Vucy5zcGxpY2UoaWR4LCAxKTtcblxuICAgIGlmICh0aGlzLiNhY3RpdmVUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgdGhpcy4jYWN0aXZlVG9rZW5zLmRlbGV0ZSh0b2tlbik7XG4gICAgICBmb3IgKGNvbnN0IGwgb2YgdGhpcy4jZGVhY3RpdmF0ZUxpc3RlbmVycykgbCh0b2tlbik7XG4gICAgfVxuICAgIHRoaXMuI3N1cHBvcnRDb3VudC5kZWxldGUodG9rZW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgYSBuZXdseS1tYXRjaGluZyByaWdodC1zaWRlIGZhY3QuXG4gICAqXG4gICAqIEZvciBldmVyeSBsZWZ0IHRva2VuIHRoYXQgdGhpcyBmYWN0IHN1cHBvcnRzLCBpbmNyZW1lbnQgdGhlIHN1cHBvcnRcbiAgICogY291bnQuIE9uIHRoZSAwIOKGkiAxIHRyYW5zaXRpb24gKGFuZCAqb25seSogdGhhdCB0cmFuc2l0aW9uKSB0aGUgdG9rZW5cbiAgICogYmVjb21lcyBhY3RpdmUgYW5kIGRvd25zdHJlYW0gYWN0aXZhdGUgbGlzdGVuZXJzIGZpcmUuIFN1YnNlcXVlbnRcbiAgICogaW5jcmVtZW50cyAoMSDihpIgMiwgMiDihpIgMywg4oCmKSBsZWF2ZSB0aGUgYWN0aXZlIHNldCB1bmNoYW5nZWQsIHdoaWNoIGlzXG4gICAqIHdoYXQgZ2l2ZXMgRVhJU1RTIGl0cyBzaW5nbGUtYWN0aXZhdGlvbi1wZXItdG9rZW4gZ3VhcmFudGVlLlxuICAgKi9cbiAgcmlnaHRBY3RpdmF0ZShpZDogRW50aXR5SWQsIF9hdHRyOiBBdHRyS2V5LCB2YWx1ZTogRmFjdFZhbHVlKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiB0aGlzLiNsZWZ0VG9rZW5zKSB7XG4gICAgICBpZiAoIXRoaXMuI2ZhY3RNYXRjaGVzVG9rZW4odG9rZW4sIGlkLCB2YWx1ZSkpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBwcmV2ID0gdGhpcy4jc3VwcG9ydENvdW50LmdldCh0b2tlbikgPz8gMDtcbiAgICAgIHRoaXMuI3N1cHBvcnRDb3VudC5zZXQodG9rZW4sIHByZXYgKyAxKTtcblxuICAgICAgLy8gVHJhbnNpdGlvbiAwIOKGkiAxOiBhY3RpdmF0ZS4gQWxsIGhpZ2hlciB0cmFuc2l0aW9ucyBhcmUgbm8tb3BzLlxuICAgICAgaWYgKHByZXYgPT09IDApIHtcbiAgICAgICAgdGhpcy4jYWN0aXZlVG9rZW5zLmFkZCh0b2tlbik7XG4gICAgICAgIGZvciAoY29uc3QgbCBvZiB0aGlzLiNhY3RpdmF0ZUxpc3RlbmVycykgbCh0b2tlbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgYSByZXRyYWN0ZWQgcmlnaHQtc2lkZSBmYWN0LlxuICAgKlxuICAgKiBGb3IgZXZlcnkgbGVmdCB0b2tlbiB0aGlzIGZhY3Qgd2FzIHN1cHBvcnRpbmcsIGRlY3JlbWVudCB0aGUgc3VwcG9ydFxuICAgKiBjb3VudC4gT24gdGhlIDEg4oaSIDAgdHJhbnNpdGlvbiB0aGUgdG9rZW4gbGVhdmVzIHRoZSBhY3RpdmUgc2V0IGFuZFxuICAgKiBkb3duc3RyZWFtIGRlYWN0aXZhdGUgbGlzdGVuZXJzIGZpcmUuIFRyYW5zaXRpb25zIHRoYXQgcmVtYWluID49IDFcbiAgICogKGUuZy4gMiDihpIgMSkgbGVhdmUgdGhlIGFjdGl2ZSBzZXQgdW5jaGFuZ2VkLlxuICAgKlxuICAgKiBUaGUgY291bnQgaXMgZmxvb3JlZCBhdCAwIGFzIGEgZGVmZW5zaXZlIG1lYXN1cmUg4oCUIGFuIHVwc3RyZWFtIHJldHJhY3Rpb25cbiAgICogZm9yIGEgZmFjdCB0aGF0IHdhcyBuZXZlciBjb3VudGVkIHNob3VsZCBiZSBhIG5vLW9wIHJhdGhlciB0aGFuIGFcbiAgICogY3Jhc2gsIG1hdGNoaW5nIHRoZSB0b2xlcmFuY2UgZXhwcmVzc2VkIGluIHtAbGluayBCZXRhTWVtb3J5LmxlZnREZWFjdGl2YXRlfS5cbiAgICovXG4gIHJpZ2h0RGVhY3RpdmF0ZShpZDogRW50aXR5SWQsIF9hdHRyOiBBdHRyS2V5LCB2YWx1ZTogRmFjdFZhbHVlKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiB0aGlzLiNsZWZ0VG9rZW5zKSB7XG4gICAgICBpZiAoIXRoaXMuI2ZhY3RNYXRjaGVzVG9rZW4odG9rZW4sIGlkLCB2YWx1ZSkpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBwcmV2ID0gdGhpcy4jc3VwcG9ydENvdW50LmdldCh0b2tlbikgPz8gMDtcbiAgICAgIGlmIChwcmV2ID09PSAwKSBjb250aW51ZTsgLy8gbm90aGluZyB0byBkZWNyZW1lbnQ7IHN0YXkgYXQgMC5cbiAgICAgIGNvbnN0IG5leHQgPSBwcmV2IC0gMTtcbiAgICAgIHRoaXMuI3N1cHBvcnRDb3VudC5zZXQodG9rZW4sIG5leHQpO1xuXG4gICAgICAvLyBUcmFuc2l0aW9uIDEg4oaSIDA6IGRlYWN0aXZhdGUuXG4gICAgICBpZiAobmV4dCA9PT0gMCAmJiB0aGlzLiNhY3RpdmVUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgICB0aGlzLiNhY3RpdmVUb2tlbnMuZGVsZXRlKHRva2VuKTtcbiAgICAgICAgZm9yIChjb25zdCBsIG9mIHRoaXMuI2RlYWN0aXZhdGVMaXN0ZW5lcnMpIGwodG9rZW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBDb3VudCByaWdodC1tZW1vcnkgZmFjdHMgY3VycmVudGx5IG1hdGNoaW5nIGB0b2tlbmAuICovXG4gICNjb3VudE1hdGNoaW5nRmFjdHModG9rZW46IFRva2VuKTogbnVtYmVyIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGZvciAoY29uc3QgZmFjdCBvZiB0aGlzLiNyaWdodE1lbW9yeS5mYWN0cykge1xuICAgICAgaWYgKHRoaXMuI2ZhY3RNYXRjaGVzVG9rZW4odG9rZW4sIGZhY3QuaWQsIGZhY3QudmFsdWUpKSBjb3VudCsrO1xuICAgIH1cbiAgICByZXR1cm4gY291bnQ7XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGUgZXZlcnkgam9pbiB0ZXN0IGFnYWluc3QgYCh0b2tlbiwgcmlnaHQgZmFjdClgLlxuICAgKlxuICAgKiBTZW1hbnRpY3MgbWF0Y2gge0BsaW5rIEpvaW5Ob2RlfSdzIGludGVybmFsIHRlc3QgcHJlZGljYXRlOlxuICAgKiBgaWRFcXVhbGl0eWAgY29tcGFyZXMgdGhlIHJpZ2h0IGVudGl0eSBpZCBhZ2FpbnN0IGB0b2tlbi5iaW5kaW5nc1tsZWZ0VmFyXWA7XG4gICAqIGB2YWx1ZUVxdWFsaXR5YCBjb21wYXJlcyB0aGUgcmlnaHQgdmFsdWUuIEEgdGVzdCB3aG9zZSBgbGVmdFZhcmAgaXMgbm90XG4gICAqIGJvdW5kIG9uIHRoZSB0b2tlbiBhbHdheXMgZmFpbHMg4oCUIHRoZSBzYW1lIGRlZmVuc2l2ZSBiZWhhdmlvdXIgYXNcbiAgICogSm9pbk5vZGUsIGZvciB0aGUgc2FtZSByZWFzb24gKGd1YXJkcyBhZ2FpbnN0IGJ1aWxkZXIgYnVncykuXG4gICAqL1xuICAjZmFjdE1hdGNoZXNUb2tlbihcbiAgICB0b2tlbjogVG9rZW4sXG4gICAgcmlnaHRJZDogRW50aXR5SWQsXG4gICAgcmlnaHRWYWx1ZTogRmFjdFZhbHVlLFxuICApOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IHRlc3Qgb2YgdGhpcy4jdGVzdHMpIHtcbiAgICAgIGNvbnN0IGxlZnRWYWwgPSB0b2tlbi5iaW5kaW5nc1t0ZXN0LmxlZnRWYXJdO1xuICAgICAgaWYgKGxlZnRWYWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKHRlc3QudHlwZSA9PT0gXCJpZEVxdWFsaXR5XCIpIHtcbiAgICAgICAgaWYgKGxlZnRWYWwgIT09IHJpZ2h0SWQpIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHZhbHVlRXF1YWxpdHlcbiAgICAgICAgaWYgKGxlZnRWYWwgIT09IHJpZ2h0VmFsdWUpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9yZXRlL2Rpc3QvZXhpc3RlbnRpYWwuanMifQ== diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/30f8abd88eaad257d5243923a60e7c0cc438eaf5 b/KMr2_dqTOvh2R-Vg1E6cO/ssr/30f8abd88eaad257d5243923a60e7c0cc438eaf5 deleted file mode 100644 index a4dad6b..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/30f8abd88eaad257d5243923a60e7c0cc438eaf5 +++ /dev/null @@ -1,21 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "RecursionLimitExceededError", { enumerable: true, configurable: true, get(){ try { return RecursionLimitExceededError } catch {} }}); -/** - * RecursionLimitExceededError — thrown when fireRules() recursion depth exceeds the limit. - * Per SPEC.md §Cycle Detection. - */ -class RecursionLimitExceededError extends Error { - depth; - activationTrace; - constructor(depth, activationTrace) { - const traceStr = activationTrace.length > 0 - ? ` Last activations: [${activationTrace.join(" → ")}]` - : ""; - super(`RecursionLimitExceededError: recursion depth ${depth} exceeded.${traceStr}`); - this.depth = depth; - this.activationTrace = activationTrace; - this.name = "RecursionLimitExceededError"; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0FBSU0sTUFBTywyQkFBNEIsU0FBUSxLQUFLO0lBRXpDO0lBQ0E7SUFGWCxZQUNXLEtBQWEsRUFDYixlQUFrQztRQUUzQyxNQUFNLFFBQVEsR0FDWixlQUFlLENBQUMsTUFBTSxHQUFHO1lBQ3ZCLENBQUMsQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDcEQsQ0FBQyxDQUFDLEVBQUU7UUFDUixLQUFLLENBQ0gsZ0RBQWdELEtBQUssYUFBYSxRQUFRLEVBQUUsQ0FDN0U7UUFUUSxVQUFLLEdBQUwsS0FBSztRQUNMLG9CQUFlLEdBQWYsZUFBZTtRQVN4QixJQUFJLENBQUMsSUFBSSxHQUFHLDZCQUE2QjtJQUMzQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2N5Y2xlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVjdXJzaW9uTGltaXRFeGNlZWRlZEVycm9yIOKAlCB0aHJvd24gd2hlbiBmaXJlUnVsZXMoKSByZWN1cnNpb24gZGVwdGggZXhjZWVkcyB0aGUgbGltaXQuXG4gKiBQZXIgU1BFQy5tZCDCp0N5Y2xlIERldGVjdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlY3Vyc2lvbkxpbWl0RXhjZWVkZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgZGVwdGg6IG51bWJlcixcbiAgICByZWFkb25seSBhY3RpdmF0aW9uVHJhY2U6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICApIHtcbiAgICBjb25zdCB0cmFjZVN0ciA9XG4gICAgICBhY3RpdmF0aW9uVHJhY2UubGVuZ3RoID4gMFxuICAgICAgICA/IGAgTGFzdCBhY3RpdmF0aW9uczogWyR7YWN0aXZhdGlvblRyYWNlLmpvaW4oXCIg4oaSIFwiKX1dYFxuICAgICAgICA6IFwiXCI7XG4gICAgc3VwZXIoXG4gICAgICBgUmVjdXJzaW9uTGltaXRFeGNlZWRlZEVycm9yOiByZWN1cnNpb24gZGVwdGggJHtkZXB0aH0gZXhjZWVkZWQuJHt0cmFjZVN0cn1gLFxuICAgICk7XG4gICAgdGhpcy5uYW1lID0gXCJSZWN1cnNpb25MaW1pdEV4Y2VlZGVkRXJyb3JcIjtcbiAgfVxufVxuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvZGlzdC9jeWNsZS5qcyJ9 diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/34b2e75d07f219f60baf6277909b4498ac46e618 b/KMr2_dqTOvh2R-Vg1E6cO/ssr/34b2e75d07f219f60baf6277909b4498ac46e618 deleted file mode 100644 index f5905b1..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/34b2e75d07f219f60baf6277909b4498ac46e618 +++ /dev/null @@ -1,69 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "ChessEngine", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_0__.ChessEngine } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "algebraicToSquare", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_1__.algebraicToSquare } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "squareToAlgebraic", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_1__.squareToAlgebraic } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "fileOf", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_1__.fileOf } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "rankOf", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_1__.rankOf } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "squareOf", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_1__.squareOf } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "isOnBoard", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_1__.isOnBoard } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "isValidSquare", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_1__.isValidSquare } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "GAME_ENTITY", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_2__.GAME_ENTITY } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "PROMOTION_PIECES", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_2__.PROMOTION_PIECES } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "oppositeColor", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_2__.oppositeColor } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "chessFact", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_2__.chessFact } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "isInCheck", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_3__.isInCheck } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "PRESET_REGISTRY", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_4__.PRESET_REGISTRY } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "ActivePresetSet", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_5__.ActivePresetSet } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "PresetActivationError", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_5__.PresetActivationError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "LAYOUT_REGISTRY", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_6__.LAYOUT_REGISTRY } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "CLASSIC_LAYOUT", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_6__.CLASSIC_LAYOUT } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "EMPTY_LAYOUT", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_6__.EMPTY_LAYOUT } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "DUNSANY_LAYOUT", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_6__.DUNSANY_LAYOUT } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "MONSTER_LAYOUT", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_6__.MONSTER_LAYOUT } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "PAWNS_ONLY_LAYOUT", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_6__.PAWNS_ONLY_LAYOUT } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "HORDE_LAYOUT", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_6__.HORDE_LAYOUT } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "KNIGHTMATE_LAYOUT", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_6__.KNIGHTMATE_LAYOUT } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "CHESS960_SHIM", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_6__.CHESS960_SHIM } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "buildChess960Layout", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_6__.buildChess960Layout } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "toFen", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_6__.toFen } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "fromFen", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_6__.fromFen } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "validateLayout", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_7__.validateLayout } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/engine.ts", {"importedNames":["ChessEngine"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/coord.ts", {"importedNames":["algebraicToSquare","squareToAlgebraic","fileOf","rankOf","squareOf","isOnBoard","isValidSquare"]}); - - - - - - - - -const __vite_ssr_import_2__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/schema.ts", {"importedNames":["GAME_ENTITY","PROMOTION_PIECES","oppositeColor","chessFact"]}); - - - - - -const __vite_ssr_import_3__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/rules/check.ts", {"importedNames":["isInCheck"]}); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/presets/index.ts", {"importedNames":["PRESET_REGISTRY"]}); -const __vite_ssr_import_5__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/presets/active-set.ts", {"importedNames":["ActivePresetSet","PresetActivationError"]}); - - - -const __vite_ssr_import_6__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/layouts/index.ts", {"importedNames":["LAYOUT_REGISTRY","CLASSIC_LAYOUT","EMPTY_LAYOUT","DUNSANY_LAYOUT","MONSTER_LAYOUT","PAWNS_ONLY_LAYOUT","HORDE_LAYOUT","KNIGHTMATE_LAYOUT","CHESS960_SHIM","buildChess960Layout","toFen","fromFen"]}); - - - - - - - - - - - - - -const __vite_ssr_import_7__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/layouts/validate.ts", {"importedNames":["validateLayout"]}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPQTtBQUNBOzs7Ozs7Ozs7QUFTQTs7Ozs7O0FBY0E7QUFDQTtBQUNBOzs7O0FBV0E7Ozs7Ozs7Ozs7Ozs7O0FBaUJBIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJpbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAcGFyYXR5cGUvY2hlc3Mg4oCUIHB1YmxpYyBwYWNrYWdlIGVudHJ5LlxuLy9cbi8vIFJlLWV4cG9ydHMgdGhlIGhlYWRsZXNzIGVuZ2luZSBzdXJmYWNlIGNvbnN1bWVkIGJ5IHRoZSBhdXRob3JpdGF0aXZlXG4vLyBXZWJTb2NrZXQgc2VydmVyIChzZWUgQHBhcmF0eXBlL2NoZXNzLXNlcnZlcikuIFRoZSBSZWFjdCBhcHAgaW1wb3J0c1xuLy8gY29uY3JldGUgbW9kdWxlcyBkaXJlY3RseTsgdGhpcyBiYXJyZWwgaW50ZW50aW9uYWxseSBleGNsdWRlcyBhbnl0aGluZ1xuLy8gdGhhdCBwdWxscyBpbiBET00vUmVhY3Qgc28gdGhhdCBzZXJ2ZXIgY29uc3VtZXJzIHN0YXkgcHVyZSBOb2RlL0J1bi5cblxuZXhwb3J0IHsgQ2hlc3NFbmdpbmUsIHR5cGUgR2FtZVJlc3VsdCB9IGZyb20gXCIuL2VuZ2luZS5qc1wiO1xuZXhwb3J0IHtcbiAgYWxnZWJyYWljVG9TcXVhcmUsXG4gIHNxdWFyZVRvQWxnZWJyYWljLFxuICBmaWxlT2YsXG4gIHJhbmtPZixcbiAgc3F1YXJlT2YsXG4gIGlzT25Cb2FyZCxcbiAgaXNWYWxpZFNxdWFyZSxcbn0gZnJvbSBcIi4vY29vcmQuanNcIjtcbmV4cG9ydCB7XG4gIEdBTUVfRU5USVRZLFxuICBQUk9NT1RJT05fUElFQ0VTLFxuICBvcHBvc2l0ZUNvbG9yLFxuICBjaGVzc0ZhY3QsXG4gIHR5cGUgUGllY2VUeXBlLFxuICB0eXBlIFBpZWNlQ29sb3IsXG4gIHR5cGUgU3F1YXJlLFxuICB0eXBlIEdhbWVTdGF0dXMsXG4gIHR5cGUgQ2hlc3NBdHRyTWFwLFxuICB0eXBlIENoZXNzQXR0cktleSxcbiAgdHlwZSBDaGVzc0ZhY3QsXG59IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuZXhwb3J0IHR5cGUgeyBMZWdhbE1vdmUgfSBmcm9tIFwiLi9ydWxlcy90eXBlcy5qc1wiO1xuZXhwb3J0IHsgaXNJbkNoZWNrIH0gZnJvbSBcIi4vcnVsZXMvY2hlY2suanNcIjtcbmV4cG9ydCB7IFBSRVNFVF9SRUdJU1RSWSwgdHlwZSBQcmVzZXREZWYgfSBmcm9tIFwiLi9wcmVzZXRzL2luZGV4LmpzXCI7XG5leHBvcnQge1xuICBBY3RpdmVQcmVzZXRTZXQsXG4gIFByZXNldEFjdGl2YXRpb25FcnJvcixcbiAgdHlwZSBBY3RpdmF0aW9uUmVxdWVzdCxcbiAgdHlwZSBQcmVzZXRBY3RpdmF0aW9uLFxuICB0eXBlIFByZXNldFNjb3BlLFxufSBmcm9tIFwiLi9wcmVzZXRzL2FjdGl2ZS1zZXQuanNcIjtcblxuLy8gU3RhcnRpbmcgTGF5b3V0cyDigJQgcGllY2UtcGxhY2VtZW50IGFic3RyYWN0aW9ucyBvcnRob2dvbmFsIHRvXG4vLyBwcmVzZXQgcnVsZXMuIENvbnN1bWVkIGJ5IHRoZSBzZXJ2ZXIgZm9yIHJvb20uY3JlYXRlIGxheW91dFxuLy8gcmVzb2x1dGlvbiBhbmQgYnkgdGhlIGNsaWVudCBMb2JieSBmb3IgcHJlbWFkZSBzZWxlY3Rpb24uXG5leHBvcnQge1xuICBMQVlPVVRfUkVHSVNUUlksXG4gIENMQVNTSUNfTEFZT1VULFxuICBFTVBUWV9MQVlPVVQsXG4gIERVTlNBTllfTEFZT1VULFxuICBNT05TVEVSX0xBWU9VVCxcbiAgUEFXTlNfT05MWV9MQVlPVVQsXG4gIEhPUkRFX0xBWU9VVCxcbiAgS05JR0hUTUFURV9MQVlPVVQsXG4gIENIRVNTOTYwX1NISU0sXG4gIGJ1aWxkQ2hlc3M5NjBMYXlvdXQsXG4gIHRvRmVuLFxuICBmcm9tRmVuLFxuICB0eXBlIFBpZWNlUGxhY2VtZW50LFxuICB0eXBlIFN0YXJ0aW5nTGF5b3V0LFxuICB0eXBlIExheW91dFZhbGlkYXRpb25SZXN1bHQsXG59IGZyb20gXCIuL2xheW91dHMvaW5kZXguanNcIjtcbmV4cG9ydCB7IHZhbGlkYXRlTGF5b3V0IH0gZnJvbSBcIi4vbGF5b3V0cy92YWxpZGF0ZS5qc1wiO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL2NoZXNzL3NyYy9pbmRleC50cyJ9 diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/40b9f1f37d5bd759c353e90078138580f67eb091 b/KMr2_dqTOvh2R-Vg1E6cO/ssr/40b9f1f37d5bd759c353e90078138580f67eb091 deleted file mode 100644 index b4b4030..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/40b9f1f37d5bd759c353e90078138580f67eb091 +++ /dev/null @@ -1,27 +0,0 @@ -const context = (() => { - if (typeof globalThis !== "undefined") { - return globalThis; - } else if (typeof self !== "undefined") { - return self; - } else if (typeof window !== "undefined") { - return window; - } else { - return Function("return this")(); - } -})(); -const defines = {"process.env.NODE_ENV": process.env.NODE_ENV}; -Object.keys(defines).forEach((key) => { - const segments = key.split("."); - let target = context; - for (let i = 0; i < segments.length; i++) { - const segment = segments[i]; - if (i === segments.length - 1) { - target[segment] = defines[key]; - } else { - target = target[segment] || (target[segment] = {}); - } - } -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVudiJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBjb250ZXh0ID0gKCgpID0+IHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gc2VsZjtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xuICB9XG59KSgpO1xuY29uc3QgZGVmaW5lcyA9IF9fREVGSU5FU19fO1xuT2JqZWN0LmtleXMoZGVmaW5lcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gIGNvbnN0IHNlZ21lbnRzID0ga2V5LnNwbGl0KFwiLlwiKTtcbiAgbGV0IHRhcmdldCA9IGNvbnRleHQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzZWdtZW50ID0gc2VnbWVudHNbaV07XG4gICAgaWYgKGkgPT09IHNlZ21lbnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHRhcmdldFtzZWdtZW50XSA9IGRlZmluZXNba2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0ID0gdGFyZ2V0W3NlZ21lbnRdIHx8ICh0YXJnZXRbc2VnbWVudF0gPSB7fSk7XG4gICAgfVxuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVU7QUFDckIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUMxQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJO0FBQ2YsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ1QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUM7QUFDRixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ0osS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztBQUM5RCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU87QUFDdEIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUM7QUFDRixDQUFDLENBQUM7In0= diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/42ffa0b714d5003b3590ec4be36c8a33871db208 b/KMr2_dqTOvh2R-Vg1E6cO/ssr/42ffa0b714d5003b3590ec4be36c8a33871db208 deleted file mode 100644 index 3ec0200..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/42ffa0b714d5003b3590ec4be36c8a33871db208 +++ /dev/null @@ -1,216 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "GameSession", { enumerable: true, configurable: true, get(){ try { return GameSession } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "GameSessionRegistry", { enumerable: true, configurable: true, get(){ try { return GameSessionRegistry } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "diffFacts", { enumerable: true, configurable: true, get(){ try { return diffFacts } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/index.ts", {"importedNames":["ChessEngine","algebraicToSquare","PresetActivationError"]}); - - - - -class GameSession { - engine; - /** - * Snapshot of the fact set taken immediately after the last successful - * mutation. Used to compute inserted/retracted deltas for the next move - * without re-walking full history. - */ - prevFacts; - /** - * Sticky terminal state. Once set, further applyMove calls short-circuit - * with { ok: false, error: "GAME_OVER" } — the engine would otherwise - * silently keep accepting moves past checkmate. - */ - finalGameOver = null; - /** - * @param rulesetIds — preset IDs from room.create. Each is activated - * as `scope=both, turnsRemaining=null` (permanent) on the engine's - * private ActivePresetSet. Invalid ids are silently skipped here — - * the server validates them earlier at the protocol layer. - * @param layout — optional starting layout. When undefined, engine - * defaults to CLASSIC_LAYOUT (FIDE). The server has already - * resolved and validated the layout before constructing the - * session, so this value is trusted. - */ - constructor(rulesetIds = [], layout) { - this.engine = layout !== void 0 ? new __vite_ssr_import_0__.ChessEngine({ layout }) : new __vite_ssr_import_0__.ChessEngine(); - if (rulesetIds.length > 0) { - try { - this.engine.setActivePresets( - rulesetIds.map((id) => ({ - id, - scope: "both", - turnsRemaining: null - })) - ); - } catch { - this.engine.activePresets.clear(); - } - }; - this.prevFacts = this.snapshotFacts(); - } - /** - * Replace the full active preset set. Returns `{ ok: true }` on - * success so the server can then broadcast `game.presets`; returns - * `{ ok: false, error }` on validation failure (unknown id, - * incompatibility, missing requirement) so the server can surface - * an `INVALID_MESSAGE` error to the requesting client. - * - * Rejections leave the pre-existing set intact (see - * ActivePresetSet.replaceAll for atomicity). - */ - setPresets(activations) { - try { - this.engine.setActivePresets(activations); - return { ok: true }; - } catch (e) { - const msg = e instanceof __vite_ssr_import_0__.PresetActivationError ? `${e.code}: ${e.message}` : e instanceof Error ? e.message : String(e); - return { ok: false, error: msg }; - } - } - /** Snapshot of the current active preset set, wire-shape. Used by - * broadcast to populate `game.state.activations` and `game.presets`. */ - getPresetActivations() { - return this.engine.activePresets.list(); - } - /** Returns a fresh snapshot of current facts in deterministic order. */ - getAllFacts() { - return this.snapshotFacts(); - } - /** Whose turn is it? "white" on a pristine session. */ - getTurn() { - return this.engine.getCurrentTurn(); - } - /** - * Is the game terminally over? Returns the terminal descriptor or null. - * Cheap — just reads the sticky flag set in applyMove. - */ - getGameOver() { - return this.finalGameOver; - } - /** - * Apply a move specified in algebraic notation ("e2" -> "e4"). - * - * Failure modes: - * - Game already over → { ok: false, error: "GAME_OVER" } - * - Square parse fails, no piece, or no legal move matches → - * { ok: false, error: "ILLEGAL_MOVE" } - * - * Note: we intentionally collapse "bad square string", "no piece on - * from", and "illegal destination" into one error code. The server - * already validated algebraic shape via zod; the engine's legality - * check subsumes the rest, and leaking internal reasons would let - * clients probe our rule implementation. - */ - applyMove(from, to, promoteTo) { - if (this.finalGameOver !== null) { - return { ok: false, error: "GAME_OVER" }; - }; - const fromSq = (0,__vite_ssr_import_0__.algebraicToSquare)(from); - const toSq = (0,__vite_ssr_import_0__.algebraicToSquare)(to); - if (fromSq < 0 || toSq < 0) { - return { ok: false, error: "ILLEGAL_MOVE" }; - }; - const promotionType = promoteTo; - const move = this.engine.findMove(fromSq, toSq, promotionType); - if (move === null) { - return { ok: false, error: "ILLEGAL_MOVE" }; - }; - const moverColor = this.engine.getCurrentTurn(); - const result = this.engine.applyMove(move, promotionType ?? "queen"); - const newFacts = this.snapshotFacts(); - const { inserted, retracted } = diffFacts(this.prevFacts, newFacts); - this.prevFacts = newFacts; - const gameOver = mapGameResult(result, moverColor); - if (gameOver !== null) { - this.finalGameOver = gameOver; - }; - return { - ok: true, - inserted, - retracted, - turn: this.engine.getCurrentTurn(), - gameOver - }; - } - /** Snapshot helper — normalises Session fact records to wire shape. */ - snapshotFacts() { - return this.engine.session.allFacts().map((f) => ({ - id: f.id, - // attr is a branded string (AttrKey); the wire protocol uses plain - // strings. Cast is safe: AttrKey IS a string at runtime. - attr: f.attr, - value: f.value - })); - } -}; -class GameSessionRegistry { - sessions = /* @__PURE__ */ new Map(); - /** - * Create and store a new session for `code`. Throws if a session for - * that code already exists — callers should call delete() first if they - * intend to recycle a code (in practice room codes never recycle). - * - * `layout` is optional; when provided, the engine opens from it - * instead of the FIDE default. - */ - create(code, rulesetIds, layout) { - if (this.sessions.has(code)) { - throw new Error( - `GameSessionRegistry: session already exists for code "${code}"` - ); - }; - const session = new GameSession(rulesetIds ?? [], layout); - this.sessions.set(code, session); - return session; - } - get(code) { - return this.sessions.get(code); - } - /** Returns true iff a session existed and was removed. */ - delete(code) { - return this.sessions.delete(code); - } - /** Exposed for tests/diagnostics only. */ - size() { - return this.sessions.size; - } -}; -function diffFacts(prev, next) { - const key = (f) => `${String(f.id)}:${f.attr}:${JSON.stringify(f.value)}`; - const prevKeys = new Set(prev.map(key)); - const nextKeys = new Set(next.map(key)); - const inserted = next.filter((f) => !prevKeys.has(key(f))); - const retracted = prev.filter((f) => !nextKeys.has(key(f))); - return { inserted, retracted }; -}; -function mapGameResult(result, moverColor) { - switch (result) { - case "ongoing": - return null; - case "checkmate": - return { winner: moverColor, reason: "checkmate" }; - case "stalemate": - return { winner: "draw", reason: "stalemate" }; - case "draw-50": - return { winner: "draw", reason: "50-move" }; - case "draw-3fold": - return { winner: "draw", reason: "threefold" }; - case "draw-insufficient": - return { winner: "draw", reason: "insufficient" }; - // Preset-defined decisive results. The engine names the winner - // explicitly because variant rules don't always pair "winner" - // with "side to move" the way standard checkmate does. - case "white-wins": - return { winner: "white", reason: "variant-win" }; - case "black-wins": - return { winner: "black", reason: "variant-win" }; - default: { - const _exhaustive = result; - throw new Error( - `mapGameResult: unreachable GameResult variant ${String(_exhaustive)}` - ); - } - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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S0FBSyxJQUFJLEdBQUcsQ0FBQztBQUN0QyxRQUFNLFdBQVcsSUFBSSxJQUFJLEtBQUssSUFBSSxHQUFHLENBQUM7QUFDdEMsUUFBTSxXQUFXLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RCxRQUFNLFlBQVksS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFELFNBQU8sRUFBRSxVQUFVLFVBQVU7QUFDL0I7QUFPQSxTQUFTLGNBQ1AsUUFDQSxZQUMrQztBQUMvQyxVQUFRLFFBQVE7QUFBQSxJQUNkLEtBQUs7QUFDSCxhQUFPO0FBQUEsSUFDVCxLQUFLO0FBQ0gsYUFBTyxFQUFFLFFBQVEsWUFBWSxRQUFRLFlBQVk7QUFBQSxJQUNuRCxLQUFLO0FBQ0gsYUFBTyxFQUFFLFFBQVEsUUFBUSxRQUFRLFlBQVk7QUFBQSxJQUMvQyxLQUFLO0FBQ0gsYUFBTyxFQUFFLFFBQVEsUUFBUSxRQUFRLFVBQVU7QUFBQSxJQUM3QyxLQUFLO0FBQ0gsYUFBTyxFQUFFLFFBQVEsUUFBUSxRQUFRLFlBQVk7QUFBQSxJQUMvQyxLQUFLO0FBQ0gsYUFBTyxFQUFFLFFBQVEsUUFBUSxRQUFRLGVBQWU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUlsRCxLQUFLO0FBQ0gsYUFBTyxFQUFFLFFBQVEsU0FBUyxRQUFRLGNBQWM7QUFBQSxJQUNsRCxLQUFLO0FBQ0gsYUFBTyxFQUFFLFFBQVEsU0FBUyxRQUFRLGNBQWM7QUFBQSxJQUNsRCxTQUFTO0FBR1AsWUFBTSxjQUFxQjtBQUMzQixZQUFNLElBQUk7QUFBQSxRQUNSLGlEQUFpRCxPQUFPLFdBQVcsQ0FBQztBQUFBLE1BQ3RFO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiZ2FtZS1zZXNzaW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEF1dGhvcml0YXRpdmUgY2hlc3Mgc2Vzc2lvbiBwZXIgcm9vbSAoUDQuNSkuXG4vL1xuLy8gRXZlcnkgcm9vbSBvd25zIGV4YWN0bHkgb25lIEdhbWVTZXNzaW9uIHdoaWNoIHdyYXBzIGEgQ2hlc3NFbmdpbmUuIFRoZVxuLy8gc2VydmVyIGlzIHRoZSBvbmx5IGFjdG9yIHBlcm1pdHRlZCB0byBjYWxsIGluc2VydC9yZXRyYWN0L2ZpcmVSdWxlcyBvblxuLy8gdGhhdCBlbmdpbmUg4oCUIGNsaWVudHMgc3VibWl0IGhpZ2gtbGV2ZWwgZ2FtZS5tb3ZlIHBheWxvYWRzIGFuZCByZWNlaXZlXG4vLyB0aGUgYXV0aG9yaXRhdGl2ZSBmYWN0IGRlbHRhIGJhY2suXG4vL1xuLy8gRmFjdCBJRHMgYXJlIG1pbnRlZCBzZXJ2ZXItc2lkZSBvbmx5OiB0aGUgZW5naW5lJ3MgU2Vzc2lvbiBpcyB0aGUgc29sZVxuLy8gc291cmNlIG9mIEVudGl0eUlkIGF1dGhvcml0eSAocGVyIEBwYXJhdHlwZS9yZXRlIFNQRUMubWQgwqdJRCBBdXRob3JpdHkpLlxuLy8gR2FtZVNlc3Npb25SZWdpc3RyeSBrZWVwcyBzZXNzaW9ucyBpc29sYXRlZCBwZXIgcm9vbSBjb2RlIHNvIHR3byByb29tc1xuLy8gY2Fubm90IG9ic2VydmUgb3IgY29sbGlkZSB3aXRoIGVhY2ggb3RoZXIncyBJRHMgb3IgZmFjdHMuXG5pbXBvcnQge1xuICBDaGVzc0VuZ2luZSxcbiAgYWxnZWJyYWljVG9TcXVhcmUsXG4gIFByZXNldEFjdGl2YXRpb25FcnJvcixcbiAgdHlwZSBBY3RpdmF0aW9uUmVxdWVzdCxcbiAgdHlwZSBQcmVzZXRBY3RpdmF0aW9uLFxuICB0eXBlIEdhbWVSZXN1bHQsXG4gIHR5cGUgUGllY2VDb2xvcixcbiAgdHlwZSBQaWVjZVR5cGUsXG4gIHR5cGUgU3RhcnRpbmdMYXlvdXQsXG59IGZyb20gXCJAcGFyYXR5cGUvY2hlc3NcIjtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQdWJsaWMgdHlwZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFdpcmUtc2hhcGUgZmFjdC4gTWlycm9ycyB0aGUgcHJvdG9jb2wncyBGYWN0U2NoZW1hIChwcm90b2NvbC50cykgYnV0XG4gKiBkdXBsaWNhdGVkIGhlcmUgc28gZ2FtZS1zZXNzaW9uLnRzIGRvZXMgbm90IGltcG9ydCB0aGUgem9kIHNjaGVtYXNcbiAqIGF0IHJ1bnRpbWUg4oCUIHRoZSBzZXJ2ZXIgbW9kdWxlIGRlcGVuZHMgb24gdGhlICp0eXBlcyosIG5vdCB0aGUgcGFyc2VyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhY3Qge1xuICBpZDogbnVtYmVyO1xuICBhdHRyOiBzdHJpbmc7XG4gIHZhbHVlOiB1bmtub3duO1xufVxuXG4vKiogUmVzdWx0IG9mIGEgcHJvbW90aW9uIHNlbGVjdGlvbiBpbiBhIGBnYW1lLm1vdmVgIHBheWxvYWQuICovXG5leHBvcnQgdHlwZSBQcm9tb3Rpb25QaWVjZSA9IFwicXVlZW5cIiB8IFwicm9va1wiIHwgXCJiaXNob3BcIiB8IFwia25pZ2h0XCI7XG5cbi8qKlxuICogUmVzdWx0IG9mIEdhbWVTZXNzaW9uLmFwcGx5TW92ZS5cbiAqXG4gKiBPbiBzdWNjZXNzLCBgaW5zZXJ0ZWRgIGFuZCBgcmV0cmFjdGVkYCBhcmUgdGhlIGZhY3QtbGV2ZWwgZGlmZiB2cy4gdGhlXG4gKiBzZXNzaW9uJ3Mgc3RhdGUgKmJlZm9yZSogdGhlIG1vdmUuIE9uIGZhaWx1cmUgYSBzaW5nbGUgZXJyb3IgY29kZSBpc1xuICogcmV0dXJuZWQg4oCUIGNhbGxlcnMgbWFwIHRoYXQgb250byB0aGUgcHJvdG9jb2wgZXJyb3IgZW52ZWxvcGUuXG4gKi9cbmV4cG9ydCB0eXBlIE1vdmVSZXN1bHQgPVxuICB8IHtcbiAgICAgIG9rOiB0cnVlO1xuICAgICAgaW5zZXJ0ZWQ6IEZhY3RbXTtcbiAgICAgIHJldHJhY3RlZDogRmFjdFtdO1xuICAgICAgdHVybjogUGllY2VDb2xvcjtcbiAgICAgIGdhbWVPdmVyOiBudWxsIHwgeyB3aW5uZXI6IFBpZWNlQ29sb3IgfCBcImRyYXdcIjsgcmVhc29uOiBHYW1lRW5kUmVhc29uIH07XG4gICAgfVxuICB8IHsgb2s6IGZhbHNlOyBlcnJvcjogTW92ZUVycm9yIH07XG5cbmV4cG9ydCB0eXBlIE1vdmVFcnJvciA9IFwiSUxMRUdBTF9NT1ZFXCIgfCBcIkdBTUVfT1ZFUlwiO1xuXG4vKipcbiAqIFRlcm1pbmFsLXN0YXRlIHJlYXNvbiBzdHJpbmdzLiBDaG9zZW4gdG8gbWF0Y2ggcHJvdG9jb2wudHNcbiAqIEdhbWVFbmRSZWFzb25TY2hlbWEgc28gY2FsbGVycyBjYW4gZm9yd2FyZCB3aXRob3V0IHRyYW5zbGF0aW9uLlxuICovXG5leHBvcnQgdHlwZSBHYW1lRW5kUmVhc29uID1cbiAgfCBcImNoZWNrbWF0ZVwiXG4gIHwgXCJzdGFsZW1hdGVcIlxuICB8IFwiNTAtbW92ZVwiXG4gIHwgXCJ0aHJlZWZvbGRcIlxuICB8IFwiaW5zdWZmaWNpZW50XCJcbiAgLy8gUHJlc2V0LWRlZmluZWQgZGVjaXNpdmUgcmVzdWx0OyBzZWUgR2FtZVJlc3VsdCB2YXJpYW50cy5cbiAgfCBcInZhcmlhbnQtd2luXCI7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gR2FtZVNlc3Npb25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY2xhc3MgR2FtZVNlc3Npb24ge1xuICBwcml2YXRlIHJlYWRvbmx5IGVuZ2luZTogQ2hlc3NFbmdpbmU7XG4gIC8qKlxuICAgKiBTbmFwc2hvdCBvZiB0aGUgZmFjdCBzZXQgdGFrZW4gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGxhc3Qgc3VjY2Vzc2Z1bFxuICAgKiBtdXRhdGlvbi4gVXNlZCB0byBjb21wdXRlIGluc2VydGVkL3JldHJhY3RlZCBkZWx0YXMgZm9yIHRoZSBuZXh0IG1vdmVcbiAgICogd2l0aG91dCByZS13YWxraW5nIGZ1bGwgaGlzdG9yeS5cbiAgICovXG4gIHByaXZhdGUgcHJldkZhY3RzOiBGYWN0W107XG4gIC8qKlxuICAgKiBTdGlja3kgdGVybWluYWwgc3RhdGUuIE9uY2Ugc2V0LCBmdXJ0aGVyIGFwcGx5TW92ZSBjYWxscyBzaG9ydC1jaXJjdWl0XG4gICAqIHdpdGggeyBvazogZmFsc2UsIGVycm9yOiBcIkdBTUVfT1ZFUlwiIH0g4oCUIHRoZSBlbmdpbmUgd291bGQgb3RoZXJ3aXNlXG4gICAqIHNpbGVudGx5IGtlZXAgYWNjZXB0aW5nIG1vdmVzIHBhc3QgY2hlY2ttYXRlLlxuICAgKi9cbiAgcHJpdmF0ZSBmaW5hbEdhbWVPdmVyOiBOb25OdWxsYWJsZTxcbiAgICBFeHRyYWN0PE1vdmVSZXN1bHQsIHsgb2s6IHRydWUgfT5bXCJnYW1lT3ZlclwiXVxuICA+IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBydWxlc2V0SWRzIOKAlCBwcmVzZXQgSURzIGZyb20gcm9vbS5jcmVhdGUuIEVhY2ggaXMgYWN0aXZhdGVkXG4gICAqICAgYXMgYHNjb3BlPWJvdGgsIHR1cm5zUmVtYWluaW5nPW51bGxgIChwZXJtYW5lbnQpIG9uIHRoZSBlbmdpbmUnc1xuICAgKiAgIHByaXZhdGUgQWN0aXZlUHJlc2V0U2V0LiBJbnZhbGlkIGlkcyBhcmUgc2lsZW50bHkgc2tpcHBlZCBoZXJlIOKAlFxuICAgKiAgIHRoZSBzZXJ2ZXIgdmFsaWRhdGVzIHRoZW0gZWFybGllciBhdCB0aGUgcHJvdG9jb2wgbGF5ZXIuXG4gICAqIEBwYXJhbSBsYXlvdXQg4oCUIG9wdGlvbmFsIHN0YXJ0aW5nIGxheW91dC4gV2hlbiB1bmRlZmluZWQsIGVuZ2luZVxuICAgKiAgIGRlZmF1bHRzIHRvIENMQVNTSUNfTEFZT1VUIChGSURFKS4gVGhlIHNlcnZlciBoYXMgYWxyZWFkeVxuICAgKiAgIHJlc29sdmVkIGFuZCB2YWxpZGF0ZWQgdGhlIGxheW91dCBiZWZvcmUgY29uc3RydWN0aW5nIHRoZVxuICAgKiAgIHNlc3Npb24sIHNvIHRoaXMgdmFsdWUgaXMgdHJ1c3RlZC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJ1bGVzZXRJZHM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW10sXG4gICAgbGF5b3V0PzogU3RhcnRpbmdMYXlvdXQsXG4gICkge1xuICAgIHRoaXMuZW5naW5lID0gbGF5b3V0ICE9PSB1bmRlZmluZWQgPyBuZXcgQ2hlc3NFbmdpbmUoeyBsYXlvdXQgfSkgOiBuZXcgQ2hlc3NFbmdpbmUoKTtcbiAgICBpZiAocnVsZXNldElkcy5sZW5ndGggPiAwKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmVuZ2luZS5zZXRBY3RpdmVQcmVzZXRzKFxuICAgICAgICAgIHJ1bGVzZXRJZHMubWFwKChpZCkgPT4gKHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgc2NvcGU6IFwiYm90aFwiIGFzIGNvbnN0LFxuICAgICAgICAgICAgdHVybnNSZW1haW5pbmc6IG51bGwsXG4gICAgICAgICAgfSkpLFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIEEgYmFkIGluaXRpYWwgcnVsZXNldElkIHNob3VsZG4ndCBwcmV2ZW50IHNlc3Npb24gY3JlYXRpb24g4oCUXG4gICAgICAgIC8vIHN0YXJ0IGVtcHR5IGFuZCBsZXQgY2xpZW50cyByZWNvbmZpZ3VyZSB2aWEgcm9vbS5zZXRQcmVzZXRzLlxuICAgICAgICB0aGlzLmVuZ2luZS5hY3RpdmVQcmVzZXRzLmNsZWFyKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucHJldkZhY3RzID0gdGhpcy5zbmFwc2hvdEZhY3RzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSB0aGUgZnVsbCBhY3RpdmUgcHJlc2V0IHNldC4gUmV0dXJucyBgeyBvazogdHJ1ZSB9YCBvblxuICAgKiBzdWNjZXNzIHNvIHRoZSBzZXJ2ZXIgY2FuIHRoZW4gYnJvYWRjYXN0IGBnYW1lLnByZXNldHNgOyByZXR1cm5zXG4gICAqIGB7IG9rOiBmYWxzZSwgZXJyb3IgfWAgb24gdmFsaWRhdGlvbiBmYWlsdXJlICh1bmtub3duIGlkLFxuICAgKiBpbmNvbXBhdGliaWxpdHksIG1pc3NpbmcgcmVxdWlyZW1lbnQpIHNvIHRoZSBzZXJ2ZXIgY2FuIHN1cmZhY2VcbiAgICogYW4gYElOVkFMSURfTUVTU0FHRWAgZXJyb3IgdG8gdGhlIHJlcXVlc3RpbmcgY2xpZW50LlxuICAgKlxuICAgKiBSZWplY3Rpb25zIGxlYXZlIHRoZSBwcmUtZXhpc3Rpbmcgc2V0IGludGFjdCAoc2VlXG4gICAqIEFjdGl2ZVByZXNldFNldC5yZXBsYWNlQWxsIGZvciBhdG9taWNpdHkpLlxuICAgKi9cbiAgc2V0UHJlc2V0cyhcbiAgICBhY3RpdmF0aW9uczogcmVhZG9ubHkgQWN0aXZhdGlvblJlcXVlc3RbXSxcbiAgKTogeyBvazogdHJ1ZSB9IHwgeyBvazogZmFsc2U7IGVycm9yOiBzdHJpbmcgfSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZW5naW5lLnNldEFjdGl2ZVByZXNldHMoYWN0aXZhdGlvbnMpO1xuICAgICAgcmV0dXJuIHsgb2s6IHRydWUgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBtc2cgPVxuICAgICAgICBlIGluc3RhbmNlb2YgUHJlc2V0QWN0aXZhdGlvbkVycm9yXG4gICAgICAgICAgPyBgJHtlLmNvZGV9OiAke2UubWVzc2FnZX1gXG4gICAgICAgICAgOiBlIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICAgID8gZS5tZXNzYWdlXG4gICAgICAgICAgICA6IFN0cmluZyhlKTtcbiAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IG1zZyB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTbmFwc2hvdCBvZiB0aGUgY3VycmVudCBhY3RpdmUgcHJlc2V0IHNldCwgd2lyZS1zaGFwZS4gVXNlZCBieVxuICAgKiAgYnJvYWRjYXN0IHRvIHBvcHVsYXRlIGBnYW1lLnN0YXRlLmFjdGl2YXRpb25zYCBhbmQgYGdhbWUucHJlc2V0c2AuICovXG4gIGdldFByZXNldEFjdGl2YXRpb25zKCk6IFByZXNldEFjdGl2YXRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuZW5naW5lLmFjdGl2ZVByZXNldHMubGlzdCgpO1xuICB9XG5cbiAgLyoqIFJldHVybnMgYSBmcmVzaCBzbmFwc2hvdCBvZiBjdXJyZW50IGZhY3RzIGluIGRldGVybWluaXN0aWMgb3JkZXIuICovXG4gIGdldEFsbEZhY3RzKCk6IEZhY3RbXSB7XG4gICAgcmV0dXJuIHRoaXMuc25hcHNob3RGYWN0cygpO1xuICB9XG5cbiAgLyoqIFdob3NlIHR1cm4gaXMgaXQ/IFwid2hpdGVcIiBvbiBhIHByaXN0aW5lIHNlc3Npb24uICovXG4gIGdldFR1cm4oKTogUGllY2VDb2xvciB7XG4gICAgcmV0dXJuIHRoaXMuZW5naW5lLmdldEN1cnJlbnRUdXJuKCk7XG4gIH1cblxuICAvKipcbiAgICogSXMgdGhlIGdhbWUgdGVybWluYWxseSBvdmVyPyBSZXR1cm5zIHRoZSB0ZXJtaW5hbCBkZXNjcmlwdG9yIG9yIG51bGwuXG4gICAqIENoZWFwIOKAlCBqdXN0IHJlYWRzIHRoZSBzdGlja3kgZmxhZyBzZXQgaW4gYXBwbHlNb3ZlLlxuICAgKi9cbiAgZ2V0R2FtZU92ZXIoKTogRXh0cmFjdDxNb3ZlUmVzdWx0LCB7IG9rOiB0cnVlIH0+W1wiZ2FtZU92ZXJcIl0ge1xuICAgIHJldHVybiB0aGlzLmZpbmFsR2FtZU92ZXI7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgYSBtb3ZlIHNwZWNpZmllZCBpbiBhbGdlYnJhaWMgbm90YXRpb24gKFwiZTJcIiAtPiBcImU0XCIpLlxuICAgKlxuICAgKiBGYWlsdXJlIG1vZGVzOlxuICAgKiAgIC0gR2FtZSBhbHJlYWR5IG92ZXIg4oaSIHsgb2s6IGZhbHNlLCBlcnJvcjogXCJHQU1FX09WRVJcIiB9XG4gICAqICAgLSBTcXVhcmUgcGFyc2UgZmFpbHMsIG5vIHBpZWNlLCBvciBubyBsZWdhbCBtb3ZlIG1hdGNoZXMg4oaSXG4gICAqICAgICAgIHsgb2s6IGZhbHNlLCBlcnJvcjogXCJJTExFR0FMX01PVkVcIiB9XG4gICAqXG4gICAqIE5vdGU6IHdlIGludGVudGlvbmFsbHkgY29sbGFwc2UgXCJiYWQgc3F1YXJlIHN0cmluZ1wiLCBcIm5vIHBpZWNlIG9uXG4gICAqIGZyb21cIiwgYW5kIFwiaWxsZWdhbCBkZXN0aW5hdGlvblwiIGludG8gb25lIGVycm9yIGNvZGUuIFRoZSBzZXJ2ZXJcbiAgICogYWxyZWFkeSB2YWxpZGF0ZWQgYWxnZWJyYWljIHNoYXBlIHZpYSB6b2Q7IHRoZSBlbmdpbmUncyBsZWdhbGl0eVxuICAgKiBjaGVjayBzdWJzdW1lcyB0aGUgcmVzdCwgYW5kIGxlYWtpbmcgaW50ZXJuYWwgcmVhc29ucyB3b3VsZCBsZXRcbiAgICogY2xpZW50cyBwcm9iZSBvdXIgcnVsZSBpbXBsZW1lbnRhdGlvbi5cbiAgICovXG4gIGFwcGx5TW92ZShcbiAgICBmcm9tOiBzdHJpbmcsXG4gICAgdG86IHN0cmluZyxcbiAgICBwcm9tb3RlVG8/OiBQcm9tb3Rpb25QaWVjZSxcbiAgKTogTW92ZVJlc3VsdCB7XG4gICAgaWYgKHRoaXMuZmluYWxHYW1lT3ZlciAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogXCJHQU1FX09WRVJcIiB9O1xuICAgIH1cblxuICAgIGNvbnN0IGZyb21TcSA9IGFsZ2VicmFpY1RvU3F1YXJlKGZyb20pO1xuICAgIGNvbnN0IHRvU3EgPSBhbGdlYnJhaWNUb1NxdWFyZSh0byk7XG4gICAgLy8gYWxnZWJyYWljVG9TcXVhcmUgcmV0dXJucyAtMSBmb3IgbWFsZm9ybWVkIGlucHV0OyBhIHNxdWFyZSBvZiAtMSBjYW5cbiAgICAvLyBuZXZlciBiZSB0aGUgc3RhcnQgb3IgZW5kIG9mIGEgbGVnYWwgbW92ZSwgc28gd2UgcmVqZWN0IGVhcmx5IHJhdGhlclxuICAgIC8vIHRoYW4gZmVlZGluZyBzZW50aW5lbCB2YWx1ZXMgdG8gdGhlIGVuZ2luZS5cbiAgICBpZiAoZnJvbVNxIDwgMCB8fCB0b1NxIDwgMCkge1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogXCJJTExFR0FMX01PVkVcIiB9O1xuICAgIH1cblxuICAgIC8vIFRyYW5zbGF0ZSB0aGUgcHJvdG9jb2wncyBwcm9tb3Rpb24gZW51bSB0byB0aGUgZW5naW5lJ3MgUGllY2VUeXBlLlxuICAgIC8vIFRoZSB0d28gdm9jYWJ1bGFyaWVzIG92ZXJsYXAgZXhhY3RseSwgc28gYSBkaXJlY3QgY2FzdCBpcyBzYWZlLlxuICAgIGNvbnN0IHByb21vdGlvblR5cGUgPSBwcm9tb3RlVG8gYXMgUGllY2VUeXBlIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgbW92ZSA9IHRoaXMuZW5naW5lLmZpbmRNb3ZlKGZyb21TcSwgdG9TcSwgcHJvbW90aW9uVHlwZSk7XG4gICAgaWYgKG1vdmUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IFwiSUxMRUdBTF9NT1ZFXCIgfTtcbiAgICB9XG5cbiAgICAvLyBDYXB0dXJlIHRoZSBtb3ZlcidzIGNvbG9yICpiZWZvcmUqIGFwcGx5TW92ZSBzd2FwcyB0aGUgdHVybiDigJQgd2VcbiAgICAvLyBuZWVkIGl0IHRvIGNvbXB1dGUgdGhlIGNoZWNrbWF0ZSB3aW5uZXIgKHRoZSBzaWRlIHRoYXQganVzdCBtb3ZlZCkuXG4gICAgY29uc3QgbW92ZXJDb2xvciA9IHRoaXMuZW5naW5lLmdldEN1cnJlbnRUdXJuKCk7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5lbmdpbmUuYXBwbHlNb3ZlKG1vdmUsIHByb21vdGlvblR5cGUgPz8gXCJxdWVlblwiKTtcblxuICAgIGNvbnN0IG5ld0ZhY3RzID0gdGhpcy5zbmFwc2hvdEZhY3RzKCk7XG4gICAgY29uc3QgeyBpbnNlcnRlZCwgcmV0cmFjdGVkIH0gPSBkaWZmRmFjdHModGhpcy5wcmV2RmFjdHMsIG5ld0ZhY3RzKTtcbiAgICB0aGlzLnByZXZGYWN0cyA9IG5ld0ZhY3RzO1xuXG4gICAgY29uc3QgZ2FtZU92ZXIgPSBtYXBHYW1lUmVzdWx0KHJlc3VsdCwgbW92ZXJDb2xvcik7XG4gICAgaWYgKGdhbWVPdmVyICE9PSBudWxsKSB7XG4gICAgICB0aGlzLmZpbmFsR2FtZU92ZXIgPSBnYW1lT3ZlcjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgb2s6IHRydWUsXG4gICAgICBpbnNlcnRlZCxcbiAgICAgIHJldHJhY3RlZCxcbiAgICAgIHR1cm46IHRoaXMuZW5naW5lLmdldEN1cnJlbnRUdXJuKCksXG4gICAgICBnYW1lT3ZlcixcbiAgICB9O1xuICB9XG5cbiAgLyoqIFNuYXBzaG90IGhlbHBlciDigJQgbm9ybWFsaXNlcyBTZXNzaW9uIGZhY3QgcmVjb3JkcyB0byB3aXJlIHNoYXBlLiAqL1xuICBwcml2YXRlIHNuYXBzaG90RmFjdHMoKTogRmFjdFtdIHtcbiAgICByZXR1cm4gdGhpcy5lbmdpbmUuc2Vzc2lvbi5hbGxGYWN0cygpLm1hcCgoZikgPT4gKHtcbiAgICAgIGlkOiBmLmlkIGFzIG51bWJlcixcbiAgICAgIC8vIGF0dHIgaXMgYSBicmFuZGVkIHN0cmluZyAoQXR0cktleSk7IHRoZSB3aXJlIHByb3RvY29sIHVzZXMgcGxhaW5cbiAgICAgIC8vIHN0cmluZ3MuIENhc3QgaXMgc2FmZTogQXR0cktleSBJUyBhIHN0cmluZyBhdCBydW50aW1lLlxuICAgICAgYXR0cjogZi5hdHRyIGFzIHN0cmluZyxcbiAgICAgIHZhbHVlOiBmLnZhbHVlIGFzIHVua25vd24sXG4gICAgfSkpO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gR2FtZVNlc3Npb25SZWdpc3RyeSDigJQgb25lIHNlc3Npb24gcGVyIHJvb20gY29kZS5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY2xhc3MgR2FtZVNlc3Npb25SZWdpc3RyeSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvbnMgPSBuZXcgTWFwPHN0cmluZywgR2FtZVNlc3Npb24+KCk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbmQgc3RvcmUgYSBuZXcgc2Vzc2lvbiBmb3IgYGNvZGVgLiBUaHJvd3MgaWYgYSBzZXNzaW9uIGZvclxuICAgKiB0aGF0IGNvZGUgYWxyZWFkeSBleGlzdHMg4oCUIGNhbGxlcnMgc2hvdWxkIGNhbGwgZGVsZXRlKCkgZmlyc3QgaWYgdGhleVxuICAgKiBpbnRlbmQgdG8gcmVjeWNsZSBhIGNvZGUgKGluIHByYWN0aWNlIHJvb20gY29kZXMgbmV2ZXIgcmVjeWNsZSkuXG4gICAqXG4gICAqIGBsYXlvdXRgIGlzIG9wdGlvbmFsOyB3aGVuIHByb3ZpZGVkLCB0aGUgZW5naW5lIG9wZW5zIGZyb20gaXRcbiAgICogaW5zdGVhZCBvZiB0aGUgRklERSBkZWZhdWx0LlxuICAgKi9cbiAgY3JlYXRlKFxuICAgIGNvZGU6IHN0cmluZyxcbiAgICBydWxlc2V0SWRzPzogcmVhZG9ubHkgc3RyaW5nW10sXG4gICAgbGF5b3V0PzogU3RhcnRpbmdMYXlvdXQsXG4gICk6IEdhbWVTZXNzaW9uIHtcbiAgICBpZiAodGhpcy5zZXNzaW9ucy5oYXMoY29kZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEdhbWVTZXNzaW9uUmVnaXN0cnk6IHNlc3Npb24gYWxyZWFkeSBleGlzdHMgZm9yIGNvZGUgXCIke2NvZGV9XCJgLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBHYW1lU2Vzc2lvbihydWxlc2V0SWRzID8/IFtdLCBsYXlvdXQpO1xuICAgIHRoaXMuc2Vzc2lvbnMuc2V0KGNvZGUsIHNlc3Npb24pO1xuICAgIHJldHVybiBzZXNzaW9uO1xuICB9XG5cbiAgZ2V0KGNvZGU6IHN0cmluZyk6IEdhbWVTZXNzaW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9ucy5nZXQoY29kZSk7XG4gIH1cblxuICAvKiogUmV0dXJucyB0cnVlIGlmZiBhIHNlc3Npb24gZXhpc3RlZCBhbmQgd2FzIHJlbW92ZWQuICovXG4gIGRlbGV0ZShjb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9ucy5kZWxldGUoY29kZSk7XG4gIH1cblxuICAvKiogRXhwb3NlZCBmb3IgdGVzdHMvZGlhZ25vc3RpY3Mgb25seS4gKi9cbiAgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb25zLnNpemU7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBJbnRlcm5hbCBoZWxwZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBDb21wdXRlIHRoZSBzZXQgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBmYWN0IGFycmF5cy5cbiAqXG4gKiBJZGVudGl0eSBpcyBkZWZpbmVkIGJ5IHRoZSAoaWQsIGF0dHIsIHZhbHVlKSB0cmlwbGUgc2VyaWFsaXNlZCBhcyBhXG4gKiBzdHJpbmcga2V5IOKAlCB0d28gZmFjdHMgYXJlIFwidGhlIHNhbWVcIiBpZmYgYWxsIHRocmVlIGNvbXBvbmVudHMgbWF0Y2guXG4gKiBKU09OLnN0cmluZ2lmeSBpcyBhZGVxdWF0ZSBiZWNhdXNlIHZhbHVlcyBhcmUgcHJpbWl0aXZlcyAobnVtYmVyLFxuICogc3RyaW5nLCBib29sZWFuLCBudWxsKSBvciBwbGFpbiBzcXVhcmVzOyBubyBmdW5jdGlvbnMgb3IgY3ljbGVzIGV2ZXJcbiAqIGVudGVyIHdvcmtpbmcgbWVtb3J5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZkZhY3RzKFxuICBwcmV2OiByZWFkb25seSBGYWN0W10sXG4gIG5leHQ6IHJlYWRvbmx5IEZhY3RbXSxcbik6IHsgaW5zZXJ0ZWQ6IEZhY3RbXTsgcmV0cmFjdGVkOiBGYWN0W10gfSB7XG4gIGNvbnN0IGtleSA9IChmOiBGYWN0KTogc3RyaW5nID0+XG4gICAgYCR7U3RyaW5nKGYuaWQpfToke2YuYXR0cn06JHtKU09OLnN0cmluZ2lmeShmLnZhbHVlKX1gO1xuICBjb25zdCBwcmV2S2V5cyA9IG5ldyBTZXQocHJldi5tYXAoa2V5KSk7XG4gIGNvbnN0IG5leHRLZXlzID0gbmV3IFNldChuZXh0Lm1hcChrZXkpKTtcbiAgY29uc3QgaW5zZXJ0ZWQgPSBuZXh0LmZpbHRlcigoZikgPT4gIXByZXZLZXlzLmhhcyhrZXkoZikpKTtcbiAgY29uc3QgcmV0cmFjdGVkID0gcHJldi5maWx0ZXIoKGYpID0+ICFuZXh0S2V5cy5oYXMoa2V5KGYpKSk7XG4gIHJldHVybiB7IGluc2VydGVkLCByZXRyYWN0ZWQgfTtcbn1cblxuLyoqXG4gKiBUcmFuc2xhdGUgdGhlIGVuZ2luZSdzIEdhbWVSZXN1bHQgaW50byB0aGUgd2lyZS1mYWNpbmcgZ2FtZU92ZXJcbiAqIGRlc2NyaXB0b3IuIGBtb3ZlckNvbG9yYCBpcyB0aGUgc2lkZSB0aGF0IGp1c3QgcGxheWVkIHRoZSBtb3ZlIOKAlFxuICogaS5lLiB0aGUgd2lubmVyIGluIGEgY2hlY2ttYXRlLiBSZXR1cm5zIG51bGwgd2hlbiB0aGUgZ2FtZSBjb250aW51ZXMuXG4gKi9cbmZ1bmN0aW9uIG1hcEdhbWVSZXN1bHQoXG4gIHJlc3VsdDogR2FtZVJlc3VsdCxcbiAgbW92ZXJDb2xvcjogUGllY2VDb2xvcixcbik6IEV4dHJhY3Q8TW92ZVJlc3VsdCwgeyBvazogdHJ1ZSB9PltcImdhbWVPdmVyXCJdIHtcbiAgc3dpdGNoIChyZXN1bHQpIHtcbiAgICBjYXNlIFwib25nb2luZ1wiOlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSBcImNoZWNrbWF0ZVwiOlxuICAgICAgcmV0dXJuIHsgd2lubmVyOiBtb3ZlckNvbG9yLCByZWFzb246IFwiY2hlY2ttYXRlXCIgfTtcbiAgICBjYXNlIFwic3RhbGVtYXRlXCI6XG4gICAgICByZXR1cm4geyB3aW5uZXI6IFwiZHJhd1wiLCByZWFzb246IFwic3RhbGVtYXRlXCIgfTtcbiAgICBjYXNlIFwiZHJhdy01MFwiOlxuICAgICAgcmV0dXJuIHsgd2lubmVyOiBcImRyYXdcIiwgcmVhc29uOiBcIjUwLW1vdmVcIiB9O1xuICAgIGNhc2UgXCJkcmF3LTNmb2xkXCI6XG4gICAgICByZXR1cm4geyB3aW5uZXI6IFwiZHJhd1wiLCByZWFzb246IFwidGhyZWVmb2xkXCIgfTtcbiAgICBjYXNlIFwiZHJhdy1pbnN1ZmZpY2llbnRcIjpcbiAgICAgIHJldHVybiB7IHdpbm5lcjogXCJkcmF3XCIsIHJlYXNvbjogXCJpbnN1ZmZpY2llbnRcIiB9O1xuICAgIC8vIFByZXNldC1kZWZpbmVkIGRlY2lzaXZlIHJlc3VsdHMuIFRoZSBlbmdpbmUgbmFtZXMgdGhlIHdpbm5lclxuICAgIC8vIGV4cGxpY2l0bHkgYmVjYXVzZSB2YXJpYW50IHJ1bGVzIGRvbid0IGFsd2F5cyBwYWlyIFwid2lubmVyXCJcbiAgICAvLyB3aXRoIFwic2lkZSB0byBtb3ZlXCIgdGhlIHdheSBzdGFuZGFyZCBjaGVja21hdGUgZG9lcy5cbiAgICBjYXNlIFwid2hpdGUtd2luc1wiOlxuICAgICAgcmV0dXJuIHsgd2lubmVyOiBcIndoaXRlXCIsIHJlYXNvbjogXCJ2YXJpYW50LXdpblwiIH07XG4gICAgY2FzZSBcImJsYWNrLXdpbnNcIjpcbiAgICAgIHJldHVybiB7IHdpbm5lcjogXCJibGFja1wiLCByZWFzb246IFwidmFyaWFudC13aW5cIiB9O1xuICAgIGRlZmF1bHQ6IHtcbiAgICAgIC8vIEV4aGF1c3RpdmVuZXNzIGd1YXJkIOKAlCBpZiBHYW1lUmVzdWx0IGV2ZXIgZ3Jvd3MgYSB2YXJpYW50LCBUU1xuICAgICAgLy8gd2lsbCBmbGFnIHRoaXMgYnkgZmFpbGluZyB0aGUgbmV2ZXItY2FzdC5cbiAgICAgIGNvbnN0IF9leGhhdXN0aXZlOiBuZXZlciA9IHJlc3VsdDtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYG1hcEdhbWVSZXN1bHQ6IHVucmVhY2hhYmxlIEdhbWVSZXN1bHQgdmFyaWFudCAke1N0cmluZyhfZXhoYXVzdGl2ZSl9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXSwiZmlsZSI6Ii9zcmMvZ2FtZS1zZXNzaW9uLnRzIn0= diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/457014b126b3c023dcf81bd144f236f39702cbb0 b/KMr2_dqTOvh2R-Vg1E6cO/ssr/457014b126b3c023dcf81bd144f236f39702cbb0 deleted file mode 100644 index 2cff8d1..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/457014b126b3c023dcf81bd144f236f39702cbb0 +++ /dev/null @@ -1,163 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "Session", { enumerable: true, configurable: true, get(){ try { return Session } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/wm.js", {"importedNames":["WorkingMemory"]});const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/alpha.js", {"importedNames":["AlphaNetwork"]});const __vite_ssr_import_2__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/cycle.js", {"importedNames":["RecursionLimitExceededError"]});/** - * Session — main entry point for the @paratype/rete engine. - * Owns WorkingMemory, AlphaNetwork, and the production agenda. - * Per SPEC.md §ID Authority, §Conflict Resolution, §RHS Purity Contract. - */ - - - -class Session { - #wm; - #alpha; - #rules = []; - #opts; - #eventLog; - #idCounter = 0; - /** - * Internal recursion depth counter for fireRules(). - * Underscore prefix signals package-internal use; not exported from index. - * Per SPEC.md §Cycle Detection. - */ - _fireDepth = 0; - constructor(opts = {}) { - this.#opts = { - autoFire: opts.autoFire ?? true, - recursionLimit: opts.recursionLimit ?? 64, - }; - this.#eventLog = opts.eventLog; - this.#wm = new __vite_ssr_import_0__.WorkingMemory(); - this.#alpha = new __vite_ssr_import_1__.AlphaNetwork(); - // Wire WorkingMemory events to AlphaNetwork - this.#wm.onInsert((id, attr, value) => { - this.#alpha.notifyInsert(id, attr, value); - }); - this.#wm.onRetract((id, attr, value) => { - this.#alpha.notifyRetract(id, attr, value); - }); - } - /** Mint a new unique EntityId (server-authoritative per SPEC.md §ID Authority). */ - nextId() { - return ++this.#idCounter; - } - /** - * Insert (or update) a fact. If autoFire, triggers fireRules(). - * - * When an {@link EventLog} is attached, records the mutation — - * updates are recorded as a retract-of-old-value followed by an - * insert-of-new-value, mirroring the WM's internal update semantics - * (see wm.ts). Derived facts (negative ids) are never logged. - */ - insert(id, attr, value) { - const log = this.#eventLog; - const shouldLog = log !== undefined && id >= 0; - if (shouldLog) { - const oldValue = this.#wm.get(id, attr); - if (oldValue !== undefined || this.#wm.contains(id, attr)) { - log.appendRetract(id, attr, oldValue); - } - }; - this.#wm.insert(id, attr, value); - if (shouldLog) - log.appendInsert(id, attr, value); - if (this.#opts.autoFire) - this.fireRules(); - } - /** - * Retract a fact. If autoFire, triggers fireRules(). - * - * When an {@link EventLog} is attached, the previous value is read - * from WM before the retraction and recorded on the event so replay - * can reconstruct the missing fact. Retracting a non-existent fact - * is a no-op and is not logged. - */ - retract(id, attr) { - const log = this.#eventLog; - const shouldLog = log !== undefined && id >= 0; - let oldValue; - let existed = false; - if (shouldLog) { - existed = this.#wm.contains(id, attr); - if (existed) - oldValue = this.#wm.get(id, attr); - }; - this.#wm.retract(id, attr); - if (shouldLog && existed) - log.appendRetract(id, attr, oldValue); - if (this.#opts.autoFire) - this.fireRules(); - } - /** Get fact value. */ - get(id, attr) { - return this.#wm.get(id, attr); - } - /** Check fact existence. */ - contains(id, attr) { - return this.#wm.contains(id, attr); - } - /** Return all facts sorted [id asc, attr asc]. */ - allFacts() { - return this.#wm.allFacts(); - } - /** - * Register a rule with the session. - * Accepts a RuleDefinition produced by defineRule() (see builder.ts). - * - * Each registration is assigned a zero-based `addedAt` index, exposed - * via {@link _getOrderableRules} for the conflict-resolution sort - * (see conflict.ts, SPEC.md §Conflict Resolution). - */ - add(rule) { - this.#rules.push({ rule, addedAt: this.#rules.length }); - } - /** - * Package-internal accessor returning registered rules in a shape - * compatible with {@link OrderableRule} (i.e. with `addedAt` attached). - * - * Used by the agenda/beta network to build {@link Activation} values - * that can be passed to {@link orderActivations}. Not exported from - * the package index — consumers should go through `fireRules()`. - */ - _getOrderableRules() { - return this.#rules.map(({ rule, addedAt }) => ({ - name: rule.name, - salience: rule.salience, - conditions: rule.conditions, - handler: rule.handler, - addedAt, - })); - } - /** - * Fire all pending rule activations in deterministic order. - * Returns the count of rule firings. - * Per SPEC.md §Conflict Resolution: salience desc → specificity desc → insertion order asc. - * Per SPEC.md §Cycle Detection: throws RecursionLimitExceededError when depth exceeds limit. - * A limit of 0 disables the check. - */ - fireRules(opts) { - const limit = opts?.recursionLimit ?? this.#opts.recursionLimit; - if (limit > 0 && this._fireDepth >= limit) { - throw new __vite_ssr_import_2__.RecursionLimitExceededError(this._fireDepth, []); - }; - this._fireDepth++; - try { - // Stub: no production nodes wired yet (Phase 1.7+) - // Returns 0 until beta network + production nodes are integrated. - return 0; - } - finally { - this._fireDepth--; - } - } - /** Expose AlphaNetwork for wiring by beta/join nodes (package-internal). */ - _getAlpha() { - return this.#alpha; - } - /** Expose WorkingMemory for wiring by production nodes (package-internal). */ - _getWM() { - return this.#wm; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQUtBLHVKQUNBLHlKQUlBLHdLQVZBOzs7Ozs7OztBQXNDTSxNQUFPLE9BQU87SUFDVCxHQUFHO0lBQ0gsTUFBTTtJQUNOLE1BQU0sR0FBcUIsRUFBRTtJQUM3QixLQUFLO0lBQ0wsU0FBUztJQUNsQixVQUFVLEdBQUcsQ0FBQztJQUVkOzs7OztJQUtBLFVBQVUsR0FBRyxDQUFDO0lBRWQsWUFBWSxPQUF1QixFQUFFO1FBQ25DLElBQUksQ0FBQyxLQUFLLEdBQUc7WUFDWCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJO1lBQy9CLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxJQUFJLEVBQUU7U0FDMUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRO1FBQzlCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxtQ0FBYSxFQUFFO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxrQ0FBWSxFQUFFO1FBRWhDO1FBQ0EsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDO1FBQzNDLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQztRQUM1QyxDQUFDLENBQUM7SUFDSjtJQUVBO0lBQ0EsTUFBTTtRQUNKLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBc0I7SUFDdEM7SUFFQTs7Ozs7Ozs7SUFRQSxNQUFNLENBQUMsRUFBWSxFQUFFLElBQWEsRUFBRSxLQUFnQjtRQUNsRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUztRQUMxQixNQUFNLFNBQVMsR0FBRyxHQUFHLEtBQUssU0FBUyxJQUFLLEVBQWEsSUFBSSxDQUFDO1FBQzFELElBQUksU0FBUyxFQUFFO1lBQ2IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQztZQUN2QyxJQUFJLFFBQVEsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUN6RCxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDO1lBQ3ZDO1FBQ0Y7UUFDQSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQztRQUNoQyxJQUFJLFNBQVM7WUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDO1FBQ2hELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtJQUMzQztJQUVBOzs7Ozs7OztJQVFBLE9BQU8sQ0FBQyxFQUFZLEVBQUUsSUFBYTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUztRQUMxQixNQUFNLFNBQVMsR0FBRyxHQUFHLEtBQUssU0FBUyxJQUFLLEVBQWEsSUFBSSxDQUFDO1FBQzFELElBQUksUUFBK0I7UUFDbkMsSUFBSSxPQUFPLEdBQUcsS0FBSztRQUNuQixJQUFJLFNBQVMsRUFBRTtZQUNiLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDO1lBQ3JDLElBQUksT0FBTztnQkFBRSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQztRQUNoRDtRQUNBLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUM7UUFDMUIsSUFBSSxTQUFTLElBQUksT0FBTztZQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUM7UUFDL0QsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7WUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFO0lBQzNDO0lBRUE7SUFDQSxHQUFHLENBQUMsRUFBWSxFQUFFLElBQWE7UUFDN0IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDO0lBQy9CO0lBRUE7SUFDQSxRQUFRLENBQUMsRUFBWSxFQUFFLElBQWE7UUFDbEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDO0lBQ3BDO0lBRUE7SUFDQSxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRTtJQUM1QjtJQUVBOzs7Ozs7OztJQVFBLEdBQUcsQ0FBQyxJQUFvQjtRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN6RDtJQUVBOzs7Ozs7OztJQVFBLGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0MsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsT0FBTztTQUNSLENBQUMsQ0FBQztJQUNMO0lBRUE7Ozs7Ozs7SUFPQSxTQUFTLENBQUMsSUFBa0M7UUFDMUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxFQUFFLGNBQWMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWM7UUFDL0QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksS0FBSyxFQUFFO1lBQ3pDLE1BQU0sSUFBSSxpREFBMkIsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztRQUM1RDtRQUNBLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDakIsSUFBSTtZQUNGO1lBQ0E7WUFDQSxPQUFPLENBQUM7UUFDVjtnQkFBVTtZQUNSLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDbkI7SUFDRjtJQUVBO0lBQ0EsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU07SUFDcEI7SUFFQTtJQUNBLE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxHQUFHO0lBQ2pCIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyIuLi9zcmMvc2Vzc2lvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlc3Npb24g4oCUIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBAcGFyYXR5cGUvcmV0ZSBlbmdpbmUuXG4gKiBPd25zIFdvcmtpbmdNZW1vcnksIEFscGhhTmV0d29yaywgYW5kIHRoZSBwcm9kdWN0aW9uIGFnZW5kYS5cbiAqIFBlciBTUEVDLm1kIMKnSUQgQXV0aG9yaXR5LCDCp0NvbmZsaWN0IFJlc29sdXRpb24sIMKnUkhTIFB1cml0eSBDb250cmFjdC5cbiAqL1xuaW1wb3J0IHsgV29ya2luZ01lbW9yeSwgdHlwZSBBdHRyS2V5LCB0eXBlIEZhY3RWYWx1ZSB9IGZyb20gXCIuL3dtLmpzXCI7XG5pbXBvcnQgeyBBbHBoYU5ldHdvcmsgfSBmcm9tIFwiLi9hbHBoYS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBSdWxlRGVmaW5pdGlvbiB9IGZyb20gXCIuL2J1aWxkZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgT3JkZXJhYmxlUnVsZSB9IGZyb20gXCIuL2NvbmZsaWN0LmpzXCI7XG5pbXBvcnQgeyBSZWN1cnNpb25MaW1pdEV4Y2VlZGVkRXJyb3IgfSBmcm9tIFwiLi9jeWNsZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFdmVudExvZyB9IGZyb20gXCIuL2V2ZW50bG9nLmpzXCI7XG5cbi8qKlxuICogSW50ZXJuYWwgcmVjb3JkIHBhaXJpbmcgYSByZWdpc3RlcmVkIHtAbGluayBSdWxlRGVmaW5pdGlvbn0gd2l0aCBpdHNcbiAqIHplcm8tYmFzZWQgaW5zZXJ0aW9uIGluZGV4LiBUaGUgaW5kZXggaXMgdGhlIHRoaXJkIHRpZWJyZWFrZXIgdXNlZCBieVxuICoge0BsaW5rIG9yZGVyQWN0aXZhdGlvbnN9IChzZWUgY29uZmxpY3QudHMpLlxuICovXG5pbnRlcmZhY2UgUmVnaXN0ZXJlZFJ1bGUge1xuICByZWFkb25seSBydWxlOiBSdWxlRGVmaW5pdGlvbjtcbiAgcmVhZG9ubHkgYWRkZWRBdDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25PcHRpb25zIHtcbiAgLyoqIElmIHRydWUsIGZpcmVSdWxlcygpIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIGVhY2ggaW5zZXJ0L3JldHJhY3QuIERlZmF1bHQ6IHRydWUuICovXG4gIGF1dG9GaXJlPzogYm9vbGVhbjtcbiAgLyoqIE1heGltdW0gcmVjdXJzaW9uIGRlcHRoIGZvciBmaXJlUnVsZXMoKS4gRGVmYXVsdDogNjQuICovXG4gIHJlY3Vyc2lvbkxpbWl0PzogbnVtYmVyO1xuICAvKipcbiAgICogT3B0aW9uYWwgYXBwZW5kLW9ubHkge0BsaW5rIEV2ZW50TG9nfS4gV2hlbiBwcm92aWRlZCwgdXNlci1pbml0aWF0ZWRcbiAgICoge0BsaW5rIFNlc3Npb24uaW5zZXJ0fSBhbmQge0BsaW5rIFNlc3Npb24ucmV0cmFjdH0gY2FsbHMgYXBwZW5kIGFcbiAgICogY29ycmVzcG9uZGluZyBldmVudC4gRGVyaXZlZCBmYWN0cyAobmVnYXRpdmUge0BsaW5rIEVudGl0eUlkfXMpIGFyZVxuICAgKiBleGNsdWRlZCDigJQgcGVyIFNQRUMubWQgwqdUcnV0aCBNYWludGVuYW5jZSB0aGV5IGFyZSByZS1kZXJpdmVkIG9uXG4gICAqIHJlcGxheSByYXRoZXIgdGhhbiByZWNvcmRlZCBkaXJlY3RseS5cbiAgICovXG4gIGV2ZW50TG9nPzogRXZlbnRMb2c7XG59XG5cbmV4cG9ydCBjbGFzcyBTZXNzaW9uIHtcbiAgcmVhZG9ubHkgI3dtOiBXb3JraW5nTWVtb3J5O1xuICByZWFkb25seSAjYWxwaGE6IEFscGhhTmV0d29yaztcbiAgcmVhZG9ubHkgI3J1bGVzOiBSZWdpc3RlcmVkUnVsZVtdID0gW107XG4gIHJlYWRvbmx5ICNvcHRzOiBSZXF1aXJlZDxQaWNrPFNlc3Npb25PcHRpb25zLCBcImF1dG9GaXJlXCIgfCBcInJlY3Vyc2lvbkxpbWl0XCI+PjtcbiAgcmVhZG9ubHkgI2V2ZW50TG9nOiBFdmVudExvZyB8IHVuZGVmaW5lZDtcbiAgI2lkQ291bnRlciA9IDA7XG5cbiAgLyoqXG4gICAqIEludGVybmFsIHJlY3Vyc2lvbiBkZXB0aCBjb3VudGVyIGZvciBmaXJlUnVsZXMoKS5cbiAgICogVW5kZXJzY29yZSBwcmVmaXggc2lnbmFscyBwYWNrYWdlLWludGVybmFsIHVzZTsgbm90IGV4cG9ydGVkIGZyb20gaW5kZXguXG4gICAqIFBlciBTUEVDLm1kIMKnQ3ljbGUgRGV0ZWN0aW9uLlxuICAgKi9cbiAgX2ZpcmVEZXB0aCA9IDA7XG5cbiAgY29uc3RydWN0b3Iob3B0czogU2Vzc2lvbk9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuI29wdHMgPSB7XG4gICAgICBhdXRvRmlyZTogb3B0cy5hdXRvRmlyZSA/PyB0cnVlLFxuICAgICAgcmVjdXJzaW9uTGltaXQ6IG9wdHMucmVjdXJzaW9uTGltaXQgPz8gNjQsXG4gICAgfTtcbiAgICB0aGlzLiNldmVudExvZyA9IG9wdHMuZXZlbnRMb2c7XG4gICAgdGhpcy4jd20gPSBuZXcgV29ya2luZ01lbW9yeSgpO1xuICAgIHRoaXMuI2FscGhhID0gbmV3IEFscGhhTmV0d29yaygpO1xuXG4gICAgLy8gV2lyZSBXb3JraW5nTWVtb3J5IGV2ZW50cyB0byBBbHBoYU5ldHdvcmtcbiAgICB0aGlzLiN3bS5vbkluc2VydCgoaWQsIGF0dHIsIHZhbHVlKSA9PiB7XG4gICAgICB0aGlzLiNhbHBoYS5ub3RpZnlJbnNlcnQoaWQsIGF0dHIsIHZhbHVlKTtcbiAgICB9KTtcbiAgICB0aGlzLiN3bS5vblJldHJhY3QoKGlkLCBhdHRyLCB2YWx1ZSkgPT4ge1xuICAgICAgdGhpcy4jYWxwaGEubm90aWZ5UmV0cmFjdChpZCwgYXR0ciwgdmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIE1pbnQgYSBuZXcgdW5pcXVlIEVudGl0eUlkIChzZXJ2ZXItYXV0aG9yaXRhdGl2ZSBwZXIgU1BFQy5tZCDCp0lEIEF1dGhvcml0eSkuICovXG4gIG5leHRJZCgpOiBFbnRpdHlJZCB7XG4gICAgcmV0dXJuICsrdGhpcy4jaWRDb3VudGVyIGFzIEVudGl0eUlkO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc2VydCAob3IgdXBkYXRlKSBhIGZhY3QuIElmIGF1dG9GaXJlLCB0cmlnZ2VycyBmaXJlUnVsZXMoKS5cbiAgICpcbiAgICogV2hlbiBhbiB7QGxpbmsgRXZlbnRMb2d9IGlzIGF0dGFjaGVkLCByZWNvcmRzIHRoZSBtdXRhdGlvbiDigJRcbiAgICogdXBkYXRlcyBhcmUgcmVjb3JkZWQgYXMgYSByZXRyYWN0LW9mLW9sZC12YWx1ZSBmb2xsb3dlZCBieSBhblxuICAgKiBpbnNlcnQtb2YtbmV3LXZhbHVlLCBtaXJyb3JpbmcgdGhlIFdNJ3MgaW50ZXJuYWwgdXBkYXRlIHNlbWFudGljc1xuICAgKiAoc2VlIHdtLnRzKS4gRGVyaXZlZCBmYWN0cyAobmVnYXRpdmUgaWRzKSBhcmUgbmV2ZXIgbG9nZ2VkLlxuICAgKi9cbiAgaW5zZXJ0KGlkOiBFbnRpdHlJZCwgYXR0cjogQXR0cktleSwgdmFsdWU6IEZhY3RWYWx1ZSk6IHZvaWQge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMuI2V2ZW50TG9nO1xuICAgIGNvbnN0IHNob3VsZExvZyA9IGxvZyAhPT0gdW5kZWZpbmVkICYmIChpZCBhcyBudW1iZXIpID49IDA7XG4gICAgaWYgKHNob3VsZExvZykge1xuICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLiN3bS5nZXQoaWQsIGF0dHIpO1xuICAgICAgaWYgKG9sZFZhbHVlICE9PSB1bmRlZmluZWQgfHwgdGhpcy4jd20uY29udGFpbnMoaWQsIGF0dHIpKSB7XG4gICAgICAgIGxvZy5hcHBlbmRSZXRyYWN0KGlkLCBhdHRyLCBvbGRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuI3dtLmluc2VydChpZCwgYXR0ciwgdmFsdWUpO1xuICAgIGlmIChzaG91bGRMb2cpIGxvZy5hcHBlbmRJbnNlcnQoaWQsIGF0dHIsIHZhbHVlKTtcbiAgICBpZiAodGhpcy4jb3B0cy5hdXRvRmlyZSkgdGhpcy5maXJlUnVsZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyYWN0IGEgZmFjdC4gSWYgYXV0b0ZpcmUsIHRyaWdnZXJzIGZpcmVSdWxlcygpLlxuICAgKlxuICAgKiBXaGVuIGFuIHtAbGluayBFdmVudExvZ30gaXMgYXR0YWNoZWQsIHRoZSBwcmV2aW91cyB2YWx1ZSBpcyByZWFkXG4gICAqIGZyb20gV00gYmVmb3JlIHRoZSByZXRyYWN0aW9uIGFuZCByZWNvcmRlZCBvbiB0aGUgZXZlbnQgc28gcmVwbGF5XG4gICAqIGNhbiByZWNvbnN0cnVjdCB0aGUgbWlzc2luZyBmYWN0LiBSZXRyYWN0aW5nIGEgbm9uLWV4aXN0ZW50IGZhY3RcbiAgICogaXMgYSBuby1vcCBhbmQgaXMgbm90IGxvZ2dlZC5cbiAgICovXG4gIHJldHJhY3QoaWQ6IEVudGl0eUlkLCBhdHRyOiBBdHRyS2V5KTogdm9pZCB7XG4gICAgY29uc3QgbG9nID0gdGhpcy4jZXZlbnRMb2c7XG4gICAgY29uc3Qgc2hvdWxkTG9nID0gbG9nICE9PSB1bmRlZmluZWQgJiYgKGlkIGFzIG51bWJlcikgPj0gMDtcbiAgICBsZXQgb2xkVmFsdWU6IEZhY3RWYWx1ZSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZXhpc3RlZCA9IGZhbHNlO1xuICAgIGlmIChzaG91bGRMb2cpIHtcbiAgICAgIGV4aXN0ZWQgPSB0aGlzLiN3bS5jb250YWlucyhpZCwgYXR0cik7XG4gICAgICBpZiAoZXhpc3RlZCkgb2xkVmFsdWUgPSB0aGlzLiN3bS5nZXQoaWQsIGF0dHIpO1xuICAgIH1cbiAgICB0aGlzLiN3bS5yZXRyYWN0KGlkLCBhdHRyKTtcbiAgICBpZiAoc2hvdWxkTG9nICYmIGV4aXN0ZWQpIGxvZy5hcHBlbmRSZXRyYWN0KGlkLCBhdHRyLCBvbGRWYWx1ZSk7XG4gICAgaWYgKHRoaXMuI29wdHMuYXV0b0ZpcmUpIHRoaXMuZmlyZVJ1bGVzKCk7XG4gIH1cblxuICAvKiogR2V0IGZhY3QgdmFsdWUuICovXG4gIGdldChpZDogRW50aXR5SWQsIGF0dHI6IEF0dHJLZXkpOiBGYWN0VmFsdWUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiN3bS5nZXQoaWQsIGF0dHIpO1xuICB9XG5cbiAgLyoqIENoZWNrIGZhY3QgZXhpc3RlbmNlLiAqL1xuICBjb250YWlucyhpZDogRW50aXR5SWQsIGF0dHI6IEF0dHJLZXkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jd20uY29udGFpbnMoaWQsIGF0dHIpO1xuICB9XG5cbiAgLyoqIFJldHVybiBhbGwgZmFjdHMgc29ydGVkIFtpZCBhc2MsIGF0dHIgYXNjXS4gKi9cbiAgYWxsRmFjdHMoKTogUmV0dXJuVHlwZTxXb3JraW5nTWVtb3J5W1wiYWxsRmFjdHNcIl0+IHtcbiAgICByZXR1cm4gdGhpcy4jd20uYWxsRmFjdHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIHJ1bGUgd2l0aCB0aGUgc2Vzc2lvbi5cbiAgICogQWNjZXB0cyBhIFJ1bGVEZWZpbml0aW9uIHByb2R1Y2VkIGJ5IGRlZmluZVJ1bGUoKSAoc2VlIGJ1aWxkZXIudHMpLlxuICAgKlxuICAgKiBFYWNoIHJlZ2lzdHJhdGlvbiBpcyBhc3NpZ25lZCBhIHplcm8tYmFzZWQgYGFkZGVkQXRgIGluZGV4LCBleHBvc2VkXG4gICAqIHZpYSB7QGxpbmsgX2dldE9yZGVyYWJsZVJ1bGVzfSBmb3IgdGhlIGNvbmZsaWN0LXJlc29sdXRpb24gc29ydFxuICAgKiAoc2VlIGNvbmZsaWN0LnRzLCBTUEVDLm1kIMKnQ29uZmxpY3QgUmVzb2x1dGlvbikuXG4gICAqL1xuICBhZGQocnVsZTogUnVsZURlZmluaXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLiNydWxlcy5wdXNoKHsgcnVsZSwgYWRkZWRBdDogdGhpcy4jcnVsZXMubGVuZ3RoIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhY2thZ2UtaW50ZXJuYWwgYWNjZXNzb3IgcmV0dXJuaW5nIHJlZ2lzdGVyZWQgcnVsZXMgaW4gYSBzaGFwZVxuICAgKiBjb21wYXRpYmxlIHdpdGgge0BsaW5rIE9yZGVyYWJsZVJ1bGV9IChpLmUuIHdpdGggYGFkZGVkQXRgIGF0dGFjaGVkKS5cbiAgICpcbiAgICogVXNlZCBieSB0aGUgYWdlbmRhL2JldGEgbmV0d29yayB0byBidWlsZCB7QGxpbmsgQWN0aXZhdGlvbn0gdmFsdWVzXG4gICAqIHRoYXQgY2FuIGJlIHBhc3NlZCB0byB7QGxpbmsgb3JkZXJBY3RpdmF0aW9uc30uIE5vdCBleHBvcnRlZCBmcm9tXG4gICAqIHRoZSBwYWNrYWdlIGluZGV4IOKAlCBjb25zdW1lcnMgc2hvdWxkIGdvIHRocm91Z2ggYGZpcmVSdWxlcygpYC5cbiAgICovXG4gIF9nZXRPcmRlcmFibGVSdWxlcygpOiByZWFkb25seSBPcmRlcmFibGVSdWxlW10ge1xuICAgIHJldHVybiB0aGlzLiNydWxlcy5tYXAoKHsgcnVsZSwgYWRkZWRBdCB9KSA9PiAoe1xuICAgICAgbmFtZTogcnVsZS5uYW1lLFxuICAgICAgc2FsaWVuY2U6IHJ1bGUuc2FsaWVuY2UsXG4gICAgICBjb25kaXRpb25zOiBydWxlLmNvbmRpdGlvbnMsXG4gICAgICBoYW5kbGVyOiBydWxlLmhhbmRsZXIsXG4gICAgICBhZGRlZEF0LFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlIGFsbCBwZW5kaW5nIHJ1bGUgYWN0aXZhdGlvbnMgaW4gZGV0ZXJtaW5pc3RpYyBvcmRlci5cbiAgICogUmV0dXJucyB0aGUgY291bnQgb2YgcnVsZSBmaXJpbmdzLlxuICAgKiBQZXIgU1BFQy5tZCDCp0NvbmZsaWN0IFJlc29sdXRpb246IHNhbGllbmNlIGRlc2Mg4oaSIHNwZWNpZmljaXR5IGRlc2Mg4oaSIGluc2VydGlvbiBvcmRlciBhc2MuXG4gICAqIFBlciBTUEVDLm1kIMKnQ3ljbGUgRGV0ZWN0aW9uOiB0aHJvd3MgUmVjdXJzaW9uTGltaXRFeGNlZWRlZEVycm9yIHdoZW4gZGVwdGggZXhjZWVkcyBsaW1pdC5cbiAgICogQSBsaW1pdCBvZiAwIGRpc2FibGVzIHRoZSBjaGVjay5cbiAgICovXG4gIGZpcmVSdWxlcyhvcHRzPzogeyByZWN1cnNpb25MaW1pdD86IG51bWJlciB9KTogbnVtYmVyIHtcbiAgICBjb25zdCBsaW1pdCA9IG9wdHM/LnJlY3Vyc2lvbkxpbWl0ID8/IHRoaXMuI29wdHMucmVjdXJzaW9uTGltaXQ7XG4gICAgaWYgKGxpbWl0ID4gMCAmJiB0aGlzLl9maXJlRGVwdGggPj0gbGltaXQpIHtcbiAgICAgIHRocm93IG5ldyBSZWN1cnNpb25MaW1pdEV4Y2VlZGVkRXJyb3IodGhpcy5fZmlyZURlcHRoLCBbXSk7XG4gICAgfVxuICAgIHRoaXMuX2ZpcmVEZXB0aCsrO1xuICAgIHRyeSB7XG4gICAgICAvLyBTdHViOiBubyBwcm9kdWN0aW9uIG5vZGVzIHdpcmVkIHlldCAoUGhhc2UgMS43KylcbiAgICAgIC8vIFJldHVybnMgMCB1bnRpbCBiZXRhIG5ldHdvcmsgKyBwcm9kdWN0aW9uIG5vZGVzIGFyZSBpbnRlZ3JhdGVkLlxuICAgICAgcmV0dXJuIDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX2ZpcmVEZXB0aC0tO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBFeHBvc2UgQWxwaGFOZXR3b3JrIGZvciB3aXJpbmcgYnkgYmV0YS9qb2luIG5vZGVzIChwYWNrYWdlLWludGVybmFsKS4gKi9cbiAgX2dldEFscGhhKCk6IEFscGhhTmV0d29yayB7XG4gICAgcmV0dXJuIHRoaXMuI2FscGhhO1xuICB9XG5cbiAgLyoqIEV4cG9zZSBXb3JraW5nTWVtb3J5IGZvciB3aXJpbmcgYnkgcHJvZHVjdGlvbiBub2RlcyAocGFja2FnZS1pbnRlcm5hbCkuICovXG4gIF9nZXRXTSgpOiBXb3JraW5nTWVtb3J5IHtcbiAgICByZXR1cm4gdGhpcy4jd207XG4gIH1cbn1cbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9yZXRlL2Rpc3Qvc2Vzc2lvbi5qcyJ9 diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/45ad18a232d4ffe83153cebbbdf885aac134c828 b/KMr2_dqTOvh2R-Vg1E6cO/ssr/45ad18a232d4ffe83153cebbbdf885aac134c828 deleted file mode 100644 index cc852d4..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/45ad18a232d4ffe83153cebbbdf885aac134c828 +++ /dev/null @@ -1,280 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("vitest", {"importedNames":["afterEach","beforeEach","describe","expect","it"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/broadcast.ts", {"importedNames":["handleMessage","registerConnection","roomRegistry","sessionRegistry","unregisterConnection"]}); - - - - - - -const __vite_ssr_import_2__ = await __vite_ssr_import__("/src/protocol.ts", {"importedNames":["PROTOCOL_VERSION"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/src/reconnect.ts", {"importedNames":["reconnectManager"]}); -function makeMockWs(clientId) { - const sent = []; - const closedFlag = { value: false }; - const ws = { - data: { clientId }, - sent, - get closed() { - return closedFlag.value; - }, - send(msg) { - const str = typeof msg === "string" ? msg : msg.toString("utf8"); - sent.push(JSON.parse(str)); - return str.length; - }, - close() { - closedFlag.value = true; - } - }; - return ws; -} -function nextMsgOfType(ws, type) { - const idx = ws.sent.findIndex( - (m) => typeof m === "object" && m !== null && m.type === type - ); - if (idx < 0) { - const types = ws.sent.map((m) => m.type); - throw new Error( - `no message of type "${type}" in inbox (got ${JSON.stringify(types)})` - ); - }; - const msg = ws.sent[idx]; - ws.sent.splice(idx, 1); - return msg; -} -function sendClient(ws, type, payload, seq = 1) { - (0,__vite_ssr_import_1__.handleMessage)( - ws, - JSON.stringify({ - v: __vite_ssr_import_2__.PROTOCOL_VERSION, - seq, - ts: Date.now(), - type, - payload - }) - ); -} -function sendClientWithToken(ws, type, payload, token, seq = 1) { - (0,__vite_ssr_import_1__.handleMessage)( - ws, - JSON.stringify({ - v: __vite_ssr_import_2__.PROTOCOL_VERSION, - seq, - ts: Date.now(), - token, - type, - payload - }) - ); -} -(0,__vite_ssr_import_0__.describe)("broadcast — room.create / room.join / game.move", () => { - (0,__vite_ssr_import_0__.beforeEach)(() => { - void __vite_ssr_import_1__.roomRegistry; - void __vite_ssr_import_1__.sessionRegistry; - }); - (0,__vite_ssr_import_0__.it)("end-to-end: two clients exchange a legal move and both receive game.delta", () => { - const a = makeMockWs("A"); - const b = makeMockWs("B"); - (0,__vite_ssr_import_1__.registerConnection)(a); - (0,__vite_ssr_import_1__.registerConnection)(b); - sendClient(a, "room.create", { rulesetIds: [] }); - const created = nextMsgOfType(a, "room.created"); - (0,__vite_ssr_import_0__.expect)(created.payload["color"]).toBe("white"); - (0,__vite_ssr_import_0__.expect)(created.payload["code"]).toMatch(/^[A-Z0-9]{6}$/); - const code = created.payload["code"]; - sendClient(b, "room.join", { code }); - const joined = nextMsgOfType(b, "room.joined"); - (0,__vite_ssr_import_0__.expect)(joined.payload["color"]).toBe("black"); - const aState = nextMsgOfType(a, "game.state"); - const bState = nextMsgOfType(b, "game.state"); - (0,__vite_ssr_import_0__.expect)(aState.payload["turn"]).toBe("white"); - (0,__vite_ssr_import_0__.expect)(bState.payload["turn"]).toBe("white"); - (0,__vite_ssr_import_0__.expect)(Array.isArray(aState.payload["facts"])).toBe(true); - (0,__vite_ssr_import_0__.expect)(aState.payload["facts"].length).toBeGreaterThan(0); - sendClient(a, "game.move", { from: "e2", to: "e4" }, 2); - const aDelta = nextMsgOfType(a, "game.delta"); - const bDelta = nextMsgOfType(b, "game.delta"); - (0,__vite_ssr_import_0__.expect)(aDelta.payload["turn"]).toBe("black"); - (0,__vite_ssr_import_0__.expect)(bDelta.payload["turn"]).toBe("black"); - (0,__vite_ssr_import_0__.expect)(aDelta.payload["moveNotation"]).toBe("e2e4"); - (0,__vite_ssr_import_0__.expect)(aDelta.payload["gameOver"]).toBeNull(); - const inserted = aDelta.payload["inserted"]; - const retracted = aDelta.payload["retracted"]; - const e4Fact = inserted.find( - (f) => f.attr === "Position" && f.value === 28 - ); - const e2Fact = retracted.find( - (f) => f.attr === "Position" && f.value === 12 - ); - (0,__vite_ssr_import_0__.expect)(e4Fact).toBeDefined(); - (0,__vite_ssr_import_0__.expect)(e2Fact).toBeDefined(); - sendClient(a, "room.leave", {}, 3); - (0,__vite_ssr_import_1__.unregisterConnection)(a); - (0,__vite_ssr_import_1__.unregisterConnection)(b); - }); - (0,__vite_ssr_import_0__.it)("illegal move: sender gets ILLEGAL_MOVE error, opponent receives nothing", () => { - const a = makeMockWs("A"); - const b = makeMockWs("B"); - (0,__vite_ssr_import_1__.registerConnection)(a); - (0,__vite_ssr_import_1__.registerConnection)(b); - sendClient(a, "room.create", { rulesetIds: [] }); - const code = nextMsgOfType(a, "room.created").payload["code"]; - sendClient(b, "room.join", { code }); - nextMsgOfType(b, "room.joined"); - nextMsgOfType(a, "game.state"); - nextMsgOfType(b, "game.state"); - sendClient(a, "game.move", { from: "e2", to: "e4" }, 2); - nextMsgOfType(a, "game.delta"); - nextMsgOfType(b, "game.delta"); - sendClient(b, "game.move", { from: "e7", to: "e2" }, 2); - const err = nextMsgOfType(b, "error"); - (0,__vite_ssr_import_0__.expect)(err.payload["code"]).toBe("ILLEGAL_MOVE"); - (0,__vite_ssr_import_0__.expect)(err.payload["fatal"]).toBe(false); - (0,__vite_ssr_import_0__.expect)(a.sent).toHaveLength(0); - sendClient(a, "room.leave", {}, 3); - (0,__vite_ssr_import_1__.unregisterConnection)(a); - (0,__vite_ssr_import_1__.unregisterConnection)(b); - }); - (0,__vite_ssr_import_0__.it)("NOT_YOUR_TURN: black trying to move first gets turn error", () => { - const a = makeMockWs("A"); - const b = makeMockWs("B"); - (0,__vite_ssr_import_1__.registerConnection)(a); - (0,__vite_ssr_import_1__.registerConnection)(b); - sendClient(a, "room.create", { rulesetIds: [] }); - const code = nextMsgOfType(a, "room.created").payload["code"]; - sendClient(b, "room.join", { code }); - nextMsgOfType(b, "room.joined"); - nextMsgOfType(a, "game.state"); - nextMsgOfType(b, "game.state"); - sendClient(b, "game.move", { from: "e7", to: "e5" }, 2); - const err = nextMsgOfType(b, "error"); - (0,__vite_ssr_import_0__.expect)(err.payload["code"]).toBe("NOT_YOUR_TURN"); - (0,__vite_ssr_import_0__.expect)(a.sent).toHaveLength(0); - sendClient(a, "room.leave", {}, 2); - (0,__vite_ssr_import_1__.unregisterConnection)(a); - (0,__vite_ssr_import_1__.unregisterConnection)(b); - }); - (0,__vite_ssr_import_0__.it)("malformed JSON: sender gets fatal INVALID_MESSAGE and socket is closed", () => { - const a = makeMockWs("A"); - (0,__vite_ssr_import_1__.registerConnection)(a); - (0,__vite_ssr_import_1__.handleMessage)(a, "not json at all {"); - const err = nextMsgOfType(a, "error"); - (0,__vite_ssr_import_0__.expect)(err.payload["code"]).toBe("INVALID_MESSAGE"); - (0,__vite_ssr_import_0__.expect)(err.payload["fatal"]).toBe(true); - (0,__vite_ssr_import_0__.expect)(a.closed).toBe(true); - (0,__vite_ssr_import_1__.unregisterConnection)(a); - }); - (0,__vite_ssr_import_0__.it)("version mismatch: fatal disconnect with VERSION_MISMATCH error", () => { - const a = makeMockWs("A"); - (0,__vite_ssr_import_1__.registerConnection)(a); - (0,__vite_ssr_import_1__.handleMessage)( - a, - JSON.stringify({ - v: 2, - seq: 1, - ts: Date.now(), - type: "room.create", - payload: {} - }) - ); - const err = nextMsgOfType(a, "error"); - (0,__vite_ssr_import_0__.expect)(err.payload["code"]).toBe("VERSION_MISMATCH"); - (0,__vite_ssr_import_0__.expect)(err.payload["fatal"]).toBe(true); - (0,__vite_ssr_import_0__.expect)(a.closed).toBe(true); - (0,__vite_ssr_import_1__.unregisterConnection)(a); - }); - (0,__vite_ssr_import_0__.it)("room.join with unknown code returns ROOM_NOT_FOUND", () => { - const a = makeMockWs("A"); - (0,__vite_ssr_import_1__.registerConnection)(a); - sendClient(a, "room.join", { code: "ZZZZZZ" }); - const err = nextMsgOfType(a, "error"); - (0,__vite_ssr_import_0__.expect)(err.payload["code"]).toBe("ROOM_NOT_FOUND"); - (0,__vite_ssr_import_0__.expect)(err.payload["fatal"]).toBe(false); - (0,__vite_ssr_import_1__.unregisterConnection)(a); - }); - (0,__vite_ssr_import_0__.it)("unauthenticated game.move returns BAD_TOKEN", () => { - const a = makeMockWs("A"); - (0,__vite_ssr_import_1__.registerConnection)(a); - sendClient(a, "game.move", { from: "e2", to: "e4" }); - const err = nextMsgOfType(a, "error"); - (0,__vite_ssr_import_0__.expect)(err.payload["code"]).toBe("BAD_TOKEN"); - (0,__vite_ssr_import_1__.unregisterConnection)(a); - }); -}); -(0,__vite_ssr_import_0__.describe)("broadcast — reconnect grace + snapshot resume (P4.7)", () => { - (0,__vite_ssr_import_0__.afterEach)(() => { - __vite_ssr_import_3__.reconnectManager.clearAll(); - }); - (0,__vite_ssr_import_0__.it)("disconnect → opponent moves → reconnect receives game.state + buffered delta", () => { - const a = makeMockWs("A"); - const b = makeMockWs("B"); - (0,__vite_ssr_import_1__.registerConnection)(a); - (0,__vite_ssr_import_1__.registerConnection)(b); - sendClient(a, "room.create", { rulesetIds: [] }); - const created = nextMsgOfType(a, "room.created"); - const code = created.payload["code"]; - const tokenA = created.payload["token"]; - sendClient(b, "room.join", { code }); - nextMsgOfType(b, "room.joined"); - nextMsgOfType(a, "game.state"); - nextMsgOfType(b, "game.state"); - sendClient(a, "game.move", { from: "e2", to: "e4" }, 2); - nextMsgOfType(a, "game.delta"); - nextMsgOfType(b, "game.delta"); - (0,__vite_ssr_import_1__.unregisterConnection)(a); - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_3__.reconnectManager.isPending(tokenA)).toBe(true); - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_1__.roomRegistry.getRoom(code)).toBeDefined(); - (0,__vite_ssr_import_0__.expect)( - b.sent.find( - (m) => m.type === "game.end" - ) - ).toBeUndefined(); - sendClient(b, "game.move", { from: "e7", to: "e5" }, 2); - const bDelta = nextMsgOfType(b, "game.delta"); - (0,__vite_ssr_import_0__.expect)(bDelta.payload["moveNotation"]).toBe("e7e5"); - const aNew = makeMockWs("A2"); - (0,__vite_ssr_import_1__.registerConnection)(aNew); - sendClientWithToken(aNew, "room.join", { code }, tokenA); - const joined = nextMsgOfType(aNew, "room.joined"); - (0,__vite_ssr_import_0__.expect)(joined.payload["token"]).toBe(tokenA); - (0,__vite_ssr_import_0__.expect)(joined.payload["color"]).toBe("white"); - const state = nextMsgOfType(aNew, "game.state"); - const facts = state.payload["facts"]; - const positions = facts.filter((f) => f.attr === "Position").map((f) => f.value); - (0,__vite_ssr_import_0__.expect)(positions).toContain(28); - (0,__vite_ssr_import_0__.expect)(positions).toContain(36); - (0,__vite_ssr_import_0__.expect)(positions).not.toContain(12); - (0,__vite_ssr_import_0__.expect)(positions).not.toContain(52); - (0,__vite_ssr_import_0__.expect)(state.payload["turn"]).toBe("white"); - const replayed = nextMsgOfType(aNew, "game.delta"); - (0,__vite_ssr_import_0__.expect)(replayed.payload["moveNotation"]).toBe("e7e5"); - (0,__vite_ssr_import_0__.expect)(replayed.payload["turn"]).toBe("white"); - (0,__vite_ssr_import_0__.expect)(__vite_ssr_import_3__.reconnectManager.isPending(tokenA)).toBe(false); - const player = __vite_ssr_import_1__.roomRegistry.getPlayerByToken(code, tokenA); - (0,__vite_ssr_import_0__.expect)(player?.connected).toBe(true); - sendClientWithToken( - aNew, - "room.leave", - {}, - tokenA, - 3 - ); - (0,__vite_ssr_import_1__.unregisterConnection)(aNew); - (0,__vite_ssr_import_1__.unregisterConnection)(b); - }); - (0,__vite_ssr_import_0__.it)("reconnect without an active grace window is rejected (falls through to normal join)", () => { - const a = makeMockWs("A"); - (0,__vite_ssr_import_1__.registerConnection)(a); - sendClient(a, "room.create", { rulesetIds: [] }); - const created = nextMsgOfType(a, "room.created"); - const code = created.payload["code"]; - const tokenA = created.payload["token"]; - sendClientWithToken(a, "room.join", { code }, tokenA); - const err = nextMsgOfType(a, "error"); - (0,__vite_ssr_import_0__.expect)(err.payload["code"]).toBe("INVALID_MESSAGE"); - (0,__vite_ssr_import_1__.unregisterConnection)(a); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0gsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiYnJvYWRjYXN0LnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW50ZWdyYXRpb24gdGVzdCBmb3IgUDQuNjogbW92ZS1pbnRlbnQgdmFsaWRhdGlvbiArIGZhY3QtZGVsdGEgYnJvYWRjYXN0LlxuLy9cbi8vIFRoaXMgc3VpdGUgcnVucyB1bmRlciB2aXRlc3Qgb24gTm9kZSwgc28gd2UgY2FuJ3Qgc3BpbiB1cCBhIHJlYWxcbi8vIEJ1bi5zZXJ2ZSBXZWJTb2NrZXQgc2VydmVyIChCdW4gZ2xvYmFsIGlzIGFic2VudCkuIEluc3RlYWQgd2UgZHJpdmVcbi8vIGBoYW5kbGVNZXNzYWdlYCBkaXJlY3RseSB3aXRoIG1vY2sgU2VydmVyV2ViU29ja2V0IG9iamVjdHMgdGhhdFxuLy8gY2FwdHVyZSBldmVyeSBvdXRib3VuZCBmcmFtZS4gVGhhdCBnaXZlcyB1cyB0aGUgc2FtZSBpbnRlZ3JhdGlvblxuLy8gc3VyZmFjZSAodHdvIGNsaWVudHMgaW4gYSByb29tLCBjcm9zcy1jbGllbnQgYnJvYWRjYXN0LCBlcnJvci1vbmx5LVxuLy8gdG8tc2VuZGVyKSB3aGlsZSBrZWVwaW5nIHRoZSB0ZXN0cyBydW50aW1lLWFnbm9zdGljLlxuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJXZWJTb2NrZXQgfSBmcm9tIFwiYnVuXCI7XG5cbmltcG9ydCB7IGFmdGVyRWFjaCwgYmVmb3JlRWFjaCwgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tIFwidml0ZXN0XCI7XG5cbmltcG9ydCB7XG4gIGhhbmRsZU1lc3NhZ2UsXG4gIHJlZ2lzdGVyQ29ubmVjdGlvbixcbiAgcm9vbVJlZ2lzdHJ5LFxuICBzZXNzaW9uUmVnaXN0cnksXG4gIHVucmVnaXN0ZXJDb25uZWN0aW9uLFxuICB0eXBlIENsaWVudERhdGEsXG59IGZyb20gXCIuL2Jyb2FkY2FzdC5qc1wiO1xuaW1wb3J0IHsgUFJPVE9DT0xfVkVSU0lPTiwgdHlwZSBDbGllbnRNZXNzYWdlIH0gZnJvbSBcIi4vcHJvdG9jb2wuanNcIjtcbmltcG9ydCB7IHJlY29ubmVjdE1hbmFnZXIgfSBmcm9tIFwiLi9yZWNvbm5lY3QuanNcIjtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBNb2NrIFNlcnZlcldlYlNvY2tldFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmludGVyZmFjZSBNb2NrV3MgZXh0ZW5kcyBTZXJ2ZXJXZWJTb2NrZXQ8Q2xpZW50RGF0YT4ge1xuICAvKiogQ2FwdHVyZWQgb3V0Ym91bmQgZnJhbWVzLCBwYXJzZWQgYmFjayBmcm9tIEpTT04gZm9yIGVhc3kgYXNzZXJ0aW9ucy4gKi9cbiAgcmVhZG9ubHkgc2VudDogdW5rbm93bltdO1xuICAvKiogUmVhZC1vbmx5OiB0cnVlIG9uY2UgdGhlIHNlcnZlciBjYWxsZWQgYHdzLmNsb3NlKClgIG9uIHRoaXMgbW9jay4gKi9cbiAgcmVhZG9ubHkgY2xvc2VkOiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBtYWtlTW9ja1dzKGNsaWVudElkOiBzdHJpbmcpOiBNb2NrV3Mge1xuICBjb25zdCBzZW50OiB1bmtub3duW10gPSBbXTtcbiAgLy8gYGNsb3NlZEZsYWdgIGlzIGEgMS1lbGVtZW50IGJveCBzbyB0aGUgYGNsb3NlKClgIG1ldGhvZCBjYW4gZmxpcCBhXG4gIC8vIHZhbHVlIHdpdGhvdXQgbmVlZGluZyBhIGB0aGlzYCBiaW5kaW5nICh3aGljaCBUeXBlU2NyaXB0IHR5cGVzIGFzXG4gIC8vIHRoZSBiYXJlIG1ldGhvZCByZWNlaXZlciB1bmRlciBzdHJpY3QgbW9kZSkuIFRoZSByZXN1bHRpbmcgbW9jayBpc1xuICAvLyB0aGVuIGFzc2VtYmxlZCBhbmQgZXhwb3NlZCBhcyBhIE1vY2tXcy5cbiAgY29uc3QgY2xvc2VkRmxhZyA9IHsgdmFsdWU6IGZhbHNlIH07XG4gIC8vIFdlIHR5cGUgdGhlIG1vY2sgYXMgdGhlIGZ1bGwgU2VydmVyV2ViU29ja2V0IHZpYSBhc3NlcnRpb24g4oCUIHdlIG9ubHlcbiAgLy8gaW1wbGVtZW50IHRoZSBtZXRob2RzIGBoYW5kbGVNZXNzYWdlYCBhY3R1YWxseSB1c2VzIChgc2VuZGAsIGBjbG9zZWAsXG4gIC8vIGBkYXRhYCkuIEFjY2Vzc2luZyBhbnkgb3RoZXIgZmllbGQgaW4gdGhlIGhhbmRsZXJzIHdvdWxkIHRocm93IGF0XG4gIC8vIHJ1bnRpbWUsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGNvbnRyYWN0IHdlIHdhbnQgZW5mb3JjZWQuXG4gIGNvbnN0IHdzID0ge1xuICAgIGRhdGE6IHsgY2xpZW50SWQgfSBhcyBDbGllbnREYXRhLFxuICAgIHNlbnQsXG4gICAgZ2V0IGNsb3NlZCgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBjbG9zZWRGbGFnLnZhbHVlO1xuICAgIH0sXG4gICAgc2VuZChtc2c6IHN0cmluZyB8IEJ1ZmZlcik6IG51bWJlciB7XG4gICAgICBjb25zdCBzdHIgPSB0eXBlb2YgbXNnID09PSBcInN0cmluZ1wiID8gbXNnIDogbXNnLnRvU3RyaW5nKFwidXRmOFwiKTtcbiAgICAgIHNlbnQucHVzaChKU09OLnBhcnNlKHN0cikpO1xuICAgICAgcmV0dXJuIHN0ci5sZW5ndGg7XG4gICAgfSxcbiAgICBjbG9zZSgpOiB2b2lkIHtcbiAgICAgIGNsb3NlZEZsYWcudmFsdWUgPSB0cnVlO1xuICAgIH0sXG4gIH0gYXMgdW5rbm93biBhcyBNb2NrV3M7XG4gIHJldHVybiB3cztcbn1cblxuZnVuY3Rpb24gbmV4dE1zZ09mVHlwZShcbiAgd3M6IE1vY2tXcyxcbiAgdHlwZTogc3RyaW5nLFxuKTogeyBwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9IHtcbiAgY29uc3QgaWR4ID0gd3Muc2VudC5maW5kSW5kZXgoXG4gICAgKG0pID0+XG4gICAgICB0eXBlb2YgbSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgbSAhPT0gbnVsbCAmJlxuICAgICAgKG0gYXMgeyB0eXBlOiB1bmtub3duIH0pLnR5cGUgPT09IHR5cGUsXG4gICk7XG4gIGlmIChpZHggPCAwKSB7XG4gICAgY29uc3QgdHlwZXMgPSB3cy5zZW50Lm1hcCgobSkgPT4gKG0gYXMgeyB0eXBlPzogc3RyaW5nIH0pLnR5cGUpO1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBubyBtZXNzYWdlIG9mIHR5cGUgXCIke3R5cGV9XCIgaW4gaW5ib3ggKGdvdCAke0pTT04uc3RyaW5naWZ5KHR5cGVzKX0pYCxcbiAgICApO1xuICB9XG4gIGNvbnN0IG1zZyA9IHdzLnNlbnRbaWR4XSBhcyB7IHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH07XG4gIHdzLnNlbnQuc3BsaWNlKGlkeCwgMSk7XG4gIHJldHVybiBtc2c7XG59XG5cbmZ1bmN0aW9uIHNlbmRDbGllbnQoXG4gIHdzOiBNb2NrV3MsXG4gIHR5cGU6IENsaWVudE1lc3NhZ2VbXCJ0eXBlXCJdLFxuICBwYXlsb2FkOiB1bmtub3duLFxuICBzZXEgPSAxLFxuKTogdm9pZCB7XG4gIGhhbmRsZU1lc3NhZ2UoXG4gICAgd3MsXG4gICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgdjogUFJPVE9DT0xfVkVSU0lPTixcbiAgICAgIHNlcSxcbiAgICAgIHRzOiBEYXRlLm5vdygpLFxuICAgICAgdHlwZSxcbiAgICAgIHBheWxvYWQsXG4gICAgfSksXG4gICk7XG59XG5cbi8qKlxuICogTGlrZSBgc2VuZENsaWVudGAgYnV0IGF0dGFjaGVzIGEgYHRva2VuYCB0byB0aGUgZW52ZWxvcGUg4oCUIHRoZVxuICogcmVjb25uZWN0IGZsb3cncyB0cmlnZ2VyLiBSZXVzZWQgYnkgdGhlIFA0LjcgdGVzdHMuXG4gKi9cbmZ1bmN0aW9uIHNlbmRDbGllbnRXaXRoVG9rZW4oXG4gIHdzOiBNb2NrV3MsXG4gIHR5cGU6IENsaWVudE1lc3NhZ2VbXCJ0eXBlXCJdLFxuICBwYXlsb2FkOiB1bmtub3duLFxuICB0b2tlbjogc3RyaW5nLFxuICBzZXEgPSAxLFxuKTogdm9pZCB7XG4gIGhhbmRsZU1lc3NhZ2UoXG4gICAgd3MsXG4gICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgdjogUFJPVE9DT0xfVkVSU0lPTixcbiAgICAgIHNlcSxcbiAgICAgIHRzOiBEYXRlLm5vdygpLFxuICAgICAgdG9rZW4sXG4gICAgICB0eXBlLFxuICAgICAgcGF5bG9hZCxcbiAgICB9KSxcbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUZXN0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmRlc2NyaWJlKFwiYnJvYWRjYXN0IOKAlCByb29tLmNyZWF0ZSAvIHJvb20uam9pbiAvIGdhbWUubW92ZVwiLCAoKSA9PiB7XG4gIC8vIEVhY2ggdGVzdCBjcmVhdGVzIGl0cyBvd24gcm9vbXMgd2l0aCBmcmVzaGx5LW1pbnRlZCBjb2Rlcywgc29cbiAgLy8gY3Jvc3MtdGVzdCBsZWFrYWdlIGlzIGJvdW5kZWQg4oCUIG5vIGV4cGxpY2l0IHJlc2V0IG5lZWRlZC5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgLy8gU2FuaXR5OiB0aGUgcmVnaXN0cmllcyBhcmUgcHJvY2Vzcy1nbG9iYWwuIFdlIHRvdWNoIHRoZW0gaGVyZVxuICAgIC8vIGp1c3QgdG8ga2VlcCB0aGVtIHZpc2libGUgdG8gc3RhdGljIGFuYWx5c2lzIGFzIGEgcHVibGljIHN1cmZhY2VcbiAgICAvLyB1bmRlciB0ZXN0LlxuICAgIHZvaWQgcm9vbVJlZ2lzdHJ5O1xuICAgIHZvaWQgc2Vzc2lvblJlZ2lzdHJ5O1xuICB9KTtcblxuICBpdChcImVuZC10by1lbmQ6IHR3byBjbGllbnRzIGV4Y2hhbmdlIGEgbGVnYWwgbW92ZSBhbmQgYm90aCByZWNlaXZlIGdhbWUuZGVsdGFcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGEgPSBtYWtlTW9ja1dzKFwiQVwiKTtcbiAgICBjb25zdCBiID0gbWFrZU1vY2tXcyhcIkJcIik7XG4gICAgcmVnaXN0ZXJDb25uZWN0aW9uKGEpO1xuICAgIHJlZ2lzdGVyQ29ubmVjdGlvbihiKTtcblxuICAgIC8vIDEpIEEgY3JlYXRlcyBhIHJvb20uXG4gICAgc2VuZENsaWVudChhLCBcInJvb20uY3JlYXRlXCIsIHsgcnVsZXNldElkczogW10gfSk7XG4gICAgY29uc3QgY3JlYXRlZCA9IG5leHRNc2dPZlR5cGUoYSwgXCJyb29tLmNyZWF0ZWRcIik7XG4gICAgZXhwZWN0KGNyZWF0ZWQucGF5bG9hZFtcImNvbG9yXCJdKS50b0JlKFwid2hpdGVcIik7XG4gICAgZXhwZWN0KGNyZWF0ZWQucGF5bG9hZFtcImNvZGVcIl0pLnRvTWF0Y2goL15bQS1aMC05XXs2fSQvKTtcbiAgICBjb25zdCBjb2RlID0gY3JlYXRlZC5wYXlsb2FkW1wiY29kZVwiXSBhcyBzdHJpbmc7XG5cbiAgICAvLyAyKSBCIGpvaW5zIOKAlCBBIGFuZCBCIHNob3VsZCBib3RoIGVuZCB1cCB3aXRoIGEgZ2FtZS5zdGF0ZSBmcmFtZS5cbiAgICBzZW5kQ2xpZW50KGIsIFwicm9vbS5qb2luXCIsIHsgY29kZSB9KTtcbiAgICBjb25zdCBqb2luZWQgPSBuZXh0TXNnT2ZUeXBlKGIsIFwicm9vbS5qb2luZWRcIik7XG4gICAgZXhwZWN0KGpvaW5lZC5wYXlsb2FkW1wiY29sb3JcIl0pLnRvQmUoXCJibGFja1wiKTtcbiAgICBjb25zdCBhU3RhdGUgPSBuZXh0TXNnT2ZUeXBlKGEsIFwiZ2FtZS5zdGF0ZVwiKTtcbiAgICBjb25zdCBiU3RhdGUgPSBuZXh0TXNnT2ZUeXBlKGIsIFwiZ2FtZS5zdGF0ZVwiKTtcbiAgICBleHBlY3QoYVN0YXRlLnBheWxvYWRbXCJ0dXJuXCJdKS50b0JlKFwid2hpdGVcIik7XG4gICAgZXhwZWN0KGJTdGF0ZS5wYXlsb2FkW1widHVyblwiXSkudG9CZShcIndoaXRlXCIpO1xuICAgIGV4cGVjdChBcnJheS5pc0FycmF5KGFTdGF0ZS5wYXlsb2FkW1wiZmFjdHNcIl0pKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdCgoYVN0YXRlLnBheWxvYWRbXCJmYWN0c1wiXSBhcyB1bmtub3duW10pLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuXG4gICAgLy8gMykgQSBwbGF5cyBlMi0+ZTQuXG4gICAgc2VuZENsaWVudChhLCBcImdhbWUubW92ZVwiLCB7IGZyb206IFwiZTJcIiwgdG86IFwiZTRcIiB9LCAyKTtcbiAgICBjb25zdCBhRGVsdGEgPSBuZXh0TXNnT2ZUeXBlKGEsIFwiZ2FtZS5kZWx0YVwiKTtcbiAgICBjb25zdCBiRGVsdGEgPSBuZXh0TXNnT2ZUeXBlKGIsIFwiZ2FtZS5kZWx0YVwiKTtcbiAgICBleHBlY3QoYURlbHRhLnBheWxvYWRbXCJ0dXJuXCJdKS50b0JlKFwiYmxhY2tcIik7XG4gICAgZXhwZWN0KGJEZWx0YS5wYXlsb2FkW1widHVyblwiXSkudG9CZShcImJsYWNrXCIpO1xuICAgIGV4cGVjdChhRGVsdGEucGF5bG9hZFtcIm1vdmVOb3RhdGlvblwiXSkudG9CZShcImUyZTRcIik7XG4gICAgZXhwZWN0KGFEZWx0YS5wYXlsb2FkW1wiZ2FtZU92ZXJcIl0pLnRvQmVOdWxsKCk7XG5cbiAgICBjb25zdCBpbnNlcnRlZCA9IGFEZWx0YS5wYXlsb2FkW1wiaW5zZXJ0ZWRcIl0gYXMgQXJyYXk8e1xuICAgICAgYXR0cjogc3RyaW5nO1xuICAgICAgdmFsdWU6IHVua25vd247XG4gICAgfT47XG4gICAgY29uc3QgcmV0cmFjdGVkID0gYURlbHRhLnBheWxvYWRbXCJyZXRyYWN0ZWRcIl0gYXMgQXJyYXk8e1xuICAgICAgYXR0cjogc3RyaW5nO1xuICAgICAgdmFsdWU6IHVua25vd247XG4gICAgfT47XG4gICAgLy8gZTQgPSBmaWxlIDQgKyByYW5rIDMqOCA9IDI4OyBlMiA9IGZpbGUgNCArIHJhbmsgMSo4ID0gMTIuXG4gICAgY29uc3QgZTRGYWN0ID0gaW5zZXJ0ZWQuZmluZChcbiAgICAgIChmKSA9PiBmLmF0dHIgPT09IFwiUG9zaXRpb25cIiAmJiBmLnZhbHVlID09PSAyOCxcbiAgICApO1xuICAgIGNvbnN0IGUyRmFjdCA9IHJldHJhY3RlZC5maW5kKFxuICAgICAgKGYpID0+IGYuYXR0ciA9PT0gXCJQb3NpdGlvblwiICYmIGYudmFsdWUgPT09IDEyLFxuICAgICk7XG4gICAgZXhwZWN0KGU0RmFjdCkudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3QoZTJGYWN0KS50b0JlRGVmaW5lZCgpO1xuXG4gICAgc2VuZENsaWVudChhLCBcInJvb20ubGVhdmVcIiwge30sIDMpO1xuICAgIHVucmVnaXN0ZXJDb25uZWN0aW9uKGEpO1xuICAgIHVucmVnaXN0ZXJDb25uZWN0aW9uKGIpO1xuICB9KTtcblxuICBpdChcImlsbGVnYWwgbW92ZTogc2VuZGVyIGdldHMgSUxMRUdBTF9NT1ZFIGVycm9yLCBvcHBvbmVudCByZWNlaXZlcyBub3RoaW5nXCIsICgpID0+IHtcbiAgICBjb25zdCBhID0gbWFrZU1vY2tXcyhcIkFcIik7XG4gICAgY29uc3QgYiA9IG1ha2VNb2NrV3MoXCJCXCIpO1xuICAgIHJlZ2lzdGVyQ29ubmVjdGlvbihhKTtcbiAgICByZWdpc3RlckNvbm5lY3Rpb24oYik7XG5cbiAgICBzZW5kQ2xpZW50KGEsIFwicm9vbS5jcmVhdGVcIiwgeyBydWxlc2V0SWRzOiBbXSB9KTtcbiAgICBjb25zdCBjb2RlID0gbmV4dE1zZ09mVHlwZShhLCBcInJvb20uY3JlYXRlZFwiKS5wYXlsb2FkW1wiY29kZVwiXSBhcyBzdHJpbmc7XG4gICAgc2VuZENsaWVudChiLCBcInJvb20uam9pblwiLCB7IGNvZGUgfSk7XG4gICAgbmV4dE1zZ09mVHlwZShiLCBcInJvb20uam9pbmVkXCIpO1xuICAgIG5leHRNc2dPZlR5cGUoYSwgXCJnYW1lLnN0YXRlXCIpO1xuICAgIG5leHRNc2dPZlR5cGUoYiwgXCJnYW1lLnN0YXRlXCIpO1xuXG4gICAgLy8gQSBwbGF5cyBhIGxlZ2FsIG1vdmUgc28gaXQgYmVjb21lcyBCJ3MgdHVybi5cbiAgICBzZW5kQ2xpZW50KGEsIFwiZ2FtZS5tb3ZlXCIsIHsgZnJvbTogXCJlMlwiLCB0bzogXCJlNFwiIH0sIDIpO1xuICAgIG5leHRNc2dPZlR5cGUoYSwgXCJnYW1lLmRlbHRhXCIpO1xuICAgIG5leHRNc2dPZlR5cGUoYiwgXCJnYW1lLmRlbHRhXCIpO1xuXG4gICAgLy8gQiB0cmllcyBhbiBpbGxlZ2FsIG1vdmU6IHBhd24gY2FuJ3QgdGVsZXBvcnQgYWNyb3NzIHRoZSBib2FyZC5cbiAgICBzZW5kQ2xpZW50KGIsIFwiZ2FtZS5tb3ZlXCIsIHsgZnJvbTogXCJlN1wiLCB0bzogXCJlMlwiIH0sIDIpO1xuICAgIGNvbnN0IGVyciA9IG5leHRNc2dPZlR5cGUoYiwgXCJlcnJvclwiKTtcbiAgICBleHBlY3QoZXJyLnBheWxvYWRbXCJjb2RlXCJdKS50b0JlKFwiSUxMRUdBTF9NT1ZFXCIpO1xuICAgIGV4cGVjdChlcnIucGF5bG9hZFtcImZhdGFsXCJdKS50b0JlKGZhbHNlKTtcblxuICAgIC8vIEEgbXVzdCBoYXZlIE5PVEhJTkcgbmV3IGluIGl0cyBpbmJveCDigJQgbm8gYnJvYWRjYXN0IGhhcHBlbmVkLlxuICAgIGV4cGVjdChhLnNlbnQpLnRvSGF2ZUxlbmd0aCgwKTtcblxuICAgIHNlbmRDbGllbnQoYSwgXCJyb29tLmxlYXZlXCIsIHt9LCAzKTtcbiAgICB1bnJlZ2lzdGVyQ29ubmVjdGlvbihhKTtcbiAgICB1bnJlZ2lzdGVyQ29ubmVjdGlvbihiKTtcbiAgfSk7XG5cbiAgaXQoXCJOT1RfWU9VUl9UVVJOOiBibGFjayB0cnlpbmcgdG8gbW92ZSBmaXJzdCBnZXRzIHR1cm4gZXJyb3JcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGEgPSBtYWtlTW9ja1dzKFwiQVwiKTtcbiAgICBjb25zdCBiID0gbWFrZU1vY2tXcyhcIkJcIik7XG4gICAgcmVnaXN0ZXJDb25uZWN0aW9uKGEpO1xuICAgIHJlZ2lzdGVyQ29ubmVjdGlvbihiKTtcblxuICAgIHNlbmRDbGllbnQoYSwgXCJyb29tLmNyZWF0ZVwiLCB7IHJ1bGVzZXRJZHM6IFtdIH0pO1xuICAgIGNvbnN0IGNvZGUgPSBuZXh0TXNnT2ZUeXBlKGEsIFwicm9vbS5jcmVhdGVkXCIpLnBheWxvYWRbXCJjb2RlXCJdIGFzIHN0cmluZztcbiAgICBzZW5kQ2xpZW50KGIsIFwicm9vbS5qb2luXCIsIHsgY29kZSB9KTtcbiAgICBuZXh0TXNnT2ZUeXBlKGIsIFwicm9vbS5qb2luZWRcIik7XG4gICAgbmV4dE1zZ09mVHlwZShhLCBcImdhbWUuc3RhdGVcIik7XG4gICAgbmV4dE1zZ09mVHlwZShiLCBcImdhbWUuc3RhdGVcIik7XG5cbiAgICAvLyBCbGFjayB0cmllcyB0byBtb3ZlIGJlZm9yZSB3aGl0ZSDigJQgcHJvdG9jb2wgZGlzdGluZ3Vpc2hlc1xuICAgIC8vIE5PVF9ZT1VSX1RVUk4gZnJvbSBJTExFR0FMX01PVkUgc28gY2xpZW50cyBjYW4gbWVzc2FnZSBhY2NvcmRpbmdseS5cbiAgICBzZW5kQ2xpZW50KGIsIFwiZ2FtZS5tb3ZlXCIsIHsgZnJvbTogXCJlN1wiLCB0bzogXCJlNVwiIH0sIDIpO1xuICAgIGNvbnN0IGVyciA9IG5leHRNc2dPZlR5cGUoYiwgXCJlcnJvclwiKTtcbiAgICBleHBlY3QoZXJyLnBheWxvYWRbXCJjb2RlXCJdKS50b0JlKFwiTk9UX1lPVVJfVFVSTlwiKTtcbiAgICBleHBlY3QoYS5zZW50KS50b0hhdmVMZW5ndGgoMCk7XG5cbiAgICBzZW5kQ2xpZW50KGEsIFwicm9vbS5sZWF2ZVwiLCB7fSwgMik7XG4gICAgdW5yZWdpc3RlckNvbm5lY3Rpb24oYSk7XG4gICAgdW5yZWdpc3RlckNvbm5lY3Rpb24oYik7XG4gIH0pO1xuXG4gIGl0KFwibWFsZm9ybWVkIEpTT046IHNlbmRlciBnZXRzIGZhdGFsIElOVkFMSURfTUVTU0FHRSBhbmQgc29ja2V0IGlzIGNsb3NlZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgYSA9IG1ha2VNb2NrV3MoXCJBXCIpO1xuICAgIHJlZ2lzdGVyQ29ubmVjdGlvbihhKTtcblxuICAgIGhhbmRsZU1lc3NhZ2UoYSwgXCJub3QganNvbiBhdCBhbGwge1wiKTtcbiAgICBjb25zdCBlcnIgPSBuZXh0TXNnT2ZUeXBlKGEsIFwiZXJyb3JcIik7XG4gICAgZXhwZWN0KGVyci5wYXlsb2FkW1wiY29kZVwiXSkudG9CZShcIklOVkFMSURfTUVTU0FHRVwiKTtcbiAgICBleHBlY3QoZXJyLnBheWxvYWRbXCJmYXRhbFwiXSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QoYS5jbG9zZWQpLnRvQmUodHJ1ZSk7XG5cbiAgICB1bnJlZ2lzdGVyQ29ubmVjdGlvbihhKTtcbiAgfSk7XG5cbiAgaXQoXCJ2ZXJzaW9uIG1pc21hdGNoOiBmYXRhbCBkaXNjb25uZWN0IHdpdGggVkVSU0lPTl9NSVNNQVRDSCBlcnJvclwiLCAoKSA9PiB7XG4gICAgY29uc3QgYSA9IG1ha2VNb2NrV3MoXCJBXCIpO1xuICAgIHJlZ2lzdGVyQ29ubmVjdGlvbihhKTtcblxuICAgIGhhbmRsZU1lc3NhZ2UoXG4gICAgICBhLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB2OiAyLFxuICAgICAgICBzZXE6IDEsXG4gICAgICAgIHRzOiBEYXRlLm5vdygpLFxuICAgICAgICB0eXBlOiBcInJvb20uY3JlYXRlXCIsXG4gICAgICAgIHBheWxvYWQ6IHt9LFxuICAgICAgfSksXG4gICAgKTtcbiAgICBjb25zdCBlcnIgPSBuZXh0TXNnT2ZUeXBlKGEsIFwiZXJyb3JcIik7XG4gICAgZXhwZWN0KGVyci5wYXlsb2FkW1wiY29kZVwiXSkudG9CZShcIlZFUlNJT05fTUlTTUFUQ0hcIik7XG4gICAgZXhwZWN0KGVyci5wYXlsb2FkW1wiZmF0YWxcIl0pLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KGEuY2xvc2VkKS50b0JlKHRydWUpO1xuXG4gICAgdW5yZWdpc3RlckNvbm5lY3Rpb24oYSk7XG4gIH0pO1xuXG4gIGl0KFwicm9vbS5qb2luIHdpdGggdW5rbm93biBjb2RlIHJldHVybnMgUk9PTV9OT1RfRk9VTkRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGEgPSBtYWtlTW9ja1dzKFwiQVwiKTtcbiAgICByZWdpc3RlckNvbm5lY3Rpb24oYSk7XG5cbiAgICBzZW5kQ2xpZW50KGEsIFwicm9vbS5qb2luXCIsIHsgY29kZTogXCJaWlpaWlpcIiB9KTtcbiAgICBjb25zdCBlcnIgPSBuZXh0TXNnT2ZUeXBlKGEsIFwiZXJyb3JcIik7XG4gICAgZXhwZWN0KGVyci5wYXlsb2FkW1wiY29kZVwiXSkudG9CZShcIlJPT01fTk9UX0ZPVU5EXCIpO1xuICAgIGV4cGVjdChlcnIucGF5bG9hZFtcImZhdGFsXCJdKS50b0JlKGZhbHNlKTtcblxuICAgIHVucmVnaXN0ZXJDb25uZWN0aW9uKGEpO1xuICB9KTtcblxuICBpdChcInVuYXV0aGVudGljYXRlZCBnYW1lLm1vdmUgcmV0dXJucyBCQURfVE9LRU5cIiwgKCkgPT4ge1xuICAgIGNvbnN0IGEgPSBtYWtlTW9ja1dzKFwiQVwiKTtcbiAgICByZWdpc3RlckNvbm5lY3Rpb24oYSk7XG5cbiAgICBzZW5kQ2xpZW50KGEsIFwiZ2FtZS5tb3ZlXCIsIHsgZnJvbTogXCJlMlwiLCB0bzogXCJlNFwiIH0pO1xuICAgIGNvbnN0IGVyciA9IG5leHRNc2dPZlR5cGUoYSwgXCJlcnJvclwiKTtcbiAgICBleHBlY3QoZXJyLnBheWxvYWRbXCJjb2RlXCJdKS50b0JlKFwiQkFEX1RPS0VOXCIpO1xuXG4gICAgdW5yZWdpc3RlckNvbm5lY3Rpb24oYSk7XG4gIH0pO1xufSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUDQuNzogcmVjb25uZWN0IGZsb3dcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5kZXNjcmliZShcImJyb2FkY2FzdCDigJQgcmVjb25uZWN0IGdyYWNlICsgc25hcHNob3QgcmVzdW1lIChQNC43KVwiLCAoKSA9PiB7XG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgLy8gUmVjb25uZWN0IHN0YXRlIGlzIHByb2Nlc3MtZ2xvYmFsOyB3aXBlIGFueSB0aW1lcnMgYSB0ZXN0IG1heSBoYXZlXG4gICAgLy8gbGVmdCBydW5uaW5nIHNvIHRoZXkgZG9uJ3QgbGVhayBhY3Jvc3MgY2FzZXMuXG4gICAgcmVjb25uZWN0TWFuYWdlci5jbGVhckFsbCgpO1xuICB9KTtcblxuICBpdChcImRpc2Nvbm5lY3Qg4oaSIG9wcG9uZW50IG1vdmVzIOKGkiByZWNvbm5lY3QgcmVjZWl2ZXMgZ2FtZS5zdGF0ZSArIGJ1ZmZlcmVkIGRlbHRhXCIsICgpID0+IHtcbiAgICBjb25zdCBhID0gbWFrZU1vY2tXcyhcIkFcIik7XG4gICAgY29uc3QgYiA9IG1ha2VNb2NrV3MoXCJCXCIpO1xuICAgIHJlZ2lzdGVyQ29ubmVjdGlvbihhKTtcbiAgICByZWdpc3RlckNvbm5lY3Rpb24oYik7XG5cbiAgICAvLyBSb29tIHNldHVwICsgb25lIHdoaXRlIG1vdmUgc28gc3RhdGUgaXMgbm9uLXRyaXZpYWwuXG4gICAgc2VuZENsaWVudChhLCBcInJvb20uY3JlYXRlXCIsIHsgcnVsZXNldElkczogW10gfSk7XG4gICAgY29uc3QgY3JlYXRlZCA9IG5leHRNc2dPZlR5cGUoYSwgXCJyb29tLmNyZWF0ZWRcIik7XG4gICAgY29uc3QgY29kZSA9IGNyZWF0ZWQucGF5bG9hZFtcImNvZGVcIl0gYXMgc3RyaW5nO1xuICAgIGNvbnN0IHRva2VuQSA9IGNyZWF0ZWQucGF5bG9hZFtcInRva2VuXCJdIGFzIHN0cmluZztcblxuICAgIHNlbmRDbGllbnQoYiwgXCJyb29tLmpvaW5cIiwgeyBjb2RlIH0pO1xuICAgIG5leHRNc2dPZlR5cGUoYiwgXCJyb29tLmpvaW5lZFwiKTtcbiAgICBuZXh0TXNnT2ZUeXBlKGEsIFwiZ2FtZS5zdGF0ZVwiKTtcbiAgICBuZXh0TXNnT2ZUeXBlKGIsIFwiZ2FtZS5zdGF0ZVwiKTtcblxuICAgIHNlbmRDbGllbnQoYSwgXCJnYW1lLm1vdmVcIiwgeyBmcm9tOiBcImUyXCIsIHRvOiBcImU0XCIgfSwgMik7XG4gICAgbmV4dE1zZ09mVHlwZShhLCBcImdhbWUuZGVsdGFcIik7XG4gICAgbmV4dE1zZ09mVHlwZShiLCBcImdhbWUuZGVsdGFcIik7XG5cbiAgICAvLyAtLS0gQSBkcm9wcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIHVucmVnaXN0ZXJDb25uZWN0aW9uKGEpO1xuICAgIC8vIFRoZSBzbG90IG11c3QgTk9UIGJlIHRvcm4gZG93biB5ZXQg4oCUIGdyYWNlIHdpbmRvdyBpcyBvcGVuLlxuICAgIGV4cGVjdChyZWNvbm5lY3RNYW5hZ2VyLmlzUGVuZGluZyh0b2tlbkEpKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChyb29tUmVnaXN0cnkuZ2V0Um9vbShjb2RlKSkudG9CZURlZmluZWQoKTtcbiAgICAvLyBCIG11c3QgTk9UIGhhdmUgcmVjZWl2ZWQgZ2FtZS5lbmQgeWV0IChpdCBtaWdodCBsYXRlciBpZiBBIGZhaWxzXG4gICAgLy8gdG8gY29tZSBiYWNrLCBidXQgdGhlIGdyYWNlIHdpbmRvdyBzdXBwcmVzc2VzIGl0IGZvciBub3cpLlxuICAgIGV4cGVjdChcbiAgICAgIGIuc2VudC5maW5kKFxuICAgICAgICAobSkgPT4gKG0gYXMgeyB0eXBlPzogc3RyaW5nIH0pLnR5cGUgPT09IFwiZ2FtZS5lbmRcIixcbiAgICAgICksXG4gICAgKS50b0JlVW5kZWZpbmVkKCk7XG5cbiAgICAvLyAtLS0gQiBrZWVwcyBwbGF5aW5nIGR1cmluZyBBJ3MgYWJzZW5jZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIHNlbmRDbGllbnQoYiwgXCJnYW1lLm1vdmVcIiwgeyBmcm9tOiBcImU3XCIsIHRvOiBcImU1XCIgfSwgMik7XG4gICAgLy8gQiBzZWVzIGl0cyBvd24gZGVsdGEgaW1tZWRpYXRlbHkuXG4gICAgY29uc3QgYkRlbHRhID0gbmV4dE1zZ09mVHlwZShiLCBcImdhbWUuZGVsdGFcIik7XG4gICAgZXhwZWN0KGJEZWx0YS5wYXlsb2FkW1wibW92ZU5vdGF0aW9uXCJdKS50b0JlKFwiZTdlNVwiKTtcbiAgICAvLyBBJ3Mgc29ja2V0IGlzIHRoZSBvbGQgKGNsb3NlZCkgbW9jayDigJQgbm90aGluZyBzaG91bGQgaGF2ZSBiZWVuXG4gICAgLy8gd3JpdHRlbiB0byBpdCBiZWNhdXNlIGl0J3MgYmVlbiB1bnJlZ2lzdGVyZWQuIFdlIG9ubHkgYXNzZXJ0IHRoYXRcbiAgICAvLyB0aGUgZGVsdGEgaXMgYnVmZmVyZWQgaW4gdGhlIHJlY29ubmVjdCBtYW5hZ2VyLiBUaGUgYnVmZmVyIGlzXG4gICAgLy8gaW50ZXJuYWwsIGJ1dCB3ZSdsbCBvYnNlcnZlIGl0IGluZGlyZWN0bHkgb24gcmVjb25uZWN0IGJlbG93LlxuXG4gICAgLy8gLS0tIEEgcmVjb25uZWN0cyB2aWEgYSBCUkFORC1ORVcgc29ja2V0IGNhcnJ5aW5nIHRoZSBvbGQgdG9rZW4gLS0tLVxuICAgIGNvbnN0IGFOZXcgPSBtYWtlTW9ja1dzKFwiQTJcIik7XG4gICAgcmVnaXN0ZXJDb25uZWN0aW9uKGFOZXcpO1xuICAgIHNlbmRDbGllbnRXaXRoVG9rZW4oYU5ldywgXCJyb29tLmpvaW5cIiwgeyBjb2RlIH0sIHRva2VuQSk7XG5cbiAgICAvLyBBc3NlcnRpb25zIG9uIHRoZSByZWNvbm5lY3QgaW5ib3gsIGluIG9yZGVyOlxuICAgIC8vICAxLiByb29tLmpvaW5lZCBlY2hvZXMgdGhlIGNvbG9yL3Rva2VuIG9mIHRoZSByZXN1bWVkIHNsb3QuXG4gICAgY29uc3Qgam9pbmVkID0gbmV4dE1zZ09mVHlwZShhTmV3LCBcInJvb20uam9pbmVkXCIpO1xuICAgIGV4cGVjdChqb2luZWQucGF5bG9hZFtcInRva2VuXCJdKS50b0JlKHRva2VuQSk7XG4gICAgZXhwZWN0KGpvaW5lZC5wYXlsb2FkW1wiY29sb3JcIl0pLnRvQmUoXCJ3aGl0ZVwiKTtcblxuICAgIC8vICAyLiBnYW1lLnN0YXRlIGNhcnJpZXMgdGhlIGF1dGhvcml0YXRpdmUgZmFjdCBzZXQgcmVmbGVjdGluZ1xuICAgIC8vICAgICBCT1RIIG1vdmVzIChlNCBhbmQgZTUpLiBFYXNpZXN0IHdheSB0byB2ZXJpZnk6IGEgcGF3biBtdXN0XG4gICAgLy8gICAgIGxpdmUgb24gZTQgKHNxIDI4KSBhbmQgb24gZTUgKHNxIDM2KSwgYW5kIE5PVCBvbiBlMiAvIGU3LlxuICAgIGNvbnN0IHN0YXRlID0gbmV4dE1zZ09mVHlwZShhTmV3LCBcImdhbWUuc3RhdGVcIik7XG4gICAgY29uc3QgZmFjdHMgPSBzdGF0ZS5wYXlsb2FkW1wiZmFjdHNcIl0gYXMgQXJyYXk8e1xuICAgICAgYXR0cjogc3RyaW5nO1xuICAgICAgdmFsdWU6IHVua25vd247XG4gICAgfT47XG4gICAgY29uc3QgcG9zaXRpb25zID0gZmFjdHNcbiAgICAgIC5maWx0ZXIoKGYpID0+IGYuYXR0ciA9PT0gXCJQb3NpdGlvblwiKVxuICAgICAgLm1hcCgoZikgPT4gZi52YWx1ZSk7XG4gICAgZXhwZWN0KHBvc2l0aW9ucykudG9Db250YWluKDI4KTsgLy8gZTRcbiAgICBleHBlY3QocG9zaXRpb25zKS50b0NvbnRhaW4oMzYpOyAvLyBlNVxuICAgIGV4cGVjdChwb3NpdGlvbnMpLm5vdC50b0NvbnRhaW4oMTIpOyAvLyBlMiB2YWNhdGVkXG4gICAgZXhwZWN0KHBvc2l0aW9ucykubm90LnRvQ29udGFpbig1Mik7IC8vIGU3IHZhY2F0ZWRcbiAgICAvLyBJdCBpcyB3aGl0ZSdzIHR1cm4gYWdhaW4gKGJsYWNrIGp1c3QgbW92ZWQpLlxuICAgIGV4cGVjdChzdGF0ZS5wYXlsb2FkW1widHVyblwiXSkudG9CZShcIndoaXRlXCIpO1xuXG4gICAgLy8gIDMuIFRoZSBidWZmZXJlZCBkZWx0YSBmb3IgZTfihpJlNSByZXBsYXllZCB2ZXJiYXRpbS5cbiAgICBjb25zdCByZXBsYXllZCA9IG5leHRNc2dPZlR5cGUoYU5ldywgXCJnYW1lLmRlbHRhXCIpO1xuICAgIGV4cGVjdChyZXBsYXllZC5wYXlsb2FkW1wibW92ZU5vdGF0aW9uXCJdKS50b0JlKFwiZTdlNVwiKTtcbiAgICBleHBlY3QocmVwbGF5ZWQucGF5bG9hZFtcInR1cm5cIl0pLnRvQmUoXCJ3aGl0ZVwiKTtcblxuICAgIC8vIC0tLSBQb3N0LWNvbmRpdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBUaGUgbWFuYWdlciBzaG91bGQgaGF2ZSBjbGVhcmVkIHRoZSBwZW5kaW5nIGVudHJ5LlxuICAgIGV4cGVjdChyZWNvbm5lY3RNYW5hZ2VyLmlzUGVuZGluZyh0b2tlbkEpKS50b0JlKGZhbHNlKTtcbiAgICAvLyBBbmQgdGhlIHNsb3QgaXMgbWFya2VkIGNvbm5lY3RlZCBhZ2FpbiDigJQgb3RoZXJ3aXNlIHN1YnNlcXVlbnRcbiAgICAvLyBtb3ZlcyB3b3VsZG4ndCByZS1idWZmZXIgb24gYSBmdXR1cmUgZGlzY29ubmVjdC5cbiAgICBjb25zdCBwbGF5ZXIgPSByb29tUmVnaXN0cnkuZ2V0UGxheWVyQnlUb2tlbihjb2RlLCB0b2tlbkEpO1xuICAgIGV4cGVjdChwbGF5ZXI/LmNvbm5lY3RlZCkudG9CZSh0cnVlKTtcblxuICAgIC8vIENsZWFudXAg4oCUIGxlYXZlIHZvbHVudGFyaWx5IHNvIG5vIGdyYWNlIHRpbWVycyBsaW5nZXIuXG4gICAgc2VuZENsaWVudFdpdGhUb2tlbihcbiAgICAgIGFOZXcsXG4gICAgICBcInJvb20ubGVhdmVcIixcbiAgICAgIHt9LFxuICAgICAgdG9rZW5BLFxuICAgICAgMyxcbiAgICApO1xuICAgIHVucmVnaXN0ZXJDb25uZWN0aW9uKGFOZXcpO1xuICAgIHVucmVnaXN0ZXJDb25uZWN0aW9uKGIpO1xuICB9KTtcblxuICBpdChcInJlY29ubmVjdCB3aXRob3V0IGFuIGFjdGl2ZSBncmFjZSB3aW5kb3cgaXMgcmVqZWN0ZWQgKGZhbGxzIHRocm91Z2ggdG8gbm9ybWFsIGpvaW4pXCIsICgpID0+IHtcbiAgICAvLyBBIG5ldmVyIGRpc2Nvbm5lY3RzLiBJZiBBIHRyaWVzIHRvIFwicmVjb25uZWN0XCIgd2l0aCBpdHMgb3duIHRva2VuXG4gICAgLy8gaW50byBpdHMgb3duIHJvb20sIHRoZSBoYW5kbGVyIHNob3VsZCBOT1Qgc2hvcnQtY2lyY3VpdCBpbnRvIHRoZVxuICAgIC8vIHJlY29ubmVjdCBwYXRoIChubyBncmFjZSBpcyBwZW5kaW5nKSwgaXQgc2hvdWxkIHRyeSB0byByZS1qb2luXG4gICAgLy8gYW5kIGJlIHJlamVjdGVkIGJlY2F1c2UgaXQncyBhbHJlYWR5IGJvdW5kIHRvIGEgcm9vbS5cbiAgICBjb25zdCBhID0gbWFrZU1vY2tXcyhcIkFcIik7XG4gICAgcmVnaXN0ZXJDb25uZWN0aW9uKGEpO1xuICAgIHNlbmRDbGllbnQoYSwgXCJyb29tLmNyZWF0ZVwiLCB7IHJ1bGVzZXRJZHM6IFtdIH0pO1xuICAgIGNvbnN0IGNyZWF0ZWQgPSBuZXh0TXNnT2ZUeXBlKGEsIFwicm9vbS5jcmVhdGVkXCIpO1xuICAgIGNvbnN0IGNvZGUgPSBjcmVhdGVkLnBheWxvYWRbXCJjb2RlXCJdIGFzIHN0cmluZztcbiAgICBjb25zdCB0b2tlbkEgPSBjcmVhdGVkLnBheWxvYWRbXCJ0b2tlblwiXSBhcyBzdHJpbmc7XG5cbiAgICBzZW5kQ2xpZW50V2l0aFRva2VuKGEsIFwicm9vbS5qb2luXCIsIHsgY29kZSB9LCB0b2tlbkEpO1xuICAgIC8vIFRoZSBzb2NrZXQgaXMgYWxyZWFkeSBib3VuZDsgd2UgZ2V0IElOVkFMSURfTUVTU0FHRSwgbm90XG4gICAgLy8gcm9vbS5qb2luZWQuXG4gICAgY29uc3QgZXJyID0gbmV4dE1zZ09mVHlwZShhLCBcImVycm9yXCIpO1xuICAgIGV4cGVjdChlcnIucGF5bG9hZFtcImNvZGVcIl0pLnRvQmUoXCJJTlZBTElEX01FU1NBR0VcIik7XG5cbiAgICB1bnJlZ2lzdGVyQ29ubmVjdGlvbihhKTtcbiAgfSk7XG59KTtcbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9zZXJ2ZXIvc3JjL2Jyb2FkY2FzdC50ZXN0LnRzIn0= diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/4c0d134e83b7ffe8eb0bda16ef1dc7b9ab9aa805 b/KMr2_dqTOvh2R-Vg1E6cO/ssr/4c0d134e83b7ffe8eb0bda16ef1dc7b9ab9aa805 deleted file mode 100644 index 1e5250e..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/4c0d134e83b7ffe8eb0bda16ef1dc7b9ab9aa805 +++ /dev/null @@ -1,550 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("vitest", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/protocol.ts", {"importedNames":["validateMessage","validateMessageString","PROTOCOL_VERSION","ClientMessageSchema","ServerMessageSchema"]}); - - - - - - -const UUID = "550e8400-e29b-41d4-a716-446655440000"; -const UUID2 = "661f9500-f30c-42e5-b827-557766550111"; -const envelope = { v: __vite_ssr_import_1__.PROTOCOL_VERSION, seq: 0, ts: 1 }; -const fixtures = { - "room.create": { - ...envelope, - type: "room.create", - payload: { rulesetIds: ["pawns-move-backward"] } - }, - "room.create (empty payload)": { - ...envelope, - type: "room.create", - payload: {} - }, - "room.join": { - ...envelope, - type: "room.join", - payload: { code: "ABC123" } - }, - "room.leave": { - ...envelope, - type: "room.leave", - payload: {} - }, - "game.move": { - ...envelope, - type: "game.move", - token: UUID, - payload: { from: "e2", to: "e4" } - }, - "game.move (promotion)": { - ...envelope, - type: "game.move", - token: UUID, - payload: { from: "a7", to: "a8", promoteTo: "queen" } - }, - "room.created": { - ...envelope, - seq: 1, - type: "room.created", - payload: { code: "ABC123", token: UUID, color: "white" } - }, - "room.joined": { - ...envelope, - seq: 1, - type: "room.joined", - payload: { - code: "ABC123", - token: UUID2, - color: "black", - activeRules: ["pawns-move-backward"] - } - }, - "game.state": { - ...envelope, - seq: 2, - type: "game.state", - payload: { - facts: [{ id: 1, attr: "PieceType", value: "pawn" }], - turn: "white", - lastSeq: 42, - moveHistory: ["e2-e4"], - activeRules: [], - fen: "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1" - } - }, - "game.delta (ongoing)": { - ...envelope, - seq: 3, - type: "game.delta", - payload: { - inserted: [{ id: 1, attr: "Position", value: 28 }], - retracted: [{ id: 1, attr: "Position", value: 12 }], - moveNotation: "e2e4", - turn: "black", - gameOver: null - } - }, - "game.delta (game over)": { - ...envelope, - seq: 99, - type: "game.delta", - payload: { - inserted: [], - retracted: [], - moveNotation: "Qh4#", - turn: "black", - gameOver: { winner: "black", reason: "checkmate" } - } - }, - "game.end": { - ...envelope, - seq: 100, - type: "game.end", - payload: { - winner: "white", - reason: "checkmate", - finalFen: "rnb1kbnr/pppp1ppp/8/4p3/6Pq/5P2/PPPPP2P/RNBQKBNR w KQkq - 0 3" - } - }, - "error (non-fatal)": { - ...envelope, - seq: 5, - type: "error", - payload: { - code: "ILLEGAL_MOVE", - message: "Move e2-e5 is not legal", - fatal: false - } - }, - "error (fatal)": { - ...envelope, - seq: 6, - type: "error", - payload: { - code: "VERSION_MISMATCH", - message: "expected v=1", - fatal: true - } - } -}; -(0,__vite_ssr_import_0__.describe)("validateMessage — round-trip", () => { - for (const [name, message] of Object.entries(fixtures)) { - (0,__vite_ssr_import_0__.it)(`round-trips ${name}`, () => { - const encoded = JSON.stringify(message); - const decoded = JSON.parse(encoded); - const result = (0,__vite_ssr_import_1__.validateMessage)(decoded); - (0,__vite_ssr_import_0__.expect)(result.ok).toBe(true); - if (result.ok) { - (0,__vite_ssr_import_0__.expect)(result.data).toEqual(message); - (0,__vite_ssr_import_0__.expect)(result.data.type).toBe(message.type); - } - }); - }; - (0,__vite_ssr_import_0__.it)("round-trips with an optional token present", () => { - const msg = { - ...envelope, - token: UUID, - type: "room.leave", - payload: {} - }; - const result = (0,__vite_ssr_import_1__.validateMessage)(JSON.parse(JSON.stringify(msg))); - (0,__vite_ssr_import_0__.expect)(result.ok).toBe(true); - if (result.ok) (0,__vite_ssr_import_0__.expect)(result.data.token).toBe(UUID); - }); -}); -(0,__vite_ssr_import_0__.describe)("validateMessage — rejections", () => { - (0,__vite_ssr_import_0__.it)("rejects non-object input (null)", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)(null); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - if (!r.ok) (0,__vite_ssr_import_0__.expect)(r.error).toMatch(/INVALID_MESSAGE/); - }); - (0,__vite_ssr_import_0__.it)("rejects non-object input (array)", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)([1, 2, 3]); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - if (!r.ok) (0,__vite_ssr_import_0__.expect)(r.error).toMatch(/INVALID_MESSAGE/); - }); - (0,__vite_ssr_import_0__.it)("rejects non-object input (string)", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)("hello"); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - if (!r.ok) (0,__vite_ssr_import_0__.expect)(r.error).toMatch(/INVALID_MESSAGE/); - }); - (0,__vite_ssr_import_0__.it)("rejects v=2 with VERSION_MISMATCH", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - v: 2, - seq: 0, - ts: 1, - type: "room.create", - payload: {} - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - if (!r.ok) { - (0,__vite_ssr_import_0__.expect)(r.error).toMatch(/VERSION_MISMATCH/); - (0,__vite_ssr_import_0__.expect)(r.error).toContain("expected v=1"); - } - }); - (0,__vite_ssr_import_0__.it)("rejects missing v with VERSION_MISMATCH (v is undefined)", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - seq: 0, - ts: 1, - type: "room.create", - payload: {} - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - if (!r.ok) (0,__vite_ssr_import_0__.expect)(r.error).toMatch(/VERSION_MISMATCH/); - }); - (0,__vite_ssr_import_0__.it)("rejects missing type", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ v: 1, seq: 0, ts: 1, payload: {} }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - if (!r.ok) (0,__vite_ssr_import_0__.expect)(r.error).toMatch(/INVALID_MESSAGE/); - }); - (0,__vite_ssr_import_0__.it)("rejects non-string type", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - v: 1, - seq: 0, - ts: 1, - type: 42, - payload: {} - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - if (!r.ok) (0,__vite_ssr_import_0__.expect)(r.error).toMatch(/non-string `type`/); - }); - (0,__vite_ssr_import_0__.it)("rejects unknown message type", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - v: 1, - seq: 0, - ts: 1, - type: "nope.nope", - payload: {} - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - if (!r.ok) (0,__vite_ssr_import_0__.expect)(r.error).toMatch(/unknown message type "nope.nope"/); - }); - (0,__vite_ssr_import_0__.it)("rejects game.move with bad `from` format", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - ...envelope, - type: "game.move", - payload: { from: "e22", to: "e4" } - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - if (!r.ok) (0,__vite_ssr_import_0__.expect)(r.error).toMatch(/from/); - }); - (0,__vite_ssr_import_0__.it)("rejects game.move with bad `to` file", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - ...envelope, - type: "game.move", - payload: { from: "e2", to: "z9" } - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("rejects game.move with bad promotion piece", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - ...envelope, - type: "game.move", - payload: { from: "a7", to: "a8", promoteTo: "king" } - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - if (!r.ok) (0,__vite_ssr_import_0__.expect)(r.error).toMatch(/promoteTo/); - }); - (0,__vite_ssr_import_0__.it)("rejects room.join with 5-char code", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - ...envelope, - type: "room.join", - payload: { code: "ABC12" } - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("rejects room.join with lowercase code", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - ...envelope, - type: "room.join", - payload: { code: "abc123" } - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("rejects negative seq", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - v: 1, - seq: -1, - ts: 1, - type: "room.leave", - payload: {} - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("rejects non-integer seq", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - v: 1, - seq: 1.5, - ts: 1, - type: "room.leave", - payload: {} - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("rejects non-positive ts", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - v: 1, - seq: 0, - ts: 0, - type: "room.leave", - payload: {} - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("rejects token that is not a UUID", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - ...envelope, - token: "not-a-uuid", - type: "room.leave", - payload: {} - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("rejects room.created with non-UUID token", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - ...envelope, - type: "room.created", - payload: { code: "ABC123", token: "nope", color: "white" } - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("rejects room.created with invalid color", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - ...envelope, - type: "room.created", - payload: { code: "ABC123", token: UUID, color: "green" } - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("rejects game.state missing required field", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - ...envelope, - type: "game.state", - payload: { - facts: [], - turn: "white", - lastSeq: 0, - moveHistory: [], - activeRules: [] - // fen missing - } - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - if (!r.ok) (0,__vite_ssr_import_0__.expect)(r.error).toMatch(/fen/); - }); - (0,__vite_ssr_import_0__.it)("rejects error payload with unknown error code", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - ...envelope, - type: "error", - payload: { code: "UNKNOWN_CODE", message: "x", fatal: false } - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("rejects game.delta gameOver with invalid reason", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - ...envelope, - type: "game.delta", - payload: { - inserted: [], - retracted: [], - moveNotation: "a", - turn: "white", - gameOver: { winner: "white", reason: "???" } - } - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("rejects game.end with invalid winner", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - ...envelope, - type: "game.end", - payload: { winner: "nobody", reason: "x", finalFen: "x" } - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("rejects room.leave with extra payload keys (strict)", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - ...envelope, - type: "room.leave", - payload: { extra: 1 } - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - }); -}); -(0,__vite_ssr_import_0__.describe)("validateMessageString", () => { - (0,__vite_ssr_import_0__.it)("parses a valid JSON string frame", () => { - const msg = { - ...envelope, - type: "room.create", - payload: {} - }; - const r = (0,__vite_ssr_import_1__.validateMessageString)(JSON.stringify(msg)); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("reports malformed JSON as INVALID_MESSAGE", () => { - const r = (0,__vite_ssr_import_1__.validateMessageString)("{ this is not json"); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - if (!r.ok) { - (0,__vite_ssr_import_0__.expect)(r.error).toMatch(/INVALID_MESSAGE/); - (0,__vite_ssr_import_0__.expect)(r.error).toMatch(/malformed JSON/); - } - }); - (0,__vite_ssr_import_0__.it)("propagates version mismatch through the string entry point", () => { - const r = (0,__vite_ssr_import_1__.validateMessageString)( - JSON.stringify({ v: 99, seq: 0, ts: 1, type: "room.leave", payload: {} }) - ); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - if (!r.ok) (0,__vite_ssr_import_0__.expect)(r.error).toMatch(/VERSION_MISMATCH/); - }); -}); -(0,__vite_ssr_import_0__.describe)("schema unions", () => { - (0,__vite_ssr_import_0__.it)("ClientMessageSchema parses client-originating types only", () => { - const ok = __vite_ssr_import_1__.ClientMessageSchema.safeParse({ - ...envelope, - type: "game.move", - payload: { from: "e2", to: "e4" } - }); - (0,__vite_ssr_import_0__.expect)(ok.success).toBe(true); - const bad = __vite_ssr_import_1__.ClientMessageSchema.safeParse({ - ...envelope, - type: "game.end", - payload: { winner: "white", reason: "x", finalFen: "x" } - }); - (0,__vite_ssr_import_0__.expect)(bad.success).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("ServerMessageSchema parses server-originating types only", () => { - const okMsg = { - ...envelope, - type: "error", - payload: { code: "RATE_LIMIT", message: "too fast", fatal: true } - }; - const good = __vite_ssr_import_1__.ServerMessageSchema.safeParse(okMsg); - (0,__vite_ssr_import_0__.expect)(good.success).toBe(true); - const bad = __vite_ssr_import_1__.ServerMessageSchema.safeParse({ - ...envelope, - type: "room.create", - payload: {} - }); - (0,__vite_ssr_import_0__.expect)(bad.success).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("narrows AnyMessage by `type` discriminant", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - ...envelope, - type: "game.move", - payload: { from: "e2", to: "e4" } - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(true); - if (r.ok && r.data.type === "game.move") { - (0,__vite_ssr_import_0__.expect)(r.data.payload.from).toBe("e2"); - (0,__vite_ssr_import_0__.expect)(r.data.payload.to).toBe("e4"); - } - }); -}); -(0,__vite_ssr_import_0__.describe)("room.create layout payload", () => { - (0,__vite_ssr_import_0__.it)("accepts { kind: 'premade', id } layout selection", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - ...envelope, - type: "room.create", - payload: { - layout: { kind: "premade", id: "dunsany" } - } - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("accepts { kind: 'fen', fen } layout selection", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - ...envelope, - type: "room.create", - payload: { - layout: { - kind: "fen", - fen: "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR", - name: "Pasted FEN" - } - } - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("accepts { kind: 'custom', pieces } layout selection", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - ...envelope, - type: "room.create", - payload: { - layout: { - kind: "custom", - pieces: [ - { type: "king", color: "white", square: 4 }, - { type: "king", color: "black", square: 60 } - ] - } - } - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("rejects unknown layout kind", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - ...envelope, - type: "room.create", - payload: { layout: { kind: "nonsense", id: "foo" } } - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("rejects custom layout with out-of-range square", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - ...envelope, - type: "room.create", - payload: { - layout: { - kind: "custom", - pieces: [{ type: "king", color: "white", square: 999 }] - } - } - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("rejects custom layout with > 128 pieces (DoS cap)", () => { - const pieces = Array.from({ length: 129 }, (_, i) => ({ - type: "pawn", - color: "white", - square: i % 64 - })); - const r = (0,__vite_ssr_import_1__.validateMessage)({ - ...envelope, - type: "room.create", - payload: { layout: { kind: "custom", pieces } } - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("room.create without layout still parses (backward compat)", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - ...envelope, - type: "room.create", - payload: {} - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("room.created echoes resolved layout", () => { - const r = (0,__vite_ssr_import_1__.validateMessage)({ - ...envelope, - seq: 1, - type: "room.created", - payload: { - code: "ABC123", - token: UUID, - color: "white", - layout: { - id: "dunsany", - name: "Dunsany's Chess", - pieces: [ - { type: "king", color: "white", square: 4 }, - { type: "king", color: "black", square: 60 } - ] - } - } - }); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(true); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFlBQ04sRUFBRSxNQUFNLFFBQVEsT0FBTyxTQUFTLFFBQVEsRUFBRTtBQUFBLFlBQzFDLEVBQUUsTUFBTSxRQUFRLE9BQU8sU0FBUyxRQUFRLEdBQUc7QUFBQSxVQUM3QztBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDO0FBQ0QscUNBQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJO0FBQUEsRUFDeEIsQ0FBQztBQUNILENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInByb3RvY29sLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQge1xuICB2YWxpZGF0ZU1lc3NhZ2UsXG4gIHZhbGlkYXRlTWVzc2FnZVN0cmluZyxcbiAgUFJPVE9DT0xfVkVSU0lPTixcbiAgQ2xpZW50TWVzc2FnZVNjaGVtYSxcbiAgU2VydmVyTWVzc2FnZVNjaGVtYSxcbiAgdHlwZSBBbnlNZXNzYWdlLFxuICB0eXBlIENsaWVudE1lc3NhZ2UsXG4gIHR5cGUgU2VydmVyTWVzc2FnZSxcbn0gZnJvbSBcIi4vcHJvdG9jb2wuanNcIjtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGaXh0dXJlcyDigJQgb25lIG1pbmltYWxseS12YWxpZCBleGFtcGxlIHBlciBtZXNzYWdlIHR5cGUuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgVVVJRCA9IFwiNTUwZTg0MDAtZTI5Yi00MWQ0LWE3MTYtNDQ2NjU1NDQwMDAwXCI7XG5jb25zdCBVVUlEMiA9IFwiNjYxZjk1MDAtZjMwYy00MmU1LWI4MjctNTU3NzY2NTUwMTExXCI7XG5cbmNvbnN0IGVudmVsb3BlID0geyB2OiBQUk9UT0NPTF9WRVJTSU9OLCBzZXE6IDAsIHRzOiAxIH0gYXMgY29uc3Q7XG5cbmNvbnN0IGZpeHR1cmVzOiBSZWNvcmQ8c3RyaW5nLCBBbnlNZXNzYWdlPiA9IHtcbiAgXCJyb29tLmNyZWF0ZVwiOiB7XG4gICAgLi4uZW52ZWxvcGUsXG4gICAgdHlwZTogXCJyb29tLmNyZWF0ZVwiLFxuICAgIHBheWxvYWQ6IHsgcnVsZXNldElkczogW1wicGF3bnMtbW92ZS1iYWNrd2FyZFwiXSB9LFxuICB9LFxuICBcInJvb20uY3JlYXRlIChlbXB0eSBwYXlsb2FkKVwiOiB7XG4gICAgLi4uZW52ZWxvcGUsXG4gICAgdHlwZTogXCJyb29tLmNyZWF0ZVwiLFxuICAgIHBheWxvYWQ6IHt9LFxuICB9LFxuICBcInJvb20uam9pblwiOiB7XG4gICAgLi4uZW52ZWxvcGUsXG4gICAgdHlwZTogXCJyb29tLmpvaW5cIixcbiAgICBwYXlsb2FkOiB7IGNvZGU6IFwiQUJDMTIzXCIgfSxcbiAgfSxcbiAgXCJyb29tLmxlYXZlXCI6IHtcbiAgICAuLi5lbnZlbG9wZSxcbiAgICB0eXBlOiBcInJvb20ubGVhdmVcIixcbiAgICBwYXlsb2FkOiB7fSxcbiAgfSxcbiAgXCJnYW1lLm1vdmVcIjoge1xuICAgIC4uLmVudmVsb3BlLFxuICAgIHR5cGU6IFwiZ2FtZS5tb3ZlXCIsXG4gICAgdG9rZW46IFVVSUQsXG4gICAgcGF5bG9hZDogeyBmcm9tOiBcImUyXCIsIHRvOiBcImU0XCIgfSxcbiAgfSxcbiAgXCJnYW1lLm1vdmUgKHByb21vdGlvbilcIjoge1xuICAgIC4uLmVudmVsb3BlLFxuICAgIHR5cGU6IFwiZ2FtZS5tb3ZlXCIsXG4gICAgdG9rZW46IFVVSUQsXG4gICAgcGF5bG9hZDogeyBmcm9tOiBcImE3XCIsIHRvOiBcImE4XCIsIHByb21vdGVUbzogXCJxdWVlblwiIH0sXG4gIH0sXG4gIFwicm9vbS5jcmVhdGVkXCI6IHtcbiAgICAuLi5lbnZlbG9wZSxcbiAgICBzZXE6IDEsXG4gICAgdHlwZTogXCJyb29tLmNyZWF0ZWRcIixcbiAgICBwYXlsb2FkOiB7IGNvZGU6IFwiQUJDMTIzXCIsIHRva2VuOiBVVUlELCBjb2xvcjogXCJ3aGl0ZVwiIH0sXG4gIH0sXG4gIFwicm9vbS5qb2luZWRcIjoge1xuICAgIC4uLmVudmVsb3BlLFxuICAgIHNlcTogMSxcbiAgICB0eXBlOiBcInJvb20uam9pbmVkXCIsXG4gICAgcGF5bG9hZDoge1xuICAgICAgY29kZTogXCJBQkMxMjNcIixcbiAgICAgIHRva2VuOiBVVUlEMixcbiAgICAgIGNvbG9yOiBcImJsYWNrXCIsXG4gICAgICBhY3RpdmVSdWxlczogW1wicGF3bnMtbW92ZS1iYWNrd2FyZFwiXSxcbiAgICB9LFxuICB9LFxuICBcImdhbWUuc3RhdGVcIjoge1xuICAgIC4uLmVudmVsb3BlLFxuICAgIHNlcTogMixcbiAgICB0eXBlOiBcImdhbWUuc3RhdGVcIixcbiAgICBwYXlsb2FkOiB7XG4gICAgICBmYWN0czogW3sgaWQ6IDEsIGF0dHI6IFwiUGllY2VUeXBlXCIsIHZhbHVlOiBcInBhd25cIiB9XSxcbiAgICAgIHR1cm46IFwid2hpdGVcIixcbiAgICAgIGxhc3RTZXE6IDQyLFxuICAgICAgbW92ZUhpc3Rvcnk6IFtcImUyLWU0XCJdLFxuICAgICAgYWN0aXZlUnVsZXM6IFtdLFxuICAgICAgZmVuOiBcInJuYnFrYm5yL3BwcHBwcHBwLzgvOC84LzgvUFBQUFBQUFAvUk5CUUtCTlIgdyBLUWtxIC0gMCAxXCIsXG4gICAgfSxcbiAgfSxcbiAgXCJnYW1lLmRlbHRhIChvbmdvaW5nKVwiOiB7XG4gICAgLi4uZW52ZWxvcGUsXG4gICAgc2VxOiAzLFxuICAgIHR5cGU6IFwiZ2FtZS5kZWx0YVwiLFxuICAgIHBheWxvYWQ6IHtcbiAgICAgIGluc2VydGVkOiBbeyBpZDogMSwgYXR0cjogXCJQb3NpdGlvblwiLCB2YWx1ZTogMjggfV0sXG4gICAgICByZXRyYWN0ZWQ6IFt7IGlkOiAxLCBhdHRyOiBcIlBvc2l0aW9uXCIsIHZhbHVlOiAxMiB9XSxcbiAgICAgIG1vdmVOb3RhdGlvbjogXCJlMmU0XCIsXG4gICAgICB0dXJuOiBcImJsYWNrXCIsXG4gICAgICBnYW1lT3ZlcjogbnVsbCxcbiAgICB9LFxuICB9LFxuICBcImdhbWUuZGVsdGEgKGdhbWUgb3ZlcilcIjoge1xuICAgIC4uLmVudmVsb3BlLFxuICAgIHNlcTogOTksXG4gICAgdHlwZTogXCJnYW1lLmRlbHRhXCIsXG4gICAgcGF5bG9hZDoge1xuICAgICAgaW5zZXJ0ZWQ6IFtdLFxuICAgICAgcmV0cmFjdGVkOiBbXSxcbiAgICAgIG1vdmVOb3RhdGlvbjogXCJRaDQjXCIsXG4gICAgICB0dXJuOiBcImJsYWNrXCIsXG4gICAgICBnYW1lT3ZlcjogeyB3aW5uZXI6IFwiYmxhY2tcIiwgcmVhc29uOiBcImNoZWNrbWF0ZVwiIH0sXG4gICAgfSxcbiAgfSxcbiAgXCJnYW1lLmVuZFwiOiB7XG4gICAgLi4uZW52ZWxvcGUsXG4gICAgc2VxOiAxMDAsXG4gICAgdHlwZTogXCJnYW1lLmVuZFwiLFxuICAgIHBheWxvYWQ6IHtcbiAgICAgIHdpbm5lcjogXCJ3aGl0ZVwiLFxuICAgICAgcmVhc29uOiBcImNoZWNrbWF0ZVwiLFxuICAgICAgZmluYWxGZW46IFwicm5iMWtibnIvcHBwcDFwcHAvOC80cDMvNlBxLzVQMi9QUFBQUDJQL1JOQlFLQk5SIHcgS1FrcSAtIDAgM1wiLFxuICAgIH0sXG4gIH0sXG4gIFwiZXJyb3IgKG5vbi1mYXRhbClcIjoge1xuICAgIC4uLmVudmVsb3BlLFxuICAgIHNlcTogNSxcbiAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgcGF5bG9hZDoge1xuICAgICAgY29kZTogXCJJTExFR0FMX01PVkVcIixcbiAgICAgIG1lc3NhZ2U6IFwiTW92ZSBlMi1lNSBpcyBub3QgbGVnYWxcIixcbiAgICAgIGZhdGFsOiBmYWxzZSxcbiAgICB9LFxuICB9LFxuICBcImVycm9yIChmYXRhbClcIjoge1xuICAgIC4uLmVudmVsb3BlLFxuICAgIHNlcTogNixcbiAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgcGF5bG9hZDoge1xuICAgICAgY29kZTogXCJWRVJTSU9OX01JU01BVENIXCIsXG4gICAgICBtZXNzYWdlOiBcImV4cGVjdGVkIHY9MVwiLFxuICAgICAgZmF0YWw6IHRydWUsXG4gICAgfSxcbiAgfSxcbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUm91bmQtdHJpcDogZXZlcnkgZml4dHVyZSBtdXN0IEpTT04tc2VyaWFsaXNlIGFuZCByZS12YWxpZGF0ZSBpZGVudGljYWxseS5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5kZXNjcmliZShcInZhbGlkYXRlTWVzc2FnZSDigJQgcm91bmQtdHJpcFwiLCAoKSA9PiB7XG4gIGZvciAoY29uc3QgW25hbWUsIG1lc3NhZ2VdIG9mIE9iamVjdC5lbnRyaWVzKGZpeHR1cmVzKSkge1xuICAgIGl0KGByb3VuZC10cmlwcyAke25hbWV9YCwgKCkgPT4ge1xuICAgICAgY29uc3QgZW5jb2RlZCA9IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpO1xuICAgICAgY29uc3QgZGVjb2RlZCA9IEpTT04ucGFyc2UoZW5jb2RlZCkgYXMgdW5rbm93bjtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlTWVzc2FnZShkZWNvZGVkKTtcblxuICAgICAgZXhwZWN0KHJlc3VsdC5vaykudG9CZSh0cnVlKTtcbiAgICAgIGlmIChyZXN1bHQub2spIHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5kYXRhKS50b0VxdWFsKG1lc3NhZ2UpO1xuICAgICAgICBleHBlY3QocmVzdWx0LmRhdGEudHlwZSkudG9CZShtZXNzYWdlLnR5cGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaXQoXCJyb3VuZC10cmlwcyB3aXRoIGFuIG9wdGlvbmFsIHRva2VuIHByZXNlbnRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG1zZyA9IHtcbiAgICAgIC4uLmVudmVsb3BlLFxuICAgICAgdG9rZW46IFVVSUQsXG4gICAgICB0eXBlOiBcInJvb20ubGVhdmVcIiBhcyBjb25zdCxcbiAgICAgIHBheWxvYWQ6IHt9LFxuICAgIH07XG4gICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGVNZXNzYWdlKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobXNnKSkpO1xuICAgIGV4cGVjdChyZXN1bHQub2spLnRvQmUodHJ1ZSk7XG4gICAgaWYgKHJlc3VsdC5vaykgZXhwZWN0KHJlc3VsdC5kYXRhLnRva2VuKS50b0JlKFVVSUQpO1xuICB9KTtcbn0pO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlamVjdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5kZXNjcmliZShcInZhbGlkYXRlTWVzc2FnZSDigJQgcmVqZWN0aW9uc1wiLCAoKSA9PiB7XG4gIGl0KFwicmVqZWN0cyBub24tb2JqZWN0IGlucHV0IChudWxsKVwiLCAoKSA9PiB7XG4gICAgY29uc3QgciA9IHZhbGlkYXRlTWVzc2FnZShudWxsKTtcbiAgICBleHBlY3Qoci5vaykudG9CZShmYWxzZSk7XG4gICAgaWYgKCFyLm9rKSBleHBlY3Qoci5lcnJvcikudG9NYXRjaCgvSU5WQUxJRF9NRVNTQUdFLyk7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyBub24tb2JqZWN0IGlucHV0IChhcnJheSlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHIgPSB2YWxpZGF0ZU1lc3NhZ2UoWzEsIDIsIDNdKTtcbiAgICBleHBlY3Qoci5vaykudG9CZShmYWxzZSk7XG4gICAgaWYgKCFyLm9rKSBleHBlY3Qoci5lcnJvcikudG9NYXRjaCgvSU5WQUxJRF9NRVNTQUdFLyk7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyBub24tb2JqZWN0IGlucHV0IChzdHJpbmcpXCIsICgpID0+IHtcbiAgICBjb25zdCByID0gdmFsaWRhdGVNZXNzYWdlKFwiaGVsbG9cIik7XG4gICAgZXhwZWN0KHIub2spLnRvQmUoZmFsc2UpO1xuICAgIGlmICghci5vaykgZXhwZWN0KHIuZXJyb3IpLnRvTWF0Y2goL0lOVkFMSURfTUVTU0FHRS8pO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgdj0yIHdpdGggVkVSU0lPTl9NSVNNQVRDSFwiLCAoKSA9PiB7XG4gICAgY29uc3QgciA9IHZhbGlkYXRlTWVzc2FnZSh7XG4gICAgICB2OiAyLFxuICAgICAgc2VxOiAwLFxuICAgICAgdHM6IDEsXG4gICAgICB0eXBlOiBcInJvb20uY3JlYXRlXCIsXG4gICAgICBwYXlsb2FkOiB7fSxcbiAgICB9KTtcbiAgICBleHBlY3Qoci5vaykudG9CZShmYWxzZSk7XG4gICAgaWYgKCFyLm9rKSB7XG4gICAgICBleHBlY3Qoci5lcnJvcikudG9NYXRjaCgvVkVSU0lPTl9NSVNNQVRDSC8pO1xuICAgICAgZXhwZWN0KHIuZXJyb3IpLnRvQ29udGFpbihcImV4cGVjdGVkIHY9MVwiKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyBtaXNzaW5nIHYgd2l0aCBWRVJTSU9OX01JU01BVENIICh2IGlzIHVuZGVmaW5lZClcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHIgPSB2YWxpZGF0ZU1lc3NhZ2Uoe1xuICAgICAgc2VxOiAwLFxuICAgICAgdHM6IDEsXG4gICAgICB0eXBlOiBcInJvb20uY3JlYXRlXCIsXG4gICAgICBwYXlsb2FkOiB7fSxcbiAgICB9KTtcbiAgICBleHBlY3Qoci5vaykudG9CZShmYWxzZSk7XG4gICAgaWYgKCFyLm9rKSBleHBlY3Qoci5lcnJvcikudG9NYXRjaCgvVkVSU0lPTl9NSVNNQVRDSC8pO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgbWlzc2luZyB0eXBlXCIsICgpID0+IHtcbiAgICBjb25zdCByID0gdmFsaWRhdGVNZXNzYWdlKHsgdjogMSwgc2VxOiAwLCB0czogMSwgcGF5bG9hZDoge30gfSk7XG4gICAgZXhwZWN0KHIub2spLnRvQmUoZmFsc2UpO1xuICAgIGlmICghci5vaykgZXhwZWN0KHIuZXJyb3IpLnRvTWF0Y2goL0lOVkFMSURfTUVTU0FHRS8pO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgbm9uLXN0cmluZyB0eXBlXCIsICgpID0+IHtcbiAgICBjb25zdCByID0gdmFsaWRhdGVNZXNzYWdlKHtcbiAgICAgIHY6IDEsXG4gICAgICBzZXE6IDAsXG4gICAgICB0czogMSxcbiAgICAgIHR5cGU6IDQyLFxuICAgICAgcGF5bG9hZDoge30sXG4gICAgfSk7XG4gICAgZXhwZWN0KHIub2spLnRvQmUoZmFsc2UpO1xuICAgIGlmICghci5vaykgZXhwZWN0KHIuZXJyb3IpLnRvTWF0Y2goL25vbi1zdHJpbmcgYHR5cGVgLyk7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyB1bmtub3duIG1lc3NhZ2UgdHlwZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgciA9IHZhbGlkYXRlTWVzc2FnZSh7XG4gICAgICB2OiAxLFxuICAgICAgc2VxOiAwLFxuICAgICAgdHM6IDEsXG4gICAgICB0eXBlOiBcIm5vcGUubm9wZVwiLFxuICAgICAgcGF5bG9hZDoge30sXG4gICAgfSk7XG4gICAgZXhwZWN0KHIub2spLnRvQmUoZmFsc2UpO1xuICAgIGlmICghci5vaykgZXhwZWN0KHIuZXJyb3IpLnRvTWF0Y2goL3Vua25vd24gbWVzc2FnZSB0eXBlIFwibm9wZS5ub3BlXCIvKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzIGdhbWUubW92ZSB3aXRoIGJhZCBgZnJvbWAgZm9ybWF0XCIsICgpID0+IHtcbiAgICBjb25zdCByID0gdmFsaWRhdGVNZXNzYWdlKHtcbiAgICAgIC4uLmVudmVsb3BlLFxuICAgICAgdHlwZTogXCJnYW1lLm1vdmVcIixcbiAgICAgIHBheWxvYWQ6IHsgZnJvbTogXCJlMjJcIiwgdG86IFwiZTRcIiB9LFxuICAgIH0pO1xuICAgIGV4cGVjdChyLm9rKS50b0JlKGZhbHNlKTtcbiAgICBpZiAoIXIub2spIGV4cGVjdChyLmVycm9yKS50b01hdGNoKC9mcm9tLyk7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyBnYW1lLm1vdmUgd2l0aCBiYWQgYHRvYCBmaWxlXCIsICgpID0+IHtcbiAgICBjb25zdCByID0gdmFsaWRhdGVNZXNzYWdlKHtcbiAgICAgIC4uLmVudmVsb3BlLFxuICAgICAgdHlwZTogXCJnYW1lLm1vdmVcIixcbiAgICAgIHBheWxvYWQ6IHsgZnJvbTogXCJlMlwiLCB0bzogXCJ6OVwiIH0sXG4gICAgfSk7XG4gICAgZXhwZWN0KHIub2spLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgZ2FtZS5tb3ZlIHdpdGggYmFkIHByb21vdGlvbiBwaWVjZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgciA9IHZhbGlkYXRlTWVzc2FnZSh7XG4gICAgICAuLi5lbnZlbG9wZSxcbiAgICAgIHR5cGU6IFwiZ2FtZS5tb3ZlXCIsXG4gICAgICBwYXlsb2FkOiB7IGZyb206IFwiYTdcIiwgdG86IFwiYThcIiwgcHJvbW90ZVRvOiBcImtpbmdcIiB9LFxuICAgIH0pO1xuICAgIGV4cGVjdChyLm9rKS50b0JlKGZhbHNlKTtcbiAgICBpZiAoIXIub2spIGV4cGVjdChyLmVycm9yKS50b01hdGNoKC9wcm9tb3RlVG8vKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzIHJvb20uam9pbiB3aXRoIDUtY2hhciBjb2RlXCIsICgpID0+IHtcbiAgICBjb25zdCByID0gdmFsaWRhdGVNZXNzYWdlKHtcbiAgICAgIC4uLmVudmVsb3BlLFxuICAgICAgdHlwZTogXCJyb29tLmpvaW5cIixcbiAgICAgIHBheWxvYWQ6IHsgY29kZTogXCJBQkMxMlwiIH0sXG4gICAgfSk7XG4gICAgZXhwZWN0KHIub2spLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgcm9vbS5qb2luIHdpdGggbG93ZXJjYXNlIGNvZGVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHIgPSB2YWxpZGF0ZU1lc3NhZ2Uoe1xuICAgICAgLi4uZW52ZWxvcGUsXG4gICAgICB0eXBlOiBcInJvb20uam9pblwiLFxuICAgICAgcGF5bG9hZDogeyBjb2RlOiBcImFiYzEyM1wiIH0sXG4gICAgfSk7XG4gICAgZXhwZWN0KHIub2spLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgbmVnYXRpdmUgc2VxXCIsICgpID0+IHtcbiAgICBjb25zdCByID0gdmFsaWRhdGVNZXNzYWdlKHtcbiAgICAgIHY6IDEsXG4gICAgICBzZXE6IC0xLFxuICAgICAgdHM6IDEsXG4gICAgICB0eXBlOiBcInJvb20ubGVhdmVcIixcbiAgICAgIHBheWxvYWQ6IHt9LFxuICAgIH0pO1xuICAgIGV4cGVjdChyLm9rKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzIG5vbi1pbnRlZ2VyIHNlcVwiLCAoKSA9PiB7XG4gICAgY29uc3QgciA9IHZhbGlkYXRlTWVzc2FnZSh7XG4gICAgICB2OiAxLFxuICAgICAgc2VxOiAxLjUsXG4gICAgICB0czogMSxcbiAgICAgIHR5cGU6IFwicm9vbS5sZWF2ZVwiLFxuICAgICAgcGF5bG9hZDoge30sXG4gICAgfSk7XG4gICAgZXhwZWN0KHIub2spLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgbm9uLXBvc2l0aXZlIHRzXCIsICgpID0+IHtcbiAgICBjb25zdCByID0gdmFsaWRhdGVNZXNzYWdlKHtcbiAgICAgIHY6IDEsXG4gICAgICBzZXE6IDAsXG4gICAgICB0czogMCxcbiAgICAgIHR5cGU6IFwicm9vbS5sZWF2ZVwiLFxuICAgICAgcGF5bG9hZDoge30sXG4gICAgfSk7XG4gICAgZXhwZWN0KHIub2spLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgdG9rZW4gdGhhdCBpcyBub3QgYSBVVUlEXCIsICgpID0+IHtcbiAgICBjb25zdCByID0gdmFsaWRhdGVNZXNzYWdlKHtcbiAgICAgIC4uLmVudmVsb3BlLFxuICAgICAgdG9rZW46IFwibm90LWEtdXVpZFwiLFxuICAgICAgdHlwZTogXCJyb29tLmxlYXZlXCIsXG4gICAgICBwYXlsb2FkOiB7fSxcbiAgICB9KTtcbiAgICBleHBlY3Qoci5vaykudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyByb29tLmNyZWF0ZWQgd2l0aCBub24tVVVJRCB0b2tlblwiLCAoKSA9PiB7XG4gICAgY29uc3QgciA9IHZhbGlkYXRlTWVzc2FnZSh7XG4gICAgICAuLi5lbnZlbG9wZSxcbiAgICAgIHR5cGU6IFwicm9vbS5jcmVhdGVkXCIsXG4gICAgICBwYXlsb2FkOiB7IGNvZGU6IFwiQUJDMTIzXCIsIHRva2VuOiBcIm5vcGVcIiwgY29sb3I6IFwid2hpdGVcIiB9LFxuICAgIH0pO1xuICAgIGV4cGVjdChyLm9rKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzIHJvb20uY3JlYXRlZCB3aXRoIGludmFsaWQgY29sb3JcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHIgPSB2YWxpZGF0ZU1lc3NhZ2Uoe1xuICAgICAgLi4uZW52ZWxvcGUsXG4gICAgICB0eXBlOiBcInJvb20uY3JlYXRlZFwiLFxuICAgICAgcGF5bG9hZDogeyBjb2RlOiBcIkFCQzEyM1wiLCB0b2tlbjogVVVJRCwgY29sb3I6IFwiZ3JlZW5cIiB9LFxuICAgIH0pO1xuICAgIGV4cGVjdChyLm9rKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzIGdhbWUuc3RhdGUgbWlzc2luZyByZXF1aXJlZCBmaWVsZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgciA9IHZhbGlkYXRlTWVzc2FnZSh7XG4gICAgICAuLi5lbnZlbG9wZSxcbiAgICAgIHR5cGU6IFwiZ2FtZS5zdGF0ZVwiLFxuICAgICAgcGF5bG9hZDoge1xuICAgICAgICBmYWN0czogW10sXG4gICAgICAgIHR1cm46IFwid2hpdGVcIixcbiAgICAgICAgbGFzdFNlcTogMCxcbiAgICAgICAgbW92ZUhpc3Rvcnk6IFtdLFxuICAgICAgICBhY3RpdmVSdWxlczogW10sXG4gICAgICAgIC8vIGZlbiBtaXNzaW5nXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGV4cGVjdChyLm9rKS50b0JlKGZhbHNlKTtcbiAgICBpZiAoIXIub2spIGV4cGVjdChyLmVycm9yKS50b01hdGNoKC9mZW4vKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzIGVycm9yIHBheWxvYWQgd2l0aCB1bmtub3duIGVycm9yIGNvZGVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHIgPSB2YWxpZGF0ZU1lc3NhZ2Uoe1xuICAgICAgLi4uZW52ZWxvcGUsXG4gICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICBwYXlsb2FkOiB7IGNvZGU6IFwiVU5LTk9XTl9DT0RFXCIsIG1lc3NhZ2U6IFwieFwiLCBmYXRhbDogZmFsc2UgfSxcbiAgICB9KTtcbiAgICBleHBlY3Qoci5vaykudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyBnYW1lLmRlbHRhIGdhbWVPdmVyIHdpdGggaW52YWxpZCByZWFzb25cIiwgKCkgPT4ge1xuICAgIGNvbnN0IHIgPSB2YWxpZGF0ZU1lc3NhZ2Uoe1xuICAgICAgLi4uZW52ZWxvcGUsXG4gICAgICB0eXBlOiBcImdhbWUuZGVsdGFcIixcbiAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgaW5zZXJ0ZWQ6IFtdLFxuICAgICAgICByZXRyYWN0ZWQ6IFtdLFxuICAgICAgICBtb3ZlTm90YXRpb246IFwiYVwiLFxuICAgICAgICB0dXJuOiBcIndoaXRlXCIsXG4gICAgICAgIGdhbWVPdmVyOiB7IHdpbm5lcjogXCJ3aGl0ZVwiLCByZWFzb246IFwiPz8/XCIgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgZXhwZWN0KHIub2spLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgZ2FtZS5lbmQgd2l0aCBpbnZhbGlkIHdpbm5lclwiLCAoKSA9PiB7XG4gICAgY29uc3QgciA9IHZhbGlkYXRlTWVzc2FnZSh7XG4gICAgICAuLi5lbnZlbG9wZSxcbiAgICAgIHR5cGU6IFwiZ2FtZS5lbmRcIixcbiAgICAgIHBheWxvYWQ6IHsgd2lubmVyOiBcIm5vYm9keVwiLCByZWFzb246IFwieFwiLCBmaW5hbEZlbjogXCJ4XCIgfSxcbiAgICB9KTtcbiAgICBleHBlY3Qoci5vaykudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyByb29tLmxlYXZlIHdpdGggZXh0cmEgcGF5bG9hZCBrZXlzIChzdHJpY3QpXCIsICgpID0+IHtcbiAgICBjb25zdCByID0gdmFsaWRhdGVNZXNzYWdlKHtcbiAgICAgIC4uLmVudmVsb3BlLFxuICAgICAgdHlwZTogXCJyb29tLmxlYXZlXCIsXG4gICAgICBwYXlsb2FkOiB7IGV4dHJhOiAxIH0sXG4gICAgfSk7XG4gICAgZXhwZWN0KHIub2spLnRvQmUoZmFsc2UpO1xuICB9KTtcbn0pO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHZhbGlkYXRlTWVzc2FnZVN0cmluZyDigJQgcmF3LXN0cmluZyBlbnRyeSBwb2ludFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmRlc2NyaWJlKFwidmFsaWRhdGVNZXNzYWdlU3RyaW5nXCIsICgpID0+IHtcbiAgaXQoXCJwYXJzZXMgYSB2YWxpZCBKU09OIHN0cmluZyBmcmFtZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgbXNnOiBDbGllbnRNZXNzYWdlID0ge1xuICAgICAgLi4uZW52ZWxvcGUsXG4gICAgICB0eXBlOiBcInJvb20uY3JlYXRlXCIsXG4gICAgICBwYXlsb2FkOiB7fSxcbiAgICB9O1xuICAgIGNvbnN0IHIgPSB2YWxpZGF0ZU1lc3NhZ2VTdHJpbmcoSlNPTi5zdHJpbmdpZnkobXNnKSk7XG4gICAgZXhwZWN0KHIub2spLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwicmVwb3J0cyBtYWxmb3JtZWQgSlNPTiBhcyBJTlZBTElEX01FU1NBR0VcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHIgPSB2YWxpZGF0ZU1lc3NhZ2VTdHJpbmcoXCJ7IHRoaXMgaXMgbm90IGpzb25cIik7XG4gICAgZXhwZWN0KHIub2spLnRvQmUoZmFsc2UpO1xuICAgIGlmICghci5vaykge1xuICAgICAgZXhwZWN0KHIuZXJyb3IpLnRvTWF0Y2goL0lOVkFMSURfTUVTU0FHRS8pO1xuICAgICAgZXhwZWN0KHIuZXJyb3IpLnRvTWF0Y2goL21hbGZvcm1lZCBKU09OLyk7XG4gICAgfVxuICB9KTtcblxuICBpdChcInByb3BhZ2F0ZXMgdmVyc2lvbiBtaXNtYXRjaCB0aHJvdWdoIHRoZSBzdHJpbmcgZW50cnkgcG9pbnRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHIgPSB2YWxpZGF0ZU1lc3NhZ2VTdHJpbmcoXG4gICAgICBKU09OLnN0cmluZ2lmeSh7IHY6IDk5LCBzZXE6IDAsIHRzOiAxLCB0eXBlOiBcInJvb20ubGVhdmVcIiwgcGF5bG9hZDoge30gfSksXG4gICAgKTtcbiAgICBleHBlY3Qoci5vaykudG9CZShmYWxzZSk7XG4gICAgaWYgKCFyLm9rKSBleHBlY3Qoci5lcnJvcikudG9NYXRjaCgvVkVSU0lPTl9NSVNNQVRDSC8pO1xuICB9KTtcbn0pO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFR5cGUtbmFycm93aW5nIHNtb2tlIHRlc3Qg4oCUIGVuc3VyZXMgZGlzY3JpbWluYXRlZCB1bmlvbnMgYXJlIHVzYWJsZS5cbi8vIChFeGVjdXRlZCBhdCBydW50aW1lLCBidXQgdGhlIHZhbHVlIGNvbWVzIGZyb20gdGhlIHVuaW9uJ3MgbmFycm93aW5nLilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5kZXNjcmliZShcInNjaGVtYSB1bmlvbnNcIiwgKCkgPT4ge1xuICBpdChcIkNsaWVudE1lc3NhZ2VTY2hlbWEgcGFyc2VzIGNsaWVudC1vcmlnaW5hdGluZyB0eXBlcyBvbmx5XCIsICgpID0+IHtcbiAgICBjb25zdCBvayA9IENsaWVudE1lc3NhZ2VTY2hlbWEuc2FmZVBhcnNlKHtcbiAgICAgIC4uLmVudmVsb3BlLFxuICAgICAgdHlwZTogXCJnYW1lLm1vdmVcIixcbiAgICAgIHBheWxvYWQ6IHsgZnJvbTogXCJlMlwiLCB0bzogXCJlNFwiIH0sXG4gICAgfSk7XG4gICAgZXhwZWN0KG9rLnN1Y2Nlc3MpLnRvQmUodHJ1ZSk7XG5cbiAgICBjb25zdCBiYWQgPSBDbGllbnRNZXNzYWdlU2NoZW1hLnNhZmVQYXJzZSh7XG4gICAgICAuLi5lbnZlbG9wZSxcbiAgICAgIHR5cGU6IFwiZ2FtZS5lbmRcIixcbiAgICAgIHBheWxvYWQ6IHsgd2lubmVyOiBcIndoaXRlXCIsIHJlYXNvbjogXCJ4XCIsIGZpbmFsRmVuOiBcInhcIiB9LFxuICAgIH0pO1xuICAgIGV4cGVjdChiYWQuc3VjY2VzcykudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwiU2VydmVyTWVzc2FnZVNjaGVtYSBwYXJzZXMgc2VydmVyLW9yaWdpbmF0aW5nIHR5cGVzIG9ubHlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG9rTXNnOiBTZXJ2ZXJNZXNzYWdlID0ge1xuICAgICAgLi4uZW52ZWxvcGUsXG4gICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICBwYXlsb2FkOiB7IGNvZGU6IFwiUkFURV9MSU1JVFwiLCBtZXNzYWdlOiBcInRvbyBmYXN0XCIsIGZhdGFsOiB0cnVlIH0sXG4gICAgfTtcbiAgICBjb25zdCBnb29kID0gU2VydmVyTWVzc2FnZVNjaGVtYS5zYWZlUGFyc2Uob2tNc2cpO1xuICAgIGV4cGVjdChnb29kLnN1Y2Nlc3MpLnRvQmUodHJ1ZSk7XG5cbiAgICBjb25zdCBiYWQgPSBTZXJ2ZXJNZXNzYWdlU2NoZW1hLnNhZmVQYXJzZSh7XG4gICAgICAuLi5lbnZlbG9wZSxcbiAgICAgIHR5cGU6IFwicm9vbS5jcmVhdGVcIixcbiAgICAgIHBheWxvYWQ6IHt9LFxuICAgIH0pO1xuICAgIGV4cGVjdChiYWQuc3VjY2VzcykudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwibmFycm93cyBBbnlNZXNzYWdlIGJ5IGB0eXBlYCBkaXNjcmltaW5hbnRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHIgPSB2YWxpZGF0ZU1lc3NhZ2Uoe1xuICAgICAgLi4uZW52ZWxvcGUsXG4gICAgICB0eXBlOiBcImdhbWUubW92ZVwiLFxuICAgICAgcGF5bG9hZDogeyBmcm9tOiBcImUyXCIsIHRvOiBcImU0XCIgfSxcbiAgICB9KTtcbiAgICBleHBlY3Qoci5vaykudG9CZSh0cnVlKTtcbiAgICBpZiAoci5vayAmJiByLmRhdGEudHlwZSA9PT0gXCJnYW1lLm1vdmVcIikge1xuICAgICAgLy8gVFMgbmFycm93aW5nIHNob3VsZCBsZXQgdXMgcmVhZCB0aGVzZSBmaWVsZHMgd2l0aG91dCBjYXN0cy5cbiAgICAgIGV4cGVjdChyLmRhdGEucGF5bG9hZC5mcm9tKS50b0JlKFwiZTJcIik7XG4gICAgICBleHBlY3Qoci5kYXRhLnBheWxvYWQudG8pLnRvQmUoXCJlNFwiKTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTGF5b3V0IGZpZWxkIG9uIHJvb20uY3JlYXRlIOKAlCBkaXNjcmltaW5hdGVkIHVuaW9uIG9mIHByZW1hZGUgLyBGRU4gLyBjdXN0b21cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5kZXNjcmliZShcInJvb20uY3JlYXRlIGxheW91dCBwYXlsb2FkXCIsICgpID0+IHtcbiAgaXQoXCJhY2NlcHRzIHsga2luZDogJ3ByZW1hZGUnLCBpZCB9IGxheW91dCBzZWxlY3Rpb25cIiwgKCkgPT4ge1xuICAgIGNvbnN0IHIgPSB2YWxpZGF0ZU1lc3NhZ2Uoe1xuICAgICAgLi4uZW52ZWxvcGUsXG4gICAgICB0eXBlOiBcInJvb20uY3JlYXRlXCIsXG4gICAgICBwYXlsb2FkOiB7XG4gICAgICAgIGxheW91dDogeyBraW5kOiBcInByZW1hZGVcIiwgaWQ6IFwiZHVuc2FueVwiIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGV4cGVjdChyLm9rKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcImFjY2VwdHMgeyBraW5kOiAnZmVuJywgZmVuIH0gbGF5b3V0IHNlbGVjdGlvblwiLCAoKSA9PiB7XG4gICAgY29uc3QgciA9IHZhbGlkYXRlTWVzc2FnZSh7XG4gICAgICAuLi5lbnZlbG9wZSxcbiAgICAgIHR5cGU6IFwicm9vbS5jcmVhdGVcIixcbiAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgbGF5b3V0OiB7XG4gICAgICAgICAga2luZDogXCJmZW5cIixcbiAgICAgICAgICBmZW46IFwicm5icWtibnIvcHBwcHBwcHAvOC84LzgvOC9QUFBQUFBQUC9STkJRS0JOUlwiLFxuICAgICAgICAgIG5hbWU6IFwiUGFzdGVkIEZFTlwiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBleHBlY3Qoci5vaykudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJhY2NlcHRzIHsga2luZDogJ2N1c3RvbScsIHBpZWNlcyB9IGxheW91dCBzZWxlY3Rpb25cIiwgKCkgPT4ge1xuICAgIGNvbnN0IHIgPSB2YWxpZGF0ZU1lc3NhZ2Uoe1xuICAgICAgLi4uZW52ZWxvcGUsXG4gICAgICB0eXBlOiBcInJvb20uY3JlYXRlXCIsXG4gICAgICBwYXlsb2FkOiB7XG4gICAgICAgIGxheW91dDoge1xuICAgICAgICAgIGtpbmQ6IFwiY3VzdG9tXCIsXG4gICAgICAgICAgcGllY2VzOiBbXG4gICAgICAgICAgICB7IHR5cGU6IFwia2luZ1wiLCBjb2xvcjogXCJ3aGl0ZVwiLCBzcXVhcmU6IDQgfSxcbiAgICAgICAgICAgIHsgdHlwZTogXCJraW5nXCIsIGNvbG9yOiBcImJsYWNrXCIsIHNxdWFyZTogNjAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBleHBlY3Qoci5vaykudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzIHVua25vd24gbGF5b3V0IGtpbmRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHIgPSB2YWxpZGF0ZU1lc3NhZ2Uoe1xuICAgICAgLi4uZW52ZWxvcGUsXG4gICAgICB0eXBlOiBcInJvb20uY3JlYXRlXCIsXG4gICAgICBwYXlsb2FkOiB7IGxheW91dDogeyBraW5kOiBcIm5vbnNlbnNlXCIsIGlkOiBcImZvb1wiIH0gfSxcbiAgICB9KTtcbiAgICBleHBlY3Qoci5vaykudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyBjdXN0b20gbGF5b3V0IHdpdGggb3V0LW9mLXJhbmdlIHNxdWFyZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgciA9IHZhbGlkYXRlTWVzc2FnZSh7XG4gICAgICAuLi5lbnZlbG9wZSxcbiAgICAgIHR5cGU6IFwicm9vbS5jcmVhdGVcIixcbiAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgbGF5b3V0OiB7XG4gICAgICAgICAga2luZDogXCJjdXN0b21cIixcbiAgICAgICAgICBwaWVjZXM6IFt7IHR5cGU6IFwia2luZ1wiLCBjb2xvcjogXCJ3aGl0ZVwiLCBzcXVhcmU6IDk5OSB9XSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgZXhwZWN0KHIub2spLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgY3VzdG9tIGxheW91dCB3aXRoID4gMTI4IHBpZWNlcyAoRG9TIGNhcClcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHBpZWNlcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDEyOSB9LCAoXywgaSkgPT4gKHtcbiAgICAgIHR5cGU6IFwicGF3blwiIGFzIGNvbnN0LFxuICAgICAgY29sb3I6IFwid2hpdGVcIiBhcyBjb25zdCxcbiAgICAgIHNxdWFyZTogaSAlIDY0LFxuICAgIH0pKTtcbiAgICBjb25zdCByID0gdmFsaWRhdGVNZXNzYWdlKHtcbiAgICAgIC4uLmVudmVsb3BlLFxuICAgICAgdHlwZTogXCJyb29tLmNyZWF0ZVwiLFxuICAgICAgcGF5bG9hZDogeyBsYXlvdXQ6IHsga2luZDogXCJjdXN0b21cIiwgcGllY2VzIH0gfSxcbiAgICB9KTtcbiAgICBleHBlY3Qoci5vaykudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwicm9vbS5jcmVhdGUgd2l0aG91dCBsYXlvdXQgc3RpbGwgcGFyc2VzIChiYWNrd2FyZCBjb21wYXQpXCIsICgpID0+IHtcbiAgICBjb25zdCByID0gdmFsaWRhdGVNZXNzYWdlKHtcbiAgICAgIC4uLmVudmVsb3BlLFxuICAgICAgdHlwZTogXCJyb29tLmNyZWF0ZVwiLFxuICAgICAgcGF5bG9hZDoge30sXG4gICAgfSk7XG4gICAgZXhwZWN0KHIub2spLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwicm9vbS5jcmVhdGVkIGVjaG9lcyByZXNvbHZlZCBsYXlvdXRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHIgPSB2YWxpZGF0ZU1lc3NhZ2Uoe1xuICAgICAgLi4uZW52ZWxvcGUsXG4gICAgICBzZXE6IDEsXG4gICAgICB0eXBlOiBcInJvb20uY3JlYXRlZFwiLFxuICAgICAgcGF5bG9hZDoge1xuICAgICAgICBjb2RlOiBcIkFCQzEyM1wiLFxuICAgICAgICB0b2tlbjogVVVJRCxcbiAgICAgICAgY29sb3I6IFwid2hpdGVcIixcbiAgICAgICAgbGF5b3V0OiB7XG4gICAgICAgICAgaWQ6IFwiZHVuc2FueVwiLFxuICAgICAgICAgIG5hbWU6IFwiRHVuc2FueSdzIENoZXNzXCIsXG4gICAgICAgICAgcGllY2VzOiBbXG4gICAgICAgICAgICB7IHR5cGU6IFwia2luZ1wiLCBjb2xvcjogXCJ3aGl0ZVwiLCBzcXVhcmU6IDQgfSxcbiAgICAgICAgICAgIHsgdHlwZTogXCJraW5nXCIsIGNvbG9yOiBcImJsYWNrXCIsIHNxdWFyZTogNjAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBleHBlY3Qoci5vaykudG9CZSh0cnVlKTtcbiAgfSk7XG59KTtcbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9zZXJ2ZXIvc3JjL3Byb3RvY29sLnRlc3QudHMifQ== diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/762ce37da2a2589b1d10505d5f2beb8d6535a9b4 b/KMr2_dqTOvh2R-Vg1E6cO/ssr/762ce37da2a2589b1d10505d5f2beb8d6535a9b4 deleted file mode 100644 index 904758a..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/762ce37da2a2589b1d10505d5f2beb8d6535a9b4 +++ /dev/null @@ -1,154 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "AlphaMemory", { enumerable: true, configurable: true, get(){ try { return AlphaMemory } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "AlphaNode", { enumerable: true, configurable: true, get(){ try { return AlphaNode } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "AlphaNetwork", { enumerable: true, configurable: true, get(){ try { return AlphaNetwork } catch {} }}); -/** - * Sorted working-set of facts that have passed an {@link AlphaNode}'s tests. - * - * The `facts` array is maintained in `[id asc, attr asc]` order on every - * mutation so that iteration is deterministic without a per-read sort. - */ -class AlphaMemory { - /** Facts currently in memory, sorted by `[id asc, attr asc]`. */ - facts = []; - /** Insert a fact; keeps `facts` sorted. O(n) via insertion-point search. */ - addFact(id, attr, value) { - const fact = { id, attr, value }; - // Find insertion index to keep sorted: [id asc, attr asc] - let lo = 0; - let hi = this.facts.length; - while (lo < hi) { - const mid = (lo + hi) >>> 1; - const m = this.facts[mid]; - const cmp = m.id !== id - ? m.id - id - : m.attr < attr - ? -1 - : m.attr > attr - ? 1 - : 0; - if (cmp < 0) - lo = mid + 1; - else - hi = mid; - }; - this.facts.splice(lo, 0, fact); - } - /** Remove the fact matching `(id, attr)`. Returns the removed value, or undefined. */ - removeFact(id, attr) { - const idx = this.facts.findIndex((f) => f.id === id && f.attr === attr); - if (idx === -1) - return undefined; - const removed = this.facts[idx]; - this.facts.splice(idx, 1); - return removed.value; - } -}; -/** - * A single alpha-network node: owns one {@link AlphaCondition}, its - * {@link AlphaMemory}, and activate/deactivate listener lists. - * - * Listeners are invoked synchronously after the memory mutation, so observers - * (typically join-nodes in Phase 1 and the agenda in later phases) see a - * consistent memory view. - */ -class AlphaNode { - condition; - memory; - #activateListeners = []; - #deactivateListeners = []; - constructor(condition) { - this.condition = condition; - this.memory = new AlphaMemory(); - } - /** Register a listener fired after a fact is added to this node's memory. */ - onActivate(listener) { - this.#activateListeners.push(listener); - } - /** Register a listener fired after a fact is removed from this node's memory. */ - onDeactivate(listener) { - this.#deactivateListeners.push(listener); - } - /** Internal: add to memory, then notify activate listeners. */ - activate(id, attr, value) { - this.memory.addFact(id, attr, value); - for (const l of this.#activateListeners) - l(id, attr, value); - } - /** Internal: remove from memory, then notify deactivate listeners. */ - deactivate(id, attr, value) { - this.memory.removeFact(id, attr); - for (const l of this.#deactivateListeners) - l(id, attr, value); - } -}; -/** - * Dispatch layer for alpha nodes. - * - * The network owns all alpha nodes and exposes `notifyInsert` / `notifyRetract` - * that the {@link import("./wm.js").WorkingMemory} fires on every triple - * change. Lookup is performed via an inverted index `attr → AlphaNode[]`, so - * dispatch cost scales with the number of nodes interested in that attr - * rather than the total node count. - * - * {@link buildNode} is memoised: identical conditions collapse to one node so - * that rules sharing a constant-test share the same alpha memory (the usual - * Rete sharing optimisation). - */ -class AlphaNetwork { - /** Inverted index: attribute key → nodes that filter on it. */ - #index = new Map(); - /** Memoisation cache: canonical condition key → node. */ - #nodeCache = new Map(); - /** Canonical key for an {@link AlphaCondition}. */ - #conditionKey(cond) { - // "*" is safe as a sentinel because EntityId is numeric at runtime. - return `${cond.id === null ? "*" : String(cond.id)}:${cond.attr}`; - } - /** - * Get or create the {@link AlphaNode} for a given condition. - * - * Two calls with the same `(id, attr)` pair return the same instance, so - * rules that share constant tests share alpha memories automatically. - */ - buildNode(cond) { - const key = this.#conditionKey(cond); - const cached = this.#nodeCache.get(key); - if (cached) - return cached; - const node = new AlphaNode({ id: cond.id, attr: cond.attr }); - this.#nodeCache.set(key, node); - let attrNodes = this.#index.get(cond.attr); - if (!attrNodes) { - attrNodes = []; - this.#index.set(cond.attr, attrNodes); - }; - attrNodes.push(node); - return node; - } - /** Called by `WorkingMemory` (via Session) when a fact is inserted. */ - notifyInsert(id, attr, value) { - const nodes = this.#index.get(attr); - if (!nodes) - return; - for (const node of nodes) { - // Wildcard (null) always matches; otherwise require exact id. - if (node.condition.id === null || node.condition.id === id) { - node.activate(id, attr, value); - } - } - } - /** Called by `WorkingMemory` (via Session) when a fact is retracted. */ - notifyRetract(id, attr, value) { - const nodes = this.#index.get(attr); - if (!nodes) - return; - for (const node of nodes) { - if (node.condition.id === null || node.condition.id === id) { - node.deactivate(id, attr, value); - } - } - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUM7UUFFcEIsT0FBTyxJQUFJO0lBQ2I7SUFFQTtJQUNBLFlBQVksQ0FBQyxFQUFZLEVBQUUsSUFBYSxFQUFFLEtBQWdCO1FBQ3hELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsS0FBSztZQUFFO1FBQ1osS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7WUFDeEI7WUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQzFELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUM7WUFDaEM7UUFDRjtJQUNGO0lBRUE7SUFDQSxhQUFhLENBQUMsRUFBWSxFQUFFLElBQWEsRUFBRSxLQUFnQjtRQUN6RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUs7WUFBRTtRQUNaLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1lBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDMUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQztZQUNsQztRQUNGO0lBQ0YiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9hbHBoYS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFscGhhTmV0d29yayDigJQgaW5kZXhlcyBhbmQgZGlzcGF0Y2hlcyBmYWN0cyBieSAoaWQ/LCBhdHRyKSBwYXR0ZXJuLlxuICpcbiAqIFBlciBgcGFja2FnZXMvcmV0ZS9TUEVDLm1kIMKnUmV0ZSBJSSBSZWZlcmVuY2UgVGFyZ2V0YCB0aGlzIG1vZHVsZSBpbXBsZW1lbnRzXG4gKiB0aGUgYWxwaGEgc2lkZSBvZiB0aGUgRG9vcmVuYm9zIG5ldHdvcms6IHtAbGluayBBbHBoYU5vZGV9IChjb25zdGFudCB0ZXN0cylcbiAqIGFuZCB7QGxpbmsgQWxwaGFNZW1vcnl9IChzZXQgb2YgZmFjdHMgdGhhdCBwYXNzZWQgdGhvc2UgdGVzdHMpLlxuICpcbiAqIERpc3BhdGNoIGlzIGFtb3J0aXNlZCBPKDEpIHBlciBmYWN0OiBhbiBpbnZlcnRlZCBpbmRleCBtYXBzIGF0dHJpYnV0ZSBrZXlzXG4gKiB0byB0aGUgYWxwaGEgbm9kZXMgdGhhdCBjYXJlIGFib3V0IHRoZW0sIHNvIHdlIG9ubHkgdmlzaXQgdGhlIHNtYWxsIHN1YnNldFxuICogb2Ygbm9kZXMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBhdHRyIHJhdGhlciB0aGFuIHNjYW5uaW5nIGV2ZXJ5IG5vZGUuIFRoZVxuICogaWQgZGltZW5zaW9uIGlzIGEgZmluYWwgY29tcGFyZSBpbiB0aGUgbm9kZSdzIG1hdGNoIHN0ZXAuXG4gKlxuICogQWxwaGFNZW1vcnkga2VlcHMgaXRzIGZhY3RzIHNvcnRlZCBieSBgW2lkIGFzYywgYXR0ciBhc2NdYCB0byBzYXRpc2Z5XG4gKiDCp0l0ZXJhdGlvbiBPcmRlciDigJQgZG93bnN0cmVhbSBiZXRhIGpvaW5zIGl0ZXJhdGUgYWxwaGEgbWVtb3JpZXMgaW4gYVxuICogZGV0ZXJtaW5pc3RpYyBvcmRlci5cbiAqL1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBdHRyS2V5LCBGYWN0VmFsdWUgfSBmcm9tIFwiLi93bS5qc1wiO1xuXG4vKipcbiAqIENvbnN0YW50LXRlc3QgY29uZGl0aW9uIHJlY29nbmlzZWQgYnkgYSBzaW5nbGUge0BsaW5rIEFscGhhTm9kZX0uXG4gKlxuICogYGlkYCBpcyBlaXRoZXIgYSBzcGVjaWZpYyB7QGxpbmsgRW50aXR5SWR9ICh0aGUgbm9kZSBvbmx5IGFjY2VwdHMgZmFjdHMgZm9yXG4gKiB0aGF0IGVudGl0eSkgb3IgYG51bGxgICh3aWxkY2FyZCDigJQgYWNjZXB0cyBhbnkgZW50aXR5KS4gYGF0dHJgIG11c3QgYWx3YXlzXG4gKiBiZSBhIGNvbmNyZXRlIGF0dHJpYnV0ZSBrZXk7IGF0dHJpYnV0ZSB3aWxkY2FyZHMgYXJlIG5vdCBzdXBwb3J0ZWQgYXQgdGhlXG4gKiBhbHBoYSBsYXllciBwZXIgU1BFQy5tZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBbHBoYUNvbmRpdGlvbiB7XG4gIC8qKiBTcGVjaWZpYyBlbnRpdHkgSUQgdG8gbWF0Y2gsIG9yIGBudWxsYCBmb3IgYSB3aWxkY2FyZCBvdmVyIGVudGl0aWVzLiAqL1xuICByZWFkb25seSBpZDogRW50aXR5SWQgfCBudWxsO1xuICAvKiogQXR0cmlidXRlIGtleSB0aGUgbm9kZSBmaWx0ZXJzIG9uIOKAlCByZXF1aXJlZCAobm8gYXR0ciB3aWxkY2FyZHMpLiAqL1xuICByZWFkb25seSBhdHRyOiBBdHRyS2V5O1xufVxuXG50eXBlIEFjdGl2YXRlTGlzdGVuZXIgPSAoaWQ6IEVudGl0eUlkLCBhdHRyOiBBdHRyS2V5LCB2YWx1ZTogRmFjdFZhbHVlKSA9PiB2b2lkO1xudHlwZSBEZWFjdGl2YXRlTGlzdGVuZXIgPSAoXG4gIGlkOiBFbnRpdHlJZCxcbiAgYXR0cjogQXR0cktleSxcbiAgdmFsdWU6IEZhY3RWYWx1ZVxuKSA9PiB2b2lkO1xuXG4vKipcbiAqIFNvcnRlZCB3b3JraW5nLXNldCBvZiBmYWN0cyB0aGF0IGhhdmUgcGFzc2VkIGFuIHtAbGluayBBbHBoYU5vZGV9J3MgdGVzdHMuXG4gKlxuICogVGhlIGBmYWN0c2AgYXJyYXkgaXMgbWFpbnRhaW5lZCBpbiBgW2lkIGFzYywgYXR0ciBhc2NdYCBvcmRlciBvbiBldmVyeVxuICogbXV0YXRpb24gc28gdGhhdCBpdGVyYXRpb24gaXMgZGV0ZXJtaW5pc3RpYyB3aXRob3V0IGEgcGVyLXJlYWQgc29ydC5cbiAqL1xuZXhwb3J0IGNsYXNzIEFscGhhTWVtb3J5IHtcbiAgLyoqIEZhY3RzIGN1cnJlbnRseSBpbiBtZW1vcnksIHNvcnRlZCBieSBgW2lkIGFzYywgYXR0ciBhc2NdYC4gKi9cbiAgcmVhZG9ubHkgZmFjdHM6IEFycmF5PHsgaWQ6IEVudGl0eUlkOyBhdHRyOiBBdHRyS2V5OyB2YWx1ZTogRmFjdFZhbHVlIH0+ID0gW107XG5cbiAgLyoqIEluc2VydCBhIGZhY3Q7IGtlZXBzIGBmYWN0c2Agc29ydGVkLiBPKG4pIHZpYSBpbnNlcnRpb24tcG9pbnQgc2VhcmNoLiAqL1xuICBhZGRGYWN0KGlkOiBFbnRpdHlJZCwgYXR0cjogQXR0cktleSwgdmFsdWU6IEZhY3RWYWx1ZSk6IHZvaWQge1xuICAgIGNvbnN0IGZhY3QgPSB7IGlkLCBhdHRyLCB2YWx1ZSB9O1xuICAgIC8vIEZpbmQgaW5zZXJ0aW9uIGluZGV4IHRvIGtlZXAgc29ydGVkOiBbaWQgYXNjLCBhdHRyIGFzY11cbiAgICBsZXQgbG8gPSAwO1xuICAgIGxldCBoaSA9IHRoaXMuZmFjdHMubGVuZ3RoO1xuICAgIHdoaWxlIChsbyA8IGhpKSB7XG4gICAgICBjb25zdCBtaWQgPSAobG8gKyBoaSkgPj4+IDE7XG4gICAgICBjb25zdCBtID0gdGhpcy5mYWN0c1ttaWRdITtcbiAgICAgIGNvbnN0IGNtcCA9XG4gICAgICAgIG0uaWQgIT09IGlkXG4gICAgICAgICAgPyAobS5pZCBhcyBudW1iZXIpIC0gKGlkIGFzIG51bWJlcilcbiAgICAgICAgICA6IG0uYXR0ciA8IGF0dHJcbiAgICAgICAgICAgID8gLTFcbiAgICAgICAgICAgIDogbS5hdHRyID4gYXR0clxuICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgOiAwO1xuICAgICAgaWYgKGNtcCA8IDApIGxvID0gbWlkICsgMTtcbiAgICAgIGVsc2UgaGkgPSBtaWQ7XG4gICAgfVxuICAgIHRoaXMuZmFjdHMuc3BsaWNlKGxvLCAwLCBmYWN0KTtcbiAgfVxuXG4gIC8qKiBSZW1vdmUgdGhlIGZhY3QgbWF0Y2hpbmcgYChpZCwgYXR0cilgLiBSZXR1cm5zIHRoZSByZW1vdmVkIHZhbHVlLCBvciB1bmRlZmluZWQuICovXG4gIHJlbW92ZUZhY3QoaWQ6IEVudGl0eUlkLCBhdHRyOiBBdHRyS2V5KTogRmFjdFZhbHVlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBpZHggPSB0aGlzLmZhY3RzLmZpbmRJbmRleCgoZikgPT4gZi5pZCA9PT0gaWQgJiYgZi5hdHRyID09PSBhdHRyKTtcbiAgICBpZiAoaWR4ID09PSAtMSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCByZW1vdmVkID0gdGhpcy5mYWN0c1tpZHhdITtcbiAgICB0aGlzLmZhY3RzLnNwbGljZShpZHgsIDEpO1xuICAgIHJldHVybiByZW1vdmVkLnZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogQSBzaW5nbGUgYWxwaGEtbmV0d29yayBub2RlOiBvd25zIG9uZSB7QGxpbmsgQWxwaGFDb25kaXRpb259LCBpdHNcbiAqIHtAbGluayBBbHBoYU1lbW9yeX0sIGFuZCBhY3RpdmF0ZS9kZWFjdGl2YXRlIGxpc3RlbmVyIGxpc3RzLlxuICpcbiAqIExpc3RlbmVycyBhcmUgaW52b2tlZCBzeW5jaHJvbm91c2x5IGFmdGVyIHRoZSBtZW1vcnkgbXV0YXRpb24sIHNvIG9ic2VydmVyc1xuICogKHR5cGljYWxseSBqb2luLW5vZGVzIGluIFBoYXNlIDEgYW5kIHRoZSBhZ2VuZGEgaW4gbGF0ZXIgcGhhc2VzKSBzZWUgYVxuICogY29uc2lzdGVudCBtZW1vcnkgdmlldy5cbiAqL1xuZXhwb3J0IGNsYXNzIEFscGhhTm9kZSB7XG4gIHJlYWRvbmx5IGNvbmRpdGlvbjogQWxwaGFDb25kaXRpb247XG4gIHJlYWRvbmx5IG1lbW9yeTogQWxwaGFNZW1vcnk7XG4gIHJlYWRvbmx5ICNhY3RpdmF0ZUxpc3RlbmVyczogQWN0aXZhdGVMaXN0ZW5lcltdID0gW107XG4gIHJlYWRvbmx5ICNkZWFjdGl2YXRlTGlzdGVuZXJzOiBEZWFjdGl2YXRlTGlzdGVuZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmRpdGlvbjogQWxwaGFDb25kaXRpb24pIHtcbiAgICB0aGlzLmNvbmRpdGlvbiA9IGNvbmRpdGlvbjtcbiAgICB0aGlzLm1lbW9yeSA9IG5ldyBBbHBoYU1lbW9yeSgpO1xuICB9XG5cbiAgLyoqIFJlZ2lzdGVyIGEgbGlzdGVuZXIgZmlyZWQgYWZ0ZXIgYSBmYWN0IGlzIGFkZGVkIHRvIHRoaXMgbm9kZSdzIG1lbW9yeS4gKi9cbiAgb25BY3RpdmF0ZShsaXN0ZW5lcjogQWN0aXZhdGVMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuI2FjdGl2YXRlTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqIFJlZ2lzdGVyIGEgbGlzdGVuZXIgZmlyZWQgYWZ0ZXIgYSBmYWN0IGlzIHJlbW92ZWQgZnJvbSB0aGlzIG5vZGUncyBtZW1vcnkuICovXG4gIG9uRGVhY3RpdmF0ZShsaXN0ZW5lcjogRGVhY3RpdmF0ZUxpc3RlbmVyKTogdm9pZCB7XG4gICAgdGhpcy4jZGVhY3RpdmF0ZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKiBJbnRlcm5hbDogYWRkIHRvIG1lbW9yeSwgdGhlbiBub3RpZnkgYWN0aXZhdGUgbGlzdGVuZXJzLiAqL1xuICBhY3RpdmF0ZShpZDogRW50aXR5SWQsIGF0dHI6IEF0dHJLZXksIHZhbHVlOiBGYWN0VmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzLm1lbW9yeS5hZGRGYWN0KGlkLCBhdHRyLCB2YWx1ZSk7XG4gICAgZm9yIChjb25zdCBsIG9mIHRoaXMuI2FjdGl2YXRlTGlzdGVuZXJzKSBsKGlkLCBhdHRyLCB2YWx1ZSk7XG4gIH1cblxuICAvKiogSW50ZXJuYWw6IHJlbW92ZSBmcm9tIG1lbW9yeSwgdGhlbiBub3RpZnkgZGVhY3RpdmF0ZSBsaXN0ZW5lcnMuICovXG4gIGRlYWN0aXZhdGUoaWQ6IEVudGl0eUlkLCBhdHRyOiBBdHRyS2V5LCB2YWx1ZTogRmFjdFZhbHVlKTogdm9pZCB7XG4gICAgdGhpcy5tZW1vcnkucmVtb3ZlRmFjdChpZCwgYXR0cik7XG4gICAgZm9yIChjb25zdCBsIG9mIHRoaXMuI2RlYWN0aXZhdGVMaXN0ZW5lcnMpIGwoaWQsIGF0dHIsIHZhbHVlKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGxheWVyIGZvciBhbHBoYSBub2Rlcy5cbiAqXG4gKiBUaGUgbmV0d29yayBvd25zIGFsbCBhbHBoYSBub2RlcyBhbmQgZXhwb3NlcyBgbm90aWZ5SW5zZXJ0YCAvIGBub3RpZnlSZXRyYWN0YFxuICogdGhhdCB0aGUge0BsaW5rIGltcG9ydChcIi4vd20uanNcIikuV29ya2luZ01lbW9yeX0gZmlyZXMgb24gZXZlcnkgdHJpcGxlXG4gKiBjaGFuZ2UuIExvb2t1cCBpcyBwZXJmb3JtZWQgdmlhIGFuIGludmVydGVkIGluZGV4IGBhdHRyIOKGkiBBbHBoYU5vZGVbXWAsIHNvXG4gKiBkaXNwYXRjaCBjb3N0IHNjYWxlcyB3aXRoIHRoZSBudW1iZXIgb2Ygbm9kZXMgaW50ZXJlc3RlZCBpbiB0aGF0IGF0dHJcbiAqIHJhdGhlciB0aGFuIHRoZSB0b3RhbCBub2RlIGNvdW50LlxuICpcbiAqIHtAbGluayBidWlsZE5vZGV9IGlzIG1lbW9pc2VkOiBpZGVudGljYWwgY29uZGl0aW9ucyBjb2xsYXBzZSB0byBvbmUgbm9kZSBzb1xuICogdGhhdCBydWxlcyBzaGFyaW5nIGEgY29uc3RhbnQtdGVzdCBzaGFyZSB0aGUgc2FtZSBhbHBoYSBtZW1vcnkgKHRoZSB1c3VhbFxuICogUmV0ZSBzaGFyaW5nIG9wdGltaXNhdGlvbikuXG4gKi9cbmV4cG9ydCBjbGFzcyBBbHBoYU5ldHdvcmsge1xuICAvKiogSW52ZXJ0ZWQgaW5kZXg6IGF0dHJpYnV0ZSBrZXkg4oaSIG5vZGVzIHRoYXQgZmlsdGVyIG9uIGl0LiAqL1xuICByZWFkb25seSAjaW5kZXggPSBuZXcgTWFwPEF0dHJLZXksIEFscGhhTm9kZVtdPigpO1xuICAvKiogTWVtb2lzYXRpb24gY2FjaGU6IGNhbm9uaWNhbCBjb25kaXRpb24ga2V5IOKGkiBub2RlLiAqL1xuICByZWFkb25seSAjbm9kZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIEFscGhhTm9kZT4oKTtcblxuICAvKiogQ2Fub25pY2FsIGtleSBmb3IgYW4ge0BsaW5rIEFscGhhQ29uZGl0aW9ufS4gKi9cbiAgI2NvbmRpdGlvbktleShjb25kOiBBbHBoYUNvbmRpdGlvbik6IHN0cmluZyB7XG4gICAgLy8gXCIqXCIgaXMgc2FmZSBhcyBhIHNlbnRpbmVsIGJlY2F1c2UgRW50aXR5SWQgaXMgbnVtZXJpYyBhdCBydW50aW1lLlxuICAgIHJldHVybiBgJHtjb25kLmlkID09PSBudWxsID8gXCIqXCIgOiBTdHJpbmcoY29uZC5pZCl9OiR7Y29uZC5hdHRyfWA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG9yIGNyZWF0ZSB0aGUge0BsaW5rIEFscGhhTm9kZX0gZm9yIGEgZ2l2ZW4gY29uZGl0aW9uLlxuICAgKlxuICAgKiBUd28gY2FsbHMgd2l0aCB0aGUgc2FtZSBgKGlkLCBhdHRyKWAgcGFpciByZXR1cm4gdGhlIHNhbWUgaW5zdGFuY2UsIHNvXG4gICAqIHJ1bGVzIHRoYXQgc2hhcmUgY29uc3RhbnQgdGVzdHMgc2hhcmUgYWxwaGEgbWVtb3JpZXMgYXV0b21hdGljYWxseS5cbiAgICovXG4gIGJ1aWxkTm9kZShjb25kOiBBbHBoYUNvbmRpdGlvbik6IEFscGhhTm9kZSB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy4jY29uZGl0aW9uS2V5KGNvbmQpO1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuI25vZGVDYWNoZS5nZXQoa2V5KTtcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuXG4gICAgY29uc3Qgbm9kZSA9IG5ldyBBbHBoYU5vZGUoeyBpZDogY29uZC5pZCwgYXR0cjogY29uZC5hdHRyIH0pO1xuICAgIHRoaXMuI25vZGVDYWNoZS5zZXQoa2V5LCBub2RlKTtcblxuICAgIGxldCBhdHRyTm9kZXMgPSB0aGlzLiNpbmRleC5nZXQoY29uZC5hdHRyKTtcbiAgICBpZiAoIWF0dHJOb2Rlcykge1xuICAgICAgYXR0ck5vZGVzID0gW107XG4gICAgICB0aGlzLiNpbmRleC5zZXQoY29uZC5hdHRyLCBhdHRyTm9kZXMpO1xuICAgIH1cbiAgICBhdHRyTm9kZXMucHVzaChub2RlKTtcblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgLyoqIENhbGxlZCBieSBgV29ya2luZ01lbW9yeWAgKHZpYSBTZXNzaW9uKSB3aGVuIGEgZmFjdCBpcyBpbnNlcnRlZC4gKi9cbiAgbm90aWZ5SW5zZXJ0KGlkOiBFbnRpdHlJZCwgYXR0cjogQXR0cktleSwgdmFsdWU6IEZhY3RWYWx1ZSk6IHZvaWQge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy4jaW5kZXguZ2V0KGF0dHIpO1xuICAgIGlmICghbm9kZXMpIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgIC8vIFdpbGRjYXJkIChudWxsKSBhbHdheXMgbWF0Y2hlczsgb3RoZXJ3aXNlIHJlcXVpcmUgZXhhY3QgaWQuXG4gICAgICBpZiAobm9kZS5jb25kaXRpb24uaWQgPT09IG51bGwgfHwgbm9kZS5jb25kaXRpb24uaWQgPT09IGlkKSB7XG4gICAgICAgIG5vZGUuYWN0aXZhdGUoaWQsIGF0dHIsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQ2FsbGVkIGJ5IGBXb3JraW5nTWVtb3J5YCAodmlhIFNlc3Npb24pIHdoZW4gYSBmYWN0IGlzIHJldHJhY3RlZC4gKi9cbiAgbm90aWZ5UmV0cmFjdChpZDogRW50aXR5SWQsIGF0dHI6IEF0dHJLZXksIHZhbHVlOiBGYWN0VmFsdWUpOiB2b2lkIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuI2luZGV4LmdldChhdHRyKTtcbiAgICBpZiAoIW5vZGVzKSByZXR1cm47XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICBpZiAobm9kZS5jb25kaXRpb24uaWQgPT09IG51bGwgfHwgbm9kZS5jb25kaXRpb24uaWQgPT09IGlkKSB7XG4gICAgICAgIG5vZGUuZGVhY3RpdmF0ZShpZCwgYXR0ciwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvZGlzdC9hbHBoYS5qcyJ9 diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/778beafecaae71b0bd8ca0acab50cdfc4aa45b72 b/KMr2_dqTOvh2R-Vg1E6cO/ssr/778beafecaae71b0bd8ca0acab50cdfc4aa45b72 deleted file mode 100644 index 3cb78af..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/778beafecaae71b0bd8ca0acab50cdfc4aa45b72 +++ /dev/null @@ -1,151 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "NccPartner", { enumerable: true, configurable: true, get(){ try { return NccPartner } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "NccNode", { enumerable: true, configurable: true, get(){ try { return NccNode } catch {} }}); -/** - * Terminal node for the NCC sub-network. - * - * Carries a back-reference to its {@link NccNode}; the NccNode is set - * exactly once by the NccNode's constructor. If the partner is not yet - * wired to an NccNode, activations are silently ignored — this keeps - * construction order of `new NccPartner()` / `new NccNode(partner)` - * flexible for tests and builder code. - */ -class NccPartner { - #ncc = null; - /** - * Notify the NccNode that a new complete sub-match has formed for the - * given `outerToken`. Called by the sub-network's terminal production. - */ - leftActivate(subToken, outerToken) { - this.#ncc?.onSubMatchActivate(subToken, outerToken); - } - /** - * Notify the NccNode that a previously-formed sub-match has dissolved. - */ - leftDeactivate(subToken, outerToken) { - this.#ncc?.onSubMatchDeactivate(subToken, outerToken); - } - /** - * Bind this partner to its owning NccNode. Called by the NccNode - * constructor. Rebinding is intentionally a no-op after the first call — - * a partner is paired with exactly one NccNode for life. - */ - setNcc(ncc) { - if (this.#ncc === null) { - this.#ncc = ncc; - } - } -}; -/** - * Beta-network node implementing subconjunction negation. - * - * Downstream subscribers see an outer token iff the NCC sub-network yields - * zero complete sub-matches for it. Arrivals and departures of sub-matches - * are reported via the paired {@link NccPartner}. - */ -class NccNode { - #activateListeners = []; - #deactivateListeners = []; - /** Active sub-match count per outer token (absent entry ≡ 0). */ - #subMatchCount = new Map(); - /** Outer tokens currently propagated downstream. */ - #passingTokens = new Set(); - /** All outer tokens left-activated and not yet left-deactivated. */ - #outerTokens = new Set(); - constructor(partner) { - partner.setNcc(this); - } - /** Subscribe to downstream activations (tokens passing the NCC filter). */ - addDownstreamActivate(listener) { - this.#activateListeners.push(listener); - } - /** Subscribe to downstream deactivations (tokens withdrawn). */ - addDownstreamDeactivate(listener) { - this.#deactivateListeners.push(listener); - } - /** - * Accept an outer partial match. - * - * The token is passed downstream immediately when the sub-match count - * for it is zero. If a sub-match already exists (e.g. the sub-network - * activated before the outer left input did), the token is tracked but - * withheld from downstream until the count returns to zero. - */ - leftActivate(token) { - this.#outerTokens.add(token); - const count = this.#subMatchCount.get(token) ?? 0; - if (count === 0) { - this.#passingTokens.add(token); - for (const listener of this.#activateListeners) { - listener(token); - } - } - } - /** - * Withdraw an outer partial match. - * - * If the token is currently passing, fire downstream-deactivate; otherwise - * silently drop it. The sub-match count is discarded so stale sub-match - * retractions after this point become no-ops for this token. - */ - leftDeactivate(token) { - this.#outerTokens.delete(token); - this.#subMatchCount.delete(token); - if (this.#passingTokens.has(token)) { - this.#passingTokens.delete(token); - for (const listener of this.#deactivateListeners) { - listener(token); - } - } - } - /** - * Internal: sub-network reports a new complete sub-match. - * - * Incrementing the count from 0 to 1 blocks the outer token if it is - * currently passing. The `_subToken` argument is unused by the - * count-based scheme but retained in the signature per Doorenbos so that - * more elaborate variants (e.g. preserving matched sub-tokens for - * explanation) can slot in without changing the partner protocol. - */ - onSubMatchActivate(_subToken, outerToken) { - const prev = this.#subMatchCount.get(outerToken) ?? 0; - this.#subMatchCount.set(outerToken, prev + 1); - if (prev === 0 && this.#passingTokens.has(outerToken)) { - this.#passingTokens.delete(outerToken); - for (const listener of this.#deactivateListeners) { - listener(outerToken); - } - } - } - /** - * Internal: sub-network reports a sub-match has dissolved. - * - * Decrementing the count from 1 to 0 re-activates the outer token - * downstream, provided the token has been left-activated and is not - * already passing. The count is clamped at zero to tolerate idempotent - * retractions. - */ - onSubMatchDeactivate(_subToken, outerToken) { - const prev = this.#subMatchCount.get(outerToken) ?? 0; - if (prev === 0) { - return; // clamp — ignore spurious retracts - }; - const next = prev - 1; - if (next === 0) { - this.#subMatchCount.delete(outerToken); - } - else { - this.#subMatchCount.set(outerToken, next); - }; - if (next === 0 && - this.#outerTokens.has(outerToken) && - !this.#passingTokens.has(outerToken)) { - this.#passingTokens.add(outerToken); - for (const listener of this.#activateListeners) { - listener(outerToken); - } - } - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQyxVQUFVLENBQUM7WUFDdEI7UUFDRjtJQUNGO0lBRUE7Ozs7Ozs7O0lBUUEsb0JBQW9CLENBQUMsU0FBZ0IsRUFBRSxVQUFpQjtRQUN0RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQ3JELElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNkLE9BQU8sQ0FBQztRQUNWO1FBQ0EsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDckIsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQ3hDO2FBQU87WUFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO1FBQzNDO1FBRUEsSUFDRSxJQUFJLEtBQUssQ0FBQztZQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUNqQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUNwQztZQUNBLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUNuQyxLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtnQkFDOUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUN0QjtRQUNGO0lBQ0YiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9uY2MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBOY2NOb2RlICsgTmNjUGFydG5lciDigJQgc3ViY29uanVuY3Rpb24gKG5vdC1jb3VudC1jb25kaXRpb24pIG5lZ2F0aW9uLlxuICpcbiAqIFBlciBEb29yZW5ib3MgMTk5NSDCpzIuNi4zLiBVbmxpa2Ugc2ltcGxlIG5lZ2F0aW9uIChOT1Qgb2YgYSBzaW5nbGUgcGF0dGVybiksXG4gKiBOQ0MgbmVnYXRlcyBhbiBlbnRpcmUgY29uanVuY3Rpb24gb2YgTiBjb25kaXRpb25zOiB0aGUgb3V0ZXIgdG9rZW4gcGFzc2VzXG4gKiBvbmx5IGlmIHRoZXJlIGlzIE5PIGNvbWJpbmF0aW9uIG9mIGZhY3RzIHNhdGlzZnlpbmcgYWxsIE4gc3ViLWNvbmRpdGlvbnMuXG4gKlxuICogQXJjaGl0ZWN0dXJlOlxuICogICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gKiAgIOKUgiBvdXRlciBsZWZ0IGluIOKUguKUgOKUgOKUgOKUgOKUgOKUgOKWtiDilIIgICAgIE5jY05vZGUgICAgICDilILilIDilIDilIDilIDilIDilIDilrYg4pSCIGRvd25zdHJlYW0g4pSCXG4gKiAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAgICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4payXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBzdWItbWF0Y2ggbm90aWZpY2F0aW9uc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgICBOY2NQYXJ0bmVyICAg4pSCXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4payXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBmZWVkIGZyb21cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5DQyBzdWItbmV0d29yayB0ZXJtaW5hbFxuICpcbiAqIFRoZSBOQ0Mgc3ViLW5ldHdvcmsgKGEgY2hhaW4gb2Ygam9pbi9iZXRhIG5vZGVzIG1hdGNoaW5nIHRoZSBuZWdhdGVkXG4gKiBjb25qdW5jdGlvbikgaGFzIGl0cyB0ZXJtaW5hbCBmZWVkIGBwYXJ0bmVyLmxlZnRBY3RpdmF0ZShzdWJUb2tlbiwgb3V0ZXJUb2tlbilgXG4gKiB3aGVuZXZlciBhIGNvbXBsZXRlIHN1Yi1tYXRjaCBpcyBmb3JtZWQsIGFuZCBgbGVmdERlYWN0aXZhdGUoLi4uKWAgd2hlbmV2ZXJcbiAqIHRoYXQgc3ViLW1hdGNoIGRpc3NvbHZlcy4gVGhlIGBvdXRlclRva2VuYCBhcmd1bWVudCBpcyB0aGUgcGFyZW50IHBhcnRpYWxcbiAqIG1hdGNoIGZyb20gd2hpY2ggdGhlIHN1Yi1uZXR3b3JrIGV4dGVuZGVkIOKAlCB0aGlzIGlzIHRoZSB0b2tlbiB3aG9zZVxuICogcGFzcy9ibG9jayBzdGF0ZSBkZXBlbmRzIG9uIHRoZSBzdWItbWF0Y2ggY291bnQuXG4gKlxuICogVGhlIE5jY05vZGUgbWFpbnRhaW5zIGEgcmVmZXJlbmNlIGNvdW50IG9mIGFjdGl2ZSBzdWItbWF0Y2hlcyBwZXIgb3V0ZXJcbiAqIHRva2VuOiB3aGVuIHRoZSBjb3VudCB0cmFuc2l0aW9ucyAwIOKGkiAxIGFuIG91dGVyIHRva2VuIHRoYXQgd2FzIHBhc3NpbmdcbiAqIGRvd25zdHJlYW0gaXMgd2l0aGRyYXduOyB3aGVuIGl0IHRyYW5zaXRpb25zIDEg4oaSIDAgdGhlIHRva2VuIGlzXG4gKiByZS1hY3RpdmF0ZWQgZG93bnN0cmVhbSAocHJvdmlkZWQgdGhlIG91dGVyIHRva2VuIGlzIHN0aWxsIGtub3duKS5cbiAqL1xuaW1wb3J0IHR5cGUgeyBUb2tlbiB9IGZyb20gXCIuL2JldGEuanNcIjtcblxuLyoqIExpc3RlbmVyIGludm9rZWQgd2hlbiBhbiBvdXRlciB0b2tlbiBwYXNzZXMgZG93bnN0cmVhbS4gKi9cbnR5cGUgQWN0aXZhdGVMaXN0ZW5lciA9ICh0b2tlbjogVG9rZW4pID0+IHZvaWQ7XG4vKiogTGlzdGVuZXIgaW52b2tlZCB3aGVuIGFuIG91dGVyIHRva2VuIGlzIHdpdGhkcmF3biBkb3duc3RyZWFtLiAqL1xudHlwZSBEZWFjdGl2YXRlTGlzdGVuZXIgPSAodG9rZW46IFRva2VuKSA9PiB2b2lkO1xuXG4vKipcbiAqIFRlcm1pbmFsIG5vZGUgZm9yIHRoZSBOQ0Mgc3ViLW5ldHdvcmsuXG4gKlxuICogQ2FycmllcyBhIGJhY2stcmVmZXJlbmNlIHRvIGl0cyB7QGxpbmsgTmNjTm9kZX07IHRoZSBOY2NOb2RlIGlzIHNldFxuICogZXhhY3RseSBvbmNlIGJ5IHRoZSBOY2NOb2RlJ3MgY29uc3RydWN0b3IuIElmIHRoZSBwYXJ0bmVyIGlzIG5vdCB5ZXRcbiAqIHdpcmVkIHRvIGFuIE5jY05vZGUsIGFjdGl2YXRpb25zIGFyZSBzaWxlbnRseSBpZ25vcmVkIOKAlCB0aGlzIGtlZXBzXG4gKiBjb25zdHJ1Y3Rpb24gb3JkZXIgb2YgYG5ldyBOY2NQYXJ0bmVyKClgIC8gYG5ldyBOY2NOb2RlKHBhcnRuZXIpYFxuICogZmxleGlibGUgZm9yIHRlc3RzIGFuZCBidWlsZGVyIGNvZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBOY2NQYXJ0bmVyIHtcbiAgI25jYzogTmNjTm9kZSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBOb3RpZnkgdGhlIE5jY05vZGUgdGhhdCBhIG5ldyBjb21wbGV0ZSBzdWItbWF0Y2ggaGFzIGZvcm1lZCBmb3IgdGhlXG4gICAqIGdpdmVuIGBvdXRlclRva2VuYC4gQ2FsbGVkIGJ5IHRoZSBzdWItbmV0d29yaydzIHRlcm1pbmFsIHByb2R1Y3Rpb24uXG4gICAqL1xuICBsZWZ0QWN0aXZhdGUoc3ViVG9rZW46IFRva2VuLCBvdXRlclRva2VuOiBUb2tlbik6IHZvaWQge1xuICAgIHRoaXMuI25jYz8ub25TdWJNYXRjaEFjdGl2YXRlKHN1YlRva2VuLCBvdXRlclRva2VuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZnkgdGhlIE5jY05vZGUgdGhhdCBhIHByZXZpb3VzbHktZm9ybWVkIHN1Yi1tYXRjaCBoYXMgZGlzc29sdmVkLlxuICAgKi9cbiAgbGVmdERlYWN0aXZhdGUoc3ViVG9rZW46IFRva2VuLCBvdXRlclRva2VuOiBUb2tlbik6IHZvaWQge1xuICAgIHRoaXMuI25jYz8ub25TdWJNYXRjaERlYWN0aXZhdGUoc3ViVG9rZW4sIG91dGVyVG9rZW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmQgdGhpcyBwYXJ0bmVyIHRvIGl0cyBvd25pbmcgTmNjTm9kZS4gQ2FsbGVkIGJ5IHRoZSBOY2NOb2RlXG4gICAqIGNvbnN0cnVjdG9yLiBSZWJpbmRpbmcgaXMgaW50ZW50aW9uYWxseSBhIG5vLW9wIGFmdGVyIHRoZSBmaXJzdCBjYWxsIOKAlFxuICAgKiBhIHBhcnRuZXIgaXMgcGFpcmVkIHdpdGggZXhhY3RseSBvbmUgTmNjTm9kZSBmb3IgbGlmZS5cbiAgICovXG4gIHNldE5jYyhuY2M6IE5jY05vZGUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jbmNjID09PSBudWxsKSB7XG4gICAgICB0aGlzLiNuY2MgPSBuY2M7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQmV0YS1uZXR3b3JrIG5vZGUgaW1wbGVtZW50aW5nIHN1YmNvbmp1bmN0aW9uIG5lZ2F0aW9uLlxuICpcbiAqIERvd25zdHJlYW0gc3Vic2NyaWJlcnMgc2VlIGFuIG91dGVyIHRva2VuIGlmZiB0aGUgTkNDIHN1Yi1uZXR3b3JrIHlpZWxkc1xuICogemVybyBjb21wbGV0ZSBzdWItbWF0Y2hlcyBmb3IgaXQuIEFycml2YWxzIGFuZCBkZXBhcnR1cmVzIG9mIHN1Yi1tYXRjaGVzXG4gKiBhcmUgcmVwb3J0ZWQgdmlhIHRoZSBwYWlyZWQge0BsaW5rIE5jY1BhcnRuZXJ9LlxuICovXG5leHBvcnQgY2xhc3MgTmNjTm9kZSB7XG4gIHJlYWRvbmx5ICNhY3RpdmF0ZUxpc3RlbmVyczogQWN0aXZhdGVMaXN0ZW5lcltdID0gW107XG4gIHJlYWRvbmx5ICNkZWFjdGl2YXRlTGlzdGVuZXJzOiBEZWFjdGl2YXRlTGlzdGVuZXJbXSA9IFtdO1xuXG4gIC8qKiBBY3RpdmUgc3ViLW1hdGNoIGNvdW50IHBlciBvdXRlciB0b2tlbiAoYWJzZW50IGVudHJ5IOKJoSAwKS4gKi9cbiAgcmVhZG9ubHkgI3N1Yk1hdGNoQ291bnQgPSBuZXcgTWFwPFRva2VuLCBudW1iZXI+KCk7XG4gIC8qKiBPdXRlciB0b2tlbnMgY3VycmVudGx5IHByb3BhZ2F0ZWQgZG93bnN0cmVhbS4gKi9cbiAgcmVhZG9ubHkgI3Bhc3NpbmdUb2tlbnMgPSBuZXcgU2V0PFRva2VuPigpO1xuICAvKiogQWxsIG91dGVyIHRva2VucyBsZWZ0LWFjdGl2YXRlZCBhbmQgbm90IHlldCBsZWZ0LWRlYWN0aXZhdGVkLiAqL1xuICByZWFkb25seSAjb3V0ZXJUb2tlbnMgPSBuZXcgU2V0PFRva2VuPigpO1xuXG4gIGNvbnN0cnVjdG9yKHBhcnRuZXI6IE5jY1BhcnRuZXIpIHtcbiAgICBwYXJ0bmVyLnNldE5jYyh0aGlzKTtcbiAgfVxuXG4gIC8qKiBTdWJzY3JpYmUgdG8gZG93bnN0cmVhbSBhY3RpdmF0aW9ucyAodG9rZW5zIHBhc3NpbmcgdGhlIE5DQyBmaWx0ZXIpLiAqL1xuICBhZGREb3duc3RyZWFtQWN0aXZhdGUobGlzdGVuZXI6IEFjdGl2YXRlTGlzdGVuZXIpOiB2b2lkIHtcbiAgICB0aGlzLiNhY3RpdmF0ZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKiBTdWJzY3JpYmUgdG8gZG93bnN0cmVhbSBkZWFjdGl2YXRpb25zICh0b2tlbnMgd2l0aGRyYXduKS4gKi9cbiAgYWRkRG93bnN0cmVhbURlYWN0aXZhdGUobGlzdGVuZXI6IERlYWN0aXZhdGVMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuI2RlYWN0aXZhdGVMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICAvKipcbiAgICogQWNjZXB0IGFuIG91dGVyIHBhcnRpYWwgbWF0Y2guXG4gICAqXG4gICAqIFRoZSB0b2tlbiBpcyBwYXNzZWQgZG93bnN0cmVhbSBpbW1lZGlhdGVseSB3aGVuIHRoZSBzdWItbWF0Y2ggY291bnRcbiAgICogZm9yIGl0IGlzIHplcm8uIElmIGEgc3ViLW1hdGNoIGFscmVhZHkgZXhpc3RzIChlLmcuIHRoZSBzdWItbmV0d29ya1xuICAgKiBhY3RpdmF0ZWQgYmVmb3JlIHRoZSBvdXRlciBsZWZ0IGlucHV0IGRpZCksIHRoZSB0b2tlbiBpcyB0cmFja2VkIGJ1dFxuICAgKiB3aXRoaGVsZCBmcm9tIGRvd25zdHJlYW0gdW50aWwgdGhlIGNvdW50IHJldHVybnMgdG8gemVyby5cbiAgICovXG4gIGxlZnRBY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICB0aGlzLiNvdXRlclRva2Vucy5hZGQodG9rZW4pO1xuICAgIGNvbnN0IGNvdW50ID0gdGhpcy4jc3ViTWF0Y2hDb3VudC5nZXQodG9rZW4pID8/IDA7XG5cbiAgICBpZiAoY291bnQgPT09IDApIHtcbiAgICAgIHRoaXMuI3Bhc3NpbmdUb2tlbnMuYWRkKHRva2VuKTtcbiAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy4jYWN0aXZhdGVMaXN0ZW5lcnMpIHtcbiAgICAgICAgbGlzdGVuZXIodG9rZW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaXRoZHJhdyBhbiBvdXRlciBwYXJ0aWFsIG1hdGNoLlxuICAgKlxuICAgKiBJZiB0aGUgdG9rZW4gaXMgY3VycmVudGx5IHBhc3NpbmcsIGZpcmUgZG93bnN0cmVhbS1kZWFjdGl2YXRlOyBvdGhlcndpc2VcbiAgICogc2lsZW50bHkgZHJvcCBpdC4gVGhlIHN1Yi1tYXRjaCBjb3VudCBpcyBkaXNjYXJkZWQgc28gc3RhbGUgc3ViLW1hdGNoXG4gICAqIHJldHJhY3Rpb25zIGFmdGVyIHRoaXMgcG9pbnQgYmVjb21lIG5vLW9wcyBmb3IgdGhpcyB0b2tlbi5cbiAgICovXG4gIGxlZnREZWFjdGl2YXRlKHRva2VuOiBUb2tlbik6IHZvaWQge1xuICAgIHRoaXMuI291dGVyVG9rZW5zLmRlbGV0ZSh0b2tlbik7XG4gICAgdGhpcy4jc3ViTWF0Y2hDb3VudC5kZWxldGUodG9rZW4pO1xuXG4gICAgaWYgKHRoaXMuI3Bhc3NpbmdUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgdGhpcy4jcGFzc2luZ1Rva2Vucy5kZWxldGUodG9rZW4pO1xuICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNkZWFjdGl2YXRlTGlzdGVuZXJzKSB7XG4gICAgICAgIGxpc3RlbmVyKHRva2VuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWw6IHN1Yi1uZXR3b3JrIHJlcG9ydHMgYSBuZXcgY29tcGxldGUgc3ViLW1hdGNoLlxuICAgKlxuICAgKiBJbmNyZW1lbnRpbmcgdGhlIGNvdW50IGZyb20gMCB0byAxIGJsb2NrcyB0aGUgb3V0ZXIgdG9rZW4gaWYgaXQgaXNcbiAgICogY3VycmVudGx5IHBhc3NpbmcuIFRoZSBgX3N1YlRva2VuYCBhcmd1bWVudCBpcyB1bnVzZWQgYnkgdGhlXG4gICAqIGNvdW50LWJhc2VkIHNjaGVtZSBidXQgcmV0YWluZWQgaW4gdGhlIHNpZ25hdHVyZSBwZXIgRG9vcmVuYm9zIHNvIHRoYXRcbiAgICogbW9yZSBlbGFib3JhdGUgdmFyaWFudHMgKGUuZy4gcHJlc2VydmluZyBtYXRjaGVkIHN1Yi10b2tlbnMgZm9yXG4gICAqIGV4cGxhbmF0aW9uKSBjYW4gc2xvdCBpbiB3aXRob3V0IGNoYW5naW5nIHRoZSBwYXJ0bmVyIHByb3RvY29sLlxuICAgKi9cbiAgb25TdWJNYXRjaEFjdGl2YXRlKF9zdWJUb2tlbjogVG9rZW4sIG91dGVyVG9rZW46IFRva2VuKTogdm9pZCB7XG4gICAgY29uc3QgcHJldiA9IHRoaXMuI3N1Yk1hdGNoQ291bnQuZ2V0KG91dGVyVG9rZW4pID8/IDA7XG4gICAgdGhpcy4jc3ViTWF0Y2hDb3VudC5zZXQob3V0ZXJUb2tlbiwgcHJldiArIDEpO1xuXG4gICAgaWYgKHByZXYgPT09IDAgJiYgdGhpcy4jcGFzc2luZ1Rva2Vucy5oYXMob3V0ZXJUb2tlbikpIHtcbiAgICAgIHRoaXMuI3Bhc3NpbmdUb2tlbnMuZGVsZXRlKG91dGVyVG9rZW4pO1xuICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNkZWFjdGl2YXRlTGlzdGVuZXJzKSB7XG4gICAgICAgIGxpc3RlbmVyKG91dGVyVG9rZW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbDogc3ViLW5ldHdvcmsgcmVwb3J0cyBhIHN1Yi1tYXRjaCBoYXMgZGlzc29sdmVkLlxuICAgKlxuICAgKiBEZWNyZW1lbnRpbmcgdGhlIGNvdW50IGZyb20gMSB0byAwIHJlLWFjdGl2YXRlcyB0aGUgb3V0ZXIgdG9rZW5cbiAgICogZG93bnN0cmVhbSwgcHJvdmlkZWQgdGhlIHRva2VuIGhhcyBiZWVuIGxlZnQtYWN0aXZhdGVkIGFuZCBpcyBub3RcbiAgICogYWxyZWFkeSBwYXNzaW5nLiBUaGUgY291bnQgaXMgY2xhbXBlZCBhdCB6ZXJvIHRvIHRvbGVyYXRlIGlkZW1wb3RlbnRcbiAgICogcmV0cmFjdGlvbnMuXG4gICAqL1xuICBvblN1Yk1hdGNoRGVhY3RpdmF0ZShfc3ViVG9rZW46IFRva2VuLCBvdXRlclRva2VuOiBUb2tlbik6IHZvaWQge1xuICAgIGNvbnN0IHByZXYgPSB0aGlzLiNzdWJNYXRjaENvdW50LmdldChvdXRlclRva2VuKSA/PyAwO1xuICAgIGlmIChwcmV2ID09PSAwKSB7XG4gICAgICByZXR1cm47IC8vIGNsYW1wIOKAlCBpZ25vcmUgc3B1cmlvdXMgcmV0cmFjdHNcbiAgICB9XG4gICAgY29uc3QgbmV4dCA9IHByZXYgLSAxO1xuICAgIGlmIChuZXh0ID09PSAwKSB7XG4gICAgICB0aGlzLiNzdWJNYXRjaENvdW50LmRlbGV0ZShvdXRlclRva2VuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jc3ViTWF0Y2hDb3VudC5zZXQob3V0ZXJUb2tlbiwgbmV4dCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgbmV4dCA9PT0gMCAmJlxuICAgICAgdGhpcy4jb3V0ZXJUb2tlbnMuaGFzKG91dGVyVG9rZW4pICYmXG4gICAgICAhdGhpcy4jcGFzc2luZ1Rva2Vucy5oYXMob3V0ZXJUb2tlbilcbiAgICApIHtcbiAgICAgIHRoaXMuI3Bhc3NpbmdUb2tlbnMuYWRkKG91dGVyVG9rZW4pO1xuICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNhY3RpdmF0ZUxpc3RlbmVycykge1xuICAgICAgICBsaXN0ZW5lcihvdXRlclRva2VuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9yZXRlL2Rpc3QvbmNjLmpzIn0= diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/77f2a033e44cfb527d5d543b7e9d24fd0e5e851a b/KMr2_dqTOvh2R-Vg1E6cO/ssr/77f2a033e44cfb527d5d543b7e9d24fd0e5e851a deleted file mode 100644 index 418726f..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/77f2a033e44cfb527d5d543b7e9d24fd0e5e851a +++ /dev/null @@ -1,97 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("vitest", {"importedNames":["afterEach","beforeEach","describe","expect","it","vi"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/reconnect.ts", {"importedNames":["ReconnectManager"]}); -(0,__vite_ssr_import_0__.describe)("ReconnectManager", () => { - let mgr; - (0,__vite_ssr_import_0__.beforeEach)(() => { - mgr = new __vite_ssr_import_1__.ReconnectManager(); - __vite_ssr_import_0__.vi.useFakeTimers(); - }); - (0,__vite_ssr_import_0__.afterEach)(() => { - mgr.clearAll(); - __vite_ssr_import_0__.vi.useRealTimers(); - }); - (0,__vite_ssr_import_0__.it)("startGrace followed by isPending returns true", () => { - mgr.startGrace("tok-a", 1e3, () => { - }); - (0,__vite_ssr_import_0__.expect)(mgr.isPending("tok-a")).toBe(true); - (0,__vite_ssr_import_0__.expect)(mgr.isPending("tok-b")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("cancelGrace within the window returns buffered deltas and clears isPending", () => { - const onExpire = __vite_ssr_import_0__.vi.fn(); - mgr.startGrace("tok-a", 1e3, onExpire); - mgr.bufferDelta("tok-a", 1, { move: "e2e4" }); - mgr.bufferDelta("tok-a", 2, { move: "d2d4" }); - const deltas = mgr.cancelGrace("tok-a"); - (0,__vite_ssr_import_0__.expect)(deltas).toEqual([ - { seq: 1, payload: { move: "e2e4" } }, - { seq: 2, payload: { move: "d2d4" } } - ]); - (0,__vite_ssr_import_0__.expect)(mgr.isPending("tok-a")).toBe(false); - __vite_ssr_import_0__.vi.advanceTimersByTime(1e4); - (0,__vite_ssr_import_0__.expect)(onExpire).not.toHaveBeenCalled(); - }); - (0,__vite_ssr_import_0__.it)("cancelGrace on an unknown token returns undefined", () => { - (0,__vite_ssr_import_0__.expect)(mgr.cancelGrace("never-seen")).toBeUndefined(); - }); - (0,__vite_ssr_import_0__.it)("timer fires onExpire and removes the pending entry", () => { - const onExpire = __vite_ssr_import_0__.vi.fn(); - mgr.startGrace("tok-a", 50, onExpire); - (0,__vite_ssr_import_0__.expect)(mgr.isPending("tok-a")).toBe(true); - __vite_ssr_import_0__.vi.advanceTimersByTime(60); - (0,__vite_ssr_import_0__.expect)(onExpire).toHaveBeenCalledTimes(1); - (0,__vite_ssr_import_0__.expect)(mgr.isPending("tok-a")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("bufferDelta on a non-pending token is a silent no-op", () => { - mgr.bufferDelta("tok-a", 1, { anything: true }); - (0,__vite_ssr_import_0__.expect)(mgr.isPending("tok-a")).toBe(false); - mgr.startGrace("tok-a", 1e3, () => { - }); - (0,__vite_ssr_import_0__.expect)(mgr.cancelGrace("tok-a")).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("bufferDelta accumulates in insertion order", () => { - mgr.startGrace("tok-a", 1e3, () => { - }); - for (let i = 1; i <= 5; i++) { - mgr.bufferDelta("tok-a", i, { step: i }); - }; - const deltas = mgr.cancelGrace("tok-a"); - (0,__vite_ssr_import_0__.expect)(deltas?.map((d) => d.seq)).toEqual([1, 2, 3, 4, 5]); - }); - (0,__vite_ssr_import_0__.it)("starting a second grace for the same token replaces the first timer", () => { - const firstExpire = __vite_ssr_import_0__.vi.fn(); - const secondExpire = __vite_ssr_import_0__.vi.fn(); - mgr.startGrace("tok-a", 100, firstExpire); - mgr.bufferDelta("tok-a", 1, { a: 1 }); - mgr.startGrace("tok-a", 100, secondExpire); - __vite_ssr_import_0__.vi.advanceTimersByTime(150); - (0,__vite_ssr_import_0__.expect)(firstExpire).not.toHaveBeenCalled(); - (0,__vite_ssr_import_0__.expect)(secondExpire).toHaveBeenCalledTimes(1); - }); - (0,__vite_ssr_import_0__.it)("multiple tokens have independent lifecycles", () => { - const aExpire = __vite_ssr_import_0__.vi.fn(); - const bExpire = __vite_ssr_import_0__.vi.fn(); - mgr.startGrace("tok-a", 100, aExpire); - mgr.startGrace("tok-b", 200, bExpire); - mgr.bufferDelta("tok-a", 1, { for: "a" }); - mgr.bufferDelta("tok-b", 1, { for: "b" }); - const aDeltas = mgr.cancelGrace("tok-a"); - (0,__vite_ssr_import_0__.expect)(aDeltas).toEqual([{ seq: 1, payload: { for: "a" } }]); - (0,__vite_ssr_import_0__.expect)(mgr.isPending("tok-b")).toBe(true); - __vite_ssr_import_0__.vi.advanceTimersByTime(250); - (0,__vite_ssr_import_0__.expect)(aExpire).not.toHaveBeenCalled(); - (0,__vite_ssr_import_0__.expect)(bExpire).toHaveBeenCalledTimes(1); - }); - (0,__vite_ssr_import_0__.it)("clearAll stops all pending timers without firing callbacks", () => { - const onExpire = __vite_ssr_import_0__.vi.fn(); - mgr.startGrace("tok-a", 100, onExpire); - mgr.startGrace("tok-b", 100, onExpire); - mgr.clearAll(); - __vite_ssr_import_0__.vi.advanceTimersByTime(1e3); - (0,__vite_ssr_import_0__.expect)(onExpire).not.toHaveBeenCalled(); - (0,__vite_ssr_import_0__.expect)(mgr.isPending("tok-a")).toBe(false); - (0,__vite_ssr_import_0__.expect)(mgr.isPending("tok-b")).toBe(false); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SUFBSSxVQUFVLE9BQU8sQ0FBQyxFQUFFLEtBQUssS0FBSztBQUN6QyxxQ0FBTyxJQUFJLFVBQVUsT0FBTyxDQUFDLEVBQUUsS0FBSyxLQUFLO0FBQUEsRUFDM0MsQ0FBQztBQUNILENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInJlY29ubmVjdC50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFVuaXQgdGVzdHMgZm9yIFJlY29ubmVjdE1hbmFnZXIgKFA0LjcpLlxuLy9cbi8vIFRoZXNlIHRlc3RzIGV4ZXJjaXNlIHRoZSBtYW5hZ2VyIGluIGlzb2xhdGlvbiDigJQgbm8gV2ViU29ja2V0cywgbm9cbi8vIFJvb21SZWdpc3RyeS4gUmVhbCB3YWxsLWNsb2NrIHRpbWluZyB3b3VsZCBtYWtlIHRoZSBcImdyYWNlIGV4cGlyZXNcIlxuLy8gY2FzZSBlaXRoZXIgc2xvdyBvciBmbGFreSwgc28gd2UgdXNlIHZpdGVzdCdzIGZha2UtdGltZXIgZmFjaWxpdHkuXG5pbXBvcnQgeyBhZnRlckVhY2gsIGJlZm9yZUVhY2gsIGRlc2NyaWJlLCBleHBlY3QsIGl0LCB2aSB9IGZyb20gXCJ2aXRlc3RcIjtcblxuaW1wb3J0IHsgUmVjb25uZWN0TWFuYWdlciB9IGZyb20gXCIuL3JlY29ubmVjdC5qc1wiO1xuXG5kZXNjcmliZShcIlJlY29ubmVjdE1hbmFnZXJcIiwgKCkgPT4ge1xuICBsZXQgbWdyOiBSZWNvbm5lY3RNYW5hZ2VyO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG1nciA9IG5ldyBSZWNvbm5lY3RNYW5hZ2VyKCk7XG4gICAgLy8gRmFrZSB0aW1lcnMgc28gYHNldFRpbWVvdXRgIG5ldmVyIHJlYWxseSBmaXJlcyDigJQgd2UgYWR2YW5jZSB0aGVcbiAgICAvLyBjbG9jayBleHBsaWNpdGx5IHZpYSB2aS5hZHZhbmNlVGltZXJzQnlUaW1lLlxuICAgIHZpLnVzZUZha2VUaW1lcnMoKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBtZ3IuY2xlYXJBbGwoKTtcbiAgICB2aS51c2VSZWFsVGltZXJzKCk7XG4gIH0pO1xuXG4gIGl0KFwic3RhcnRHcmFjZSBmb2xsb3dlZCBieSBpc1BlbmRpbmcgcmV0dXJucyB0cnVlXCIsICgpID0+IHtcbiAgICBtZ3Iuc3RhcnRHcmFjZShcInRvay1hXCIsIDFfMDAwLCAoKSA9PiB7fSk7XG4gICAgZXhwZWN0KG1nci5pc1BlbmRpbmcoXCJ0b2stYVwiKSkudG9CZSh0cnVlKTtcbiAgICAvLyBBIGRpZmZlcmVudCB0b2tlbiBpcyBub3QgcGVuZGluZyDigJQgc2NvcGluZyBpcyBzdHJpY3QuXG4gICAgZXhwZWN0KG1nci5pc1BlbmRpbmcoXCJ0b2stYlwiKSkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwiY2FuY2VsR3JhY2Ugd2l0aGluIHRoZSB3aW5kb3cgcmV0dXJucyBidWZmZXJlZCBkZWx0YXMgYW5kIGNsZWFycyBpc1BlbmRpbmdcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG9uRXhwaXJlID0gdmkuZm4oKTtcbiAgICBtZ3Iuc3RhcnRHcmFjZShcInRvay1hXCIsIDFfMDAwLCBvbkV4cGlyZSk7XG4gICAgbWdyLmJ1ZmZlckRlbHRhKFwidG9rLWFcIiwgMSwgeyBtb3ZlOiBcImUyZTRcIiB9KTtcbiAgICBtZ3IuYnVmZmVyRGVsdGEoXCJ0b2stYVwiLCAyLCB7IG1vdmU6IFwiZDJkNFwiIH0pO1xuXG4gICAgY29uc3QgZGVsdGFzID0gbWdyLmNhbmNlbEdyYWNlKFwidG9rLWFcIik7XG4gICAgZXhwZWN0KGRlbHRhcykudG9FcXVhbChbXG4gICAgICB7IHNlcTogMSwgcGF5bG9hZDogeyBtb3ZlOiBcImUyZTRcIiB9IH0sXG4gICAgICB7IHNlcTogMiwgcGF5bG9hZDogeyBtb3ZlOiBcImQyZDRcIiB9IH0sXG4gICAgXSk7XG4gICAgZXhwZWN0KG1nci5pc1BlbmRpbmcoXCJ0b2stYVwiKSkudG9CZShmYWxzZSk7XG4gICAgLy8gQ3J1Y2lhbGx5LCBjYW5jZWxsaW5nIG11c3QgTk9UIHRyaWdnZXIgdGhlIGV4cGlyeSBjYWxsYmFjay5cbiAgICAvLyBBZHZhbmNlIHdlbGwgcGFzdCB0aGUgb3JpZ2luYWwgZ3JhY2UgcGVyaW9kIHRvIHByb3ZlIHRoZVxuICAgIC8vIHRpbWVyIHdhcyBjbGVhcmVkLlxuICAgIHZpLmFkdmFuY2VUaW1lcnNCeVRpbWUoMTBfMDAwKTtcbiAgICBleHBlY3Qob25FeHBpcmUpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xuXG4gIGl0KFwiY2FuY2VsR3JhY2Ugb24gYW4gdW5rbm93biB0b2tlbiByZXR1cm5zIHVuZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KG1nci5jYW5jZWxHcmFjZShcIm5ldmVyLXNlZW5cIikpLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJ0aW1lciBmaXJlcyBvbkV4cGlyZSBhbmQgcmVtb3ZlcyB0aGUgcGVuZGluZyBlbnRyeVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgb25FeHBpcmUgPSB2aS5mbigpO1xuICAgIG1nci5zdGFydEdyYWNlKFwidG9rLWFcIiwgNTAsIG9uRXhwaXJlKTtcbiAgICBleHBlY3QobWdyLmlzUGVuZGluZyhcInRvay1hXCIpKS50b0JlKHRydWUpO1xuXG4gICAgLy8gQWR2YW5jZSBwYXN0IHRoZSBncmFjZSBwZXJpb2Qg4oCUIHRoZSBzY2hlZHVsZWQgY2FsbGJhY2sgbXVzdCBmaXJlXG4gICAgLy8gYW5kIHRoZSBtYW5hZ2VyIG11c3QgZm9yZ2V0IHRoZSBlbnRyeS5cbiAgICB2aS5hZHZhbmNlVGltZXJzQnlUaW1lKDYwKTtcbiAgICBleHBlY3Qob25FeHBpcmUpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICBleHBlY3QobWdyLmlzUGVuZGluZyhcInRvay1hXCIpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJidWZmZXJEZWx0YSBvbiBhIG5vbi1wZW5kaW5nIHRva2VuIGlzIGEgc2lsZW50IG5vLW9wXCIsICgpID0+IHtcbiAgICAvLyBObyBncmFjZSBzdGFydGVkIOKAlCBidWZmZXJpbmcgc2hvdWxkIG5vdCB0aHJvdyBhbmQgc2hvdWxkIG5vdFxuICAgIC8vIGNyZWF0ZSBhbiBpbXBsaWNpdCBwZW5kaW5nIGVudHJ5LlxuICAgIG1nci5idWZmZXJEZWx0YShcInRvay1hXCIsIDEsIHsgYW55dGhpbmc6IHRydWUgfSk7XG4gICAgZXhwZWN0KG1nci5pc1BlbmRpbmcoXCJ0b2stYVwiKSkudG9CZShmYWxzZSk7XG4gICAgLy8gTm93IHN0YXJ0IGEgZ3JhY2UgYW5kIGNvbmZpcm0gbm90aGluZyB3YXMgc3VycmVwdGl0aW91c2x5XG4gICAgLy8gcmV0YWluZWQgZnJvbSB0aGUgZWFybGllciBjYWxsLlxuICAgIG1nci5zdGFydEdyYWNlKFwidG9rLWFcIiwgMV8wMDAsICgpID0+IHt9KTtcbiAgICBleHBlY3QobWdyLmNhbmNlbEdyYWNlKFwidG9rLWFcIikpLnRvRXF1YWwoW10pO1xuICB9KTtcblxuICBpdChcImJ1ZmZlckRlbHRhIGFjY3VtdWxhdGVzIGluIGluc2VydGlvbiBvcmRlclwiLCAoKSA9PiB7XG4gICAgbWdyLnN0YXJ0R3JhY2UoXCJ0b2stYVwiLCAxXzAwMCwgKCkgPT4ge30pO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDU7IGkrKykge1xuICAgICAgbWdyLmJ1ZmZlckRlbHRhKFwidG9rLWFcIiwgaSwgeyBzdGVwOiBpIH0pO1xuICAgIH1cbiAgICBjb25zdCBkZWx0YXMgPSBtZ3IuY2FuY2VsR3JhY2UoXCJ0b2stYVwiKTtcbiAgICBleHBlY3QoZGVsdGFzPy5tYXAoKGQpID0+IGQuc2VxKSkudG9FcXVhbChbMSwgMiwgMywgNCwgNV0pO1xuICB9KTtcblxuICBpdChcInN0YXJ0aW5nIGEgc2Vjb25kIGdyYWNlIGZvciB0aGUgc2FtZSB0b2tlbiByZXBsYWNlcyB0aGUgZmlyc3QgdGltZXJcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGZpcnN0RXhwaXJlID0gdmkuZm4oKTtcbiAgICBjb25zdCBzZWNvbmRFeHBpcmUgPSB2aS5mbigpO1xuICAgIG1nci5zdGFydEdyYWNlKFwidG9rLWFcIiwgMTAwLCBmaXJzdEV4cGlyZSk7XG4gICAgbWdyLmJ1ZmZlckRlbHRhKFwidG9rLWFcIiwgMSwgeyBhOiAxIH0pO1xuICAgIC8vIFJlc3RhcnQ6IHByZXZpb3VzIGJ1ZmZlcmVkIGRlbHRhcyBhcmUgZHJvcHBlZCAodGhlIGNsaWVudCBpc1xuICAgIC8vIGVmZmVjdGl2ZWx5IHN0YXJ0aW5nIGEgYnJhbmQtbmV3IGdyYWNlIHdpbmRvdykuXG4gICAgbWdyLnN0YXJ0R3JhY2UoXCJ0b2stYVwiLCAxMDAsIHNlY29uZEV4cGlyZSk7XG4gICAgdmkuYWR2YW5jZVRpbWVyc0J5VGltZSgxNTApO1xuICAgIGV4cGVjdChmaXJzdEV4cGlyZSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICBleHBlY3Qoc2Vjb25kRXhwaXJlKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gIH0pO1xuXG4gIGl0KFwibXVsdGlwbGUgdG9rZW5zIGhhdmUgaW5kZXBlbmRlbnQgbGlmZWN5Y2xlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgYUV4cGlyZSA9IHZpLmZuKCk7XG4gICAgY29uc3QgYkV4cGlyZSA9IHZpLmZuKCk7XG4gICAgbWdyLnN0YXJ0R3JhY2UoXCJ0b2stYVwiLCAxMDAsIGFFeHBpcmUpO1xuICAgIG1nci5zdGFydEdyYWNlKFwidG9rLWJcIiwgMjAwLCBiRXhwaXJlKTtcbiAgICBtZ3IuYnVmZmVyRGVsdGEoXCJ0b2stYVwiLCAxLCB7IGZvcjogXCJhXCIgfSk7XG4gICAgbWdyLmJ1ZmZlckRlbHRhKFwidG9rLWJcIiwgMSwgeyBmb3I6IFwiYlwiIH0pO1xuXG4gICAgLy8gQ2FuY2VsIEEgYmVmb3JlIGl0IGV4cGlyZXM7IEIgc2hvdWxkIGJlIHVudG91Y2hlZC5cbiAgICBjb25zdCBhRGVsdGFzID0gbWdyLmNhbmNlbEdyYWNlKFwidG9rLWFcIik7XG4gICAgZXhwZWN0KGFEZWx0YXMpLnRvRXF1YWwoW3sgc2VxOiAxLCBwYXlsb2FkOiB7IGZvcjogXCJhXCIgfSB9XSk7XG4gICAgZXhwZWN0KG1nci5pc1BlbmRpbmcoXCJ0b2stYlwiKSkudG9CZSh0cnVlKTtcblxuICAgIHZpLmFkdmFuY2VUaW1lcnNCeVRpbWUoMjUwKTtcbiAgICBleHBlY3QoYUV4cGlyZSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICBleHBlY3QoYkV4cGlyZSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICB9KTtcblxuICBpdChcImNsZWFyQWxsIHN0b3BzIGFsbCBwZW5kaW5nIHRpbWVycyB3aXRob3V0IGZpcmluZyBjYWxsYmFja3NcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG9uRXhwaXJlID0gdmkuZm4oKTtcbiAgICBtZ3Iuc3RhcnRHcmFjZShcInRvay1hXCIsIDEwMCwgb25FeHBpcmUpO1xuICAgIG1nci5zdGFydEdyYWNlKFwidG9rLWJcIiwgMTAwLCBvbkV4cGlyZSk7XG4gICAgbWdyLmNsZWFyQWxsKCk7XG4gICAgdmkuYWR2YW5jZVRpbWVyc0J5VGltZSgxXzAwMCk7XG4gICAgZXhwZWN0KG9uRXhwaXJlKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIGV4cGVjdChtZ3IuaXNQZW5kaW5nKFwidG9rLWFcIikpLnRvQmUoZmFsc2UpO1xuICAgIGV4cGVjdChtZ3IuaXNQZW5kaW5nKFwidG9rLWJcIikpLnRvQmUoZmFsc2UpO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3NlcnZlci9zcmMvcmVjb25uZWN0LnRlc3QudHMifQ== diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/7a3d1c5ff9eefc26669a903d4709e2bafd93dd65 b/KMr2_dqTOvh2R-Vg1E6cO/ssr/7a3d1c5ff9eefc26669a903d4709e2bafd93dd65 deleted file mode 100644 index 05d0152..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/7a3d1c5ff9eefc26669a903d4709e2bafd93dd65 +++ /dev/null @@ -1,646 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "MoveCancelledError", { enumerable: true, configurable: true, get(){ try { return MoveCancelledError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "ChessEngine", { enumerable: true, configurable: true, get(){ try { return ChessEngine } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/index.js", {"importedNames":["Session"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/schema.ts", {"importedNames":["GAME_ENTITY","PRESET_STATE_ENTITY"]}); - - - -const __vite_ssr_import_2__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/starting-position.ts", {"importedNames":["applyLayout","CLASSIC_LAYOUT"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/rules/castling.ts", {"importedNames":["getCastlingMoves","applyCastlingMove"]}); - - - -const __vite_ssr_import_4__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/rules/enpassant.ts", {"importedNames":["getEnPassantMoves","setEnPassantTarget","clearEnPassantTarget"]}); - - - - -const __vite_ssr_import_5__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/rules/promotion.ts", {"importedNames":["isPromotionMove","applyPromotion","getPromotionMoves"]}); - - - - -const __vite_ssr_import_6__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/rules/check.ts", {"importedNames":["filterSelfCheckMoves","isInCheck","isSquareAttacked"]}); - - - - -const __vite_ssr_import_7__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/rules/checkmate.ts", {"importedNames":["isCheckmate"]}); -const __vite_ssr_import_8__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/rules/stalemate.ts", {"importedNames":["isStalemate"]}); -const __vite_ssr_import_9__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/rules/insufficient.ts", {"importedNames":["isInsufficientMaterial"]}); -const __vite_ssr_import_10__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/rules/draws.ts", {"importedNames":["isFiftyMoveDraw","updateHalfmoveClock","recordPosition","isThreefoldRepetition"]}); - - - - - -const __vite_ssr_import_11__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/rules/capture.ts", {"importedNames":["CORE_PIECE_ATTRS"]}); -const __vite_ssr_import_12__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/presets/active-set.ts", {"importedNames":["ActivePresetSet"]}); - - -const __vite_ssr_import_13__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/presets/registry.ts", {"importedNames":["PRESET_REGISTRY"]}); -const __vite_ssr_import_14__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/presets/piece-type-registry.ts", {"importedNames":["PIECE_TYPE_REGISTRY"]}); -const __vite_ssr_import_15__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/presets/index.ts"); -function lookupMoveGenerator(type) { - const def = __vite_ssr_import_14__.PIECE_TYPE_REGISTRY.get(type); - return def?.moveGenerator ?? null; -} -const PRESET_STATE_ATTR_PREFIX = "__preset__/"; -class MoveCancelledError extends Error { - presetId; - constructor(message, presetId) { - super(message); - this.name = "MoveCancelledError"; - this.presetId = presetId; - } -}; -class PresetStateImpl { - #session; - #prefix; - constructor(session, presetId) { - this.#session = session; - this.#prefix = `${PRESET_STATE_ATTR_PREFIX}${presetId}/`; - } - #attrOf(key) { - return `${this.#prefix}${key}`; - } - get(key) { - const attr = this.#attrOf(key); - if (!this.#session.contains((0,__vite_ssr_import_1__.PRESET_STATE_ENTITY), attr)) return void 0; - return this.#session.get((0,__vite_ssr_import_1__.PRESET_STATE_ENTITY), attr); - } - set(key, value) { - this.#session.insert( - (0,__vite_ssr_import_1__.PRESET_STATE_ENTITY), - this.#attrOf(key), - value - ); - } - delete(key) { - const attr = this.#attrOf(key); - if (!this.#session.contains((0,__vite_ssr_import_1__.PRESET_STATE_ENTITY), attr)) return false; - this.#session.retract((0,__vite_ssr_import_1__.PRESET_STATE_ENTITY), attr); - return true; - } - has(key) { - return this.#session.contains((0,__vite_ssr_import_1__.PRESET_STATE_ENTITY), this.#attrOf(key)); - } - all() { - const result = {}; - for (const f of this.#session.allFacts()) { - if (f.id !== __vite_ssr_import_1__.PRESET_STATE_ENTITY) continue; - if (!f.attr.startsWith(this.#prefix)) continue; - const key = f.attr.slice(this.#prefix.length); - result[key] = f.value; - }; - return result; - } -} -class ChessEngine { - session; - /** - * Per-engine preset activation. Every engine owns its own set so two - * concurrent games (most importantly: the authoritative server session - * and a client's predicted clone) can hold different rule sets without - * a shared-module dance. - * - * Mutable by design — UIs and servers replace its contents via - * `.replaceAll()`. The engine reads it fresh on every call to - * `getAllLegalMoves()` so mid-game toggles take effect on the next - * move calculation with no reset. - */ - activePresets; - /** - * Chronological log of every successful applyMove. Callers consume - * this read-only for move-history UIs, PGN export, analysis. Writing - * to it is a private concern of applyMove. - * - * Unbounded — games are short-lived enough that we don't need a - * ring buffer. If that ever changes, add a `maxLogSize` option. - */ - #moveLog = []; - /** Read-only view of the move log. */ - get moveLog() { - return this.#moveLog; - } - /** - * Active visual-effect subscribers. Presets call `engine.emitEffect` - * to push effects; UI layers call `subscribeEffects` to listen. - * - * Using a Set (not an Array) so unsubscribe is O(1) and insertion - * order doesn't matter (effects are fire-and-forget — we iterate - * the full set on every emit). - */ - #effectHandlers = /* @__PURE__ */ new Set(); - /** - * Emit a visual effect to all subscribers. Fire-and-forget — - * handlers that throw are isolated (caught) so one bad subscriber - * doesn't break others. - * - * Safe to call from inside any preset hook. The engine does NOT - * persist effects; they're pure UI signals. If no subscribers are - * attached, the call is essentially a no-op. - */ - emitEffect(effect) { - for (const handler of this.#effectHandlers) { - try { - handler(effect); - } catch (err) { - console.error("VisualEffect handler threw:", err); - } - } - } - /** - * Register a subscriber for visual effects. Returns a function that - * removes the subscription. Typically called from React `useEffect` - * on component mount, and the return is returned as the cleanup. - * - * Handlers are called synchronously from `emitEffect`. For React - * subscribers, the handler should schedule a state update rather - * than render inline — use `useSyncExternalStore` or equivalent. - */ - subscribeEffects(handler) { - this.#effectHandlers.add(handler); - return () => { - this.#effectHandlers.delete(handler); - }; - } - constructor(arg) { - this.session = new __vite_ssr_import_0__.Session({ autoFire: false }); - const isLegacyPresetArg = arg !== void 0 && arg !== null && typeof arg.replaceAll === "function"; - const opts = isLegacyPresetArg ? { activePresets: arg } : arg ?? {}; - const layout = opts.layout ?? __vite_ssr_import_2__.CLASSIC_LAYOUT; - (0,__vite_ssr_import_2__.applyLayout)(this.session, layout); - (0,__vite_ssr_import_10__.recordPosition)(this.session); - this.activePresets = opts.activePresets ?? new __vite_ssr_import_12__.ActivePresetSet(); - } - /** - * The full set of piece attributes the engine should treat as - * "per-piece state" for this game, combining FIDE's core attrs - * with any preset-declared additions. - * - * Used by the damage pipeline's default-death path, piece retract - * helpers inside presets (queen-splits fissioning the queen, - * explosive-rook blast fallback), and any future save-state - * serialization. This is the CANONICAL answer to "what facts - * represent a piece." - * - * Computed on every read because the active preset set is mutable; - * the list is tiny (< 10 entries in practice), so we don't cache. - * If perf becomes a concern, invalidate a cache in - * `setActivePresets` / `ActivePresetSet.replaceAll`. - */ - get effectivePieceAttrs() { - const attrs = new Set(__vite_ssr_import_11__.CORE_PIECE_ATTRS); - for (const entry of this.activePresets.list()) { - const def = __vite_ssr_import_13__.PRESET_REGISTRY.get(entry.id); - if (!def?.pieceAttributes) continue; - for (const a of def.pieceAttributes) attrs.add(a); - }; - return [...attrs]; - } - /** - * Typed, per-preset, per-engine state bag. - * - * Returns an accessor scoped to `presetId` that reads/writes facts - * on the reserved `PRESET_STATE_ENTITY`. Attribute keys are - * namespaced as `__preset__/${presetId}/${key}` under the hood so - * two presets can never collide. - * - * Because state is backed by session facts it: - * - serializes automatically with the rest of save-state (no extra - * plumbing — `session.allFacts()` already includes it) - * - is engine-scoped, so two concurrent games (server-side) hold - * independent state under the same preset id — no module-level - * globals - * - is cleared when the preset deactivates (see - * `clearPresetState` called from `setActivePresets` / - * `tickAfterMove`) - * - * The type parameter is trusted for convenience — `set("x", 5)` - * doesn't verify that `x` is `number` in `T`. Use sparingly or wrap - * in a factory function per preset that enforces its own shape. - */ - presetState(presetId) { - return new PresetStateImpl(this.session, presetId); - } - /** - * Retract every preset-state fact owned by `presetId`. Called from - * `setActivePresets` and `tickAfterMove` when a preset deactivates, - * so stale state doesn't leak across activation cycles. - */ - clearPresetState(presetId) { - const prefix = `${PRESET_STATE_ATTR_PREFIX}${presetId}/`; - const toRetract = this.session.allFacts().filter( - (f) => f.id === __vite_ssr_import_1__.PRESET_STATE_ENTITY && f.attr.startsWith(prefix) - ).map((f) => f.attr); - for (const attr of toRetract) { - this.session.retract((0,__vite_ssr_import_1__.PRESET_STATE_ENTITY), attr); - } - } - /** - * Replace the active preset set and fire lifecycle hooks on transitions. - * - * This is the ONLY public entry point that routes through preset - * `onActivate` / `onDeactivate` hooks — direct mutation of - * `activePresets` (via `.replaceAll`) is still allowed for tests but - * bypasses the hooks. - * - * Transition ordering, by design: - * 1. Snapshot the old id set. - * 2. Validate + apply the new set via `ActivePresetSet.replaceAll`. - * If validation throws, no hooks fire and the old set is intact. - * 3. Fire `onDeactivate` for ids in old-but-not-new. - * 4. Fire `onActivate` for ids in new-but-not-old. - * - * Scope or turns-remaining changes on an id present in both sets do - * NOT re-fire any hook — the preset is considered "continuously - * active" across the transition. - * - * Deactivate-before-activate is deliberate: it lets a preset tear - * down state cleanly before the incoming preset reads the board. - * Ordering within each phase follows the input list's natural order. - */ - setActivePresets(requests) { - const oldIds = new Set(this.activePresets.list().map((e) => e.id)); - this.activePresets.replaceAll(requests); - const newIds = new Set(requests.map((r) => r.id)); - const ctx = { engine: this }; - for (const id of oldIds) { - if (newIds.has(id)) continue; - const def = __vite_ssr_import_13__.PRESET_REGISTRY.get(id); - def?.onDeactivate?.(ctx); - this.clearPresetState(id); - }; - for (const req of requests) { - if (oldIds.has(req.id)) continue; - const def = __vite_ssr_import_13__.PRESET_REGISTRY.get(req.id); - def?.onActivate?.(ctx); - } - } - /** - * Attempt a preset-intercepted capture. Dispatches `onBeforeCapture` - * on every currently-active preset for the mover's color; if any - * preset returns `{ consume: true }` the default capture is skipped - * and we return `true`. Otherwise the caller should proceed with the - * standard capture path. - * - * `color` is the color of the capturing piece (i.e. whose turn it is). - */ - tryInterceptCapture(attacker, target, color) { - let consumed = false; - const ctx = { - engine: this, - attacker, - target, - mover: color - }; - for (const preset of this.activePresets.getForColor(color)) { - if (!preset.onBeforeCapture) continue; - const result = preset.onBeforeCapture(ctx); - if (result && result.consume === true) consumed = true; - }; - return consumed; - } - /** - * Create a new piece entity on `square` and fire `onPieceSpawn` hooks. - * - * This is the CANONICAL spawn path. Every code site that materializes - * a piece — the queen-splits fission, promotion, hypothetical - * summon/resurrect presets — should go through here so: - * - `onPieceSpawn` hooks get a chance to seed preset-declared - * attributes (Hp from piece-hp, Shield from piece-shield, …) - * WITHOUT those presets having to implement idempotent - * onActivate scans. - * - core attrs are inserted in a consistent order. - * - new spawn reasons can be added to the `PieceSpawnReason` union - * without editing this function. - * - * The initial starting-position generation does NOT go through here - * (it precedes any active presets — nothing to hook). Preset-authored - * initial placements should activate AFTER piece seeding or use - * this function explicitly in their `onActivate`. - */ - spawnPiece(type, color, square, opts = {}) { - const id = this.session.nextId(); - this.session.insert(id, "PieceType", type); - this.session.insert(id, "Color", color); - this.session.insert(id, "Position", square); - this.session.insert(id, "HasMoved", opts.hasMoved ?? false); - const ctx = { - engine: this, - pieceId: id, - type, - color, - square, - reason: opts.reason ?? "summon" - }; - for (const entry of this.activePresets.list()) { - const def = __vite_ssr_import_13__.PRESET_REGISTRY.get(entry.id); - def?.onPieceSpawn?.(ctx); - }; - return id; - } - /** - * Deal `amount` damage to `target`, running it through the preset - * damage pipeline before applying the default kill-on-damage rule. - * - * This is the primitive that lets presets compose cleanly: - * - Without any damage-interceptor preset (standard chess, - * explosive-rook alone, etc.), damage ≥ 1 retracts the target. - * - With `piece-hp` active, the hook decrements the target's Hp - * fact and only retracts when Hp would go ≤ 0. - * - * Callers should use this instead of retracting piece facts directly - * whenever they want to compose with HP/armor/shield-like presets. - * See `explosive-rook` (AoE calls dealDamage on every victim) and - * `poisoned-squares` (tick calls dealDamage on every occupant of a - * poisoned square) for the canonical call sites. - * - * The first preset whose `onDamage` returns `consume: true` wins — - * further presets are not consulted for that event. This is - * deliberate: HP is the ONE authority on damage→death; two damage - * interceptors would race and produce zombie state (the bug this - * pipeline was designed to eliminate). - * - * Returns `{ died: true }` if the target was retracted (either by a - * hook that killed or by the default path), `{ died: false }` if it - * survived (HP absorbed it, or amount was 0). - */ - dealDamage(target, amount, ctx) { - if (amount <= 0) return { died: false }; - const targetColor = this.session.get(target, "Color"); - const hookCtx = { - engine: this, - target, - amount, - kind: ctx.kind, - ...ctx.attacker !== void 0 ? { attacker: ctx.attacker } : {} - }; - for (const entry of this.activePresets.list()) { - if (targetColor !== void 0 && entry.scope !== "both" && entry.scope !== targetColor) { - continue; - }; - const def = __vite_ssr_import_13__.PRESET_REGISTRY.get(entry.id); - const result = def?.onDamage?.(hookCtx); - if (result?.consume === true) { - return { died: result.died === true }; - } - }; - for (const attr of this.effectivePieceAttrs) { - if (this.session.contains(target, attr)) { - this.session.retract(target, attr); - } - }; - return { died: true }; - } - getCurrentTurn() { - return this.session.get((0,__vite_ssr_import_1__.GAME_ENTITY), "Turn") ?? "white"; - } - getAllLegalMoves() { - const color = this.getCurrentTurn(); - const facts = this.session.allFacts(); - const moves = []; - const pieces = facts.filter((f) => f.attr === "Color" && f.value === color && f.id > 0).map((f) => ({ - id: f.id, - type: facts.find((t) => t.id === f.id && t.attr === "PieceType")?.value - })).filter((p) => p.type !== void 0); - for (const piece of pieces) { - const baseGetter = lookupMoveGenerator(piece.type); - const scopedPresets = this.activePresets.getForColor(color); - const seedGetter = baseGetter ?? ((_s, _id) => []); - const getter = scopedPresets.filter((p) => p.transformMoveGenerator).reduce( - (gen, preset) => preset.transformMoveGenerator(this, piece.id, gen), - seedGetter - ); - if (!baseGetter && scopedPresets.every((p) => !p.transformMoveGenerator)) { - continue; - }; - let pieceMoves = getter(this.session, piece.id); - if (piece.type === "pawn") { - pieceMoves = [ - ...pieceMoves, - ...(0,__vite_ssr_import_4__.getEnPassantMoves)(this.session, piece.id) - ]; - }; - if (piece.type === "king") { - const enemyColor = color === "white" ? "black" : "white"; - const castling = (0,__vite_ssr_import_3__.getCastlingMoves)( - this.session, - piece.id, - (s, sq) => (0,__vite_ssr_import_6__.isSquareAttacked)(s, sq, enemyColor) - ); - pieceMoves = [...pieceMoves, ...castling]; - }; - if (piece.type === "pawn") { - const promotions = (0,__vite_ssr_import_5__.getPromotionMoves)(this.session, piece.id); - if (promotions.length > 0) { - const promotionTos = new Set(promotions.map((m) => m.to)); - pieceMoves = pieceMoves.filter((m) => !promotionTos.has(m.to)); - pieceMoves = [...pieceMoves, ...promotions]; - } - }; - const activePresets = scopedPresets; - for (const preset of activePresets) { - if (preset.getExtraMoves) { - pieceMoves = [ - ...pieceMoves, - ...preset.getExtraMoves(this, piece.id) - ]; - } - }; - for (const preset of activePresets) { - if (preset.filterMoves) { - pieceMoves = preset.filterMoves(pieceMoves, this, piece.id); - } - }; - moves.push(...pieceMoves); - }; - let applyFilter = true; - const selfCheckCtx = { engine: this, color }; - for (const preset of this.activePresets.getForColor(color)) { - if (preset.shouldFilterSelfCheck?.(selfCheckCtx) === false) { - applyFilter = false; - break; - } - }; - return applyFilter ? (0,__vite_ssr_import_6__.filterSelfCheckMoves)(this.session, moves, color) : moves; - } - applyMove(move, promoteTo = "queen") { - const color = this.getCurrentTurn(); - const beforeCtx = { - engine: this, - mover: color, - pieceId: move.pieceId, - from: move.from, - to: move.to, - isCapture: move.isCapture === true - }; - for (const preset of this.activePresets.getForColor(color)) { - const result = preset.onBeforeMove?.(beforeCtx); - if (result?.cancel === true) { - throw new MoveCancelledError( - result.reason ?? `Move cancelled by preset "${preset.id}"`, - preset.id - ); - } - }; - const facts = this.session.allFacts(); - const movingType = facts.find( - (f) => f.id === move.pieceId && f.attr === "PieceType" - )?.value; - const epTarget = this.session.get((0,__vite_ssr_import_1__.GAME_ENTITY), "EnPassantTarget"); - const isEnPassant = movingType === "pawn" && epTarget !== null && epTarget !== void 0 && epTarget === move.to; - const isCastling = move.isCastling === true; - const capturedIdForLog = move.isCapture ? isEnPassant ? this.getPieceAt( - color === "white" ? move.to - 8 : move.to + 8 - ) : this.getPieceAt(move.to) : null; - const capturedTypeForLog = capturedIdForLog !== null ? facts.find( - (f) => f.id === capturedIdForLog && f.attr === "PieceType" - )?.value ?? null : null; - if (isEnPassant) { - const capturedSquare = color === "white" ? move.to - 8 : move.to + 8; - const capturedId = this.getPieceAt(capturedSquare); - let consumed = false; - let targetDied = true; - if (capturedId !== null) { - consumed = this.tryInterceptCapture(move.pieceId, capturedId, color); - if (!consumed) { - const result = this.dealDamage(capturedId, 1, { - kind: "capture", - attacker: move.pieceId - }); - targetDied = result.died; - } - }; - if (!consumed && targetDied) { - this.session.insert(move.pieceId, "Position", move.to); - this.session.insert(move.pieceId, "HasMoved", true); - } - } else if (isCastling) { - (0,__vite_ssr_import_3__.applyCastlingMove)(this.session, move); - } else { - let consumed = false; - let captureResolved = true; - if (move.isCapture) { - const capturedId = this.getPieceAt(move.to); - if (capturedId !== null) { - consumed = this.tryInterceptCapture(move.pieceId, capturedId, color); - if (!consumed) { - const { died } = this.dealDamage(capturedId, 1, { - kind: "capture", - attacker: move.pieceId - }); - captureResolved = died; - } else { - captureResolved = false; - } - } - }; - if (!consumed && captureResolved) { - this.session.insert(move.pieceId, "Position", move.to); - this.session.insert(move.pieceId, "HasMoved", true); - } - }; - const effectiveTo = isCastling ? move.to : move.to; - if (movingType === "pawn" && (0,__vite_ssr_import_5__.isPromotionMove)(effectiveTo, color)) { - const promoteAs = move.promoteTo ?? promoteTo; - (0,__vite_ssr_import_5__.applyPromotion)(this.session, move.pieceId, promoteAs); - }; - if (movingType === "pawn" && Math.abs(move.to - move.from) === 16) { - (0,__vite_ssr_import_4__.setEnPassantTarget)(this.session, move.from, move.to); - } else { - (0,__vite_ssr_import_4__.clearEnPassantTarget)(this.session); - }; - (0,__vite_ssr_import_10__.updateHalfmoveClock)(this.session, move, movingType === "pawn"); - const nextColor = color === "white" ? "black" : "white"; - this.session.insert((0,__vite_ssr_import_1__.GAME_ENTITY), "Turn", nextColor); - if (color === "black") { - const fn = (this.session.get((0,__vite_ssr_import_1__.GAME_ENTITY), "FullmoveNumber") ?? 1) + 1; - this.session.insert((0,__vite_ssr_import_1__.GAME_ENTITY), "FullmoveNumber", fn); - }; - (0,__vite_ssr_import_10__.recordPosition)(this.session); - const lifecycleCtx = { engine: this }; - const expired = this.activePresets.tickAfterMove(color); - for (const id of expired) { - const def = __vite_ssr_import_13__.PRESET_REGISTRY.get(id); - def?.onDeactivate?.(lifecycleCtx); - this.clearPresetState(id); - }; - const moveCtx = { engine: this, mover: color }; - for (const entry of this.activePresets.list()) { - const def = __vite_ssr_import_13__.PRESET_REGISTRY.get(entry.id); - def?.onAfterMove?.(moveCtx); - }; - const turnStartCtx = { engine: this, turn: nextColor }; - for (const preset of this.activePresets.getForColor(nextColor)) { - preset.onTurnStart?.(turnStartCtx); - }; - const gameResult = this.checkGameResult(); - const terminal = gameResult !== "ongoing"; - const opponentInCheck = (0,__vite_ssr_import_6__.isInCheck)(this.session, nextColor); - const describeCtx = { - engine: this, - mover: color, - from: move.from, - to: move.to, - movingType, - capturedType: capturedTypeForLog, - isEnPassant, - isCastling, - promotion: movingType === "pawn" && (0,__vite_ssr_import_5__.isPromotionMove)(effectiveTo, color) ? move.promoteTo ?? promoteTo : null - }; - const presetEffects = []; - for (const entry of this.activePresets.list()) { - const def = __vite_ssr_import_13__.PRESET_REGISTRY.get(entry.id); - const summary = def?.describeMoveEffect?.(describeCtx); - if (summary !== void 0 && summary !== "") { - presetEffects.push({ presetId: entry.id, summary }); - } - }; - this.#moveLog.push({ - from: move.from, - to: move.to, - mover: color, - movingType, - capturedId: capturedIdForLog, - capturedType: capturedTypeForLog, - isCheck: opponentInCheck, - terminal, - isEnPassant, - isCastling, - promotion: describeCtx.promotion, - timestamp: Date.now(), - presetEffects - }); - return gameResult; - } - checkGameResult() { - const resultCtx = { engine: this }; - for (const entry of this.activePresets.list()) { - const def = __vite_ssr_import_13__.PRESET_REGISTRY.get(entry.id); - const override = def?.onCheckGameResult?.(resultCtx); - if (override !== void 0) return override; - }; - const nextColor = this.getCurrentTurn(); - if ((0,__vite_ssr_import_7__.isCheckmate)(this.session, nextColor)) return "checkmate"; - if ((0,__vite_ssr_import_8__.isStalemate)(this.session, nextColor)) return "stalemate"; - if ((0,__vite_ssr_import_10__.isFiftyMoveDraw)(this.session)) return "draw-50"; - if ((0,__vite_ssr_import_10__.isThreefoldRepetition)(this.session)) return "draw-3fold"; - if ((0,__vite_ssr_import_9__.isInsufficientMaterial)(this.session)) return "draw-insufficient"; - return "ongoing"; - } - /** Find first legal move matching from+to squares and optional promoteTo. */ - findMove(from, to, promoteTo) { - return this.getAllLegalMoves().find( - (m) => m.from === from && m.to === to && (!m.promoteTo || m.promoteTo === (promoteTo ?? "queen")) - ) ?? null; - } - getPieceAt(square) { - const f = this.session.allFacts().find((x) => x.attr === "Position" && x.value === square && x.id > 0); - return f ? f.id : null; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Z25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJlbmdpbmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGVzc0VuZ2luZSDigJQgaW50ZWdyYXRlcyBhbGwgcnVsZSBtb2R1bGVzIGludG8gYSBwbGF5YWJsZSBjaGVzcyBnYW1lLlxuICpcbiAqIFVzZXMgU2Vzc2lvbiBhcyB3b3JraW5nIG1lbW9yeTsgY2FsbHMgcnVsZSBmdW5jdGlvbnMgZGlyZWN0bHkgKG5vIFJldGVcbiAqIHByb2R1Y3Rpb24gbmV0d29yayDigJQgdGhhdCBpbnRlZ3JhdGlvbiBpcyBmdXR1cmUgd29yaykuXG4gKi9cbmltcG9ydCB7IFNlc3Npb24gfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiQHBhcmF0eXBlL3JldGVcIjtcbmltcG9ydCB7XG4gIEdBTUVfRU5USVRZLFxuICBQUkVTRVRfU1RBVEVfRU5USVRZLFxuICB0eXBlIFBpZWNlVHlwZSxcbiAgdHlwZSBQaWVjZUNvbG9yLFxufSBmcm9tIFwiLi9zY2hlbWEuanNcIjtcbmltcG9ydCB7IGFwcGx5TGF5b3V0LCBDTEFTU0lDX0xBWU9VVCB9IGZyb20gXCIuL3N0YXJ0aW5nLXBvc2l0aW9uLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFN0YXJ0aW5nTGF5b3V0IH0gZnJvbSBcIi4vbGF5b3V0cy90eXBlcy5qc1wiO1xuaW1wb3J0IHtcbiAgZ2V0Q2FzdGxpbmdNb3ZlcyxcbiAgYXBwbHlDYXN0bGluZ01vdmUsXG4gIHR5cGUgQ2FzdGxpbmdNb3ZlLFxufSBmcm9tIFwiLi9ydWxlcy9jYXN0bGluZy5qc1wiO1xuaW1wb3J0IHtcbiAgZ2V0RW5QYXNzYW50TW92ZXMsXG4gIHNldEVuUGFzc2FudFRhcmdldCxcbiAgY2xlYXJFblBhc3NhbnRUYXJnZXQsXG59IGZyb20gXCIuL3J1bGVzL2VucGFzc2FudC5qc1wiO1xuaW1wb3J0IHtcbiAgaXNQcm9tb3Rpb25Nb3ZlLFxuICBhcHBseVByb21vdGlvbixcbiAgZ2V0UHJvbW90aW9uTW92ZXMsXG59IGZyb20gXCIuL3J1bGVzL3Byb21vdGlvbi5qc1wiO1xuaW1wb3J0IHtcbiAgZmlsdGVyU2VsZkNoZWNrTW92ZXMsXG4gIGlzSW5DaGVjayxcbiAgaXNTcXVhcmVBdHRhY2tlZCxcbn0gZnJvbSBcIi4vcnVsZXMvY2hlY2suanNcIjtcbmltcG9ydCB7IGlzQ2hlY2ttYXRlIH0gZnJvbSBcIi4vcnVsZXMvY2hlY2ttYXRlLmpzXCI7XG5pbXBvcnQgeyBpc1N0YWxlbWF0ZSB9IGZyb20gXCIuL3J1bGVzL3N0YWxlbWF0ZS5qc1wiO1xuaW1wb3J0IHsgaXNJbnN1ZmZpY2llbnRNYXRlcmlhbCB9IGZyb20gXCIuL3J1bGVzL2luc3VmZmljaWVudC5qc1wiO1xuaW1wb3J0IHtcbiAgaXNGaWZ0eU1vdmVEcmF3LFxuICB1cGRhdGVIYWxmbW92ZUNsb2NrLFxuICByZWNvcmRQb3NpdGlvbixcbiAgaXNUaHJlZWZvbGRSZXBldGl0aW9uLFxufSBmcm9tIFwiLi9ydWxlcy9kcmF3cy5qc1wiO1xuaW1wb3J0IHsgQ09SRV9QSUVDRV9BVFRSUyB9IGZyb20gXCIuL3J1bGVzL2NhcHR1cmUuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgQmVmb3JlTW92ZUNvbnRleHQsXG4gIENhcHR1cmVIb29rQ29udGV4dCxcbiAgRGFtYWdlQ29udGV4dCxcbiAgRGFtYWdlSG9va0NvbnRleHQsXG4gIERlc2NyaWJlTW92ZUVmZmVjdENvbnRleHQsXG4gIEdhbWVSZXN1bHRIb29rQ29udGV4dCxcbiAgTGlmZWN5Y2xlQ29udGV4dCxcbiAgTW92ZUhvb2tDb250ZXh0LFxuICBQaWVjZVNwYXduQ29udGV4dCxcbiAgUGllY2VTcGF3blJlYXNvbixcbiAgU2VsZkNoZWNrRmlsdGVyQ29udGV4dCxcbiAgVHVyblN0YXJ0Q29udGV4dCxcbn0gZnJvbSBcIi4vcHJlc2V0cy9yZWdpc3RyeS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBDaGVzc0F0dHJLZXkgfSBmcm9tIFwiLi9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgTGVnYWxNb3ZlIH0gZnJvbSBcIi4vcnVsZXMvdHlwZXMuanNcIjtcbmltcG9ydCB7XG4gIEFjdGl2ZVByZXNldFNldCxcbiAgdHlwZSBBY3RpdmF0aW9uUmVxdWVzdCxcbn0gZnJvbSBcIi4vcHJlc2V0cy9hY3RpdmUtc2V0LmpzXCI7XG5pbXBvcnQgeyBQUkVTRVRfUkVHSVNUUlkgfSBmcm9tIFwiLi9wcmVzZXRzL3JlZ2lzdHJ5LmpzXCI7XG5pbXBvcnQgeyBQSUVDRV9UWVBFX1JFR0lTVFJZIH0gZnJvbSBcIi4vcHJlc2V0cy9waWVjZS10eXBlLXJlZ2lzdHJ5LmpzXCI7XG4vLyBJbXBvcnRpbmcgZnJvbSB0aGUgYmFycmVsIGd1YXJhbnRlZXMgZXZlcnkgcHJlc2V0IG1vZHVsZSdzXG4vLyBzaWRlLWVmZmVjdCByZWdpc3RyYXRpb24gaGFzIHJ1biBiZWZvcmUgdGhlIGZpcnN0IGVuZ2luZSBpcyBjcmVhdGVkLlxuaW1wb3J0IFwiLi9wcmVzZXRzL2luZGV4LmpzXCI7XG5cbnR5cGUgTW92ZUdldHRlciA9IChzZXNzaW9uOiBTZXNzaW9uLCBwaWVjZUlkOiBFbnRpdHlJZCkgPT4gTGVnYWxNb3ZlW107XG5cbi8qKlxuICogTG9vayB1cCB0aGUgbW92ZSBnZW5lcmF0b3IgZm9yIGEgcGllY2UgdHlwZSB2aWEgdGhlIHJlZ2lzdHJ5LlxuICogUmV0dXJucyBgbnVsbGAgZm9yIHVua25vd24gdHlwZXMgKGRlZ2VuZXJhdGUg4oCUIGluZGljYXRlcyBhIGZhY3RcbiAqIHdpdGggYSBwaWVjZSB0eXBlIG5vYm9keSByZWdpc3RlcmVkOyB0aGUgZW5naW5lIHRyZWF0cyBzdWNoIHBpZWNlc1xuICogYXMgaW1tb2JpbGUpLlxuICpcbiAqIFRoaXMgcmVwbGFjZXMgdGhlIGhhcmRjb2RlZCBgUElFQ0VfTU9WRV9HRVRURVJTYCB0YWJsZSB0aGF0IG9ubHlcbiAqIGtuZXcgYWJvdXQgRklERSBwaWVjZXMuIEN1c3RvbSB0eXBlcyAoQ2Fubm9uLCBBbWF6b24sIE5pZ2h0cmlkZXIpXG4gKiByZWdpc3RlciB0aGVpciBtb3ZlIGdlbmVyYXRvcnMgaW4gdGhlIHNhbWUgcmVnaXN0cnkgYW5kIGFyZVxuICogZGlzcGF0Y2hlZCBhdXRvbWF0aWNhbGx5LlxuICovXG5mdW5jdGlvbiBsb29rdXBNb3ZlR2VuZXJhdG9yKHR5cGU6IHN0cmluZyk6IE1vdmVHZXR0ZXIgfCBudWxsIHtcbiAgY29uc3QgZGVmID0gUElFQ0VfVFlQRV9SRUdJU1RSWS5nZXQodHlwZSk7XG4gIHJldHVybiBkZWY/Lm1vdmVHZW5lcmF0b3IgPz8gbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgR2FtZVJlc3VsdCA9XG4gIHwgXCJjaGVja21hdGVcIlxuICB8IFwic3RhbGVtYXRlXCJcbiAgfCBcImRyYXctNTBcIlxuICB8IFwiZHJhdy0zZm9sZFwiXG4gIHwgXCJkcmF3LWluc3VmZmljaWVudFwiXG4gIC8vIFByZXNldC1kZWZpbmVkIHRlcm1pbmFsIHN0YXRlcy4gVGhlIHJlZ3VsYXIgY2hlY2ttYXRlIHJlc3VsdCBhbHdheXNcbiAgLy8gaW1wbGljaXRseSBtZWFucyBcInRoZSBzaWRlIHRvIG1vdmUgbG9zZXNcIiAoc3RhbmRhcmQgY2hlc3MpLCBidXRcbiAgLy8gdmFyaWFudHMgbGlrZSBjYXB0dXJlLXRvLXdpbiBvciBsYXN0LXBpZWNlLXN0YW5kaW5nIG5lZWQgdG8gbmFtZVxuICAvLyB0aGUgd2lubmVyIGV4cGxpY2l0bHkgYmVjYXVzZSB0aGUgc2lkZSB0byBtb3ZlIG1heSBiZSB0aGUgV0lOTkVSLlxuICB8IFwid2hpdGUtd2luc1wiXG4gIHwgXCJibGFjay13aW5zXCJcbiAgfCBcIm9uZ29pbmdcIjtcblxuLyoqXG4gKiBSZXNlcnZlZCBhdHRyaWJ1dGUgcHJlZml4IGZvciBwcmVzZXQtc3RhdGUgZmFjdHMuIEV2ZXJ5IHByZXNldC1cbiAqIHN0YXRlIGF0dHJpYnV0ZSBzdG9yZWQgb24gUFJFU0VUX1NUQVRFX0VOVElUWSBpcyBwcmVmaXhlZCB3aXRoXG4gKiB0aGlzIHRvIGd1YXJhbnRlZSBubyBjb2xsaXNpb24gd2l0aCBnYW1lLWxldmVsIG9yIHBpZWNlLWxldmVsXG4gKiBhdHRyaWJ1dGUga2V5cy5cbiAqXG4gKiBDaGFuZ2luZyB0aGlzIHZhbHVlIGJyZWFrcyBzZXJpYWxpemVkIHNhdmUtZ2FtZXMgdGhhdCBjb250YWluXG4gKiBwcmVzZXQtc3RhdGUgZmFjdHMg4oCUIGRvbid0LlxuICovXG5jb25zdCBQUkVTRVRfU1RBVEVfQVRUUl9QUkVGSVggPSBcIl9fcHJlc2V0X18vXCI7XG5cbi8qKlxuICogVGhyb3duIGZyb20gYGFwcGx5TW92ZWAgd2hlbiBhIHByZXNldCdzIGBvbkJlZm9yZU1vdmVgIGhvb2sgdmV0b2VzXG4gKiB0aGUgbW92ZS4gVGhlIGNhbGxlciAoVUkgLyBzZXJ2ZXIpIHNob3VsZCBjYXRjaCB0aGlzLCBzdXJmYWNlXG4gKiBgcmVhc29uYCB0byB0aGUgdXNlciwgYW5kIGxlYXZlIHRoZSBnYW1lIHN0YXRlIHVuY2hhbmdlZCDigJQgbm9cbiAqIG11dGF0aW9uIGhhcHBlbnMgYmVmb3JlIHRoZSBjYW5jZWwgY2hlY2sgcnVucy5cbiAqXG4gKiBGYXRhbCB0aGUgbW92ZSBhdHRlbXB0LCBub3QgdGhlIHNlc3Npb24uIENhbGxlcnMgc2hvdWxkIE5PVCB0cmVhdFxuICogdGhpcyBhcyBhIHNlcnZlciBlcnJvci5cbiAqL1xuZXhwb3J0IGNsYXNzIE1vdmVDYW5jZWxsZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgcHJlc2V0SWQ6IHN0cmluZztcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBwcmVzZXRJZDogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gXCJNb3ZlQ2FuY2VsbGVkRXJyb3JcIjtcbiAgICB0aGlzLnByZXNldElkID0gcHJlc2V0SWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHNpbmdsZSBsaW5lIGluIHRoZSBlbmdpbmUncyBtb3ZlIGhpc3RvcnkuXG4gKlxuICogRXZlcnkgc3VjY2Vzc2Z1bCBgYXBwbHlNb3ZlYCBhcHBlbmRzIG9uZSBvZiB0aGVzZSB0byB0aGUgZW5naW5lJ3NcbiAqIGBtb3ZlTG9nYC4gQ2FsbGVycyB0aGF0IG5lZWQgaGlzdG9yeSAoVUkgbW92ZS1saXN0IHBhbmVsLCBQR05cbiAqIGV4cG9ydCwgcmVwbGF5LCBhbmFseXNpcykgcmVhZCB0aGlzIHJhdGhlciB0aGFuIGRpZmZpbmcgc2Vzc2lvblxuICogZmFjdHMuXG4gKlxuICogYHByZXNldEVmZmVjdHNgIGlzIHBvcHVsYXRlZCBieSBwcmVzZXRzIGltcGxlbWVudGluZ1xuICogYGRlc2NyaWJlTW92ZUVmZmVjdGA6IGVhY2ggcmV0dXJuIHZhbHVlIGNvbnRyaWJ1dGVzIG9uZSBlbnRyeVxuICogKHByZXNldElkICsgaHVtYW4tcmVhZGFibGUgc3VtbWFyeSkuIEV4YW1wbGU6IHF1ZWVuLXNwbGl0cyB3b3VsZFxuICogcHVzaCBgeyBwcmVzZXRJZDogXCJxdWVlbi1zcGxpdHNcIiwgc3VtbWFyeTogXCJRdWVlbiBzcGxpdCBpbnRvXG4gKiBSb29rL0Jpc2hvcFwiIH1gIG9uIGEgZmlzc2lvbiBtb3ZlLlxuICpcbiAqIEdyb3dhYmxlIOKAlCBmdXR1cmUgZmllbGRzIHNob3VsZCBiZSBvcHRpb25hbCBzbyBleGlzdGluZyBjb25zdW1lcnNcbiAqIGRvbid0IGJyZWFrLiBGYXZvciBwcmltaXRpdmUvc3RyaW5nIHZhbHVlcyBzbyB0aGUgcmVjb3JkIGlzXG4gKiB0cml2aWFsbHkgSlNPTi1zZXJpYWxpemFibGUgZm9yIHNhdmUvZXhwb3J0LlxuICovXG4vKipcbiAqIEFuIGVwaGVtZXJhbCB2aXN1YWwgZWZmZWN0IGVtaXR0ZWQgYnkgYSBwcmVzZXQgZm9yIHRoZSBVSSBsYXllclxuICogdG8gcmVuZGVyLlxuICpcbiAqIEVmZmVjdHMgYXJlIGRlY291cGxlZCBmcm9tIGdhbWVwbGF5IOKAlCB0aGUgZW5naW5lJ3Mgc3RhdGUgaXNcbiAqIGF1dGhvcml0YXRpdmUgYW5kIGluZGVwZW5kZW50IG9mIHdoZXRoZXIgYW55b25lIHN1YnNjcmliZWQuIEVtaXRcbiAqIGxpYmVyYWxseSBmcm9tIHByZXNldHM7IHRoZSBVSSBkZWNpZGVzIHdoZXRoZXIgLyBob3cgdG8gcmVuZGVyIGFcbiAqIGdpdmVuIGtpbmQuIFVua25vd24ga2luZHMgYXJlIHJlbmRlcmVkIGFzIGEgZ2VuZXJpYyBwdWxzZSBieSB0aGVcbiAqIGRlZmF1bHQgVmlzdWFsRWZmZWN0TGF5ZXIuXG4gKlxuICogYGtpbmRgIGlzIGEgZnJlZS1mb3JtIHN0cmluZyBzbyBwcmVzZXRzIGNhbiBpbnRyb2R1Y2UgbmV3IGVmZmVjdFxuICogdHlwZXMgKGV4cGxvc2lvbiwgaGVhbCwgcG9pc29uLCBsaWdodG5pbmcsIHNoaWVsZC1icmVhaywg4oCmKSB3aXRob3V0XG4gKiBlZGl0aW5nIGVuZ2luZS9VSSB0YWJsZXMuIFRoZSBVSSBsYXllciBkaXNwYXRjaGVzIHRvIHBlci1raW5kXG4gKiBjb21wb25lbnRzOyBhbiB1bnJlZ2lzdGVyZWQga2luZCBmYWxscyBiYWNrIHRvIGEgZ2VuZXJpYyBvdmVybGF5LlxuICpcbiAqIGBzcXVhcmVgIGlzIHdoZXJlIHRoZSBlZmZlY3QgdmlzdWFsbHkgYW5jaG9ycy4gYG51bGxgIGlzIGFsbG93ZWRcbiAqIGZvciBmdWxsLWJvYXJkIGVmZmVjdHMgKGUuZy4gYSBcInNob2Nrd2F2ZVwiIHRoYXQgc3dlZXBzIHRoZSB3aG9sZVxuICogYm9hcmQpLiBgdHRsYCBpcyBob3cgbG9uZyAoaW4gbXMpIHRoZSBlZmZlY3Qgc2hvdWxkIHBlcnNpc3QgYmVmb3JlXG4gKiBhdXRvLWV4cGlyaW5nLlxuICpcbiAqIGBkYXRhYCBpcyBhIHR5cGVkLWZyZWUtZm9ybSBiYWcgZm9yIGtpbmQtc3BlY2lmaWMgcGF5bG9hZHNcbiAqIChjb2xvciwgaW50ZW5zaXR5LCBkaXJlY3Rpb24sIGNvdW50KS4gUHJlc2V0cyBkb2N1bWVudCB3aGF0IHRoZXlcbiAqIGVtaXQ7IHJlbmRlcmVycyByZWFkIHdoYXQgdGhleSBuZWVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZpc3VhbEVmZmVjdCB7XG4gIHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc3F1YXJlOiBudW1iZXIgfCBudWxsO1xuICByZWFkb25seSB0dGw6IG51bWJlcjtcbiAgcmVhZG9ubHkgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKiogSGFuZGxlciBzaWduYXR1cmUgZm9yIGVmZmVjdCBzdWJzY3JpYmVycy4gUmV0dXJuIG5vdGhpbmcuICovXG5leHBvcnQgdHlwZSBWaXN1YWxFZmZlY3RIYW5kbGVyID0gKGVmZmVjdDogVmlzdWFsRWZmZWN0KSA9PiB2b2lkO1xuXG4vKiogVW5zdWJzY3JpYmUgY2FsbGJhY2sgcmV0dXJuZWQgYnkgYHN1YnNjcmliZUVmZmVjdHNgLiAqL1xuZXhwb3J0IHR5cGUgVW5zdWJzY3JpYmUgPSAoKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1vdmVSZWNvcmQge1xuICByZWFkb25seSBmcm9tOiBudW1iZXI7XG4gIHJlYWRvbmx5IHRvOiBudW1iZXI7XG4gIHJlYWRvbmx5IG1vdmVyOiBQaWVjZUNvbG9yO1xuICByZWFkb25seSBtb3ZpbmdUeXBlOiBQaWVjZVR5cGU7XG4gIC8qKiBDYXB0dXJlZCBwaWVjZSdzIGlkIEJFRk9SRSB0aGUgY2FwdHVyZSByZXNvbHZlZCAobnVsbCBpZiBubyBjYXB0dXJlKS4gKi9cbiAgcmVhZG9ubHkgY2FwdHVyZWRJZDogRW50aXR5SWQgfCBudWxsO1xuICAvKiogQ2FwdHVyZWQgcGllY2UncyB0eXBlIEJFRk9SRSB0aGUgY2FwdHVyZSByZXNvbHZlZCAobnVsbCBpZiBubyBjYXB0dXJlKS4gKi9cbiAgcmVhZG9ubHkgY2FwdHVyZWRUeXBlOiBQaWVjZVR5cGUgfCBudWxsO1xuICAvKiogRGlkIHRoZSBtb3ZlIHB1dCB0aGUgb3Bwb25lbnQgaW4gY2hlY2s/ICovXG4gIHJlYWRvbmx5IGlzQ2hlY2s6IGJvb2xlYW47XG4gIC8qKiBEaWQgdGhlIG1vdmUgZW5kIHRoZSBnYW1lIChjaGVja21hdGUgb3IgcHJlc2V0LXRlcm1pbmFsKT8gKi9cbiAgcmVhZG9ubHkgdGVybWluYWw6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlzRW5QYXNzYW50OiBib29sZWFuO1xuICByZWFkb25seSBpc0Nhc3RsaW5nOiBib29sZWFuO1xuICByZWFkb25seSBwcm9tb3Rpb246IFBpZWNlVHlwZSB8IG51bGw7XG4gIC8qKiBFbmdpbmUgdGltZXN0YW1wIGluIG1zIChEYXRlLm5vdygpKTsgZm9yIGNsaWVudC1zaWRlIGFuaW1hdGlvbiB0aW1pbmcuICovXG4gIHJlYWRvbmx5IHRpbWVzdGFtcDogbnVtYmVyO1xuICAvKiogTm9uLWVtcHR5IHdoZW4gcHJlc2V0cyBjb250cmlidXRlZCBlZmZlY3QgZGVzY3JpcHRpb25zLiAqL1xuICByZWFkb25seSBwcmVzZXRFZmZlY3RzOiBSZWFkb25seUFycmF5PHsgcHJlc2V0SWQ6IHN0cmluZzsgc3VtbWFyeTogc3RyaW5nIH0+O1xufVxuXG4vKipcbiAqIFR5cGVkIGFjY2Vzc29yIGZvciBhIHByZXNldCdzIHNsaWNlIG9mIGVuZ2luZS1zY29wZWQgc3RhdGUuXG4gKlxuICogT2J0YWluIG9uZSB2aWEgYENoZXNzRW5naW5lLnByZXNldFN0YXRlPFQ+KHByZXNldElkKWAuIENhbGxzIGFyZVxuICogc2NvcGVkOiB0d28gcHJlc2V0cyBjYWxsaW5nIGBzdGF0ZS5zZXQoXCJ4XCIsIDEpYCB3aXRoIGRpZmZlcmVudFxuICogcHJlc2V0IElEcyBlYWNoIGdldCB0aGVpciBvd24gYHhgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXNldFN0YXRlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAvKiogUmVhZCBhIHN0YXRlIGtleS4gUmV0dXJucyB1bmRlZmluZWQgd2hlbiB1bnNldC4gKi9cbiAgZ2V0PEsgZXh0ZW5kcyBrZXlvZiBUPihrZXk6IEspOiBUW0tdIHwgdW5kZWZpbmVkO1xuICAvKiogV3JpdGUgYSBzdGF0ZSBrZXkuIE92ZXJ3cml0ZXMgYW55IHByZXZpb3VzIHZhbHVlLiAqL1xuICBzZXQ8SyBleHRlbmRzIGtleW9mIFQ+KGtleTogSywgdmFsdWU6IFRbS10pOiB2b2lkO1xuICAvKiogRGVsZXRlIGEgc3RhdGUga2V5LiBSZXR1cm5zIHRydWUgaWYgaXQgd2FzIHNldCwgZmFsc2Ugb3RoZXJ3aXNlLiAqL1xuICBkZWxldGU8SyBleHRlbmRzIGtleW9mIFQ+KGtleTogSyk6IGJvb2xlYW47XG4gIC8qKiBSZXR1cm5zIHRoZSBmdWxsIHN0YXRlIHNuYXBzaG90IGFzIGEgcGxhaW4gb2JqZWN0LiAqL1xuICBhbGwoKTogUGFydGlhbDxUPjtcbiAgLyoqIFRydWUgaWYgYGtleWAgaGFzIGJlZW4gc2V0LiAqL1xuICBoYXM8SyBleHRlbmRzIGtleW9mIFQ+KGtleTogSyk6IGJvb2xlYW47XG59XG5cbmNsYXNzIFByZXNldFN0YXRlSW1wbDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+XG4gIGltcGxlbWVudHMgUHJlc2V0U3RhdGU8VD5cbntcbiAgcmVhZG9ubHkgI3Nlc3Npb246IFNlc3Npb247XG4gIHJlYWRvbmx5ICNwcmVmaXg6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzZXNzaW9uOiBTZXNzaW9uLCBwcmVzZXRJZDogc3RyaW5nKSB7XG4gICAgdGhpcy4jc2Vzc2lvbiA9IHNlc3Npb247XG4gICAgdGhpcy4jcHJlZml4ID0gYCR7UFJFU0VUX1NUQVRFX0FUVFJfUFJFRklYfSR7cHJlc2V0SWR9L2A7XG4gIH1cblxuICAjYXR0ck9mKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy4jcHJlZml4fSR7a2V5fWA7XG4gIH1cblxuICBnZXQ8SyBleHRlbmRzIGtleW9mIFQ+KGtleTogSyk6IFRbS10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGF0dHIgPSB0aGlzLiNhdHRyT2Yoa2V5IGFzIHN0cmluZyk7XG4gICAgaWYgKCF0aGlzLiNzZXNzaW9uLmNvbnRhaW5zKFBSRVNFVF9TVEFURV9FTlRJVFksIGF0dHIpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLiNzZXNzaW9uLmdldChQUkVTRVRfU1RBVEVfRU5USVRZLCBhdHRyKSBhcyBUW0tdO1xuICB9XG5cbiAgc2V0PEsgZXh0ZW5kcyBrZXlvZiBUPihrZXk6IEssIHZhbHVlOiBUW0tdKTogdm9pZCB7XG4gICAgLy8gVGhlIHJldGUgc2Vzc2lvbiB2YWxpZGF0ZXMgdGhhdCBgdmFsdWVgIGlzIGEgbGVnYWwgRmFjdFZhbHVlXG4gICAgLy8gKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsKS4gUGFzc2luZyBvYmplY3RzIGhlcmUgd2lsbFxuICAgIC8vIHRocm93IOKAlCBhIGRlbGliZXJhdGUgY29uc3RyYWludCB0byBrZWVwIGZhY3RzIHNlcmlhbGl6YXRpb24tc2FmZS5cbiAgICB0aGlzLiNzZXNzaW9uLmluc2VydChcbiAgICAgIFBSRVNFVF9TVEFURV9FTlRJVFksXG4gICAgICB0aGlzLiNhdHRyT2Yoa2V5IGFzIHN0cmluZyksXG4gICAgICB2YWx1ZSBhcyB1bmtub3duIGFzIGltcG9ydChcIkBwYXJhdHlwZS9yZXRlXCIpLkZhY3RWYWx1ZSxcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlPEsgZXh0ZW5kcyBrZXlvZiBUPihrZXk6IEspOiBib29sZWFuIHtcbiAgICBjb25zdCBhdHRyID0gdGhpcy4jYXR0ck9mKGtleSBhcyBzdHJpbmcpO1xuICAgIGlmICghdGhpcy4jc2Vzc2lvbi5jb250YWlucyhQUkVTRVRfU1RBVEVfRU5USVRZLCBhdHRyKSkgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMuI3Nlc3Npb24ucmV0cmFjdChQUkVTRVRfU1RBVEVfRU5USVRZLCBhdHRyKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGhhczxLIGV4dGVuZHMga2V5b2YgVD4oa2V5OiBLKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI3Nlc3Npb24uY29udGFpbnMoUFJFU0VUX1NUQVRFX0VOVElUWSwgdGhpcy4jYXR0ck9mKGtleSBhcyBzdHJpbmcpKTtcbiAgfVxuXG4gIGFsbCgpOiBQYXJ0aWFsPFQ+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgZm9yIChjb25zdCBmIG9mIHRoaXMuI3Nlc3Npb24uYWxsRmFjdHMoKSkge1xuICAgICAgaWYgKChmLmlkIGFzIG51bWJlcikgIT09IChQUkVTRVRfU1RBVEVfRU5USVRZIGFzIG51bWJlcikpIGNvbnRpbnVlO1xuICAgICAgaWYgKCFmLmF0dHIuc3RhcnRzV2l0aCh0aGlzLiNwcmVmaXgpKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGtleSA9IGYuYXR0ci5zbGljZSh0aGlzLiNwcmVmaXgubGVuZ3RoKTtcbiAgICAgIHJlc3VsdFtrZXldID0gZi52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdCBhcyBQYXJ0aWFsPFQ+O1xuICB9XG59XG5cbi8qKlxuICogT3B0aW9ucyBiYWcgZm9yIHRoZSBgQ2hlc3NFbmdpbmVgIGNvbnN0cnVjdG9yLlxuICpcbiAqIEFsbCBmaWVsZHMgb3B0aW9uYWwuIE9taXR0ZWQgZmllbGRzIHVzZSBhIHNlbnNpYmxlIGRlZmF1bHQ6XG4gKiAgIC0gYGFjdGl2ZVByZXNldHNgIOKGkiBhIGZyZXNoIGVtcHR5IEFjdGl2ZVByZXNldFNldCAobm8gcHJlc2V0cykuXG4gKiAgIC0gYGxheW91dGAg4oaSIGBDTEFTU0lDX0xBWU9VVGAgKHN0YW5kYXJkIEZJREUgc3RhcnRpbmcgcG9zaXRpb24pLlxuICpcbiAqIFBhc3NpbmcgYSBgbGF5b3V0YCBpcyBob3cgY2FsbGVycyBzdGFydCBmcm9tIGEgbm9uLUZJREUgcG9zaXRpb25cbiAqIChEdW5zYW55LCBNb25zdGVyLCBIb3JkZSwgY3VzdG9tIGVkaXRvciBvdXRwdXQsIGV0Yy4pLiBUaGUgZW5naW5lXG4gKiBhcHBsaWVzIHRoZSBsYXlvdXQgRklSU1QsIHRoZW4gYWN0aXZhdGVzIHByZXNldHMsIHNvIGV2ZXJ5XG4gKiBwcmVzZXQncyBgb25BY3RpdmF0ZWAgc2NhbnMgdGhlIGxheW91dCdzIHBpZWNlcyDigJQgbm8gcGVyLWxheW91dFxuICogc3BlY2lhbC1jYXNpbmcgaW5zaWRlIHByZXNldHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW5naW5lT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGFjdGl2ZVByZXNldHM/OiBBY3RpdmVQcmVzZXRTZXQ7XG4gIHJlYWRvbmx5IGxheW91dD86IFN0YXJ0aW5nTGF5b3V0O1xufVxuXG5leHBvcnQgY2xhc3MgQ2hlc3NFbmdpbmUge1xuICBwdWJsaWMgcmVhZG9ubHkgc2Vzc2lvbjogU2Vzc2lvbjtcbiAgLyoqXG4gICAqIFBlci1lbmdpbmUgcHJlc2V0IGFjdGl2YXRpb24uIEV2ZXJ5IGVuZ2luZSBvd25zIGl0cyBvd24gc2V0IHNvIHR3b1xuICAgKiBjb25jdXJyZW50IGdhbWVzIChtb3N0IGltcG9ydGFudGx5OiB0aGUgYXV0aG9yaXRhdGl2ZSBzZXJ2ZXIgc2Vzc2lvblxuICAgKiBhbmQgYSBjbGllbnQncyBwcmVkaWN0ZWQgY2xvbmUpIGNhbiBob2xkIGRpZmZlcmVudCBydWxlIHNldHMgd2l0aG91dFxuICAgKiBhIHNoYXJlZC1tb2R1bGUgZGFuY2UuXG4gICAqXG4gICAqIE11dGFibGUgYnkgZGVzaWduIOKAlCBVSXMgYW5kIHNlcnZlcnMgcmVwbGFjZSBpdHMgY29udGVudHMgdmlhXG4gICAqIGAucmVwbGFjZUFsbCgpYC4gVGhlIGVuZ2luZSByZWFkcyBpdCBmcmVzaCBvbiBldmVyeSBjYWxsIHRvXG4gICAqIGBnZXRBbGxMZWdhbE1vdmVzKClgIHNvIG1pZC1nYW1lIHRvZ2dsZXMgdGFrZSBlZmZlY3Qgb24gdGhlIG5leHRcbiAgICogbW92ZSBjYWxjdWxhdGlvbiB3aXRoIG5vIHJlc2V0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFjdGl2ZVByZXNldHM6IEFjdGl2ZVByZXNldFNldDtcblxuICAvKipcbiAgICogQ2hyb25vbG9naWNhbCBsb2cgb2YgZXZlcnkgc3VjY2Vzc2Z1bCBhcHBseU1vdmUuIENhbGxlcnMgY29uc3VtZVxuICAgKiB0aGlzIHJlYWQtb25seSBmb3IgbW92ZS1oaXN0b3J5IFVJcywgUEdOIGV4cG9ydCwgYW5hbHlzaXMuIFdyaXRpbmdcbiAgICogdG8gaXQgaXMgYSBwcml2YXRlIGNvbmNlcm4gb2YgYXBwbHlNb3ZlLlxuICAgKlxuICAgKiBVbmJvdW5kZWQg4oCUIGdhbWVzIGFyZSBzaG9ydC1saXZlZCBlbm91Z2ggdGhhdCB3ZSBkb24ndCBuZWVkIGFcbiAgICogcmluZyBidWZmZXIuIElmIHRoYXQgZXZlciBjaGFuZ2VzLCBhZGQgYSBgbWF4TG9nU2l6ZWAgb3B0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgI21vdmVMb2c6IE1vdmVSZWNvcmRbXSA9IFtdO1xuXG4gIC8qKiBSZWFkLW9ubHkgdmlldyBvZiB0aGUgbW92ZSBsb2cuICovXG4gIGdldCBtb3ZlTG9nKCk6IFJlYWRvbmx5QXJyYXk8TW92ZVJlY29yZD4ge1xuICAgIHJldHVybiB0aGlzLiNtb3ZlTG9nO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdGl2ZSB2aXN1YWwtZWZmZWN0IHN1YnNjcmliZXJzLiBQcmVzZXRzIGNhbGwgYGVuZ2luZS5lbWl0RWZmZWN0YFxuICAgKiB0byBwdXNoIGVmZmVjdHM7IFVJIGxheWVycyBjYWxsIGBzdWJzY3JpYmVFZmZlY3RzYCB0byBsaXN0ZW4uXG4gICAqXG4gICAqIFVzaW5nIGEgU2V0IChub3QgYW4gQXJyYXkpIHNvIHVuc3Vic2NyaWJlIGlzIE8oMSkgYW5kIGluc2VydGlvblxuICAgKiBvcmRlciBkb2Vzbid0IG1hdHRlciAoZWZmZWN0cyBhcmUgZmlyZS1hbmQtZm9yZ2V0IOKAlCB3ZSBpdGVyYXRlXG4gICAqIHRoZSBmdWxsIHNldCBvbiBldmVyeSBlbWl0KS5cbiAgICovXG4gIHJlYWRvbmx5ICNlZmZlY3RIYW5kbGVycyA9IG5ldyBTZXQ8VmlzdWFsRWZmZWN0SGFuZGxlcj4oKTtcblxuICAvKipcbiAgICogRW1pdCBhIHZpc3VhbCBlZmZlY3QgdG8gYWxsIHN1YnNjcmliZXJzLiBGaXJlLWFuZC1mb3JnZXQg4oCUXG4gICAqIGhhbmRsZXJzIHRoYXQgdGhyb3cgYXJlIGlzb2xhdGVkIChjYXVnaHQpIHNvIG9uZSBiYWQgc3Vic2NyaWJlclxuICAgKiBkb2Vzbid0IGJyZWFrIG90aGVycy5cbiAgICpcbiAgICogU2FmZSB0byBjYWxsIGZyb20gaW5zaWRlIGFueSBwcmVzZXQgaG9vay4gVGhlIGVuZ2luZSBkb2VzIE5PVFxuICAgKiBwZXJzaXN0IGVmZmVjdHM7IHRoZXkncmUgcHVyZSBVSSBzaWduYWxzLiBJZiBubyBzdWJzY3JpYmVycyBhcmVcbiAgICogYXR0YWNoZWQsIHRoZSBjYWxsIGlzIGVzc2VudGlhbGx5IGEgbm8tb3AuXG4gICAqL1xuICBlbWl0RWZmZWN0KGVmZmVjdDogVmlzdWFsRWZmZWN0KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHRoaXMuI2VmZmVjdEhhbmRsZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBoYW5kbGVyKGVmZmVjdCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gRWZmZWN0IGhhbmRsZXJzIGFyZSBVSS1zaWRlIGFuZCBzaG91bGRuJ3QgdGFuayBnYW1lcGxheS5cbiAgICAgICAgLy8gTG9nIHRvIGNvbnNvbGUgc28gZGV2LW1vZGUgc3VyZmFjZXMgdGhlIHByb2JsZW0gd2l0aG91dFxuICAgICAgICAvLyB0aHJvd2luZy5cbiAgICAgICAgY29uc29sZS5lcnJvcihcIlZpc3VhbEVmZmVjdCBoYW5kbGVyIHRocmV3OlwiLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIHN1YnNjcmliZXIgZm9yIHZpc3VhbCBlZmZlY3RzLiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdFxuICAgKiByZW1vdmVzIHRoZSBzdWJzY3JpcHRpb24uIFR5cGljYWxseSBjYWxsZWQgZnJvbSBSZWFjdCBgdXNlRWZmZWN0YFxuICAgKiBvbiBjb21wb25lbnQgbW91bnQsIGFuZCB0aGUgcmV0dXJuIGlzIHJldHVybmVkIGFzIHRoZSBjbGVhbnVwLlxuICAgKlxuICAgKiBIYW5kbGVycyBhcmUgY2FsbGVkIHN5bmNocm9ub3VzbHkgZnJvbSBgZW1pdEVmZmVjdGAuIEZvciBSZWFjdFxuICAgKiBzdWJzY3JpYmVycywgdGhlIGhhbmRsZXIgc2hvdWxkIHNjaGVkdWxlIGEgc3RhdGUgdXBkYXRlIHJhdGhlclxuICAgKiB0aGFuIHJlbmRlciBpbmxpbmUg4oCUIHVzZSBgdXNlU3luY0V4dGVybmFsU3RvcmVgIG9yIGVxdWl2YWxlbnQuXG4gICAqL1xuICBzdWJzY3JpYmVFZmZlY3RzKGhhbmRsZXI6IFZpc3VhbEVmZmVjdEhhbmRsZXIpOiBVbnN1YnNjcmliZSB7XG4gICAgdGhpcy4jZWZmZWN0SGFuZGxlcnMuYWRkKGhhbmRsZXIpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB0aGlzLiNlZmZlY3RIYW5kbGVycy5kZWxldGUoaGFuZGxlcik7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgZW5naW5lLlxuICAgKlxuICAgKiBUd28gY2FsbGluZyBjb252ZW50aW9ucyBhcmUgc3VwcG9ydGVkOlxuICAgKlxuICAgKiAgIDEuIExlZ2FjeSAobm8gYXJnLCBvciBgYWN0aXZlUHJlc2V0c2Agb25seSk6XG4gICAqICAgICAgICBgbmV3IENoZXNzRW5naW5lKClgXG4gICAqICAgICAgICBgbmV3IENoZXNzRW5naW5lKGFjdGl2ZVByZXNldHMpYFxuICAgKlxuICAgKiAgIDIuIE9wdGlvbnMgYmFnIChwcmVmZXJyZWQgZm9yIG5ldyBjb2RlKTpcbiAgICogICAgICAgIGBuZXcgQ2hlc3NFbmdpbmUoeyBhY3RpdmVQcmVzZXRzLCBsYXlvdXQgfSlgXG4gICAqICAgICAgICBgbmV3IENoZXNzRW5naW5lKHsgbGF5b3V0OiBFTVBUWV9MQVlPVVQgfSlgXG4gICAqXG4gICAqIFRoZSBvcHRpb25zIGJhZyBpcyBob3cgbmV3IGNhbGxlcnMgc3BlY2lmeSBhIHN0YXJ0aW5nIGxheW91dFxuICAgKiBvdGhlciB0aGFuIEZJREUuIFdoZW4gYGxheW91dGAgaXMgb21pdHRlZCwgZGVmYXVsdHMgdG9cbiAgICogYENMQVNTSUNfTEFZT1VUYCAodGhlIEZJREUgc3RhcnRpbmcgcG9zaXRpb24pLCB3aGljaCBrZWVwcyBldmVyeVxuICAgKiBwcmUtbGF5b3V0cyBjYWxsIHNpdGUgd29ya2luZyB1bmNoYW5nZWQuXG4gICAqXG4gICAqIGBhY3RpdmVQcmVzZXRzYCBpcyBhcHBsaWVkIEFGVEVSIHRoZSBsYXlvdXQsIHNvIGV2ZXJ5IHByZXNldCdzXG4gICAqIGBvbkFjdGl2YXRlYCBob29rIHNlZXMgdGhlIGluaXRpYWwgYm9hcmQgc3RhdGUg4oCUIHBpZWNlLWhwIHNlZWRzXG4gICAqIGBIcGAgb24gZXZlcnkgcGllY2UgaW4gdGhlIGxheW91dCAoRklERSwgRHVuc2FueSwgSG9yZGUsIOKApikgd2l0aFxuICAgKiBubyBwZXItbGF5b3V0IHBsdW1iaW5nLlxuICAgKi9cbiAgY29uc3RydWN0b3IoYWN0aXZlUHJlc2V0cz86IEFjdGl2ZVByZXNldFNldCk7XG4gIGNvbnN0cnVjdG9yKG9wdHM6IEVuZ2luZU9wdGlvbnMpO1xuICBjb25zdHJ1Y3Rvcihhcmc/OiBBY3RpdmVQcmVzZXRTZXQgfCBFbmdpbmVPcHRpb25zKSB7XG4gICAgdGhpcy5zZXNzaW9uID0gbmV3IFNlc3Npb24oeyBhdXRvRmlyZTogZmFsc2UgfSk7XG5cbiAgICAvLyBOb3JtYWxpemUgdGhlIGFyZ3VtZW50OiBBY3RpdmVQcmVzZXRTZXQgc3RheXMgYXMtaXMgKGxlZ2FjeVxuICAgIC8vIGZvcm0pOyBhbiBvcHRpb25zIGJhZyBkZXN0cnVjdHVyZXMuIFdlIGRldGVjdCBieSBjaGVja2luZyBmb3JcbiAgICAvLyBgcmVwbGFjZUFsbGAg4oCUIGFuIGludGVybmFsIEFjdGl2ZVByZXNldFNldCBtZXRob2QgdGhhdCBpc24ndFxuICAgIC8vIG9uIHBsYWluIG9wdGlvbiBiYWdzLlxuICAgIGNvbnN0IGlzTGVnYWN5UHJlc2V0QXJnID1cbiAgICAgIGFyZyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhcmcgIT09IG51bGwgJiZcbiAgICAgIHR5cGVvZiAoYXJnIGFzIEFjdGl2ZVByZXNldFNldCkucmVwbGFjZUFsbCA9PT0gXCJmdW5jdGlvblwiO1xuICAgIGNvbnN0IG9wdHM6IEVuZ2luZU9wdGlvbnMgPSBpc0xlZ2FjeVByZXNldEFyZ1xuICAgICAgPyB7IGFjdGl2ZVByZXNldHM6IGFyZyBhcyBBY3RpdmVQcmVzZXRTZXQgfVxuICAgICAgOiAoKGFyZyBhcyBFbmdpbmVPcHRpb25zIHwgdW5kZWZpbmVkKSA/PyB7fSk7XG5cbiAgICBjb25zdCBsYXlvdXQgPSBvcHRzLmxheW91dCA/PyBDTEFTU0lDX0xBWU9VVDtcbiAgICBhcHBseUxheW91dCh0aGlzLnNlc3Npb24sIGxheW91dCk7XG4gICAgcmVjb3JkUG9zaXRpb24odGhpcy5zZXNzaW9uKTtcbiAgICB0aGlzLmFjdGl2ZVByZXNldHMgPSBvcHRzLmFjdGl2ZVByZXNldHMgPz8gbmV3IEFjdGl2ZVByZXNldFNldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmdWxsIHNldCBvZiBwaWVjZSBhdHRyaWJ1dGVzIHRoZSBlbmdpbmUgc2hvdWxkIHRyZWF0IGFzXG4gICAqIFwicGVyLXBpZWNlIHN0YXRlXCIgZm9yIHRoaXMgZ2FtZSwgY29tYmluaW5nIEZJREUncyBjb3JlIGF0dHJzXG4gICAqIHdpdGggYW55IHByZXNldC1kZWNsYXJlZCBhZGRpdGlvbnMuXG4gICAqXG4gICAqIFVzZWQgYnkgdGhlIGRhbWFnZSBwaXBlbGluZSdzIGRlZmF1bHQtZGVhdGggcGF0aCwgcGllY2UgcmV0cmFjdFxuICAgKiBoZWxwZXJzIGluc2lkZSBwcmVzZXRzIChxdWVlbi1zcGxpdHMgZmlzc2lvbmluZyB0aGUgcXVlZW4sXG4gICAqIGV4cGxvc2l2ZS1yb29rIGJsYXN0IGZhbGxiYWNrKSwgYW5kIGFueSBmdXR1cmUgc2F2ZS1zdGF0ZVxuICAgKiBzZXJpYWxpemF0aW9uLiBUaGlzIGlzIHRoZSBDQU5PTklDQUwgYW5zd2VyIHRvIFwid2hhdCBmYWN0c1xuICAgKiByZXByZXNlbnQgYSBwaWVjZS5cIlxuICAgKlxuICAgKiBDb21wdXRlZCBvbiBldmVyeSByZWFkIGJlY2F1c2UgdGhlIGFjdGl2ZSBwcmVzZXQgc2V0IGlzIG11dGFibGU7XG4gICAqIHRoZSBsaXN0IGlzIHRpbnkgKDwgMTAgZW50cmllcyBpbiBwcmFjdGljZSksIHNvIHdlIGRvbid0IGNhY2hlLlxuICAgKiBJZiBwZXJmIGJlY29tZXMgYSBjb25jZXJuLCBpbnZhbGlkYXRlIGEgY2FjaGUgaW5cbiAgICogYHNldEFjdGl2ZVByZXNldHNgIC8gYEFjdGl2ZVByZXNldFNldC5yZXBsYWNlQWxsYC5cbiAgICovXG4gIGdldCBlZmZlY3RpdmVQaWVjZUF0dHJzKCk6IHJlYWRvbmx5IENoZXNzQXR0cktleVtdIHtcbiAgICBjb25zdCBhdHRycyA9IG5ldyBTZXQ8Q2hlc3NBdHRyS2V5PihDT1JFX1BJRUNFX0FUVFJTKTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuYWN0aXZlUHJlc2V0cy5saXN0KCkpIHtcbiAgICAgIGNvbnN0IGRlZiA9IFBSRVNFVF9SRUdJU1RSWS5nZXQoZW50cnkuaWQpO1xuICAgICAgaWYgKCFkZWY/LnBpZWNlQXR0cmlidXRlcykgY29udGludWU7XG4gICAgICBmb3IgKGNvbnN0IGEgb2YgZGVmLnBpZWNlQXR0cmlidXRlcykgYXR0cnMuYWRkKGEpO1xuICAgIH1cbiAgICByZXR1cm4gWy4uLmF0dHJzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUeXBlZCwgcGVyLXByZXNldCwgcGVyLWVuZ2luZSBzdGF0ZSBiYWcuXG4gICAqXG4gICAqIFJldHVybnMgYW4gYWNjZXNzb3Igc2NvcGVkIHRvIGBwcmVzZXRJZGAgdGhhdCByZWFkcy93cml0ZXMgZmFjdHNcbiAgICogb24gdGhlIHJlc2VydmVkIGBQUkVTRVRfU1RBVEVfRU5USVRZYC4gQXR0cmlidXRlIGtleXMgYXJlXG4gICAqIG5hbWVzcGFjZWQgYXMgYF9fcHJlc2V0X18vJHtwcmVzZXRJZH0vJHtrZXl9YCB1bmRlciB0aGUgaG9vZCBzb1xuICAgKiB0d28gcHJlc2V0cyBjYW4gbmV2ZXIgY29sbGlkZS5cbiAgICpcbiAgICogQmVjYXVzZSBzdGF0ZSBpcyBiYWNrZWQgYnkgc2Vzc2lvbiBmYWN0cyBpdDpcbiAgICogICAtIHNlcmlhbGl6ZXMgYXV0b21hdGljYWxseSB3aXRoIHRoZSByZXN0IG9mIHNhdmUtc3RhdGUgKG5vIGV4dHJhXG4gICAqICAgICBwbHVtYmluZyDigJQgYHNlc3Npb24uYWxsRmFjdHMoKWAgYWxyZWFkeSBpbmNsdWRlcyBpdClcbiAgICogICAtIGlzIGVuZ2luZS1zY29wZWQsIHNvIHR3byBjb25jdXJyZW50IGdhbWVzIChzZXJ2ZXItc2lkZSkgaG9sZFxuICAgKiAgICAgaW5kZXBlbmRlbnQgc3RhdGUgdW5kZXIgdGhlIHNhbWUgcHJlc2V0IGlkIOKAlCBubyBtb2R1bGUtbGV2ZWxcbiAgICogICAgIGdsb2JhbHNcbiAgICogICAtIGlzIGNsZWFyZWQgd2hlbiB0aGUgcHJlc2V0IGRlYWN0aXZhdGVzIChzZWVcbiAgICogICAgIGBjbGVhclByZXNldFN0YXRlYCBjYWxsZWQgZnJvbSBgc2V0QWN0aXZlUHJlc2V0c2AgL1xuICAgKiAgICAgYHRpY2tBZnRlck1vdmVgKVxuICAgKlxuICAgKiBUaGUgdHlwZSBwYXJhbWV0ZXIgaXMgdHJ1c3RlZCBmb3IgY29udmVuaWVuY2Ug4oCUIGBzZXQoXCJ4XCIsIDUpYFxuICAgKiBkb2Vzbid0IHZlcmlmeSB0aGF0IGB4YCBpcyBgbnVtYmVyYCBpbiBgVGAuIFVzZSBzcGFyaW5nbHkgb3Igd3JhcFxuICAgKiBpbiBhIGZhY3RvcnkgZnVuY3Rpb24gcGVyIHByZXNldCB0aGF0IGVuZm9yY2VzIGl0cyBvd24gc2hhcGUuXG4gICAqL1xuICBwcmVzZXRTdGF0ZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgcHJlc2V0SWQ6IHN0cmluZyxcbiAgKTogUHJlc2V0U3RhdGU8VD4ge1xuICAgIHJldHVybiBuZXcgUHJlc2V0U3RhdGVJbXBsPFQ+KHRoaXMuc2Vzc2lvbiwgcHJlc2V0SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJhY3QgZXZlcnkgcHJlc2V0LXN0YXRlIGZhY3Qgb3duZWQgYnkgYHByZXNldElkYC4gQ2FsbGVkIGZyb21cbiAgICogYHNldEFjdGl2ZVByZXNldHNgIGFuZCBgdGlja0FmdGVyTW92ZWAgd2hlbiBhIHByZXNldCBkZWFjdGl2YXRlcyxcbiAgICogc28gc3RhbGUgc3RhdGUgZG9lc24ndCBsZWFrIGFjcm9zcyBhY3RpdmF0aW9uIGN5Y2xlcy5cbiAgICovXG4gIHByaXZhdGUgY2xlYXJQcmVzZXRTdGF0ZShwcmVzZXRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcHJlZml4ID0gYCR7UFJFU0VUX1NUQVRFX0FUVFJfUFJFRklYfSR7cHJlc2V0SWR9L2A7XG4gICAgY29uc3QgdG9SZXRyYWN0ID0gdGhpcy5zZXNzaW9uXG4gICAgICAuYWxsRmFjdHMoKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKGYpID0+XG4gICAgICAgICAgKGYuaWQgYXMgbnVtYmVyKSA9PT0gKFBSRVNFVF9TVEFURV9FTlRJVFkgYXMgbnVtYmVyKSAmJlxuICAgICAgICAgIGYuYXR0ci5zdGFydHNXaXRoKHByZWZpeCksXG4gICAgICApXG4gICAgICAubWFwKChmKSA9PiBmLmF0dHIpO1xuICAgIGZvciAoY29uc3QgYXR0ciBvZiB0b1JldHJhY3QpIHtcbiAgICAgIHRoaXMuc2Vzc2lvbi5yZXRyYWN0KFBSRVNFVF9TVEFURV9FTlRJVFksIGF0dHIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIHRoZSBhY3RpdmUgcHJlc2V0IHNldCBhbmQgZmlyZSBsaWZlY3ljbGUgaG9va3Mgb24gdHJhbnNpdGlvbnMuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIE9OTFkgcHVibGljIGVudHJ5IHBvaW50IHRoYXQgcm91dGVzIHRocm91Z2ggcHJlc2V0XG4gICAqIGBvbkFjdGl2YXRlYCAvIGBvbkRlYWN0aXZhdGVgIGhvb2tzIOKAlCBkaXJlY3QgbXV0YXRpb24gb2ZcbiAgICogYGFjdGl2ZVByZXNldHNgICh2aWEgYC5yZXBsYWNlQWxsYCkgaXMgc3RpbGwgYWxsb3dlZCBmb3IgdGVzdHMgYnV0XG4gICAqIGJ5cGFzc2VzIHRoZSBob29rcy5cbiAgICpcbiAgICogVHJhbnNpdGlvbiBvcmRlcmluZywgYnkgZGVzaWduOlxuICAgKiAgIDEuIFNuYXBzaG90IHRoZSBvbGQgaWQgc2V0LlxuICAgKiAgIDIuIFZhbGlkYXRlICsgYXBwbHkgdGhlIG5ldyBzZXQgdmlhIGBBY3RpdmVQcmVzZXRTZXQucmVwbGFjZUFsbGAuXG4gICAqICAgICAgSWYgdmFsaWRhdGlvbiB0aHJvd3MsIG5vIGhvb2tzIGZpcmUgYW5kIHRoZSBvbGQgc2V0IGlzIGludGFjdC5cbiAgICogICAzLiBGaXJlIGBvbkRlYWN0aXZhdGVgIGZvciBpZHMgaW4gb2xkLWJ1dC1ub3QtbmV3LlxuICAgKiAgIDQuIEZpcmUgYG9uQWN0aXZhdGVgIGZvciBpZHMgaW4gbmV3LWJ1dC1ub3Qtb2xkLlxuICAgKlxuICAgKiBTY29wZSBvciB0dXJucy1yZW1haW5pbmcgY2hhbmdlcyBvbiBhbiBpZCBwcmVzZW50IGluIGJvdGggc2V0cyBkb1xuICAgKiBOT1QgcmUtZmlyZSBhbnkgaG9vayDigJQgdGhlIHByZXNldCBpcyBjb25zaWRlcmVkIFwiY29udGludW91c2x5XG4gICAqIGFjdGl2ZVwiIGFjcm9zcyB0aGUgdHJhbnNpdGlvbi5cbiAgICpcbiAgICogRGVhY3RpdmF0ZS1iZWZvcmUtYWN0aXZhdGUgaXMgZGVsaWJlcmF0ZTogaXQgbGV0cyBhIHByZXNldCB0ZWFyXG4gICAqIGRvd24gc3RhdGUgY2xlYW5seSBiZWZvcmUgdGhlIGluY29taW5nIHByZXNldCByZWFkcyB0aGUgYm9hcmQuXG4gICAqIE9yZGVyaW5nIHdpdGhpbiBlYWNoIHBoYXNlIGZvbGxvd3MgdGhlIGlucHV0IGxpc3QncyBuYXR1cmFsIG9yZGVyLlxuICAgKi9cbiAgc2V0QWN0aXZlUHJlc2V0cyhyZXF1ZXN0czogcmVhZG9ubHkgQWN0aXZhdGlvblJlcXVlc3RbXSk6IHZvaWQge1xuICAgIGNvbnN0IG9sZElkcyA9IG5ldyBTZXQodGhpcy5hY3RpdmVQcmVzZXRzLmxpc3QoKS5tYXAoKGUpID0+IGUuaWQpKTtcbiAgICB0aGlzLmFjdGl2ZVByZXNldHMucmVwbGFjZUFsbChyZXF1ZXN0cyk7XG4gICAgY29uc3QgbmV3SWRzID0gbmV3IFNldChyZXF1ZXN0cy5tYXAoKHIpID0+IHIuaWQpKTtcblxuICAgIGNvbnN0IGN0eDogTGlmZWN5Y2xlQ29udGV4dCA9IHsgZW5naW5lOiB0aGlzIH07XG4gICAgZm9yIChjb25zdCBpZCBvZiBvbGRJZHMpIHtcbiAgICAgIGlmIChuZXdJZHMuaGFzKGlkKSkgY29udGludWU7XG4gICAgICBjb25zdCBkZWYgPSBQUkVTRVRfUkVHSVNUUlkuZ2V0KGlkKTtcbiAgICAgIGRlZj8ub25EZWFjdGl2YXRlPy4oY3R4KTtcbiAgICAgIC8vIENsZWFyIHByZXNldC1zdGF0ZSBBRlRFUiBvbkRlYWN0aXZhdGUgc28gdGhlIGhvb2sgY2FuIHJlYWRcbiAgICAgIC8vIChvciBleHBsaWNpdGx5IHByZXNlcnZlKSBpdHMgb3duIHN0YXRlIGR1cmluZyB0ZWFyZG93bi5cbiAgICAgIHRoaXMuY2xlYXJQcmVzZXRTdGF0ZShpZCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcmVxIG9mIHJlcXVlc3RzKSB7XG4gICAgICBpZiAob2xkSWRzLmhhcyhyZXEuaWQpKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGRlZiA9IFBSRVNFVF9SRUdJU1RSWS5nZXQocmVxLmlkKTtcbiAgICAgIGRlZj8ub25BY3RpdmF0ZT8uKGN0eCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgYSBwcmVzZXQtaW50ZXJjZXB0ZWQgY2FwdHVyZS4gRGlzcGF0Y2hlcyBgb25CZWZvcmVDYXB0dXJlYFxuICAgKiBvbiBldmVyeSBjdXJyZW50bHktYWN0aXZlIHByZXNldCBmb3IgdGhlIG1vdmVyJ3MgY29sb3I7IGlmIGFueVxuICAgKiBwcmVzZXQgcmV0dXJucyBgeyBjb25zdW1lOiB0cnVlIH1gIHRoZSBkZWZhdWx0IGNhcHR1cmUgaXMgc2tpcHBlZFxuICAgKiBhbmQgd2UgcmV0dXJuIGB0cnVlYC4gT3RoZXJ3aXNlIHRoZSBjYWxsZXIgc2hvdWxkIHByb2NlZWQgd2l0aCB0aGVcbiAgICogc3RhbmRhcmQgY2FwdHVyZSBwYXRoLlxuICAgKlxuICAgKiBgY29sb3JgIGlzIHRoZSBjb2xvciBvZiB0aGUgY2FwdHVyaW5nIHBpZWNlIChpLmUuIHdob3NlIHR1cm4gaXQgaXMpLlxuICAgKi9cbiAgcHJpdmF0ZSB0cnlJbnRlcmNlcHRDYXB0dXJlKFxuICAgIGF0dGFja2VyOiBFbnRpdHlJZCxcbiAgICB0YXJnZXQ6IEVudGl0eUlkLFxuICAgIGNvbG9yOiBQaWVjZUNvbG9yLFxuICApOiBib29sZWFuIHtcbiAgICBsZXQgY29uc3VtZWQgPSBmYWxzZTtcbiAgICBjb25zdCBjdHg6IENhcHR1cmVIb29rQ29udGV4dCA9IHtcbiAgICAgIGVuZ2luZTogdGhpcyxcbiAgICAgIGF0dGFja2VyLFxuICAgICAgdGFyZ2V0LFxuICAgICAgbW92ZXI6IGNvbG9yLFxuICAgIH07XG4gICAgZm9yIChjb25zdCBwcmVzZXQgb2YgdGhpcy5hY3RpdmVQcmVzZXRzLmdldEZvckNvbG9yKGNvbG9yKSkge1xuICAgICAgaWYgKCFwcmVzZXQub25CZWZvcmVDYXB0dXJlKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHByZXNldC5vbkJlZm9yZUNhcHR1cmUoY3R4KTtcbiAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmNvbnN1bWUgPT09IHRydWUpIGNvbnN1bWVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnN1bWVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBwaWVjZSBlbnRpdHkgb24gYHNxdWFyZWAgYW5kIGZpcmUgYG9uUGllY2VTcGF3bmAgaG9va3MuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIENBTk9OSUNBTCBzcGF3biBwYXRoLiBFdmVyeSBjb2RlIHNpdGUgdGhhdCBtYXRlcmlhbGl6ZXNcbiAgICogYSBwaWVjZSDigJQgdGhlIHF1ZWVuLXNwbGl0cyBmaXNzaW9uLCBwcm9tb3Rpb24sIGh5cG90aGV0aWNhbFxuICAgKiBzdW1tb24vcmVzdXJyZWN0IHByZXNldHMg4oCUIHNob3VsZCBnbyB0aHJvdWdoIGhlcmUgc286XG4gICAqICAgLSBgb25QaWVjZVNwYXduYCBob29rcyBnZXQgYSBjaGFuY2UgdG8gc2VlZCBwcmVzZXQtZGVjbGFyZWRcbiAgICogICAgIGF0dHJpYnV0ZXMgKEhwIGZyb20gcGllY2UtaHAsIFNoaWVsZCBmcm9tIHBpZWNlLXNoaWVsZCwg4oCmKVxuICAgKiAgICAgV0lUSE9VVCB0aG9zZSBwcmVzZXRzIGhhdmluZyB0byBpbXBsZW1lbnQgaWRlbXBvdGVudFxuICAgKiAgICAgb25BY3RpdmF0ZSBzY2Fucy5cbiAgICogICAtIGNvcmUgYXR0cnMgYXJlIGluc2VydGVkIGluIGEgY29uc2lzdGVudCBvcmRlci5cbiAgICogICAtIG5ldyBzcGF3biByZWFzb25zIGNhbiBiZSBhZGRlZCB0byB0aGUgYFBpZWNlU3Bhd25SZWFzb25gIHVuaW9uXG4gICAqICAgICB3aXRob3V0IGVkaXRpbmcgdGhpcyBmdW5jdGlvbi5cbiAgICpcbiAgICogVGhlIGluaXRpYWwgc3RhcnRpbmctcG9zaXRpb24gZ2VuZXJhdGlvbiBkb2VzIE5PVCBnbyB0aHJvdWdoIGhlcmVcbiAgICogKGl0IHByZWNlZGVzIGFueSBhY3RpdmUgcHJlc2V0cyDigJQgbm90aGluZyB0byBob29rKS4gUHJlc2V0LWF1dGhvcmVkXG4gICAqIGluaXRpYWwgcGxhY2VtZW50cyBzaG91bGQgYWN0aXZhdGUgQUZURVIgcGllY2Ugc2VlZGluZyBvciB1c2VcbiAgICogdGhpcyBmdW5jdGlvbiBleHBsaWNpdGx5IGluIHRoZWlyIGBvbkFjdGl2YXRlYC5cbiAgICovXG4gIHNwYXduUGllY2UoXG4gICAgdHlwZTogUGllY2VUeXBlLFxuICAgIGNvbG9yOiBQaWVjZUNvbG9yLFxuICAgIHNxdWFyZTogbnVtYmVyLFxuICAgIG9wdHM6IHtcbiAgICAgIHJlYWRvbmx5IHJlYXNvbj86IFBpZWNlU3Bhd25SZWFzb247XG4gICAgICByZWFkb25seSBoYXNNb3ZlZD86IGJvb2xlYW47XG4gICAgfSA9IHt9LFxuICApOiBFbnRpdHlJZCB7XG4gICAgY29uc3QgaWQgPSB0aGlzLnNlc3Npb24ubmV4dElkKCk7XG4gICAgdGhpcy5zZXNzaW9uLmluc2VydChpZCwgXCJQaWVjZVR5cGVcIiwgdHlwZSk7XG4gICAgdGhpcy5zZXNzaW9uLmluc2VydChpZCwgXCJDb2xvclwiLCBjb2xvcik7XG4gICAgdGhpcy5zZXNzaW9uLmluc2VydChpZCwgXCJQb3NpdGlvblwiLCBzcXVhcmUpO1xuICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnQoaWQsIFwiSGFzTW92ZWRcIiwgb3B0cy5oYXNNb3ZlZCA/PyBmYWxzZSk7XG5cbiAgICBjb25zdCBjdHg6IFBpZWNlU3Bhd25Db250ZXh0ID0ge1xuICAgICAgZW5naW5lOiB0aGlzLFxuICAgICAgcGllY2VJZDogaWQsXG4gICAgICB0eXBlLFxuICAgICAgY29sb3IsXG4gICAgICBzcXVhcmUsXG4gICAgICByZWFzb246IG9wdHMucmVhc29uID8/IFwic3VtbW9uXCIsXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuYWN0aXZlUHJlc2V0cy5saXN0KCkpIHtcbiAgICAgIGNvbnN0IGRlZiA9IFBSRVNFVF9SRUdJU1RSWS5nZXQoZW50cnkuaWQpO1xuICAgICAgZGVmPy5vblBpZWNlU3Bhd24/LihjdHgpO1xuICAgIH1cbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAvKipcbiAgICogRGVhbCBgYW1vdW50YCBkYW1hZ2UgdG8gYHRhcmdldGAsIHJ1bm5pbmcgaXQgdGhyb3VnaCB0aGUgcHJlc2V0XG4gICAqIGRhbWFnZSBwaXBlbGluZSBiZWZvcmUgYXBwbHlpbmcgdGhlIGRlZmF1bHQga2lsbC1vbi1kYW1hZ2UgcnVsZS5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgcHJpbWl0aXZlIHRoYXQgbGV0cyBwcmVzZXRzIGNvbXBvc2UgY2xlYW5seTpcbiAgICogICAtIFdpdGhvdXQgYW55IGRhbWFnZS1pbnRlcmNlcHRvciBwcmVzZXQgKHN0YW5kYXJkIGNoZXNzLFxuICAgKiAgICAgZXhwbG9zaXZlLXJvb2sgYWxvbmUsIGV0Yy4pLCBkYW1hZ2Ug4omlIDEgcmV0cmFjdHMgdGhlIHRhcmdldC5cbiAgICogICAtIFdpdGggYHBpZWNlLWhwYCBhY3RpdmUsIHRoZSBob29rIGRlY3JlbWVudHMgdGhlIHRhcmdldCdzIEhwXG4gICAqICAgICBmYWN0IGFuZCBvbmx5IHJldHJhY3RzIHdoZW4gSHAgd291bGQgZ28g4omkIDAuXG4gICAqXG4gICAqIENhbGxlcnMgc2hvdWxkIHVzZSB0aGlzIGluc3RlYWQgb2YgcmV0cmFjdGluZyBwaWVjZSBmYWN0cyBkaXJlY3RseVxuICAgKiB3aGVuZXZlciB0aGV5IHdhbnQgdG8gY29tcG9zZSB3aXRoIEhQL2FybW9yL3NoaWVsZC1saWtlIHByZXNldHMuXG4gICAqIFNlZSBgZXhwbG9zaXZlLXJvb2tgIChBb0UgY2FsbHMgZGVhbERhbWFnZSBvbiBldmVyeSB2aWN0aW0pIGFuZFxuICAgKiBgcG9pc29uZWQtc3F1YXJlc2AgKHRpY2sgY2FsbHMgZGVhbERhbWFnZSBvbiBldmVyeSBvY2N1cGFudCBvZiBhXG4gICAqIHBvaXNvbmVkIHNxdWFyZSkgZm9yIHRoZSBjYW5vbmljYWwgY2FsbCBzaXRlcy5cbiAgICpcbiAgICogVGhlIGZpcnN0IHByZXNldCB3aG9zZSBgb25EYW1hZ2VgIHJldHVybnMgYGNvbnN1bWU6IHRydWVgIHdpbnMg4oCUXG4gICAqIGZ1cnRoZXIgcHJlc2V0cyBhcmUgbm90IGNvbnN1bHRlZCBmb3IgdGhhdCBldmVudC4gVGhpcyBpc1xuICAgKiBkZWxpYmVyYXRlOiBIUCBpcyB0aGUgT05FIGF1dGhvcml0eSBvbiBkYW1hZ2XihpJkZWF0aDsgdHdvIGRhbWFnZVxuICAgKiBpbnRlcmNlcHRvcnMgd291bGQgcmFjZSBhbmQgcHJvZHVjZSB6b21iaWUgc3RhdGUgKHRoZSBidWcgdGhpc1xuICAgKiBwaXBlbGluZSB3YXMgZGVzaWduZWQgdG8gZWxpbWluYXRlKS5cbiAgICpcbiAgICogUmV0dXJucyBgeyBkaWVkOiB0cnVlIH1gIGlmIHRoZSB0YXJnZXQgd2FzIHJldHJhY3RlZCAoZWl0aGVyIGJ5IGFcbiAgICogaG9vayB0aGF0IGtpbGxlZCBvciBieSB0aGUgZGVmYXVsdCBwYXRoKSwgYHsgZGllZDogZmFsc2UgfWAgaWYgaXRcbiAgICogc3Vydml2ZWQgKEhQIGFic29yYmVkIGl0LCBvciBhbW91bnQgd2FzIDApLlxuICAgKi9cbiAgZGVhbERhbWFnZShcbiAgICB0YXJnZXQ6IEVudGl0eUlkLFxuICAgIGFtb3VudDogbnVtYmVyLFxuICAgIGN0eDogRGFtYWdlQ29udGV4dCxcbiAgKTogeyBkaWVkOiBib29sZWFuIH0ge1xuICAgIGlmIChhbW91bnQgPD0gMCkgcmV0dXJuIHsgZGllZDogZmFsc2UgfTtcblxuICAgIC8vIFNjb3BlLWF3YXJlIGRpc3BhdGNoOiBwcmUtcmVzb2x2ZSB0aGUgdGFyZ2V0J3MgY29sb3Igc28gd2UgY2FuXG4gICAgLy8gc2tpcCBwcmVzZXRzIHdob3NlIHNjb3BlIGRvZXNuJ3QgY292ZXIgaXQuIEEgYHNjb3BlPXdoaXRlYCBwcmVzZXRcbiAgICAvLyBvbmx5IGRhbWFnZXMvcHJvdGVjdHMgd2hpdGUgcGllY2VzOyB3aXRob3V0IHRoaXMgZmlsdGVyLCBhIHdoaXRlLVxuICAgIC8vIG9ubHkgU2hpZWxkIHByZXNldCB3b3VsZCBhYnNvcmIgZGFtYWdlIG9uIGJsYWNrIHBpZWNlcyB0b28uXG4gICAgLy8gUHJlc2V0cyB3aXRob3V0IGEgY29sb3Itc2Vuc2l0aXZlIGhvb2sgb3B0IGluIHRvIHVuaXZlcnNhbFxuICAgIC8vIGRpc3BhdGNoIGJ5IGxlYXZpbmcgc2NvcGUgYXMgXCJib3RoXCIgKHRoZSBkZWZhdWx0KS5cbiAgICBjb25zdCB0YXJnZXRDb2xvciA9IHRoaXMuc2Vzc2lvbi5nZXQodGFyZ2V0LCBcIkNvbG9yXCIpIGFzXG4gICAgICB8IFBpZWNlQ29sb3JcbiAgICAgIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGhvb2tDdHg6IERhbWFnZUhvb2tDb250ZXh0ID0ge1xuICAgICAgZW5naW5lOiB0aGlzLFxuICAgICAgdGFyZ2V0LFxuICAgICAgYW1vdW50LFxuICAgICAga2luZDogY3R4LmtpbmQsXG4gICAgICAuLi4oY3R4LmF0dGFja2VyICE9PSB1bmRlZmluZWQgPyB7IGF0dGFja2VyOiBjdHguYXR0YWNrZXIgfSA6IHt9KSxcbiAgICB9O1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5hY3RpdmVQcmVzZXRzLmxpc3QoKSkge1xuICAgICAgLy8gSWYgd2Uga25vdyB0aGUgdGFyZ2V0J3MgY29sb3IsIHJlcXVpcmUgdGhlIHByZXNldCdzIHNjb3BlIHRvXG4gICAgICAvLyBjb3ZlciB0aGF0IGNvbG9yLiBJZiB3ZSBkb24ndCAoZGVnZW5lcmF0ZSDigJQgdGFyZ2V0IGhhcyBub1xuICAgICAgLy8gQ29sb3IgZmFjdCksIGZpcmUgb24gZXZlcnkgcHJlc2V0IHJlZ2FyZGxlc3MuXG4gICAgICBpZiAoXG4gICAgICAgIHRhcmdldENvbG9yICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgZW50cnkuc2NvcGUgIT09IFwiYm90aFwiICYmXG4gICAgICAgIGVudHJ5LnNjb3BlICE9PSB0YXJnZXRDb2xvclxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgZGVmID0gUFJFU0VUX1JFR0lTVFJZLmdldChlbnRyeS5pZCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBkZWY/Lm9uRGFtYWdlPy4oaG9va0N0eCk7XG4gICAgICBpZiAocmVzdWx0Py5jb25zdW1lID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiB7IGRpZWQ6IHJlc3VsdC5kaWVkID09PSB0cnVlIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdDogYW55IGRhbWFnZSBpcyBsZXRoYWwuIFJldHJhY3QgZXZlcnkgZWZmZWN0aXZlIHBpZWNlXG4gICAgLy8gYXR0cmlidXRlIChjb3JlICsgcHJlc2V0LWRlY2xhcmVkKSBzbyBkb3duc3RyZWFtIHF1ZXJpZXMgc2VlIHRoZVxuICAgIC8vIHBpZWNlIGFzIHRydWx5IGdvbmUuXG4gICAgZm9yIChjb25zdCBhdHRyIG9mIHRoaXMuZWZmZWN0aXZlUGllY2VBdHRycykge1xuICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5jb250YWlucyh0YXJnZXQsIGF0dHIpKSB7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5yZXRyYWN0KHRhcmdldCwgYXR0cik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IGRpZWQ6IHRydWUgfTtcbiAgfVxuXG4gIGdldEN1cnJlbnRUdXJuKCk6IFBpZWNlQ29sb3Ige1xuICAgIHJldHVybiAodGhpcy5zZXNzaW9uLmdldChHQU1FX0VOVElUWSwgXCJUdXJuXCIpIGFzIFBpZWNlQ29sb3IpID8/IFwid2hpdGVcIjtcbiAgfVxuXG4gIGdldEFsbExlZ2FsTW92ZXMoKTogTGVnYWxNb3ZlW10ge1xuICAgIGNvbnN0IGNvbG9yID0gdGhpcy5nZXRDdXJyZW50VHVybigpO1xuICAgIGNvbnN0IGZhY3RzID0gdGhpcy5zZXNzaW9uLmFsbEZhY3RzKCk7XG4gICAgY29uc3QgbW92ZXM6IExlZ2FsTW92ZVtdID0gW107XG5cbiAgICBjb25zdCBwaWVjZXMgPSBmYWN0c1xuICAgICAgLmZpbHRlcihmID0+IGYuYXR0ciA9PT0gXCJDb2xvclwiICYmIGYudmFsdWUgPT09IGNvbG9yICYmIChmLmlkIGFzIG51bWJlcikgPiAwKVxuICAgICAgLm1hcChmID0+ICh7XG4gICAgICAgIGlkOiBmLmlkIGFzIEVudGl0eUlkLFxuICAgICAgICB0eXBlOiBmYWN0cy5maW5kKHQgPT4gdC5pZCA9PT0gZi5pZCAmJiB0LmF0dHIgPT09IFwiUGllY2VUeXBlXCIpXG4gICAgICAgICAgPy52YWx1ZSBhcyBQaWVjZVR5cGUsXG4gICAgICB9KSlcbiAgICAgIC5maWx0ZXIocCA9PiBwLnR5cGUgIT09IHVuZGVmaW5lZCk7XG5cbiAgICBmb3IgKGNvbnN0IHBpZWNlIG9mIHBpZWNlcykge1xuICAgICAgY29uc3QgYmFzZUdldHRlciA9IGxvb2t1cE1vdmVHZW5lcmF0b3IocGllY2UudHlwZSk7XG4gICAgICAvLyBGb2xkIHRoZSB0cmFuc2Zvcm1Nb3ZlR2VuZXJhdG9yIGNoYWluIG92ZXIgYWxsIGFjdGl2ZSBwcmVzZXRzXG4gICAgICAvLyAoc2NvcGUtZmlsdGVyZWQgZm9yIGBjb2xvcmApLiBFYWNoIHByZXNldCdzIHdyYXBwZXIgcmVjZWl2ZXMgdGhlXG4gICAgICAvLyBPVVRQVVQgb2YgdGhlIHByZXZpb3VzIOKAlCBjb21wb3NpbmcgY2xlYW5seS4gV2Ugc2VlZCB3aXRoIHRoZVxuICAgICAgLy8gdHlwZS1yZWdpc3RyeSBnZW5lcmF0b3IsIG9yIGEgZGVnZW5lcmF0ZSBlbXB0eS1tb3ZlIGdlbmVyYXRvciBpZlxuICAgICAgLy8gdGhlIHBpZWNlIHR5cGUgaXMgdW5rbm93biAoa2VlcHMgbGF0ZXIgd3JhcHBlcnMgd2VsbC1kZWZpbmVkKS5cbiAgICAgIGNvbnN0IHNjb3BlZFByZXNldHMgPSB0aGlzLmFjdGl2ZVByZXNldHMuZ2V0Rm9yQ29sb3IoY29sb3IpO1xuICAgICAgY29uc3Qgc2VlZEdldHRlcjogTW92ZUdldHRlciA9XG4gICAgICAgIGJhc2VHZXR0ZXIgPz8gKChfczogU2Vzc2lvbiwgX2lkOiBFbnRpdHlJZCkgPT4gW10gYXMgTGVnYWxNb3ZlW10pO1xuICAgICAgY29uc3QgZ2V0dGVyOiBNb3ZlR2V0dGVyID0gc2NvcGVkUHJlc2V0c1xuICAgICAgICAuZmlsdGVyKHAgPT4gcC50cmFuc2Zvcm1Nb3ZlR2VuZXJhdG9yKVxuICAgICAgICAucmVkdWNlPE1vdmVHZXR0ZXI+KFxuICAgICAgICAgIChnZW4sIHByZXNldCkgPT4gcHJlc2V0LnRyYW5zZm9ybU1vdmVHZW5lcmF0b3IhKHRoaXMsIHBpZWNlLmlkLCBnZW4pLFxuICAgICAgICAgIHNlZWRHZXR0ZXIsXG4gICAgICAgICk7XG4gICAgICAvLyBTa2lwIHBpZWNlcyB3aXRoIG5vIGtub3duIHR5cGUgQU5EIG5vIHRyYW5zZm9ybSDigJQgc2FtZSBzZW1hbnRpY3NcbiAgICAgIC8vIGFzIHRoZSBvcmlnaW5hbCBcInVua25vd24gdHlwZSDih5IgaW1tb2JpbGVcIiBndWFyZCwgYnV0IG5vdyBhXG4gICAgICAvLyB0cmFuc2Zvcm0gcHJlc2V0IGNhbiBzdGlsbCBwcm9kdWNlIG1vdmVzIGZvciBhbiBvdGhlcndpc2UgdW5rbm93blxuICAgICAgLy8gdHlwZS5cbiAgICAgIGlmICghYmFzZUdldHRlciAmJiBzY29wZWRQcmVzZXRzLmV2ZXJ5KHAgPT4gIXAudHJhbnNmb3JtTW92ZUdlbmVyYXRvcikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGxldCBwaWVjZU1vdmVzID0gZ2V0dGVyKHRoaXMuc2Vzc2lvbiwgcGllY2UuaWQpO1xuXG4gICAgICAvLyBBZGQgZW4gcGFzc2FudCBmb3IgcGF3bnNcbiAgICAgIGlmIChwaWVjZS50eXBlID09PSBcInBhd25cIikge1xuICAgICAgICBwaWVjZU1vdmVzID0gW1xuICAgICAgICAgIC4uLnBpZWNlTW92ZXMsXG4gICAgICAgICAgLi4uZ2V0RW5QYXNzYW50TW92ZXModGhpcy5zZXNzaW9uLCBwaWVjZS5pZCksXG4gICAgICAgIF07XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBjYXN0bGluZyBmb3Iga2luZ3NcbiAgICAgIGlmIChwaWVjZS50eXBlID09PSBcImtpbmdcIikge1xuICAgICAgICBjb25zdCBlbmVteUNvbG9yOiBQaWVjZUNvbG9yID0gY29sb3IgPT09IFwid2hpdGVcIiA/IFwiYmxhY2tcIiA6IFwid2hpdGVcIjtcbiAgICAgICAgY29uc3QgY2FzdGxpbmcgPSBnZXRDYXN0bGluZ01vdmVzKFxuICAgICAgICAgIHRoaXMuc2Vzc2lvbixcbiAgICAgICAgICBwaWVjZS5pZCxcbiAgICAgICAgICAocywgc3EpID0+IGlzU3F1YXJlQXR0YWNrZWQocywgc3EsIGVuZW15Q29sb3IpLFxuICAgICAgICApO1xuICAgICAgICBwaWVjZU1vdmVzID0gWy4uLnBpZWNlTW92ZXMsIC4uLmNhc3RsaW5nXTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVwbGFjZSByYXcgcHJvbW90aW9uLXJhbmsgcGF3biBtb3ZlcyB3aXRoIHByb21vdGlvbi10YWdnZWQgdmFyaWFudHNcbiAgICAgIGlmIChwaWVjZS50eXBlID09PSBcInBhd25cIikge1xuICAgICAgICBjb25zdCBwcm9tb3Rpb25zID0gZ2V0UHJvbW90aW9uTW92ZXModGhpcy5zZXNzaW9uLCBwaWVjZS5pZCk7XG4gICAgICAgIGlmIChwcm9tb3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBwcm9tb3Rpb25Ub3MgPSBuZXcgU2V0KHByb21vdGlvbnMubWFwKG0gPT4gbS50bykpO1xuICAgICAgICAgIHBpZWNlTW92ZXMgPSBwaWVjZU1vdmVzLmZpbHRlcihtID0+ICFwcm9tb3Rpb25Ub3MuaGFzKG0udG8pKTtcbiAgICAgICAgICBwaWVjZU1vdmVzID0gWy4uLnBpZWNlTW92ZXMsIC4uLnByb21vdGlvbnNdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFwcGx5IGFjdGl2ZSBwcmVzZXQgcnVsZXMgZm9yIHRoZSBjb2xvciB3aG9zZSB0dXJuIGl0IGlzLiBUaGVcbiAgICAgIC8vIHBlci1jb2xvciBmaWx0ZXIgaW1wbGVtZW50cyBgc2NvcGU9d2hpdGVgIC8gYHNjb3BlPWJsYWNrYCDigJQgYVxuICAgICAgLy8gd2hpdGUtb25seSBwcmVzZXQgbmV2ZXIgY29udHJpYnV0ZXMgbW92ZXMgd2hpbGUgYmxhY2sgaXMgb24gbW92ZS5cbiAgICAgIC8vXG4gICAgICAvLyBPcmRlciBtYXR0ZXJzIOKAlCBgZ2V0RXh0cmFNb3Zlc2AgY29udHJpYnV0ZXMgdG8gdGhlIHNldCB0aGF0XG4gICAgICAvLyBgZmlsdGVyTW92ZXNgIG9wZXJhdGVzIG9uLCBzbyBldmVyeSBhY3RpdmUgcHJlc2V0IHNlZXMgdGhlIGZ1bGxcbiAgICAgIC8vIGFnZ3JlZ2F0ZWQgc2V0IChpbmNsdWRpbmcgcHJpb3IgcHJlc2V0cycgYWRkaXRpb25zKS5cbiAgICAgIGNvbnN0IGFjdGl2ZVByZXNldHMgPSBzY29wZWRQcmVzZXRzO1xuICAgICAgZm9yIChjb25zdCBwcmVzZXQgb2YgYWN0aXZlUHJlc2V0cykge1xuICAgICAgICBpZiAocHJlc2V0LmdldEV4dHJhTW92ZXMpIHtcbiAgICAgICAgICBwaWVjZU1vdmVzID0gW1xuICAgICAgICAgICAgLi4ucGllY2VNb3ZlcyxcbiAgICAgICAgICAgIC4uLnByZXNldC5nZXRFeHRyYU1vdmVzKHRoaXMsIHBpZWNlLmlkKSxcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHByZXNldCBvZiBhY3RpdmVQcmVzZXRzKSB7XG4gICAgICAgIGlmIChwcmVzZXQuZmlsdGVyTW92ZXMpIHtcbiAgICAgICAgICBwaWVjZU1vdmVzID0gcHJlc2V0LmZpbHRlck1vdmVzKHBpZWNlTW92ZXMsIHRoaXMsIHBpZWNlLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBtb3Zlcy5wdXNoKC4uLnBpZWNlTW92ZXMpO1xuICAgIH1cblxuICAgIC8vIFNlbGYtY2hlY2sgZmlsdGVyOiBza2lwIGl0IGlmZiBhbnkgYWN0aXZlIHByZXNldCAoZm9yIHRoaXMgY29sb3IpXG4gICAgLy8gZXhwbGljaXRseSBvcHRzIG91dCB2aWEgc2hvdWxkRmlsdGVyU2VsZkNoZWNrIHJldHVybmluZyBmYWxzZS5cbiAgICAvLyBUaGlzIGlzIGhvdyBgcGllY2UtaHBgIGFsbG93cyB0aGUga2luZyB0byBzdGF5IG9uIGFuIGF0dGFja2VkXG4gICAgLy8gc3F1YXJlIOKAlCBhIFwiaGl0XCIgY29zdHMgSFAgcmF0aGVyIHRoYW4gbG9zaW5nIHRoZSBnYW1lLlxuICAgIGxldCBhcHBseUZpbHRlciA9IHRydWU7XG4gICAgY29uc3Qgc2VsZkNoZWNrQ3R4OiBTZWxmQ2hlY2tGaWx0ZXJDb250ZXh0ID0geyBlbmdpbmU6IHRoaXMsIGNvbG9yIH07XG4gICAgZm9yIChjb25zdCBwcmVzZXQgb2YgdGhpcy5hY3RpdmVQcmVzZXRzLmdldEZvckNvbG9yKGNvbG9yKSkge1xuICAgICAgaWYgKHByZXNldC5zaG91bGRGaWx0ZXJTZWxmQ2hlY2s/LihzZWxmQ2hlY2tDdHgpID09PSBmYWxzZSkge1xuICAgICAgICBhcHBseUZpbHRlciA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFwcGx5RmlsdGVyID8gZmlsdGVyU2VsZkNoZWNrTW92ZXModGhpcy5zZXNzaW9uLCBtb3ZlcywgY29sb3IpIDogbW92ZXM7XG4gIH1cblxuICBhcHBseU1vdmUobW92ZTogTGVnYWxNb3ZlLCBwcm9tb3RlVG86IFBpZWNlVHlwZSA9IFwicXVlZW5cIik6IEdhbWVSZXN1bHQge1xuICAgIGNvbnN0IGNvbG9yID0gdGhpcy5nZXRDdXJyZW50VHVybigpO1xuXG4gICAgLy8gUGhhc2UgaG9vazogZ2l2ZSBwcmVzZXRzIGEgY2hhbmNlIHRvIHZldG8gdGhlIG1vdmUuIFNjb3BlLWF3YXJlXG4gICAgLy8gKGZpcmVzIG9ubHkgZm9yIHByZXNldHMgd2hvc2Ugc2NvcGUgY292ZXJzIHRoZSBtb3ZlcikuIFdlIGRvXG4gICAgLy8gdGhpcyBCRUZPUkUgYW55IG11dGF0aW9uIHNvIGEgdmV0byBsZWF2ZXMgc3RhdGUgY2xlYW4uXG4gICAgY29uc3QgYmVmb3JlQ3R4OiBCZWZvcmVNb3ZlQ29udGV4dCA9IHtcbiAgICAgIGVuZ2luZTogdGhpcyxcbiAgICAgIG1vdmVyOiBjb2xvcixcbiAgICAgIHBpZWNlSWQ6IG1vdmUucGllY2VJZCxcbiAgICAgIGZyb206IG1vdmUuZnJvbSxcbiAgICAgIHRvOiBtb3ZlLnRvLFxuICAgICAgaXNDYXB0dXJlOiBtb3ZlLmlzQ2FwdHVyZSA9PT0gdHJ1ZSxcbiAgICB9O1xuICAgIGZvciAoY29uc3QgcHJlc2V0IG9mIHRoaXMuYWN0aXZlUHJlc2V0cy5nZXRGb3JDb2xvcihjb2xvcikpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHByZXNldC5vbkJlZm9yZU1vdmU/LihiZWZvcmVDdHgpO1xuICAgICAgaWYgKHJlc3VsdD8uY2FuY2VsID09PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBNb3ZlQ2FuY2VsbGVkRXJyb3IoXG4gICAgICAgICAgcmVzdWx0LnJlYXNvbiA/PyBgTW92ZSBjYW5jZWxsZWQgYnkgcHJlc2V0IFwiJHtwcmVzZXQuaWR9XCJgLFxuICAgICAgICAgIHByZXNldC5pZCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmYWN0cyA9IHRoaXMuc2Vzc2lvbi5hbGxGYWN0cygpO1xuICAgIGNvbnN0IG1vdmluZ1R5cGUgPSBmYWN0cy5maW5kKFxuICAgICAgZiA9PiBmLmlkID09PSBtb3ZlLnBpZWNlSWQgJiYgZi5hdHRyID09PSBcIlBpZWNlVHlwZVwiLFxuICAgICk/LnZhbHVlIGFzIFBpZWNlVHlwZTtcblxuICAgIGNvbnN0IGVwVGFyZ2V0ID0gdGhpcy5zZXNzaW9uLmdldChHQU1FX0VOVElUWSwgXCJFblBhc3NhbnRUYXJnZXRcIik7XG4gICAgY29uc3QgaXNFblBhc3NhbnQgPVxuICAgICAgbW92aW5nVHlwZSA9PT0gXCJwYXduXCIgJiZcbiAgICAgIGVwVGFyZ2V0ICE9PSBudWxsICYmXG4gICAgICBlcFRhcmdldCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBlcFRhcmdldCA9PT0gbW92ZS50bztcblxuICAgIGNvbnN0IGlzQ2FzdGxpbmcgPSAobW92ZSBhcyBDYXN0bGluZ01vdmUpLmlzQ2FzdGxpbmcgPT09IHRydWU7XG5cbiAgICAvLyBDYXB0dXJlIHByZS1tb3ZlIHN0YXRlIGZvciB0aGUgTW92ZVJlY29yZCB3ZSdsbCBsb2cgYXQgdGhlIGVuZC5cbiAgICAvLyBUYWtpbmcgdGhlIHNuYXBzaG90IE5PVyDigJQgYmVmb3JlIGFueSBtdXRhdGlvbiDigJQgaXMgdGhlIG9ubHkgd2F5XG4gICAgLy8gdG8ga25vdyB3aGF0IHdhcyBvbiB0aGUgZGVzdGluYXRpb24gc3F1YXJlLCBzaW5jZSB0aGUgY2FwdHVyZVxuICAgIC8vIHBhdGggbWF5IHJldHJhY3QgaXQgbWlkLWZ1bmN0aW9uLlxuICAgIGNvbnN0IGNhcHR1cmVkSWRGb3JMb2c6IEVudGl0eUlkIHwgbnVsbCA9IG1vdmUuaXNDYXB0dXJlXG4gICAgICA/IChpc0VuUGFzc2FudFxuICAgICAgICAgID8gdGhpcy5nZXRQaWVjZUF0KFxuICAgICAgICAgICAgICBjb2xvciA9PT0gXCJ3aGl0ZVwiXG4gICAgICAgICAgICAgICAgPyAoKG1vdmUudG8gLSA4KSBhcyBudW1iZXIpXG4gICAgICAgICAgICAgICAgOiAoKG1vdmUudG8gKyA4KSBhcyBudW1iZXIpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogdGhpcy5nZXRQaWVjZUF0KG1vdmUudG8pKVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IGNhcHR1cmVkVHlwZUZvckxvZzogUGllY2VUeXBlIHwgbnVsbCA9XG4gICAgICBjYXB0dXJlZElkRm9yTG9nICE9PSBudWxsXG4gICAgICAgID8gKGZhY3RzLmZpbmQoXG4gICAgICAgICAgICAoZikgPT4gZi5pZCA9PT0gY2FwdHVyZWRJZEZvckxvZyAmJiBmLmF0dHIgPT09IFwiUGllY2VUeXBlXCIsXG4gICAgICAgICAgKT8udmFsdWUgYXMgUGllY2VUeXBlIHwgdW5kZWZpbmVkKSA/PyBudWxsXG4gICAgICAgIDogbnVsbDtcblxuICAgIGlmIChpc0VuUGFzc2FudCkge1xuICAgICAgLy8gRW4gcGFzc2FudCBjYXB0dXJlcyB0aGUgcGF3biBvbiB0aGUgU0tJUFBFRCBzcXVhcmUsIG5vdCBvblxuICAgICAgLy8gYG1vdmUudG9gLiBXZSBzdGlsbCBmaXJlIGBvbkJlZm9yZUNhcHR1cmVgIGZpcnN0IHNvIHByZXNldHNcbiAgICAgIC8vIGxpa2UgcXVlZW4tc3BsaXRzIC8gZXhwbG9zaXZlLXJvb2sgZ2V0IGEgY2hhbmNlIHRvIHRyYW5zZm9ybVxuICAgICAgLy8gdGhlIGNhcHR1cmUgd2hvbGVzYWxlLiBJZiBub25lIGNvbnN1bWUsIHdlIHJvdXRlIHRoZSB0YXJnZXRcbiAgICAgIC8vIHRocm91Z2ggYGRlYWxEYW1hZ2VgIHNvIHRoZSBIUCBwaXBlbGluZSBnZXRzIHRvIGFic29yYiBpdC5cbiAgICAgIGNvbnN0IGNhcHR1cmVkU3F1YXJlID1cbiAgICAgICAgY29sb3IgPT09IFwid2hpdGVcIiA/ICgobW92ZS50byAtIDgpIGFzIG51bWJlcikgOiAoKG1vdmUudG8gKyA4KSBhcyBudW1iZXIpO1xuICAgICAgY29uc3QgY2FwdHVyZWRJZCA9IHRoaXMuZ2V0UGllY2VBdChjYXB0dXJlZFNxdWFyZSk7XG4gICAgICBsZXQgY29uc3VtZWQgPSBmYWxzZTtcbiAgICAgIGxldCB0YXJnZXREaWVkID0gdHJ1ZTsgLy8gZGVmYXVsdDogbm8gY2FwdHVyZWQgcGF3biBmb3VuZCAoZGVnZW5lcmF0ZSksIHRyZWF0IGFzIFwiZGllZFwiXG4gICAgICBpZiAoY2FwdHVyZWRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdW1lZCA9IHRoaXMudHJ5SW50ZXJjZXB0Q2FwdHVyZShtb3ZlLnBpZWNlSWQsIGNhcHR1cmVkSWQsIGNvbG9yKTtcbiAgICAgICAgaWYgKCFjb25zdW1lZCkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZGVhbERhbWFnZShjYXB0dXJlZElkLCAxLCB7XG4gICAgICAgICAgICBraW5kOiBcImNhcHR1cmVcIixcbiAgICAgICAgICAgIGF0dGFja2VyOiBtb3ZlLnBpZWNlSWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGFyZ2V0RGllZCA9IHJlc3VsdC5kaWVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBBdHRhY2tlciBhZHZhbmNlcyBkaWFnb25hbGx5IHVubGVzcyBhIHByZXNldCBjb25zdW1lZCB0aGVcbiAgICAgIC8vIGNhcHR1cmUgKGl0IG93bnMgcG9zaXRpb25pbmcpIG9yIHRoZSBjYXB0dXJlZCBwYXduIHN1cnZpdmVkXG4gICAgICAvLyBIUCBkYW1hZ2UgKHBva2Ug4oCUIGF0dGFja2VyIHN0YXlzKS5cbiAgICAgIGlmICghY29uc3VtZWQgJiYgdGFyZ2V0RGllZCkge1xuICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0KG1vdmUucGllY2VJZCwgXCJQb3NpdGlvblwiLCBtb3ZlLnRvKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydChtb3ZlLnBpZWNlSWQsIFwiSGFzTW92ZWRcIiwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0Nhc3RsaW5nKSB7XG4gICAgICBhcHBseUNhc3RsaW5nTW92ZSh0aGlzLnNlc3Npb24sIG1vdmUgYXMgQ2FzdGxpbmdNb3ZlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm9ybWFsIG1vdmUuIFR3byBpbnRlcmNlcHQgbGF5ZXJzOlxuICAgICAgLy8gICAxLiBvbkJlZm9yZUNhcHR1cmUg4oCUIGxldHMgYSBwcmVzZXQgcmVwbGFjZSB0aGUgY2FwdHVyZVxuICAgICAgLy8gICAgICBtZWNoYW5pYyBlbnRpcmVseSAocXVlZW4tc3BsaXRzIGZpc3Npb24sIGV4cGxvc2l2ZS1yb29rXG4gICAgICAvLyAgICAgIEFvRSwgY2FwdHVyZS10by13aW4gd2lubmVyLXJlY29yZGluZykuIElmIGNvbnN1bWVkIHRoZVxuICAgICAgLy8gICAgICBlbmdpbmUgZG9lcyBub3RoaW5nIGVsc2UgZm9yIHRoaXMgY2FwdHVyZS5cbiAgICAgIC8vICAgMi4gZGVhbERhbWFnZSDigJQgcnVucyBhZnRlciwgb25seSBpZiBub3RoaW5nIGNvbnN1bWVkLiBUaGlzXG4gICAgICAvLyAgICAgIGlzIHRoZSBwaXBlbGluZSBIUCBob29rcywgYW5kIGlzIHdoYXQgbWFrZXMgXCJyb29rXG4gICAgICAvLyAgICAgIGNhcHR1cmVzIHBhd25cIiBkZWNyZW1lbnQgdGhlIHBhd24ncyBIcCBieSAxIHJhdGhlciB0aGFuXG4gICAgICAvLyAgICAgIGluc3RhbnRseSBraWxsaW5nLiBPbiBkZWZhdWx0IChubyBpbnRlcmNlcHRvcikgdGhlIHRhcmdldFxuICAgICAgLy8gICAgICBpcyByZXRyYWN0ZWQgYW5kIGBkaWVkPXRydWVgIGlzIHJldHVybmVkLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBhdHRhY2tlciBhZHZhbmNlcyBvbnRvIHRoZSB0YXJnZXQgc3F1YXJlIGlmZiB0aGUgdGFyZ2V0XG4gICAgICAvLyBBQ1RVQUxMWSBESUVELiBOb24tbGV0aGFsIGNhcHR1cmVzIGxlYXZlIHRoZSBhdHRhY2tlciBpblxuICAgICAgLy8gcGxhY2U7IHR1cm4gc3RpbGwgYWR2YW5jZXMgc28gdGhlIG1vdmUgY291bnRzIGFzIGEgXCJwb2tlXCIuXG4gICAgICBsZXQgY29uc3VtZWQgPSBmYWxzZTtcbiAgICAgIGxldCBjYXB0dXJlUmVzb2x2ZWQgPSB0cnVlOyAvLyBkZWZhdWx0OiBubyBjYXB0dXJlIGhhcHBlbmVkLCB0cmVhdCBhcyBcImRpZWRcIlxuICAgICAgaWYgKG1vdmUuaXNDYXB0dXJlKSB7XG4gICAgICAgIGNvbnN0IGNhcHR1cmVkSWQgPSB0aGlzLmdldFBpZWNlQXQobW92ZS50byk7XG4gICAgICAgIGlmIChjYXB0dXJlZElkICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3VtZWQgPSB0aGlzLnRyeUludGVyY2VwdENhcHR1cmUobW92ZS5waWVjZUlkLCBjYXB0dXJlZElkLCBjb2xvcik7XG4gICAgICAgICAgaWYgKCFjb25zdW1lZCkge1xuICAgICAgICAgICAgY29uc3QgeyBkaWVkIH0gPSB0aGlzLmRlYWxEYW1hZ2UoY2FwdHVyZWRJZCwgMSwge1xuICAgICAgICAgICAgICBraW5kOiBcImNhcHR1cmVcIixcbiAgICAgICAgICAgICAgYXR0YWNrZXI6IG1vdmUucGllY2VJZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY2FwdHVyZVJlc29sdmVkID0gZGllZDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQSBjb25zdW1pbmcgcHJlc2V0IG93bnMgQUxMIHBvc3QtY2FwdHVyZSBiZWhhdmlvdXIsXG4gICAgICAgICAgICAvLyBpbmNsdWRpbmcgd2hldGhlciB0aGUgYXR0YWNrZXIgbW92ZWQuIFdlIGRvbid0IHJ1biB0aGVcbiAgICAgICAgICAgIC8vIHN0YW5kYXJkIGFkdmFuY2UgYmVsb3cuXG4gICAgICAgICAgICBjYXB0dXJlUmVzb2x2ZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFkdmFuY2UgYXR0YWNrZXIgdW5sZXNzOlxuICAgICAgLy8gICAtIGEgcHJlc2V0IGNvbnN1bWVkIHRoZSBjYXB0dXJlIChpdCBoYW5kbGVkIHBvc2l0aW9uaW5nKSwgT1JcbiAgICAgIC8vICAgLSB0aGUgY2FwdHVyZSB3YXMgbm9uLWxldGhhbCAoYXR0YWNrZXIgc3RheXMsIHRhcmdldCBzdGFuZHMpXG4gICAgICBpZiAoIWNvbnN1bWVkICYmIGNhcHR1cmVSZXNvbHZlZCkge1xuICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0KG1vdmUucGllY2VJZCwgXCJQb3NpdGlvblwiLCBtb3ZlLnRvKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydChtb3ZlLnBpZWNlSWQsIFwiSGFzTW92ZWRcIiwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb21vdGlvbiAocGF3biByZWFjaGluZyBsYXN0IHJhbmspXG4gICAgY29uc3QgZWZmZWN0aXZlVG8gPSBpc0Nhc3RsaW5nID8gKG1vdmUgYXMgQ2FzdGxpbmdNb3ZlKS50byA6IG1vdmUudG87XG4gICAgaWYgKG1vdmluZ1R5cGUgPT09IFwicGF3blwiICYmIGlzUHJvbW90aW9uTW92ZShlZmZlY3RpdmVUbywgY29sb3IpKSB7XG4gICAgICBjb25zdCBwcm9tb3RlQXMgPVxuICAgICAgICAobW92ZSBhcyBMZWdhbE1vdmUgJiB7IHByb21vdGVUbz86IFBpZWNlVHlwZSB9KS5wcm9tb3RlVG8gPz8gcHJvbW90ZVRvO1xuICAgICAgYXBwbHlQcm9tb3Rpb24odGhpcy5zZXNzaW9uLCBtb3ZlLnBpZWNlSWQsIHByb21vdGVBcyk7XG4gICAgfVxuXG4gICAgLy8gU2V0L2NsZWFyIGVuIHBhc3NhbnQgdGFyZ2V0XG4gICAgaWYgKG1vdmluZ1R5cGUgPT09IFwicGF3blwiICYmIE1hdGguYWJzKG1vdmUudG8gLSBtb3ZlLmZyb20pID09PSAxNikge1xuICAgICAgc2V0RW5QYXNzYW50VGFyZ2V0KHRoaXMuc2Vzc2lvbiwgbW92ZS5mcm9tLCBtb3ZlLnRvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xlYXJFblBhc3NhbnRUYXJnZXQodGhpcy5zZXNzaW9uKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgaGFsZm1vdmUgY2xvY2tcbiAgICB1cGRhdGVIYWxmbW92ZUNsb2NrKHRoaXMuc2Vzc2lvbiwgbW92ZSwgbW92aW5nVHlwZSA9PT0gXCJwYXduXCIpO1xuXG4gICAgLy8gU3dpdGNoIHR1cm5cbiAgICBjb25zdCBuZXh0Q29sb3I6IFBpZWNlQ29sb3IgPSBjb2xvciA9PT0gXCJ3aGl0ZVwiID8gXCJibGFja1wiIDogXCJ3aGl0ZVwiO1xuICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnQoR0FNRV9FTlRJVFksIFwiVHVyblwiLCBuZXh0Q29sb3IpO1xuXG4gICAgLy8gSW5jcmVtZW50IGZ1bGxtb3ZlIG51bWJlciBhZnRlciBibGFjaydzIG1vdmVcbiAgICBpZiAoY29sb3IgPT09IFwiYmxhY2tcIikge1xuICAgICAgY29uc3QgZm4gPVxuICAgICAgICAoKHRoaXMuc2Vzc2lvbi5nZXQoR0FNRV9FTlRJVFksIFwiRnVsbG1vdmVOdW1iZXJcIikgYXMgbnVtYmVyKSA/PyAxKSArIDE7XG4gICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0KEdBTUVfRU5USVRZLCBcIkZ1bGxtb3ZlTnVtYmVyXCIsIGZuKTtcbiAgICB9XG5cbiAgICAvLyBSZWNvcmQgcG9zaXRpb24gZm9yIHRocmVlZm9sZCByZXBldGl0aW9uXG4gICAgcmVjb3JkUG9zaXRpb24odGhpcy5zZXNzaW9uKTtcblxuICAgIC8vIFRpY2sgcHJlc2V0IGR1cmF0aW9ucyB3aXRoIHRoZSBjb2xvciB0aGF0IEpVU1QgbW92ZWQuIFBsYXllci1sb2NhbFxuICAgIC8vIHR1cm4gY291bnRpbmc6IGEgYHNjb3BlPXdoaXRlYCBwcmVzZXQgd2l0aCAzIHR1cm5zIHJlbWFpbmluZ1xuICAgIC8vIHRpY2tzIG9ubHkgd2hlbiB3aGl0ZSBwbGF5czsgYSBgc2NvcGU9Ym90aGAgdGlja3Mgb24gZXZlcnlcbiAgICAvLyBoYWxmLW1vdmUuIEVudHJpZXMgcmVhY2hpbmcgMCBhcmUgcmVtb3ZlZCBBTkQgZmlyZSBvbkRlYWN0aXZhdGVcbiAgICAvLyBzbyB0aGV5IGNhbiB0ZWFyIGRvd24gYW55IGJvYXJkIHN0YXRlIHRoZXkgaW5zdGFsbGVkLlxuICAgIGNvbnN0IGxpZmVjeWNsZUN0eDogTGlmZWN5Y2xlQ29udGV4dCA9IHsgZW5naW5lOiB0aGlzIH07XG4gICAgY29uc3QgZXhwaXJlZCA9IHRoaXMuYWN0aXZlUHJlc2V0cy50aWNrQWZ0ZXJNb3ZlKGNvbG9yKTtcbiAgICBmb3IgKGNvbnN0IGlkIG9mIGV4cGlyZWQpIHtcbiAgICAgIGNvbnN0IGRlZiA9IFBSRVNFVF9SRUdJU1RSWS5nZXQoaWQpO1xuICAgICAgZGVmPy5vbkRlYWN0aXZhdGU/LihsaWZlY3ljbGVDdHgpO1xuICAgICAgdGhpcy5jbGVhclByZXNldFN0YXRlKGlkKTtcbiAgICB9XG5cbiAgICAvLyBQb3N0LW1vdmUgcHJlc2V0IGhvb2tzOiBmaXJlIGFnYWluc3QgRVZFUlkgc3RpbGwtYWN0aXZlIHByZXNldFxuICAgIC8vIChyZWdhcmRsZXNzIG9mIHNjb3BlKS4gU2NvcGUtYXdhcmUgYmVoYXZpb3VyIGlzIHRoZSBwcmVzZXQnc1xuICAgIC8vIHJlc3BvbnNpYmlsaXR5IOKAlCBraW5nLWhlYWxzIGFmZmVjdHMgdGhlIG5vbi1tb3ZlciwgcG9pc29uZWQtc3F1YXJlc1xuICAgIC8vIGFmZmVjdHMgdGhlIG1vdmVyLCBzbyBhIHNpbmdsZSBlbmdpbmUtbGV2ZWwgc2NvcGUgZmlsdGVyIGNhbid0XG4gICAgLy8gc2VydmUgYm90aC5cbiAgICBjb25zdCBtb3ZlQ3R4OiBNb3ZlSG9va0NvbnRleHQgPSB7IGVuZ2luZTogdGhpcywgbW92ZXI6IGNvbG9yIH07XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmFjdGl2ZVByZXNldHMubGlzdCgpKSB7XG4gICAgICBjb25zdCBkZWYgPSBQUkVTRVRfUkVHSVNUUlkuZ2V0KGVudHJ5LmlkKTtcbiAgICAgIGRlZj8ub25BZnRlck1vdmU/Lihtb3ZlQ3R4KTtcbiAgICB9XG5cbiAgICAvLyBQaGFzZSBob29rOiBhIG5ldyB0dXJuIGlzIHN0YXJ0aW5nIChuZXh0Q29sb3IgaXMgbm93IHRvIG1vdmUpLlxuICAgIC8vIFNjb3BlLWF3YXJlIOKAlCBwcmVzZXRzIHNjb3BlZCB0byBhIHNwZWNpZmljIGNvbG9yIG9ubHkgZmlyZSB3aGVuXG4gICAgLy8gdGhhdCBjb2xvcidzIHR1cm4gaXMgYmVnaW5uaW5nLiBJZGVhbCBmb3IgcmVzb3VyY2UgcmVnZW4gL1xuICAgIC8vIGNvb2xkb3duIHRpY2tzIOKAlCBydW5zIEJFRk9SRSB0aGUgcGxheWVyIGFza3MgZm9yIHRoZWlyIGxlZ2FsXG4gICAgLy8gbW92ZXMsIHNvIHJlZ2VuZXJhdGVkIHN0YW1pbmEgLyByZWZyZXNoZWQgY29vbGRvd25zIGFyZVxuICAgIC8vIHJlZmxlY3RlZCBpbiB0aGUgZmlyc3QgbGVnYWwtbW92ZSBxdWVyeS5cbiAgICBjb25zdCB0dXJuU3RhcnRDdHg6IFR1cm5TdGFydENvbnRleHQgPSB7IGVuZ2luZTogdGhpcywgdHVybjogbmV4dENvbG9yIH07XG4gICAgZm9yIChjb25zdCBwcmVzZXQgb2YgdGhpcy5hY3RpdmVQcmVzZXRzLmdldEZvckNvbG9yKG5leHRDb2xvcikpIHtcbiAgICAgIHByZXNldC5vblR1cm5TdGFydD8uKHR1cm5TdGFydEN0eCk7XG4gICAgfVxuXG4gICAgLy8gRGV0ZXJtaW5lIHRlcm1pbmFsIHN0YXRlIEJFRk9SRSB3ZSBsb2csIHNvIHRoZSBNb3ZlUmVjb3JkXG4gICAgLy8gcmVmbGVjdHMgZ2FtZS1vdmVyIHN0YXR1cyBvbiB0aGUgbW92ZSB0aGF0IGNhdXNlZCBpdC5cbiAgICBjb25zdCBnYW1lUmVzdWx0ID0gdGhpcy5jaGVja0dhbWVSZXN1bHQoKTtcbiAgICBjb25zdCB0ZXJtaW5hbCA9IGdhbWVSZXN1bHQgIT09IFwib25nb2luZ1wiO1xuXG4gICAgLy8gQ2hlY2stZGV0ZWN0aW9uOiBhZnRlciB0aGUgbW92ZSArIHByZXNldCBob29rcywgaXMgdGhlIG9wcG9uZW50XG4gICAgLy8gKHRoZSBzaWRlIHdob3NlIHR1cm4gaXMgTk9XKSBpbiBjaGVjaz9cbiAgICBjb25zdCBvcHBvbmVudEluQ2hlY2sgPSBpc0luQ2hlY2sodGhpcy5zZXNzaW9uLCBuZXh0Q29sb3IpO1xuXG4gICAgLy8gQ29sbGVjdCBwcmVzZXQgY29udHJpYnV0aW9ucyB0byB0aGUgbW92ZSBkZXNjcmlwdGlvbi5cbiAgICBjb25zdCBkZXNjcmliZUN0eDogRGVzY3JpYmVNb3ZlRWZmZWN0Q29udGV4dCA9IHtcbiAgICAgIGVuZ2luZTogdGhpcyxcbiAgICAgIG1vdmVyOiBjb2xvcixcbiAgICAgIGZyb206IG1vdmUuZnJvbSxcbiAgICAgIHRvOiBtb3ZlLnRvLFxuICAgICAgbW92aW5nVHlwZSxcbiAgICAgIGNhcHR1cmVkVHlwZTogY2FwdHVyZWRUeXBlRm9yTG9nLFxuICAgICAgaXNFblBhc3NhbnQsXG4gICAgICBpc0Nhc3RsaW5nLFxuICAgICAgcHJvbW90aW9uOlxuICAgICAgICBtb3ZpbmdUeXBlID09PSBcInBhd25cIiAmJiBpc1Byb21vdGlvbk1vdmUoZWZmZWN0aXZlVG8sIGNvbG9yKVxuICAgICAgICAgID8gKChtb3ZlIGFzIExlZ2FsTW92ZSAmIHsgcHJvbW90ZVRvPzogUGllY2VUeXBlIH0pLnByb21vdGVUbyA/PyBwcm9tb3RlVG8pXG4gICAgICAgICAgOiBudWxsLFxuICAgIH07XG4gICAgY29uc3QgcHJlc2V0RWZmZWN0czogQXJyYXk8eyBwcmVzZXRJZDogc3RyaW5nOyBzdW1tYXJ5OiBzdHJpbmcgfT4gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuYWN0aXZlUHJlc2V0cy5saXN0KCkpIHtcbiAgICAgIGNvbnN0IGRlZiA9IFBSRVNFVF9SRUdJU1RSWS5nZXQoZW50cnkuaWQpO1xuICAgICAgY29uc3Qgc3VtbWFyeSA9IGRlZj8uZGVzY3JpYmVNb3ZlRWZmZWN0Py4oZGVzY3JpYmVDdHgpO1xuICAgICAgaWYgKHN1bW1hcnkgIT09IHVuZGVmaW5lZCAmJiBzdW1tYXJ5ICE9PSBcIlwiKSB7XG4gICAgICAgIHByZXNldEVmZmVjdHMucHVzaCh7IHByZXNldElkOiBlbnRyeS5pZCwgc3VtbWFyeSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNtb3ZlTG9nLnB1c2goe1xuICAgICAgZnJvbTogbW92ZS5mcm9tLFxuICAgICAgdG86IG1vdmUudG8sXG4gICAgICBtb3ZlcjogY29sb3IsXG4gICAgICBtb3ZpbmdUeXBlLFxuICAgICAgY2FwdHVyZWRJZDogY2FwdHVyZWRJZEZvckxvZyxcbiAgICAgIGNhcHR1cmVkVHlwZTogY2FwdHVyZWRUeXBlRm9yTG9nLFxuICAgICAgaXNDaGVjazogb3Bwb25lbnRJbkNoZWNrLFxuICAgICAgdGVybWluYWwsXG4gICAgICBpc0VuUGFzc2FudCxcbiAgICAgIGlzQ2FzdGxpbmcsXG4gICAgICBwcm9tb3Rpb246IGRlc2NyaWJlQ3R4LnByb21vdGlvbiBhcyBQaWVjZVR5cGUgfCBudWxsLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgcHJlc2V0RWZmZWN0cyxcbiAgICB9KTtcblxuICAgIHJldHVybiBnYW1lUmVzdWx0O1xuICB9XG5cbiAgY2hlY2tHYW1lUmVzdWx0KCk6IEdhbWVSZXN1bHQge1xuICAgIC8vIFByZXNldCBvdmVycmlkZSBwYXRoOiBydW4gb25DaGVja0dhbWVSZXN1bHQgb24gZXZlcnkgYWN0aXZlIHByZXNldFxuICAgIC8vIGluIHJlZ2lzdHJhdGlvbiBvcmRlci4gRmlyc3Qgbm9uLXVuZGVmaW5lZCByZXR1cm4gd2lucy4gVGhpcyBsZXRzXG4gICAgLy8gY2FwdHVyZS10by13aW4gYW5kIGxhc3QtcGllY2Utc3RhbmRpbmcgcmVkZWZpbmUgXCJnYW1lIG92ZXJcIlxuICAgIC8vIHdpdGhvdXQgdG91Y2hpbmcgZW5naW5lIGludGVybmFscy5cbiAgICBjb25zdCByZXN1bHRDdHg6IEdhbWVSZXN1bHRIb29rQ29udGV4dCA9IHsgZW5naW5lOiB0aGlzIH07XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmFjdGl2ZVByZXNldHMubGlzdCgpKSB7XG4gICAgICBjb25zdCBkZWYgPSBQUkVTRVRfUkVHSVNUUlkuZ2V0KGVudHJ5LmlkKTtcbiAgICAgIGNvbnN0IG92ZXJyaWRlID0gZGVmPy5vbkNoZWNrR2FtZVJlc3VsdD8uKHJlc3VsdEN0eCk7XG4gICAgICBpZiAob3ZlcnJpZGUgIT09IHVuZGVmaW5lZCkgcmV0dXJuIG92ZXJyaWRlO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRDb2xvciA9IHRoaXMuZ2V0Q3VycmVudFR1cm4oKTtcbiAgICBpZiAoaXNDaGVja21hdGUodGhpcy5zZXNzaW9uLCBuZXh0Q29sb3IpKSByZXR1cm4gXCJjaGVja21hdGVcIjtcbiAgICBpZiAoaXNTdGFsZW1hdGUodGhpcy5zZXNzaW9uLCBuZXh0Q29sb3IpKSByZXR1cm4gXCJzdGFsZW1hdGVcIjtcbiAgICBpZiAoaXNGaWZ0eU1vdmVEcmF3KHRoaXMuc2Vzc2lvbikpIHJldHVybiBcImRyYXctNTBcIjtcbiAgICBpZiAoaXNUaHJlZWZvbGRSZXBldGl0aW9uKHRoaXMuc2Vzc2lvbikpIHJldHVybiBcImRyYXctM2ZvbGRcIjtcbiAgICBpZiAoaXNJbnN1ZmZpY2llbnRNYXRlcmlhbCh0aGlzLnNlc3Npb24pKSByZXR1cm4gXCJkcmF3LWluc3VmZmljaWVudFwiO1xuICAgIHJldHVybiBcIm9uZ29pbmdcIjtcbiAgfVxuXG4gIC8qKiBGaW5kIGZpcnN0IGxlZ2FsIG1vdmUgbWF0Y2hpbmcgZnJvbSt0byBzcXVhcmVzIGFuZCBvcHRpb25hbCBwcm9tb3RlVG8uICovXG4gIGZpbmRNb3ZlKGZyb206IG51bWJlciwgdG86IG51bWJlciwgcHJvbW90ZVRvPzogUGllY2VUeXBlKTogTGVnYWxNb3ZlIHwgbnVsbCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZ2V0QWxsTGVnYWxNb3ZlcygpLmZpbmQoXG4gICAgICAgIG0gPT5cbiAgICAgICAgICBtLmZyb20gPT09IGZyb20gJiZcbiAgICAgICAgICBtLnRvID09PSB0byAmJlxuICAgICAgICAgICghbS5wcm9tb3RlVG8gfHwgbS5wcm9tb3RlVG8gPT09IChwcm9tb3RlVG8gPz8gXCJxdWVlblwiKSksXG4gICAgICApID8/IG51bGxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQaWVjZUF0KHNxdWFyZTogbnVtYmVyKTogRW50aXR5SWQgfCBudWxsIHtcbiAgICBjb25zdCBmID0gdGhpcy5zZXNzaW9uXG4gICAgICAuYWxsRmFjdHMoKVxuICAgICAgLmZpbmQoeCA9PiB4LmF0dHIgPT09IFwiUG9zaXRpb25cIiAmJiB4LnZhbHVlID09PSBzcXVhcmUgJiYgKHguaWQgYXMgbnVtYmVyKSA+IDApO1xuICAgIHJldHVybiBmID8gKGYuaWQgYXMgRW50aXR5SWQpIDogbnVsbDtcbiAgfVxufVxuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL2NoZXNzL3NyYy9lbmdpbmUudHMifQ== diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/85c7c6ae1e7237a8e62a9876eaac89c659ea1a85 b/KMr2_dqTOvh2R-Vg1E6cO/ssr/85c7c6ae1e7237a8e62a9876eaac89c659ea1a85 deleted file mode 100644 index 4aa4204..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/85c7c6ae1e7237a8e62a9876eaac89c659ea1a85 +++ /dev/null @@ -1,91 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "stateHash", { enumerable: true, configurable: true, get(){ try { return stateHash } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "replayFromLog", { enumerable: true, configurable: true, get(){ try { return replayFromLog } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/session.js", {"importedNames":["Session"]});/** - * Replay engine — reconstructs {@link Session} state from an - * {@link EventLog}, and produces a deterministic hash of a session's - * current fact state for equivalence checking. - * - * Per SPEC.md §Replay Determinism: given the same schema, rules, and - * event log, replay produces byte-identical working memory (verified - * via {@link stateHash}). Derived facts (negative {@link EntityId}s) - * are never logged — they are re-derived naturally when rules fire - * during replay. - * - * The hash is djb2 (a simple, deterministic, non-cryptographic - * algorithm). Collision resistance is not required — this is a - * fingerprint for determinism regression tests, not a security primitive. - */ - -/** - * Produce a deterministic hash of a session's fact state. - * - * Relies on {@link Session.allFacts} returning facts sorted by - * `[id asc, attr asc]` (see wm.ts). Values are serialized with - * `JSON.stringify`, which is stable for plain JSON-compatible values — - * callers that store non-JSON values in working memory must ensure - * their serialization is order-independent. - * - * Output is a zero-padded 8-character hex string (32-bit djb2). - */ -function stateHash(session) { - const facts = session.allFacts(); - const canonical = facts - .map((f) => `${f.id}:${f.attr}=${JSON.stringify(f.value)}`) - .join("|"); - // djb2 — deterministic, no crypto dependency, sufficient for - // fingerprinting fact state in tests and CI. - let hash = 5381; - for (let i = 0; i < canonical.length; i++) { - hash = ((hash << 5) + hash) ^ canonical.charCodeAt(i); - hash = hash >>> 0; // coerce to unsigned 32-bit - }; - return hash.toString(16).padStart(8, "0"); -}; -/** - * Replay a sequence of log events on a fresh {@link Session} and - * return it. The caller is responsible for registering rules on the - * session *before* replay if rule firings should re-derive facts. - * - * Events recorded against derived ids (negative {@link EntityId}s) - * are defensively skipped — the EventLog contract already excludes - * them at record time, but guarding here keeps replay correct against - * externally-sourced logs. - * - * Unknown event kinds are ignored rather than throwing: the log - * format may gain new kinds (e.g. `snapshot`) without breaking older - * replayers. - */ -function replayFromLog(events, opts = {}) { - const session = new __vite_ssr_import_0__.Session({ ...opts, autoFire: false }); - for (const event of events) { - switch (event.kind) { - case "insert": { - if (event.id === undefined || event.attr === undefined) - continue; - if (event.id < 0) - continue; - session.insert(event.id, event.attr, event.value); - break; - } - case "retract": { - if (event.id === undefined || event.attr === undefined) - continue; - if (event.id < 0) - continue; - session.retract(event.id, event.attr); - break; - } - case "fire": { - session.fireRules(); - break; - } - default: - // Forward-compatible: ignore unknown kinds. - break; - } - }; - return session; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7QUFlQSxzSkFmQTs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQTs7Ozs7Ozs7Ozs7QUFXTSxTQUFVLFNBQVMsQ0FBQyxPQUFnQjtJQUN4QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFO0lBQ2hDLE1BQU0sU0FBUyxHQUFHO1NBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFZLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtTQUNuRSxJQUFJLENBQUMsR0FBRyxDQUFDO0lBRVo7SUFDQTtJQUNBLElBQUksSUFBSSxHQUFHLElBQUk7SUFDZixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN6QyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNyRCxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JCO0lBQ0EsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQzNDO0FBV0E7Ozs7Ozs7Ozs7Ozs7O0FBY00sU0FBVSxhQUFhLENBQzNCLE1BQTJCLEVBQzNCLE9BQXNCLEVBQUU7SUFFeEIsTUFBTSxPQUFPLEdBQUcsSUFBSSw2QkFBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBRXpELEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFO1FBQzFCLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRTtZQUNsQixLQUFLLFFBQVEsQ0FBQyxDQUFDO2dCQUNiLElBQUksS0FBSyxDQUFDLEVBQUUsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTO29CQUFFO2dCQUN4RCxJQUFLLEtBQUssQ0FBQyxFQUFhLEdBQUcsQ0FBQztvQkFBRTtnQkFDOUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBYyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDN0Q7WUFDRjtZQUNBLEtBQUssU0FBUyxDQUFDLENBQUM7Z0JBQ2QsSUFBSSxLQUFLLENBQUMsRUFBRSxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVM7b0JBQUU7Z0JBQ3hELElBQUssS0FBSyxDQUFDLEVBQWEsR0FBRyxDQUFDO29CQUFFO2dCQUM5QixPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFjLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDakQ7WUFDRjtZQUNBLEtBQUssTUFBTSxDQUFDLENBQUM7Z0JBQ1gsT0FBTyxDQUFDLFNBQVMsRUFBRTtnQkFDbkI7WUFDRjtZQUNBO2dCQUNFO2dCQUNBO1FBQ0o7SUFDRjtJQUVBLE9BQU8sT0FBTztBQUNoQiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3JlcGxheS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlcGxheSBlbmdpbmUg4oCUIHJlY29uc3RydWN0cyB7QGxpbmsgU2Vzc2lvbn0gc3RhdGUgZnJvbSBhblxuICoge0BsaW5rIEV2ZW50TG9nfSwgYW5kIHByb2R1Y2VzIGEgZGV0ZXJtaW5pc3RpYyBoYXNoIG9mIGEgc2Vzc2lvbidzXG4gKiBjdXJyZW50IGZhY3Qgc3RhdGUgZm9yIGVxdWl2YWxlbmNlIGNoZWNraW5nLlxuICpcbiAqIFBlciBTUEVDLm1kIMKnUmVwbGF5IERldGVybWluaXNtOiBnaXZlbiB0aGUgc2FtZSBzY2hlbWEsIHJ1bGVzLCBhbmRcbiAqIGV2ZW50IGxvZywgcmVwbGF5IHByb2R1Y2VzIGJ5dGUtaWRlbnRpY2FsIHdvcmtpbmcgbWVtb3J5ICh2ZXJpZmllZFxuICogdmlhIHtAbGluayBzdGF0ZUhhc2h9KS4gRGVyaXZlZCBmYWN0cyAobmVnYXRpdmUge0BsaW5rIEVudGl0eUlkfXMpXG4gKiBhcmUgbmV2ZXIgbG9nZ2VkIOKAlCB0aGV5IGFyZSByZS1kZXJpdmVkIG5hdHVyYWxseSB3aGVuIHJ1bGVzIGZpcmVcbiAqIGR1cmluZyByZXBsYXkuXG4gKlxuICogVGhlIGhhc2ggaXMgZGpiMiAoYSBzaW1wbGUsIGRldGVybWluaXN0aWMsIG5vbi1jcnlwdG9ncmFwaGljXG4gKiBhbGdvcml0aG0pLiBDb2xsaXNpb24gcmVzaXN0YW5jZSBpcyBub3QgcmVxdWlyZWQg4oCUIHRoaXMgaXMgYVxuICogZmluZ2VycHJpbnQgZm9yIGRldGVybWluaXNtIHJlZ3Jlc3Npb24gdGVzdHMsIG5vdCBhIHNlY3VyaXR5IHByaW1pdGl2ZS5cbiAqL1xuaW1wb3J0IHsgU2Vzc2lvbiwgdHlwZSBTZXNzaW9uT3B0aW9ucyB9IGZyb20gXCIuL3Nlc3Npb24uanNcIjtcbmltcG9ydCB0eXBlIHsgTG9nRXZlbnQgfSBmcm9tIFwiLi9ldmVudGxvZy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuXG4vKipcbiAqIFByb2R1Y2UgYSBkZXRlcm1pbmlzdGljIGhhc2ggb2YgYSBzZXNzaW9uJ3MgZmFjdCBzdGF0ZS5cbiAqXG4gKiBSZWxpZXMgb24ge0BsaW5rIFNlc3Npb24uYWxsRmFjdHN9IHJldHVybmluZyBmYWN0cyBzb3J0ZWQgYnlcbiAqIGBbaWQgYXNjLCBhdHRyIGFzY11gIChzZWUgd20udHMpLiBWYWx1ZXMgYXJlIHNlcmlhbGl6ZWQgd2l0aFxuICogYEpTT04uc3RyaW5naWZ5YCwgd2hpY2ggaXMgc3RhYmxlIGZvciBwbGFpbiBKU09OLWNvbXBhdGlibGUgdmFsdWVzIOKAlFxuICogY2FsbGVycyB0aGF0IHN0b3JlIG5vbi1KU09OIHZhbHVlcyBpbiB3b3JraW5nIG1lbW9yeSBtdXN0IGVuc3VyZVxuICogdGhlaXIgc2VyaWFsaXphdGlvbiBpcyBvcmRlci1pbmRlcGVuZGVudC5cbiAqXG4gKiBPdXRwdXQgaXMgYSB6ZXJvLXBhZGRlZCA4LWNoYXJhY3RlciBoZXggc3RyaW5nICgzMi1iaXQgZGpiMikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZUhhc2goc2Vzc2lvbjogU2Vzc2lvbik6IHN0cmluZyB7XG4gIGNvbnN0IGZhY3RzID0gc2Vzc2lvbi5hbGxGYWN0cygpO1xuICBjb25zdCBjYW5vbmljYWwgPSBmYWN0c1xuICAgIC5tYXAoKGYpID0+IGAke2YuaWQgYXMgbnVtYmVyfToke2YuYXR0cn09JHtKU09OLnN0cmluZ2lmeShmLnZhbHVlKX1gKVxuICAgIC5qb2luKFwifFwiKTtcblxuICAvLyBkamIyIOKAlCBkZXRlcm1pbmlzdGljLCBubyBjcnlwdG8gZGVwZW5kZW5jeSwgc3VmZmljaWVudCBmb3JcbiAgLy8gZmluZ2VycHJpbnRpbmcgZmFjdCBzdGF0ZSBpbiB0ZXN0cyBhbmQgQ0kuXG4gIGxldCBoYXNoID0gNTM4MTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYW5vbmljYWwubGVuZ3RoOyBpKyspIHtcbiAgICBoYXNoID0gKChoYXNoIDw8IDUpICsgaGFzaCkgXiBjYW5vbmljYWwuY2hhckNvZGVBdChpKTtcbiAgICBoYXNoID0gaGFzaCA+Pj4gMDsgLy8gY29lcmNlIHRvIHVuc2lnbmVkIDMyLWJpdFxuICB9XG4gIHJldHVybiBoYXNoLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCBcIjBcIik7XG59XG5cbi8qKlxuICogT3B0aW9ucyBhY2NlcHRlZCBieSB7QGxpbmsgcmVwbGF5RnJvbUxvZ30uIE1pcnJvcnNcbiAqIHtAbGluayBTZXNzaW9uT3B0aW9uc30gbWludXMgYGF1dG9GaXJlYCBhbmQgYGV2ZW50TG9nYCwgd2hpY2ggYXJlXG4gKiBhbHdheXMgZm9yY2VkIHRvIGRldGVybWluaXN0aWMgdmFsdWVzOiBgYXV0b0ZpcmU6IGZhbHNlYCAodGhlIGxvZ1xuICogYWxyZWFkeSByZWNvcmRzIGV4cGxpY2l0IGZpcmVzIHZpYSBcImZpcmVcIiBldmVudHMpIGFuZCBubyBhdHRhY2hlZFxuICogbG9nIChyZXBsYXkgbXVzdCBub3QgcmUtcmVjb3JkIGludG8gYSBsaXZlIGxvZykuXG4gKi9cbmV4cG9ydCB0eXBlIFJlcGxheU9wdGlvbnMgPSBPbWl0PFNlc3Npb25PcHRpb25zLCBcImF1dG9GaXJlXCIgfCBcImV2ZW50TG9nXCI+O1xuXG4vKipcbiAqIFJlcGxheSBhIHNlcXVlbmNlIG9mIGxvZyBldmVudHMgb24gYSBmcmVzaCB7QGxpbmsgU2Vzc2lvbn0gYW5kXG4gKiByZXR1cm4gaXQuIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIHJ1bGVzIG9uIHRoZVxuICogc2Vzc2lvbiAqYmVmb3JlKiByZXBsYXkgaWYgcnVsZSBmaXJpbmdzIHNob3VsZCByZS1kZXJpdmUgZmFjdHMuXG4gKlxuICogRXZlbnRzIHJlY29yZGVkIGFnYWluc3QgZGVyaXZlZCBpZHMgKG5lZ2F0aXZlIHtAbGluayBFbnRpdHlJZH1zKVxuICogYXJlIGRlZmVuc2l2ZWx5IHNraXBwZWQg4oCUIHRoZSBFdmVudExvZyBjb250cmFjdCBhbHJlYWR5IGV4Y2x1ZGVzXG4gKiB0aGVtIGF0IHJlY29yZCB0aW1lLCBidXQgZ3VhcmRpbmcgaGVyZSBrZWVwcyByZXBsYXkgY29ycmVjdCBhZ2FpbnN0XG4gKiBleHRlcm5hbGx5LXNvdXJjZWQgbG9ncy5cbiAqXG4gKiBVbmtub3duIGV2ZW50IGtpbmRzIGFyZSBpZ25vcmVkIHJhdGhlciB0aGFuIHRocm93aW5nOiB0aGUgbG9nXG4gKiBmb3JtYXQgbWF5IGdhaW4gbmV3IGtpbmRzIChlLmcuIGBzbmFwc2hvdGApIHdpdGhvdXQgYnJlYWtpbmcgb2xkZXJcbiAqIHJlcGxheWVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxheUZyb21Mb2coXG4gIGV2ZW50czogcmVhZG9ubHkgTG9nRXZlbnRbXSxcbiAgb3B0czogUmVwbGF5T3B0aW9ucyA9IHt9LFxuKTogU2Vzc2lvbiB7XG4gIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7IC4uLm9wdHMsIGF1dG9GaXJlOiBmYWxzZSB9KTtcblxuICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgIHN3aXRjaCAoZXZlbnQua2luZCkge1xuICAgICAgY2FzZSBcImluc2VydFwiOiB7XG4gICAgICAgIGlmIChldmVudC5pZCA9PT0gdW5kZWZpbmVkIHx8IGV2ZW50LmF0dHIgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgICAgIGlmICgoZXZlbnQuaWQgYXMgbnVtYmVyKSA8IDApIGNvbnRpbnVlO1xuICAgICAgICBzZXNzaW9uLmluc2VydChldmVudC5pZCBhcyBFbnRpdHlJZCwgZXZlbnQuYXR0ciwgZXZlbnQudmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJyZXRyYWN0XCI6IHtcbiAgICAgICAgaWYgKGV2ZW50LmlkID09PSB1bmRlZmluZWQgfHwgZXZlbnQuYXR0ciA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICAgICAgaWYgKChldmVudC5pZCBhcyBudW1iZXIpIDwgMCkgY29udGludWU7XG4gICAgICAgIHNlc3Npb24ucmV0cmFjdChldmVudC5pZCBhcyBFbnRpdHlJZCwgZXZlbnQuYXR0cik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBcImZpcmVcIjoge1xuICAgICAgICBzZXNzaW9uLmZpcmVSdWxlcygpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIEZvcndhcmQtY29tcGF0aWJsZTogaWdub3JlIHVua25vd24ga2luZHMuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzZXNzaW9uO1xufVxuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvZGlzdC9yZXBsYXkuanMifQ== diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/86e6fa0d58da34ac9f2c18b2f3791b86158e7622 b/KMr2_dqTOvh2R-Vg1E6cO/ssr/86e6fa0d58da34ac9f2c18b2f3791b86158e7622 deleted file mode 100644 index e1576b1..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/86e6fa0d58da34ac9f2c18b2f3791b86158e7622 +++ /dev/null @@ -1,62 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "defineSchema", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_0__.defineSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "fact", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_0__.fact } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "WorkingMemory", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_1__.WorkingMemory } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "AlphaNetwork", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_2__.AlphaNetwork } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "AlphaNode", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_2__.AlphaNode } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "AlphaMemory", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_2__.AlphaMemory } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "Token", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_3__.Token } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "BetaMemory", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_3__.BetaMemory } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "BetaMemoryNode", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_3__.BetaMemoryNode } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "JoinNode", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_4__.JoinNode } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "NegationNode", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_5__.NegationNode } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "UnsafeNegationError", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_5__.UnsafeNegationError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "ExistentialNode", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_6__.ExistentialNode } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "NccNode", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_7__.NccNode } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "NccPartner", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_7__.NccPartner } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "v", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_8__.v } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "defineRule", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_8__.defineRule } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "HandlerRegistry", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_9__.HandlerRegistry } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "PredicateRegistry", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_9__.PredicateRegistry } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "UnknownHandlerError", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_9__.UnknownHandlerError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "UnknownPredicateError", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_9__.UnknownPredicateError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "FilterNode", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_10__.FilterNode } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "Session", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_11__.Session } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "EventLog", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_12__.EventLog } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "stateHash", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_13__.stateHash } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "replayFromLog", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_13__.replayFromLog } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "RecursionLimitExceededError", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_14__.RecursionLimitExceededError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "serialize", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_15__.serialize } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "deserialize", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_15__.deserialize } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "RULE_SCHEMA_V1", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_15__.RULE_SCHEMA_V1 } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "ProductionNode", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_16__.ProductionNode } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "query", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_16__.query } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "queryAll", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_16__.queryAll } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "NoMatchError", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_16__.NoMatchError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "DerivedFactProduction", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_17__.DerivedFactProduction } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "orderActivations", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_18__.orderActivations } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "AggregationNode", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_19__.AggregationNode } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "SnapshotManager", { enumerable: true, configurable: true, get(){ try { return __vite_ssr_import_20__.SnapshotManager } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/schema.js", {"importedNames":["defineSchema","fact"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/wm.js", {"importedNames":["WorkingMemory"]}); -const __vite_ssr_import_2__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/alpha.js", {"importedNames":["AlphaNetwork","AlphaNode","AlphaMemory"]}); -const __vite_ssr_import_3__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/beta.js", {"importedNames":["Token","BetaMemory","BetaMemoryNode"]}); -const __vite_ssr_import_4__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/join.js", {"importedNames":["JoinNode"]}); -const __vite_ssr_import_5__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/negation.js", {"importedNames":["NegationNode","UnsafeNegationError"]}); -const __vite_ssr_import_6__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/existential.js", {"importedNames":["ExistentialNode"]}); -const __vite_ssr_import_7__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/ncc.js", {"importedNames":["NccNode","NccPartner"]}); -const __vite_ssr_import_8__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/builder.js", {"importedNames":["v","defineRule"]}); -const __vite_ssr_import_9__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/registry.js", {"importedNames":["HandlerRegistry","PredicateRegistry","UnknownHandlerError","UnknownPredicateError"]}); -const __vite_ssr_import_10__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/condition.js", {"importedNames":["FilterNode"]}); -const __vite_ssr_import_11__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/session.js", {"importedNames":["Session"]}); -const __vite_ssr_import_12__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/eventlog.js", {"importedNames":["EventLog"]}); -const __vite_ssr_import_13__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/replay.js", {"importedNames":["stateHash","replayFromLog"]}); -const __vite_ssr_import_14__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/cycle.js", {"importedNames":["RecursionLimitExceededError"]}); -const __vite_ssr_import_15__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/serialize.js", {"importedNames":["serialize","deserialize","RULE_SCHEMA_V1"]}); -const __vite_ssr_import_16__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/query.js", {"importedNames":["ProductionNode","query","queryAll","NoMatchError"]}); -const __vite_ssr_import_17__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/derived.js", {"importedNames":["DerivedFactProduction"]}); -const __vite_ssr_import_18__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/conflict.js", {"importedNames":["orderActivations"]}); -const __vite_ssr_import_19__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/aggregate.js", {"importedNames":["AggregationNode"]}); -const __vite_ssr_import_20__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/snapshot.js", {"importedNames":["SnapshotManager"]}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQTtBQUdBO0FBR0E7QUFHQTtBQUdBO0FBRUE7QUFFQTtBQUVBO0FBR0E7QUFFQTtBQUdBO0FBR0E7QUFHQTtBQUdBO0FBRUE7QUFHQTtBQUdBO0FBR0E7QUFHQTtBQUdBO0FBR0EiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAcGFyYXR5cGUvcmV0ZSDigJQgRG9vcmVuYm9zLXN0eWxlIFJldGUgSUkgcnVsZXMgZW5naW5lXG5leHBvcnQgdHlwZSB7XG4gIEVudGl0eUlkLFxuICBGYWN0LFxuICBTY2hlbWEsXG4gIFNjaGVtYUtpbmQsXG4gIERlZmluZVNjaGVtYU9wdGlvbnMsXG59IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuZXhwb3J0IHsgZGVmaW5lU2NoZW1hLCBmYWN0IH0gZnJvbSBcIi4vc2NoZW1hLmpzXCI7XG5cbmV4cG9ydCB0eXBlIHsgQXR0cktleSwgRmFjdFZhbHVlIH0gZnJvbSBcIi4vd20uanNcIjtcbmV4cG9ydCB7IFdvcmtpbmdNZW1vcnkgfSBmcm9tIFwiLi93bS5qc1wiO1xuXG5leHBvcnQgdHlwZSB7IEFscGhhQ29uZGl0aW9uIH0gZnJvbSBcIi4vYWxwaGEuanNcIjtcbmV4cG9ydCB7IEFscGhhTmV0d29yaywgQWxwaGFOb2RlLCBBbHBoYU1lbW9yeSB9IGZyb20gXCIuL2FscGhhLmpzXCI7XG5cbmV4cG9ydCB0eXBlIHsgQmluZGluZ3MsIFRva2VuRmFjdCB9IGZyb20gXCIuL2JldGEuanNcIjtcbmV4cG9ydCB7IFRva2VuLCBCZXRhTWVtb3J5LCBCZXRhTWVtb3J5Tm9kZSB9IGZyb20gXCIuL2JldGEuanNcIjtcblxuZXhwb3J0IHR5cGUgeyBKb2luVGVzdCB9IGZyb20gXCIuL2pvaW4uanNcIjtcbmV4cG9ydCB7IEpvaW5Ob2RlIH0gZnJvbSBcIi4vam9pbi5qc1wiO1xuXG5leHBvcnQgeyBOZWdhdGlvbk5vZGUsIFVuc2FmZU5lZ2F0aW9uRXJyb3IgfSBmcm9tIFwiLi9uZWdhdGlvbi5qc1wiO1xuXG5leHBvcnQgeyBFeGlzdGVudGlhbE5vZGUgfSBmcm9tIFwiLi9leGlzdGVudGlhbC5qc1wiO1xuXG5leHBvcnQgeyBOY2NOb2RlLCBOY2NQYXJ0bmVyIH0gZnJvbSBcIi4vbmNjLmpzXCI7XG5cbmV4cG9ydCB0eXBlIHsgVmFyaWFibGVEZXNjcmlwdG9yLCBSdWxlQ29uZGl0aW9uLCBSdWxlRGVmaW5pdGlvbiwgRGVmaW5lUnVsZU9wdHMgfSBmcm9tIFwiLi9idWlsZGVyLmpzXCI7XG5leHBvcnQgeyB2LCBkZWZpbmVSdWxlIH0gZnJvbSBcIi4vYnVpbGRlci5qc1wiO1xuZXhwb3J0IHR5cGUgeyBIYW5kbGVyRm4sIFByZWRpY2F0ZUZuIH0gZnJvbSBcIi4vcmVnaXN0cnkuanNcIjtcbmV4cG9ydCB7IEhhbmRsZXJSZWdpc3RyeSwgUHJlZGljYXRlUmVnaXN0cnksIFVua25vd25IYW5kbGVyRXJyb3IsIFVua25vd25QcmVkaWNhdGVFcnJvciB9IGZyb20gXCIuL3JlZ2lzdHJ5LmpzXCI7XG5cbmV4cG9ydCB0eXBlIHsgRmlsdGVyU3BlYyB9IGZyb20gXCIuL2NvbmRpdGlvbi5qc1wiO1xuZXhwb3J0IHsgRmlsdGVyTm9kZSB9IGZyb20gXCIuL2NvbmRpdGlvbi5qc1wiO1xuXG5leHBvcnQgdHlwZSB7IFNlc3Npb25PcHRpb25zIH0gZnJvbSBcIi4vc2Vzc2lvbi5qc1wiO1xuZXhwb3J0IHsgU2Vzc2lvbiB9IGZyb20gXCIuL3Nlc3Npb24uanNcIjtcblxuZXhwb3J0IHR5cGUgeyBFdmVudEtpbmQsIExvZ0V2ZW50IH0gZnJvbSBcIi4vZXZlbnRsb2cuanNcIjtcbmV4cG9ydCB7IEV2ZW50TG9nIH0gZnJvbSBcIi4vZXZlbnRsb2cuanNcIjtcblxuZXhwb3J0IHR5cGUgeyBSZXBsYXlPcHRpb25zIH0gZnJvbSBcIi4vcmVwbGF5LmpzXCI7XG5leHBvcnQgeyBzdGF0ZUhhc2gsIHJlcGxheUZyb21Mb2cgfSBmcm9tIFwiLi9yZXBsYXkuanNcIjtcblxuZXhwb3J0IHsgUmVjdXJzaW9uTGltaXRFeGNlZWRlZEVycm9yIH0gZnJvbSBcIi4vY3ljbGUuanNcIjtcblxuZXhwb3J0IHR5cGUgeyBTZXJpYWxpemVkUnVsZSB9IGZyb20gXCIuL3NlcmlhbGl6ZS5qc1wiO1xuZXhwb3J0IHsgc2VyaWFsaXplLCBkZXNlcmlhbGl6ZSwgUlVMRV9TQ0hFTUFfVjEgfSBmcm9tIFwiLi9zZXJpYWxpemUuanNcIjtcblxuZXhwb3J0IHR5cGUgeyBNYXRjaCB9IGZyb20gXCIuL3F1ZXJ5LmpzXCI7XG5leHBvcnQgeyBQcm9kdWN0aW9uTm9kZSwgcXVlcnksIHF1ZXJ5QWxsLCBOb01hdGNoRXJyb3IgfSBmcm9tIFwiLi9xdWVyeS5qc1wiO1xuXG5leHBvcnQgdHlwZSB7IERlcml2ZWRGYWN0LCBEZXJpdmVkSGFuZGxlciB9IGZyb20gXCIuL2Rlcml2ZWQuanNcIjtcbmV4cG9ydCB7IERlcml2ZWRGYWN0UHJvZHVjdGlvbiB9IGZyb20gXCIuL2Rlcml2ZWQuanNcIjtcblxuZXhwb3J0IHR5cGUgeyBBY3RpdmF0aW9uLCBPcmRlcmFibGVSdWxlIH0gZnJvbSBcIi4vY29uZmxpY3QuanNcIjtcbmV4cG9ydCB7IG9yZGVyQWN0aXZhdGlvbnMgfSBmcm9tIFwiLi9jb25mbGljdC5qc1wiO1xuXG5leHBvcnQgdHlwZSB7IEFnZ3JlZ2F0b3JLaW5kIH0gZnJvbSBcIi4vYWdncmVnYXRlLmpzXCI7XG5leHBvcnQgeyBBZ2dyZWdhdGlvbk5vZGUgfSBmcm9tIFwiLi9hZ2dyZWdhdGUuanNcIjtcblxuZXhwb3J0IHR5cGUgeyBTbmFwc2hvdCwgSW1tdXRhYmxlRmFjdHMsIE11dGFibGVGYWN0cywgRmFjdFJlY29yZCB9IGZyb20gXCIuL3NuYXBzaG90LmpzXCI7XG5leHBvcnQgeyBTbmFwc2hvdE1hbmFnZXIgfSBmcm9tIFwiLi9zbmFwc2hvdC5qc1wiO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvZGlzdC9pbmRleC5qcyJ9 diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/89a33ae3e683dc5cba0c5e83b4173d8412019e0a b/KMr2_dqTOvh2R-Vg1E6cO/ssr/89a33ae3e683dc5cba0c5e83b4173d8412019e0a deleted file mode 100644 index 2e5ff1d..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/89a33ae3e683dc5cba0c5e83b4173d8412019e0a +++ /dev/null @@ -1,132 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "RoomRegistry", { enumerable: true, configurable: true, get(){ try { return RoomRegistry } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "__test__", { enumerable: true, configurable: true, get(){ try { return __test__ } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/chess/src/index.ts", {"importedNames":["CLASSIC_LAYOUT"]}); -const CODE_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; -const CODE_LENGTH = 6; -const CODE_COLLISION_BUDGET = 16; -function generateCode() { - const out = []; - const buf = new Uint8Array(16); - let i = 0; - crypto.getRandomValues(buf); - while (out.length < CODE_LENGTH) { - if (i >= buf.length) { - crypto.getRandomValues(buf); - i = 0; - }; - const byte = buf[i++]; - if (byte >= 252) continue; - out.push(CODE_ALPHABET[byte % CODE_ALPHABET.length]); - }; - return out.join(""); -} -class RoomRegistry { - rooms = /* @__PURE__ */ new Map(); - /** - * Create a fresh room. The caller becomes white and receives a UUID v4 - * token that authenticates every subsequent message. - * - * `layout` is the resolved (already-validated) starting layout. - * Callers construct this via `resolveLayoutRequest` in ./layouts.ts. - */ - createRoom(rulesetIds = [], layout) { - const code = this.allocateCode(); - const token = crypto.randomUUID(); - const player = { - token, - color: "white", - connected: true, - lastSeq: 0 - }; - const resolvedLayout = layout ?? __vite_ssr_import_0__.CLASSIC_LAYOUT; - const room = { - code, - players: /* @__PURE__ */ new Map([[token, player]]), - createdAt: Date.now(), - // Defensive copy — callers shouldn't be able to mutate our state. - rulesetIds: [...rulesetIds], - layout: resolvedLayout - }; - this.rooms.set(code, room); - return { code, token, color: "white", layout: resolvedLayout }; - } - /** - * Join an existing room as black. Returns a discriminated result; callers - * map the error codes onto the protocol's `ROOM_NOT_FOUND` / `ROOM_FULL`. - * - * The returned `layout` is the same resolved layout that was used - * to construct the room's GameSession — late joiners render from it. - */ - joinRoom(code) { - const room = this.rooms.get(code); - if (!room) return { error: "ROOM_NOT_FOUND" }; - if (room.players.size >= 2) return { error: "ROOM_FULL" }; - const token = crypto.randomUUID(); - const player = { - token, - color: "black", - connected: true, - lastSeq: 0 - }; - room.players.set(token, player); - return { - token, - color: "black", - // Defensive copy so joiners can't mutate the room's ruleset list. - activeRules: [...room.rulesetIds], - layout: room.layout - }; - } - /** - * Remove a player from a room. Returns true iff both room and player - * existed. If the room becomes empty it is destroyed immediately — the - * 60-second grace window is a *connection* concern handled elsewhere via - * markDisconnected, not an empty-room concern. - */ - leaveRoom(code, token) { - const room = this.rooms.get(code); - if (!room) return false; - const removed = room.players.delete(token); - if (removed && room.players.size === 0) { - this.rooms.delete(code); - }; - return removed; - } - getRoom(code) { - return this.rooms.get(code); - } - getRoomCount() { - return this.rooms.size; - } - getPlayerByToken(code, token) { - return this.rooms.get(code)?.players.get(token); - } - /** Mark a slot disconnected — starts the reconnect grace window. */ - markDisconnected(code, token) { - const player = this.getPlayerByToken(code, token); - if (player) player.connected = false; - } - /** Mark a slot reconnected after the client re-auths with its token. */ - markConnected(code, token) { - const player = this.getPlayerByToken(code, token); - if (player) player.connected = true; - } - /** - * Draw codes until we find one not currently in use. Collisions are - * astronomically rare (36^6 ≈ 2.2B) but we still bound the loop so a - * pathological RNG can't wedge the server. - */ - allocateCode() { - for (let attempt = 0; attempt < CODE_COLLISION_BUDGET; attempt++) { - const code = generateCode(); - if (!this.rooms.has(code)) return code; - }; - throw new Error( - `RoomRegistry: exhausted ${String(CODE_COLLISION_BUDGET)} code allocation attempts` - ); - } -}; -const __test__ = { generateCode, CODE_ALPHABET, CODE_LENGTH }; - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SSxJQUFJLEdBQUcsUUFBUSxJQUFJLEtBQUs7QUFBQSxFQUNoRDtBQUFBO0FBQUEsRUFHQSxpQkFBaUIsTUFBYyxPQUFxQjtBQUNsRCxVQUFNLFNBQVMsS0FBSyxpQkFBaUIsTUFBTSxLQUFLO0FBQ2hELFFBQUksT0FBUSxRQUFPLFlBQVk7QUFBQSxFQUNqQztBQUFBO0FBQUEsRUFHQSxjQUFjLE1BQWMsT0FBcUI7QUFDL0MsVUFBTSxTQUFTLEtBQUssaUJBQWlCLE1BQU0sS0FBSztBQUNoRCxRQUFJLE9BQVEsUUFBTyxZQUFZO0FBQUEsRUFDakM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPUSxlQUF1QjtBQUM3QixhQUFTLFVBQVUsR0FBRyxVQUFVLHVCQUF1QixXQUFXO0FBQ2hFLFlBQU0sT0FBTyxhQUFhO0FBQzFCLFVBQUksQ0FBQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEVBQUcsUUFBTztBQUFBLElBQ3BDO0FBQ0EsVUFBTSxJQUFJO0FBQUEsTUFDUiwyQkFBMkIsT0FBTyxxQkFBcUIsQ0FBQztBQUFBLElBQzFEO0FBQUEsRUFDRjtBQUNGO0FBR08sTUFBTSxXQUFXLEVBQUUsY0FBYyxlQUFlLFlBQVkiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInJvb21zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEluLW1lbW9yeSByb29tIHJlZ2lzdHJ5IGZvciB0aGUgY2hlc3Mgc2VydmVyLlxuLy9cbi8vIFJvb21zIGhvbGQgdXAgdG8gdHdvIHBsYXllcnMgaWRlbnRpZmllZCBieSBvcGFxdWUgVVVJRCB2NCB0b2tlbnMuIENvZGVzIGFyZVxuLy8gc2l4LWNoYXJhY3RlciB1cHBlci1jYXNlIGFscGhhbnVtZXJpYyBzdHJpbmdzIChbQS1aMC05XSkgZHJhd24gZnJvbSBhIENTUFJORy5cbi8vIE5vdGhpbmcgaGVyZSBwZXJzaXN0cyBhY3Jvc3MgcmVzdGFydHMg4oCUIFBST1RPQ09MLm1kIMKnQXV0aCAmIFJvb21zIG1hbmRhdGVzXG4vLyBpbi1tZW1vcnktb25seSBzdG9yYWdlLlxuaW1wb3J0IHR5cGUgeyBDb2xvciB9IGZyb20gXCIuL3Byb3RvY29sLmpzXCI7XG5pbXBvcnQgeyBDTEFTU0lDX0xBWU9VVCwgdHlwZSBTdGFydGluZ0xheW91dCB9IGZyb20gXCJAcGFyYXR5cGUvY2hlc3NcIjtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUeXBlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgUm9vbVBsYXllciB7XG4gIC8qKiBVVUlEIHY0IGFzc2lnbmVkIGF0IHJvb20uY3JlYXRlIC8gcm9vbS5qb2luOyBhdXRoZW50aWNhdGVzIHRoaXMgc2xvdC4gKi9cbiAgdG9rZW46IHN0cmluZztcbiAgY29sb3I6IENvbG9yO1xuICAvKiogRmFsc2UgZHVyaW5nIHRoZSA2MC1zZWNvbmQgcmVjb25uZWN0IGdyYWNlIHdpbmRvdy4gKi9cbiAgY29ubmVjdGVkOiBib29sZWFuO1xuICAvKiogSGlnaGVzdCBzZXJ2ZXIgYHNlcWAgdGhlIGNsaWVudCBoYXMgYWNrbm93bGVkZ2VkIChmb3IgcmVjb25uZWN0IGRlbHRhcykuICovXG4gIGxhc3RTZXE6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSb29tIHtcbiAgLyoqIDYtY2hhciB1cHBlcmNhc2UgW0EtWjAtOV0uICovXG4gIGNvZGU6IHN0cmluZztcbiAgLyoqIHRva2VuIOKGkiBwbGF5ZXIuIFVzaW5nIGEgTWFwIGtlZXBzIGxvb2t1cCBPKDEpIGFuZCBrZXllZCBvbiB0aGUgc2VjcmV0LiAqL1xuICBwbGF5ZXJzOiBNYXA8c3RyaW5nLCBSb29tUGxheWVyPjtcbiAgLyoqIFVuaXggbWlsbGlzZWNvbmRzIHRoZSByb29tIHdhcyBjcmVhdGVkIOKAlCB1c2VkIGZvciBUVEwvZXZpY3Rpb24gbGF0ZXIuICovXG4gIGNyZWF0ZWRBdDogbnVtYmVyO1xuICAvKiogUnVsZSBwcmVzZXRzIGFjdGl2YXRlZCBmb3IgdGhpcyBnYW1lIChmcm9tIHJvb20uY3JlYXRlIHBheWxvYWQpLiAqL1xuICBydWxlc2V0SWRzOiBzdHJpbmdbXTtcbiAgLyoqIFJlc29sdmVkIHN0YXJ0aW5nIGxheW91dCB1c2VkIHRvIG9wZW4gdGhlIGdhbWUuIEFsd2F5cyBwcmVzZW50O1xuICAgKiAgZGVmYXVsdHMgdG8gQ0xBU1NJQ19MQVlPVVQgd2hlbiBubyBleHBsaWNpdCBsYXlvdXQgd2FzIGdpdmVuLiAqL1xuICBsYXlvdXQ6IFN0YXJ0aW5nTGF5b3V0O1xufVxuXG5leHBvcnQgdHlwZSBKb2luUmVzdWx0ID1cbiAgfCB7XG4gICAgICB0b2tlbjogc3RyaW5nO1xuICAgICAgY29sb3I6IFwiYmxhY2tcIjtcbiAgICAgIGFjdGl2ZVJ1bGVzOiBzdHJpbmdbXTtcbiAgICAgIGxheW91dDogU3RhcnRpbmdMYXlvdXQ7XG4gICAgfVxuICB8IHsgZXJyb3I6IFwiUk9PTV9OT1RfRk9VTkRcIiB8IFwiUk9PTV9GVUxMXCIgfTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDb2RlIGdlbmVyYXRpb25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBDT0RFX0FMUEhBQkVUID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NTY3ODlcIjtcbmNvbnN0IENPREVfTEVOR1RIID0gNjtcbi8qKiBVcHBlciBib3VuZCBvbiBob3cgbWFueSB0aW1lcyB3ZSdsbCByZXRyeSBhIGNvbGxpc2lvbiBiZWZvcmUgYmFpbGluZy4gKi9cbmNvbnN0IENPREVfQ09MTElTSU9OX0JVREdFVCA9IDE2O1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgNi1jaGFyIFtBLVowLTldIGNvZGUgYnkgZHJhd2luZyBieXRlcyBmcm9tIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuXG4gKlxuICogV2UgaW50ZW50aW9uYWxseSBhdm9pZCBzbGljaW5nIFVVSUQgaGV4IGJlY2F1c2UgdGhhdCBhbHBoYWJldCBpcyBvbmx5IDE2XG4gKiBjaGFycyAoMC05YS1mKSDigJQgbmFycm93ZXIgdGhhbiBvdXIgMzYtY2hhciBzcGVjIGFuZCB0aHVzIG1vcmUgY29sbGlzaW9uXG4gKiBwcm9uZSBhdCA2IGNoYXJzLiBVc2luZyByZWplY3Rpb24gc2FtcGxpbmcgb24gOC1iaXQgYnl0ZXMgYWdhaW5zdCBhIDM2LWNoYXJcbiAqIGFscGhhYmV0IGtlZXBzIHRoZSBkaXN0cmlidXRpb24gdW5pZm9ybSAoMzYgZGl2aWRlcyBldmVubHkgaW50byAyNTIpLlxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUNvZGUoKTogc3RyaW5nIHtcbiAgY29uc3Qgb3V0OiBzdHJpbmdbXSA9IFtdO1xuICAvLyBSZXF1ZXN0IGV4dHJhIGJ5dGVzIHVwIGZyb250IHNvIGEgZmV3IHJlamVjdGlvbnMgZG9uJ3QgZm9yY2UgYW5vdGhlclxuICAvLyBzeXNjYWxsLiAxNiBieXRlcyB5aWVsZHMgfjE0IHVzYWJsZSBkcmF3cyBvbiBhdmVyYWdlLlxuICBjb25zdCBidWYgPSBuZXcgVWludDhBcnJheSgxNik7XG4gIGxldCBpID0gMDtcbiAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhidWYpO1xuICB3aGlsZSAob3V0Lmxlbmd0aCA8IENPREVfTEVOR1RIKSB7XG4gICAgaWYgKGkgPj0gYnVmLmxlbmd0aCkge1xuICAgICAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhidWYpO1xuICAgICAgaSA9IDA7XG4gICAgfVxuICAgIGNvbnN0IGJ5dGUgPSBidWZbaSsrXSE7XG4gICAgLy8gMjUyID0gMzYgKiA3OyBhbnkgYnl0ZSA+PSAyNTIgaXMgcmVqZWN0ZWQgdG8ga2VlcCB0aGUgbWFwcGluZyB1bmlmb3JtLlxuICAgIGlmIChieXRlID49IDI1MikgY29udGludWU7XG4gICAgb3V0LnB1c2goQ09ERV9BTFBIQUJFVFtieXRlICUgQ09ERV9BTFBIQUJFVC5sZW5ndGhdISk7XG4gIH1cbiAgcmV0dXJuIG91dC5qb2luKFwiXCIpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJvb21SZWdpc3RyeVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjbGFzcyBSb29tUmVnaXN0cnkge1xuICBwcml2YXRlIHJlYWRvbmx5IHJvb21zID0gbmV3IE1hcDxzdHJpbmcsIFJvb20+KCk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGZyZXNoIHJvb20uIFRoZSBjYWxsZXIgYmVjb21lcyB3aGl0ZSBhbmQgcmVjZWl2ZXMgYSBVVUlEIHY0XG4gICAqIHRva2VuIHRoYXQgYXV0aGVudGljYXRlcyBldmVyeSBzdWJzZXF1ZW50IG1lc3NhZ2UuXG4gICAqXG4gICAqIGBsYXlvdXRgIGlzIHRoZSByZXNvbHZlZCAoYWxyZWFkeS12YWxpZGF0ZWQpIHN0YXJ0aW5nIGxheW91dC5cbiAgICogQ2FsbGVycyBjb25zdHJ1Y3QgdGhpcyB2aWEgYHJlc29sdmVMYXlvdXRSZXF1ZXN0YCBpbiAuL2xheW91dHMudHMuXG4gICAqL1xuICBjcmVhdGVSb29tKFxuICAgIHJ1bGVzZXRJZHM6IHN0cmluZ1tdID0gW10sXG4gICAgbGF5b3V0PzogU3RhcnRpbmdMYXlvdXQsXG4gICk6IHsgY29kZTogc3RyaW5nOyB0b2tlbjogc3RyaW5nOyBjb2xvcjogXCJ3aGl0ZVwiOyBsYXlvdXQ6IFN0YXJ0aW5nTGF5b3V0IH0ge1xuICAgIGNvbnN0IGNvZGUgPSB0aGlzLmFsbG9jYXRlQ29kZSgpO1xuICAgIGNvbnN0IHRva2VuID0gY3J5cHRvLnJhbmRvbVVVSUQoKTtcbiAgICBjb25zdCBwbGF5ZXI6IFJvb21QbGF5ZXIgPSB7XG4gICAgICB0b2tlbixcbiAgICAgIGNvbG9yOiBcIndoaXRlXCIsXG4gICAgICBjb25uZWN0ZWQ6IHRydWUsXG4gICAgICBsYXN0U2VxOiAwLFxuICAgIH07XG4gICAgLy8gRGVmYXVsdCB0byBGSURFIHdoZW4gdGhlIGNhbGxlciBvbWl0cyBhIGxheW91dC4gVGhlIGxheW91dHNcbiAgICAvLyBiYXJyZWwgaGFzIGFscmVhZHkgcmVnaXN0ZXJlZCBldmVyeSBwcmVtYWRlIGJ5IHRoZSB0aW1lIHRoZVxuICAgIC8vIHNlcnZlciBpcyB1cDsgZmFsbGluZyB0aHJvdWdoIHRvIENMQVNTSUNfTEFZT1VUIGlzIGEgY2hlYXBcbiAgICAvLyBsb29rdXAsIG5vdCBhIHNpZGUtZWZmZWN0IHRyaWdnZXIuXG4gICAgY29uc3QgcmVzb2x2ZWRMYXlvdXQgPSBsYXlvdXQgPz8gQ0xBU1NJQ19MQVlPVVQ7XG4gICAgY29uc3Qgcm9vbTogUm9vbSA9IHtcbiAgICAgIGNvZGUsXG4gICAgICBwbGF5ZXJzOiBuZXcgTWFwKFtbdG9rZW4sIHBsYXllcl1dKSxcbiAgICAgIGNyZWF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgIC8vIERlZmVuc2l2ZSBjb3B5IOKAlCBjYWxsZXJzIHNob3VsZG4ndCBiZSBhYmxlIHRvIG11dGF0ZSBvdXIgc3RhdGUuXG4gICAgICBydWxlc2V0SWRzOiBbLi4ucnVsZXNldElkc10sXG4gICAgICBsYXlvdXQ6IHJlc29sdmVkTGF5b3V0LFxuICAgIH07XG4gICAgdGhpcy5yb29tcy5zZXQoY29kZSwgcm9vbSk7XG4gICAgcmV0dXJuIHsgY29kZSwgdG9rZW4sIGNvbG9yOiBcIndoaXRlXCIsIGxheW91dDogcmVzb2x2ZWRMYXlvdXQgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBKb2luIGFuIGV4aXN0aW5nIHJvb20gYXMgYmxhY2suIFJldHVybnMgYSBkaXNjcmltaW5hdGVkIHJlc3VsdDsgY2FsbGVyc1xuICAgKiBtYXAgdGhlIGVycm9yIGNvZGVzIG9udG8gdGhlIHByb3RvY29sJ3MgYFJPT01fTk9UX0ZPVU5EYCAvIGBST09NX0ZVTExgLlxuICAgKlxuICAgKiBUaGUgcmV0dXJuZWQgYGxheW91dGAgaXMgdGhlIHNhbWUgcmVzb2x2ZWQgbGF5b3V0IHRoYXQgd2FzIHVzZWRcbiAgICogdG8gY29uc3RydWN0IHRoZSByb29tJ3MgR2FtZVNlc3Npb24g4oCUIGxhdGUgam9pbmVycyByZW5kZXIgZnJvbSBpdC5cbiAgICovXG4gIGpvaW5Sb29tKGNvZGU6IHN0cmluZyk6IEpvaW5SZXN1bHQge1xuICAgIGNvbnN0IHJvb20gPSB0aGlzLnJvb21zLmdldChjb2RlKTtcbiAgICBpZiAoIXJvb20pIHJldHVybiB7IGVycm9yOiBcIlJPT01fTk9UX0ZPVU5EXCIgfTtcbiAgICBpZiAocm9vbS5wbGF5ZXJzLnNpemUgPj0gMikgcmV0dXJuIHsgZXJyb3I6IFwiUk9PTV9GVUxMXCIgfTtcbiAgICBjb25zdCB0b2tlbiA9IGNyeXB0by5yYW5kb21VVUlEKCk7XG4gICAgY29uc3QgcGxheWVyOiBSb29tUGxheWVyID0ge1xuICAgICAgdG9rZW4sXG4gICAgICBjb2xvcjogXCJibGFja1wiLFxuICAgICAgY29ubmVjdGVkOiB0cnVlLFxuICAgICAgbGFzdFNlcTogMCxcbiAgICB9O1xuICAgIHJvb20ucGxheWVycy5zZXQodG9rZW4sIHBsYXllcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuLFxuICAgICAgY29sb3I6IFwiYmxhY2tcIixcbiAgICAgIC8vIERlZmVuc2l2ZSBjb3B5IHNvIGpvaW5lcnMgY2FuJ3QgbXV0YXRlIHRoZSByb29tJ3MgcnVsZXNldCBsaXN0LlxuICAgICAgYWN0aXZlUnVsZXM6IFsuLi5yb29tLnJ1bGVzZXRJZHNdLFxuICAgICAgbGF5b3V0OiByb29tLmxheW91dCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHBsYXllciBmcm9tIGEgcm9vbS4gUmV0dXJucyB0cnVlIGlmZiBib3RoIHJvb20gYW5kIHBsYXllclxuICAgKiBleGlzdGVkLiBJZiB0aGUgcm9vbSBiZWNvbWVzIGVtcHR5IGl0IGlzIGRlc3Ryb3llZCBpbW1lZGlhdGVseSDigJQgdGhlXG4gICAqIDYwLXNlY29uZCBncmFjZSB3aW5kb3cgaXMgYSAqY29ubmVjdGlvbiogY29uY2VybiBoYW5kbGVkIGVsc2V3aGVyZSB2aWFcbiAgICogbWFya0Rpc2Nvbm5lY3RlZCwgbm90IGFuIGVtcHR5LXJvb20gY29uY2Vybi5cbiAgICovXG4gIGxlYXZlUm9vbShjb2RlOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCByb29tID0gdGhpcy5yb29tcy5nZXQoY29kZSk7XG4gICAgaWYgKCFyb29tKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgcmVtb3ZlZCA9IHJvb20ucGxheWVycy5kZWxldGUodG9rZW4pO1xuICAgIGlmIChyZW1vdmVkICYmIHJvb20ucGxheWVycy5zaXplID09PSAwKSB7XG4gICAgICB0aGlzLnJvb21zLmRlbGV0ZShjb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlbW92ZWQ7XG4gIH1cblxuICBnZXRSb29tKGNvZGU6IHN0cmluZyk6IFJvb20gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvb21zLmdldChjb2RlKTtcbiAgfVxuXG4gIGdldFJvb21Db3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnJvb21zLnNpemU7XG4gIH1cblxuICBnZXRQbGF5ZXJCeVRva2VuKGNvZGU6IHN0cmluZywgdG9rZW46IHN0cmluZyk6IFJvb21QbGF5ZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvb21zLmdldChjb2RlKT8ucGxheWVycy5nZXQodG9rZW4pO1xuICB9XG5cbiAgLyoqIE1hcmsgYSBzbG90IGRpc2Nvbm5lY3RlZCDigJQgc3RhcnRzIHRoZSByZWNvbm5lY3QgZ3JhY2Ugd2luZG93LiAqL1xuICBtYXJrRGlzY29ubmVjdGVkKGNvZGU6IHN0cmluZywgdG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHBsYXllciA9IHRoaXMuZ2V0UGxheWVyQnlUb2tlbihjb2RlLCB0b2tlbik7XG4gICAgaWYgKHBsYXllcikgcGxheWVyLmNvbm5lY3RlZCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqIE1hcmsgYSBzbG90IHJlY29ubmVjdGVkIGFmdGVyIHRoZSBjbGllbnQgcmUtYXV0aHMgd2l0aCBpdHMgdG9rZW4uICovXG4gIG1hcmtDb25uZWN0ZWQoY29kZTogc3RyaW5nLCB0b2tlbjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcGxheWVyID0gdGhpcy5nZXRQbGF5ZXJCeVRva2VuKGNvZGUsIHRva2VuKTtcbiAgICBpZiAocGxheWVyKSBwbGF5ZXIuY29ubmVjdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3IGNvZGVzIHVudGlsIHdlIGZpbmQgb25lIG5vdCBjdXJyZW50bHkgaW4gdXNlLiBDb2xsaXNpb25zIGFyZVxuICAgKiBhc3Ryb25vbWljYWxseSByYXJlICgzNl42IOKJiCAyLjJCKSBidXQgd2Ugc3RpbGwgYm91bmQgdGhlIGxvb3Agc28gYVxuICAgKiBwYXRob2xvZ2ljYWwgUk5HIGNhbid0IHdlZGdlIHRoZSBzZXJ2ZXIuXG4gICAqL1xuICBwcml2YXRlIGFsbG9jYXRlQ29kZSgpOiBzdHJpbmcge1xuICAgIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDwgQ09ERV9DT0xMSVNJT05fQlVER0VUOyBhdHRlbXB0KyspIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBnZW5lcmF0ZUNvZGUoKTtcbiAgICAgIGlmICghdGhpcy5yb29tcy5oYXMoY29kZSkpIHJldHVybiBjb2RlO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgUm9vbVJlZ2lzdHJ5OiBleGhhdXN0ZWQgJHtTdHJpbmcoQ09ERV9DT0xMSVNJT05fQlVER0VUKX0gY29kZSBhbGxvY2F0aW9uIGF0dGVtcHRzYCxcbiAgICApO1xuICB9XG59XG5cbi8vIEV4cG9ydGVkIGZvciB0ZXN0cyB0aGF0IHdhbnQgdG8gYXNzZXJ0IG9uIHRoZSByYXcgZ2VuZXJhdG9yLlxuZXhwb3J0IGNvbnN0IF9fdGVzdF9fID0geyBnZW5lcmF0ZUNvZGUsIENPREVfQUxQSEFCRVQsIENPREVfTEVOR1RIIH07XG4iXSwiZmlsZSI6Ii9zcmMvcm9vbXMudHMifQ== diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/8a8fc9a82b64efffeb46c5583041b6b744577506 b/KMr2_dqTOvh2R-Vg1E6cO/ssr/8a8fc9a82b64efffeb46c5583041b6b744577506 deleted file mode 100644 index a61950a..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/8a8fc9a82b64efffeb46c5583041b6b744577506 +++ /dev/null @@ -1,73 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "defineSchema", { enumerable: true, configurable: true, get(){ try { return defineSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "fact", { enumerable: true, configurable: true, get(){ try { return fact } catch {} }}); -/** - * @paratype/rete — Schema and Fact primitives - * - * Implements the EAV (Entity-Attribute-Value) fact model specified in - * `packages/rete/SPEC.md §Fact Model` and the branded id type from §ID Authority. - * - * Working memory stores triples `(id: EntityId, attr: AttrKey, value: AttrValue)`. - * Each `(id, attr)` pair stores exactly one value; insertion over an existing pair - * is an update (see §Match Refraction). - * - * The schema `S` is a plain TypeScript object-type that maps attribute names to - * their value types. The schema is the single source of truth for attribute - * typing and is consumed by both the public API (for inference at call sites) - * and by JSON rule validation (see §JSON Rule Schema). - */ -/** - * Define a schema descriptor for use with a Session. - * - * The schema is a type-level contract: its runtime value is a lightweight - * descriptor that carries the type parameter `S` for inference and optionally - * records the attribute-name list for introspection. - * - * @example - * ```ts - * interface GameSchema { - * Health: number; - * Position: string; - * Active: boolean; - * } - * const schema = defineSchema({ - * keys: ["Health", "Position", "Active"], - * }); - * ``` - */ -function defineSchema(options = {}) { - const seen = new Set(); - const deduped = []; - const input = options.keys ?? []; - for (const k of input) { - if (!seen.has(k)) { - seen.add(k); - deduped.push(k); - } - }; - const schema = { - // `_type` is intentionally omitted at runtime; it exists only in the type - // system as a phantom carrier for the generic parameter `S`. - keys: Object.freeze(deduped), - }; - return Object.freeze(schema); -}; -/** - * Construct a typed, frozen fact triple. - * - * The generic parameters are explicit to preserve the literal `attr` type in - * the returned fact, which is essential for downstream discrimination against - * {@link Fact}``. - * - * @example - * ```ts - * const id = session.nextId(); - * const f = fact(id, "Health", 100); - * // f: { id: EntityId; attr: "Health"; value: number } - * ``` - */ -function fact(id, attr, value) { - return Object.freeze({ id, attr, value }); -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7O0FBd0ZBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUJNLFNBQVUsWUFBWSxDQUMxQixVQUFrQyxFQUFFO0lBRXBDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFVO0lBQzlCLE1BQU0sT0FBTyxHQUE0QixFQUFFO0lBQzNDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRTtJQUNoQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEtBQUssRUFBRTtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNoQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2pCO0lBQ0Y7SUFDQSxNQUFNLE1BQU0sR0FBYztRQUN4QjtRQUNBO1FBQ0EsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFvQztLQUNoRTtJQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDOUI7QUFFQTs7Ozs7Ozs7Ozs7Ozs7QUFjTSxTQUFVLElBQUksQ0FDbEIsRUFBWSxFQUNaLElBQU8sRUFDUCxLQUFXO0lBRVgsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUMzQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3NjaGVtYS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwYXJhdHlwZS9yZXRlIOKAlCBTY2hlbWEgYW5kIEZhY3QgcHJpbWl0aXZlc1xuICpcbiAqIEltcGxlbWVudHMgdGhlIEVBViAoRW50aXR5LUF0dHJpYnV0ZS1WYWx1ZSkgZmFjdCBtb2RlbCBzcGVjaWZpZWQgaW5cbiAqIGBwYWNrYWdlcy9yZXRlL1NQRUMubWQgwqdGYWN0IE1vZGVsYCBhbmQgdGhlIGJyYW5kZWQgaWQgdHlwZSBmcm9tIMKnSUQgQXV0aG9yaXR5LlxuICpcbiAqIFdvcmtpbmcgbWVtb3J5IHN0b3JlcyB0cmlwbGVzIGAoaWQ6IEVudGl0eUlkLCBhdHRyOiBBdHRyS2V5LCB2YWx1ZTogQXR0clZhbHVlKWAuXG4gKiBFYWNoIGAoaWQsIGF0dHIpYCBwYWlyIHN0b3JlcyBleGFjdGx5IG9uZSB2YWx1ZTsgaW5zZXJ0aW9uIG92ZXIgYW4gZXhpc3RpbmcgcGFpclxuICogaXMgYW4gdXBkYXRlIChzZWUgwqdNYXRjaCBSZWZyYWN0aW9uKS5cbiAqXG4gKiBUaGUgc2NoZW1hIGBTYCBpcyBhIHBsYWluIFR5cGVTY3JpcHQgb2JqZWN0LXR5cGUgdGhhdCBtYXBzIGF0dHJpYnV0ZSBuYW1lcyB0b1xuICogdGhlaXIgdmFsdWUgdHlwZXMuIFRoZSBzY2hlbWEgaXMgdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGF0dHJpYnV0ZVxuICogdHlwaW5nIGFuZCBpcyBjb25zdW1lZCBieSBib3RoIHRoZSBwdWJsaWMgQVBJIChmb3IgaW5mZXJlbmNlIGF0IGNhbGwgc2l0ZXMpXG4gKiBhbmQgYnkgSlNPTiBydWxlIHZhbGlkYXRpb24gKHNlZSDCp0pTT04gUnVsZSBTY2hlbWEpLlxuICovXG5cbi8qKlxuICogQ29tcGlsZS10aW1lIGJyYW5kZWQgZW50aXR5IGlkZW50aWZpZXIuXG4gKlxuICogQXQgcnVudGltZSwgYEVudGl0eUlkYCBpcyBhIHBsYWluIGBudW1iZXJgLiBUaGUgYnJhbmQgZXhpc3RzIG9ubHkgaW4gdGhlXG4gKiB0eXBlIHN5c3RlbSB0byBwcmV2ZW50IGFjY2lkZW50YWwgaW50ZXJjaGFuZ2Ugd2l0aCBvcmRpbmFyeSBudW1iZXJzIGF0XG4gKiBjYWxsIHNpdGVzLiBDb25zdHJ1Y3Qgb25lIGJ5IGNhc3RpbmcgYSBmcmVzaGx5LW1pbnRlZCBudW1iZXI6XG4gKiBgc2Vzc2lvbi5uZXh0SWQoKWAgKGluIHN0YW5kYWxvbmUgc2Vzc2lvbnMpIG9yIHRoZSBzZXJ2ZXIgKGluIG11bHRpcGxheWVyKS5cbiAqL1xuZXhwb3J0IHR5cGUgRW50aXR5SWQgPSBudW1iZXIgJiB7IHJlYWRvbmx5IF9fYnJhbmQ6IFwiRW50aXR5SWRcIiB9O1xuXG4vKipcbiAqIFNoYXBlIG9mIGEgc2NoZW1hIHR5cGUgcGFyYW1ldGVyLlxuICpcbiAqIEEgc2NoZW1hIG1hcHMgYXR0cmlidXRlIG5hbWUgKHN0cmluZyBrZXkpIHRvIHRoZSBUeXBlU2NyaXB0IHR5cGUgb2YgdGhhdFxuICogYXR0cmlidXRlJ3MgdmFsdWUuIFVzZXJzIGRvIG5vdCBjb25zdHJ1Y3QgYFNjaGVtYUtpbmRgIGRpcmVjdGx5OyB0aGV5IHBhc3NcbiAqIGFuIGludGVyZmFjZSBhcyBhIGdlbmVyaWMgYXJndW1lbnQgdG8ge0BsaW5rIGRlZmluZVNjaGVtYX0uXG4gKi9cbmV4cG9ydCB0eXBlIFNjaGVtYUtpbmQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuLyoqXG4gKiBEaXNjcmltaW5hdGVkIHVuaW9uIG9mIGFsbCB2YWxpZCBmYWN0IHRyaXBsZXMgZm9yIHNjaGVtYSBgU2AuXG4gKlxuICogRm9yIGEgc2NoZW1hIGB7IEhlYWx0aDogbnVtYmVyOyBQb3NpdGlvbjogc3RyaW5nIH1gLCBgRmFjdDxTPmAgZXZhbHVhdGVzIHRvXG4gKiBgeyBpZDogRW50aXR5SWQ7IGF0dHI6IFwiSGVhbHRoXCI7IHZhbHVlOiBudW1iZXIgfVxuICogIHwgeyBpZDogRW50aXR5SWQ7IGF0dHI6IFwiUG9zaXRpb25cIjsgdmFsdWU6IHN0cmluZyB9YC5cbiAqXG4gKiBOYXJyb3dpbmcgb24gYGF0dHJgIHJlZmluZXMgYHZhbHVlYCB0byB0aGUgY29ycmVzcG9uZGluZyBzY2hlbWEgdHlwZS5cbiAqL1xuZXhwb3J0IHR5cGUgRmFjdDxTIGV4dGVuZHMgU2NoZW1hS2luZD4gPSB7XG4gIFtLIGluIGtleW9mIFMgJiBzdHJpbmddOiB7XG4gICAgcmVhZG9ubHkgaWQ6IEVudGl0eUlkO1xuICAgIHJlYWRvbmx5IGF0dHI6IEs7XG4gICAgcmVhZG9ubHkgdmFsdWU6IFNbS107XG4gIH07XG59W2tleW9mIFMgJiBzdHJpbmddO1xuXG4vKipcbiAqIFJ1bnRpbWUgZGVzY3JpcHRvciByZXR1cm5lZCBieSB7QGxpbmsgZGVmaW5lU2NoZW1hfS5cbiAqXG4gKiBUaGUgcGhhbnRvbSBgX3R5cGVgIGZpZWxkIGNhcnJpZXMgdGhlIHNjaGVtYSB0eXBlIGBTYCB0aHJvdWdoIGluZmVyZW5jZSBzb1xuICogdGhhdCBkb3duc3RyZWFtIEFQSXMgKFNlc3Npb24sIHJ1bGVzLCBxdWVyaWVzKSBjYW4gcmVjb3ZlciB0aGUgdXNlcidzXG4gKiBhdHRyaWJ1dGUgdHlwaW5nIHdpdGhvdXQgcmVxdWlyaW5nIGl0IHRvIGJlIHJlLXNwZWNpZmllZC4gSXQgaXMgZGVjbGFyZWRcbiAqIG9wdGlvbmFsIGF0IHJ1bnRpbWUgYW5kIGlzIG5ldmVyIHBvcHVsYXRlZCB3aXRoIGEgdmFsdWU7IGF0IHRoZSB0eXBlIGxldmVsXG4gKiBpdCBjb25zdHJhaW5zIGBTYCB0aHJvdWdoIHZhcmlhbmNlLlxuICpcbiAqIFRoZSBga2V5c2AgYXJyYXkgaXMgYSBmcm96ZW4sIGRlZHVwbGljYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZSBuYW1lcyBmb3JcbiAqIHJ1bnRpbWUgaW50cm9zcGVjdGlvbiAoZS5nLiBKU09OIHJ1bGUgdmFsaWRhdGlvbiwgZGVidWcgZHVtcHMpLiBga2V5c2AgTUFZXG4gKiBiZSBlbXB0eSBpZiB0aGUgY2FsbGVyIG9ubHkgbmVlZHMgdHlwZS1sZXZlbCBzY2hlbWEgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hPFMgZXh0ZW5kcyBTY2hlbWFLaW5kPiB7XG4gIC8qKlxuICAgKiBQaGFudG9tIHR5cGUgY2Fycmllci4gTmV2ZXIgcmVhZCBhdCBydW50aW1lLiBQcmVzZW50IHNvbGVseSBzbyB0aGF0IHRoZVxuICAgKiBnZW5lcmljIHBhcmFtZXRlciBgU2AgcGFydGljaXBhdGVzIGluIHR5cGUgaW5mZXJlbmNlIHRocm91Z2ggdGhlIHJldHVyblxuICAgKiB2YWx1ZSBvZiB7QGxpbmsgZGVmaW5lU2NoZW1hfS5cbiAgICovXG4gIHJlYWRvbmx5IF90eXBlPzogUztcbiAgLyoqIEZyb3plbiwgZGVkdXBsaWNhdGVkIGF0dHJpYnV0ZS1uYW1lIGxpc3QgaW4gZmlyc3Qtc2VlbiBvcmRlci4gKi9cbiAgcmVhZG9ubHkga2V5czogUmVhZG9ubHlBcnJheTxrZXlvZiBTICYgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZGVmaW5lU2NoZW1hfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZpbmVTY2hlbWFPcHRpb25zPFMgZXh0ZW5kcyBTY2hlbWFLaW5kPiB7XG4gIC8qKlxuICAgKiBBdHRyaWJ1dGUgbmFtZXMgdG8gcmVjb3JkIGF0IHJ1bnRpbWUuIER1cGxpY2F0ZXMgYXJlIHJlbW92ZWQsIGZpcnN0LXNlZW5cbiAgICogb3JkZXIgaXMgcHJlc2VydmVkLiBJZiBvbWl0dGVkLCBga2V5c2AgZGVmYXVsdHMgdG8gYW4gZW1wdHkgYXJyYXkg4oCUIHRoZVxuICAgKiBzY2hlbWEgZGVzY3JpcHRvciBzdGlsbCBjYXJyaWVzIGZ1bGwgdHlwZSBpbmZvcm1hdGlvbiB2aWEgaXRzIGdlbmVyaWMuXG4gICAqL1xuICByZWFkb25seSBrZXlzPzogUmVhZG9ubHlBcnJheTxrZXlvZiBTICYgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBEZWZpbmUgYSBzY2hlbWEgZGVzY3JpcHRvciBmb3IgdXNlIHdpdGggYSBTZXNzaW9uLlxuICpcbiAqIFRoZSBzY2hlbWEgaXMgYSB0eXBlLWxldmVsIGNvbnRyYWN0OiBpdHMgcnVudGltZSB2YWx1ZSBpcyBhIGxpZ2h0d2VpZ2h0XG4gKiBkZXNjcmlwdG9yIHRoYXQgY2FycmllcyB0aGUgdHlwZSBwYXJhbWV0ZXIgYFNgIGZvciBpbmZlcmVuY2UgYW5kIG9wdGlvbmFsbHlcbiAqIHJlY29yZHMgdGhlIGF0dHJpYnV0ZS1uYW1lIGxpc3QgZm9yIGludHJvc3BlY3Rpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbnRlcmZhY2UgR2FtZVNjaGVtYSB7XG4gKiAgIEhlYWx0aDogbnVtYmVyO1xuICogICBQb3NpdGlvbjogc3RyaW5nO1xuICogICBBY3RpdmU6IGJvb2xlYW47XG4gKiB9XG4gKiBjb25zdCBzY2hlbWEgPSBkZWZpbmVTY2hlbWE8R2FtZVNjaGVtYT4oe1xuICogICBrZXlzOiBbXCJIZWFsdGhcIiwgXCJQb3NpdGlvblwiLCBcIkFjdGl2ZVwiXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVTY2hlbWE8UyBleHRlbmRzIFNjaGVtYUtpbmQ+KFxuICBvcHRpb25zOiBEZWZpbmVTY2hlbWFPcHRpb25zPFM+ID0ge31cbik6IFNjaGVtYTxTPiB7XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgZGVkdXBlZDogQXJyYXk8a2V5b2YgUyAmIHN0cmluZz4gPSBbXTtcbiAgY29uc3QgaW5wdXQgPSBvcHRpb25zLmtleXMgPz8gW107XG4gIGZvciAoY29uc3QgayBvZiBpbnB1dCkge1xuICAgIGlmICghc2Vlbi5oYXMoaykpIHtcbiAgICAgIHNlZW4uYWRkKGspO1xuICAgICAgZGVkdXBlZC5wdXNoKGspO1xuICAgIH1cbiAgfVxuICBjb25zdCBzY2hlbWE6IFNjaGVtYTxTPiA9IHtcbiAgICAvLyBgX3R5cGVgIGlzIGludGVudGlvbmFsbHkgb21pdHRlZCBhdCBydW50aW1lOyBpdCBleGlzdHMgb25seSBpbiB0aGUgdHlwZVxuICAgIC8vIHN5c3RlbSBhcyBhIHBoYW50b20gY2FycmllciBmb3IgdGhlIGdlbmVyaWMgcGFyYW1ldGVyIGBTYC5cbiAgICBrZXlzOiBPYmplY3QuZnJlZXplKGRlZHVwZWQpIGFzIFJlYWRvbmx5QXJyYXk8a2V5b2YgUyAmIHN0cmluZz4sXG4gIH07XG4gIHJldHVybiBPYmplY3QuZnJlZXplKHNjaGVtYSk7XG59XG5cbi8qKlxuICogQ29uc3RydWN0IGEgdHlwZWQsIGZyb3plbiBmYWN0IHRyaXBsZS5cbiAqXG4gKiBUaGUgZ2VuZXJpYyBwYXJhbWV0ZXJzIGFyZSBleHBsaWNpdCB0byBwcmVzZXJ2ZSB0aGUgbGl0ZXJhbCBgYXR0cmAgdHlwZSBpblxuICogdGhlIHJldHVybmVkIGZhY3QsIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgZG93bnN0cmVhbSBkaXNjcmltaW5hdGlvbiBhZ2FpbnN0XG4gKiB7QGxpbmsgRmFjdH1gPFM+YC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IGlkID0gc2Vzc2lvbi5uZXh0SWQoKTtcbiAqIGNvbnN0IGYgPSBmYWN0PEdhbWVTY2hlbWEsIFwiSGVhbHRoXCI+KGlkLCBcIkhlYWx0aFwiLCAxMDApO1xuICogLy8gZjogeyBpZDogRW50aXR5SWQ7IGF0dHI6IFwiSGVhbHRoXCI7IHZhbHVlOiBudW1iZXIgfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmYWN0PFMgZXh0ZW5kcyBTY2hlbWFLaW5kLCBLIGV4dGVuZHMga2V5b2YgUyAmIHN0cmluZz4oXG4gIGlkOiBFbnRpdHlJZCxcbiAgYXR0cjogSyxcbiAgdmFsdWU6IFNbS11cbik6IHsgcmVhZG9ubHkgaWQ6IEVudGl0eUlkOyByZWFkb25seSBhdHRyOiBLOyByZWFkb25seSB2YWx1ZTogU1tLXSB9IHtcbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyBpZCwgYXR0ciwgdmFsdWUgfSk7XG59XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvcmV0ZS9kaXN0L3NjaGVtYS5qcyJ9 diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/90bfe13060c1c642fa8bd2d92efb58fa47aa6cb2 b/KMr2_dqTOvh2R-Vg1E6cO/ssr/90bfe13060c1c642fa8bd2d92efb58fa47aa6cb2 deleted file mode 100644 index 3f955cc..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/90bfe13060c1c642fa8bd2d92efb58fa47aa6cb2 +++ /dev/null @@ -1,99 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "NoMatchError", { enumerable: true, configurable: true, get(){ try { return NoMatchError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "ProductionNode", { enumerable: true, configurable: true, get(){ try { return ProductionNode } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "query", { enumerable: true, configurable: true, get(){ try { return query } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "queryAll", { enumerable: true, configurable: true, get(){ try { return queryAll } catch {} }}); -/** - * Thrown by {@link query} when the target {@link ProductionNode} has no - * currently-active matches. The error carries the rule name so that callers - * — and, more importantly, test failures — can identify which production - * ran dry without needing to attach a stack frame of context. - */ -class NoMatchError extends Error { - constructor(ruleName) { - super(`NoMatchError: no match found for rule "${ruleName}"`); - this.name = "NoMatchError"; - } -}; -/** - * Terminal node in the Rete network. - * - * A `ProductionNode` subscribes (in a future wiring step) to the final - * beta-memory or filter node of a rule and accumulates the full matches - * produced by that rule. It exposes: - * - * - `matches` — the currently-active matches, in insertion order. The array - * reference itself is stable (`readonly` at the type level); its contents - * are mutated by {@link leftActivate} / {@link leftDeactivate}. - * - `ruleName` — carried for diagnostic messages (see {@link NoMatchError}). - * - * The `leftActivate` / `leftDeactivate` pair mirrors {@link BetaMemory}'s - * contract so a `ProductionNode` is a drop-in downstream subscriber for any - * node that fires left-activations. - */ -class ProductionNode { - ruleName; - /** - * Accumulated matches in insertion order. - * - * Declared `readonly` so external code cannot swap the array out from - * underneath the node, but its contents are mutated internally — tests - * and downstream code rely on positional access (`matches[0]`). - */ - matches = []; - constructor(ruleName) { - this.ruleName = ruleName; - } - /** - * Record a new full match. - * - * Called by the upstream node (a {@link BetaMemory} or a filter node) - * when a token representing a complete match enters the network. - */ - leftActivate(token) { - this.matches.push({ token, bindings: token.bindings }); - } - /** - * Withdraw a previously-recorded match. - * - * Removes the first match whose `token` is reference-equal to the - * supplied token. Unknown tokens are a no-op: upstream memories always - * broadcast deactivations to their subscribers, even when this particular - * node never accepted the token, so silently ignoring the absent case - * keeps wiring lenient (matching {@link BetaMemory.leftDeactivate}). - */ - leftDeactivate(token) { - const idx = this.matches.findIndex((m) => m.token === token); - if (idx !== -1) { - this.matches.splice(idx, 1); - } - } -}; -/** - * Return the first currently-active match's bindings, or throw - * {@link NoMatchError} if the production has no matches. - * - * "First" is defined by the same insertion order as {@link queryAll} — the - * upstream beta network is responsible for making that order deterministic - * (see module header). - */ -function query(prod) { - const first = prod.matches[0]; - if (!first) - throw new NoMatchError(prod.ruleName); - return first.bindings; -}; -/** - * Return a fresh array containing the bindings of every currently-active - * match, in insertion order. - * - * The returned array is a new array on every call, so callers may mutate - * it without affecting subsequent queries or the production node. The - * bindings objects themselves are shared by reference with the node — - * treat them as read-only. - */ -function queryAll(prod) { - return prod.matches.map((m) => m.bindings); -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7OztBQXFCQTs7Ozs7O0FBTU0sTUFBTyxZQUFhLFNBQVEsS0FBSztJQUNyQyxZQUFZLFFBQWdCO1FBQzFCLEtBQUssQ0FBQywwQ0FBMEMsUUFBUSxHQUFHLENBQUM7UUFDNUQsSUFBSSxDQUFDLElBQUksR0FBRyxjQUFjO0lBQzVCOztBQWtCRjs7Ozs7Ozs7Ozs7Ozs7OztBQWdCTSxNQUFPLGNBQWM7SUFVSjtJQVRyQjs7Ozs7OztJQU9TLE9BQU8sR0FBWSxFQUFFO0lBRTlCLFlBQXFCLFFBQWdCO1FBQWhCLGFBQVEsR0FBUixRQUFRO0lBQVc7SUFFeEM7Ozs7OztJQU1BLFlBQVksQ0FBQyxLQUFZO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDeEQ7SUFFQTs7Ozs7Ozs7O0lBU0EsY0FBYyxDQUFDLEtBQVk7UUFDekIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDO1FBQzVELElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM3QjtJQUNGOztBQUdGOzs7Ozs7OztBQVFNLFNBQVUsS0FBSyxDQUFDLElBQW9CO0lBQ3hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzdCLElBQUksQ0FBQyxLQUFLO1FBQUUsTUFBTSxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ2pELE9BQU8sS0FBSyxDQUFDLFFBQVE7QUFDdkI7QUFFQTs7Ozs7Ozs7O0FBU00sU0FBVSxRQUFRLENBQUMsSUFBb0I7SUFDM0MsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUM1QyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3F1ZXJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHJvZHVjdGlvbk5vZGUg4oCUIHRlcm1pbmFsIFJldGUgbm9kZSBhY2N1bXVsYXRpbmcgZnVsbCBtYXRjaGVzLCBwbHVzIHRoZVxuICogYHF1ZXJ5KClgIC8gYHF1ZXJ5QWxsKClgIHBvaW50LWluLXRpbWUgcXVlcnkgQVBJLlxuICpcbiAqIFBlciBgcGFja2FnZXMvcmV0ZS9TUEVDLm1kIMKnSXRlcmF0aW9uIE9yZGVyYCwgYHF1ZXJ5QWxsKClgIHJldHVybnMgcmVzdWx0c1xuICogaW4gYSBkZXRlcm1pbmlzdGljIG9yZGVyLiBEZXRlcm1pbmlzbSBpcyBwcm92aWRlZCAqdXBzdHJlYW0qIGJ5IHRoZSBiZXRhXG4gKiBuZXR3b3JrOiBpbnRlcm5hbCBiZXRhLW1lbW9yeSB0b2tlbnMgYXJlIHNvcnRlZCBieSB0aGVpciBjb25zdGl0dWVudCBmYWN0XG4gKiBpZHMgaW4gdGhlIHZhcmlhYmxlIG9yZGVyIGRlZmluZWQgYnkgdGhlIHJ1bGUncyBjb25kaXRpb24gbGlzdCAoU1BFQyDCpzgxKSxcbiAqIHNvIGJ5IHRoZSB0aW1lIHRva2VucyByZWFjaCBhIGBQcm9kdWN0aW9uTm9kZWAgdmlhIGBsZWZ0QWN0aXZhdGVgIHRoZXlcbiAqIGFscmVhZHkgYXJyaXZlIGluIGNhbm9uaWNhbCBvcmRlci4gYFByb2R1Y3Rpb25Ob2RlYCB0aGVyZWZvcmUgc3RvcmVzIHRoZW1cbiAqIGluIGluc2VydGlvbiBvcmRlciBhbmQgYHF1ZXJ5QWxsKClgIHJldHVybnMgdGhhdCBzYW1lIG9yZGVyIOKAlCByZS1zb3J0aW5nXG4gKiBoZXJlIHdvdWxkIGRpc2NhcmQgaW5mb3JtYXRpb24gKHJ1bGUtZGVjbGFyZWQgdmFyaWFibGUgb3JkZXIpIHRoYXQgdGhlXG4gKiBiZXRhIG5ldHdvcmsgaGFzIGFscmVhZHkgYmFrZWQgaW4uXG4gKlxuICogVGhpcyBtb2R1bGUgaXMgaW50ZW50aW9uYWxseSBsaW1pdGVkIHRvICpwb2ludC1pbi10aW1lKiBxdWVyaWVzLiBSZWFjdGl2ZVxuICogc3Vic2NyaXB0aW9ucyAob2JzZXJ2ZXItc3R5bGUgQVBJcykgYXJlIG91dCBvZiBzY29wZSBmb3IgUDEuMTAgcGVyIHRoZVxuICogcGhhc2UgcGxhbjsgaGlnaGVyLWxldmVsIGZpbHRlcmluZyAoZS5nLiBmaWx0ZXIgYnkgYmluZGluZykgaXMgbGF5ZXJlZCBvblxuICogdG9wIGluIGEgbGF0ZXIgcGhhc2UuXG4gKi9cbmltcG9ydCB0eXBlIHsgQmluZGluZ3MsIFRva2VuIH0gZnJvbSBcIi4vYmV0YS5qc1wiO1xuXG4vKipcbiAqIFRocm93biBieSB7QGxpbmsgcXVlcnl9IHdoZW4gdGhlIHRhcmdldCB7QGxpbmsgUHJvZHVjdGlvbk5vZGV9IGhhcyBub1xuICogY3VycmVudGx5LWFjdGl2ZSBtYXRjaGVzLiBUaGUgZXJyb3IgY2FycmllcyB0aGUgcnVsZSBuYW1lIHNvIHRoYXQgY2FsbGVyc1xuICog4oCUIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGVzdCBmYWlsdXJlcyDigJQgY2FuIGlkZW50aWZ5IHdoaWNoIHByb2R1Y3Rpb25cbiAqIHJhbiBkcnkgd2l0aG91dCBuZWVkaW5nIHRvIGF0dGFjaCBhIHN0YWNrIGZyYW1lIG9mIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBjbGFzcyBOb01hdGNoRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgTm9NYXRjaEVycm9yOiBubyBtYXRjaCBmb3VuZCBmb3IgcnVsZSBcIiR7cnVsZU5hbWV9XCJgKTtcbiAgICB0aGlzLm5hbWUgPSBcIk5vTWF0Y2hFcnJvclwiO1xuICB9XG59XG5cbi8qKlxuICogQSBmdWxsIG1hdGNoIGFjY3VtdWxhdGVkIGJ5IGEge0BsaW5rIFByb2R1Y3Rpb25Ob2RlfS5cbiAqXG4gKiBgdG9rZW5gIGlzIHRoZSB1bmRlcmx5aW5nIGJldGEtbmV0d29yayB0b2tlbiAodXNlZnVsIGZvciBkaWFnbm9zdGljcyBhbmRcbiAqIGZvciBmdXR1cmUgdHJ1dGgtbWFpbnRlbmFuY2Ugd2lyaW5nIHRoYXQgbmVlZHMgdG8gd2FsayB0aGUgbWF0Y2ggY2hhaW4pXG4gKiBhbmQgYGJpbmRpbmdzYCBpcyB0aGUgZmxhdCB2YXJpYWJsZS1iaW5kaW5nIG1hcCB0aGF0IHRoZSBwdWJsaWMgcXVlcnkgQVBJXG4gKiByZXR1cm5zLiBCb3RoIGZpZWxkcyBhcmUgYHJlYWRvbmx5YCBhdCB0aGUgdHlwZSBsZXZlbCB0byBkaXNjb3VyYWdlXG4gKiBleHRlcm5hbCBtdXRhdGlvbiwgYnV0IHRoZSBhcnJheXMgcmV0dXJuZWQgYnkge0BsaW5rIHF1ZXJ5QWxsfSBhcmUgZnJlc2hcbiAqIGNvcGllcyBzbyBjYWxsZXJzIGNhbiBtdXRhdGUgdGhlbSB3aXRob3V0IGRpc3R1cmJpbmcgdGhlIG5vZGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWF0Y2gge1xuICByZWFkb25seSB0b2tlbjogVG9rZW47XG4gIHJlYWRvbmx5IGJpbmRpbmdzOiBCaW5kaW5ncztcbn1cblxuLyoqXG4gKiBUZXJtaW5hbCBub2RlIGluIHRoZSBSZXRlIG5ldHdvcmsuXG4gKlxuICogQSBgUHJvZHVjdGlvbk5vZGVgIHN1YnNjcmliZXMgKGluIGEgZnV0dXJlIHdpcmluZyBzdGVwKSB0byB0aGUgZmluYWxcbiAqIGJldGEtbWVtb3J5IG9yIGZpbHRlciBub2RlIG9mIGEgcnVsZSBhbmQgYWNjdW11bGF0ZXMgdGhlIGZ1bGwgbWF0Y2hlc1xuICogcHJvZHVjZWQgYnkgdGhhdCBydWxlLiBJdCBleHBvc2VzOlxuICpcbiAqIC0gYG1hdGNoZXNgIOKAlCB0aGUgY3VycmVudGx5LWFjdGl2ZSBtYXRjaGVzLCBpbiBpbnNlcnRpb24gb3JkZXIuIFRoZSBhcnJheVxuICogICByZWZlcmVuY2UgaXRzZWxmIGlzIHN0YWJsZSAoYHJlYWRvbmx5YCBhdCB0aGUgdHlwZSBsZXZlbCk7IGl0cyBjb250ZW50c1xuICogICBhcmUgbXV0YXRlZCBieSB7QGxpbmsgbGVmdEFjdGl2YXRlfSAvIHtAbGluayBsZWZ0RGVhY3RpdmF0ZX0uXG4gKiAtIGBydWxlTmFtZWAg4oCUIGNhcnJpZWQgZm9yIGRpYWdub3N0aWMgbWVzc2FnZXMgKHNlZSB7QGxpbmsgTm9NYXRjaEVycm9yfSkuXG4gKlxuICogVGhlIGBsZWZ0QWN0aXZhdGVgIC8gYGxlZnREZWFjdGl2YXRlYCBwYWlyIG1pcnJvcnMge0BsaW5rIEJldGFNZW1vcnl9J3NcbiAqIGNvbnRyYWN0IHNvIGEgYFByb2R1Y3Rpb25Ob2RlYCBpcyBhIGRyb3AtaW4gZG93bnN0cmVhbSBzdWJzY3JpYmVyIGZvciBhbnlcbiAqIG5vZGUgdGhhdCBmaXJlcyBsZWZ0LWFjdGl2YXRpb25zLlxuICovXG5leHBvcnQgY2xhc3MgUHJvZHVjdGlvbk5vZGUge1xuICAvKipcbiAgICogQWNjdW11bGF0ZWQgbWF0Y2hlcyBpbiBpbnNlcnRpb24gb3JkZXIuXG4gICAqXG4gICAqIERlY2xhcmVkIGByZWFkb25seWAgc28gZXh0ZXJuYWwgY29kZSBjYW5ub3Qgc3dhcCB0aGUgYXJyYXkgb3V0IGZyb21cbiAgICogdW5kZXJuZWF0aCB0aGUgbm9kZSwgYnV0IGl0cyBjb250ZW50cyBhcmUgbXV0YXRlZCBpbnRlcm5hbGx5IOKAlCB0ZXN0c1xuICAgKiBhbmQgZG93bnN0cmVhbSBjb2RlIHJlbHkgb24gcG9zaXRpb25hbCBhY2Nlc3MgKGBtYXRjaGVzWzBdYCkuXG4gICAqL1xuICByZWFkb25seSBtYXRjaGVzOiBNYXRjaFtdID0gW107XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgcnVsZU5hbWU6IHN0cmluZykge31cblxuICAvKipcbiAgICogUmVjb3JkIGEgbmV3IGZ1bGwgbWF0Y2guXG4gICAqXG4gICAqIENhbGxlZCBieSB0aGUgdXBzdHJlYW0gbm9kZSAoYSB7QGxpbmsgQmV0YU1lbW9yeX0gb3IgYSBmaWx0ZXIgbm9kZSlcbiAgICogd2hlbiBhIHRva2VuIHJlcHJlc2VudGluZyBhIGNvbXBsZXRlIG1hdGNoIGVudGVycyB0aGUgbmV0d29yay5cbiAgICovXG4gIGxlZnRBY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICB0aGlzLm1hdGNoZXMucHVzaCh7IHRva2VuLCBiaW5kaW5nczogdG9rZW4uYmluZGluZ3MgfSk7XG4gIH1cblxuICAvKipcbiAgICogV2l0aGRyYXcgYSBwcmV2aW91c2x5LXJlY29yZGVkIG1hdGNoLlxuICAgKlxuICAgKiBSZW1vdmVzIHRoZSBmaXJzdCBtYXRjaCB3aG9zZSBgdG9rZW5gIGlzIHJlZmVyZW5jZS1lcXVhbCB0byB0aGVcbiAgICogc3VwcGxpZWQgdG9rZW4uIFVua25vd24gdG9rZW5zIGFyZSBhIG5vLW9wOiB1cHN0cmVhbSBtZW1vcmllcyBhbHdheXNcbiAgICogYnJvYWRjYXN0IGRlYWN0aXZhdGlvbnMgdG8gdGhlaXIgc3Vic2NyaWJlcnMsIGV2ZW4gd2hlbiB0aGlzIHBhcnRpY3VsYXJcbiAgICogbm9kZSBuZXZlciBhY2NlcHRlZCB0aGUgdG9rZW4sIHNvIHNpbGVudGx5IGlnbm9yaW5nIHRoZSBhYnNlbnQgY2FzZVxuICAgKiBrZWVwcyB3aXJpbmcgbGVuaWVudCAobWF0Y2hpbmcge0BsaW5rIEJldGFNZW1vcnkubGVmdERlYWN0aXZhdGV9KS5cbiAgICovXG4gIGxlZnREZWFjdGl2YXRlKHRva2VuOiBUb2tlbik6IHZvaWQge1xuICAgIGNvbnN0IGlkeCA9IHRoaXMubWF0Y2hlcy5maW5kSW5kZXgoKG0pID0+IG0udG9rZW4gPT09IHRva2VuKTtcbiAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgdGhpcy5tYXRjaGVzLnNwbGljZShpZHgsIDEpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgZmlyc3QgY3VycmVudGx5LWFjdGl2ZSBtYXRjaCdzIGJpbmRpbmdzLCBvciB0aHJvd1xuICoge0BsaW5rIE5vTWF0Y2hFcnJvcn0gaWYgdGhlIHByb2R1Y3Rpb24gaGFzIG5vIG1hdGNoZXMuXG4gKlxuICogXCJGaXJzdFwiIGlzIGRlZmluZWQgYnkgdGhlIHNhbWUgaW5zZXJ0aW9uIG9yZGVyIGFzIHtAbGluayBxdWVyeUFsbH0g4oCUIHRoZVxuICogdXBzdHJlYW0gYmV0YSBuZXR3b3JrIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgdGhhdCBvcmRlciBkZXRlcm1pbmlzdGljXG4gKiAoc2VlIG1vZHVsZSBoZWFkZXIpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcXVlcnkocHJvZDogUHJvZHVjdGlvbk5vZGUpOiBCaW5kaW5ncyB7XG4gIGNvbnN0IGZpcnN0ID0gcHJvZC5tYXRjaGVzWzBdO1xuICBpZiAoIWZpcnN0KSB0aHJvdyBuZXcgTm9NYXRjaEVycm9yKHByb2QucnVsZU5hbWUpO1xuICByZXR1cm4gZmlyc3QuYmluZGluZ3M7XG59XG5cbi8qKlxuICogUmV0dXJuIGEgZnJlc2ggYXJyYXkgY29udGFpbmluZyB0aGUgYmluZGluZ3Mgb2YgZXZlcnkgY3VycmVudGx5LWFjdGl2ZVxuICogbWF0Y2gsIGluIGluc2VydGlvbiBvcmRlci5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgYXJyYXkgaXMgYSBuZXcgYXJyYXkgb24gZXZlcnkgY2FsbCwgc28gY2FsbGVycyBtYXkgbXV0YXRlXG4gKiBpdCB3aXRob3V0IGFmZmVjdGluZyBzdWJzZXF1ZW50IHF1ZXJpZXMgb3IgdGhlIHByb2R1Y3Rpb24gbm9kZS4gVGhlXG4gKiBiaW5kaW5ncyBvYmplY3RzIHRoZW1zZWx2ZXMgYXJlIHNoYXJlZCBieSByZWZlcmVuY2Ugd2l0aCB0aGUgbm9kZSDigJRcbiAqIHRyZWF0IHRoZW0gYXMgcmVhZC1vbmx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlBbGwocHJvZDogUHJvZHVjdGlvbk5vZGUpOiBCaW5kaW5nc1tdIHtcbiAgcmV0dXJuIHByb2QubWF0Y2hlcy5tYXAoKG0pID0+IG0uYmluZGluZ3MpO1xufVxuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvZGlzdC9xdWVyeS5qcyJ9 diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/972377de7c6d161cc492125e10d16faa2d6d326b b/KMr2_dqTOvh2R-Vg1E6cO/ssr/972377de7c6d161cc492125e10d16faa2d6d326b deleted file mode 100644 index e011bad..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/972377de7c6d161cc492125e10d16faa2d6d326b +++ /dev/null @@ -1,60 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "UnknownHandlerError", { enumerable: true, configurable: true, get(){ try { return UnknownHandlerError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "UnknownPredicateError", { enumerable: true, configurable: true, get(){ try { return UnknownPredicateError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "HandlerRegistry", { enumerable: true, configurable: true, get(){ try { return HandlerRegistry } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "PredicateRegistry", { enumerable: true, configurable: true, get(){ try { return PredicateRegistry } catch {} }}); -/** - * Handler and Predicate registries. - * Per SPEC.md §JSON Rule Schema: handler-registry pattern (no eval, no function-to-string). - */ -class UnknownHandlerError extends Error { - constructor(name) { - super(`UnknownHandlerError: handler "${name}" is not registered`); - this.name = "UnknownHandlerError"; - } -}; -class UnknownPredicateError extends Error { - constructor(name) { - super(`UnknownPredicateError: predicate "${name}" is not registered`); - this.name = "UnknownPredicateError"; - } -}; -class HandlerRegistry { - handlers = new Map(); - register(name, fn) { - this.handlers.set(name, fn); - } - get(name) { - return this.handlers.get(name); - } - has(name) { - return this.handlers.has(name); - } - /** Verify all listed handler names are registered. Throws UnknownHandlerError if any missing. */ - verify(names) { - for (const name of names) { - if (!this.handlers.has(name)) - throw new UnknownHandlerError(name); - } - } -}; -class PredicateRegistry { - predicates = new Map(); - register(name, fn) { - this.predicates.set(name, fn); - } - get(name) { - return this.predicates.get(name); - } - has(name) { - return this.predicates.has(name); - } - verify(names) { - for (const name of names) { - if (!this.predicates.has(name)) - throw new UnknownPredicateError(name); - } - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7OztBQUFBOzs7O0FBS00sTUFBTyxtQkFBb0IsU0FBUSxLQUFLO0lBQzVDLFlBQVksSUFBWTtRQUN0QixLQUFLLENBQUMsaUNBQWlDLElBQUkscUJBQXFCLENBQUM7UUFDakUsSUFBSSxDQUFDLElBQUksR0FBRyxxQkFBcUI7SUFDbkM7O0FBR0ksTUFBTyxxQkFBc0IsU0FBUSxLQUFLO0lBQzlDLFlBQVksSUFBWTtRQUN0QixLQUFLLENBQUMscUNBQXFDLElBQUkscUJBQXFCLENBQUM7UUFDckUsSUFBSSxDQUFDLElBQUksR0FBRyx1QkFBdUI7SUFDckM7O0FBcUJJLE1BQU8sZUFBZTtJQUNULFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBcUI7SUFFeEQsUUFBUSxDQUFDLElBQVksRUFBRSxFQUFhO1FBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7SUFDN0I7SUFFQSxHQUFHLENBQUMsSUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQ2hDO0lBRUEsR0FBRyxDQUFDLElBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztJQUNoQztJQUVBO0lBQ0EsTUFBTSxDQUFDLEtBQXdCO1FBQzdCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQUUsTUFBTSxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQztRQUNuRTtJQUNGOztBQUdJLE1BQU8saUJBQWlCO0lBQ1gsVUFBVSxHQUFHLElBQUksR0FBRyxFQUF1QjtJQUU1RCxRQUFRLENBQUMsSUFBWSxFQUFFLEVBQWU7UUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUMvQjtJQUVBLEdBQUcsQ0FBQyxJQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFDbEM7SUFFQSxHQUFHLENBQUMsSUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQ2xDO0lBRUEsTUFBTSxDQUFDLEtBQXdCO1FBQzdCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQUUsTUFBTSxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQztRQUN2RTtJQUNGIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyIuLi9zcmMvcmVnaXN0cnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBIYW5kbGVyIGFuZCBQcmVkaWNhdGUgcmVnaXN0cmllcy5cbiAqIFBlciBTUEVDLm1kIMKnSlNPTiBSdWxlIFNjaGVtYTogaGFuZGxlci1yZWdpc3RyeSBwYXR0ZXJuIChubyBldmFsLCBubyBmdW5jdGlvbi10by1zdHJpbmcpLlxuICovXG5cbmV4cG9ydCBjbGFzcyBVbmtub3duSGFuZGxlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgVW5rbm93bkhhbmRsZXJFcnJvcjogaGFuZGxlciBcIiR7bmFtZX1cIiBpcyBub3QgcmVnaXN0ZXJlZGApO1xuICAgIHRoaXMubmFtZSA9IFwiVW5rbm93bkhhbmRsZXJFcnJvclwiO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmtub3duUHJlZGljYXRlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKGBVbmtub3duUHJlZGljYXRlRXJyb3I6IHByZWRpY2F0ZSBcIiR7bmFtZX1cIiBpcyBub3QgcmVnaXN0ZXJlZGApO1xuICAgIHRoaXMubmFtZSA9IFwiVW5rbm93blByZWRpY2F0ZUVycm9yXCI7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgSGFuZGxlckZuID0gKHNlc3Npb246IHVua25vd24sIG1hdGNoOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gdm9pZDtcbi8qKlxuICogUHJlZGljYXRlIHNpZ25hdHVyZS5cbiAqXG4gKiBQcmVkaWNhdGVzIHJlY2VpdmUgdGhlIGN1cnJlbnQgYmluZGluZ3MgKHZhcmlhYmxlIG5hbWUg4oaSIHZhbHVlKSBhbmQgYVxuICogZnJvemVuLWJ1dC10eXBlZCBsaXN0IG9mIHN0YXRpYyBhcmd1bWVudHMgZGVjbGFyZWQgaW4gdGhlIHJ1bGUncyBmaWx0ZXJcbiAqIHNwZWMgKHNlZSB7QGxpbmsgRmlsdGVyU3BlY30pLiBSZXR1cm5pbmcgYHRydWVgIGxldHMgdGhlIHBhcnRpYWwgbWF0Y2hcbiAqIHByb2NlZWQ7IGBmYWxzZWAgZmlsdGVycyBpdCBvdXQuXG4gKlxuICogU3RhdGljIGBhcmdzYCBhcmUgcGFydCBvZiB0aGUgY2FsbCBzaWduYXR1cmUgc28gdGhlIHNhbWUgcmVnaXN0ZXJlZFxuICogcHJlZGljYXRlIGNhbiBiZSByZXVzZWQgd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVycyBhY3Jvc3MgZmlsdGVyIHNwZWNzXG4gKiAoZS5nLiBgZ3JlYXRlclRoYW4oNTApYCB2cyBgZ3JlYXRlclRoYW4oMClgKSB3aXRob3V0IHBlci1zcGVjIGNsb3N1cmVzLlxuICovXG5leHBvcnQgdHlwZSBQcmVkaWNhdGVGbiA9IChcbiAgbWF0Y2g6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBhcmdzOiByZWFkb25seSB1bmtub3duW10sXG4pID0+IGJvb2xlYW47XG5cbmV4cG9ydCBjbGFzcyBIYW5kbGVyUmVnaXN0cnkge1xuICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZXJzID0gbmV3IE1hcDxzdHJpbmcsIEhhbmRsZXJGbj4oKTtcblxuICByZWdpc3RlcihuYW1lOiBzdHJpbmcsIGZuOiBIYW5kbGVyRm4pOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZXJzLnNldChuYW1lLCBmbik7XG4gIH1cblxuICBnZXQobmFtZTogc3RyaW5nKTogSGFuZGxlckZuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVycy5nZXQobmFtZSk7XG4gIH1cblxuICBoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlcnMuaGFzKG5hbWUpO1xuICB9XG5cbiAgLyoqIFZlcmlmeSBhbGwgbGlzdGVkIGhhbmRsZXIgbmFtZXMgYXJlIHJlZ2lzdGVyZWQuIFRocm93cyBVbmtub3duSGFuZGxlckVycm9yIGlmIGFueSBtaXNzaW5nLiAqL1xuICB2ZXJpZnkobmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIG5hbWVzKSB7XG4gICAgICBpZiAoIXRoaXMuaGFuZGxlcnMuaGFzKG5hbWUpKSB0aHJvdyBuZXcgVW5rbm93bkhhbmRsZXJFcnJvcihuYW1lKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByZWRpY2F0ZVJlZ2lzdHJ5IHtcbiAgcHJpdmF0ZSByZWFkb25seSBwcmVkaWNhdGVzID0gbmV3IE1hcDxzdHJpbmcsIFByZWRpY2F0ZUZuPigpO1xuXG4gIHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgZm46IFByZWRpY2F0ZUZuKTogdm9pZCB7XG4gICAgdGhpcy5wcmVkaWNhdGVzLnNldChuYW1lLCBmbik7XG4gIH1cblxuICBnZXQobmFtZTogc3RyaW5nKTogUHJlZGljYXRlRm4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByZWRpY2F0ZXMuZ2V0KG5hbWUpO1xuICB9XG5cbiAgaGFzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByZWRpY2F0ZXMuaGFzKG5hbWUpO1xuICB9XG5cbiAgdmVyaWZ5KG5hbWVzOiByZWFkb25seSBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuICAgICAgaWYgKCF0aGlzLnByZWRpY2F0ZXMuaGFzKG5hbWUpKSB0aHJvdyBuZXcgVW5rbm93blByZWRpY2F0ZUVycm9yKG5hbWUpO1xuICAgIH1cbiAgfVxufVxuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvZGlzdC9yZWdpc3RyeS5qcyJ9 diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/a3e5117daf14c606399875ff9e0ddafdb1023b59 b/KMr2_dqTOvh2R-Vg1E6cO/ssr/a3e5117daf14c606399875ff9e0ddafdb1023b59 deleted file mode 100644 index 1354efa..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/a3e5117daf14c606399875ff9e0ddafdb1023b59 +++ /dev/null @@ -1,36 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "v", { enumerable: true, configurable: true, get(){ try { return v } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "defineRule", { enumerable: true, configurable: true, get(){ try { return defineRule } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/joey/Projects/rules/packages/rete/dist/registry.js", {"importedNames":["HandlerRegistry"]}); -/** Create a variable binding. */ -function v(name) { - return { __type: "variable", name }; -}; -/** - * Define a rule, validating that all referenced handlers are registered. - */ -function defineRule(opts) { - // Validate handler registration - opts.registry.verify([opts.handler]); - const conditions = opts.what.map((w) => { - const base = { - id: w.id ?? null, - attr: w.attr, - binding: w.binding ?? null, - }; - return w.idBinding !== undefined - ? { ...base, idBinding: w.idBinding } - : base; - }); - const base = { - name: opts.name, - salience: opts.salience ?? 0, - conditions, - handler: opts.handler, - }; - return opts.handlerArgs !== undefined - ? { ...base, handlerArgs: opts.handlerArgs } - : base; -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7QUFNQTtBQVFBO0FBQ00sU0FBVSxDQUFDLENBQUMsSUFBWTtJQUM1QixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7QUFDckM7QUFxQ0E7OztBQUdNLFNBQVUsVUFBVSxDQUFDLElBQW9CO0lBQzdDO0lBQ0EsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFcEMsTUFBTSxVQUFVLEdBQW9CLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDdEQsTUFBTSxJQUFJLEdBQUc7WUFDWCxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJO1lBQ2hCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtZQUNaLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUk7U0FDM0I7UUFDRCxPQUFPLENBQUMsQ0FBQyxTQUFTLEtBQUs7WUFDckIsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTO1lBQ25DLENBQUMsQ0FBQyxJQUFJO0lBQ1YsQ0FBQyxDQUFDO0lBRUYsTUFBTSxJQUFJLEdBQUc7UUFDWCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7UUFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDO1FBQzVCLFVBQVU7UUFDVixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87S0FDdEI7SUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUs7UUFDMUIsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1FBQzFDLENBQUMsQ0FBQyxJQUFJO0FBQ1YiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUnVsZSBidWlsZGVyIOKAlCBmbHVlbnQgQVBJIGZvciBkZWZpbmluZyBSZXRlIHByb2R1Y3Rpb25zLlxuICogUGVyIFNQRUMubWQgwqdKU09OIFJ1bGUgU2NoZW1hLlxuICovXG5pbXBvcnQgdHlwZSB7IEVudGl0eUlkIH0gZnJvbSBcIi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEF0dHJLZXkgfSBmcm9tIFwiLi93bS5qc1wiO1xuaW1wb3J0IHsgSGFuZGxlclJlZ2lzdHJ5IH0gZnJvbSBcIi4vcmVnaXN0cnkuanNcIjtcblxuLyoqIFZhcmlhYmxlIGJpbmRpbmcgZGVzY3JpcHRvciDigJQgdXNlZCBpbiBydWxlIGNvbmRpdGlvbnMuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhcmlhYmxlRGVzY3JpcHRvciB7XG4gIHJlYWRvbmx5IF9fdHlwZTogXCJ2YXJpYWJsZVwiO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKiBDcmVhdGUgYSB2YXJpYWJsZSBiaW5kaW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHYobmFtZTogc3RyaW5nKTogVmFyaWFibGVEZXNjcmlwdG9yIHtcbiAgcmV0dXJuIHsgX190eXBlOiBcInZhcmlhYmxlXCIsIG5hbWUgfTtcbn1cblxuLyoqIEEgY29uZGl0aW9uIGluIGEgcnVsZSdzIExIUyAod2hhdCBibG9jaykuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVDb25kaXRpb24ge1xuICAvKiogRW50aXR5IGlkIHRvIG1hdGNoLCBudWxsID0gd2lsZGNhcmQuICovXG4gIHJlYWRvbmx5IGlkOiBFbnRpdHlJZCB8IG51bGw7XG4gIC8qKiBBdHRyaWJ1dGUga2V5IHRvIG1hdGNoLiAqL1xuICByZWFkb25seSBhdHRyOiBBdHRyS2V5O1xuICAvKiogVmFyaWFibGUgbmFtZSB0byBiaW5kIHRoZSBWQUxVRSB0by4gKi9cbiAgcmVhZG9ubHkgYmluZGluZzogVmFyaWFibGVEZXNjcmlwdG9yIHwgbnVsbDtcbiAgLyoqIFZhcmlhYmxlIG5hbWUgdG8gYmluZCB0aGUgRU5USVRZIElEIHRvLiAqL1xuICByZWFkb25seSBpZEJpbmRpbmc/OiBWYXJpYWJsZURlc2NyaXB0b3I7XG59XG5cbi8qKiBGdWxseS1yZXNvbHZlZCBydWxlIGRlZmluaXRpb24gcHJvZHVjZWQgYnkgZGVmaW5lUnVsZSgpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdWxlRGVmaW5pdGlvbiB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgc2FsaWVuY2U6IG51bWJlcjtcbiAgcmVhZG9ubHkgY29uZGl0aW9uczogcmVhZG9ubHkgUnVsZUNvbmRpdGlvbltdO1xuICByZWFkb25seSBoYW5kbGVyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGhhbmRsZXJBcmdzPzogcmVhZG9ubHkgdW5rbm93bltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlZmluZVJ1bGVPcHRzIHtcbiAgbmFtZTogc3RyaW5nO1xuICBzYWxpZW5jZT86IG51bWJlcjtcbiAgd2hhdDogQXJyYXk8e1xuICAgIGlkOiBFbnRpdHlJZCB8IG51bGw7XG4gICAgYXR0cjogQXR0cktleTtcbiAgICBiaW5kaW5nPzogVmFyaWFibGVEZXNjcmlwdG9yO1xuICAgIGlkQmluZGluZz86IFZhcmlhYmxlRGVzY3JpcHRvcjtcbiAgfT47XG4gIGhhbmRsZXI6IHN0cmluZztcbiAgaGFuZGxlckFyZ3M/OiByZWFkb25seSB1bmtub3duW107XG4gIHJlZ2lzdHJ5OiBIYW5kbGVyUmVnaXN0cnk7XG59XG5cbi8qKlxuICogRGVmaW5lIGEgcnVsZSwgdmFsaWRhdGluZyB0aGF0IGFsbCByZWZlcmVuY2VkIGhhbmRsZXJzIGFyZSByZWdpc3RlcmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lUnVsZShvcHRzOiBEZWZpbmVSdWxlT3B0cyk6IFJ1bGVEZWZpbml0aW9uIHtcbiAgLy8gVmFsaWRhdGUgaGFuZGxlciByZWdpc3RyYXRpb25cbiAgb3B0cy5yZWdpc3RyeS52ZXJpZnkoW29wdHMuaGFuZGxlcl0pO1xuXG4gIGNvbnN0IGNvbmRpdGlvbnM6IFJ1bGVDb25kaXRpb25bXSA9IG9wdHMud2hhdC5tYXAoKHcpID0+IHtcbiAgICBjb25zdCBiYXNlID0ge1xuICAgICAgaWQ6IHcuaWQgPz8gbnVsbCxcbiAgICAgIGF0dHI6IHcuYXR0cixcbiAgICAgIGJpbmRpbmc6IHcuYmluZGluZyA/PyBudWxsLFxuICAgIH07XG4gICAgcmV0dXJuIHcuaWRCaW5kaW5nICE9PSB1bmRlZmluZWRcbiAgICAgID8geyAuLi5iYXNlLCBpZEJpbmRpbmc6IHcuaWRCaW5kaW5nIH1cbiAgICAgIDogYmFzZTtcbiAgfSk7XG5cbiAgY29uc3QgYmFzZSA9IHtcbiAgICBuYW1lOiBvcHRzLm5hbWUsXG4gICAgc2FsaWVuY2U6IG9wdHMuc2FsaWVuY2UgPz8gMCxcbiAgICBjb25kaXRpb25zLFxuICAgIGhhbmRsZXI6IG9wdHMuaGFuZGxlcixcbiAgfTtcbiAgcmV0dXJuIG9wdHMuaGFuZGxlckFyZ3MgIT09IHVuZGVmaW5lZFxuICAgID8geyAuLi5iYXNlLCBoYW5kbGVyQXJnczogb3B0cy5oYW5kbGVyQXJncyB9XG4gICAgOiBiYXNlO1xufVxuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3JldGUvZGlzdC9idWlsZGVyLmpzIn0= diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/b351db6f7cf25266048a8501818cf309a7c849f7 b/KMr2_dqTOvh2R-Vg1E6cO/ssr/b351db6f7cf25266048a8501818cf309a7c849f7 deleted file mode 100644 index 6d063aa..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/b351db6f7cf25266048a8501818cf309a7c849f7 +++ /dev/null @@ -1,29 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "orderActivations", { enumerable: true, configurable: true, get(){ try { return orderActivations } catch {} }}); -/** - * Return a new array of activations in firing order. - * - * Pure; input is not mutated. See module-level doc for the three ordering - * keys. Implemented via a single `Array#sort` with a lexicographic - * comparator — `Array#sort` in V8/JSC is guaranteed stable since ES2019, - * but this comparator already yields a total order so stability is - * redundant. - */ -function orderActivations(activations) { - return [...activations].sort((a, b) => { - // 1. Salience descending (higher salience sorts earlier). - if (b.rule.salience !== a.rule.salience) { - return b.rule.salience - a.rule.salience; - }; - // 2. Specificity (number of LHS conditions) descending. - const specA = a.rule.conditions.length; - const specB = b.rule.conditions.length; - if (specB !== specA) { - return specB - specA; - }; - // 3. Insertion order ascending (earlier-registered rule wins). - return a.rule.addedAt - b.rule.addedAt; - }); -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQXdEQTs7Ozs7Ozs7O0FBU00sU0FBVSxnQkFBZ0IsQ0FDOUIsV0FBa0M7SUFFbEMsT0FBTyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3BDO1FBQ0EsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUN2QyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUTtRQUMxQztRQUNBO1FBQ0EsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTtRQUN0QyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNO1FBQ3RDLElBQUksS0FBSyxLQUFLLEtBQUssRUFBRTtZQUNuQixPQUFPLEtBQUssR0FBRyxLQUFLO1FBQ3RCO1FBQ0E7UUFDQSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTztJQUN4QyxDQUFDLENBQUM7QUFDSiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZsaWN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGV0ZXJtaW5pc3RpYyBjb25mbGljdCByZXNvbHV0aW9uIGZvciB0aGUgUmV0ZSBhZ2VuZGEuXG4gKlxuICogUGVyIGBwYWNrYWdlcy9yZXRlL1NQRUMubWQgwqdDb25mbGljdCBSZXNvbHV0aW9uYCwgcGVuZGluZyBydWxlIGFjdGl2YXRpb25zXG4gKiBtdXN0IGZpcmUgaW4gYSBzdGFibGUsIHJlcHJvZHVjaWJsZSBvcmRlciBkZXRlcm1pbmVkIGJ5IHRocmVlIGtleXMsIGFwcGxpZWRcbiAqIGluIHN0cmljdCBwcmlvcml0eTpcbiAqXG4gKiAgIDEuICoqU2FsaWVuY2UgZGVzY2VuZGluZyoqIOKAlCBoaWdoZXIgc2FsaWVuY2UgZmlyZXMgYmVmb3JlIGxvd2VyLlxuICogICAyLiAqKlNwZWNpZmljaXR5IGRlc2NlbmRpbmcqKiDigJQgdGhlIHJ1bGUgd2l0aCBtb3JlIExIUyBjb25kaXRpb25zIGZpcmVzXG4gKiAgICAgIGZpcnN0IHdoZW4gc2FsaWVuY2UgdGllcy4gVGhpcyBtYXRjaGVzIENMSVBTL0plc3MgY29udmVudGlvbnM6IGEgbW9yZVxuICogICAgICBzcGVjaWZpYyBtYXRjaCBpcyBwcmVmZXJyZWQgb3ZlciBhIGdlbmVyYWwgb25lLlxuICogICAzLiAqKkluc2VydGlvbiBvcmRlciBhc2NlbmRpbmcqKiDigJQgd2hlbiBzYWxpZW5jZSAqYW5kKiBzcGVjaWZpY2l0eSB0aWUsXG4gKiAgICAgIHRoZSBydWxlIHJlZ2lzdGVyZWQgZWFybGllc3Qgd2l0aCB0aGUgc2Vzc2lvbiB3aW5zLiBgYWRkZWRBdGAgaXNcbiAqICAgICAgdGhlIHplcm8tYmFzZWQgaW5kZXggYXNzaWduZWQgYnkge0BsaW5rIFNlc3Npb24uYWRkfSBhdCByZWdpc3RyYXRpb25cbiAqICAgICAgdGltZS5cbiAqXG4gKiBUaGUgb3JkZXJpbmcgaXMgYSB0b3RhbCBvcmRlciDigJQgbm8ga2V5IHBlcm1pdHMgdGllcywgc28gdHdvIGFjdGl2YXRpb25zXG4gKiBjYW4gb25seSBjb21wYXJlIGVxdWFsIGlmIHRoZXkgc2hhcmUgc2FsaWVuY2UsIHNwZWNpZmljaXR5LCBBTkQgYWRkZWRBdCxcbiAqIHdoaWNoIGlzIGZvcmJpZGRlbiBhdCB0aGUgc2Vzc2lvbiBsZXZlbCAoZWFjaCBydWxlIGdldHMgYSB1bmlxdWUgaW5kZXgpLlxuICogRG93bnN0cmVhbSBjYWxsZXJzIHRoZXJlZm9yZSBkbyBub3QgbmVlZCBgQXJyYXkjc29ydGAgc3RhYmlsaXR5IGd1YXJhbnRlZXMuXG4gKlxuICoge0BsaW5rIG9yZGVyQWN0aXZhdGlvbnN9IGlzIGEgcHVyZSBmdW5jdGlvbjogaXQgYWxsb2NhdGVzIGEgZnJlc2ggYXJyYXlcbiAqIGFuZCBuZXZlciBtdXRhdGVzIGl0cyBpbnB1dC4gVGhpcyBpcyBsb2FkLWJlYXJpbmcgZm9yIHRoZSBpbnRlZ3JhdGlvblxuICogd2l0aCB0aGUgYWdlbmRhLCB3aGljaCBrZWVwcyB0aGUgcmF3IGFjdGl2YXRpb24gbGlzdCBhcm91bmQgYW5kIHJlcGVhdGVkbHlcbiAqIHJlLW9yZGVycyBhIHNuYXBzaG90LlxuICovXG5pbXBvcnQgdHlwZSB7IFRva2VuIH0gZnJvbSBcIi4vYmV0YS5qc1wiO1xuXG4vKipcbiAqIEEgcnVsZSBzaGFwZSBhY2NlcHRlZCBieSB7QGxpbmsgb3JkZXJBY3RpdmF0aW9uc30uXG4gKlxuICogVGhpcyBpbnRlbnRpb25hbGx5IG1pcnJvcnMge0BsaW5rIFJ1bGVEZWZpbml0aW9ufSBmcm9tIGBidWlsZGVyLnRzYCBidXRcbiAqIHRhZ3Mgb24gdGhlIGBhZGRlZEF0YCBpbnNlcnRpb24gaW5kZXggYXNzaWduZWQgYnkge0BsaW5rIFNlc3Npb24uYWRkfS5cbiAqIEl0IGlzIGtlcHQgc3RydWN0dXJhbGx5IGluZGVwZW5kZW50IG9mIGBSdWxlRGVmaW5pdGlvbmAgc28gdGhlIGNvbmZsaWN0XG4gKiBtb2R1bGUgaGFzIG5vIGNpcmN1bGFyIGRlcGVuZGVuY3kgb24gdGhlIGJ1aWxkZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3JkZXJhYmxlUnVsZSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgc2FsaWVuY2U6IG51bWJlcjtcbiAgcmVhZG9ubHkgY29uZGl0aW9uczogcmVhZG9ubHkgdW5rbm93bltdO1xuICByZWFkb25seSBoYW5kbGVyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFkZGVkQXQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBIHBlbmRpbmcgcnVsZSBmaXJpbmc6IHRoZSBydWxlIHRoYXQgbWF0Y2hlZCBwbHVzIHRoZSBmdWxsLW1hdGNoIHRva2VuLlxuICpcbiAqIEFjdGl2YXRpb25zIGFyZSBvcGFxdWUgdG8gdGhlIG9yZGVyaW5nIGZ1bmN0aW9uIOKAlCBvbmx5IGZpZWxkcyBvbiBgcnVsZWBcbiAqIGFyZSBpbnNwZWN0ZWQuIFRoZSBgdG9rZW5gIGlzIGNhcnJpZWQgdGhyb3VnaCBzbyB0aGUgYWdlbmRhIGNhbiBsYXRlclxuICogaW52b2tlIHRoZSBydWxlJ3MgaGFuZGxlciB3aXRoIHRoZSBjb3JyZWN0IGJpbmRpbmdzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjdGl2YXRpb24ge1xuICByZWFkb25seSBydWxlOiBPcmRlcmFibGVSdWxlO1xuICByZWFkb25seSB0b2tlbjogVG9rZW47XG59XG5cbi8qKlxuICogUmV0dXJuIGEgbmV3IGFycmF5IG9mIGFjdGl2YXRpb25zIGluIGZpcmluZyBvcmRlci5cbiAqXG4gKiBQdXJlOyBpbnB1dCBpcyBub3QgbXV0YXRlZC4gU2VlIG1vZHVsZS1sZXZlbCBkb2MgZm9yIHRoZSB0aHJlZSBvcmRlcmluZ1xuICoga2V5cy4gSW1wbGVtZW50ZWQgdmlhIGEgc2luZ2xlIGBBcnJheSNzb3J0YCB3aXRoIGEgbGV4aWNvZ3JhcGhpY1xuICogY29tcGFyYXRvciDigJQgYEFycmF5I3NvcnRgIGluIFY4L0pTQyBpcyBndWFyYW50ZWVkIHN0YWJsZSBzaW5jZSBFUzIwMTksXG4gKiBidXQgdGhpcyBjb21wYXJhdG9yIGFscmVhZHkgeWllbGRzIGEgdG90YWwgb3JkZXIgc28gc3RhYmlsaXR5IGlzXG4gKiByZWR1bmRhbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcmRlckFjdGl2YXRpb25zKFxuICBhY3RpdmF0aW9uczogcmVhZG9ubHkgQWN0aXZhdGlvbltdLFxuKTogQWN0aXZhdGlvbltdIHtcbiAgcmV0dXJuIFsuLi5hY3RpdmF0aW9uc10uc29ydCgoYSwgYikgPT4ge1xuICAgIC8vIDEuIFNhbGllbmNlIGRlc2NlbmRpbmcgKGhpZ2hlciBzYWxpZW5jZSBzb3J0cyBlYXJsaWVyKS5cbiAgICBpZiAoYi5ydWxlLnNhbGllbmNlICE9PSBhLnJ1bGUuc2FsaWVuY2UpIHtcbiAgICAgIHJldHVybiBiLnJ1bGUuc2FsaWVuY2UgLSBhLnJ1bGUuc2FsaWVuY2U7XG4gICAgfVxuICAgIC8vIDIuIFNwZWNpZmljaXR5IChudW1iZXIgb2YgTEhTIGNvbmRpdGlvbnMpIGRlc2NlbmRpbmcuXG4gICAgY29uc3Qgc3BlY0EgPSBhLnJ1bGUuY29uZGl0aW9ucy5sZW5ndGg7XG4gICAgY29uc3Qgc3BlY0IgPSBiLnJ1bGUuY29uZGl0aW9ucy5sZW5ndGg7XG4gICAgaWYgKHNwZWNCICE9PSBzcGVjQSkge1xuICAgICAgcmV0dXJuIHNwZWNCIC0gc3BlY0E7XG4gICAgfVxuICAgIC8vIDMuIEluc2VydGlvbiBvcmRlciBhc2NlbmRpbmcgKGVhcmxpZXItcmVnaXN0ZXJlZCBydWxlIHdpbnMpLlxuICAgIHJldHVybiBhLnJ1bGUuYWRkZWRBdCAtIGIucnVsZS5hZGRlZEF0O1xuICB9KTtcbn1cbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9yZXRlL2Rpc3QvY29uZmxpY3QuanMifQ== diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/be379be6fb06dccc89804de7db4b6c535783241d b/KMr2_dqTOvh2R-Vg1E6cO/ssr/be379be6fb06dccc89804de7db4b6c535783241d deleted file mode 100644 index 246d309..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/be379be6fb06dccc89804de7db4b6c535783241d +++ /dev/null @@ -1,110 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("vitest", {"importedNames":["describe","it","expect","afterEach"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/middleware.ts", {"importedNames":["RateLimiter","checkOrigin","checkMessageSize","MAX_MESSAGE_BYTES"]}); - - - - - -(0,__vite_ssr_import_0__.describe)("RateLimiter", () => { - (0,__vite_ssr_import_0__.it)("allows exactly 20 rapid messages (burst capacity)", () => { - const limiter = new __vite_ssr_import_1__.RateLimiter(20, 100); - const results = []; - for (let i = 0; i < 20; i++) { - results.push(limiter.consume()); - }; - (0,__vite_ssr_import_0__.expect)(results).toHaveLength(20); - (0,__vite_ssr_import_0__.expect)(results.every((r) => r === true)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("rejects the 21st message when burst is exceeded", () => { - const limiter = new __vite_ssr_import_1__.RateLimiter(20, 100); - for (let i = 0; i < 20; i++) limiter.consume(); - (0,__vite_ssr_import_0__.expect)(limiter.consume()).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("refills tokens after waiting 100ms, then allows next message", async () => { - const limiter = new __vite_ssr_import_1__.RateLimiter(20, 100); - for (let i = 0; i < 20; i++) limiter.consume(); - (0,__vite_ssr_import_0__.expect)(limiter.consume()).toBe(false); - await new Promise((resolve) => setTimeout(resolve, 100)); - (0,__vite_ssr_import_0__.expect)(limiter.consume()).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("stress test: 200 synchronous consume() calls — first 20 pass, 21st fails", () => { - const limiter = new __vite_ssr_import_1__.RateLimiter(20, 100); - const results = []; - for (let i = 0; i < 200; i++) { - results.push(limiter.consume()); - }; - for (let i = 0; i < 20; i++) { - (0,__vite_ssr_import_0__.expect)(results[i], `message ${i + 1} should pass`).toBe(true); - }; - (0,__vite_ssr_import_0__.expect)(results[20], "message 21 should be rejected").toBe(false); - }); -}); -(0,__vite_ssr_import_0__.describe)("checkOrigin", () => { - const originalEnv = process.env.ALLOWED_ORIGINS; - (0,__vite_ssr_import_0__.afterEach)(() => { - if (originalEnv === void 0) { - delete process.env.ALLOWED_ORIGINS; - } else { - process.env.ALLOWED_ORIGINS = originalEnv; - } - }); - (0,__vite_ssr_import_0__.it)("allows http://localhost:5173 by default", () => { - delete process.env.ALLOWED_ORIGINS; - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.checkOrigin)("http://localhost:5173")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("rejects an arbitrary unlisted origin by default", () => { - delete process.env.ALLOWED_ORIGINS; - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.checkOrigin)("https://evil.example.com")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("rejects null origin", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.checkOrigin)(null)).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("rejects empty string origin", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.checkOrigin)("")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("respects ALLOWED_ORIGINS env override", () => { - process.env.ALLOWED_ORIGINS = "https://app.example.com,https://staging.example.com"; - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.checkOrigin)("https://app.example.com")).toBe(true); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.checkOrigin)("https://staging.example.com")).toBe(true); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.checkOrigin)("http://localhost:5173")).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("trims whitespace in ALLOWED_ORIGINS entries", () => { - process.env.ALLOWED_ORIGINS = " https://app.example.com , https://b.com "; - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.checkOrigin)("https://app.example.com")).toBe(true); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.checkOrigin)("https://b.com")).toBe(true); - }); -}); -(0,__vite_ssr_import_0__.describe)("checkMessageSize", () => { - (0,__vite_ssr_import_0__.it)("allows a 1-byte string", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.checkMessageSize)("x")).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("allows exactly 64 KB string", () => { - const msg = "a".repeat((0,__vite_ssr_import_1__.MAX_MESSAGE_BYTES)); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.checkMessageSize)(msg)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("rejects a string 1 byte over 64 KB", () => { - const msg = "a".repeat(__vite_ssr_import_1__.MAX_MESSAGE_BYTES + 1); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.checkMessageSize)(msg)).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("allows a 1-byte Buffer", () => { - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.checkMessageSize)(Buffer.from([65]))).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("allows exactly 64 KB Buffer", () => { - const buf = Buffer.alloc((0,__vite_ssr_import_1__.MAX_MESSAGE_BYTES)); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.checkMessageSize)(buf)).toBe(true); - }); - (0,__vite_ssr_import_0__.it)("rejects a Buffer 1 byte over 64 KB", () => { - const buf = Buffer.alloc(__vite_ssr_import_1__.MAX_MESSAGE_BYTES + 1); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.checkMessageSize)(buf)).toBe(false); - }); - (0,__vite_ssr_import_0__.it)("correctly measures multi-byte UTF-8 characters", () => { - const euroCount = Math.floor(__vite_ssr_import_1__.MAX_MESSAGE_BYTES / 3); - const justUnder = "€".repeat(euroCount); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.checkMessageSize)(justUnder)).toBe(true); - const justOver = "€".repeat(Math.ceil(__vite_ssr_import_1__.MAX_MESSAGE_BYTES / 3) + 1); - (0,__vite_ssr_import_0__.expect)((0,__vite_ssr_import_1__.checkMessageSize)(justOver)).toBe(false); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LE1BQU07QUFFekQsVUFBTSxZQUFZLEtBQUssTUFBTSwwQ0FBb0IsQ0FBQztBQUNsRCxVQUFNLFlBQVksSUFBSSxPQUFPLFNBQVM7QUFDdEMsd0NBQU8sd0NBQWlCLFNBQVMsQ0FBQyxFQUFFLEtBQUssSUFBSTtBQUc3QyxVQUFNLFdBQVcsSUFBSSxPQUFPLEtBQUssS0FBSywwQ0FBb0IsQ0FBQyxJQUFJLENBQUM7QUFDaEUsd0NBQU8sd0NBQWlCLFFBQVEsQ0FBQyxFQUFFLEtBQUssS0FBSztBQUFBLEVBQy9DLENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJtaWRkbGV3YXJlLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QsIGFmdGVyRWFjaCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB7XG4gIFJhdGVMaW1pdGVyLFxuICBjaGVja09yaWdpbixcbiAgY2hlY2tNZXNzYWdlU2l6ZSxcbiAgTUFYX01FU1NBR0VfQllURVMsXG59IGZyb20gXCIuL21pZGRsZXdhcmUuanNcIjtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSYXRlTGltaXRlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmRlc2NyaWJlKFwiUmF0ZUxpbWl0ZXJcIiwgKCkgPT4ge1xuICBpdChcImFsbG93cyBleGFjdGx5IDIwIHJhcGlkIG1lc3NhZ2VzIChidXJzdCBjYXBhY2l0eSlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGxpbWl0ZXIgPSBuZXcgUmF0ZUxpbWl0ZXIoMjAsIDEwMCk7XG4gICAgY29uc3QgcmVzdWx0czogYm9vbGVhbltdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gICAgICByZXN1bHRzLnB1c2gobGltaXRlci5jb25zdW1lKCkpO1xuICAgIH1cbiAgICBleHBlY3QocmVzdWx0cykudG9IYXZlTGVuZ3RoKDIwKTtcbiAgICBleHBlY3QocmVzdWx0cy5ldmVyeSgocikgPT4gciA9PT0gdHJ1ZSkpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyB0aGUgMjFzdCBtZXNzYWdlIHdoZW4gYnVyc3QgaXMgZXhjZWVkZWRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGxpbWl0ZXIgPSBuZXcgUmF0ZUxpbWl0ZXIoMjAsIDEwMCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMDsgaSsrKSBsaW1pdGVyLmNvbnN1bWUoKTtcbiAgICBleHBlY3QobGltaXRlci5jb25zdW1lKCkpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcInJlZmlsbHMgdG9rZW5zIGFmdGVyIHdhaXRpbmcgMTAwbXMsIHRoZW4gYWxsb3dzIG5leHQgbWVzc2FnZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbGltaXRlciA9IG5ldyBSYXRlTGltaXRlcigyMCwgMTAwKTtcbiAgICAvLyBkcmFpbiB0aGUgYnVja2V0XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMDsgaSsrKSBsaW1pdGVyLmNvbnN1bWUoKTtcbiAgICAvLyAyMXN0IGlzIGJsb2NrZWRcbiAgICBleHBlY3QobGltaXRlci5jb25zdW1lKCkpLnRvQmUoZmFsc2UpO1xuXG4gICAgLy8gV2FpdCAxMDBtcyDigJQgYXQgMTAwIHRva2Vucy9zZWMgdGhhdCdzIDEwIHRva2VucyByZWZpbGxlZFxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xuICAgIGV4cGVjdChsaW1pdGVyLmNvbnN1bWUoKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJzdHJlc3MgdGVzdDogMjAwIHN5bmNocm9ub3VzIGNvbnN1bWUoKSBjYWxscyDigJQgZmlyc3QgMjAgcGFzcywgMjFzdCBmYWlsc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgbGltaXRlciA9IG5ldyBSYXRlTGltaXRlcigyMCwgMTAwKTtcbiAgICBjb25zdCByZXN1bHRzOiBib29sZWFuW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIwMDsgaSsrKSB7XG4gICAgICByZXN1bHRzLnB1c2gobGltaXRlci5jb25zdW1lKCkpO1xuICAgIH1cblxuICAgIC8vIEZpcnN0IDIwIG11c3QgcGFzc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICAgICAgZXhwZWN0KHJlc3VsdHNbaV0sIGBtZXNzYWdlICR7aSArIDF9IHNob3VsZCBwYXNzYCkudG9CZSh0cnVlKTtcbiAgICB9XG4gICAgLy8gMjFzdCBtdXN0IGZhaWxcbiAgICBleHBlY3QocmVzdWx0c1syMF0sIFwibWVzc2FnZSAyMSBzaG91bGQgYmUgcmVqZWN0ZWRcIikudG9CZShmYWxzZSk7XG4gIH0pO1xufSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gY2hlY2tPcmlnaW5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5kZXNjcmliZShcImNoZWNrT3JpZ2luXCIsICgpID0+IHtcbiAgY29uc3Qgb3JpZ2luYWxFbnYgPSBwcm9jZXNzLmVudi5BTExPV0VEX09SSUdJTlM7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAvLyBSZXN0b3JlIGVudiBhZnRlciBlYWNoIHRlc3QgdGhhdCBtdXRhdGVzIGl0XG4gICAgaWYgKG9yaWdpbmFsRW52ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5BTExPV0VEX09SSUdJTlM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2Nlc3MuZW52LkFMTE9XRURfT1JJR0lOUyA9IG9yaWdpbmFsRW52O1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoXCJhbGxvd3MgaHR0cDovL2xvY2FsaG9zdDo1MTczIGJ5IGRlZmF1bHRcIiwgKCkgPT4ge1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5BTExPV0VEX09SSUdJTlM7XG4gICAgZXhwZWN0KGNoZWNrT3JpZ2luKFwiaHR0cDovL2xvY2FsaG9zdDo1MTczXCIpKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgYW4gYXJiaXRyYXJ5IHVubGlzdGVkIG9yaWdpbiBieSBkZWZhdWx0XCIsICgpID0+IHtcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQUxMT1dFRF9PUklHSU5TO1xuICAgIGV4cGVjdChjaGVja09yaWdpbihcImh0dHBzOi8vZXZpbC5leGFtcGxlLmNvbVwiKSkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyBudWxsIG9yaWdpblwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KGNoZWNrT3JpZ2luKG51bGwpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzIGVtcHR5IHN0cmluZyBvcmlnaW5cIiwgKCkgPT4ge1xuICAgIGV4cGVjdChjaGVja09yaWdpbihcIlwiKSkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwicmVzcGVjdHMgQUxMT1dFRF9PUklHSU5TIGVudiBvdmVycmlkZVwiLCAoKSA9PiB7XG4gICAgcHJvY2Vzcy5lbnYuQUxMT1dFRF9PUklHSU5TID1cbiAgICAgIFwiaHR0cHM6Ly9hcHAuZXhhbXBsZS5jb20saHR0cHM6Ly9zdGFnaW5nLmV4YW1wbGUuY29tXCI7XG4gICAgZXhwZWN0KGNoZWNrT3JpZ2luKFwiaHR0cHM6Ly9hcHAuZXhhbXBsZS5jb21cIikpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KGNoZWNrT3JpZ2luKFwiaHR0cHM6Ly9zdGFnaW5nLmV4YW1wbGUuY29tXCIpKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChjaGVja09yaWdpbihcImh0dHA6Ly9sb2NhbGhvc3Q6NTE3M1wiKSkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwidHJpbXMgd2hpdGVzcGFjZSBpbiBBTExPV0VEX09SSUdJTlMgZW50cmllc1wiLCAoKSA9PiB7XG4gICAgcHJvY2Vzcy5lbnYuQUxMT1dFRF9PUklHSU5TID0gXCIgIGh0dHBzOi8vYXBwLmV4YW1wbGUuY29tICAsICBodHRwczovL2IuY29tICBcIjtcbiAgICBleHBlY3QoY2hlY2tPcmlnaW4oXCJodHRwczovL2FwcC5leGFtcGxlLmNvbVwiKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QoY2hlY2tPcmlnaW4oXCJodHRwczovL2IuY29tXCIpKS50b0JlKHRydWUpO1xuICB9KTtcbn0pO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIGNoZWNrTWVzc2FnZVNpemVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5kZXNjcmliZShcImNoZWNrTWVzc2FnZVNpemVcIiwgKCkgPT4ge1xuICBpdChcImFsbG93cyBhIDEtYnl0ZSBzdHJpbmdcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChjaGVja01lc3NhZ2VTaXplKFwieFwiKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJhbGxvd3MgZXhhY3RseSA2NCBLQiBzdHJpbmdcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG1zZyA9IFwiYVwiLnJlcGVhdChNQVhfTUVTU0FHRV9CWVRFUyk7XG4gICAgZXhwZWN0KGNoZWNrTWVzc2FnZVNpemUobXNnKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzIGEgc3RyaW5nIDEgYnl0ZSBvdmVyIDY0IEtCXCIsICgpID0+IHtcbiAgICBjb25zdCBtc2cgPSBcImFcIi5yZXBlYXQoTUFYX01FU1NBR0VfQllURVMgKyAxKTtcbiAgICBleHBlY3QoY2hlY2tNZXNzYWdlU2l6ZShtc2cpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJhbGxvd3MgYSAxLWJ5dGUgQnVmZmVyXCIsICgpID0+IHtcbiAgICBleHBlY3QoY2hlY2tNZXNzYWdlU2l6ZShCdWZmZXIuZnJvbShbMHg0MV0pKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJhbGxvd3MgZXhhY3RseSA2NCBLQiBCdWZmZXJcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyhNQVhfTUVTU0FHRV9CWVRFUyk7XG4gICAgZXhwZWN0KGNoZWNrTWVzc2FnZVNpemUoYnVmKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzIGEgQnVmZmVyIDEgYnl0ZSBvdmVyIDY0IEtCXCIsICgpID0+IHtcbiAgICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoTUFYX01FU1NBR0VfQllURVMgKyAxKTtcbiAgICBleHBlY3QoY2hlY2tNZXNzYWdlU2l6ZShidWYpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJjb3JyZWN0bHkgbWVhc3VyZXMgbXVsdGktYnl0ZSBVVEYtOCBjaGFyYWN0ZXJzXCIsICgpID0+IHtcbiAgICAvLyBFYWNoICfigqwnIGlzIDMgYnl0ZXMgaW4gVVRGLTg7IChNQVhfTUVTU0FHRV9CWVRFUyAvIDMpIGNoYXJzID0gZXhhY3RseSB1bmRlciBsaW1pdFxuICAgIGNvbnN0IGV1cm9Db3VudCA9IE1hdGguZmxvb3IoTUFYX01FU1NBR0VfQllURVMgLyAzKTtcbiAgICBjb25zdCBqdXN0VW5kZXIgPSBcIuKCrFwiLnJlcGVhdChldXJvQ291bnQpOyAvLyAzICogZmxvb3IoNjU1MzYvMykgYnl0ZXNcbiAgICBleHBlY3QoY2hlY2tNZXNzYWdlU2l6ZShqdXN0VW5kZXIpKS50b0JlKHRydWUpO1xuXG4gICAgLy8gT25lIG1vcmUgZXVybyBzaWduIHB1c2hlcyBpdCBvdmVyIGZvciBtb3N0IGNvdW50c1xuICAgIGNvbnN0IGp1c3RPdmVyID0gXCLigqxcIi5yZXBlYXQoTWF0aC5jZWlsKE1BWF9NRVNTQUdFX0JZVEVTIC8gMykgKyAxKTtcbiAgICBleHBlY3QoY2hlY2tNZXNzYWdlU2l6ZShqdXN0T3ZlcikpLnRvQmUoZmFsc2UpO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3NlcnZlci9zcmMvbWlkZGxld2FyZS50ZXN0LnRzIn0= diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/c9616aeb97e4a546d490aa8f7a78908354cdff9c b/KMr2_dqTOvh2R-Vg1E6cO/ssr/c9616aeb97e4a546d490aa8f7a78908354cdff9c deleted file mode 100644 index 08929c3..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/c9616aeb97e4a546d490aa8f7a78908354cdff9c +++ /dev/null @@ -1,337 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "PROTOCOL_VERSION", { enumerable: true, configurable: true, get(){ try { return PROTOCOL_VERSION } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "ColorSchema", { enumerable: true, configurable: true, get(){ try { return ColorSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "SquareSchema", { enumerable: true, configurable: true, get(){ try { return SquareSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "PromotionPieceSchema", { enumerable: true, configurable: true, get(){ try { return PromotionPieceSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "RoomCodeSchema", { enumerable: true, configurable: true, get(){ try { return RoomCodeSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "FactSchema", { enumerable: true, configurable: true, get(){ try { return FactSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "ErrorCodeSchema", { enumerable: true, configurable: true, get(){ try { return ErrorCodeSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "GameEndReasonSchema", { enumerable: true, configurable: true, get(){ try { return GameEndReasonSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "WinnerSchema", { enumerable: true, configurable: true, get(){ try { return WinnerSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "EnvelopeSchema", { enumerable: true, configurable: true, get(){ try { return EnvelopeSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "PiecePlacementSchema", { enumerable: true, configurable: true, get(){ try { return PiecePlacementSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "LayoutRequestSchema", { enumerable: true, configurable: true, get(){ try { return LayoutRequestSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "ResolvedLayoutSchema", { enumerable: true, configurable: true, get(){ try { return ResolvedLayoutSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "RoomCreatePayloadSchema", { enumerable: true, configurable: true, get(){ try { return RoomCreatePayloadSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "RoomJoinPayloadSchema", { enumerable: true, configurable: true, get(){ try { return RoomJoinPayloadSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "RoomLeavePayloadSchema", { enumerable: true, configurable: true, get(){ try { return RoomLeavePayloadSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "GameMovePayloadSchema", { enumerable: true, configurable: true, get(){ try { return GameMovePayloadSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "PresetScopeSchema", { enumerable: true, configurable: true, get(){ try { return PresetScopeSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "PresetActivationSchema", { enumerable: true, configurable: true, get(){ try { return PresetActivationSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "RoomSetPresetsPayloadSchema", { enumerable: true, configurable: true, get(){ try { return RoomSetPresetsPayloadSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "RoomCreatedPayloadSchema", { enumerable: true, configurable: true, get(){ try { return RoomCreatedPayloadSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "RoomJoinedPayloadSchema", { enumerable: true, configurable: true, get(){ try { return RoomJoinedPayloadSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "GameStatePayloadSchema", { enumerable: true, configurable: true, get(){ try { return GameStatePayloadSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "GamePresetsPayloadSchema", { enumerable: true, configurable: true, get(){ try { return GamePresetsPayloadSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "GameOverSchema", { enumerable: true, configurable: true, get(){ try { return GameOverSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "GameDeltaPayloadSchema", { enumerable: true, configurable: true, get(){ try { return GameDeltaPayloadSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "GameEndPayloadSchema", { enumerable: true, configurable: true, get(){ try { return GameEndPayloadSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "ErrorPayloadSchema", { enumerable: true, configurable: true, get(){ try { return ErrorPayloadSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "RoomCreateMessageSchema", { enumerable: true, configurable: true, get(){ try { return RoomCreateMessageSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "RoomJoinMessageSchema", { enumerable: true, configurable: true, get(){ try { return RoomJoinMessageSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "RoomLeaveMessageSchema", { enumerable: true, configurable: true, get(){ try { return RoomLeaveMessageSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "GameMoveMessageSchema", { enumerable: true, configurable: true, get(){ try { return GameMoveMessageSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "RoomSetPresetsMessageSchema", { enumerable: true, configurable: true, get(){ try { return RoomSetPresetsMessageSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "ClientMessageSchema", { enumerable: true, configurable: true, get(){ try { return ClientMessageSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "RoomCreatedMessageSchema", { enumerable: true, configurable: true, get(){ try { return RoomCreatedMessageSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "RoomJoinedMessageSchema", { enumerable: true, configurable: true, get(){ try { return RoomJoinedMessageSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "GameStateMessageSchema", { enumerable: true, configurable: true, get(){ try { return GameStateMessageSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "GameDeltaMessageSchema", { enumerable: true, configurable: true, get(){ try { return GameDeltaMessageSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "GameEndMessageSchema", { enumerable: true, configurable: true, get(){ try { return GameEndMessageSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "GamePresetsMessageSchema", { enumerable: true, configurable: true, get(){ try { return GamePresetsMessageSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "ErrorMessageSchema", { enumerable: true, configurable: true, get(){ try { return ErrorMessageSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "ServerMessageSchema", { enumerable: true, configurable: true, get(){ try { return ServerMessageSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "AnyMessageSchema", { enumerable: true, configurable: true, get(){ try { return AnyMessageSchema } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "KNOWN_MESSAGE_TYPES", { enumerable: true, configurable: true, get(){ try { return KNOWN_MESSAGE_TYPES } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "validateMessage", { enumerable: true, configurable: true, get(){ try { return validateMessage } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "validateMessageString", { enumerable: true, configurable: true, get(){ try { return validateMessageString } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("zod", {"importedNames":["z"]}); -const PROTOCOL_VERSION = 1; -const ColorSchema = __vite_ssr_import_0__.z.enum(["white", "black"]); -const SquareSchema = __vite_ssr_import_0__.z.string().regex(/^[a-h][1-8]$/, "square must be algebraic notation a1..h8"); -const PromotionPieceSchema = __vite_ssr_import_0__.z.enum([ - "queen", - "rook", - "bishop", - "knight" -]); -const RoomCodeSchema = __vite_ssr_import_0__.z.string().length(6).regex(/^[A-Z0-9]{6}$/, "room code must be 6 uppercase [A-Z0-9]"); -const FactSchema = __vite_ssr_import_0__.z.object({ - id: __vite_ssr_import_0__.z.number().int(), - attr: __vite_ssr_import_0__.z.string(), - value: __vite_ssr_import_0__.z.unknown() -}); -const ErrorCodeSchema = __vite_ssr_import_0__.z.enum([ - "ILLEGAL_MOVE", - "NOT_YOUR_TURN", - "GAME_OVER", - "ROOM_NOT_FOUND", - "ROOM_FULL", - "SERVER_FULL", - "VERSION_MISMATCH", - "RATE_LIMIT", - "MSG_TOO_LARGE", - "BAD_TOKEN", - "INVALID_MESSAGE", - // Room creation rejected because the requested starting layout - // failed validation (bad king count, duplicate squares, etc.) or - // specified an unknown premade id / malformed FEN. - "LAYOUT_INVALID" -]); -const GameEndReasonSchema = __vite_ssr_import_0__.z.enum([ - "checkmate", - "stalemate", - "50-move", - "threefold", - "insufficient", - "player_left", - // Preset-defined decisive result (first-blood, annihilation, etc.). - // The UI reads the winner separately; this reason tag just signals - // "variant rule ended the game" to clients that care. - "variant-win" -]); -const WinnerSchema = __vite_ssr_import_0__.z.enum(["white", "black", "draw"]); -const envelopeShape = { - v: __vite_ssr_import_0__.z.literal(PROTOCOL_VERSION), - seq: __vite_ssr_import_0__.z.number().int().nonnegative(), - ts: __vite_ssr_import_0__.z.number().int().positive(), - token: __vite_ssr_import_0__.z.string().uuid().optional() -}; -const EnvelopeSchema = __vite_ssr_import_0__.z.object({ - ...envelopeShape, - type: __vite_ssr_import_0__.z.string(), - payload: __vite_ssr_import_0__.z.unknown() -}); -const PieceTypeSchema = __vite_ssr_import_0__.z.enum([ - "pawn", - "knight", - "bishop", - "rook", - "queen", - "king" -]); -const PiecePlacementSchema = __vite_ssr_import_0__.z.object({ - type: PieceTypeSchema, - color: ColorSchema, - square: __vite_ssr_import_0__.z.number().int().min(0).max(63), - hasMoved: __vite_ssr_import_0__.z.boolean().optional() -}); -const LayoutRequestSchema = __vite_ssr_import_0__.z.discriminatedUnion("kind", [ - __vite_ssr_import_0__.z.object({ - kind: __vite_ssr_import_0__.z.literal("premade"), - id: __vite_ssr_import_0__.z.string().min(1) - }), - __vite_ssr_import_0__.z.object({ - kind: __vite_ssr_import_0__.z.literal("fen"), - fen: __vite_ssr_import_0__.z.string().min(1), - name: __vite_ssr_import_0__.z.string().optional() - }), - __vite_ssr_import_0__.z.object({ - kind: __vite_ssr_import_0__.z.literal("custom"), - // Cap to 128 placements as a DoS safeguard; a real layout has ≤ 64. - pieces: __vite_ssr_import_0__.z.array(PiecePlacementSchema).max(128), - name: __vite_ssr_import_0__.z.string().optional() - }) -]); -const ResolvedLayoutSchema = __vite_ssr_import_0__.z.object({ - id: __vite_ssr_import_0__.z.string(), - name: __vite_ssr_import_0__.z.string(), - pieces: __vite_ssr_import_0__.z.array(PiecePlacementSchema) -}); -const RoomCreatePayloadSchema = __vite_ssr_import_0__.z.object({ - rulesetIds: __vite_ssr_import_0__.z.array(__vite_ssr_import_0__.z.string()).optional(), - layout: LayoutRequestSchema.optional() -}); -const RoomJoinPayloadSchema = __vite_ssr_import_0__.z.object({ - code: RoomCodeSchema -}); -const RoomLeavePayloadSchema = __vite_ssr_import_0__.z.object({}).strict(); -const GameMovePayloadSchema = __vite_ssr_import_0__.z.object({ - from: SquareSchema, - to: SquareSchema, - promoteTo: PromotionPieceSchema.optional() -}); -const PresetScopeSchema = __vite_ssr_import_0__.z.enum(["both", "white", "black"]); -const PresetActivationSchema = __vite_ssr_import_0__.z.object({ - id: __vite_ssr_import_0__.z.string().min(1), - scope: PresetScopeSchema, - turnsRemaining: __vite_ssr_import_0__.z.number().int().positive().nullable() -}); -const RoomSetPresetsPayloadSchema = __vite_ssr_import_0__.z.object({ - activations: __vite_ssr_import_0__.z.array(PresetActivationSchema) -}); -const RoomCreatedPayloadSchema = __vite_ssr_import_0__.z.object({ - code: RoomCodeSchema, - token: __vite_ssr_import_0__.z.string().uuid(), - color: ColorSchema, - // Optional for backward compat — older servers don't echo layout. - // New servers always populate it (defaults to the CLASSIC resolved - // layout when no layout was requested at creation). - layout: ResolvedLayoutSchema.optional() -}); -const RoomJoinedPayloadSchema = __vite_ssr_import_0__.z.object({ - code: RoomCodeSchema, - token: __vite_ssr_import_0__.z.string().uuid(), - color: ColorSchema, - activeRules: __vite_ssr_import_0__.z.array(__vite_ssr_import_0__.z.string()), - // Optional for backward compat (see RoomCreatedPayload). - layout: ResolvedLayoutSchema.optional() -}); -const GameStatePayloadSchema = __vite_ssr_import_0__.z.object({ - facts: __vite_ssr_import_0__.z.array(FactSchema), - turn: ColorSchema, - lastSeq: __vite_ssr_import_0__.z.number().int().nonnegative(), - moveHistory: __vite_ssr_import_0__.z.array(__vite_ssr_import_0__.z.string()), - /** Legacy rule-id list (v1 compat). Present alongside `activations` - * which is the new authoritative shape. */ - activeRules: __vite_ssr_import_0__.z.array(__vite_ssr_import_0__.z.string()), - /** Full preset activation set authoritative on the server. Optional - * on the wire so older servers don't break the schema check. */ - activations: __vite_ssr_import_0__.z.array(PresetActivationSchema).optional(), - fen: __vite_ssr_import_0__.z.string() -}); -const GamePresetsPayloadSchema = __vite_ssr_import_0__.z.object({ - activations: __vite_ssr_import_0__.z.array(PresetActivationSchema) -}); -const GameOverSchema = __vite_ssr_import_0__.z.object({ - winner: WinnerSchema, - reason: GameEndReasonSchema -}); -const GameDeltaPayloadSchema = __vite_ssr_import_0__.z.object({ - inserted: __vite_ssr_import_0__.z.array(FactSchema), - retracted: __vite_ssr_import_0__.z.array(FactSchema), - moveNotation: __vite_ssr_import_0__.z.string(), - turn: ColorSchema, - gameOver: GameOverSchema.nullable() -}); -const GameEndPayloadSchema = __vite_ssr_import_0__.z.object({ - winner: WinnerSchema, - reason: __vite_ssr_import_0__.z.string(), - finalFen: __vite_ssr_import_0__.z.string() -}); -const ErrorPayloadSchema = __vite_ssr_import_0__.z.object({ - code: ErrorCodeSchema, - message: __vite_ssr_import_0__.z.string(), - fatal: __vite_ssr_import_0__.z.boolean() -}); -const msg = (type, payload) => __vite_ssr_import_0__.z.object({ - ...envelopeShape, - type: __vite_ssr_import_0__.z.literal(type), - payload -}); -const RoomCreateMessageSchema = msg( - "room.create", - RoomCreatePayloadSchema -); -const RoomJoinMessageSchema = msg("room.join", RoomJoinPayloadSchema); -const RoomLeaveMessageSchema = msg("room.leave", RoomLeavePayloadSchema); -const GameMoveMessageSchema = msg("game.move", GameMovePayloadSchema); -const RoomSetPresetsMessageSchema = msg( - "room.setPresets", - RoomSetPresetsPayloadSchema -); -const ClientMessageSchema = __vite_ssr_import_0__.z.discriminatedUnion("type", [ - RoomCreateMessageSchema, - RoomJoinMessageSchema, - RoomLeaveMessageSchema, - GameMoveMessageSchema, - RoomSetPresetsMessageSchema -]); -const RoomCreatedMessageSchema = msg( - "room.created", - RoomCreatedPayloadSchema -); -const RoomJoinedMessageSchema = msg( - "room.joined", - RoomJoinedPayloadSchema -); -const GameStateMessageSchema = msg("game.state", GameStatePayloadSchema); -const GameDeltaMessageSchema = msg("game.delta", GameDeltaPayloadSchema); -const GameEndMessageSchema = msg("game.end", GameEndPayloadSchema); -const GamePresetsMessageSchema = msg( - "game.presets", - GamePresetsPayloadSchema -); -const ErrorMessageSchema = msg("error", ErrorPayloadSchema); -const ServerMessageSchema = __vite_ssr_import_0__.z.discriminatedUnion("type", [ - RoomCreatedMessageSchema, - RoomJoinedMessageSchema, - GameStateMessageSchema, - GameDeltaMessageSchema, - GameEndMessageSchema, - GamePresetsMessageSchema, - ErrorMessageSchema -]); -const AnyMessageSchema = __vite_ssr_import_0__.z.discriminatedUnion("type", [ - RoomCreateMessageSchema, - RoomJoinMessageSchema, - RoomLeaveMessageSchema, - GameMoveMessageSchema, - RoomSetPresetsMessageSchema, - RoomCreatedMessageSchema, - RoomJoinedMessageSchema, - GameStateMessageSchema, - GameDeltaMessageSchema, - GameEndMessageSchema, - GamePresetsMessageSchema, - ErrorMessageSchema -]); -const KNOWN_MESSAGE_TYPES = [ - "room.create", - "room.join", - "room.leave", - "game.move", - "room.setPresets", - "room.created", - "room.joined", - "game.state", - "game.delta", - "game.end", - "game.presets", - "error" -]; -const ok = (data) => ({ ok: true, data }); -const err = (error) => ({ ok: false, error }); -function validateMessage(raw) { - if (typeof raw !== "object" || raw === null || Array.isArray(raw)) { - return err("INVALID_MESSAGE: message must be a JSON object"); - }; - const envelope = raw; - if (envelope["v"] !== PROTOCOL_VERSION) { - return err( - `VERSION_MISMATCH: expected v=${String(PROTOCOL_VERSION)}, got v=${String( - envelope["v"] - )}` - ); - }; - const type = envelope["type"]; - if (typeof type !== "string") { - return err("INVALID_MESSAGE: missing or non-string `type` field"); - }; - if (!KNOWN_MESSAGE_TYPES.includes(type)) { - return err(`INVALID_MESSAGE: unknown message type "${type}"`); - }; - const parsed = AnyMessageSchema.safeParse(raw); - if (!parsed.success) { - return err(`INVALID_MESSAGE: ${formatZodError(parsed.error)}`); - }; - return ok(parsed.data); -}; -function validateMessageString(raw) { - let decoded; - try { - decoded = JSON.parse(raw); - } catch (e) { - const msg2 = e instanceof Error ? e.message : String(e); - return err(`INVALID_MESSAGE: malformed JSON (${msg2})`); - }; - return validateMessage(decoded); -}; -function formatZodError(error) { - return error.issues.map((issue) => { - const path = issue.path.length > 0 ? issue.path.join(".") : ""; - return `${path}: ${issue.message}`; - }).join("; "); -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUc7QUFDN0MsTUFBSSxDQUFDLE9BQU8sU0FBUztBQUNuQixXQUFPLElBQUksb0JBQW9CLGVBQWUsT0FBTyxLQUFLLENBQUMsRUFBRTtBQUFBLEVBQy9EO0FBQ0EsU0FBTyxHQUFHLE9BQU8sSUFBSTtBQUN2QjtBQU1PLFNBQVMsc0JBQ2QsS0FDNEI7QUFDNUIsTUFBSTtBQUNKLE1BQUk7QUFDRixjQUFVLEtBQUssTUFBTSxHQUFHO0FBQUEsRUFDMUIsU0FBUyxHQUFHO0FBQ1YsVUFBTUEsT0FBTSxhQUFhLFFBQVEsRUFBRSxVQUFVLE9BQU8sQ0FBQztBQUNyRCxXQUFPLElBQUksb0NBQW9DQSxJQUFHLEdBQUc7QUFBQSxFQUN2RDtBQUNBLFNBQU8sZ0JBQWdCLE9BQU87QUFDaEM7QUFFQSxTQUFTLGVBQWUsT0FBMkI7QUFHakQsU0FBTyxNQUFNLE9BQ1YsSUFBSSxDQUFDLFVBQVU7QUFDZCxVQUFNLE9BQU8sTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLEtBQUssS0FBSyxHQUFHLElBQUk7QUFDNUQsV0FBTyxHQUFHLElBQUksS0FBSyxNQUFNLE9BQU87QUFBQSxFQUNsQyxDQUFDLEVBQ0EsS0FBSyxJQUFJO0FBQ2QiLCJuYW1lcyI6WyJtc2ciXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsicHJvdG9jb2wudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ2hlc3Mgc2VydmVyIFdlYlNvY2tldCBwcm90b2NvbCB2MSDigJQgWm9kIHNjaGVtYXMgJiB2YWxpZGF0aW9uLlxuLy8gU2VlIFBST1RPQ09MLm1kIGZvciB0aGUgZnVsbCBzcGVjLlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQcmltaXRpdmVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGNvbnN0IFBST1RPQ09MX1ZFUlNJT04gPSAxIGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgQ29sb3JTY2hlbWEgPSB6LmVudW0oW1wid2hpdGVcIiwgXCJibGFja1wiXSk7XG5leHBvcnQgdHlwZSBDb2xvciA9IHouaW5mZXI8dHlwZW9mIENvbG9yU2NoZW1hPjtcblxuZXhwb3J0IGNvbnN0IFNxdWFyZVNjaGVtYSA9IHpcbiAgLnN0cmluZygpXG4gIC5yZWdleCgvXlthLWhdWzEtOF0kLywgXCJzcXVhcmUgbXVzdCBiZSBhbGdlYnJhaWMgbm90YXRpb24gYTEuLmg4XCIpO1xuZXhwb3J0IHR5cGUgU3F1YXJlID0gei5pbmZlcjx0eXBlb2YgU3F1YXJlU2NoZW1hPjtcblxuZXhwb3J0IGNvbnN0IFByb21vdGlvblBpZWNlU2NoZW1hID0gei5lbnVtKFtcbiAgXCJxdWVlblwiLFxuICBcInJvb2tcIixcbiAgXCJiaXNob3BcIixcbiAgXCJrbmlnaHRcIixcbl0pO1xuZXhwb3J0IHR5cGUgUHJvbW90aW9uUGllY2UgPSB6LmluZmVyPHR5cGVvZiBQcm9tb3Rpb25QaWVjZVNjaGVtYT47XG5cbmV4cG9ydCBjb25zdCBSb29tQ29kZVNjaGVtYSA9IHpcbiAgLnN0cmluZygpXG4gIC5sZW5ndGgoNilcbiAgLnJlZ2V4KC9eW0EtWjAtOV17Nn0kLywgXCJyb29tIGNvZGUgbXVzdCBiZSA2IHVwcGVyY2FzZSBbQS1aMC05XVwiKTtcbmV4cG9ydCB0eXBlIFJvb21Db2RlID0gei5pbmZlcjx0eXBlb2YgUm9vbUNvZGVTY2hlbWE+O1xuXG5leHBvcnQgY29uc3QgRmFjdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHoubnVtYmVyKCkuaW50KCksXG4gIGF0dHI6IHouc3RyaW5nKCksXG4gIHZhbHVlOiB6LnVua25vd24oKSxcbn0pO1xuZXhwb3J0IHR5cGUgRmFjdCA9IHouaW5mZXI8dHlwZW9mIEZhY3RTY2hlbWE+O1xuXG5leHBvcnQgY29uc3QgRXJyb3JDb2RlU2NoZW1hID0gei5lbnVtKFtcbiAgXCJJTExFR0FMX01PVkVcIixcbiAgXCJOT1RfWU9VUl9UVVJOXCIsXG4gIFwiR0FNRV9PVkVSXCIsXG4gIFwiUk9PTV9OT1RfRk9VTkRcIixcbiAgXCJST09NX0ZVTExcIixcbiAgXCJTRVJWRVJfRlVMTFwiLFxuICBcIlZFUlNJT05fTUlTTUFUQ0hcIixcbiAgXCJSQVRFX0xJTUlUXCIsXG4gIFwiTVNHX1RPT19MQVJHRVwiLFxuICBcIkJBRF9UT0tFTlwiLFxuICBcIklOVkFMSURfTUVTU0FHRVwiLFxuICAvLyBSb29tIGNyZWF0aW9uIHJlamVjdGVkIGJlY2F1c2UgdGhlIHJlcXVlc3RlZCBzdGFydGluZyBsYXlvdXRcbiAgLy8gZmFpbGVkIHZhbGlkYXRpb24gKGJhZCBraW5nIGNvdW50LCBkdXBsaWNhdGUgc3F1YXJlcywgZXRjLikgb3JcbiAgLy8gc3BlY2lmaWVkIGFuIHVua25vd24gcHJlbWFkZSBpZCAvIG1hbGZvcm1lZCBGRU4uXG4gIFwiTEFZT1VUX0lOVkFMSURcIixcbl0pO1xuZXhwb3J0IHR5cGUgRXJyb3JDb2RlID0gei5pbmZlcjx0eXBlb2YgRXJyb3JDb2RlU2NoZW1hPjtcblxuZXhwb3J0IGNvbnN0IEdhbWVFbmRSZWFzb25TY2hlbWEgPSB6LmVudW0oW1xuICBcImNoZWNrbWF0ZVwiLFxuICBcInN0YWxlbWF0ZVwiLFxuICBcIjUwLW1vdmVcIixcbiAgXCJ0aHJlZWZvbGRcIixcbiAgXCJpbnN1ZmZpY2llbnRcIixcbiAgXCJwbGF5ZXJfbGVmdFwiLFxuICAvLyBQcmVzZXQtZGVmaW5lZCBkZWNpc2l2ZSByZXN1bHQgKGZpcnN0LWJsb29kLCBhbm5paGlsYXRpb24sIGV0Yy4pLlxuICAvLyBUaGUgVUkgcmVhZHMgdGhlIHdpbm5lciBzZXBhcmF0ZWx5OyB0aGlzIHJlYXNvbiB0YWcganVzdCBzaWduYWxzXG4gIC8vIFwidmFyaWFudCBydWxlIGVuZGVkIHRoZSBnYW1lXCIgdG8gY2xpZW50cyB0aGF0IGNhcmUuXG4gIFwidmFyaWFudC13aW5cIixcbl0pO1xuZXhwb3J0IHR5cGUgR2FtZUVuZFJlYXNvbiA9IHouaW5mZXI8dHlwZW9mIEdhbWVFbmRSZWFzb25TY2hlbWE+O1xuXG5leHBvcnQgY29uc3QgV2lubmVyU2NoZW1hID0gei5lbnVtKFtcIndoaXRlXCIsIFwiYmxhY2tcIiwgXCJkcmF3XCJdKTtcbmV4cG9ydCB0eXBlIFdpbm5lciA9IHouaW5mZXI8dHlwZW9mIFdpbm5lclNjaGVtYT47XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRW52ZWxvcGUgKGNvbW1vbiB3cmFwcGVyIGZvciBldmVyeSBtZXNzYWdlKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IGVudmVsb3BlU2hhcGUgPSB7XG4gIHY6IHoubGl0ZXJhbChQUk9UT0NPTF9WRVJTSU9OKSxcbiAgc2VxOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG4gIHRzOiB6Lm51bWJlcigpLmludCgpLnBvc2l0aXZlKCksXG4gIHRva2VuOiB6LnN0cmluZygpLnV1aWQoKS5vcHRpb25hbCgpLFxufSBhcyBjb25zdDtcblxuLy8gQSBwZXJtaXNzaXZlIGVudmVsb3BlLW9ubHkgcGFyc2VyIHVzZWQgdG8gaW5zcGVjdCBgdmAgYW5kIGB0eXBlYCBiZWZvcmVcbi8vIGNob29zaW5nIGEgZGlzY3JpbWluYXRlZC11bmlvbiBicmFuY2guIFBheWxvYWQgaXMgdW5rbm93biBhdCB0aGlzIGxheWVyLlxuZXhwb3J0IGNvbnN0IEVudmVsb3BlU2NoZW1hID0gei5vYmplY3Qoe1xuICAuLi5lbnZlbG9wZVNoYXBlLFxuICB0eXBlOiB6LnN0cmluZygpLFxuICBwYXlsb2FkOiB6LnVua25vd24oKSxcbn0pO1xuZXhwb3J0IHR5cGUgRW52ZWxvcGUgPSB6LmluZmVyPHR5cGVvZiBFbnZlbG9wZVNjaGVtYT47XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ2xpZW50IOKGkiBTZXJ2ZXIgcGF5bG9hZHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN0YXJ0aW5nIExheW91dCBwYXlsb2FkcyDigJQgb3J0aG9nb25hbCB0byBydWxlIHByZXNldHMgKHJ1bGVzZXRJZHMpLlxuLy9cbi8vIEEgcm9vbSBtYXkgYmUgY3JlYXRlZCB3aXRoIGEgc3BlY2lmaWMgU1RBUlRJTkcgTEFZT1VUIChwaWVjZSBwbGFjZW1lbnQpLlxuLy8gVGhyZWUgZW5jb2RpbmdzIGFyZSBzdXBwb3J0ZWQ6XG4vLyAgIC0gYHsga2luZDogXCJwcmVtYWRlXCIsIGlkIH1gICAg4oaSIGxvb2sgdXAgaW4gc2VydmVyJ3MgTEFZT1VUX1JFR0lTVFJZXG4vLyAgIC0gYHsga2luZDogXCJmZW5cIiwgZmVuLCBuYW1lPyB9YCDihpIgcGFyc2UgcGllY2UtcGxhY2VtZW50IEZFTlxuLy8gICAtIGB7IGtpbmQ6IFwiY3VzdG9tXCIsIHBpZWNlcywgbmFtZT8gfWAg4oaSIGNsaWVudC1hdXRob3JlZCBwbGFjZW1lbnRzXG4vL1xuLy8gSWYgb21pdHRlZCwgdGhlIHNlcnZlciB1c2VzIENMQVNTSUNfTEFZT1VUIChzdGFuZGFyZCBGSURFKS5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBQaWVjZVR5cGVTY2hlbWEgPSB6LmVudW0oW1xuICBcInBhd25cIixcbiAgXCJrbmlnaHRcIixcbiAgXCJiaXNob3BcIixcbiAgXCJyb29rXCIsXG4gIFwicXVlZW5cIixcbiAgXCJraW5nXCIsXG5dKTtcblxuZXhwb3J0IGNvbnN0IFBpZWNlUGxhY2VtZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiBQaWVjZVR5cGVTY2hlbWEsXG4gIGNvbG9yOiBDb2xvclNjaGVtYSxcbiAgc3F1YXJlOiB6Lm51bWJlcigpLmludCgpLm1pbigwKS5tYXgoNjMpLFxuICBoYXNNb3ZlZDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUGllY2VQbGFjZW1lbnRXaXJlID0gei5pbmZlcjx0eXBlb2YgUGllY2VQbGFjZW1lbnRTY2hlbWE+O1xuXG5leHBvcnQgY29uc3QgTGF5b3V0UmVxdWVzdFNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwia2luZFwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICBraW5kOiB6LmxpdGVyYWwoXCJwcmVtYWRlXCIpLFxuICAgIGlkOiB6LnN0cmluZygpLm1pbigxKSxcbiAgfSksXG4gIHoub2JqZWN0KHtcbiAgICBraW5kOiB6LmxpdGVyYWwoXCJmZW5cIiksXG4gICAgZmVuOiB6LnN0cmluZygpLm1pbigxKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAga2luZDogei5saXRlcmFsKFwiY3VzdG9tXCIpLFxuICAgIC8vIENhcCB0byAxMjggcGxhY2VtZW50cyBhcyBhIERvUyBzYWZlZ3VhcmQ7IGEgcmVhbCBsYXlvdXQgaGFzIOKJpCA2NC5cbiAgICBwaWVjZXM6IHouYXJyYXkoUGllY2VQbGFjZW1lbnRTY2hlbWEpLm1heCgxMjgpLFxuICAgIG5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSksXG5dKTtcbmV4cG9ydCB0eXBlIExheW91dFJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBMYXlvdXRSZXF1ZXN0U2NoZW1hPjtcblxuLyoqXG4gKiBTZXJ2ZXItcmVzb2x2ZWQgbGF5b3V0IGVjaG9lZCBiYWNrIHRvIGNsaWVudHMgdmlhIGByb29tLmNyZWF0ZWRgXG4gKiBhbmQgYHJvb20uam9pbmVkYC4gQWx3YXlzIGluY2x1ZGVzIHRoZSBjb25jcmV0ZSBwaWVjZSBsaXN0IHNvIGxhdGVcbiAqIGpvaW5lcnMgY2FuIHJlbmRlciB0aGUgYm9hcmQgd2l0aG91dCByZS1yZXF1ZXN0aW5nLlxuICovXG5leHBvcnQgY29uc3QgUmVzb2x2ZWRMYXlvdXRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICBuYW1lOiB6LnN0cmluZygpLFxuICBwaWVjZXM6IHouYXJyYXkoUGllY2VQbGFjZW1lbnRTY2hlbWEpLFxufSk7XG5leHBvcnQgdHlwZSBSZXNvbHZlZExheW91dCA9IHouaW5mZXI8dHlwZW9mIFJlc29sdmVkTGF5b3V0U2NoZW1hPjtcblxuZXhwb3J0IGNvbnN0IFJvb21DcmVhdGVQYXlsb2FkU2NoZW1hID0gei5vYmplY3Qoe1xuICBydWxlc2V0SWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIGxheW91dDogTGF5b3V0UmVxdWVzdFNjaGVtYS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBSb29tQ3JlYXRlUGF5bG9hZCA9IHouaW5mZXI8dHlwZW9mIFJvb21DcmVhdGVQYXlsb2FkU2NoZW1hPjtcblxuZXhwb3J0IGNvbnN0IFJvb21Kb2luUGF5bG9hZFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY29kZTogUm9vbUNvZGVTY2hlbWEsXG59KTtcbmV4cG9ydCB0eXBlIFJvb21Kb2luUGF5bG9hZCA9IHouaW5mZXI8dHlwZW9mIFJvb21Kb2luUGF5bG9hZFNjaGVtYT47XG5cbmV4cG9ydCBjb25zdCBSb29tTGVhdmVQYXlsb2FkU2NoZW1hID0gei5vYmplY3Qoe30pLnN0cmljdCgpO1xuZXhwb3J0IHR5cGUgUm9vbUxlYXZlUGF5bG9hZCA9IHouaW5mZXI8dHlwZW9mIFJvb21MZWF2ZVBheWxvYWRTY2hlbWE+O1xuXG5leHBvcnQgY29uc3QgR2FtZU1vdmVQYXlsb2FkU2NoZW1hID0gei5vYmplY3Qoe1xuICBmcm9tOiBTcXVhcmVTY2hlbWEsXG4gIHRvOiBTcXVhcmVTY2hlbWEsXG4gIHByb21vdGVUbzogUHJvbW90aW9uUGllY2VTY2hlbWEub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgR2FtZU1vdmVQYXlsb2FkID0gei5pbmZlcjx0eXBlb2YgR2FtZU1vdmVQYXlsb2FkU2NoZW1hPjtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQcmVzZXQgc2NvcGUgKyBhY3RpdmF0aW9uIOKAlCB1c2VkIGJ5IGJvdGggZGlyZWN0aW9ucyBvZiB0aGUgcHJlc2V0IHN5bmMuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGNvbnN0IFByZXNldFNjb3BlU2NoZW1hID0gei5lbnVtKFtcImJvdGhcIiwgXCJ3aGl0ZVwiLCBcImJsYWNrXCJdKTtcbmV4cG9ydCB0eXBlIFByZXNldFNjb3BlID0gei5pbmZlcjx0eXBlb2YgUHJlc2V0U2NvcGVTY2hlbWE+O1xuXG4vKipcbiAqIFdpcmUgc2hhcGUgZm9yIG9uZSBhY3RpdmUgcHJlc2V0LiBgdHVybnNSZW1haW5pbmdgIGlzIGBudWxsYCBmb3JcbiAqIHBlcm1hbmVudCBhY3RpdmF0aW9uczsgb3RoZXJ3aXNlIGEgcG9zaXRpdmUgaW50ZWdlciBjb3VudCBvZlxuICogcGxheWVyLWxvY2FsIHR1cm5zIChzZWUgQWN0aXZlUHJlc2V0U2V0IGZvciBjb3VudGluZyBwb2xpY3kpLlxuICovXG5leHBvcnQgY29uc3QgUHJlc2V0QWN0aXZhdGlvblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCkubWluKDEpLFxuICBzY29wZTogUHJlc2V0U2NvcGVTY2hlbWEsXG4gIHR1cm5zUmVtYWluaW5nOiB6Lm51bWJlcigpLmludCgpLnBvc2l0aXZlKCkubnVsbGFibGUoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUHJlc2V0QWN0aXZhdGlvbiA9IHouaW5mZXI8dHlwZW9mIFByZXNldEFjdGl2YXRpb25TY2hlbWE+O1xuXG4vKipcbiAqIENsaWVudCDihpIgc2VydmVyOiByZXBsYWNlIHRoZSByb29tJ3MgZW50aXJlIGFjdGl2ZSBwcmVzZXQgc2V0LiBTZXJ2ZXJcbiAqIHZhbGlkYXRlcyAoY2F0YWxvZyBsb29rdXAsIHBhaXJ3aXNlIGNvbXBhdGliaWxpdHkgdW5kZXIgdGhlIHNjb3BlLW92ZXJsYXBcbiAqIHJ1bGUsIHJlcXVpcmVzKSBhbmQgZWl0aGVyIGFjY2VwdHMg4oCUIGJyb2FkY2FzdGluZyBgZ2FtZS5wcmVzZXRzYCB0byBhbGxcbiAqIHBsYXllcnMg4oCUIG9yIHJlamVjdHMgd2l0aCBgSU5WQUxJRF9NRVNTQUdFYC5cbiAqXG4gKiBXZSBjaG9zZSBcInJlcGxhY2Ugd2hvbGUgc2V0XCIgb3ZlciBcInRvZ2dsZSBvbmVcIiBiZWNhdXNlIGl0IHNpZGVzdGVwc1xuICogb3JkZXJpbmcgaXNzdWVzIHdoZW4gdHdvIGNsaWVudHMgcmFjZSB0b2dnbGVzIGFuZCBnaXZlcyB1cyBpZGVtcG90ZW5jeVxuICogZm9yIHJlY29ubmVjdDogdGhlIHNlcnZlciBqdXN0IHJlLXNlbmRzIHRoZSBjdXJyZW50IHNldCBvbiBnYW1lLnN0YXRlLlxuICovXG5leHBvcnQgY29uc3QgUm9vbVNldFByZXNldHNQYXlsb2FkU2NoZW1hID0gei5vYmplY3Qoe1xuICBhY3RpdmF0aW9uczogei5hcnJheShQcmVzZXRBY3RpdmF0aW9uU2NoZW1hKSxcbn0pO1xuZXhwb3J0IHR5cGUgUm9vbVNldFByZXNldHNQYXlsb2FkID0gei5pbmZlcjx0eXBlb2YgUm9vbVNldFByZXNldHNQYXlsb2FkU2NoZW1hPjtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZXJ2ZXIg4oaSIENsaWVudCBwYXlsb2Fkc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBSb29tQ3JlYXRlZFBheWxvYWRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNvZGU6IFJvb21Db2RlU2NoZW1hLFxuICB0b2tlbjogei5zdHJpbmcoKS51dWlkKCksXG4gIGNvbG9yOiBDb2xvclNjaGVtYSxcbiAgLy8gT3B0aW9uYWwgZm9yIGJhY2t3YXJkIGNvbXBhdCDigJQgb2xkZXIgc2VydmVycyBkb24ndCBlY2hvIGxheW91dC5cbiAgLy8gTmV3IHNlcnZlcnMgYWx3YXlzIHBvcHVsYXRlIGl0IChkZWZhdWx0cyB0byB0aGUgQ0xBU1NJQyByZXNvbHZlZFxuICAvLyBsYXlvdXQgd2hlbiBubyBsYXlvdXQgd2FzIHJlcXVlc3RlZCBhdCBjcmVhdGlvbikuXG4gIGxheW91dDogUmVzb2x2ZWRMYXlvdXRTY2hlbWEub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUm9vbUNyZWF0ZWRQYXlsb2FkID0gei5pbmZlcjx0eXBlb2YgUm9vbUNyZWF0ZWRQYXlsb2FkU2NoZW1hPjtcblxuZXhwb3J0IGNvbnN0IFJvb21Kb2luZWRQYXlsb2FkU2NoZW1hID0gei5vYmplY3Qoe1xuICBjb2RlOiBSb29tQ29kZVNjaGVtYSxcbiAgdG9rZW46IHouc3RyaW5nKCkudXVpZCgpLFxuICBjb2xvcjogQ29sb3JTY2hlbWEsXG4gIGFjdGl2ZVJ1bGVzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAvLyBPcHRpb25hbCBmb3IgYmFja3dhcmQgY29tcGF0IChzZWUgUm9vbUNyZWF0ZWRQYXlsb2FkKS5cbiAgbGF5b3V0OiBSZXNvbHZlZExheW91dFNjaGVtYS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBSb29tSm9pbmVkUGF5bG9hZCA9IHouaW5mZXI8dHlwZW9mIFJvb21Kb2luZWRQYXlsb2FkU2NoZW1hPjtcblxuZXhwb3J0IGNvbnN0IEdhbWVTdGF0ZVBheWxvYWRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGZhY3RzOiB6LmFycmF5KEZhY3RTY2hlbWEpLFxuICB0dXJuOiBDb2xvclNjaGVtYSxcbiAgbGFzdFNlcTogei5udW1iZXIoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLFxuICBtb3ZlSGlzdG9yeTogei5hcnJheSh6LnN0cmluZygpKSxcbiAgLyoqIExlZ2FjeSBydWxlLWlkIGxpc3QgKHYxIGNvbXBhdCkuIFByZXNlbnQgYWxvbmdzaWRlIGBhY3RpdmF0aW9uc2BcbiAgICogIHdoaWNoIGlzIHRoZSBuZXcgYXV0aG9yaXRhdGl2ZSBzaGFwZS4gKi9cbiAgYWN0aXZlUnVsZXM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIC8qKiBGdWxsIHByZXNldCBhY3RpdmF0aW9uIHNldCBhdXRob3JpdGF0aXZlIG9uIHRoZSBzZXJ2ZXIuIE9wdGlvbmFsXG4gICAqICBvbiB0aGUgd2lyZSBzbyBvbGRlciBzZXJ2ZXJzIGRvbid0IGJyZWFrIHRoZSBzY2hlbWEgY2hlY2suICovXG4gIGFjdGl2YXRpb25zOiB6LmFycmF5KFByZXNldEFjdGl2YXRpb25TY2hlbWEpLm9wdGlvbmFsKCksXG4gIGZlbjogei5zdHJpbmcoKSxcbn0pO1xuZXhwb3J0IHR5cGUgR2FtZVN0YXRlUGF5bG9hZCA9IHouaW5mZXI8dHlwZW9mIEdhbWVTdGF0ZVBheWxvYWRTY2hlbWE+O1xuXG4vKipcbiAqIFNlcnZlciDihpIgY2xpZW50OiBhdXRob3JpdGF0aXZlIHByZXNldCBzZXQganVzdCBjaGFuZ2VkLiBTZW50IGFmdGVyIGFcbiAqIHN1Y2Nlc3NmdWwgYHJvb20uc2V0UHJlc2V0c2Agb3IgYWZ0ZXIgYSBtb3ZlIHRoYXQgZXhwaXJlZCBkdXJhdGlvbnMuXG4gKiBDbGllbnRzIGFwcGx5IHRoaXMgZGlyZWN0bHkgdG8gdGhlaXIgbG9jYWwgZW5naW5lcycgQWN0aXZlUHJlc2V0U2V0XG4gKiDigJQgbmV2ZXIgc3RvcmUgcnVsZXMgbG9jYWxseSwgYWx3YXlzIG1pcnJvciB3aGF0IHRoZSBzZXJ2ZXIgc2F5cy5cbiAqL1xuZXhwb3J0IGNvbnN0IEdhbWVQcmVzZXRzUGF5bG9hZFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgYWN0aXZhdGlvbnM6IHouYXJyYXkoUHJlc2V0QWN0aXZhdGlvblNjaGVtYSksXG59KTtcbmV4cG9ydCB0eXBlIEdhbWVQcmVzZXRzUGF5bG9hZCA9IHouaW5mZXI8dHlwZW9mIEdhbWVQcmVzZXRzUGF5bG9hZFNjaGVtYT47XG5cbmV4cG9ydCBjb25zdCBHYW1lT3ZlclNjaGVtYSA9IHoub2JqZWN0KHtcbiAgd2lubmVyOiBXaW5uZXJTY2hlbWEsXG4gIHJlYXNvbjogR2FtZUVuZFJlYXNvblNjaGVtYSxcbn0pO1xuZXhwb3J0IHR5cGUgR2FtZU92ZXIgPSB6LmluZmVyPHR5cGVvZiBHYW1lT3ZlclNjaGVtYT47XG5cbmV4cG9ydCBjb25zdCBHYW1lRGVsdGFQYXlsb2FkU2NoZW1hID0gei5vYmplY3Qoe1xuICBpbnNlcnRlZDogei5hcnJheShGYWN0U2NoZW1hKSxcbiAgcmV0cmFjdGVkOiB6LmFycmF5KEZhY3RTY2hlbWEpLFxuICBtb3ZlTm90YXRpb246IHouc3RyaW5nKCksXG4gIHR1cm46IENvbG9yU2NoZW1hLFxuICBnYW1lT3ZlcjogR2FtZU92ZXJTY2hlbWEubnVsbGFibGUoKSxcbn0pO1xuZXhwb3J0IHR5cGUgR2FtZURlbHRhUGF5bG9hZCA9IHouaW5mZXI8dHlwZW9mIEdhbWVEZWx0YVBheWxvYWRTY2hlbWE+O1xuXG5leHBvcnQgY29uc3QgR2FtZUVuZFBheWxvYWRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHdpbm5lcjogV2lubmVyU2NoZW1hLFxuICByZWFzb246IHouc3RyaW5nKCksXG4gIGZpbmFsRmVuOiB6LnN0cmluZygpLFxufSk7XG5leHBvcnQgdHlwZSBHYW1lRW5kUGF5bG9hZCA9IHouaW5mZXI8dHlwZW9mIEdhbWVFbmRQYXlsb2FkU2NoZW1hPjtcblxuZXhwb3J0IGNvbnN0IEVycm9yUGF5bG9hZFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY29kZTogRXJyb3JDb2RlU2NoZW1hLFxuICBtZXNzYWdlOiB6LnN0cmluZygpLFxuICBmYXRhbDogei5ib29sZWFuKCksXG59KTtcbmV4cG9ydCB0eXBlIEVycm9yUGF5bG9hZCA9IHouaW5mZXI8dHlwZW9mIEVycm9yUGF5bG9hZFNjaGVtYT47XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRGlzY3JpbWluYXRlZCB1bmlvbiBvZiBmdWxsIG1lc3NhZ2VzIChlbnZlbG9wZSArIHR5cGVkIHBheWxvYWQpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgbXNnID0gPFR5cGUgZXh0ZW5kcyBzdHJpbmcsIFAgZXh0ZW5kcyB6LlpvZFR5cGVBbnk+KFxuICB0eXBlOiBUeXBlLFxuICBwYXlsb2FkOiBQLFxuKSA9PlxuICB6Lm9iamVjdCh7XG4gICAgLi4uZW52ZWxvcGVTaGFwZSxcbiAgICB0eXBlOiB6LmxpdGVyYWwodHlwZSksXG4gICAgcGF5bG9hZCxcbiAgfSk7XG5cbmV4cG9ydCBjb25zdCBSb29tQ3JlYXRlTWVzc2FnZVNjaGVtYSA9IG1zZyhcbiAgXCJyb29tLmNyZWF0ZVwiLFxuICBSb29tQ3JlYXRlUGF5bG9hZFNjaGVtYSxcbik7XG5leHBvcnQgY29uc3QgUm9vbUpvaW5NZXNzYWdlU2NoZW1hID0gbXNnKFwicm9vbS5qb2luXCIsIFJvb21Kb2luUGF5bG9hZFNjaGVtYSk7XG5leHBvcnQgY29uc3QgUm9vbUxlYXZlTWVzc2FnZVNjaGVtYSA9IG1zZyhcInJvb20ubGVhdmVcIiwgUm9vbUxlYXZlUGF5bG9hZFNjaGVtYSk7XG5leHBvcnQgY29uc3QgR2FtZU1vdmVNZXNzYWdlU2NoZW1hID0gbXNnKFwiZ2FtZS5tb3ZlXCIsIEdhbWVNb3ZlUGF5bG9hZFNjaGVtYSk7XG5leHBvcnQgY29uc3QgUm9vbVNldFByZXNldHNNZXNzYWdlU2NoZW1hID0gbXNnKFxuICBcInJvb20uc2V0UHJlc2V0c1wiLFxuICBSb29tU2V0UHJlc2V0c1BheWxvYWRTY2hlbWEsXG4pO1xuXG5leHBvcnQgY29uc3QgQ2xpZW50TWVzc2FnZVNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIFJvb21DcmVhdGVNZXNzYWdlU2NoZW1hLFxuICBSb29tSm9pbk1lc3NhZ2VTY2hlbWEsXG4gIFJvb21MZWF2ZU1lc3NhZ2VTY2hlbWEsXG4gIEdhbWVNb3ZlTWVzc2FnZVNjaGVtYSxcbiAgUm9vbVNldFByZXNldHNNZXNzYWdlU2NoZW1hLFxuXSk7XG5leHBvcnQgdHlwZSBDbGllbnRNZXNzYWdlID0gei5pbmZlcjx0eXBlb2YgQ2xpZW50TWVzc2FnZVNjaGVtYT47XG5cbmV4cG9ydCBjb25zdCBSb29tQ3JlYXRlZE1lc3NhZ2VTY2hlbWEgPSBtc2coXG4gIFwicm9vbS5jcmVhdGVkXCIsXG4gIFJvb21DcmVhdGVkUGF5bG9hZFNjaGVtYSxcbik7XG5leHBvcnQgY29uc3QgUm9vbUpvaW5lZE1lc3NhZ2VTY2hlbWEgPSBtc2coXG4gIFwicm9vbS5qb2luZWRcIixcbiAgUm9vbUpvaW5lZFBheWxvYWRTY2hlbWEsXG4pO1xuZXhwb3J0IGNvbnN0IEdhbWVTdGF0ZU1lc3NhZ2VTY2hlbWEgPSBtc2coXCJnYW1lLnN0YXRlXCIsIEdhbWVTdGF0ZVBheWxvYWRTY2hlbWEpO1xuZXhwb3J0IGNvbnN0IEdhbWVEZWx0YU1lc3NhZ2VTY2hlbWEgPSBtc2coXCJnYW1lLmRlbHRhXCIsIEdhbWVEZWx0YVBheWxvYWRTY2hlbWEpO1xuZXhwb3J0IGNvbnN0IEdhbWVFbmRNZXNzYWdlU2NoZW1hID0gbXNnKFwiZ2FtZS5lbmRcIiwgR2FtZUVuZFBheWxvYWRTY2hlbWEpO1xuZXhwb3J0IGNvbnN0IEdhbWVQcmVzZXRzTWVzc2FnZVNjaGVtYSA9IG1zZyhcbiAgXCJnYW1lLnByZXNldHNcIixcbiAgR2FtZVByZXNldHNQYXlsb2FkU2NoZW1hLFxuKTtcbmV4cG9ydCBjb25zdCBFcnJvck1lc3NhZ2VTY2hlbWEgPSBtc2coXCJlcnJvclwiLCBFcnJvclBheWxvYWRTY2hlbWEpO1xuXG5leHBvcnQgY29uc3QgU2VydmVyTWVzc2FnZVNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIFJvb21DcmVhdGVkTWVzc2FnZVNjaGVtYSxcbiAgUm9vbUpvaW5lZE1lc3NhZ2VTY2hlbWEsXG4gIEdhbWVTdGF0ZU1lc3NhZ2VTY2hlbWEsXG4gIEdhbWVEZWx0YU1lc3NhZ2VTY2hlbWEsXG4gIEdhbWVFbmRNZXNzYWdlU2NoZW1hLFxuICBHYW1lUHJlc2V0c01lc3NhZ2VTY2hlbWEsXG4gIEVycm9yTWVzc2FnZVNjaGVtYSxcbl0pO1xuZXhwb3J0IHR5cGUgU2VydmVyTWVzc2FnZSA9IHouaW5mZXI8dHlwZW9mIFNlcnZlck1lc3NhZ2VTY2hlbWE+O1xuXG5leHBvcnQgY29uc3QgQW55TWVzc2FnZVNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIFJvb21DcmVhdGVNZXNzYWdlU2NoZW1hLFxuICBSb29tSm9pbk1lc3NhZ2VTY2hlbWEsXG4gIFJvb21MZWF2ZU1lc3NhZ2VTY2hlbWEsXG4gIEdhbWVNb3ZlTWVzc2FnZVNjaGVtYSxcbiAgUm9vbVNldFByZXNldHNNZXNzYWdlU2NoZW1hLFxuICBSb29tQ3JlYXRlZE1lc3NhZ2VTY2hlbWEsXG4gIFJvb21Kb2luZWRNZXNzYWdlU2NoZW1hLFxuICBHYW1lU3RhdGVNZXNzYWdlU2NoZW1hLFxuICBHYW1lRGVsdGFNZXNzYWdlU2NoZW1hLFxuICBHYW1lRW5kTWVzc2FnZVNjaGVtYSxcbiAgR2FtZVByZXNldHNNZXNzYWdlU2NoZW1hLFxuICBFcnJvck1lc3NhZ2VTY2hlbWEsXG5dKTtcbmV4cG9ydCB0eXBlIEFueU1lc3NhZ2UgPSB6LmluZmVyPHR5cGVvZiBBbnlNZXNzYWdlU2NoZW1hPjtcblxuZXhwb3J0IGNvbnN0IEtOT1dOX01FU1NBR0VfVFlQRVMgPSBbXG4gIFwicm9vbS5jcmVhdGVcIixcbiAgXCJyb29tLmpvaW5cIixcbiAgXCJyb29tLmxlYXZlXCIsXG4gIFwiZ2FtZS5tb3ZlXCIsXG4gIFwicm9vbS5zZXRQcmVzZXRzXCIsXG4gIFwicm9vbS5jcmVhdGVkXCIsXG4gIFwicm9vbS5qb2luZWRcIixcbiAgXCJnYW1lLnN0YXRlXCIsXG4gIFwiZ2FtZS5kZWx0YVwiLFxuICBcImdhbWUuZW5kXCIsXG4gIFwiZ2FtZS5wcmVzZXRzXCIsXG4gIFwiZXJyb3JcIixcbl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBNZXNzYWdlVHlwZSA9ICh0eXBlb2YgS05PV05fTUVTU0FHRV9UWVBFUylbbnVtYmVyXTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB2YWxpZGF0ZU1lc3NhZ2Ug4oCUIFJlc3VsdC1zdHlsZSBlbnRyeSBwb2ludFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB0eXBlIFJlc3VsdDxULCBFPiA9IHsgb2s6IHRydWU7IGRhdGE6IFQgfSB8IHsgb2s6IGZhbHNlOyBlcnJvcjogRSB9O1xuXG5jb25zdCBvayA9IDxUPihkYXRhOiBUKTogUmVzdWx0PFQsIG5ldmVyPiA9PiAoeyBvazogdHJ1ZSwgZGF0YSB9KTtcbmNvbnN0IGVyciA9IDxFPihlcnJvcjogRSk6IFJlc3VsdDxuZXZlciwgRT4gPT4gKHsgb2s6IGZhbHNlLCBlcnJvciB9KTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBhIGRlY29kZWQgSlNPTiB2YWx1ZSBhZ2FpbnN0IHRoZSBwcm90b2NvbC5cbiAqXG4gKiBUaGUgaW5wdXQgaXMgYHVua25vd25gIOKAlCBjYWxsZXJzIHRoYXQgc3RhcnQgZnJvbSBhIHJhdyBzdHJpbmcgTVVTVFxuICogYEpTT04ucGFyc2VgIGZpcnN0IChhbmQgY2F0Y2ggaXRzIHRocm93KSBiZWZvcmUgaGFuZGluZyBhIHZhbHVlIGhlcmUuXG4gKlxuICogT24gc3VjY2VzcyByZXR1cm5zIGB7IG9rOiB0cnVlLCBkYXRhIH1gIHdpdGggdGhlIGZ1bGx5LXR5cGVkLCBuYXJyb3dlZFxuICogbWVzc2FnZS4gT24gZmFpbHVyZSByZXR1cm5zIGB7IG9rOiBmYWxzZSwgZXJyb3IgfWAgd2l0aCBhIGRlc2NyaXB0aXZlXG4gKiBzdHJpbmcuIFZlcnNpb24gbWlzbWF0Y2hlcyBhcmUgc3VyZmFjZWQgd2l0aCBhIGBWRVJTSU9OX01JU01BVENIOmAgcHJlZml4XG4gKiBzbyBjYWxsZXJzIGNhbiBkaXNjb25uZWN0IGZhdGFsbHkgd2l0aG91dCByZS1wYXJzaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVNZXNzYWdlKHJhdzogdW5rbm93bik6IFJlc3VsdDxBbnlNZXNzYWdlLCBzdHJpbmc+IHtcbiAgLy8gMS4gU2hhcGUtY2hlY2sgdGhlIGVudmVsb3BlIGZpcnN0IHNvIHdlIGNhbiBnaXZlIHByZWNpc2UgZXJyb3JzIGFib3V0XG4gIC8vICAgIHByb3RvY29sLXZlcnNpb24gbWlzbWF0Y2ggdnMuIHN0cnVjdHVyYWwgcHJvYmxlbXMuXG4gIGlmICh0eXBlb2YgcmF3ICE9PSBcIm9iamVjdFwiIHx8IHJhdyA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHJhdykpIHtcbiAgICByZXR1cm4gZXJyKFwiSU5WQUxJRF9NRVNTQUdFOiBtZXNzYWdlIG11c3QgYmUgYSBKU09OIG9iamVjdFwiKTtcbiAgfVxuXG4gIGNvbnN0IGVudmVsb3BlID0gcmF3IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8vIDIuIFZlcnNpb24gZ2F0ZSDigJQgYW55dGhpbmcgb3RoZXIgdGhhbiB2PT09MSBpcyBWRVJTSU9OX01JU01BVENILCBldmVuXG4gIC8vICAgIGJlZm9yZSB3ZSBsb29rIGF0IGB0eXBlYC4gU3BlYzogdmVyc2lvbiBtaXNtYXRjaCA9IGZhdGFsIGRpc2Nvbm5lY3QuXG4gIGlmIChlbnZlbG9wZVtcInZcIl0gIT09IFBST1RPQ09MX1ZFUlNJT04pIHtcbiAgICByZXR1cm4gZXJyKFxuICAgICAgYFZFUlNJT05fTUlTTUFUQ0g6IGV4cGVjdGVkIHY9JHtTdHJpbmcoUFJPVE9DT0xfVkVSU0lPTil9LCBnb3Qgdj0ke1N0cmluZyhcbiAgICAgICAgZW52ZWxvcGVbXCJ2XCJdLFxuICAgICAgKX1gLFxuICAgICk7XG4gIH1cblxuICAvLyAzLiBUeXBlIGdhdGUg4oCUIG11c3QgYmUgYSBrbm93biBsaXRlcmFsIGJlZm9yZSB3ZSBkaXNwYXRjaCB0byB0aGUgdW5pb24uXG4gIGNvbnN0IHR5cGUgPSBlbnZlbG9wZVtcInR5cGVcIl07XG4gIGlmICh0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBlcnIoXCJJTlZBTElEX01FU1NBR0U6IG1pc3Npbmcgb3Igbm9uLXN0cmluZyBgdHlwZWAgZmllbGRcIik7XG4gIH1cbiAgaWYgKCEoS05PV05fTUVTU0FHRV9UWVBFUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModHlwZSkpIHtcbiAgICByZXR1cm4gZXJyKGBJTlZBTElEX01FU1NBR0U6IHVua25vd24gbWVzc2FnZSB0eXBlIFwiJHt0eXBlfVwiYCk7XG4gIH1cblxuICAvLyA0LiBEZWxlZ2F0ZSB0byB0aGUgZGlzY3JpbWluYXRlZCB1bmlvbiBmb3IgZnVsbCBzdHJ1Y3R1cmFsIHZhbGlkYXRpb24uXG4gIGNvbnN0IHBhcnNlZCA9IEFueU1lc3NhZ2VTY2hlbWEuc2FmZVBhcnNlKHJhdyk7XG4gIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICByZXR1cm4gZXJyKGBJTlZBTElEX01FU1NBR0U6ICR7Zm9ybWF0Wm9kRXJyb3IocGFyc2VkLmVycm9yKX1gKTtcbiAgfVxuICByZXR1cm4gb2socGFyc2VkLmRhdGEpO1xufVxuXG4vKipcbiAqIENvbnZlbmllbmNlOiBwYXJzZSBhIHJhdyBXZWJTb2NrZXQgc3RyaW5nIGZyYW1lLiBIYW5kbGVzIHRoZSBKU09OLnBhcnNlXG4gKiB0aHJvdyBhbmQgZnVubmVscyBpdCBpbnRvIHRoZSBzYW1lIFJlc3VsdCBzaGFwZSBhcyBgdmFsaWRhdGVNZXNzYWdlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTWVzc2FnZVN0cmluZyhcbiAgcmF3OiBzdHJpbmcsXG4pOiBSZXN1bHQ8QW55TWVzc2FnZSwgc3RyaW5nPiB7XG4gIGxldCBkZWNvZGVkOiB1bmtub3duO1xuICB0cnkge1xuICAgIGRlY29kZWQgPSBKU09OLnBhcnNlKHJhdyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCBtc2cgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgcmV0dXJuIGVycihgSU5WQUxJRF9NRVNTQUdFOiBtYWxmb3JtZWQgSlNPTiAoJHttc2d9KWApO1xuICB9XG4gIHJldHVybiB2YWxpZGF0ZU1lc3NhZ2UoZGVjb2RlZCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFpvZEVycm9yKGVycm9yOiB6LlpvZEVycm9yKTogc3RyaW5nIHtcbiAgLy8gQ29sbGFwc2UgaXNzdWVzIGludG8gYSBjb21wYWN0IHNpbmdsZS1saW5lIGRlc2NyaXB0aW9uLiBLZWVwaW5nIHRoaXNcbiAgLy8gZGV0ZXJtaW5pc3RpYyBpcyB1c2VmdWwgZm9yIHRlc3RzIGFuZCBsb2cgZ3JlcHBhYmlsaXR5LlxuICByZXR1cm4gZXJyb3IuaXNzdWVzXG4gICAgLm1hcCgoaXNzdWUpID0+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBpc3N1ZS5wYXRoLmxlbmd0aCA+IDAgPyBpc3N1ZS5wYXRoLmpvaW4oXCIuXCIpIDogXCI8cm9vdD5cIjtcbiAgICAgIHJldHVybiBgJHtwYXRofTogJHtpc3N1ZS5tZXNzYWdlfWA7XG4gICAgfSlcbiAgICAuam9pbihcIjsgXCIpO1xufVxuIl0sImZpbGUiOiIvc3JjL3Byb3RvY29sLnRzIn0= diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/cccca8a43a3acfc272e308d3ed9cc93a70295919 b/KMr2_dqTOvh2R-Vg1E6cO/ssr/cccca8a43a3acfc272e308d3ed9cc93a70295919 deleted file mode 100644 index e485750..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/cccca8a43a3acfc272e308d3ed9cc93a70295919 +++ /dev/null @@ -1,79 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "WorkingMemory", { enumerable: true, configurable: true, get(){ try { return WorkingMemory } catch {} }}); -class WorkingMemory { - // Map> - #store = new Map(); - #insertListeners = []; - #retractListeners = []; - /** Insert (or update) a fact. On update, fires retract listener for old value first. */ - insert(id, attr, value) { - let attrMap = this.#store.get(id); - if (!attrMap) { - attrMap = new Map(); - this.#store.set(id, attrMap); - }; - // If existing, fire retract for old value (update semantics) - if (attrMap.has(attr)) { - const oldValue = attrMap.get(attr); - for (const listener of this.#retractListeners) { - listener(id, attr, oldValue); - } - }; - attrMap.set(attr, value); - for (const listener of this.#insertListeners) { - listener(id, attr, value); - } - } - /** Retract a fact. Returns true if fact existed, false otherwise. */ - retract(id, attr) { - const attrMap = this.#store.get(id); - if (!attrMap?.has(attr)) - return false; - const oldValue = attrMap.get(attr); - attrMap.delete(attr); - if (attrMap.size === 0) - this.#store.delete(id); - for (const listener of this.#retractListeners) { - listener(id, attr, oldValue); - }; - return true; - } - /** Get the value of a fact, or undefined if not present. */ - get(id, attr) { - return this.#store.get(id)?.get(attr); - } - /** Check if a fact exists. */ - contains(id, attr) { - return this.#store.get(id)?.has(attr) ?? false; - } - /** - * Return all facts as a sorted array. - * Sort order: id asc (numeric), then attr asc (lexicographic). - * Per SPEC.md §Iteration Order — deterministic, never raw Map iteration in hot paths. - */ - allFacts() { - const result = []; - for (const [id, attrMap] of this.#store) { - for (const [attr, value] of attrMap) { - result.push({ id, attr, value }); - } - }; - // Sort: id asc (numeric), then attr asc (lexicographic). - result.sort((a, b) => { - if (a.id !== b.id) - return a.id - b.id; - return a.attr < b.attr ? -1 : a.attr > b.attr ? 1 : 0; - }); - return result; - } - /** Register a listener called after each insert (including update inserts). */ - onInsert(listener) { - this.#insertListeners.push(listener); - } - /** Register a listener called before each retract (including update retracts). */ - onRetract(listener) { - this.#retractListeners.push(listener); - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDO1FBQ0YsT0FBTyxNQUFNO0lBQ2Y7SUFFQTtJQUNBLFFBQVEsQ0FBQyxRQUF3QjtRQUMvQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN0QztJQUVBO0lBQ0EsU0FBUyxDQUFDLFFBQXlCO1FBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyIuLi9zcmMvd20udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXb3JraW5nTWVtb3J5IOKAlCBzdG9yZXMgRUFWIGZhY3RzLlxuICogUGVyIFNQRUMubWQgwqdGYWN0IE1vZGVsIGFuZCDCp0l0ZXJhdGlvbiBPcmRlci5cbiAqL1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuXG5leHBvcnQgdHlwZSBBdHRyS2V5ID0gc3RyaW5nO1xuZXhwb3J0IHR5cGUgRmFjdFZhbHVlID0gdW5rbm93bjtcblxudHlwZSBJbnNlcnRMaXN0ZW5lciA9IChpZDogRW50aXR5SWQsIGF0dHI6IEF0dHJLZXksIHZhbHVlOiBGYWN0VmFsdWUpID0+IHZvaWQ7XG50eXBlIFJldHJhY3RMaXN0ZW5lciA9IChpZDogRW50aXR5SWQsIGF0dHI6IEF0dHJLZXksIG9sZFZhbHVlOiBGYWN0VmFsdWUpID0+IHZvaWQ7XG5cbmV4cG9ydCBjbGFzcyBXb3JraW5nTWVtb3J5IHtcbiAgLy8gTWFwPGVudGl0eUlkLCBNYXA8YXR0cktleSwgdmFsdWU+PlxuICByZWFkb25seSAjc3RvcmUgPSBuZXcgTWFwPEVudGl0eUlkLCBNYXA8QXR0cktleSwgRmFjdFZhbHVlPj4oKTtcbiAgcmVhZG9ubHkgI2luc2VydExpc3RlbmVyczogSW5zZXJ0TGlzdGVuZXJbXSA9IFtdO1xuICByZWFkb25seSAjcmV0cmFjdExpc3RlbmVyczogUmV0cmFjdExpc3RlbmVyW10gPSBbXTtcblxuICAvKiogSW5zZXJ0IChvciB1cGRhdGUpIGEgZmFjdC4gT24gdXBkYXRlLCBmaXJlcyByZXRyYWN0IGxpc3RlbmVyIGZvciBvbGQgdmFsdWUgZmlyc3QuICovXG4gIGluc2VydChpZDogRW50aXR5SWQsIGF0dHI6IEF0dHJLZXksIHZhbHVlOiBGYWN0VmFsdWUpOiB2b2lkIHtcbiAgICBsZXQgYXR0ck1hcCA9IHRoaXMuI3N0b3JlLmdldChpZCk7XG4gICAgaWYgKCFhdHRyTWFwKSB7XG4gICAgICBhdHRyTWFwID0gbmV3IE1hcCgpO1xuICAgICAgdGhpcy4jc3RvcmUuc2V0KGlkLCBhdHRyTWFwKTtcbiAgICB9XG4gICAgLy8gSWYgZXhpc3RpbmcsIGZpcmUgcmV0cmFjdCBmb3Igb2xkIHZhbHVlICh1cGRhdGUgc2VtYW50aWNzKVxuICAgIGlmIChhdHRyTWFwLmhhcyhhdHRyKSkge1xuICAgICAgY29uc3Qgb2xkVmFsdWUgPSBhdHRyTWFwLmdldChhdHRyKTtcbiAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy4jcmV0cmFjdExpc3RlbmVycykge1xuICAgICAgICBsaXN0ZW5lcihpZCwgYXR0ciwgb2xkVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBhdHRyTWFwLnNldChhdHRyLCB2YWx1ZSk7XG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNpbnNlcnRMaXN0ZW5lcnMpIHtcbiAgICAgIGxpc3RlbmVyKGlkLCBhdHRyLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJldHJhY3QgYSBmYWN0LiBSZXR1cm5zIHRydWUgaWYgZmFjdCBleGlzdGVkLCBmYWxzZSBvdGhlcndpc2UuICovXG4gIHJldHJhY3QoaWQ6IEVudGl0eUlkLCBhdHRyOiBBdHRyS2V5KTogYm9vbGVhbiB7XG4gICAgY29uc3QgYXR0ck1hcCA9IHRoaXMuI3N0b3JlLmdldChpZCk7XG4gICAgaWYgKCFhdHRyTWFwPy5oYXMoYXR0cikpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBvbGRWYWx1ZSA9IGF0dHJNYXAuZ2V0KGF0dHIpO1xuICAgIGF0dHJNYXAuZGVsZXRlKGF0dHIpO1xuICAgIGlmIChhdHRyTWFwLnNpemUgPT09IDApIHRoaXMuI3N0b3JlLmRlbGV0ZShpZCk7XG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNyZXRyYWN0TGlzdGVuZXJzKSB7XG4gICAgICBsaXN0ZW5lcihpZCwgYXR0ciwgb2xkVmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIHZhbHVlIG9mIGEgZmFjdCwgb3IgdW5kZWZpbmVkIGlmIG5vdCBwcmVzZW50LiAqL1xuICBnZXQoaWQ6IEVudGl0eUlkLCBhdHRyOiBBdHRyS2V5KTogRmFjdFZhbHVlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jc3RvcmUuZ2V0KGlkKT8uZ2V0KGF0dHIpO1xuICB9XG5cbiAgLyoqIENoZWNrIGlmIGEgZmFjdCBleGlzdHMuICovXG4gIGNvbnRhaW5zKGlkOiBFbnRpdHlJZCwgYXR0cjogQXR0cktleSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNzdG9yZS5nZXQoaWQpPy5oYXMoYXR0cikgPz8gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCBmYWN0cyBhcyBhIHNvcnRlZCBhcnJheS5cbiAgICogU29ydCBvcmRlcjogaWQgYXNjIChudW1lcmljKSwgdGhlbiBhdHRyIGFzYyAobGV4aWNvZ3JhcGhpYykuXG4gICAqIFBlciBTUEVDLm1kIMKnSXRlcmF0aW9uIE9yZGVyIOKAlCBkZXRlcm1pbmlzdGljLCBuZXZlciByYXcgTWFwIGl0ZXJhdGlvbiBpbiBob3QgcGF0aHMuXG4gICAqL1xuICBhbGxGYWN0cygpOiBBcnJheTx7IGlkOiBFbnRpdHlJZDsgYXR0cjogQXR0cktleTsgdmFsdWU6IEZhY3RWYWx1ZSB9PiB7XG4gICAgY29uc3QgcmVzdWx0OiBBcnJheTx7IGlkOiBFbnRpdHlJZDsgYXR0cjogQXR0cktleTsgdmFsdWU6IEZhY3RWYWx1ZSB9PiA9IFtdO1xuICAgIGZvciAoY29uc3QgW2lkLCBhdHRyTWFwXSBvZiB0aGlzLiNzdG9yZSkge1xuICAgICAgZm9yIChjb25zdCBbYXR0ciwgdmFsdWVdIG9mIGF0dHJNYXApIHtcbiAgICAgICAgcmVzdWx0LnB1c2goeyBpZCwgYXR0ciwgdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFNvcnQ6IGlkIGFzYyAobnVtZXJpYyksIHRoZW4gYXR0ciBhc2MgKGxleGljb2dyYXBoaWMpLlxuICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBpZiAoYS5pZCAhPT0gYi5pZCkgcmV0dXJuIChhLmlkIGFzIG51bWJlcikgLSAoYi5pZCBhcyBudW1iZXIpO1xuICAgICAgcmV0dXJuIGEuYXR0ciA8IGIuYXR0ciA/IC0xIDogYS5hdHRyID4gYi5hdHRyID8gMSA6IDA7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKiBSZWdpc3RlciBhIGxpc3RlbmVyIGNhbGxlZCBhZnRlciBlYWNoIGluc2VydCAoaW5jbHVkaW5nIHVwZGF0ZSBpbnNlcnRzKS4gKi9cbiAgb25JbnNlcnQobGlzdGVuZXI6IEluc2VydExpc3RlbmVyKTogdm9pZCB7XG4gICAgdGhpcy4jaW5zZXJ0TGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqIFJlZ2lzdGVyIGEgbGlzdGVuZXIgY2FsbGVkIGJlZm9yZSBlYWNoIHJldHJhY3QgKGluY2x1ZGluZyB1cGRhdGUgcmV0cmFjdHMpLiAqL1xuICBvblJldHJhY3QobGlzdGVuZXI6IFJldHJhY3RMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuI3JldHJhY3RMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cbn1cbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9yZXRlL2Rpc3Qvd20uanMifQ== diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/d1f50050ce9a51cb0317dd794cca990f7d93c1d1 b/KMr2_dqTOvh2R-Vg1E6cO/ssr/d1f50050ce9a51cb0317dd794cca990f7d93c1d1 deleted file mode 100644 index 9db8228..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/d1f50050ce9a51cb0317dd794cca990f7d93c1d1 +++ /dev/null @@ -1,107 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "SnapshotManager", { enumerable: true, configurable: true, get(){ try { return SnapshotManager } catch {} }}); -const __vite_ssr_import_0__ = await __vite_ssr_import__("immer", {"importedNames":["produce","enableMapSet"]});/** - * SnapshotManager — Immer-backed working-memory snapshots at tick boundaries. - * - * A "tick" is one call to fireRules(). Every N ticks, a structurally-shared - * Immer snapshot of the current fact state is captured for use by time-travel - * / replay / rollback subsystems. - * - * Snapshots are taken only at tick boundaries (after fireRules() resolves), - * never mid-tick. - * - * Per P3.2 — uses Immer's produce() + enableMapSet() for structural sharing - * on Map>. - */ - -// Enable Map/Set support in Immer — must run before any produce() on Maps. -(0,__vite_ssr_import_0__.enableMapSet)(); -class SnapshotManager { - #snapshots = []; - #tickCount = 0; - #interval; - constructor(interval = 30) { - if (interval <= 0 || !Number.isInteger(interval)) { - throw new Error(`SnapshotManager interval must be positive integer, got ${interval}`); - }; - this.#interval = interval; - } - get snapshotCount() { - return this.#snapshots.length; - } - get tickCount() { - return this.#tickCount; - } - get interval() { - return this.#interval; - } - /** - * Call after each fireRules() completes (tick boundary). - * Takes a snapshot when the tick counter hits an interval multiple. - */ - onTick(facts, currentSeq) { - this.#tickCount++; - if (this.#tickCount % this.#interval === 0) { - this.#captureSnapshot(facts, currentSeq); - } - } - /** - * Manually take a snapshot without incrementing the tick counter. - * Useful for session-start baselines or explicit save points. - */ - takeSnapshot(facts, currentSeq) { - this.#captureSnapshot(facts, currentSeq); - } - #captureSnapshot(facts, currentSeq) { - // Build the fact map INSIDE produce() so Immer tracks every nested Map - // and deep-freezes the entire structure. allFacts() input is deterministic - // per SPEC §Iteration Order. Structural sharing across successive snapshots - // still applies for unchanged branches when the same base draft is evolved; - // here we rebuild each time but pay only for the Map allocation, not for - // copying each fact value (values are stored by reference). - const frozen = (0,__vite_ssr_import_0__.produce)(new Map(), (draft) => { - for (const f of facts) { - let attrMap = draft.get(f.id); - if (!attrMap) { - attrMap = new Map(); - draft.set(f.id, attrMap); - }; - attrMap.set(f.attr, f.value); - } - }); - this.#snapshots.push({ - seq: currentSeq, - tick: this.#tickCount, - facts: frozen, - }); - } - /** - * Return the most recent snapshot with seq <= atOrBeforeSeq, or null - * if none exists. Snapshots are appended in seq order, so we scan forward - * and track the last qualifying entry. - */ - getNearestSnapshot(atOrBeforeSeq) { - let best = null; - for (const snap of this.#snapshots) { - if (snap.seq <= atOrBeforeSeq) { - best = snap; - } - else { - // Snapshots are monotonically ordered by seq — stop scanning. - break; - } - }; - return best; - } - /** Return all snapshots in order. Primarily for tests / diagnostics. */ - getAllSnapshots() { - return this.#snapshots; - } - /** Discard all snapshots and reset the tick counter. */ - clear() { - this.#snapshots.length = 0; - this.#tickCount = 0; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQWFBLCtHQWJBOzs7Ozs7Ozs7Ozs7OztBQWlCQTtHQUNBLG1DQUFZLEVBQUU7QUFxQlIsTUFBTyxlQUFlO0lBQ2pCLFVBQVUsR0FBZSxFQUFFO0lBQ3BDLFVBQVUsR0FBRyxDQUFDO0lBQ0wsU0FBUztJQUVsQixZQUFZLFFBQVEsR0FBRyxFQUFFO1FBQ3ZCLElBQUksUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQywwREFBMEQsUUFBUSxFQUFFLENBQUM7UUFDdkY7UUFDQSxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVE7SUFDM0I7SUFFQSxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTtJQUMvQjtJQUVBLElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVU7SUFDeEI7SUFFQSxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTO0lBQ3ZCO0lBRUE7Ozs7SUFJQSxNQUFNLENBQUMsS0FBNEIsRUFBRSxVQUFrQjtRQUNyRCxJQUFJLENBQUMsVUFBVSxFQUFFO1FBQ2pCLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxLQUFLLENBQUMsRUFBRTtZQUMxQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQztRQUMxQztJQUNGO0lBRUE7Ozs7SUFJQSxZQUFZLENBQUMsS0FBNEIsRUFBRSxVQUFrQjtRQUMzRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQztJQUMxQztJQUVBLGdCQUFnQixDQUFDLEtBQTRCLEVBQUUsVUFBa0I7UUFDL0Q7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsTUFBTSxNQUFNLE1BQUcsOEJBQU8sQ0FBQyxJQUFJLEdBQUcsRUFBa0IsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzFELEtBQUssTUFBTSxDQUFDLElBQUksS0FBSyxFQUFFO2dCQUNyQixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQ1osT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFO29CQUNuQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDO2dCQUMxQjtnQkFDQSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUM5QjtRQUNGLENBQUMsQ0FBbUI7UUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDbkIsR0FBRyxFQUFFLFVBQVU7WUFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDckIsS0FBSyxFQUFFLE1BQU07U0FDZCxDQUFDO0lBQ0o7SUFFQTs7Ozs7SUFLQSxrQkFBa0IsQ0FBQyxhQUFxQjtRQUN0QyxJQUFJLElBQUksR0FBb0IsSUFBSTtRQUNoQyxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbEMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLGFBQWEsRUFBRTtnQkFDN0IsSUFBSSxHQUFHLElBQUk7WUFDYjtpQkFBTztnQkFDTDtnQkFDQTtZQUNGO1FBQ0Y7UUFDQSxPQUFPLElBQUk7SUFDYjtJQUVBO0lBQ0EsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLFVBQVU7SUFDeEI7SUFFQTtJQUNBLEtBQUs7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQztJQUNyQiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3NuYXBzaG90LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU25hcHNob3RNYW5hZ2VyIOKAlCBJbW1lci1iYWNrZWQgd29ya2luZy1tZW1vcnkgc25hcHNob3RzIGF0IHRpY2sgYm91bmRhcmllcy5cbiAqXG4gKiBBIFwidGlja1wiIGlzIG9uZSBjYWxsIHRvIGZpcmVSdWxlcygpLiBFdmVyeSBOIHRpY2tzLCBhIHN0cnVjdHVyYWxseS1zaGFyZWRcbiAqIEltbWVyIHNuYXBzaG90IG9mIHRoZSBjdXJyZW50IGZhY3Qgc3RhdGUgaXMgY2FwdHVyZWQgZm9yIHVzZSBieSB0aW1lLXRyYXZlbFxuICogLyByZXBsYXkgLyByb2xsYmFjayBzdWJzeXN0ZW1zLlxuICpcbiAqIFNuYXBzaG90cyBhcmUgdGFrZW4gb25seSBhdCB0aWNrIGJvdW5kYXJpZXMgKGFmdGVyIGZpcmVSdWxlcygpIHJlc29sdmVzKSxcbiAqIG5ldmVyIG1pZC10aWNrLlxuICpcbiAqIFBlciBQMy4yIOKAlCB1c2VzIEltbWVyJ3MgcHJvZHVjZSgpICsgZW5hYmxlTWFwU2V0KCkgZm9yIHN0cnVjdHVyYWwgc2hhcmluZ1xuICogb24gTWFwPEVudGl0eUlkLCBNYXA8QXR0cktleSwgRmFjdFZhbHVlPj4uXG4gKi9cbmltcG9ydCB7IHByb2R1Y2UsIGVuYWJsZU1hcFNldCB9IGZyb20gXCJpbW1lclwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlJZCB9IGZyb20gXCIuL3NjaGVtYS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBdHRyS2V5LCBGYWN0VmFsdWUgfSBmcm9tIFwiLi93bS5qc1wiO1xuXG4vLyBFbmFibGUgTWFwL1NldCBzdXBwb3J0IGluIEltbWVyIOKAlCBtdXN0IHJ1biBiZWZvcmUgYW55IHByb2R1Y2UoKSBvbiBNYXBzLlxuZW5hYmxlTWFwU2V0KCk7XG5cbmV4cG9ydCB0eXBlIEltbXV0YWJsZUZhY3RzID0gUmVhZG9ubHlNYXA8RW50aXR5SWQsIFJlYWRvbmx5TWFwPEF0dHJLZXksIEZhY3RWYWx1ZT4+O1xuZXhwb3J0IHR5cGUgTXV0YWJsZUZhY3RzID0gTWFwPEVudGl0eUlkLCBNYXA8QXR0cktleSwgRmFjdFZhbHVlPj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgU25hcHNob3Qge1xuICByZWFkb25seSBzZXE6IG51bWJlcjtcbiAgcmVhZG9ubHkgdGljazogbnVtYmVyO1xuICByZWFkb25seSBmYWN0czogSW1tdXRhYmxlRmFjdHM7XG59XG5cbi8qKlxuICogSW5wdXQgZmFjdCByZWNvcmQg4oCUIG1pcnJvcnMgV29ya2luZ01lbW9yeS5hbGxGYWN0cygpIG91dHB1dCBzbyBjYWxsZXJzXG4gKiBuZXZlciBuZWVkIHRvIGV4cG9zZSBpbnRlcm5hbCBNYXAgc3RhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFjdFJlY29yZCB7XG4gIHJlYWRvbmx5IGlkOiBFbnRpdHlJZDtcbiAgcmVhZG9ubHkgYXR0cjogQXR0cktleTtcbiAgcmVhZG9ubHkgdmFsdWU6IEZhY3RWYWx1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIFNuYXBzaG90TWFuYWdlciB7XG4gIHJlYWRvbmx5ICNzbmFwc2hvdHM6IFNuYXBzaG90W10gPSBbXTtcbiAgI3RpY2tDb3VudCA9IDA7XG4gIHJlYWRvbmx5ICNpbnRlcnZhbDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGludGVydmFsID0gMzApIHtcbiAgICBpZiAoaW50ZXJ2YWwgPD0gMCB8fCAhTnVtYmVyLmlzSW50ZWdlcihpbnRlcnZhbCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU25hcHNob3RNYW5hZ2VyIGludGVydmFsIG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlciwgZ290ICR7aW50ZXJ2YWx9YCk7XG4gICAgfVxuICAgIHRoaXMuI2ludGVydmFsID0gaW50ZXJ2YWw7XG4gIH1cblxuICBnZXQgc25hcHNob3RDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNzbmFwc2hvdHMubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHRpY2tDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiN0aWNrQ291bnQ7XG4gIH1cblxuICBnZXQgaW50ZXJ2YWwoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jaW50ZXJ2YWw7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCBhZnRlciBlYWNoIGZpcmVSdWxlcygpIGNvbXBsZXRlcyAodGljayBib3VuZGFyeSkuXG4gICAqIFRha2VzIGEgc25hcHNob3Qgd2hlbiB0aGUgdGljayBjb3VudGVyIGhpdHMgYW4gaW50ZXJ2YWwgbXVsdGlwbGUuXG4gICAqL1xuICBvblRpY2soZmFjdHM6IHJlYWRvbmx5IEZhY3RSZWNvcmRbXSwgY3VycmVudFNlcTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy4jdGlja0NvdW50Kys7XG4gICAgaWYgKHRoaXMuI3RpY2tDb3VudCAlIHRoaXMuI2ludGVydmFsID09PSAwKSB7XG4gICAgICB0aGlzLiNjYXB0dXJlU25hcHNob3QoZmFjdHMsIGN1cnJlbnRTZXEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYW51YWxseSB0YWtlIGEgc25hcHNob3Qgd2l0aG91dCBpbmNyZW1lbnRpbmcgdGhlIHRpY2sgY291bnRlci5cbiAgICogVXNlZnVsIGZvciBzZXNzaW9uLXN0YXJ0IGJhc2VsaW5lcyBvciBleHBsaWNpdCBzYXZlIHBvaW50cy5cbiAgICovXG4gIHRha2VTbmFwc2hvdChmYWN0czogcmVhZG9ubHkgRmFjdFJlY29yZFtdLCBjdXJyZW50U2VxOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLiNjYXB0dXJlU25hcHNob3QoZmFjdHMsIGN1cnJlbnRTZXEpO1xuICB9XG5cbiAgI2NhcHR1cmVTbmFwc2hvdChmYWN0czogcmVhZG9ubHkgRmFjdFJlY29yZFtdLCBjdXJyZW50U2VxOiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBCdWlsZCB0aGUgZmFjdCBtYXAgSU5TSURFIHByb2R1Y2UoKSBzbyBJbW1lciB0cmFja3MgZXZlcnkgbmVzdGVkIE1hcFxuICAgIC8vIGFuZCBkZWVwLWZyZWV6ZXMgdGhlIGVudGlyZSBzdHJ1Y3R1cmUuIGFsbEZhY3RzKCkgaW5wdXQgaXMgZGV0ZXJtaW5pc3RpY1xuICAgIC8vIHBlciBTUEVDIMKnSXRlcmF0aW9uIE9yZGVyLiBTdHJ1Y3R1cmFsIHNoYXJpbmcgYWNyb3NzIHN1Y2Nlc3NpdmUgc25hcHNob3RzXG4gICAgLy8gc3RpbGwgYXBwbGllcyBmb3IgdW5jaGFuZ2VkIGJyYW5jaGVzIHdoZW4gdGhlIHNhbWUgYmFzZSBkcmFmdCBpcyBldm9sdmVkO1xuICAgIC8vIGhlcmUgd2UgcmVidWlsZCBlYWNoIHRpbWUgYnV0IHBheSBvbmx5IGZvciB0aGUgTWFwIGFsbG9jYXRpb24sIG5vdCBmb3JcbiAgICAvLyBjb3B5aW5nIGVhY2ggZmFjdCB2YWx1ZSAodmFsdWVzIGFyZSBzdG9yZWQgYnkgcmVmZXJlbmNlKS5cbiAgICBjb25zdCBmcm96ZW4gPSBwcm9kdWNlKG5ldyBNYXAoKSBhcyBNdXRhYmxlRmFjdHMsIChkcmFmdCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBmIG9mIGZhY3RzKSB7XG4gICAgICAgIGxldCBhdHRyTWFwID0gZHJhZnQuZ2V0KGYuaWQpO1xuICAgICAgICBpZiAoIWF0dHJNYXApIHtcbiAgICAgICAgICBhdHRyTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICAgIGRyYWZ0LnNldChmLmlkLCBhdHRyTWFwKTtcbiAgICAgICAgfVxuICAgICAgICBhdHRyTWFwLnNldChmLmF0dHIsIGYudmFsdWUpO1xuICAgICAgfVxuICAgIH0pIGFzIEltbXV0YWJsZUZhY3RzO1xuICAgIHRoaXMuI3NuYXBzaG90cy5wdXNoKHtcbiAgICAgIHNlcTogY3VycmVudFNlcSxcbiAgICAgIHRpY2s6IHRoaXMuI3RpY2tDb3VudCxcbiAgICAgIGZhY3RzOiBmcm96ZW4sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBtb3N0IHJlY2VudCBzbmFwc2hvdCB3aXRoIHNlcSA8PSBhdE9yQmVmb3JlU2VxLCBvciBudWxsXG4gICAqIGlmIG5vbmUgZXhpc3RzLiBTbmFwc2hvdHMgYXJlIGFwcGVuZGVkIGluIHNlcSBvcmRlciwgc28gd2Ugc2NhbiBmb3J3YXJkXG4gICAqIGFuZCB0cmFjayB0aGUgbGFzdCBxdWFsaWZ5aW5nIGVudHJ5LlxuICAgKi9cbiAgZ2V0TmVhcmVzdFNuYXBzaG90KGF0T3JCZWZvcmVTZXE6IG51bWJlcik6IFNuYXBzaG90IHwgbnVsbCB7XG4gICAgbGV0IGJlc3Q6IFNuYXBzaG90IHwgbnVsbCA9IG51bGw7XG4gICAgZm9yIChjb25zdCBzbmFwIG9mIHRoaXMuI3NuYXBzaG90cykge1xuICAgICAgaWYgKHNuYXAuc2VxIDw9IGF0T3JCZWZvcmVTZXEpIHtcbiAgICAgICAgYmVzdCA9IHNuYXA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTbmFwc2hvdHMgYXJlIG1vbm90b25pY2FsbHkgb3JkZXJlZCBieSBzZXEg4oCUIHN0b3Agc2Nhbm5pbmcuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmVzdDtcbiAgfVxuXG4gIC8qKiBSZXR1cm4gYWxsIHNuYXBzaG90cyBpbiBvcmRlci4gUHJpbWFyaWx5IGZvciB0ZXN0cyAvIGRpYWdub3N0aWNzLiAqL1xuICBnZXRBbGxTbmFwc2hvdHMoKTogcmVhZG9ubHkgU25hcHNob3RbXSB7XG4gICAgcmV0dXJuIHRoaXMuI3NuYXBzaG90cztcbiAgfVxuXG4gIC8qKiBEaXNjYXJkIGFsbCBzbmFwc2hvdHMgYW5kIHJlc2V0IHRoZSB0aWNrIGNvdW50ZXIuICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuI3NuYXBzaG90cy5sZW5ndGggPSAwO1xuICAgIHRoaXMuI3RpY2tDb3VudCA9IDA7XG4gIH1cbn1cbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9yZXRlL2Rpc3Qvc25hcHNob3QuanMifQ== diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/ded30c1d23a82bf6914fff3eb54c5549384c50d1 b/KMr2_dqTOvh2R-Vg1E6cO/ssr/ded30c1d23a82bf6914fff3eb54c5549384c50d1 deleted file mode 100644 index 1420e93..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/ded30c1d23a82bf6914fff3eb54c5549384c50d1 +++ /dev/null @@ -1,192 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "UnsafeNegationError", { enumerable: true, configurable: true, get(){ try { return UnsafeNegationError } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "NegationNode", { enumerable: true, configurable: true, get(){ try { return NegationNode } catch {} }}); -/** - * Thrown by the rule builder when a negated condition references a variable - * that is not bound by any earlier (positive) condition in the rule. - * - * The node itself does not throw this — it has no visibility into the full - * rule's binding set. The error type lives here so the builder can report - * it with a consistent name and callers can catch it specifically. - */ -class UnsafeNegationError extends Error { - constructor(unboundVar) { - super(`UnsafeNegationError: variable "${unboundVar}" in NOT pattern is not bound by any preceding condition`); - this.name = "UnsafeNegationError"; - } -}; -/** - * Beta-network NOT node. - * - * Left input: tokens from an upstream {@link BetaMemory} / {@link JoinNode}. - * Right input: an {@link AlphaMemory} of facts that match the negated pattern's - * constant tests. The node does not subscribe to the alpha memory itself — - * the network wiring (typically the builder) calls {@link rightActivate} and - * {@link rightDeactivate} when alpha-memory membership changes. - * - * Output: a subset of left tokens (never extended — negation contributes no - * new bindings), emitted to registered downstream activate/deactivate - * listeners in registration order. - */ -class NegationNode { - #activateListeners = []; - #deactivateListeners = []; - /** - * Per-token block count: number of right facts currently satisfying the - * join tests for that token. A token passes downstream iff its count is - * zero. Absent = token unknown (never left-activated or already - * left-deactivated). - */ - #blockCount = new Map(); - /** - * Tokens that are currently emitted downstream (count === 0 and not yet - * left-deactivated). Maintained in lock-step with {@link #blockCount} so - * that we know whether a deactivate transition actually needs to fire. - */ - #passingTokens = new Set(); - /** - * Every left token we've seen and not yet deactivated, in insertion order. - * Right-side events iterate this to determine which counts to adjust. - * Kept as an array (not a Set) so iteration order is deterministic per - * SPEC.md §Iteration Order. - */ - #leftTokens = []; - #rightMemory; - #tests; - /** - * @param rightMemory Alpha memory supplying candidate blocking facts. - * @param tests Equality tests that a fact must satisfy (against the - * left token's bindings) to count as a blocker. An empty - * list means any fact in `rightMemory` blocks. - */ - constructor(rightMemory, tests) { - this.#rightMemory = rightMemory; - this.#tests = tests; - } - /** Subscribe to downstream activations. Listeners fire in registration order. */ - addDownstreamActivate(listener) { - this.#activateListeners.push(listener); - } - /** Subscribe to downstream deactivations. Listeners fire in registration order. */ - addDownstreamDeactivate(listener) { - this.#deactivateListeners.push(listener); - } - /** - * Accept a new left token. - * - * Computes the initial block count against the current right memory. If - * zero, the token is emitted downstream immediately; otherwise it is held - * in internal state until enough blockers are retracted to drop the count - * back to zero. - */ - leftActivate(token) { - this.#leftTokens.push(token); - const count = this.#countMatchingFacts(token); - this.#blockCount.set(token, count); - if (count === 0) { - this.#passingTokens.add(token); - for (const l of this.#activateListeners) - l(token); - } - } - /** - * Withdraw a left token. - * - * Only fires downstream deactivate listeners if the token was currently - * passing — downstream never saw a blocked token, so retracting it would - * be a spurious event. - */ - leftDeactivate(token) { - const idx = this.#leftTokens.indexOf(token); - if (idx !== -1) - this.#leftTokens.splice(idx, 1); - const wasPassing = this.#passingTokens.delete(token); - this.#blockCount.delete(token); - if (wasPassing) { - for (const l of this.#deactivateListeners) - l(token); - } - } - /** - * Process a new right-side fact. - * - * For each known left token whose join tests pass with this fact, increment - * the block count. A 0→1 transition means the token just became blocked — - * fire downstream deactivate. - */ - rightActivate(id, _attr, value) { - for (const token of this.#leftTokens) { - if (!this.#factMatchesToken(token, id, value)) - continue; - const prev = this.#blockCount.get(token) ?? 0; - this.#blockCount.set(token, prev + 1); - if (prev === 0 && this.#passingTokens.has(token)) { - this.#passingTokens.delete(token); - for (const l of this.#deactivateListeners) - l(token); - } - } - } - /** - * Process a retracted right-side fact. - * - * For each known left token whose join tests pass with this fact, decrement - * the block count (clamped at zero against spurious retracts). A 1→0 - * transition means the token is newly unblocked — fire downstream activate. - */ - rightDeactivate(id, _attr, value) { - for (const token of this.#leftTokens) { - if (!this.#factMatchesToken(token, id, value)) - continue; - const prev = this.#blockCount.get(token) ?? 0; - const next = prev > 0 ? prev - 1 : 0; - this.#blockCount.set(token, next); - if (prev === 1 && next === 0 && !this.#passingTokens.has(token)) { - this.#passingTokens.add(token); - for (const l of this.#activateListeners) - l(token); - } - } - } - /** - * Count right facts that currently satisfy the join tests for `token`. - * - * Called only on {@link leftActivate} — incremental right-side events - * maintain the count thereafter. O(|rightMemory| · |tests|) per token. - */ - #countMatchingFacts(token) { - let count = 0; - for (const fact of this.#rightMemory.facts) { - if (this.#factMatchesToken(token, fact.id, fact.value)) - count++; - }; - return count; - } - /** - * Test whether a right fact `(rightId, rightValue)` satisfies every join - * test against `token`. - * - * A missing `leftVar` binding fails the test — this mirrors {@link JoinNode} - * and protects against builder bugs that reference an unbound variable - * despite the {@link UnsafeNegationError} guard. - */ - #factMatchesToken(token, rightId, rightValue) { - for (const test of this.#tests) { - const leftVal = token.bindings[test.leftVar]; - if (leftVal === undefined) - return false; - if (test.type === "idEquality") { - if (leftVal !== rightId) - return false; - } - else { - // valueEquality - if (leftVal !== rightValue) - return false; - } - }; - return true; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SyxDQUFDO2dCQUFFLEtBQUssRUFBRTtRQUNqRTtRQUNBLE9BQU8sS0FBSztJQUNkO0lBRUE7Ozs7Ozs7O0lBUUEsaUJBQWlCLENBQ2YsS0FBWSxFQUNaLE9BQWlCLEVBQ2pCLFVBQXFCO1FBRXJCLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUM5QixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDNUMsSUFBSSxPQUFPLEtBQUssU0FBUztnQkFBRSxPQUFPLEtBQUs7WUFDdkMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRTtnQkFDOUIsSUFBSSxPQUFPLEtBQUssT0FBTztvQkFBRSxPQUFPLEtBQUs7WUFDdkM7aUJBQU87Z0JBQ0w7Z0JBQ0EsSUFBSSxPQUFPLEtBQUssVUFBVTtvQkFBRSxPQUFPLEtBQUs7WUFDMUM7UUFDRjtRQUNBLE9BQU8sSUFBSTtJQUNiIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyIuLi9zcmMvbmVnYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBOZWdhdGlvbk5vZGUg4oCUIE5PVCBwYXR0ZXJuLCBwZXIgRG9vcmVuYm9zIDE5OTUgwqcyLjYuMS5cbiAqXG4gKiBBIG5lZ2F0aW9uIG5vZGUgcGFzc2VzIGEgbGVmdCB0b2tlbiBkb3duc3RyZWFtIG9ubHkgd2hlbiAqKnplcm8qKiBmYWN0cyBpblxuICogaXRzIHJpZ2h0IHtAbGluayBBbHBoYU1lbW9yeX0gc2F0aXNmeSB0aGUgbmVnYXRlZCBjb25kaXRpb24ncyBqb2luIHRlc3RzXG4gKiBhZ2FpbnN0IHRoYXQgdG9rZW4uIEFueSBtYXRjaGluZyBmYWN0IGluaGliaXRzIHRoZSB0b2tlbi5cbiAqXG4gKiAjIyMgQ291bnQtYmFzZWQgYm9va2tlZXBpbmdcbiAqXG4gKiBUaGUgbm9kZSBtYWludGFpbnMgYSBwZXItdG9rZW4gYmxvY2sgY291bnQ6IGhvdyBtYW55IHJpZ2h0IGZhY3RzIGN1cnJlbnRseVxuICogc2F0aXNmeSB0aGUgam9pbiB0ZXN0cyBmb3IgdGhhdCB0b2tlbi4gQSB0b2tlbiBpcyBkb3duc3RyZWFtLWFjdGl2ZSBpZmYgaXRzXG4gKiBjb3VudCBpcyB6ZXJvLiBUaGlzIGF2b2lkcyBzY2FubmluZyB0aGUgd2hvbGUgcmlnaHQgbWVtb3J5IG9uIGV2ZXJ5IHJpZ2h0LVxuICogc2lkZSBldmVudCDigJQgYSBjaGFuZ2Ugb25seSBuZWVkcyB0byBpbnNwZWN0IGxlZnQgdG9rZW5zIG9uY2UsIGFkanVzdCB0aGVpclxuICogY291bnRzLCBhbmQgZmlyZSBhY3RpdmF0ZS9kZWFjdGl2YXRlIHRyYW5zaXRpb25zIG9uIHRoZSAw4oaUMSBib3VuZGFyeS5cbiAqXG4gKiAjIyMgQWN0aXZhdGlvbiBmbG93XG4gKlxuICogLSAqKmxlZnRBY3RpdmF0ZSh0b2tlbikqKjogY291bnQgbWF0Y2hpbmcgcmlnaHQgZmFjdHMgb25jZTsgaWYgemVybywgZW1pdFxuICogICBkb3duc3RyZWFtIGFjdGl2YXRlIGltbWVkaWF0ZWx5LCBlbHNlIHJlY29yZCB0aGUgY291bnQgYW5kIHN0YXkgcXVpZXQuXG4gKiAtICoqbGVmdERlYWN0aXZhdGUodG9rZW4pKio6IGZvcmdldCB0aGUgdG9rZW47IGlmIGl0IHdhcyBjdXJyZW50bHkgcGFzc2luZyxcbiAqICAgZmlyZSBkb3duc3RyZWFtIGRlYWN0aXZhdGUuIE5vLW9wIGZvciBibG9ja2VkIHRva2VucyDigJQgZG93bnN0cmVhbSBuZXZlclxuICogICBzYXcgdGhlbS5cbiAqIC0gKipyaWdodEFjdGl2YXRlKGZhY3QpKio6IGZvciBlYWNoIGxlZnQgdG9rZW4gd2hvc2Ugam9pbiB0ZXN0cyBwYXNzIHdpdGhcbiAqICAgdGhpcyBmYWN0LCBpbmNyZW1lbnQgY291bnQuIElmIHRoZSBjb3VudCB0cmFuc2l0aW9ucyAw4oaSMSwgZmlyZSBkb3duc3RyZWFtXG4gKiAgIGRlYWN0aXZhdGUgKHRoZSB0b2tlbiB3YXMgcGFzc2luZyBhbmQgaXMgbm93IGJsb2NrZWQpLlxuICogLSAqKnJpZ2h0RGVhY3RpdmF0ZShmYWN0KSoqOiBmb3IgZWFjaCBsZWZ0IHRva2VuIHdob3NlIGpvaW4gdGVzdHMgcGFzcyB3aXRoXG4gKiAgIHRoaXMgZmFjdCwgZGVjcmVtZW50IGNvdW50IChjbGFtcGVkIGF0IDApLiBJZiB0aGUgY291bnQgdHJhbnNpdGlvbnMgMeKGkjAsXG4gKiAgIGZpcmUgZG93bnN0cmVhbSBhY3RpdmF0ZS5cbiAqXG4gKiAjIyMgVW5zYWZlIE5PVFxuICpcbiAqIEEgbmVnYXRlZCBjb25kaXRpb24gcmVmZXJlbmNpbmcgYSB2YXJpYWJsZSB0aGF0IGlzIG5vdCBib3VuZCBpbiB0aGUgbGVmdFxuICogdG9rZW4gaXMgXCJ1bnNhZmVcIiAoRG9vcmVuYm9zIMKnMi42LjEpIOKAlCB0aGUgbWF0Y2ggc2V0IGlzIHVuYm91bmRlZC4gV2VcbiAqIGV4cG9zZSB7QGxpbmsgVW5zYWZlTmVnYXRpb25FcnJvcn0gZm9yIHRoZSBydWxlIGJ1aWxkZXIgdG8gdGhyb3cgd2hlbiBpdFxuICogZGV0ZWN0cyB0aGlzIHN0YXRpY2FsbHkuIFRoZSBub2RlIGl0c2VsZiBhY2NlcHRzIGFueSB7QGxpbmsgSm9pblRlc3R9IGxpc3RcbiAqIGF0IGNvbnN0cnVjdGlvbjsgZGV0ZWN0aW9uIGxpdmVzIGF0IHJ1bGUtYnVpbGQgdGltZSB3aGVyZSB0aGUgYm91bmQtXG4gKiB2YXJpYWJsZSBzZXQgaXMga25vd24uXG4gKi9cbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiLi9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgQXR0cktleSwgRmFjdFZhbHVlIH0gZnJvbSBcIi4vd20uanNcIjtcbmltcG9ydCB0eXBlIHsgVG9rZW4gfSBmcm9tIFwiLi9iZXRhLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEFscGhhTWVtb3J5IH0gZnJvbSBcIi4vYWxwaGEuanNcIjtcbmltcG9ydCB0eXBlIHsgSm9pblRlc3QgfSBmcm9tIFwiLi9qb2luLmpzXCI7XG5cbi8qKlxuICogVGhyb3duIGJ5IHRoZSBydWxlIGJ1aWxkZXIgd2hlbiBhIG5lZ2F0ZWQgY29uZGl0aW9uIHJlZmVyZW5jZXMgYSB2YXJpYWJsZVxuICogdGhhdCBpcyBub3QgYm91bmQgYnkgYW55IGVhcmxpZXIgKHBvc2l0aXZlKSBjb25kaXRpb24gaW4gdGhlIHJ1bGUuXG4gKlxuICogVGhlIG5vZGUgaXRzZWxmIGRvZXMgbm90IHRocm93IHRoaXMg4oCUIGl0IGhhcyBubyB2aXNpYmlsaXR5IGludG8gdGhlIGZ1bGxcbiAqIHJ1bGUncyBiaW5kaW5nIHNldC4gVGhlIGVycm9yIHR5cGUgbGl2ZXMgaGVyZSBzbyB0aGUgYnVpbGRlciBjYW4gcmVwb3J0XG4gKiBpdCB3aXRoIGEgY29uc2lzdGVudCBuYW1lIGFuZCBjYWxsZXJzIGNhbiBjYXRjaCBpdCBzcGVjaWZpY2FsbHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBVbnNhZmVOZWdhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih1bmJvdW5kVmFyOiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIGBVbnNhZmVOZWdhdGlvbkVycm9yOiB2YXJpYWJsZSBcIiR7dW5ib3VuZFZhcn1cIiBpbiBOT1QgcGF0dGVybiBpcyBub3QgYm91bmQgYnkgYW55IHByZWNlZGluZyBjb25kaXRpb25gLFxuICAgICk7XG4gICAgdGhpcy5uYW1lID0gXCJVbnNhZmVOZWdhdGlvbkVycm9yXCI7XG4gIH1cbn1cblxuLyoqIERvd25zdHJlYW0gc3Vic2NyaWJlciBmaXJlZCB3aGVuIGEgdG9rZW4gYmVnaW5zIHBhc3NpbmcgKGNvdW50IGhpdCAwKS4gKi9cbnR5cGUgQWN0aXZhdGVMaXN0ZW5lciA9ICh0b2tlbjogVG9rZW4pID0+IHZvaWQ7XG4vKiogRG93bnN0cmVhbSBzdWJzY3JpYmVyIGZpcmVkIHdoZW4gYSB0b2tlbiBzdG9wcyBwYXNzaW5nIChjb3VudCBsZWZ0IDApLiAqL1xudHlwZSBEZWFjdGl2YXRlTGlzdGVuZXIgPSAodG9rZW46IFRva2VuKSA9PiB2b2lkO1xuXG4vKipcbiAqIEJldGEtbmV0d29yayBOT1Qgbm9kZS5cbiAqXG4gKiBMZWZ0IGlucHV0OiB0b2tlbnMgZnJvbSBhbiB1cHN0cmVhbSB7QGxpbmsgQmV0YU1lbW9yeX0gLyB7QGxpbmsgSm9pbk5vZGV9LlxuICogUmlnaHQgaW5wdXQ6IGFuIHtAbGluayBBbHBoYU1lbW9yeX0gb2YgZmFjdHMgdGhhdCBtYXRjaCB0aGUgbmVnYXRlZCBwYXR0ZXJuJ3NcbiAqIGNvbnN0YW50IHRlc3RzLiBUaGUgbm9kZSBkb2VzIG5vdCBzdWJzY3JpYmUgdG8gdGhlIGFscGhhIG1lbW9yeSBpdHNlbGYg4oCUXG4gKiB0aGUgbmV0d29yayB3aXJpbmcgKHR5cGljYWxseSB0aGUgYnVpbGRlcikgY2FsbHMge0BsaW5rIHJpZ2h0QWN0aXZhdGV9IGFuZFxuICoge0BsaW5rIHJpZ2h0RGVhY3RpdmF0ZX0gd2hlbiBhbHBoYS1tZW1vcnkgbWVtYmVyc2hpcCBjaGFuZ2VzLlxuICpcbiAqIE91dHB1dDogYSBzdWJzZXQgb2YgbGVmdCB0b2tlbnMgKG5ldmVyIGV4dGVuZGVkIOKAlCBuZWdhdGlvbiBjb250cmlidXRlcyBub1xuICogbmV3IGJpbmRpbmdzKSwgZW1pdHRlZCB0byByZWdpc3RlcmVkIGRvd25zdHJlYW0gYWN0aXZhdGUvZGVhY3RpdmF0ZVxuICogbGlzdGVuZXJzIGluIHJlZ2lzdHJhdGlvbiBvcmRlci5cbiAqL1xuZXhwb3J0IGNsYXNzIE5lZ2F0aW9uTm9kZSB7XG4gIHJlYWRvbmx5ICNhY3RpdmF0ZUxpc3RlbmVyczogQWN0aXZhdGVMaXN0ZW5lcltdID0gW107XG4gIHJlYWRvbmx5ICNkZWFjdGl2YXRlTGlzdGVuZXJzOiBEZWFjdGl2YXRlTGlzdGVuZXJbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBQZXItdG9rZW4gYmxvY2sgY291bnQ6IG51bWJlciBvZiByaWdodCBmYWN0cyBjdXJyZW50bHkgc2F0aXNmeWluZyB0aGVcbiAgICogam9pbiB0ZXN0cyBmb3IgdGhhdCB0b2tlbi4gQSB0b2tlbiBwYXNzZXMgZG93bnN0cmVhbSBpZmYgaXRzIGNvdW50IGlzXG4gICAqIHplcm8uIEFic2VudCA9IHRva2VuIHVua25vd24gKG5ldmVyIGxlZnQtYWN0aXZhdGVkIG9yIGFscmVhZHlcbiAgICogbGVmdC1kZWFjdGl2YXRlZCkuXG4gICAqL1xuICByZWFkb25seSAjYmxvY2tDb3VudCA9IG5ldyBNYXA8VG9rZW4sIG51bWJlcj4oKTtcblxuICAvKipcbiAgICogVG9rZW5zIHRoYXQgYXJlIGN1cnJlbnRseSBlbWl0dGVkIGRvd25zdHJlYW0gKGNvdW50ID09PSAwIGFuZCBub3QgeWV0XG4gICAqIGxlZnQtZGVhY3RpdmF0ZWQpLiBNYWludGFpbmVkIGluIGxvY2stc3RlcCB3aXRoIHtAbGluayAjYmxvY2tDb3VudH0gc29cbiAgICogdGhhdCB3ZSBrbm93IHdoZXRoZXIgYSBkZWFjdGl2YXRlIHRyYW5zaXRpb24gYWN0dWFsbHkgbmVlZHMgdG8gZmlyZS5cbiAgICovXG4gIHJlYWRvbmx5ICNwYXNzaW5nVG9rZW5zID0gbmV3IFNldDxUb2tlbj4oKTtcblxuICAvKipcbiAgICogRXZlcnkgbGVmdCB0b2tlbiB3ZSd2ZSBzZWVuIGFuZCBub3QgeWV0IGRlYWN0aXZhdGVkLCBpbiBpbnNlcnRpb24gb3JkZXIuXG4gICAqIFJpZ2h0LXNpZGUgZXZlbnRzIGl0ZXJhdGUgdGhpcyB0byBkZXRlcm1pbmUgd2hpY2ggY291bnRzIHRvIGFkanVzdC5cbiAgICogS2VwdCBhcyBhbiBhcnJheSAobm90IGEgU2V0KSBzbyBpdGVyYXRpb24gb3JkZXIgaXMgZGV0ZXJtaW5pc3RpYyBwZXJcbiAgICogU1BFQy5tZCDCp0l0ZXJhdGlvbiBPcmRlci5cbiAgICovXG4gIHJlYWRvbmx5ICNsZWZ0VG9rZW5zOiBUb2tlbltdID0gW107XG5cbiAgcmVhZG9ubHkgI3JpZ2h0TWVtb3J5OiBBbHBoYU1lbW9yeTtcbiAgcmVhZG9ubHkgI3Rlc3RzOiByZWFkb25seSBKb2luVGVzdFtdO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gcmlnaHRNZW1vcnkgQWxwaGEgbWVtb3J5IHN1cHBseWluZyBjYW5kaWRhdGUgYmxvY2tpbmcgZmFjdHMuXG4gICAqIEBwYXJhbSB0ZXN0cyAgICAgICBFcXVhbGl0eSB0ZXN0cyB0aGF0IGEgZmFjdCBtdXN0IHNhdGlzZnkgKGFnYWluc3QgdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICBsZWZ0IHRva2VuJ3MgYmluZGluZ3MpIHRvIGNvdW50IGFzIGEgYmxvY2tlci4gQW4gZW1wdHlcbiAgICogICAgICAgICAgICAgICAgICAgIGxpc3QgbWVhbnMgYW55IGZhY3QgaW4gYHJpZ2h0TWVtb3J5YCBibG9ja3MuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihyaWdodE1lbW9yeTogQWxwaGFNZW1vcnksIHRlc3RzOiByZWFkb25seSBKb2luVGVzdFtdKSB7XG4gICAgdGhpcy4jcmlnaHRNZW1vcnkgPSByaWdodE1lbW9yeTtcbiAgICB0aGlzLiN0ZXN0cyA9IHRlc3RzO1xuICB9XG5cbiAgLyoqIFN1YnNjcmliZSB0byBkb3duc3RyZWFtIGFjdGl2YXRpb25zLiBMaXN0ZW5lcnMgZmlyZSBpbiByZWdpc3RyYXRpb24gb3JkZXIuICovXG4gIGFkZERvd25zdHJlYW1BY3RpdmF0ZShsaXN0ZW5lcjogQWN0aXZhdGVMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuI2FjdGl2YXRlTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqIFN1YnNjcmliZSB0byBkb3duc3RyZWFtIGRlYWN0aXZhdGlvbnMuIExpc3RlbmVycyBmaXJlIGluIHJlZ2lzdHJhdGlvbiBvcmRlci4gKi9cbiAgYWRkRG93bnN0cmVhbURlYWN0aXZhdGUobGlzdGVuZXI6IERlYWN0aXZhdGVMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuI2RlYWN0aXZhdGVMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICAvKipcbiAgICogQWNjZXB0IGEgbmV3IGxlZnQgdG9rZW4uXG4gICAqXG4gICAqIENvbXB1dGVzIHRoZSBpbml0aWFsIGJsb2NrIGNvdW50IGFnYWluc3QgdGhlIGN1cnJlbnQgcmlnaHQgbWVtb3J5LiBJZlxuICAgKiB6ZXJvLCB0aGUgdG9rZW4gaXMgZW1pdHRlZCBkb3duc3RyZWFtIGltbWVkaWF0ZWx5OyBvdGhlcndpc2UgaXQgaXMgaGVsZFxuICAgKiBpbiBpbnRlcm5hbCBzdGF0ZSB1bnRpbCBlbm91Z2ggYmxvY2tlcnMgYXJlIHJldHJhY3RlZCB0byBkcm9wIHRoZSBjb3VudFxuICAgKiBiYWNrIHRvIHplcm8uXG4gICAqL1xuICBsZWZ0QWN0aXZhdGUodG9rZW46IFRva2VuKTogdm9pZCB7XG4gICAgdGhpcy4jbGVmdFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICBjb25zdCBjb3VudCA9IHRoaXMuI2NvdW50TWF0Y2hpbmdGYWN0cyh0b2tlbik7XG4gICAgdGhpcy4jYmxvY2tDb3VudC5zZXQodG9rZW4sIGNvdW50KTtcblxuICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgdGhpcy4jcGFzc2luZ1Rva2Vucy5hZGQodG9rZW4pO1xuICAgICAgZm9yIChjb25zdCBsIG9mIHRoaXMuI2FjdGl2YXRlTGlzdGVuZXJzKSBsKHRva2VuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2l0aGRyYXcgYSBsZWZ0IHRva2VuLlxuICAgKlxuICAgKiBPbmx5IGZpcmVzIGRvd25zdHJlYW0gZGVhY3RpdmF0ZSBsaXN0ZW5lcnMgaWYgdGhlIHRva2VuIHdhcyBjdXJyZW50bHlcbiAgICogcGFzc2luZyDigJQgZG93bnN0cmVhbSBuZXZlciBzYXcgYSBibG9ja2VkIHRva2VuLCBzbyByZXRyYWN0aW5nIGl0IHdvdWxkXG4gICAqIGJlIGEgc3B1cmlvdXMgZXZlbnQuXG4gICAqL1xuICBsZWZ0RGVhY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICBjb25zdCBpZHggPSB0aGlzLiNsZWZ0VG9rZW5zLmluZGV4T2YodG9rZW4pO1xuICAgIGlmIChpZHggIT09IC0xKSB0aGlzLiNsZWZ0VG9rZW5zLnNwbGljZShpZHgsIDEpO1xuXG4gICAgY29uc3Qgd2FzUGFzc2luZyA9IHRoaXMuI3Bhc3NpbmdUb2tlbnMuZGVsZXRlKHRva2VuKTtcbiAgICB0aGlzLiNibG9ja0NvdW50LmRlbGV0ZSh0b2tlbik7XG5cbiAgICBpZiAod2FzUGFzc2luZykge1xuICAgICAgZm9yIChjb25zdCBsIG9mIHRoaXMuI2RlYWN0aXZhdGVMaXN0ZW5lcnMpIGwodG9rZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGEgbmV3IHJpZ2h0LXNpZGUgZmFjdC5cbiAgICpcbiAgICogRm9yIGVhY2gga25vd24gbGVmdCB0b2tlbiB3aG9zZSBqb2luIHRlc3RzIHBhc3Mgd2l0aCB0aGlzIGZhY3QsIGluY3JlbWVudFxuICAgKiB0aGUgYmxvY2sgY291bnQuIEEgMOKGkjEgdHJhbnNpdGlvbiBtZWFucyB0aGUgdG9rZW4ganVzdCBiZWNhbWUgYmxvY2tlZCDigJRcbiAgICogZmlyZSBkb3duc3RyZWFtIGRlYWN0aXZhdGUuXG4gICAqL1xuICByaWdodEFjdGl2YXRlKGlkOiBFbnRpdHlJZCwgX2F0dHI6IEF0dHJLZXksIHZhbHVlOiBGYWN0VmFsdWUpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRoaXMuI2xlZnRUb2tlbnMpIHtcbiAgICAgIGlmICghdGhpcy4jZmFjdE1hdGNoZXNUb2tlbih0b2tlbiwgaWQsIHZhbHVlKSkgY29udGludWU7XG4gICAgICBjb25zdCBwcmV2ID0gdGhpcy4jYmxvY2tDb3VudC5nZXQodG9rZW4pID8/IDA7XG4gICAgICB0aGlzLiNibG9ja0NvdW50LnNldCh0b2tlbiwgcHJldiArIDEpO1xuXG4gICAgICBpZiAocHJldiA9PT0gMCAmJiB0aGlzLiNwYXNzaW5nVG9rZW5zLmhhcyh0b2tlbikpIHtcbiAgICAgICAgdGhpcy4jcGFzc2luZ1Rva2Vucy5kZWxldGUodG9rZW4pO1xuICAgICAgICBmb3IgKGNvbnN0IGwgb2YgdGhpcy4jZGVhY3RpdmF0ZUxpc3RlbmVycykgbCh0b2tlbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgYSByZXRyYWN0ZWQgcmlnaHQtc2lkZSBmYWN0LlxuICAgKlxuICAgKiBGb3IgZWFjaCBrbm93biBsZWZ0IHRva2VuIHdob3NlIGpvaW4gdGVzdHMgcGFzcyB3aXRoIHRoaXMgZmFjdCwgZGVjcmVtZW50XG4gICAqIHRoZSBibG9jayBjb3VudCAoY2xhbXBlZCBhdCB6ZXJvIGFnYWluc3Qgc3B1cmlvdXMgcmV0cmFjdHMpLiBBIDHihpIwXG4gICAqIHRyYW5zaXRpb24gbWVhbnMgdGhlIHRva2VuIGlzIG5ld2x5IHVuYmxvY2tlZCDigJQgZmlyZSBkb3duc3RyZWFtIGFjdGl2YXRlLlxuICAgKi9cbiAgcmlnaHREZWFjdGl2YXRlKGlkOiBFbnRpdHlJZCwgX2F0dHI6IEF0dHJLZXksIHZhbHVlOiBGYWN0VmFsdWUpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRoaXMuI2xlZnRUb2tlbnMpIHtcbiAgICAgIGlmICghdGhpcy4jZmFjdE1hdGNoZXNUb2tlbih0b2tlbiwgaWQsIHZhbHVlKSkgY29udGludWU7XG4gICAgICBjb25zdCBwcmV2ID0gdGhpcy4jYmxvY2tDb3VudC5nZXQodG9rZW4pID8/IDA7XG4gICAgICBjb25zdCBuZXh0ID0gcHJldiA+IDAgPyBwcmV2IC0gMSA6IDA7XG4gICAgICB0aGlzLiNibG9ja0NvdW50LnNldCh0b2tlbiwgbmV4dCk7XG5cbiAgICAgIGlmIChwcmV2ID09PSAxICYmIG5leHQgPT09IDAgJiYgIXRoaXMuI3Bhc3NpbmdUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgICB0aGlzLiNwYXNzaW5nVG9rZW5zLmFkZCh0b2tlbik7XG4gICAgICAgIGZvciAoY29uc3QgbCBvZiB0aGlzLiNhY3RpdmF0ZUxpc3RlbmVycykgbCh0b2tlbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvdW50IHJpZ2h0IGZhY3RzIHRoYXQgY3VycmVudGx5IHNhdGlzZnkgdGhlIGpvaW4gdGVzdHMgZm9yIGB0b2tlbmAuXG4gICAqXG4gICAqIENhbGxlZCBvbmx5IG9uIHtAbGluayBsZWZ0QWN0aXZhdGV9IOKAlCBpbmNyZW1lbnRhbCByaWdodC1zaWRlIGV2ZW50c1xuICAgKiBtYWludGFpbiB0aGUgY291bnQgdGhlcmVhZnRlci4gTyh8cmlnaHRNZW1vcnl8IMK3IHx0ZXN0c3wpIHBlciB0b2tlbi5cbiAgICovXG4gICNjb3VudE1hdGNoaW5nRmFjdHModG9rZW46IFRva2VuKTogbnVtYmVyIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGZvciAoY29uc3QgZmFjdCBvZiB0aGlzLiNyaWdodE1lbW9yeS5mYWN0cykge1xuICAgICAgaWYgKHRoaXMuI2ZhY3RNYXRjaGVzVG9rZW4odG9rZW4sIGZhY3QuaWQsIGZhY3QudmFsdWUpKSBjb3VudCsrO1xuICAgIH1cbiAgICByZXR1cm4gY291bnQ7XG4gIH1cblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIGEgcmlnaHQgZmFjdCBgKHJpZ2h0SWQsIHJpZ2h0VmFsdWUpYCBzYXRpc2ZpZXMgZXZlcnkgam9pblxuICAgKiB0ZXN0IGFnYWluc3QgYHRva2VuYC5cbiAgICpcbiAgICogQSBtaXNzaW5nIGBsZWZ0VmFyYCBiaW5kaW5nIGZhaWxzIHRoZSB0ZXN0IOKAlCB0aGlzIG1pcnJvcnMge0BsaW5rIEpvaW5Ob2RlfVxuICAgKiBhbmQgcHJvdGVjdHMgYWdhaW5zdCBidWlsZGVyIGJ1Z3MgdGhhdCByZWZlcmVuY2UgYW4gdW5ib3VuZCB2YXJpYWJsZVxuICAgKiBkZXNwaXRlIHRoZSB7QGxpbmsgVW5zYWZlTmVnYXRpb25FcnJvcn0gZ3VhcmQuXG4gICAqL1xuICAjZmFjdE1hdGNoZXNUb2tlbihcbiAgICB0b2tlbjogVG9rZW4sXG4gICAgcmlnaHRJZDogRW50aXR5SWQsXG4gICAgcmlnaHRWYWx1ZTogRmFjdFZhbHVlLFxuICApOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IHRlc3Qgb2YgdGhpcy4jdGVzdHMpIHtcbiAgICAgIGNvbnN0IGxlZnRWYWwgPSB0b2tlbi5iaW5kaW5nc1t0ZXN0LmxlZnRWYXJdO1xuICAgICAgaWYgKGxlZnRWYWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKHRlc3QudHlwZSA9PT0gXCJpZEVxdWFsaXR5XCIpIHtcbiAgICAgICAgaWYgKGxlZnRWYWwgIT09IHJpZ2h0SWQpIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHZhbHVlRXF1YWxpdHlcbiAgICAgICAgaWYgKGxlZnRWYWwgIT09IHJpZ2h0VmFsdWUpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdLCJmaWxlIjoiL2hvbWUvam9leS9Qcm9qZWN0cy9ydWxlcy9wYWNrYWdlcy9yZXRlL2Rpc3QvbmVnYXRpb24uanMifQ== diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/df19234216ec42bf89b4594b108403573b310d4d b/KMr2_dqTOvh2R-Vg1E6cO/ssr/df19234216ec42bf89b4594b108403573b310d4d deleted file mode 100644 index d2c6c94..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/df19234216ec42bf89b4594b108403573b310d4d +++ /dev/null @@ -1,76 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "EventLog", { enumerable: true, configurable: true, get(){ try { return EventLog } catch {} }}); -class EventLog { - #events = []; - #seq = 0; - #clock; - /** - * @param clock — Optional wall-clock function. Defaults to `Date.now`. - * Inject a deterministic clock (e.g. `() => 0`) in tests and replay - * contexts where timestamp values must be stable across runs. - */ - constructor(clock = Date.now) { - this.#clock = clock; - } - /** Number of events logged. */ - get length() { - return this.#events.length; - } - /** - * Highest sequence number currently in the log (0 if empty). - * - * The next appended event will carry `latestSeq + 1`. - */ - get latestSeq() { - return this.#seq; - } - /** Record an insert of `(id, attr, value)`. */ - appendInsert(id, attr, value) { - this.#events.push({ - seq: ++this.#seq, - ts: this.#clock(), - kind: "insert", - id, - attr, - value, - }); - } - /** - * Record a retract of `(id, attr)` with its previous `value` captured - * at the call site (so replay can reconstruct the missing fact). - */ - appendRetract(id, attr, value) { - this.#events.push({ - seq: ++this.#seq, - ts: this.#clock(), - kind: "retract", - id, - attr, - value, - }); - } - /** Record a rule firing by rule name. */ - appendFire(ruleName) { - this.#events.push({ - seq: ++this.#seq, - ts: this.#clock(), - kind: "fire", - ruleName, - }); - } - /** - * Return all events whose `seq` is strictly greater than `afterSeq`. - * - * Pass `0` to retrieve the full log. Callers typically store the - * last-seen seq and poll with `getSince(lastSeen)` to catch up. - */ - getSince(afterSeq) { - return this.#events.filter((e) => e.seq > afterSeq); - } - /** Return a shallow copy of all events. */ - getAll() { - return [...this.#events]; - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQStDTSxNQUFPLFFBQVE7SUFDVixPQUFPLEdBQWUsRUFBRTtJQUNqQyxJQUFJLEdBQUcsQ0FBQztJQUNDLE1BQU07SUFFZjs7Ozs7SUFLQSxZQUFZLFFBQXNCLElBQUksQ0FBQyxHQUFHO1FBQ3hDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSztJQUNyQjtJQUVBO0lBQ0EsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07SUFDNUI7SUFFQTs7Ozs7SUFLQSxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxJQUFJO0lBQ2xCO0lBRUE7SUFDQSxZQUFZLENBQUMsRUFBWSxFQUFFLElBQWEsRUFBRSxLQUFnQjtRQUN4RCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNoQixHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNoQixFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNqQixJQUFJLEVBQUUsUUFBUTtZQUNkLEVBQUU7WUFDRixJQUFJO1lBQ0osS0FBSztTQUNOLENBQUM7SUFDSjtJQUVBOzs7O0lBSUEsYUFBYSxDQUFDLEVBQVksRUFBRSxJQUFhLEVBQUUsS0FBZ0I7UUFDekQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEIsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDaEIsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDakIsSUFBSSxFQUFFLFNBQVM7WUFDZixFQUFFO1lBQ0YsSUFBSTtZQUNKLEtBQUs7U0FDTixDQUFDO0lBQ0o7SUFFQTtJQUNBLFVBQVUsQ0FBQyxRQUFnQjtRQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNoQixHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNoQixFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNqQixJQUFJLEVBQUUsTUFBTTtZQUNaLFFBQVE7U0FDVCxDQUFDO0lBQ0o7SUFFQTs7Ozs7O0lBTUEsUUFBUSxDQUFDLFFBQWdCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDO0lBQ3JEO0lBRUE7SUFDQSxNQUFNO1FBQ0osT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUMxQiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2V2ZW50bG9nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXZlbnRMb2cg4oCUIGFwcGVuZC1vbmx5IGV2ZW50IGxvZyBmb3IgU2Vzc2lvbiBtdXRhdGlvbnMuXG4gKlxuICogUGVyIFNQRUMubWQgwqdSZXRlIElJIFJlZmVyZW5jZSBUYXJnZXQsIHRoZSBlbmdpbmUgbXVzdCBzdXBwb3J0XG4gKiByZXBsYXktZGV0ZXJtaW5pc206IGdpdmVuIHRoZSBzYW1lIHNjaGVtYSwgcnVsZXMsIGFuZCBldmVudCBsb2csXG4gKiByZXBsYXlpbmcgZXZlbnRzIHJlcHJvZHVjZXMgaWRlbnRpY2FsIHdvcmtpbmctbWVtb3J5IGFuZCBmaXJpbmdcbiAqIHNlcXVlbmNlcy4gVGhlIEV2ZW50TG9nIGlzIHRoZSBhdXRob3JpdGF0aXZlIHRyYW5zY3JpcHQgY29uc3VtZWQgYnlcbiAqIHRoZSB0aW1lLXRyYXZlbCBhbmQgcmVwbGF5IHN5c3RlbXMgKFBoYXNlIDMpLlxuICpcbiAqIERlc2lnbiBpbnZhcmlhbnRzOlxuICogICAtIEFwcGVuZC1vbmx5LiBFdmVudHMgYXJlIG5ldmVyIHJld3JpdHRlbiBvciBkZWxldGVkLlxuICogICAtIFNlcXVlbmNlIG51bWJlcnMgYXJlIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZywgc3RhcnRpbmcgYXQgMS5cbiAqICAgLSBEZXJpdmVkIGZhY3RzIChuZWdhdGl2ZSBFbnRpdHlJZHMpIGFyZSBOT1QgbG9nZ2VkIOKAlCBzZWUgU1BFQy5tZFxuICogICAgIMKnVHJ1dGggTWFpbnRlbmFuY2U6IGRlcml2ZWQgZmFjdHMgYXJlIHJlLWRlcml2ZWQgb24gcmVwbGF5LlxuICogICAgIFRoaXMgZXhjbHVzaW9uIGlzIGVuZm9yY2VkIGF0IHRoZSBTZXNzaW9uIGludGVncmF0aW9uIGJvdW5kYXJ5XG4gKiAgICAgKHNlZSBzZXNzaW9uLnRzKSwgbm90IGluc2lkZSB0aGUgRXZlbnRMb2cgaXRzZWxmLlxuICovXG5pbXBvcnQgdHlwZSB7IEVudGl0eUlkIH0gZnJvbSBcIi4vc2NoZW1hLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEF0dHJLZXksIEZhY3RWYWx1ZSB9IGZyb20gXCIuL3dtLmpzXCI7XG5cbi8qKiBLaW5kIG9mIGEgbG9nZ2VkIGV2ZW50LiAqL1xuZXhwb3J0IHR5cGUgRXZlbnRLaW5kID0gXCJpbnNlcnRcIiB8IFwicmV0cmFjdFwiIHwgXCJmaXJlXCI7XG5cbi8qKlxuICogQSBzaW5nbGUgZW50cnkgaW4gdGhlIHtAbGluayBFdmVudExvZ30uXG4gKlxuICogRmllbGRzIGFyZSBgcmVhZG9ubHlgIHRvIHJlaW5mb3JjZSB0aGUgYXBwZW5kLW9ubHkgY29udHJhY3Q7IG91dHNpZGVcbiAqIGNhbGxlcnMgb2J0YWluIGV2ZW50cyB0aHJvdWdoIHtAbGluayBFdmVudExvZy5nZXRBbGx9IC9cbiAqIHtAbGluayBFdmVudExvZy5nZXRTaW5jZX0sIHdoaWNoIHJldHVybiBhIHNoYWxsb3cgY29weS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dFdmVudCB7XG4gIC8qKiBNb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgc2VxdWVuY2UgbnVtYmVyLCBzdGFydGluZyBhdCAxLiAqL1xuICByZWFkb25seSBzZXE6IG51bWJlcjtcbiAgLyoqIFdhbGwtY2xvY2sgdGltZXN0YW1wIChtcyBzaW5jZSBlcG9jaCkuIENhcHR1cmVkIGF0IGFwcGVuZCB0aW1lLiAqL1xuICByZWFkb25seSB0czogbnVtYmVyO1xuICAvKiogRXZlbnQga2luZC4gKi9cbiAgcmVhZG9ubHkga2luZDogRXZlbnRLaW5kO1xuICAvKiogRW50aXR5IGlkIOKAlCBwcmVzZW50IGZvciBcImluc2VydFwiIGFuZCBcInJldHJhY3RcIi4gKi9cbiAgcmVhZG9ubHkgaWQ/OiBFbnRpdHlJZDtcbiAgLyoqIEF0dHJpYnV0ZSBuYW1lIOKAlCBwcmVzZW50IGZvciBcImluc2VydFwiIGFuZCBcInJldHJhY3RcIi4gKi9cbiAgcmVhZG9ubHkgYXR0cj86IEF0dHJLZXk7XG4gIC8qKiBGYWN0IHZhbHVlIOKAlCBwcmVzZW50IGZvciBcImluc2VydFwiIGFuZCBcInJldHJhY3RcIi4gKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBGYWN0VmFsdWU7XG4gIC8qKiBSdWxlIG5hbWUg4oCUIHByZXNlbnQgZm9yIFwiZmlyZVwiLiAqL1xuICByZWFkb25seSBydWxlTmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEV2ZW50TG9nIHtcbiAgcmVhZG9ubHkgI2V2ZW50czogTG9nRXZlbnRbXSA9IFtdO1xuICAjc2VxID0gMDtcbiAgcmVhZG9ubHkgI2Nsb2NrOiAoKSA9PiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBjbG9jayDigJQgT3B0aW9uYWwgd2FsbC1jbG9jayBmdW5jdGlvbi4gRGVmYXVsdHMgdG8gYERhdGUubm93YC5cbiAgICogICBJbmplY3QgYSBkZXRlcm1pbmlzdGljIGNsb2NrIChlLmcuIGAoKSA9PiAwYCkgaW4gdGVzdHMgYW5kIHJlcGxheVxuICAgKiAgIGNvbnRleHRzIHdoZXJlIHRpbWVzdGFtcCB2YWx1ZXMgbXVzdCBiZSBzdGFibGUgYWNyb3NzIHJ1bnMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihjbG9jazogKCkgPT4gbnVtYmVyID0gRGF0ZS5ub3cpIHtcbiAgICB0aGlzLiNjbG9jayA9IGNsb2NrO1xuICB9XG5cbiAgLyoqIE51bWJlciBvZiBldmVudHMgbG9nZ2VkLiAqL1xuICBnZXQgbGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogSGlnaGVzdCBzZXF1ZW5jZSBudW1iZXIgY3VycmVudGx5IGluIHRoZSBsb2cgKDAgaWYgZW1wdHkpLlxuICAgKlxuICAgKiBUaGUgbmV4dCBhcHBlbmRlZCBldmVudCB3aWxsIGNhcnJ5IGBsYXRlc3RTZXEgKyAxYC5cbiAgICovXG4gIGdldCBsYXRlc3RTZXEoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jc2VxO1xuICB9XG5cbiAgLyoqIFJlY29yZCBhbiBpbnNlcnQgb2YgYChpZCwgYXR0ciwgdmFsdWUpYC4gKi9cbiAgYXBwZW5kSW5zZXJ0KGlkOiBFbnRpdHlJZCwgYXR0cjogQXR0cktleSwgdmFsdWU6IEZhY3RWYWx1ZSk6IHZvaWQge1xuICAgIHRoaXMuI2V2ZW50cy5wdXNoKHtcbiAgICAgIHNlcTogKyt0aGlzLiNzZXEsXG4gICAgICB0czogdGhpcy4jY2xvY2soKSxcbiAgICAgIGtpbmQ6IFwiaW5zZXJ0XCIsXG4gICAgICBpZCxcbiAgICAgIGF0dHIsXG4gICAgICB2YWx1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmQgYSByZXRyYWN0IG9mIGAoaWQsIGF0dHIpYCB3aXRoIGl0cyBwcmV2aW91cyBgdmFsdWVgIGNhcHR1cmVkXG4gICAqIGF0IHRoZSBjYWxsIHNpdGUgKHNvIHJlcGxheSBjYW4gcmVjb25zdHJ1Y3QgdGhlIG1pc3NpbmcgZmFjdCkuXG4gICAqL1xuICBhcHBlbmRSZXRyYWN0KGlkOiBFbnRpdHlJZCwgYXR0cjogQXR0cktleSwgdmFsdWU6IEZhY3RWYWx1ZSk6IHZvaWQge1xuICAgIHRoaXMuI2V2ZW50cy5wdXNoKHtcbiAgICAgIHNlcTogKyt0aGlzLiNzZXEsXG4gICAgICB0czogdGhpcy4jY2xvY2soKSxcbiAgICAgIGtpbmQ6IFwicmV0cmFjdFwiLFxuICAgICAgaWQsXG4gICAgICBhdHRyLFxuICAgICAgdmFsdWUsXG4gICAgfSk7XG4gIH1cblxuICAvKiogUmVjb3JkIGEgcnVsZSBmaXJpbmcgYnkgcnVsZSBuYW1lLiAqL1xuICBhcHBlbmRGaXJlKHJ1bGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLiNldmVudHMucHVzaCh7XG4gICAgICBzZXE6ICsrdGhpcy4jc2VxLFxuICAgICAgdHM6IHRoaXMuI2Nsb2NrKCksXG4gICAgICBraW5kOiBcImZpcmVcIixcbiAgICAgIHJ1bGVOYW1lLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbGwgZXZlbnRzIHdob3NlIGBzZXFgIGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiBgYWZ0ZXJTZXFgLlxuICAgKlxuICAgKiBQYXNzIGAwYCB0byByZXRyaWV2ZSB0aGUgZnVsbCBsb2cuIENhbGxlcnMgdHlwaWNhbGx5IHN0b3JlIHRoZVxuICAgKiBsYXN0LXNlZW4gc2VxIGFuZCBwb2xsIHdpdGggYGdldFNpbmNlKGxhc3RTZWVuKWAgdG8gY2F0Y2ggdXAuXG4gICAqL1xuICBnZXRTaW5jZShhZnRlclNlcTogbnVtYmVyKTogcmVhZG9ubHkgTG9nRXZlbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5maWx0ZXIoKGUpID0+IGUuc2VxID4gYWZ0ZXJTZXEpO1xuICB9XG5cbiAgLyoqIFJldHVybiBhIHNoYWxsb3cgY29weSBvZiBhbGwgZXZlbnRzLiAqL1xuICBnZXRBbGwoKTogcmVhZG9ubHkgTG9nRXZlbnRbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLiNldmVudHNdO1xuICB9XG59XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvcmV0ZS9kaXN0L2V2ZW50bG9nLmpzIn0= diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/e4ac6c0f21092408b3b0c5513515a511434a47be b/KMr2_dqTOvh2R-Vg1E6cO/ssr/e4ac6c0f21092408b3b0c5513515a511434a47be deleted file mode 100644 index 4f9bba1..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/e4ac6c0f21092408b3b0c5513515a511434a47be +++ /dev/null @@ -1,79 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "DerivedFactProduction", { enumerable: true, configurable: true, get(){ try { return DerivedFactProduction } catch {} }}); -/** - * Terminal Rete node that materialises derived facts from full matches. - * - * Wiring: subscribe this node to the final {@link BetaMemory} (or filter - * node) of a rule via `addDownstreamActivate(prod.leftActivate.bind(prod))` - * and `addDownstreamDeactivate(prod.leftDeactivate.bind(prod))`. - * - * Concurrency: activations and deactivations are expected to be serialised - * by the surrounding {@link Session.fireRules} loop; no internal locking. - */ -class DerivedFactProduction { - ruleName; - /** - * Monotonically decreasing counter used to mint negative entity ids for - * derived facts. Starts at `0` and is pre-decremented on each activation, - * yielding `-1, -2, -3, ...`. Scoped per node so different productions do - * not collide on ids in any externally-observable way (the ids are opaque - * to consumers; only the sign is meaningful). - */ - #idCounter = 0; - /** - * Map from the activating {@link Token} reference to the record of facts - * asserted for it. Keyed by reference — matching {@link BetaMemory}'s - * identity-based token semantics — so `leftDeactivate` can find the - * exact entry to retract without structural comparison. - */ - #tokenToEntry = new Map(); - /** Working memory into which derived facts are asserted and retracted. */ - #wm; - /** Computes derived facts from a match's bindings. */ - #handler; - constructor( - /** Human-readable rule name, surfaced in diagnostics. */ - ruleName, wm, handler) { - this.ruleName = ruleName; - this.#wm = wm; - this.#handler = handler; - } - /** - * Accept a new full match and assert its derived facts. - * - * Mints a fresh negative entity id, invokes the handler with the token's - * bindings, and inserts each returned `(attr, value)` pair into working - * memory under that id. Records the list of attrs on the token so a - * future {@link leftDeactivate} can retract exactly those facts. - */ - leftActivate(token) { - const derivedId = (--this.#idCounter); - const derivedFacts = this.#handler(token.bindings); - const attrs = []; - for (const { attr, value } of derivedFacts) { - this.#wm.insert(derivedId, attr, value); - attrs.push(attr); - }; - this.#tokenToEntry.set(token, { id: derivedId, attrs }); - } - /** - * Withdraw a previously-accepted match and retract its derived facts. - * - * Retracts each attr that was asserted on activation — not re-derived - * from the handler, see module header for rationale. Unknown tokens are - * a no-op: upstream memories broadcast deactivations to all subscribers, - * and a production that never saw a given token must simply ignore it - * (matching {@link BetaMemory.leftDeactivate} / {@link ProductionNode.leftDeactivate}). - */ - leftDeactivate(token) { - const entry = this.#tokenToEntry.get(token); - if (!entry) - return; - for (const attr of entry.attrs) { - this.#wm.retract(entry.id, attr); - }; - this.#tokenToEntry.delete(token); - } -} - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IjtBQThFQTs7Ozs7Ozs7OztBQVVNLE1BQU8scUJBQXFCO0lBeUJyQjtJQXhCWDs7Ozs7OztJQU9BLFVBQVUsR0FBRyxDQUFDO0lBRWQ7Ozs7OztJQU1TLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBdUI7SUFFdkQ7SUFDUyxHQUFHO0lBQ1o7SUFDUyxRQUFRO0lBRWpCO0lBQ0U7SUFDUyxRQUFnQixFQUN6QixFQUFpQixFQUNqQixPQUF1QjtRQUZkLGFBQVEsR0FBUixRQUFRO1FBSWpCLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRTtRQUNiLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTztJQUN6QjtJQUVBOzs7Ozs7OztJQVFBLFlBQVksQ0FBQyxLQUFZO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFhO1FBQ2pELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUVsRCxNQUFNLEtBQUssR0FBYyxFQUFFO1FBQzNCLEtBQUssTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxZQUFZLEVBQUU7WUFDMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUM7WUFDdkMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDbEI7UUFFQSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3pEO0lBRUE7Ozs7Ozs7OztJQVNBLGNBQWMsQ0FBQyxLQUFZO1FBQ3pCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUMzQyxJQUFJLENBQUMsS0FBSztZQUFFO1FBRVosS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO1lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDO1FBQ2xDO1FBQ0EsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ2xDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyIuLi9zcmMvZGVyaXZlZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlcml2ZWRGYWN0UHJvZHVjdGlvbiDigJQgYHRoZW5GaW5hbGx5YCBlcXVpdmFsZW50IHdpdGggdHJ1dGggbWFpbnRlbmFuY2UuXG4gKlxuICogUGVyIGBwYWNrYWdlcy9yZXRlL1NQRUMubWQgwqdUcnV0aCBNYWludGVuYW5jZWAgYW5kIMKnUmV0ZSBJSSBSZWZlcmVuY2VcbiAqIFRhcmdldCwgYSBgRGVyaXZlZEZhY3RQcm9kdWN0aW9uYCBpcyBhIHRlcm1pbmFsIG5vZGUgdGhhdCB0dXJucyBmdWxsXG4gKiBtYXRjaGVzIGludG8gbWF0ZXJpYWxpc2VkIEVBViBmYWN0cyBpbiB3b3JraW5nIG1lbW9yeS4gSXQgZGlmZmVycyBmcm9tXG4gKiB7QGxpbmsgUHJvZHVjdGlvbk5vZGV9IGluIHR3byB3YXlzOlxuICpcbiAqIDEuIEl0IGRvZXMgbm90IG1lcmVseSByZWNvcmQgbWF0Y2hlcyDigJQgaXQgKmFzc2VydHMgbmV3IGZhY3RzKiBjb21wdXRlZFxuICogICAgZnJvbSB0aGUgbWF0Y2gncyB2YXJpYWJsZSBiaW5kaW5ncy4gVGhvc2UgZmFjdHMgYXJlIGluZGlzdGluZ3Vpc2hhYmxlXG4gKiAgICBmcm9tIHVzZXItYXNzZXJ0ZWQgZmFjdHMgdG8gdGhlIHJlc3Qgb2YgdGhlIFJldGUgbmV0d29yaywgd2hpY2ggbWVhbnNcbiAqICAgIHRoZXkgY2FuIHBhcnRpY2lwYXRlIGluIGZ1cnRoZXIgbWF0Y2hlcyAoY2hhaW5lZCBpbmZlcmVuY2UpLlxuICpcbiAqIDIuIFRoZSBhc3NlcnRlZCBmYWN0cyBhcmUgdGllZCB0byB0aGUgbGlmZS1jeWNsZSBvZiB0aGUgc3VwcG9ydGluZyBtYXRjaC5cbiAqICAgIFdoZW4gdGhlIG1hdGNoIGlzIHdpdGhkcmF3biAoYGxlZnREZWFjdGl2YXRlYCksIHRoZSBmYWN0cyBpdCBwcm9kdWNlZFxuICogICAgYXJlIHJldHJhY3RlZCBhdXRvbWF0aWNhbGx5LiBUaGlzIGlzIHRoZSBcInRydXRoIG1haW50ZW5hbmNlXCIgY29udHJhY3Q6XG4gKiAgICBkb3duc3RyZWFtIHJ1bGVzIHNlZSBhIGRlcml2ZWQgZmFjdCBpZiBhbmQgb25seSBpZiBpdHMgc3VwcG9ydGluZ1xuICogICAgbWF0Y2ggaXMgY3VycmVudGx5IGFjdGl2ZS5cbiAqXG4gKiBEZXJpdmVkIGZhY3RzIHVzZSAqKm5lZ2F0aXZlIHtAbGluayBFbnRpdHlJZH1zKiogbWludGVkIGZyb20gYW4gaW50ZXJuYWxcbiAqIHBlci1ub2RlIGNvdW50ZXIgKGAtMWAsIGAtMmAsIC4uLikuIFBlciBTUEVDIMKnSUQgQXV0aG9yaXR5IHVzZXItbWludGVkIGlkc1xuICogdmlhIGBTZXNzaW9uLm5leHRJZCgpYCBhcmUgc3RyaWN0bHkgcG9zaXRpdmUsIHNvIHRoZSBzaWduIG9mIHRoZSBpZCBpcyBhXG4gKiBjb21waWxlLWZyZWUgd2F5IHRvIHRlbGwgZGVyaXZlZCBmYWN0cyBhcGFydCBmcm9tIHVzZXIgZmFjdHMgd2l0aG91dFxuICogbmVlZGluZyBhIHNpZGVjYXIgcmVnaXN0cnkuXG4gKlxuICogVGhlIGhhbmRsZXIgcmVjZWl2ZXMgdGhlIG1hdGNoJ3Mge0BsaW5rIEJpbmRpbmdzfSBhbmQgcmV0dXJucyB0aGUgbGlzdCBvZlxuICogYChhdHRyLCB2YWx1ZSlgIHBhaXJzIHRvIGFzc2VydCB1bmRlciB0aGUgZGVyaXZlZCBpZC4gUmV0dXJuaW5nIGFuIGVtcHR5XG4gKiBhcnJheSBpcyBsZWdhbCDigJQgaXQgcmVjb3JkcyB0aGUgYWN0aXZhdGlvbiAoc28gbGF0ZXIgZGVhY3RpdmF0aW9uIGlzIGFcbiAqIGNsZWFuIG5vLW9wKSB3aXRob3V0IG11dGF0aW5nIHdvcmtpbmcgbWVtb3J5LlxuICpcbiAqIFRoZSBoYW5kbGVyIGlzIGludm9rZWQgKipvbmx5IG9uIGFjdGl2YXRlKiosIG5ldmVyIG9uIGRlYWN0aXZhdGUuIE9uXG4gKiBkZWFjdGl2YXRlIHdlIHJldHJhY3QgdGhlIGV4YWN0IGF0dHJzIHByZXZpb3VzbHkgYXNzZXJ0ZWQgZm9yIHRoYXQgdG9rZW4sXG4gKiB3aGljaCBpcyBzdG9yZWQgb24gYWN0aXZhdGlvbi4gVGhpcyBhdm9pZHMgcmUtcnVubmluZyB1c2VyIGNvZGUgZHVyaW5nXG4gKiByZXRyYWN0aW9uIOKAlCBpbXBvcnRhbnQgYmVjYXVzZSByZXRyYWN0aW9uIGhhcHBlbnMgZHVyaW5nIGZhY3QtcmVtb3ZhbFxuICogY2FzY2FkZXMgd2hlcmUgcmUtZW50ZXJpbmcgdGhlIGhhbmRsZXIgY291bGQgcHJvZHVjZSBhIGRpZmZlcmVudCBvdXRwdXRcbiAqIHRoYW4gdGhlIG9uZSB0aGF0IHdhcyBvcmlnaW5hbGx5IGFzc2VydGVkIChlLmcuIGlmIHRoZSBoYW5kbGVyIHJlYWRzXG4gKiBvdGhlciB3b3JraW5nLW1lbW9yeSBzdGF0ZSkuXG4gKi9cbmltcG9ydCB0eXBlIHsgRW50aXR5SWQgfSBmcm9tIFwiLi9zY2hlbWEuanNcIjtcbmltcG9ydCB0eXBlIHsgQXR0cktleSwgRmFjdFZhbHVlLCBXb3JraW5nTWVtb3J5IH0gZnJvbSBcIi4vd20uanNcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ3MsIFRva2VuIH0gZnJvbSBcIi4vYmV0YS5qc1wiO1xuXG4vKipcbiAqIEEgc2luZ2xlIGAoYXR0ciwgdmFsdWUpYCBwYWlyIHByb2R1Y2VkIGJ5IGEge0BsaW5rIERlcml2ZWRIYW5kbGVyfS5cbiAqXG4gKiBUaGUgZW50aXR5IGlkIGlzIHN1cHBsaWVkIGJ5IHRoZSB7QGxpbmsgRGVyaXZlZEZhY3RQcm9kdWN0aW9ufSBpdHNlbGZcbiAqIChkZXJpdmVkIGZhY3RzIGFyZSBtaW50ZWQgd2l0aCBuZWdhdGl2ZSBpZHMpLCBzbyB0aGUgaGFuZGxlciBvbmx5IHJldHVybnNcbiAqIHRoZSBhdHRyaWJ1dGUtYW5kLXZhbHVlIGhhbGYgb2YgdGhlIHRyaXBsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXJpdmVkRmFjdCB7XG4gIHJlYWRvbmx5IGF0dHI6IEF0dHJLZXk7XG4gIHJlYWRvbmx5IHZhbHVlOiBGYWN0VmFsdWU7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGRlcml2ZWQgZmFjdHMgdG8gYXNzZXJ0IGZvciBhIHNpbmdsZSBmdWxsIG1hdGNoLlxuICpcbiAqIEludm9rZWQgYnkge0BsaW5rIERlcml2ZWRGYWN0UHJvZHVjdGlvbi5sZWZ0QWN0aXZhdGV9IHdpdGggdGhlIG1hdGNoJ3NcbiAqIGFjY3VtdWxhdGVkIHtAbGluayBCaW5kaW5nc30uIFJldHVybmluZyBhbiBlbXB0eSBhcnJheSBpcyB2YWxpZCBhbmQgbWVhbnNcbiAqIFwidGhpcyBtYXRjaCBjb250cmlidXRlcyBubyBkZXJpdmVkIGZhY3RzXCI7IHRoZSBhY3RpdmF0aW9uIGlzIHN0aWxsXG4gKiByZWNvcmRlZCBzbyBhIGxhdGVyIHtAbGluayBEZXJpdmVkRmFjdFByb2R1Y3Rpb24ubGVmdERlYWN0aXZhdGV9IGlzIGFcbiAqIGNsZWFuIG5vLW9wLlxuICovXG5leHBvcnQgdHlwZSBEZXJpdmVkSGFuZGxlciA9IChiaW5kaW5nczogQmluZGluZ3MpID0+IHJlYWRvbmx5IERlcml2ZWRGYWN0W107XG5cbi8qKlxuICogUGVyLXRva2VuIHJlY29yZCBvZiB3aGF0IHdhcyBhc3NlcnRlZCBzbyBpdCBjYW4gYmUgcmV0cmFjdGVkIGxhdGVyLlxuICpcbiAqIGBhdHRyc2AgaXMgdGhlIGxpc3Qgb2YgYXR0cmlidXRlIG5hbWVzIGFzc2VydGVkIHVuZGVyIGBpZGA7IGl0IGlzIHN0b3JlZFxuICog4oCUIHJhdGhlciB0aGFuIHJlLWRlcml2ZWQgZnJvbSB0aGUgaGFuZGxlciBvbiBkZWFjdGl2YXRpb24g4oCUIHNvIHRoYXRcbiAqIHJldHJhY3Rpb24gcmVtYWlucyBkZXRlcm1pbmlzdGljIGV2ZW4gaWYgdGhlIGhhbmRsZXIgaXMgbm9uLWlkZW1wb3RlbnRcbiAqIChlLmcuIHJlYWRzIHdvcmtpbmctbWVtb3J5IHN0YXRlIHRoYXQgaGFzIHNpbmNlIGNoYW5nZWQpLlxuICovXG5pbnRlcmZhY2UgRGVyaXZlZEVudHJ5IHtcbiAgcmVhZG9ubHkgaWQ6IEVudGl0eUlkO1xuICByZWFkb25seSBhdHRyczogcmVhZG9ubHkgQXR0cktleVtdO1xufVxuXG4vKipcbiAqIFRlcm1pbmFsIFJldGUgbm9kZSB0aGF0IG1hdGVyaWFsaXNlcyBkZXJpdmVkIGZhY3RzIGZyb20gZnVsbCBtYXRjaGVzLlxuICpcbiAqIFdpcmluZzogc3Vic2NyaWJlIHRoaXMgbm9kZSB0byB0aGUgZmluYWwge0BsaW5rIEJldGFNZW1vcnl9IChvciBmaWx0ZXJcbiAqIG5vZGUpIG9mIGEgcnVsZSB2aWEgYGFkZERvd25zdHJlYW1BY3RpdmF0ZShwcm9kLmxlZnRBY3RpdmF0ZS5iaW5kKHByb2QpKWBcbiAqIGFuZCBgYWRkRG93bnN0cmVhbURlYWN0aXZhdGUocHJvZC5sZWZ0RGVhY3RpdmF0ZS5iaW5kKHByb2QpKWAuXG4gKlxuICogQ29uY3VycmVuY3k6IGFjdGl2YXRpb25zIGFuZCBkZWFjdGl2YXRpb25zIGFyZSBleHBlY3RlZCB0byBiZSBzZXJpYWxpc2VkXG4gKiBieSB0aGUgc3Vycm91bmRpbmcge0BsaW5rIFNlc3Npb24uZmlyZVJ1bGVzfSBsb29wOyBubyBpbnRlcm5hbCBsb2NraW5nLlxuICovXG5leHBvcnQgY2xhc3MgRGVyaXZlZEZhY3RQcm9kdWN0aW9uIHtcbiAgLyoqXG4gICAqIE1vbm90b25pY2FsbHkgZGVjcmVhc2luZyBjb3VudGVyIHVzZWQgdG8gbWludCBuZWdhdGl2ZSBlbnRpdHkgaWRzIGZvclxuICAgKiBkZXJpdmVkIGZhY3RzLiBTdGFydHMgYXQgYDBgIGFuZCBpcyBwcmUtZGVjcmVtZW50ZWQgb24gZWFjaCBhY3RpdmF0aW9uLFxuICAgKiB5aWVsZGluZyBgLTEsIC0yLCAtMywgLi4uYC4gU2NvcGVkIHBlciBub2RlIHNvIGRpZmZlcmVudCBwcm9kdWN0aW9ucyBkb1xuICAgKiBub3QgY29sbGlkZSBvbiBpZHMgaW4gYW55IGV4dGVybmFsbHktb2JzZXJ2YWJsZSB3YXkgKHRoZSBpZHMgYXJlIG9wYXF1ZVxuICAgKiB0byBjb25zdW1lcnM7IG9ubHkgdGhlIHNpZ24gaXMgbWVhbmluZ2Z1bCkuXG4gICAqL1xuICAjaWRDb3VudGVyID0gMDtcblxuICAvKipcbiAgICogTWFwIGZyb20gdGhlIGFjdGl2YXRpbmcge0BsaW5rIFRva2VufSByZWZlcmVuY2UgdG8gdGhlIHJlY29yZCBvZiBmYWN0c1xuICAgKiBhc3NlcnRlZCBmb3IgaXQuIEtleWVkIGJ5IHJlZmVyZW5jZSDigJQgbWF0Y2hpbmcge0BsaW5rIEJldGFNZW1vcnl9J3NcbiAgICogaWRlbnRpdHktYmFzZWQgdG9rZW4gc2VtYW50aWNzIOKAlCBzbyBgbGVmdERlYWN0aXZhdGVgIGNhbiBmaW5kIHRoZVxuICAgKiBleGFjdCBlbnRyeSB0byByZXRyYWN0IHdpdGhvdXQgc3RydWN0dXJhbCBjb21wYXJpc29uLlxuICAgKi9cbiAgcmVhZG9ubHkgI3Rva2VuVG9FbnRyeSA9IG5ldyBNYXA8VG9rZW4sIERlcml2ZWRFbnRyeT4oKTtcblxuICAvKiogV29ya2luZyBtZW1vcnkgaW50byB3aGljaCBkZXJpdmVkIGZhY3RzIGFyZSBhc3NlcnRlZCBhbmQgcmV0cmFjdGVkLiAqL1xuICByZWFkb25seSAjd206IFdvcmtpbmdNZW1vcnk7XG4gIC8qKiBDb21wdXRlcyBkZXJpdmVkIGZhY3RzIGZyb20gYSBtYXRjaCdzIGJpbmRpbmdzLiAqL1xuICByZWFkb25seSAjaGFuZGxlcjogRGVyaXZlZEhhbmRsZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgLyoqIEh1bWFuLXJlYWRhYmxlIHJ1bGUgbmFtZSwgc3VyZmFjZWQgaW4gZGlhZ25vc3RpY3MuICovXG4gICAgcmVhZG9ubHkgcnVsZU5hbWU6IHN0cmluZyxcbiAgICB3bTogV29ya2luZ01lbW9yeSxcbiAgICBoYW5kbGVyOiBEZXJpdmVkSGFuZGxlcixcbiAgKSB7XG4gICAgdGhpcy4jd20gPSB3bTtcbiAgICB0aGlzLiNoYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY2NlcHQgYSBuZXcgZnVsbCBtYXRjaCBhbmQgYXNzZXJ0IGl0cyBkZXJpdmVkIGZhY3RzLlxuICAgKlxuICAgKiBNaW50cyBhIGZyZXNoIG5lZ2F0aXZlIGVudGl0eSBpZCwgaW52b2tlcyB0aGUgaGFuZGxlciB3aXRoIHRoZSB0b2tlbidzXG4gICAqIGJpbmRpbmdzLCBhbmQgaW5zZXJ0cyBlYWNoIHJldHVybmVkIGAoYXR0ciwgdmFsdWUpYCBwYWlyIGludG8gd29ya2luZ1xuICAgKiBtZW1vcnkgdW5kZXIgdGhhdCBpZC4gUmVjb3JkcyB0aGUgbGlzdCBvZiBhdHRycyBvbiB0aGUgdG9rZW4gc28gYVxuICAgKiBmdXR1cmUge0BsaW5rIGxlZnREZWFjdGl2YXRlfSBjYW4gcmV0cmFjdCBleGFjdGx5IHRob3NlIGZhY3RzLlxuICAgKi9cbiAgbGVmdEFjdGl2YXRlKHRva2VuOiBUb2tlbik6IHZvaWQge1xuICAgIGNvbnN0IGRlcml2ZWRJZCA9ICgtLXRoaXMuI2lkQ291bnRlcikgYXMgRW50aXR5SWQ7XG4gICAgY29uc3QgZGVyaXZlZEZhY3RzID0gdGhpcy4jaGFuZGxlcih0b2tlbi5iaW5kaW5ncyk7XG5cbiAgICBjb25zdCBhdHRyczogQXR0cktleVtdID0gW107XG4gICAgZm9yIChjb25zdCB7IGF0dHIsIHZhbHVlIH0gb2YgZGVyaXZlZEZhY3RzKSB7XG4gICAgICB0aGlzLiN3bS5pbnNlcnQoZGVyaXZlZElkLCBhdHRyLCB2YWx1ZSk7XG4gICAgICBhdHRycy5wdXNoKGF0dHIpO1xuICAgIH1cblxuICAgIHRoaXMuI3Rva2VuVG9FbnRyeS5zZXQodG9rZW4sIHsgaWQ6IGRlcml2ZWRJZCwgYXR0cnMgfSk7XG4gIH1cblxuICAvKipcbiAgICogV2l0aGRyYXcgYSBwcmV2aW91c2x5LWFjY2VwdGVkIG1hdGNoIGFuZCByZXRyYWN0IGl0cyBkZXJpdmVkIGZhY3RzLlxuICAgKlxuICAgKiBSZXRyYWN0cyBlYWNoIGF0dHIgdGhhdCB3YXMgYXNzZXJ0ZWQgb24gYWN0aXZhdGlvbiDigJQgbm90IHJlLWRlcml2ZWRcbiAgICogZnJvbSB0aGUgaGFuZGxlciwgc2VlIG1vZHVsZSBoZWFkZXIgZm9yIHJhdGlvbmFsZS4gVW5rbm93biB0b2tlbnMgYXJlXG4gICAqIGEgbm8tb3A6IHVwc3RyZWFtIG1lbW9yaWVzIGJyb2FkY2FzdCBkZWFjdGl2YXRpb25zIHRvIGFsbCBzdWJzY3JpYmVycyxcbiAgICogYW5kIGEgcHJvZHVjdGlvbiB0aGF0IG5ldmVyIHNhdyBhIGdpdmVuIHRva2VuIG11c3Qgc2ltcGx5IGlnbm9yZSBpdFxuICAgKiAobWF0Y2hpbmcge0BsaW5rIEJldGFNZW1vcnkubGVmdERlYWN0aXZhdGV9IC8ge0BsaW5rIFByb2R1Y3Rpb25Ob2RlLmxlZnREZWFjdGl2YXRlfSkuXG4gICAqL1xuICBsZWZ0RGVhY3RpdmF0ZSh0b2tlbjogVG9rZW4pOiB2b2lkIHtcbiAgICBjb25zdCBlbnRyeSA9IHRoaXMuI3Rva2VuVG9FbnRyeS5nZXQodG9rZW4pO1xuICAgIGlmICghZW50cnkpIHJldHVybjtcblxuICAgIGZvciAoY29uc3QgYXR0ciBvZiBlbnRyeS5hdHRycykge1xuICAgICAgdGhpcy4jd20ucmV0cmFjdChlbnRyeS5pZCwgYXR0cik7XG4gICAgfVxuICAgIHRoaXMuI3Rva2VuVG9FbnRyeS5kZWxldGUodG9rZW4pO1xuICB9XG59XG4iXSwiZmlsZSI6Ii9ob21lL2pvZXkvUHJvamVjdHMvcnVsZXMvcGFja2FnZXMvcmV0ZS9kaXN0L2Rlcml2ZWQuanMifQ== diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/f4d5266287bda20e716467172dcce63b8ef341d6 b/KMr2_dqTOvh2R-Vg1E6cO/ssr/f4d5266287bda20e716467172dcce63b8ef341d6 deleted file mode 100644 index f4a1425..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/f4d5266287bda20e716467172dcce63b8ef341d6 +++ /dev/null @@ -1,75 +0,0 @@ -Object.defineProperty(__vite_ssr_exports__, "ReconnectManager", { enumerable: true, configurable: true, get(){ try { return ReconnectManager } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "reconnectManager", { enumerable: true, configurable: true, get(){ try { return reconnectManager } catch {} }}); -Object.defineProperty(__vite_ssr_exports__, "DEFAULT_GRACE_MS", { enumerable: true, configurable: true, get(){ try { return DEFAULT_GRACE_MS } catch {} }}); -class ReconnectManager { - // token → pending entry. A Map keyed on the secret token keeps lookups - // O(1) and avoids a secondary index; tokens are UUIDs so there is no - // collision concern across rooms. - pending = /* @__PURE__ */ new Map(); - /** - * Start a grace window for `token`. If the client doesn't reconnect - * before `gracePeriodMs` elapses, `onExpire` runs and the token is - * forgotten. - * - * Calling `startGrace` twice for the same token is a programming - * error (the previous timer would leak); we clear the existing timer - * defensively so a buggy caller cannot accumulate zombie timeouts. - */ - startGrace(token, gracePeriodMs, onExpire) { - const existing = this.pending.get(token); - if (existing) { - clearTimeout(existing.timer); - }; - const timer = setTimeout(() => { - this.pending.delete(token); - onExpire(); - }, gracePeriodMs); - if (typeof timer.unref === "function") { - timer.unref(); - }; - this.pending.set(token, { timer, deltas: [], onExpire }); - } - /** - * Append a frame to the buffer for `token` iff a grace window is - * active. Silently no-ops when no window is pending — callers can - * call unconditionally without guarding with `isPending`. - */ - bufferDelta(token, seq, payload) { - const entry = this.pending.get(token); - if (!entry) return; - entry.deltas.push({ seq, payload }); - } - /** - * Cancel a pending grace window because the client reconnected. - * Returns the accumulated deltas (possibly empty) so the caller can - * replay them. Returns `undefined` if no window was pending — that - * signals "this is a fresh join, not a reconnect" to broadcast.ts. - */ - cancelGrace(token) { - const entry = this.pending.get(token); - if (!entry) return void 0; - clearTimeout(entry.timer); - this.pending.delete(token); - return entry.deltas; - } - /** True iff a grace window is currently active for `token`. */ - isPending(token) { - return this.pending.has(token); - } - /** - * Diagnostics/teardown only. Stops every outstanding timer without - * invoking the associated onExpire callbacks. Tests use this to keep - * the process-global manager clean between runs. - */ - clearAll() { - for (const entry of this.pending.values()) { - clearTimeout(entry.timer); - }; - this.pending.clear(); - } -}; -const reconnectManager = new ReconnectManager(); -const DEFAULT_GRACE_MS = 6e4; - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7O0FBK0NPLE1BQU0saUJBQWlCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJWCxVQUFVLG9CQUFJLElBQTBCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFXekQsV0FDRSxPQUNBLGVBQ0EsVUFDTTtBQUVOLFVBQU0sV0FBVyxLQUFLLFFBQVEsSUFBSSxLQUFLO0FBQ3ZDLFFBQUksVUFBVTtBQUNaLG1CQUFhLFNBQVMsS0FBSztBQUFBLElBQzdCO0FBQ0EsVUFBTSxRQUFRLFdBQVcsTUFBTTtBQUk3QixXQUFLLFFBQVEsT0FBTyxLQUFLO0FBQ3pCLGVBQVM7QUFBQSxJQUNYLEdBQUcsYUFBYTtBQUtoQixRQUFJLE9BQVEsTUFBaUMsVUFBVSxZQUFZO0FBQ2pFLE1BQUMsTUFBZ0MsTUFBTTtBQUFBLElBQ3pDO0FBQ0EsU0FBSyxRQUFRLElBQUksT0FBTyxFQUFFLE9BQU8sUUFBUSxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQUEsRUFDekQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxZQUFZLE9BQWUsS0FBYSxTQUF1QjtBQUM3RCxVQUFNLFFBQVEsS0FBSyxRQUFRLElBQUksS0FBSztBQUNwQyxRQUFJLENBQUMsTUFBTztBQUNaLFVBQU0sT0FBTyxLQUFLLEVBQUUsS0FBSyxRQUFRLENBQUM7QUFBQSxFQUNwQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsWUFBWSxPQUEwQztBQUNwRCxVQUFNLFFBQVEsS0FBSyxRQUFRLElBQUksS0FBSztBQUNwQyxRQUFJLENBQUMsTUFBTyxRQUFPO0FBQ25CLGlCQUFhLE1BQU0sS0FBSztBQUN4QixTQUFLLFFBQVEsT0FBTyxLQUFLO0FBQ3pCLFdBQU8sTUFBTTtBQUFBLEVBQ2Y7QUFBQTtBQUFBLEVBR0EsVUFBVSxPQUF3QjtBQUNoQyxXQUFPLEtBQUssUUFBUSxJQUFJLEtBQUs7QUFBQSxFQUMvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLFdBQWlCO0FBQ2YsZUFBVyxTQUFTLEtBQUssUUFBUSxPQUFPLEdBQUc7QUFDekMsbUJBQWEsTUFBTSxLQUFLO0FBQUEsSUFDMUI7QUFDQSxTQUFLLFFBQVEsTUFBTTtBQUFBLEVBQ3JCO0FBQ0Y7QUFPTyxNQUFNLG1CQUFtQixJQUFJLGlCQUFpQjtBQUc5QyxNQUFNLG1CQUFtQiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsicmVjb25uZWN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFJlY29ubmVjdGlvbiBncmFjZS13aW5kb3cgbWFuYWdlciAoUDQuNykuXG4vL1xuLy8gV2hlbiBhIHBsYXllcidzIHNvY2tldCBkcm9wcywgdGhlaXIgcm9vbSBzbG90IGlzIGhlbGQgZm9yIGEgYm91bmRlZFxuLy8gZ3JhY2UgcGVyaW9kIChkZWZhdWx0IDYwcyBwZXIgUFJPVE9DT0wubWQpLiBEdXJpbmcgdGhhdCB3aW5kb3cgd2U6XG4vLyAgIDEuIEtlZXAgdGhlIFJvb21QbGF5ZXIgZW50cnkgYWxpdmUgKG1hcmtlZCBkaXNjb25uZWN0ZWQgdmlhXG4vLyAgICAgIFJvb21SZWdpc3RyeS5tYXJrRGlzY29ubmVjdGVkIOKAlCBkb25lIGJ5IHRoZSBjYWxsZXIpLlxuLy8gICAyLiBCdWZmZXIgZXZlcnkgYGdhbWUuZGVsdGFgIGRlc3RpbmVkIGZvciB0aGF0IHNsb3QsIGtleWVkIGJ5IHRoZVxuLy8gICAgICBzbG90J3MgYXV0aGVudGljYXRpb24gdG9rZW4sIHNvIHRoZSBjbGllbnQgY2FuIHJlcGxheSB0aGVtIG9uXG4vLyAgICAgIHJlY29ubmVjdCBpbiBleGFjdCBzZXJ2ZXIgb3JkZXIuXG4vLyAgIDMuIElmIHRoZSB0aW1lciBmaXJlcyB3aXRob3V0IGEgcmVjb25uZWN0LCBpbnZva2UgdGhlIGNhbGxlcidzXG4vLyAgICAgIG9uRXhwaXJlIGNhbGxiYWNrIHNvIGJyb2FkY2FzdC50cyBjYW4gdGVhciB0aGUgcm9vbSBkb3duIChzZW5kXG4vLyAgICAgIGdhbWUuZW5kIHRvIHRoZSBvcHBvbmVudCwgZHJvcCB0aGUgc2Vzc2lvbiwgZXRjLikuXG4vL1xuLy8gVGhlIG1hbmFnZXIgaXMgZGVsaWJlcmF0ZWx5IHN0b3JhZ2Utb25seTogaXQgaG9sZHMgbm8gcmVmZXJlbmNlcyB0b1xuLy8gV2ViU29ja2V0cywgUm9vbVJlZ2lzdHJ5LCBvciBHYW1lU2Vzc2lvblJlZ2lzdHJ5LiBBbGwgcm9vbS1sZXZlbFxuLy8gYm9va2tlZXBpbmcgKGJyb2FkY2FzdGluZyBnYW1lLmVuZCBvbiBleHBpcnksIHB1cmdpbmcgdGhlIHNlc3Npb24pXG4vLyBsaXZlcyBpbiBicm9hZGNhc3QudHMgdmlhIHRoZSBvbkV4cGlyZSBjbG9zdXJlLiBUaGF0IGtlZXBzIHRoaXNcbi8vIG1vZHVsZSBmcmVlIG9mIHNlcnZlci13aWRlIHNpZGUgZWZmZWN0cyBhbmQgdHJpdmlhbGx5IHRlc3RhYmxlLlxuLy9cbi8vIHYxIHNjb3BlIChwZXIgc3BlYyk6IHdlIGRvIE5PVCBpbXBsZW1lbnQgdGhlIFwib3RoZXIgcGxheWVyIGNvbnRpbnVlc1xuLy8gcGxheWluZyBhZ2FpbnN0IHRoZW1zZWx2ZXNcIiBlZGdlIGNhc2UuIFdlIHNpbXBseSBidWZmZXIgd2hhdGV2ZXJcbi8vIGRlbHRhcyB0aGUgZ2FtZSBwcm9kdWNlcyB3aGlsZSBhIHNsb3QgaXMgYWJzZW50IGFuZCByZXBsYXkgdGhlbSBvblxuLy8gcmVjb25uZWN0LiBJZiB0aGUgb3Bwb25lbnQgcGxheXMgbXVsdGlwbGUgbW92ZXMgZHVyaW5nIHRoZSBncmFjZVxuLy8gd2luZG93LCB0aGUgcmVjb25uZWN0aW5nIGNsaWVudCByZWNlaXZlcyB0aGVtIGFsbCBpbiBvcmRlci5cblxuLyoqIEEgc2luZ2xlIGJ1ZmZlcmVkIHNlcnZlciBmcmFtZSBkZXN0aW5lZCBmb3IgYSBkaXNjb25uZWN0ZWQgc2xvdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWlzc2VkRGVsdGEge1xuICAvKiogVGhlIGBzZXFgIHRoZSBmcmFtZSB3YXMgYXNzaWduZWQgYXQgYnJvYWRjYXN0IHRpbWUuICovXG4gIHNlcTogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGBnYW1lLmRlbHRhYCBwYXlsb2FkIGJvZHkgKGluc2VydGVkL3JldHJhY3RlZC9tb3ZlTm90YXRpb24v4oCmKS5cbiAgICogU3RvcmVkIGFzIGBvYmplY3RgIOKAlCB3ZSBkb24ndCBuZWVkIHRvIHJlLXBhcnNlIGl0IGFuZCB0aGUgY2FsbGVyXG4gICAqIGFscmVhZHkgYnVpbHQgaXQgZnJvbSB0eXBlZCBkYXRhLlxuICAgKi9cbiAgcGF5bG9hZDogb2JqZWN0O1xufVxuXG5pbnRlcmZhY2UgUGVuZGluZ0VudHJ5IHtcbiAgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuICBkZWx0YXM6IE1pc3NlZERlbHRhW107XG4gIC8qKlxuICAgKiBDYXB0dXJlZCBzbyBhbiBleHRlcm5hbCBjYWxsZXIgY2FuIGZvcmNlIGV4cGlyeSAobm90IGN1cnJlbnRseVxuICAgKiB1c2VkLCBidXQga2VlcHMgdGhlIEFQSSBzeW1tZXRyaWNhbCBhbmQgbWFrZXMgY2xlYW51cCBleHBsaWNpdCkuXG4gICAqL1xuICBvbkV4cGlyZTogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIFJlY29ubmVjdE1hbmFnZXIge1xuICAvLyB0b2tlbiDihpIgcGVuZGluZyBlbnRyeS4gQSBNYXAga2V5ZWQgb24gdGhlIHNlY3JldCB0b2tlbiBrZWVwcyBsb29rdXBzXG4gIC8vIE8oMSkgYW5kIGF2b2lkcyBhIHNlY29uZGFyeSBpbmRleDsgdG9rZW5zIGFyZSBVVUlEcyBzbyB0aGVyZSBpcyBub1xuICAvLyBjb2xsaXNpb24gY29uY2VybiBhY3Jvc3Mgcm9vbXMuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGVuZGluZyA9IG5ldyBNYXA8c3RyaW5nLCBQZW5kaW5nRW50cnk+KCk7XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgZ3JhY2Ugd2luZG93IGZvciBgdG9rZW5gLiBJZiB0aGUgY2xpZW50IGRvZXNuJ3QgcmVjb25uZWN0XG4gICAqIGJlZm9yZSBgZ3JhY2VQZXJpb2RNc2AgZWxhcHNlcywgYG9uRXhwaXJlYCBydW5zIGFuZCB0aGUgdG9rZW4gaXNcbiAgICogZm9yZ290dGVuLlxuICAgKlxuICAgKiBDYWxsaW5nIGBzdGFydEdyYWNlYCB0d2ljZSBmb3IgdGhlIHNhbWUgdG9rZW4gaXMgYSBwcm9ncmFtbWluZ1xuICAgKiBlcnJvciAodGhlIHByZXZpb3VzIHRpbWVyIHdvdWxkIGxlYWspOyB3ZSBjbGVhciB0aGUgZXhpc3RpbmcgdGltZXJcbiAgICogZGVmZW5zaXZlbHkgc28gYSBidWdneSBjYWxsZXIgY2Fubm90IGFjY3VtdWxhdGUgem9tYmllIHRpbWVvdXRzLlxuICAgKi9cbiAgc3RhcnRHcmFjZShcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIGdyYWNlUGVyaW9kTXM6IG51bWJlcixcbiAgICBvbkV4cGlyZTogKCkgPT4gdm9pZCxcbiAgKTogdm9pZCB7XG4gICAgLy8gRGVmZW5zaXZlOiByZXBsYWNlIGFueSBleGlzdGluZyBlbnRyeSBzbyB3ZSBuZXZlciBsZWFrIHRpbWVycy5cbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMucGVuZGluZy5nZXQodG9rZW4pO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgY2xlYXJUaW1lb3V0KGV4aXN0aW5nLnRpbWVyKTtcbiAgICB9XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIFJlbW92ZSBiZWZvcmUgaW52b2tpbmcgdGhlIGNhbGxiYWNrIHNvIG9uRXhwaXJlIG9ic2VydmluZ1xuICAgICAgLy8gYGlzUGVuZGluZ2Agc2VlcyBgZmFsc2VgIOKAlCByZWZsZWN0cyB0aGUgZmFjdCB0aGF0IHRoZSBncmFjZVxuICAgICAgLy8gd2luZG93IGlzIG92ZXIgZnJvbSB0aGlzIG1hbmFnZXIncyBwZXJzcGVjdGl2ZS5cbiAgICAgIHRoaXMucGVuZGluZy5kZWxldGUodG9rZW4pO1xuICAgICAgb25FeHBpcmUoKTtcbiAgICB9LCBncmFjZVBlcmlvZE1zKTtcbiAgICAvLyBOb2RlJ3Mgc2V0VGltZW91dCByZXR1cm5zIGEgVGltZW91dCBvYmplY3Qgd2l0aCBhbiBgdW5yZWZgIG1ldGhvZDtcbiAgICAvLyBCdW4ncyB0aW1lciBpcyBjb21wYXRpYmxlLiBXZSB1bnJlZiBzbyBhIHBlbmRpbmcgZ3JhY2Ugd2luZG93XG4gICAgLy8gbmV2ZXIgYmxvY2tzIHByb2Nlc3Mgc2h1dGRvd24gaW4gdGVzdHMgdGhhdCBkb24ndCBleHBsaWNpdGx5XG4gICAgLy8gY2FuY2VsLiBUaGUgcnVudGltZSBmYWxsYmFjayBpcyBhIG5vLW9wIGlmIGB1bnJlZmAgaXMgYWJzZW50LlxuICAgIGlmICh0eXBlb2YgKHRpbWVyIGFzIHsgdW5yZWY/OiAoKSA9PiB2b2lkIH0pLnVucmVmID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICh0aW1lciBhcyB7IHVucmVmOiAoKSA9PiB2b2lkIH0pLnVucmVmKCk7XG4gICAgfVxuICAgIHRoaXMucGVuZGluZy5zZXQodG9rZW4sIHsgdGltZXIsIGRlbHRhczogW10sIG9uRXhwaXJlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGVuZCBhIGZyYW1lIHRvIHRoZSBidWZmZXIgZm9yIGB0b2tlbmAgaWZmIGEgZ3JhY2Ugd2luZG93IGlzXG4gICAqIGFjdGl2ZS4gU2lsZW50bHkgbm8tb3BzIHdoZW4gbm8gd2luZG93IGlzIHBlbmRpbmcg4oCUIGNhbGxlcnMgY2FuXG4gICAqIGNhbGwgdW5jb25kaXRpb25hbGx5IHdpdGhvdXQgZ3VhcmRpbmcgd2l0aCBgaXNQZW5kaW5nYC5cbiAgICovXG4gIGJ1ZmZlckRlbHRhKHRva2VuOiBzdHJpbmcsIHNlcTogbnVtYmVyLCBwYXlsb2FkOiBvYmplY3QpOiB2b2lkIHtcbiAgICBjb25zdCBlbnRyeSA9IHRoaXMucGVuZGluZy5nZXQodG9rZW4pO1xuICAgIGlmICghZW50cnkpIHJldHVybjtcbiAgICBlbnRyeS5kZWx0YXMucHVzaCh7IHNlcSwgcGF5bG9hZCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgYSBwZW5kaW5nIGdyYWNlIHdpbmRvdyBiZWNhdXNlIHRoZSBjbGllbnQgcmVjb25uZWN0ZWQuXG4gICAqIFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIGRlbHRhcyAocG9zc2libHkgZW1wdHkpIHNvIHRoZSBjYWxsZXIgY2FuXG4gICAqIHJlcGxheSB0aGVtLiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIG5vIHdpbmRvdyB3YXMgcGVuZGluZyDigJQgdGhhdFxuICAgKiBzaWduYWxzIFwidGhpcyBpcyBhIGZyZXNoIGpvaW4sIG5vdCBhIHJlY29ubmVjdFwiIHRvIGJyb2FkY2FzdC50cy5cbiAgICovXG4gIGNhbmNlbEdyYWNlKHRva2VuOiBzdHJpbmcpOiBNaXNzZWREZWx0YVtdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBlbnRyeSA9IHRoaXMucGVuZGluZy5nZXQodG9rZW4pO1xuICAgIGlmICghZW50cnkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY2xlYXJUaW1lb3V0KGVudHJ5LnRpbWVyKTtcbiAgICB0aGlzLnBlbmRpbmcuZGVsZXRlKHRva2VuKTtcbiAgICByZXR1cm4gZW50cnkuZGVsdGFzO1xuICB9XG5cbiAgLyoqIFRydWUgaWZmIGEgZ3JhY2Ugd2luZG93IGlzIGN1cnJlbnRseSBhY3RpdmUgZm9yIGB0b2tlbmAuICovXG4gIGlzUGVuZGluZyh0b2tlbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGVuZGluZy5oYXModG9rZW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIERpYWdub3N0aWNzL3RlYXJkb3duIG9ubHkuIFN0b3BzIGV2ZXJ5IG91dHN0YW5kaW5nIHRpbWVyIHdpdGhvdXRcbiAgICogaW52b2tpbmcgdGhlIGFzc29jaWF0ZWQgb25FeHBpcmUgY2FsbGJhY2tzLiBUZXN0cyB1c2UgdGhpcyB0byBrZWVwXG4gICAqIHRoZSBwcm9jZXNzLWdsb2JhbCBtYW5hZ2VyIGNsZWFuIGJldHdlZW4gcnVucy5cbiAgICovXG4gIGNsZWFyQWxsKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5wZW5kaW5nLnZhbHVlcygpKSB7XG4gICAgICBjbGVhclRpbWVvdXQoZW50cnkudGltZXIpO1xuICAgIH1cbiAgICB0aGlzLnBlbmRpbmcuY2xlYXIoKTtcbiAgfVxufVxuXG4vKipcbiAqIFByb2Nlc3MtZ2xvYmFsIG1hbmFnZXIgc2hhcmVkIGJ5IGJyb2FkY2FzdC50cy4gQSBzaW5nbGV0b24gbWF0Y2hlc1xuICogdGhlIHJlc3Qgb2YgdGhlIHNlcnZlciAocm9vbVJlZ2lzdHJ5LCBzZXNzaW9uUmVnaXN0cnkpIGFuZCBrZWVwcyB0aGVcbiAqIGdyYWNlIHN0YXRlIHJlc2lkZW50IGFjcm9zcyBhbGwgcm9vbXMgaW4gYSBzaW5nbGUgcHJvY2Vzcy5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlY29ubmVjdE1hbmFnZXIgPSBuZXcgUmVjb25uZWN0TWFuYWdlcigpO1xuXG4vKiogRGVmYXVsdCBncmFjZSB3aW5kb3cgbGVuZ3RoIOKAlCA2MCBzZWNvbmRzIHBlciBQUk9UT0NPTC5tZCDCp1JlY29ubmVjdC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0dSQUNFX01TID0gNjBfMDAwO1xuIl0sImZpbGUiOiIvc3JjL3JlY29ubmVjdC50cyJ9 diff --git a/KMr2_dqTOvh2R-Vg1E6cO/ssr/fc9ed36031d3cc653cb001f7b7c4b957f8674a3f b/KMr2_dqTOvh2R-Vg1E6cO/ssr/fc9ed36031d3cc653cb001f7b7c4b957f8674a3f deleted file mode 100644 index cd7e47a..0000000 --- a/KMr2_dqTOvh2R-Vg1E6cO/ssr/fc9ed36031d3cc653cb001f7b7c4b957f8674a3f +++ /dev/null @@ -1,180 +0,0 @@ -const __vite_ssr_import_0__ = await __vite_ssr_import__("vitest", {"importedNames":["describe","it","expect"]}); -const __vite_ssr_import_1__ = await __vite_ssr_import__("/src/game-session.ts", {"importedNames":["GameSession","GameSessionRegistry","diffFacts"]}); - - - - -(0,__vite_ssr_import_0__.describe)("GameSession — isolation & ID authority", () => { - (0,__vite_ssr_import_0__.it)("two sessions maintain independent state", () => { - const a = new __vite_ssr_import_1__.GameSession(); - const b = new __vite_ssr_import_1__.GameSession(); - const moved = a.applyMove("e2", "e4"); - (0,__vite_ssr_import_0__.expect)(moved.ok).toBe(true); - (0,__vite_ssr_import_0__.expect)(b.getTurn()).toBe("white"); - const bFacts = b.getAllFacts(); - const e2Pawn = bFacts.find( - (f) => f.attr === "Position" && f.value === 12 - // e2 = file 4 + rank 1*8 - ); - (0,__vite_ssr_import_0__.expect)(e2Pawn).toBeDefined(); - }); - (0,__vite_ssr_import_0__.it)("fact IDs are minted per session and do not collide with other sessions", () => { - const a = new __vite_ssr_import_1__.GameSession(); - const b = new __vite_ssr_import_1__.GameSession(); - const aIds = new Set(a.getAllFacts().map((f) => f.id)); - const bIds = new Set(b.getAllFacts().map((f) => f.id)); - (0,__vite_ssr_import_0__.expect)(aIds.size).toBeGreaterThan(0); - (0,__vite_ssr_import_0__.expect)(aIds).toEqual(bIds); - const bCountBefore = b.getAllFacts().length; - a.applyMove("e2", "e4"); - (0,__vite_ssr_import_0__.expect)(b.getAllFacts().length).toBe(bCountBefore); - (0,__vite_ssr_import_0__.expect)(a.getAllFacts().length).not.toBe(bCountBefore); - (0,__vite_ssr_import_0__.expect)(b.getTurn()).toBe("white"); - }); - (0,__vite_ssr_import_0__.it)("getAllFacts returns a defensive copy (mutation does not leak)", () => { - const s = new __vite_ssr_import_1__.GameSession(); - const before = s.getAllFacts(); - before.push({ id: 99999, attr: "Spoof", value: true }); - const after = s.getAllFacts(); - (0,__vite_ssr_import_0__.expect)(after.find((f) => f.attr === "Spoof")).toBeUndefined(); - }); -}); -(0,__vite_ssr_import_0__.describe)("GameSession.applyMove", () => { - (0,__vite_ssr_import_0__.it)("initial turn is white, black after one move", () => { - const s = new __vite_ssr_import_1__.GameSession(); - (0,__vite_ssr_import_0__.expect)(s.getTurn()).toBe("white"); - const r = s.applyMove("e2", "e4"); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(true); - (0,__vite_ssr_import_0__.expect)(s.getTurn()).toBe("black"); - if (r.ok) (0,__vite_ssr_import_0__.expect)(r.turn).toBe("black"); - }); - (0,__vite_ssr_import_0__.it)("legal move returns ok with non-empty inserted + retracted and no gameOver", () => { - const s = new __vite_ssr_import_1__.GameSession(); - const r = s.applyMove("e2", "e4"); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(true); - if (!r.ok) return; - (0,__vite_ssr_import_0__.expect)(r.inserted.length).toBeGreaterThan(0); - (0,__vite_ssr_import_0__.expect)(r.retracted.length).toBeGreaterThan(0); - (0,__vite_ssr_import_0__.expect)(r.gameOver).toBeNull(); - }); - (0,__vite_ssr_import_0__.it)("illegal move returns ok=false with ILLEGAL_MOVE", () => { - const s = new __vite_ssr_import_1__.GameSession(); - const r = s.applyMove("e2", "e5"); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - if (!r.ok) (0,__vite_ssr_import_0__.expect)(r.error).toBe("ILLEGAL_MOVE"); - (0,__vite_ssr_import_0__.expect)(s.getTurn()).toBe("white"); - }); - (0,__vite_ssr_import_0__.it)("malformed algebraic notation is rejected as ILLEGAL_MOVE", () => { - const s = new __vite_ssr_import_1__.GameSession(); - const r = s.applyMove("z9", "a1"); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(false); - if (!r.ok) (0,__vite_ssr_import_0__.expect)(r.error).toBe("ILLEGAL_MOVE"); - }); - (0,__vite_ssr_import_0__.it)("detects Fool's Mate and reports checkmate with white/black winner", () => { - const s = new __vite_ssr_import_1__.GameSession(); - const m1 = s.applyMove("f2", "f3"); - (0,__vite_ssr_import_0__.expect)(m1.ok).toBe(true); - const m2 = s.applyMove("e7", "e5"); - (0,__vite_ssr_import_0__.expect)(m2.ok).toBe(true); - const m3 = s.applyMove("g2", "g4"); - (0,__vite_ssr_import_0__.expect)(m3.ok).toBe(true); - const m4 = s.applyMove("d8", "h4"); - (0,__vite_ssr_import_0__.expect)(m4.ok).toBe(true); - if (!m4.ok) return; - (0,__vite_ssr_import_0__.expect)(m4.gameOver).not.toBeNull(); - (0,__vite_ssr_import_0__.expect)(m4.gameOver?.winner).toBe("black"); - (0,__vite_ssr_import_0__.expect)(m4.gameOver?.reason).toBe("checkmate"); - (0,__vite_ssr_import_0__.expect)(s.getGameOver()?.winner).toBe("black"); - }); - (0,__vite_ssr_import_0__.it)("refuses further moves after game is over", () => { - const s = new __vite_ssr_import_1__.GameSession(); - s.applyMove("f2", "f3"); - s.applyMove("e7", "e5"); - s.applyMove("g2", "g4"); - const mate = s.applyMove("d8", "h4"); - (0,__vite_ssr_import_0__.expect)(mate.ok).toBe(true); - const after = s.applyMove("a2", "a3"); - (0,__vite_ssr_import_0__.expect)(after.ok).toBe(false); - if (!after.ok) (0,__vite_ssr_import_0__.expect)(after.error).toBe("GAME_OVER"); - }); - (0,__vite_ssr_import_0__.it)("promoteTo is forwarded to the engine for underpromotion", () => { - const s = new __vite_ssr_import_1__.GameSession(); - const r = s.applyMove("e2", "e4", "knight"); - (0,__vite_ssr_import_0__.expect)(r.ok).toBe(true); - }); -}); -(0,__vite_ssr_import_0__.describe)("diffFacts", () => { - const f = (id, attr, value) => ({ - id, - attr, - value - }); - (0,__vite_ssr_import_0__.it)("returns empty sets for identical inputs", () => { - const prev = [f(1, "Color", "white"), f(1, "Position", 12)]; - const { inserted, retracted } = (0,__vite_ssr_import_1__.diffFacts)(prev, prev); - (0,__vite_ssr_import_0__.expect)(inserted).toEqual([]); - (0,__vite_ssr_import_0__.expect)(retracted).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("reports newly added facts as inserted", () => { - const prev = [f(1, "Color", "white")]; - const next = [f(1, "Color", "white"), f(1, "Position", 28)]; - const { inserted, retracted } = (0,__vite_ssr_import_1__.diffFacts)(prev, next); - (0,__vite_ssr_import_0__.expect)(inserted).toEqual([f(1, "Position", 28)]); - (0,__vite_ssr_import_0__.expect)(retracted).toEqual([]); - }); - (0,__vite_ssr_import_0__.it)("reports removed facts as retracted", () => { - const prev = [f(1, "Color", "white"), f(1, "Position", 12)]; - const next = [f(1, "Color", "white")]; - const { inserted, retracted } = (0,__vite_ssr_import_1__.diffFacts)(prev, next); - (0,__vite_ssr_import_0__.expect)(inserted).toEqual([]); - (0,__vite_ssr_import_0__.expect)(retracted).toEqual([f(1, "Position", 12)]); - }); - (0,__vite_ssr_import_0__.it)("treats value changes as retract+insert for the same (id, attr)", () => { - const prev = [f(1, "Position", 12)]; - const next = [f(1, "Position", 28)]; - const { inserted, retracted } = (0,__vite_ssr_import_1__.diffFacts)(prev, next); - (0,__vite_ssr_import_0__.expect)(inserted).toEqual([f(1, "Position", 28)]); - (0,__vite_ssr_import_0__.expect)(retracted).toEqual([f(1, "Position", 12)]); - }); -}); -(0,__vite_ssr_import_0__.describe)("GameSessionRegistry", () => { - (0,__vite_ssr_import_0__.it)("creates sessions keyed by room code", () => { - const reg = new __vite_ssr_import_1__.GameSessionRegistry(); - const s = reg.create("ABC123"); - (0,__vite_ssr_import_0__.expect)(reg.get("ABC123")).toBe(s); - (0,__vite_ssr_import_0__.expect)(reg.size()).toBe(1); - }); - (0,__vite_ssr_import_0__.it)("throws on duplicate create for the same code", () => { - const reg = new __vite_ssr_import_1__.GameSessionRegistry(); - reg.create("ABC123"); - (0,__vite_ssr_import_0__.expect)(() => reg.create("ABC123")).toThrow(/already exists/); - }); - (0,__vite_ssr_import_0__.it)("get returns undefined for unknown codes", () => { - const reg = new __vite_ssr_import_1__.GameSessionRegistry(); - (0,__vite_ssr_import_0__.expect)(reg.get("NOPE00")).toBeUndefined(); - }); - (0,__vite_ssr_import_0__.it)("delete returns true only when a session existed", () => { - const reg = new __vite_ssr_import_1__.GameSessionRegistry(); - reg.create("ABC123"); - (0,__vite_ssr_import_0__.expect)(reg.delete("ABC123")).toBe(true); - (0,__vite_ssr_import_0__.expect)(reg.delete("ABC123")).toBe(false); - (0,__vite_ssr_import_0__.expect)(reg.size()).toBe(0); - }); - (0,__vite_ssr_import_0__.it)("sessions for different codes are fully independent", () => { - const reg = new __vite_ssr_import_1__.GameSessionRegistry(); - const a = reg.create("AAAAAA"); - const b = reg.create("BBBBBB"); - a.applyMove("e2", "e4"); - (0,__vite_ssr_import_0__.expect)(a.getTurn()).toBe("black"); - (0,__vite_ssr_import_0__.expect)(b.getTurn()).toBe("white"); - }); - (0,__vite_ssr_import_0__.it)("passes rulesetIds through without throwing (v1: no-op)", () => { - const reg = new __vite_ssr_import_1__.GameSessionRegistry(); - (0,__vite_ssr_import_0__.expect)( - () => reg.create("ABC123", ["pawns-move-backward"]) - ).not.toThrow(); - }); -}); - -//# sourceMappingSource=vite-node -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LCtCQUFHLDBEQUEwRCxNQUFNO0FBQ2pFLFVBQU0sTUFBTSxJQUFJLDBDQUFvQjtBQUNwQztBQUFBLE1BQU8sTUFDTCxJQUFJLE9BQU8sVUFBVSxDQUFDLHFCQUFxQixDQUFDO0FBQUEsSUFDOUMsRUFBRSxJQUFJLFFBQVE7QUFBQSxFQUNoQixDQUFDO0FBQ0gsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiZ2FtZS1zZXNzaW9uLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQge1xuICBHYW1lU2Vzc2lvbixcbiAgR2FtZVNlc3Npb25SZWdpc3RyeSxcbiAgZGlmZkZhY3RzLFxuICB0eXBlIEZhY3QsXG59IGZyb20gXCIuL2dhbWUtc2Vzc2lvbi5qc1wiO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFBlci1zZXNzaW9uIGlzb2xhdGlvbiAmIElEIGF1dGhvcml0eVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmRlc2NyaWJlKFwiR2FtZVNlc3Npb24g4oCUIGlzb2xhdGlvbiAmIElEIGF1dGhvcml0eVwiLCAoKSA9PiB7XG4gIGl0KFwidHdvIHNlc3Npb25zIG1haW50YWluIGluZGVwZW5kZW50IHN0YXRlXCIsICgpID0+IHtcbiAgICBjb25zdCBhID0gbmV3IEdhbWVTZXNzaW9uKCk7XG4gICAgY29uc3QgYiA9IG5ldyBHYW1lU2Vzc2lvbigpO1xuXG4gICAgY29uc3QgbW92ZWQgPSBhLmFwcGx5TW92ZShcImUyXCIsIFwiZTRcIik7XG4gICAgZXhwZWN0KG1vdmVkLm9rKS50b0JlKHRydWUpO1xuXG4gICAgLy8gQiBtdXN0IHN0aWxsIGJlIG9uIHdoaXRlJ3MgdHVybiB3aXRoIHRoZSBwcmlzdGluZSBzdGFydGluZyBwb3NpdGlvbi5cbiAgICBleHBlY3QoYi5nZXRUdXJuKCkpLnRvQmUoXCJ3aGl0ZVwiKTtcbiAgICAvLyBBbmQgQidzIHBvc2l0aW9uIGF0dHJpYnV0ZSBmb3IgZTIgc2hvdWxkIHN0aWxsIGhvbGQgYSBwYXduLlxuICAgIGNvbnN0IGJGYWN0cyA9IGIuZ2V0QWxsRmFjdHMoKTtcbiAgICBjb25zdCBlMlBhd24gPSBiRmFjdHMuZmluZChcbiAgICAgIChmKSA9PiBmLmF0dHIgPT09IFwiUG9zaXRpb25cIiAmJiBmLnZhbHVlID09PSAxMiwgLy8gZTIgPSBmaWxlIDQgKyByYW5rIDEqOFxuICAgICk7XG4gICAgZXhwZWN0KGUyUGF3bikudG9CZURlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJmYWN0IElEcyBhcmUgbWludGVkIHBlciBzZXNzaW9uIGFuZCBkbyBub3QgY29sbGlkZSB3aXRoIG90aGVyIHNlc3Npb25zXCIsICgpID0+IHtcbiAgICBjb25zdCBhID0gbmV3IEdhbWVTZXNzaW9uKCk7XG4gICAgY29uc3QgYiA9IG5ldyBHYW1lU2Vzc2lvbigpO1xuXG4gICAgLy8gRWFjaCBzZXNzaW9uIHN0YXJ0cyB3aXRoIHRoZSBzYW1lIHNldCBvZiBlbnRpdHkgSURzICgwIGZvciB0aGVcbiAgICAvLyBnYW1lIGVudGl0eSBwbHVzIDMyIHBpZWNlcykgYmVjYXVzZSBldmVyeSBDaGVzc0VuZ2luZSBtaW50cyBJRHNcbiAgICAvLyBmcm9tIGEgZnJlc2ggY291bnRlci4gVGhhdCdzIHRoZSAqYXV0aG9yaXRhdGl2ZSogcHJvcGVydHkgd2Ugd2FudDpcbiAgICAvLyBubyBjbGllbnQtc3VwcGxpZWQgSURzIGV2ZXIgZW50ZXIgd29ya2luZyBtZW1vcnksIHNvIHR3byByb29tc1xuICAgIC8vIGNhbm5vdCBjb2xsaWRlIGJ5IGFjY2lkZW50LlxuICAgIGNvbnN0IGFJZHMgPSBuZXcgU2V0KGEuZ2V0QWxsRmFjdHMoKS5tYXAoKGYpID0+IGYuaWQpKTtcbiAgICBjb25zdCBiSWRzID0gbmV3IFNldChiLmdldEFsbEZhY3RzKCkubWFwKChmKSA9PiBmLmlkKSk7XG4gICAgZXhwZWN0KGFJZHMuc2l6ZSkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICAgIGV4cGVjdChhSWRzKS50b0VxdWFsKGJJZHMpO1xuXG4gICAgY29uc3QgYkNvdW50QmVmb3JlID0gYi5nZXRBbGxGYWN0cygpLmxlbmd0aDtcblxuICAgIC8vIE11dGF0aW5nIEEgbXVzdCBub3QgYWZmZWN0IEIuIEFmdGVyIGUy4oaSZTQgdGhlIHRvdGFsIGZhY3QgY291bnQgaW5cbiAgICAvLyBBIGNoYW5nZXMgKG5ldyBQb3NpdGlvbiBvbiBlNCwgRW5QYXNzYW50VGFyZ2V0IHNldCwgVHVybiBmbGlwcGVkKS5cbiAgICBhLmFwcGx5TW92ZShcImUyXCIsIFwiZTRcIik7XG4gICAgZXhwZWN0KGIuZ2V0QWxsRmFjdHMoKS5sZW5ndGgpLnRvQmUoYkNvdW50QmVmb3JlKTtcbiAgICBleHBlY3QoYS5nZXRBbGxGYWN0cygpLmxlbmd0aCkubm90LnRvQmUoYkNvdW50QmVmb3JlKTtcbiAgICBleHBlY3QoYi5nZXRUdXJuKCkpLnRvQmUoXCJ3aGl0ZVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJnZXRBbGxGYWN0cyByZXR1cm5zIGEgZGVmZW5zaXZlIGNvcHkgKG11dGF0aW9uIGRvZXMgbm90IGxlYWspXCIsICgpID0+IHtcbiAgICBjb25zdCBzID0gbmV3IEdhbWVTZXNzaW9uKCk7XG4gICAgY29uc3QgYmVmb3JlID0gcy5nZXRBbGxGYWN0cygpO1xuICAgIGJlZm9yZS5wdXNoKHsgaWQ6IDk5OTk5LCBhdHRyOiBcIlNwb29mXCIsIHZhbHVlOiB0cnVlIH0pO1xuICAgIGNvbnN0IGFmdGVyID0gcy5nZXRBbGxGYWN0cygpO1xuICAgIGV4cGVjdChhZnRlci5maW5kKChmKSA9PiBmLmF0dHIgPT09IFwiU3Bvb2ZcIikpLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG59KTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBNb3ZlIGFwcGxpY2F0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZGVzY3JpYmUoXCJHYW1lU2Vzc2lvbi5hcHBseU1vdmVcIiwgKCkgPT4ge1xuICBpdChcImluaXRpYWwgdHVybiBpcyB3aGl0ZSwgYmxhY2sgYWZ0ZXIgb25lIG1vdmVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHMgPSBuZXcgR2FtZVNlc3Npb24oKTtcbiAgICBleHBlY3Qocy5nZXRUdXJuKCkpLnRvQmUoXCJ3aGl0ZVwiKTtcblxuICAgIGNvbnN0IHIgPSBzLmFwcGx5TW92ZShcImUyXCIsIFwiZTRcIik7XG4gICAgZXhwZWN0KHIub2spLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KHMuZ2V0VHVybigpKS50b0JlKFwiYmxhY2tcIik7XG4gICAgaWYgKHIub2spIGV4cGVjdChyLnR1cm4pLnRvQmUoXCJibGFja1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJsZWdhbCBtb3ZlIHJldHVybnMgb2sgd2l0aCBub24tZW1wdHkgaW5zZXJ0ZWQgKyByZXRyYWN0ZWQgYW5kIG5vIGdhbWVPdmVyXCIsICgpID0+IHtcbiAgICBjb25zdCBzID0gbmV3IEdhbWVTZXNzaW9uKCk7XG4gICAgY29uc3QgciA9IHMuYXBwbHlNb3ZlKFwiZTJcIiwgXCJlNFwiKTtcbiAgICBleHBlY3Qoci5vaykudG9CZSh0cnVlKTtcbiAgICBpZiAoIXIub2spIHJldHVybjtcbiAgICAvLyBUaGUgcGF3bidzIFBvc2l0aW9uIGZhY3Qgd2FzIHJldHJhY3RlZCAob2xkIGUyPTEyKSBhbmQgaW5zZXJ0ZWQgKG5ld1xuICAgIC8vIGU0PTI4KTsgVHVybiBmbGlwcGVkIGZyb20gd2hpdGXihpJibGFjayBzbyBhdCBtaW5pbXVtIDIgaW5zZXJ0cyArIDFcbiAgICAvLyByZXRyYWN0LiBXZSBhc3NlcnQgKm5vbi1lbXB0eSogcmF0aGVyIHRoYW4gZXhhY3QgY291bnRzIHRvIHN0YXlcbiAgICAvLyByZXNpbGllbnQgdG8gZW5naW5lLWludGVybmFsIGF0dHJpYnV0ZSBjaHVybi5cbiAgICBleHBlY3Qoci5pbnNlcnRlZC5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgICBleHBlY3Qoci5yZXRyYWN0ZWQubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMCk7XG4gICAgZXhwZWN0KHIuZ2FtZU92ZXIpLnRvQmVOdWxsKCk7XG4gIH0pO1xuXG4gIGl0KFwiaWxsZWdhbCBtb3ZlIHJldHVybnMgb2s9ZmFsc2Ugd2l0aCBJTExFR0FMX01PVkVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHMgPSBuZXcgR2FtZVNlc3Npb24oKTtcbiAgICAvLyBlMuKGkmU1IGlzIHR3byBzcXVhcmVzIGZvcndhcmQgZnJvbSB0aGUgcGF3bidzIGRvdWJsZS1zcHJpbnQgc3F1YXJlIOKAlFxuICAgIC8vIGFjdHVhbGx5IGU0IGlzIGxlZ2FsOyBlNSBpcyB0aHJlZSByYW5rcyB3aGljaCBpcyBuZXZlciBsZWdhbC5cbiAgICBjb25zdCByID0gcy5hcHBseU1vdmUoXCJlMlwiLCBcImU1XCIpO1xuICAgIGV4cGVjdChyLm9rKS50b0JlKGZhbHNlKTtcbiAgICBpZiAoIXIub2spIGV4cGVjdChyLmVycm9yKS50b0JlKFwiSUxMRUdBTF9NT1ZFXCIpO1xuICAgIC8vIFNlc3Npb24gc3RhdGUgaXMgdW5jaGFuZ2VkLlxuICAgIGV4cGVjdChzLmdldFR1cm4oKSkudG9CZShcIndoaXRlXCIpO1xuICB9KTtcblxuICBpdChcIm1hbGZvcm1lZCBhbGdlYnJhaWMgbm90YXRpb24gaXMgcmVqZWN0ZWQgYXMgSUxMRUdBTF9NT1ZFXCIsICgpID0+IHtcbiAgICBjb25zdCBzID0gbmV3IEdhbWVTZXNzaW9uKCk7XG4gICAgY29uc3QgciA9IHMuYXBwbHlNb3ZlKFwiejlcIiwgXCJhMVwiKTtcbiAgICBleHBlY3Qoci5vaykudG9CZShmYWxzZSk7XG4gICAgaWYgKCFyLm9rKSBleHBlY3Qoci5lcnJvcikudG9CZShcIklMTEVHQUxfTU9WRVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJkZXRlY3RzIEZvb2wncyBNYXRlIGFuZCByZXBvcnRzIGNoZWNrbWF0ZSB3aXRoIHdoaXRlL2JsYWNrIHdpbm5lclwiLCAoKSA9PiB7XG4gICAgY29uc3QgcyA9IG5ldyBHYW1lU2Vzc2lvbigpO1xuICAgIC8vIEZvb2wncyBNYXRlIChzaG9ydGVzdCBwb3NzaWJsZSBjaGVja21hdGUsIDIgZnVsbCBtb3Zlcyk6XG4gICAgLy8gICAxLiBmMi1mMyAgIGU3LWU1XG4gICAgLy8gICAyLiBnMi1nNCAgIGQ4LWg0I1xuICAgIGNvbnN0IG0xID0gcy5hcHBseU1vdmUoXCJmMlwiLCBcImYzXCIpO1xuICAgIGV4cGVjdChtMS5vaykudG9CZSh0cnVlKTtcbiAgICBjb25zdCBtMiA9IHMuYXBwbHlNb3ZlKFwiZTdcIiwgXCJlNVwiKTtcbiAgICBleHBlY3QobTIub2spLnRvQmUodHJ1ZSk7XG4gICAgY29uc3QgbTMgPSBzLmFwcGx5TW92ZShcImcyXCIsIFwiZzRcIik7XG4gICAgZXhwZWN0KG0zLm9rKS50b0JlKHRydWUpO1xuICAgIGNvbnN0IG00ID0gcy5hcHBseU1vdmUoXCJkOFwiLCBcImg0XCIpO1xuICAgIGV4cGVjdChtNC5vaykudG9CZSh0cnVlKTtcbiAgICBpZiAoIW00Lm9rKSByZXR1cm47XG5cbiAgICBleHBlY3QobTQuZ2FtZU92ZXIpLm5vdC50b0JlTnVsbCgpO1xuICAgIGV4cGVjdChtNC5nYW1lT3Zlcj8ud2lubmVyKS50b0JlKFwiYmxhY2tcIik7XG4gICAgZXhwZWN0KG00LmdhbWVPdmVyPy5yZWFzb24pLnRvQmUoXCJjaGVja21hdGVcIik7XG4gICAgZXhwZWN0KHMuZ2V0R2FtZU92ZXIoKT8ud2lubmVyKS50b0JlKFwiYmxhY2tcIik7XG4gIH0pO1xuXG4gIGl0KFwicmVmdXNlcyBmdXJ0aGVyIG1vdmVzIGFmdGVyIGdhbWUgaXMgb3ZlclwiLCAoKSA9PiB7XG4gICAgY29uc3QgcyA9IG5ldyBHYW1lU2Vzc2lvbigpO1xuICAgIHMuYXBwbHlNb3ZlKFwiZjJcIiwgXCJmM1wiKTtcbiAgICBzLmFwcGx5TW92ZShcImU3XCIsIFwiZTVcIik7XG4gICAgcy5hcHBseU1vdmUoXCJnMlwiLCBcImc0XCIpO1xuICAgIGNvbnN0IG1hdGUgPSBzLmFwcGx5TW92ZShcImQ4XCIsIFwiaDRcIik7XG4gICAgZXhwZWN0KG1hdGUub2spLnRvQmUodHJ1ZSk7XG5cbiAgICBjb25zdCBhZnRlciA9IHMuYXBwbHlNb3ZlKFwiYTJcIiwgXCJhM1wiKTtcbiAgICBleHBlY3QoYWZ0ZXIub2spLnRvQmUoZmFsc2UpO1xuICAgIGlmICghYWZ0ZXIub2spIGV4cGVjdChhZnRlci5lcnJvcikudG9CZShcIkdBTUVfT1ZFUlwiKTtcbiAgfSk7XG5cbiAgaXQoXCJwcm9tb3RlVG8gaXMgZm9yd2FyZGVkIHRvIHRoZSBlbmdpbmUgZm9yIHVuZGVycHJvbW90aW9uXCIsICgpID0+IHtcbiAgICAvLyBDb25zdHJ1Y3QgYSBzaW1wbGUgcHJvbW90aW9uIHNjZW5hcmlvIGJ5IHBsYXlpbmcgYSBxdWljayBsaW5lIHRoYXRcbiAgICAvLyByZWFjaGVzIGEgcGF3biBvbiB0aGUgN3RoIHJhbmsuIFdlIGNhbid0IGVhc2lseSBzZXQgdXAgYXJiaXRyYXJ5XG4gICAgLy8gcG9zaXRpb25zIHdpdGhvdXQgUEdOL0ZFTiBsb2FkaW5nIGluIFA0LjUsIHNvIHdlIGp1c3QgYXNzZXJ0IHRoZVxuICAgIC8vICplcnJvciBzaGFwZSogd2hlbiB0aGVyZSBpcyBubyBwcm9tb3Rpb24tbGVnYWwgbW92ZSDigJQgdGhlIGhhcHB5XG4gICAgLy8gcGF0aCBpcyBjb3ZlcmVkIGJ5IEBwYXJhdHlwZS9jaGVzcydzIG93biBwcm9tb3Rpb24gdGVzdHMuXG4gICAgY29uc3QgcyA9IG5ldyBHYW1lU2Vzc2lvbigpO1xuICAgIGNvbnN0IHIgPSBzLmFwcGx5TW92ZShcImUyXCIsIFwiZTRcIiwgXCJrbmlnaHRcIik7XG4gICAgLy8gZTQgaXMgbm90IGEgcHJvbW90aW9uIHNxdWFyZTsgdGhlIHByb21vdGVUbyBoaW50IGlzIGlnbm9yZWQgYW5kIHRoZVxuICAgIC8vIG1vdmUgc3VjY2VlZHMuXG4gICAgZXhwZWN0KHIub2spLnRvQmUodHJ1ZSk7XG4gIH0pO1xufSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gZGlmZkZhY3RzIOKAlCBwdXJlIGhlbHBlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmRlc2NyaWJlKFwiZGlmZkZhY3RzXCIsICgpID0+IHtcbiAgY29uc3QgZiA9IChpZDogbnVtYmVyLCBhdHRyOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogRmFjdCA9PiAoe1xuICAgIGlkLFxuICAgIGF0dHIsXG4gICAgdmFsdWUsXG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyBlbXB0eSBzZXRzIGZvciBpZGVudGljYWwgaW5wdXRzXCIsICgpID0+IHtcbiAgICBjb25zdCBwcmV2ID0gW2YoMSwgXCJDb2xvclwiLCBcIndoaXRlXCIpLCBmKDEsIFwiUG9zaXRpb25cIiwgMTIpXTtcbiAgICBjb25zdCB7IGluc2VydGVkLCByZXRyYWN0ZWQgfSA9IGRpZmZGYWN0cyhwcmV2LCBwcmV2KTtcbiAgICBleHBlY3QoaW5zZXJ0ZWQpLnRvRXF1YWwoW10pO1xuICAgIGV4cGVjdChyZXRyYWN0ZWQpLnRvRXF1YWwoW10pO1xuICB9KTtcblxuICBpdChcInJlcG9ydHMgbmV3bHkgYWRkZWQgZmFjdHMgYXMgaW5zZXJ0ZWRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHByZXYgPSBbZigxLCBcIkNvbG9yXCIsIFwid2hpdGVcIildO1xuICAgIGNvbnN0IG5leHQgPSBbZigxLCBcIkNvbG9yXCIsIFwid2hpdGVcIiksIGYoMSwgXCJQb3NpdGlvblwiLCAyOCldO1xuICAgIGNvbnN0IHsgaW5zZXJ0ZWQsIHJldHJhY3RlZCB9ID0gZGlmZkZhY3RzKHByZXYsIG5leHQpO1xuICAgIGV4cGVjdChpbnNlcnRlZCkudG9FcXVhbChbZigxLCBcIlBvc2l0aW9uXCIsIDI4KV0pO1xuICAgIGV4cGVjdChyZXRyYWN0ZWQpLnRvRXF1YWwoW10pO1xuICB9KTtcblxuICBpdChcInJlcG9ydHMgcmVtb3ZlZCBmYWN0cyBhcyByZXRyYWN0ZWRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHByZXYgPSBbZigxLCBcIkNvbG9yXCIsIFwid2hpdGVcIiksIGYoMSwgXCJQb3NpdGlvblwiLCAxMildO1xuICAgIGNvbnN0IG5leHQgPSBbZigxLCBcIkNvbG9yXCIsIFwid2hpdGVcIildO1xuICAgIGNvbnN0IHsgaW5zZXJ0ZWQsIHJldHJhY3RlZCB9ID0gZGlmZkZhY3RzKHByZXYsIG5leHQpO1xuICAgIGV4cGVjdChpbnNlcnRlZCkudG9FcXVhbChbXSk7XG4gICAgZXhwZWN0KHJldHJhY3RlZCkudG9FcXVhbChbZigxLCBcIlBvc2l0aW9uXCIsIDEyKV0pO1xuICB9KTtcblxuICBpdChcInRyZWF0cyB2YWx1ZSBjaGFuZ2VzIGFzIHJldHJhY3QraW5zZXJ0IGZvciB0aGUgc2FtZSAoaWQsIGF0dHIpXCIsICgpID0+IHtcbiAgICBjb25zdCBwcmV2ID0gW2YoMSwgXCJQb3NpdGlvblwiLCAxMildO1xuICAgIGNvbnN0IG5leHQgPSBbZigxLCBcIlBvc2l0aW9uXCIsIDI4KV07XG4gICAgY29uc3QgeyBpbnNlcnRlZCwgcmV0cmFjdGVkIH0gPSBkaWZmRmFjdHMocHJldiwgbmV4dCk7XG4gICAgZXhwZWN0KGluc2VydGVkKS50b0VxdWFsKFtmKDEsIFwiUG9zaXRpb25cIiwgMjgpXSk7XG4gICAgZXhwZWN0KHJldHJhY3RlZCkudG9FcXVhbChbZigxLCBcIlBvc2l0aW9uXCIsIDEyKV0pO1xuICB9KTtcbn0pO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEdhbWVTZXNzaW9uUmVnaXN0cnlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5kZXNjcmliZShcIkdhbWVTZXNzaW9uUmVnaXN0cnlcIiwgKCkgPT4ge1xuICBpdChcImNyZWF0ZXMgc2Vzc2lvbnMga2V5ZWQgYnkgcm9vbSBjb2RlXCIsICgpID0+IHtcbiAgICBjb25zdCByZWcgPSBuZXcgR2FtZVNlc3Npb25SZWdpc3RyeSgpO1xuICAgIGNvbnN0IHMgPSByZWcuY3JlYXRlKFwiQUJDMTIzXCIpO1xuICAgIGV4cGVjdChyZWcuZ2V0KFwiQUJDMTIzXCIpKS50b0JlKHMpO1xuICAgIGV4cGVjdChyZWcuc2l6ZSgpKS50b0JlKDEpO1xuICB9KTtcblxuICBpdChcInRocm93cyBvbiBkdXBsaWNhdGUgY3JlYXRlIGZvciB0aGUgc2FtZSBjb2RlXCIsICgpID0+IHtcbiAgICBjb25zdCByZWcgPSBuZXcgR2FtZVNlc3Npb25SZWdpc3RyeSgpO1xuICAgIHJlZy5jcmVhdGUoXCJBQkMxMjNcIik7XG4gICAgZXhwZWN0KCgpID0+IHJlZy5jcmVhdGUoXCJBQkMxMjNcIikpLnRvVGhyb3coL2FscmVhZHkgZXhpc3RzLyk7XG4gIH0pO1xuXG4gIGl0KFwiZ2V0IHJldHVybnMgdW5kZWZpbmVkIGZvciB1bmtub3duIGNvZGVzXCIsICgpID0+IHtcbiAgICBjb25zdCByZWcgPSBuZXcgR2FtZVNlc3Npb25SZWdpc3RyeSgpO1xuICAgIGV4cGVjdChyZWcuZ2V0KFwiTk9QRTAwXCIpKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xuXG4gIGl0KFwiZGVsZXRlIHJldHVybnMgdHJ1ZSBvbmx5IHdoZW4gYSBzZXNzaW9uIGV4aXN0ZWRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlZyA9IG5ldyBHYW1lU2Vzc2lvblJlZ2lzdHJ5KCk7XG4gICAgcmVnLmNyZWF0ZShcIkFCQzEyM1wiKTtcbiAgICBleHBlY3QocmVnLmRlbGV0ZShcIkFCQzEyM1wiKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QocmVnLmRlbGV0ZShcIkFCQzEyM1wiKSkudG9CZShmYWxzZSk7XG4gICAgZXhwZWN0KHJlZy5zaXplKCkpLnRvQmUoMCk7XG4gIH0pO1xuXG4gIGl0KFwic2Vzc2lvbnMgZm9yIGRpZmZlcmVudCBjb2RlcyBhcmUgZnVsbHkgaW5kZXBlbmRlbnRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlZyA9IG5ldyBHYW1lU2Vzc2lvblJlZ2lzdHJ5KCk7XG4gICAgY29uc3QgYSA9IHJlZy5jcmVhdGUoXCJBQUFBQUFcIik7XG4gICAgY29uc3QgYiA9IHJlZy5jcmVhdGUoXCJCQkJCQkJcIik7XG4gICAgYS5hcHBseU1vdmUoXCJlMlwiLCBcImU0XCIpO1xuICAgIGV4cGVjdChhLmdldFR1cm4oKSkudG9CZShcImJsYWNrXCIpO1xuICAgIGV4cGVjdChiLmdldFR1cm4oKSkudG9CZShcIndoaXRlXCIpO1xuICB9KTtcblxuICBpdChcInBhc3NlcyBydWxlc2V0SWRzIHRocm91Z2ggd2l0aG91dCB0aHJvd2luZyAodjE6IG5vLW9wKVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVnID0gbmV3IEdhbWVTZXNzaW9uUmVnaXN0cnkoKTtcbiAgICBleHBlY3QoKCkgPT5cbiAgICAgIHJlZy5jcmVhdGUoXCJBQkMxMjNcIiwgW1wicGF3bnMtbW92ZS1iYWNrd2FyZFwiXSksXG4gICAgKS5ub3QudG9UaHJvdygpO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiIvaG9tZS9qb2V5L1Byb2plY3RzL3J1bGVzL3BhY2thZ2VzL3NlcnZlci9zcmMvZ2FtZS1zZXNzaW9uLnRlc3QudHMifQ== diff --git a/org.chromium.Chromium.GIGFbs/SingletonCookie b/org.chromium.Chromium.GIGFbs/SingletonCookie deleted file mode 120000 index 3f693ee..0000000 --- a/org.chromium.Chromium.GIGFbs/SingletonCookie +++ /dev/null @@ -1 +0,0 @@ -15664420043136914543 \ No newline at end of file