repos / starfx

supercharged async flow control library.
git clone https://github.com/neurosnap/starfx.git

commit
1f42ca7
parent
410024f
author
Eric Bower
date
2023-04-20 20:43:17 +0000 UTC
take helpers
4 files changed,  +304, -3
M deno.lock
+181, -0
  1@@ -61,6 +61,132 @@
  2     "https://deno.land/std@0.158.0/testing/asserts.ts": "8696c488bc98d8d175e74dc652a0ffbc7fca93858da01edc57ed33c1148345da",
  3     "https://deno.land/std@0.163.0/testing/_test_suite.ts": "2d07073d5460a4e3ec50c55ae822cd9bd136926d7363091379947fef9c73c3e4",
  4     "https://deno.land/std@0.163.0/testing/bdd.ts": "35060cefd9cc21b414f4d89453b3551a3d52ec50aeff25db432503c5485b2f72",
  5+    "https://deno.land/std@0.177.0/_util/asserts.ts": "178dfc49a464aee693a7e285567b3d0b555dc805ff490505a8aae34f9cfb1462",
  6+    "https://deno.land/std@0.177.0/_util/os.ts": "d932f56d41e4f6a6093d56044e29ce637f8dcc43c5a90af43504a889cf1775e3",
  7+    "https://deno.land/std@0.177.0/async/abortable.ts": "73acfb3ed7261ce0d930dbe89e43db8d34e017b063cf0eaa7d215477bf53442e",
  8+    "https://deno.land/std@0.177.0/async/deadline.ts": "c5facb0b404eede83e38bd2717ea8ab34faa2ffb20ef87fd261fcba32ba307aa",
  9+    "https://deno.land/std@0.177.0/async/debounce.ts": "adab11d04ca38d699444ac8a9d9856b4155e8dda2afd07ce78276c01ea5a4332",
 10+    "https://deno.land/std@0.177.0/async/deferred.ts": "42790112f36a75a57db4a96d33974a936deb7b04d25c6084a9fa8a49f135def8",
 11+    "https://deno.land/std@0.177.0/async/delay.ts": "73aa04cec034c84fc748c7be49bb15cac3dd43a57174bfdb7a4aec22c248f0dd",
 12+    "https://deno.land/std@0.177.0/async/mod.ts": "f04344fa21738e5ad6bea37a6bfffd57c617c2d372bb9f9dcfd118a1b622e576",
 13+    "https://deno.land/std@0.177.0/async/mux_async_iterator.ts": "70c7f2ee4e9466161350473ad61cac0b9f115cff4c552eaa7ef9d50c4cbb4cc9",
 14+    "https://deno.land/std@0.177.0/async/pool.ts": "fd082bd4aaf26445909889435a5c74334c017847842ec035739b4ae637ae8260",
 15+    "https://deno.land/std@0.177.0/async/retry.ts": "5efa3ba450ac0c07a40a82e2df296287b5013755d232049efd7ea2244f15b20f",
 16+    "https://deno.land/std@0.177.0/async/tee.ts": "47e42d35f622650b02234d43803d0383a89eb4387e1b83b5a40106d18ae36757",
 17+    "https://deno.land/std@0.177.0/bytes/index_of_needle.ts": "65c939607df609374c4415598fa4dad04a2f14c4d98cd15775216f0aaf597f24",
 18+    "https://deno.land/std@0.177.0/crypto/timing_safe_equal.ts": "8d69ab611c67fe51b6127d97fcfb4d8e7d0e1b6b4f3e0cc4ab86744c3691f965",
 19+    "https://deno.land/std@0.177.0/encoding/base64.ts": "7de04c2f8aeeb41453b09b186480be90f2ff357613b988e99fabb91d2eeceba1",
 20+    "https://deno.land/std@0.177.0/encoding/base64url.ts": "3f1178f6446834457b16bfde8b559c1cd3481727fe384d3385e4a9995dc2d851",
 21+    "https://deno.land/std@0.177.0/flags/mod.ts": "d1cdefa18472ef69858a17df5cf7c98445ed27ac10e1460183081303b0ebc270",
 22+    "https://deno.land/std@0.177.0/node/_core.ts": "9a58c0ef98ee77e9b8fcc405511d1b37a003a705eb6a9b6e95f75434d8009adc",
 23+    "https://deno.land/std@0.177.0/node/_events.d.ts": "1347437fd6b084d7c9a4e16b9fe7435f00b030970086482edeeb3b179d0775af",
 24+    "https://deno.land/std@0.177.0/node/_events.mjs": "d4ba4e629abe3db9f1b14659fd5c282b7da8b2b95eaf13238eee4ebb142a2448",
 25+    "https://deno.land/std@0.177.0/node/_global.d.ts": "2d88342f38b4083b858998e27c706725fb03a74aa14ef8d985dc18438b5188e4",
 26+    "https://deno.land/std@0.177.0/node/_next_tick.ts": "9a3cf107d59b019a355d3cf32275b4c6157282e4b68ea85b46a799cb1d379305",
 27+    "https://deno.land/std@0.177.0/node/_process/exiting.ts": "6e336180aaabd1192bf99ffeb0d14b689116a3dec1dfb34a2afbacd6766e98ab",
 28+    "https://deno.land/std@0.177.0/node/_process/process.ts": "c96bb1f6253824c372f4866ee006dcefda02b7050d46759736e403f862d91051",
 29+    "https://deno.land/std@0.177.0/node/_process/stdio.mjs": "cf17727eac8da3a665851df700b5aca6a12bacc3ebbf33e63e4b919f80ba44a6",
 30+    "https://deno.land/std@0.177.0/node/_process/streams.mjs": "408777fba99580567f3ee82ee584ca79012cc550f8dacb8c5ec633b58cd0c1ca",
 31+    "https://deno.land/std@0.177.0/node/_stream.d.ts": "112e1a0677cd6db932c3ce0e6e5bbdc7a2ac1874572f449044ecc82afcf5ee2e",
 32+    "https://deno.land/std@0.177.0/node/_stream.mjs": "d6e2c86c1158ac65b4c2ca4fa019d7e84374ff12e21e2175345fe68c0823efe3",
 33+    "https://deno.land/std@0.177.0/node/_utils.ts": "7fd55872a0cf9275e3c080a60e2fa6d45b8de9e956ebcde9053e72a344185884",
 34+    "https://deno.land/std@0.177.0/node/buffer.ts": "85617be2063eccaf177dbb84c7580d1e32023724ed14bd9df4e453b152a26167",
 35+    "https://deno.land/std@0.177.0/node/events.ts": "d2de352d509de11a375e2cb397d6b98f5fed4e562fc1d41be33214903a38e6b0",
 36+    "https://deno.land/std@0.177.0/node/internal/buffer.d.ts": "bdfa991cd88cb02fd08bf8235d2618550e3e511c970b2a8f2e1a6885a2793cac",
 37+    "https://deno.land/std@0.177.0/node/internal/buffer.mjs": "e92303a3cc6d9aaabcd270a937ad9319825d9ba08cb332650944df4562029b27",
 38+    "https://deno.land/std@0.177.0/node/internal/crypto/_keys.ts": "8f3c3b5a141aa0331a53c205e9338655f1b3b307a08085fd6ff6dda6f7c4190b",
 39+    "https://deno.land/std@0.177.0/node/internal/crypto/constants.ts": "544d605703053218499b08214f2e25cf4310651d535b7ab995891c4b7a217693",
 40+    "https://deno.land/std@0.177.0/node/internal/error_codes.ts": "8495e33f448a484518d76fa3d41d34fc20fe03c14b30130ad8e936b0035d4b8b",
 41+    "https://deno.land/std@0.177.0/node/internal/errors.ts": "1c699b8a3cb93174f697a348c004b1c6d576b66688eac8a48ebb78e65c720aae",
 42+    "https://deno.land/std@0.177.0/node/internal/fixed_queue.ts": "62bb119afa5b5ae8fc0c7048b50502347bec82e2588017d0b250c4671d6eff8f",
 43+    "https://deno.land/std@0.177.0/node/internal/hide_stack_frames.ts": "9dd1bad0a6e62a1042ce3a51eb1b1ecee2f246907bff44835f86e8f021de679a",
 44+    "https://deno.land/std@0.177.0/node/internal/net.ts": "5538d31b595ac63d4b3e90393168bc65ace2f332c3317cffa2fd780070b2d86c",
 45+    "https://deno.land/std@0.177.0/node/internal/normalize_encoding.mjs": "fd1d9df61c44d7196432f6e8244621468715131d18cc79cd299fc78ac549f707",
 46+    "https://deno.land/std@0.177.0/node/internal/options.ts": "888f267c3fe8f18dc7b2f2fbdbe7e4a0fd3302ff3e99f5d6645601e924f3e3fb",
 47+    "https://deno.land/std@0.177.0/node/internal/primordials.mjs": "a72d86b5aa55d3d50b8e916b6a59b7cc0dc5a31da8937114b4a113ad5aa08c74",
 48+    "https://deno.land/std@0.177.0/node/internal/process/per_thread.mjs": "10142bbb13978c2f8f79778ad90f3a67a8ea6d8d2970f3dfc6bf2c6fff0162a2",
 49+    "https://deno.land/std@0.177.0/node/internal/readline/callbacks.mjs": "bdb129b140c3b21b5e08cdc3d8e43517ad818ac03f75197338d665cca1cbaed3",
 50+    "https://deno.land/std@0.177.0/node/internal/readline/utils.mjs": "c3dbf3a97c01ed14052cca3848f09e2fc24818c1822ceed57c33b9f0840f3b87",
 51+    "https://deno.land/std@0.177.0/node/internal/streams/destroy.mjs": "b665fc71178919a34ddeac8389d162a81b4bc693ff7dc2557fa41b3a91011967",
 52+    "https://deno.land/std@0.177.0/node/internal/streams/end-of-stream.mjs": "a4fb1c2e32d58dff440d4e716e2c4daaa403b3095304a028bb428575cfeed716",
 53+    "https://deno.land/std@0.177.0/node/internal/streams/utils.mjs": "f2fe2e6bdc506da24c758970890cc2a21642045b129dee618bd3827c60dd9e33",
 54+    "https://deno.land/std@0.177.0/node/internal/util.mjs": "f7fe2e1ca5e66f550ad0856b9f5ee4d666f0c071fe212ea7fc7f37cfa81f97a5",
 55+    "https://deno.land/std@0.177.0/node/internal/util/inspect.mjs": "11d7c9cab514b8e485acc3978c74b837263ff9c08ae4537fa18ad56bae633259",
 56+    "https://deno.land/std@0.177.0/node/internal/util/types.ts": "0e587b44ec5e017cf228589fc5ce9983b75beece6c39409c34170cfad49d6417",
 57+    "https://deno.land/std@0.177.0/node/internal/validators.mjs": "e02f2b02dd072a5d623970292588d541204dc82207b4c58985d933a5f4b382e6",
 58+    "https://deno.land/std@0.177.0/node/internal_binding/_libuv_winerror.ts": "30c9569603d4b97a1f1a034d88a3f74800d5ea1f12fcc3d225c9899d4e1a518b",
 59+    "https://deno.land/std@0.177.0/node/internal_binding/_listen.ts": "c6038be47116f7755c01fd98340a0d1e8e66ef874710ab59ed3f5607d50d7a25",
 60+    "https://deno.land/std@0.177.0/node/internal_binding/_node.ts": "cb2389b0eab121df99853eb6a5e3a684e4537e065fb8bf2cca0cbf219ce4e32e",
 61+    "https://deno.land/std@0.177.0/node/internal_binding/_timingSafeEqual.ts": "7d9732464d3c669ff07713868ce5d25bc974a06112edbfb5f017fc3c70c0853e",
 62+    "https://deno.land/std@0.177.0/node/internal_binding/_utils.ts": "7c58a2fbb031a204dee9583ba211cf9c67922112fe77e7f0b3226112469e9fe1",
 63+    "https://deno.land/std@0.177.0/node/internal_binding/_winerror.ts": "3e8cfdfe22e89f13d2b28529bab35155e6b1730c0221ec5a6fc7077dc037be13",
 64+    "https://deno.land/std@0.177.0/node/internal_binding/ares.ts": "bdd34c679265a6c115a8cfdde000656837a0a0dcdb0e4c258e622e136e9c31b8",
 65+    "https://deno.land/std@0.177.0/node/internal_binding/async_wrap.ts": "0dc5ae64eea2c9e57ab17887ef1573922245167ffe38e3685c28d636f487f1b7",
 66+    "https://deno.land/std@0.177.0/node/internal_binding/buffer.ts": "31729e0537921d6c730ad0afea44a7e8a0a1044d070ade8368226cb6f7390c8b",
 67+    "https://deno.land/std@0.177.0/node/internal_binding/cares_wrap.ts": "9b7247772167f8ed56acd0244a232d9d50e8d7c9cfc379f77f3d54cecc2f32ab",
 68+    "https://deno.land/std@0.177.0/node/internal_binding/config.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
 69+    "https://deno.land/std@0.177.0/node/internal_binding/connection_wrap.ts": "7dd089ea46de38e4992d0f43a09b586e4cf04878fb06863c1cb8cb2ece7da521",
 70+    "https://deno.land/std@0.177.0/node/internal_binding/constants.ts": "21ff9d1ee71d0a2086541083a7711842fc6ae25e264dbf45c73815aadce06f4c",
 71+    "https://deno.land/std@0.177.0/node/internal_binding/contextify.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
 72+    "https://deno.land/std@0.177.0/node/internal_binding/credentials.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
 73+    "https://deno.land/std@0.177.0/node/internal_binding/crypto.ts": "29e8f94f283a2e7d4229d3551369c6a40c2af9737fad948cb9be56bef6c468cd",
 74+    "https://deno.land/std@0.177.0/node/internal_binding/errors.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
 75+    "https://deno.land/std@0.177.0/node/internal_binding/fs.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
 76+    "https://deno.land/std@0.177.0/node/internal_binding/fs_dir.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
 77+    "https://deno.land/std@0.177.0/node/internal_binding/fs_event_wrap.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
 78+    "https://deno.land/std@0.177.0/node/internal_binding/handle_wrap.ts": "adf0b8063da2c54f26edd5e8ec50296a4d38e42716a70a229f14654b17a071d9",
 79+    "https://deno.land/std@0.177.0/node/internal_binding/heap_utils.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
 80+    "https://deno.land/std@0.177.0/node/internal_binding/http_parser.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
 81+    "https://deno.land/std@0.177.0/node/internal_binding/icu.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
 82+    "https://deno.land/std@0.177.0/node/internal_binding/inspector.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
 83+    "https://deno.land/std@0.177.0/node/internal_binding/js_stream.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
 84+    "https://deno.land/std@0.177.0/node/internal_binding/messaging.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
 85+    "https://deno.land/std@0.177.0/node/internal_binding/mod.ts": "9fc65f7af1d35e2d3557539a558ea9ad7a9954eefafe614ad82d94bddfe25845",
 86+    "https://deno.land/std@0.177.0/node/internal_binding/module_wrap.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
 87+    "https://deno.land/std@0.177.0/node/internal_binding/native_module.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
 88+    "https://deno.land/std@0.177.0/node/internal_binding/natives.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
 89+    "https://deno.land/std@0.177.0/node/internal_binding/node_file.ts": "21edbbc95653e45514aff252b6cae7bf127a4338cbc5f090557d258aa205d8a5",
 90+    "https://deno.land/std@0.177.0/node/internal_binding/node_options.ts": "0b5cb0bf4379a39278d7b7bb6bb2c2751baf428fe437abe5ed3e8441fae1f18b",
 91+    "https://deno.land/std@0.177.0/node/internal_binding/options.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
 92+    "https://deno.land/std@0.177.0/node/internal_binding/os.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
 93+    "https://deno.land/std@0.177.0/node/internal_binding/performance.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
 94+    "https://deno.land/std@0.177.0/node/internal_binding/pipe_wrap.ts": "30e3a63954313f9d5bbc2ac02c7f9be4b1204c493e47f6e1b9c7366994e6ea6d",
 95+    "https://deno.land/std@0.177.0/node/internal_binding/process_methods.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
 96+    "https://deno.land/std@0.177.0/node/internal_binding/report.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
 97+    "https://deno.land/std@0.177.0/node/internal_binding/serdes.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
 98+    "https://deno.land/std@0.177.0/node/internal_binding/signal_wrap.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
 99+    "https://deno.land/std@0.177.0/node/internal_binding/spawn_sync.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
100+    "https://deno.land/std@0.177.0/node/internal_binding/stream_wrap.ts": "452bff74d1db280a0cd78c75a95bb6d163e849e06e9638c4af405d40296bd050",
101+    "https://deno.land/std@0.177.0/node/internal_binding/string_decoder.ts": "54c3c1cbd5a9254881be58bf22637965dc69535483014dab60487e299cb95445",
102+    "https://deno.land/std@0.177.0/node/internal_binding/symbols.ts": "4dee2f3a400d711fd57fa3430b8de1fdb011e08e260b81fef5b81cc06ed77129",
103+    "https://deno.land/std@0.177.0/node/internal_binding/task_queue.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
104+    "https://deno.land/std@0.177.0/node/internal_binding/tcp_wrap.ts": "d298d855e862fc9a5c94e13ad982fde99f6d8a56620a4772681b7226f5a15c91",
105+    "https://deno.land/std@0.177.0/node/internal_binding/timers.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
106+    "https://deno.land/std@0.177.0/node/internal_binding/tls_wrap.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
107+    "https://deno.land/std@0.177.0/node/internal_binding/trace_events.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
108+    "https://deno.land/std@0.177.0/node/internal_binding/tty_wrap.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
109+    "https://deno.land/std@0.177.0/node/internal_binding/types.ts": "2187595a58d2cf0134f4db6cc2a12bf777f452f52b15b6c3aed73fa072aa5fc3",
110+    "https://deno.land/std@0.177.0/node/internal_binding/udp_wrap.ts": "b77d7024aef1282b9fe6e1f6c8064ab8a7b9ecbae0bc08a36f2b30dcbb1d2752",
111+    "https://deno.land/std@0.177.0/node/internal_binding/url.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
112+    "https://deno.land/std@0.177.0/node/internal_binding/util.ts": "808ff3b92740284184ab824adfc420e75398c88c8bccf5111f0c24ac18c48f10",
113+    "https://deno.land/std@0.177.0/node/internal_binding/uv.ts": "eb0048e30af4db407fb3f95563e30d70efd6187051c033713b0a5b768593a3a3",
114+    "https://deno.land/std@0.177.0/node/internal_binding/v8.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
115+    "https://deno.land/std@0.177.0/node/internal_binding/worker.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
116+    "https://deno.land/std@0.177.0/node/internal_binding/zlib.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea",
117+    "https://deno.land/std@0.177.0/node/process.ts": "6608012d6d51a17a7346f36079c574b9b9f81f1b5c35436489ad089f39757466",
118+    "https://deno.land/std@0.177.0/node/stream.ts": "09e348302af40dcc7dc58aa5e40fdff868d11d8d6b0cfb85cbb9c75b9fe450c7",
119+    "https://deno.land/std@0.177.0/node/string_decoder.ts": "1a17e3572037c512cc5fc4b29076613e90f225474362d18da908cb7e5ccb7e88",
120+    "https://deno.land/std@0.177.0/path/_constants.ts": "e49961f6f4f48039c0dfed3c3f93e963ca3d92791c9d478ac5b43183413136e0",
121+    "https://deno.land/std@0.177.0/path/_interface.ts": "6471159dfbbc357e03882c2266d21ef9afdb1e4aa771b0545e90db58a0ba314b",
122+    "https://deno.land/std@0.177.0/path/_util.ts": "d7abb1e0dea065f427b89156e28cdeb32b045870acdf865833ba808a73b576d0",
123+    "https://deno.land/std@0.177.0/path/common.ts": "ee7505ab01fd22de3963b64e46cff31f40de34f9f8de1fff6a1bd2fe79380000",
124+    "https://deno.land/std@0.177.0/path/glob.ts": "d479e0a695621c94d3fd7fe7abd4f9499caf32a8de13f25073451c6ef420a4e1",
125+    "https://deno.land/std@0.177.0/path/mod.ts": "4b83694ac500d7d31b0cdafc927080a53dc0c3027eb2895790fb155082b0d232",
126+    "https://deno.land/std@0.177.0/path/posix.ts": "8b7c67ac338714b30c816079303d0285dd24af6b284f7ad63da5b27372a2c94d",
127+    "https://deno.land/std@0.177.0/path/separator.ts": "0fb679739d0d1d7bf45b68dacfb4ec7563597a902edbaf3c59b50d5bcadd93b1",
128+    "https://deno.land/std@0.177.0/path/win32.ts": "d186344e5583bcbf8b18af416d13d82b35a317116e6460a5a3953508c3de5bba",
129+    "https://deno.land/std@0.177.0/streams/write_all.ts": "3b2e1ce44913f966348ce353d02fa5369e94115181037cd8b602510853ec3033",
130+    "https://deno.land/std@0.177.0/types.d.ts": "220ed56662a0bd393ba5d124aa6ae2ad36a00d2fcbc0e8666a65f4606aaa9784",
131     "https://deno.land/std@0.97.0/fmt/colors.ts": "db22b314a2ae9430ae7460ce005e0a7130e23ae1c999157e3bb77cf55800f7e4",
132     "https://deno.land/std@0.97.0/testing/_diff.ts": "961eaf6d9f5b0a8556c9d835bbc6fa74f5addd7d3b02728ba7936ff93364f7a3",
133     "https://deno.land/std@0.97.0/testing/asserts.ts": "341292d12eebc44be4c3c2ca101ba8b6b5859cef2fa69d50c217f9d0bfbcfd1f",
134@@ -136,6 +262,7 @@
135     "https://deno.land/x/ts_morph@13.0.0/common/ts_morph_common.js": "7a63dede12ac30195099f42a07f8ae139799738351ed66e34d872e842d2ca687",
136     "https://deno.land/x/ts_morph@13.0.0/common/typescript.d.ts": "bbfbfa714a8f9fdf10e9483b4abd82ccb546fc0fc069ad80d0a254fa40930e98",
137     "https://deno.land/x/ts_morph@13.0.0/common/typescript.js": "dca27ae23ee7eaa46a03e7e7216755186a4c5aff76273e0a66d30358be0e121b",
138+    "https://esm.sh/@reduxjs/toolkit@1.9.5": "ff3c8c03a33f48803490eb006f7ffdb725a40cd1957e6d3b61ed846ffcc32b9d",
139     "https://esm.sh/react@18.2.0": "742d8246041966ba1137ec8c60888c35882a9d2478bce63583875f86c1e3687c",
140     "https://esm.sh/stable/react@18.2.0/deno/react.mjs": "a5a73ee24acca4744ee22c51d9357f31968d1f684ce253bde222b4e26d09f49f",
141     "https://esm.sh/v113/@types/prop-types@15.7.5/index.d.ts": "6a386ff939f180ae8ef064699d8b7b6e62bc2731a62d7fbf5e02589383838dea",
142@@ -148,6 +275,60 @@
143     "https://esm.sh/v115/@types/react@18.0.34/index.d.ts": "d5208107882e0e3409a5ebc1f1cd1b7cd8b22865688ac9184aab8abc1ce6231d",
144     "https://esm.sh/v115/@types/scheduler@0.16.3/tracing.d.ts": "f5a8b384f182b3851cec3596ccc96cb7464f8d3469f48c74bf2befb782a19de5",
145     "https://esm.sh/v115/csstype@3.1.2/index.d.ts": "4c68749a564a6facdf675416d75789ee5a557afda8960e0803cf6711fa569288",
146+    "https://esm.sh/v116/@babel/runtime@7.21.0/deno/helpers/esm/objectSpread2.js": "d6df47b28fa0ea915b43fd191239c2a303ea2d9c27319247e6330cbb3f3300d5",
147+    "https://esm.sh/v116/@reduxjs/toolkit@1.9.5/deno/toolkit.mjs": "9a9e4ff26a321ac112f19166c2fdef4f7c5764f2f22dcdf44edc07c0c7afd5fc",
148+    "https://esm.sh/v116/@reduxjs/toolkit@1.9.5/dist/autoBatchEnhancer.d.ts": "1588dc63251f2ff156856e7d372c8fcf91ce2aba4214b7554af0741d48f55dba",
149+    "https://esm.sh/v116/@reduxjs/toolkit@1.9.5/dist/configureStore.d.ts": "529b36eb303f42a6fe5ac2762101089c13b317266ea2aee807db58b085c1bf29",
150+    "https://esm.sh/v116/@reduxjs/toolkit@1.9.5/dist/createAction.d.ts": "da69802abe75b0d872254de829659d2d0abde88087bd6615e71570d9df393537",
151+    "https://esm.sh/v116/@reduxjs/toolkit@1.9.5/dist/createAsyncThunk.d.ts": "52f167b5fe797d104a06fd547c52524ed1e47ed0e133f908bb858fa8d3200c39",
152+    "https://esm.sh/v116/@reduxjs/toolkit@1.9.5/dist/createDraftSafeSelector.d.ts": "7c30461494df47caf22d491c61b4c163bfa41a8cd0dd3187a5fd3ecdfe80d064",
153+    "https://esm.sh/v116/@reduxjs/toolkit@1.9.5/dist/createReducer.d.ts": "bfb74d106fcdbe7d3e8980ec4dad56beac15bdbc789834e406ac156b7aedce98",
154+    "https://esm.sh/v116/@reduxjs/toolkit@1.9.5/dist/createSlice.d.ts": "be53d34fe419fdf7328c61fac39a6b4dc67dbe72d685df4c6e87d3bb67fb7ace",
155+    "https://esm.sh/v116/@reduxjs/toolkit@1.9.5/dist/devtoolsExtension.d.ts": "42b582be2f188c44ef9c3ea7f1e4a331f96aa295ad7a8458d5510c2ac0cf5ba4",
156+    "https://esm.sh/v116/@reduxjs/toolkit@1.9.5/dist/entities/create_adapter.d.ts": "86047e291068bd62b05fd24479a1b8dc3b25f0e5a7b045c8e7836b937b410a10",
157+    "https://esm.sh/v116/@reduxjs/toolkit@1.9.5/dist/entities/models.d.ts": "573a8601ded5b0d4cb13710deaba6f587730963b5eef0616fa2833eaf95a2c12",
158+    "https://esm.sh/v116/@reduxjs/toolkit@1.9.5/dist/getDefaultMiddleware.d.ts": "72a93432821fa87e8fe3b4caa49a1300099c62b9532bb8906f226fd15cc144d7",
159+    "https://esm.sh/v116/@reduxjs/toolkit@1.9.5/dist/immutableStateInvariantMiddleware.d.ts": "b4826e2f70b1f969f31ca101e846ac2b975fe52ae415d069e0270eb71eecc4ef",
160+    "https://esm.sh/v116/@reduxjs/toolkit@1.9.5/dist/index.d.ts": "94d426259dcdaa9fd1a4dd6cf6fc68e43b849be4430bcd5cc4f718b4eb1933bf",
161+    "https://esm.sh/v116/@reduxjs/toolkit@1.9.5/dist/isPlainObject.d.ts": "9eb137d865a0d950d6ca3464986491ff4630bebfcad9bb8a51693e141414d5b5",
162+    "https://esm.sh/v116/@reduxjs/toolkit@1.9.5/dist/listenerMiddleware/exceptions.d.ts": "ea4d6bde3b49be5fffdf07ea5378141b254fd9ae32082ff1c1b407e645bf1466",
163+    "https://esm.sh/v116/@reduxjs/toolkit@1.9.5/dist/listenerMiddleware/index.d.ts": "aa3769da6c50472cde1f6b23e52e4d2c6c5534dd6f77ce5f2a71557a2c011154",
164+    "https://esm.sh/v116/@reduxjs/toolkit@1.9.5/dist/listenerMiddleware/types.d.ts": "34933f88d0e39efbf49fc4590f6552b06a133d782060281d12ad718ab3e24bc3",
165+    "https://esm.sh/v116/@reduxjs/toolkit@1.9.5/dist/mapBuilders.d.ts": "4764ddd4bc8fa66d605bbdc3917ab982da9bbaa82853e64625cf0ef14a677560",
166+    "https://esm.sh/v116/@reduxjs/toolkit@1.9.5/dist/matchers.d.ts": "4ef992436eae16230a9188019008a43b3264768c126a007e5476f4cb337967f9",
167+    "https://esm.sh/v116/@reduxjs/toolkit@1.9.5/dist/nanoid.d.ts": "cba4372698930577bb0f3e9f8a959bb9fc9c0d0de9b118d4225584132fea3134",
168+    "https://esm.sh/v116/@reduxjs/toolkit@1.9.5/dist/serializableStateInvariantMiddleware.d.ts": "0b8f76b39f169a03258d1c90456d1662d016f58129423bb232d4df2945826fc9",
169+    "https://esm.sh/v116/@reduxjs/toolkit@1.9.5/dist/tsHelpers.d.ts": "a36ad3bb45c9ce0b2c8f0a9a45a6f66450f99dd178f2b2c50bf8eafa351f2147",
170+    "https://esm.sh/v116/@reduxjs/toolkit@1.9.5/dist/utils.d.ts": "d1f2b2ed3cad61db965c649bb3de54eba971a076d52dcc1cd3db3adde2fe3af6",
171+    "https://esm.sh/v116/immer@9.0.21/deno/immer.mjs": "72a04644488470cf7cdd867cc83736a7eb1b591ac522aad760a76f335ad33244",
172+    "https://esm.sh/v116/immer@9.0.21/dist/core/current.d.ts": "99cf6d12499eac02b32c6fa20a8d361a43575ff2fbb774091921c1fa948d046a",
173+    "https://esm.sh/v116/immer@9.0.21/dist/core/finalize.d.ts": "4e39c4f3c1a84861990fdf88c2ae5fd629e2445f6a8f24bff38fcfd95992b3b6",
174+    "https://esm.sh/v116/immer@9.0.21/dist/core/immerClass.d.ts": "16648246bb3e97f7cb5fcc27ed75b158745e05fe838249195d65b37df3c9f4af",
175+    "https://esm.sh/v116/immer@9.0.21/dist/core/proxy.d.ts": "152b6b88eb7d551ddee1aac42693b234c06b7a0914de2c36e947db2080ef8b97",
176+    "https://esm.sh/v116/immer@9.0.21/dist/core/scope.d.ts": "54bbcd36a79afff3b496e8dcba7793bd90756466c41823804f404cec25d6401e",
177+    "https://esm.sh/v116/immer@9.0.21/dist/immer.d.ts": "bc17494a8b7026424ff0c544ea0e3f0502d8f1597daba3c51b7eadee545b321c",
178+    "https://esm.sh/v116/immer@9.0.21/dist/internal.d.ts": "db4029f5b7d82fe41bedb97f6486bc2c64b844e0d0356858679d1aab41c03688",
179+    "https://esm.sh/v116/immer@9.0.21/dist/plugins/all.d.ts": "53361b025e519ff36cbaf171d3d119cb02964a9bf8e5e3a460010067e4048b14",
180+    "https://esm.sh/v116/immer@9.0.21/dist/plugins/es5.d.ts": "20f03fd18464739bf7a688a622c684018c532ed7fdff414da90969d3a4f752f9",
181+    "https://esm.sh/v116/immer@9.0.21/dist/plugins/mapset.d.ts": "72b014db5edcf7c04a88c8eefe7c02664c0513db13aab5810956063ce6716128",
182+    "https://esm.sh/v116/immer@9.0.21/dist/plugins/patches.d.ts": "b7801c3343f3673b0caa4801952d0620b91914d447252aacba88fc1dfb5c7f6a",
183+    "https://esm.sh/v116/immer@9.0.21/dist/types/types-external.d.ts": "9cfa1a46692b51ce18dafbce5259f9c0971832ab1f5201a89a70e23b0b7cf9e2",
184+    "https://esm.sh/v116/immer@9.0.21/dist/types/types-internal.d.ts": "fca1f054dc1076d04d0d98db29996c954e8d02033c9c403ac757e9c10bbe52f3",
185+    "https://esm.sh/v116/immer@9.0.21/dist/utils/common.d.ts": "c4438b8655cc0415fee50e035ce9e238c1c017f2098931cbf2ec425f38a6fce5",
186+    "https://esm.sh/v116/immer@9.0.21/dist/utils/env.d.ts": "f5a35aab17a4fb73b9bca92b3db33cc10649f2af281862a01231ce8d0d500d40",
187+    "https://esm.sh/v116/immer@9.0.21/dist/utils/errors.d.ts": "7a43554d2b957482977f76623246b78fab4bdfee55daae1531300f37602d4a88",
188+    "https://esm.sh/v116/immer@9.0.21/dist/utils/plugins.d.ts": "282ca31db57b351ef685ea90d97dea434755390329b1297f3d67ee06dae144d0",
189+    "https://esm.sh/v116/redux-thunk@2.4.2/deno/redux-thunk.mjs": "687502e01f5778ac5b2405b2d9b9821fc1d78f4e31f468a43ec2f29abb0bf16b",
190+    "https://esm.sh/v116/redux-thunk@2.4.2/es/index.d.ts": "09ea3a885943344abff8c2abd11dd2644b923128cf8496f7153bfd27acb3a9d8",
191+    "https://esm.sh/v116/redux-thunk@2.4.2/es/types.d.ts": "16d082070829e6986cc7e73958a398c39fc01359fb00ca14a4b29fdf5e4c1283",
192+    "https://esm.sh/v116/redux@4.2.1/deno/redux.mjs": "47f30326af233ec342f863df2d327f074fa2b7b9c71ce648079fe0f8c46a1dc7",
193+    "https://esm.sh/v116/redux@4.2.1/index.d.ts": "fd624f7d7b264922476685870f08c5e1c6d6a0f05dee2429a9747b41f6b699d4",
194+    "https://esm.sh/v116/reselect@4.1.8/deno/reselect.mjs": "2de96350507153619ce7cdbd1a760c814b3974395f4b5bc8bd887d3b04b09028",
195+    "https://esm.sh/v116/reselect@4.1.8/es/defaultMemoize.d.ts": "2d8a1d85b6155ca124eb6ce4d1043471e77b7b8aedda8f2eedb631aac1057416",
196+    "https://esm.sh/v116/reselect@4.1.8/es/index.d.ts": "55a54814090dda59f242a9c891a6a57a985350e5dc0156646a42e88f400c8dd4",
197+    "https://esm.sh/v116/reselect@4.1.8/es/types.d.ts": "0cf2ff23a287d45bf80b88e0c3aefa60881546a0184cae70af91fbc308d016dd",
198+    "https://esm.sh/v116/reselect@4.1.8/es/versionedTypes/index.d.ts": "ed1c984ea8ee3824ab9e262580b845d407f8ca998d7e324a468981e2b461bad3",
199+    "https://esm.sh/v116/reselect@4.1.8/es/versionedTypes/ts47-mergeParameters.d.ts": "1b3a9c3b73e5b61b48c6fc131806b5197a8243e2fa863956717173fbef934420",
200     "https://raw.githubusercontent.com/cowboyd/instructional-effection/v0.0.3/abort-signal.ts": "31224b5f61f1ef58a2acf72bfc1cb9c9bf589f15c263b6555eb06f1b49f77b54",
201     "https://raw.githubusercontent.com/cowboyd/instructional-effection/v0.0.3/async.ts": "c3eae4b79fdd0338ca77915bea79e7df142293a55903c0ef774f5cf633b20171",
202     "https://raw.githubusercontent.com/cowboyd/instructional-effection/v0.0.3/callback.ts": "db306b0b8860cb40dc8e47f18467b24161cfa1bbc7f99fc15fbdd4665fa02a88",
M deps.ts
+1, -0
1@@ -1,5 +1,6 @@
2 import React from "https://esm.sh/react@18.2.0";
3 export { React };
4+export { configureStore } from "https://esm.sh/@reduxjs/toolkit@1.9.5";
5 export type {
6   Channel,
7   Instruction,
M redux.ts
+66, -3
 1@@ -1,10 +1,16 @@
 2-import type { Channel, Scope } from "./deps.ts";
 3+import type { Channel, Operation, Scope } from "./deps.ts";
 4 import type { Action, OpFn, StoreLike } from "./types.ts";
 5 import type { ActionPattern } from "./matcher.ts";
 6 
 7-import { createChannel, createContext, createScope } from "./deps.ts";
 8+import {
 9+  configureStore,
10+  createChannel,
11+  createContext,
12+  createScope,
13+  spawn,
14+} from "./deps.ts";
15 import { contextualize } from "./context.ts";
16-import { call, emit, parallel } from "./fx/mod.ts";
17+import { call, cancel, emit, parallel } from "./fx/mod.ts";
18 import { once } from "./iter.ts";
19 
20 export const ActionContext = createContext<Channel<Action, void>>(
21@@ -26,6 +32,49 @@ export function* take(pattern: ActionPattern) {
22   });
23 }
24 
25+export function* takeEvery<T>(
26+  pattern: ActionPattern,
27+  op: (action: Action) => Operation<T>,
28+) {
29+  return yield* spawn(function* () {
30+    while (true) {
31+      const action = yield* take(pattern);
32+      if (!action) continue;
33+      yield* spawn(() => op(action));
34+    }
35+  });
36+}
37+
38+export function* takeLatest<T>(
39+  pattern: ActionPattern,
40+  op: (action: Action) => Operation<T>,
41+) {
42+  return yield* spawn(function* () {
43+    let lastTask;
44+    while (true) {
45+      const action = yield* take(pattern);
46+      if (lastTask) {
47+        yield* cancel(lastTask);
48+      }
49+      if (!action) continue;
50+      lastTask = yield* spawn(() => op(action));
51+    }
52+  });
53+}
54+
55+export function* takeLeading<T>(
56+  pattern: ActionPattern,
57+  op: (action: Action) => Operation<T>,
58+) {
59+  return yield* spawn(function* () {
60+    while (true) {
61+      const action = yield* take(pattern);
62+      if (!action) continue;
63+      yield* call(() => op(action));
64+    }
65+  });
66+}
67+
68 export function* put(action: Action | Action[]) {
69   yield* emit({
70     channel: ActionContext,
71@@ -62,3 +111,17 @@ export function createFxMiddleware(scope: Scope = createScope()) {
72 
73   return { run, scope, middleware };
74 }
75+
76+interface SetupStoreProps<S = any> {
77+  reducer: (s: S, _: Action) => S;
78+}
79+
80+export function setupStore({ reducer }: SetupStoreProps) {
81+  const fx = createFxMiddleware();
82+  const store = configureStore({
83+    reducer,
84+    middleware: [fx.middleware],
85+  });
86+
87+  return { store, fx };
88+}
A test/take-helper.test.ts
+56, -0
 1@@ -0,0 +1,56 @@
 2+import { describe, expect, it } from "../test.ts";
 3+
 4+import { setupStore, take, takeEvery } from "../redux.ts";
 5+import { cancel } from "../fx/mod.ts";
 6+import type { Action } from "../types.ts";
 7+
 8+const testEvery = describe("takeEvery()");
 9+
10+it(testEvery, "should work", async () => {
11+  const loop = 10;
12+  const actual: string[][] = [];
13+
14+  function* root() {
15+    const task = yield* takeEvery(
16+      "ACTION",
17+      (action) => worker("a1", "a2", action),
18+    );
19+    yield* take("CANCEL_WATCHER");
20+    yield* cancel(task);
21+  }
22+
23+  function* worker(arg1: string, arg2: string, action: Action) {
24+    actual.push([arg1, arg2, action.payload]);
25+  }
26+
27+  const { store, fx } = setupStore({ reducer: (s) => s });
28+  const task = fx.run(root);
29+
30+  for (let i = 1; i <= loop / 2; i += 1) {
31+    store.dispatch({
32+      type: "ACTION",
33+      payload: i,
34+    });
35+  }
36+
37+  // no further task should be forked after this
38+  store.dispatch({
39+    type: "CANCEL_WATCHER",
40+  });
41+
42+  for (let i = loop / 2 + 1; i <= loop; i += 1) {
43+    store.dispatch({
44+      type: "ACTION",
45+      payload: i,
46+    });
47+  }
48+  await task;
49+
50+  expect(actual).toEqual([
51+    ["a1", "a2", 1],
52+    ["a1", "a2", 2],
53+    ["a1", "a2", 3],
54+    ["a1", "a2", 4],
55+    ["a1", "a2", 5],
56+  ]);
57+});