Karsten Schmidt<p><a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> <a href="https://mastodon.thi.ng/tags/ReleaseFriday" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ReleaseFriday</span></a>[1] 🚀 — As announced a couple of weeks ago, a lot of my recent work has been centered around async iterables and addressing the conceptual overlap between the various packages related to those, specifically: <a href="https://thi.ng/transducers-async" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/transducers-async</span><span class="invisible"></span></a>, <a href="https://thi.ng/rstream" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/rstream</span><span class="invisible"></span></a>, <a href="https://thi.ng/csp" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/csp</span><span class="invisible"></span></a>, <a href="https://thi.ng/fibers" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/fibers</span><span class="invisible"></span></a>, and partially related, <a href="https://thi.ng/rdom" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/rdom</span><span class="invisible"></span></a> too. Apart from the first package, until recently, none of the others had direct support for async iterables (largely for historic reasons), but they all offer similar operators & functionality (via different means), which I'm slowly consolidating where it makes sense...</p><p>Part of this pretty large undertaking has been a complete rewrite of the temporarily deprecated <a href="https://thi.ng/csp" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/csp</span><span class="invisible"></span></a> package for Communicating Sequential Processes[2] (IMHO one of the most elegant & sane ways to structure larger apps via multiple small, reasonable concurrent processes). The package is active again now (as v3+) albeit constituting a new API (new docs still WIP) and removing any direct transducer-related functionality — this is one aspect of the aforementioned consolidation and now simply assumed to be delegated to the <a href="https://thi.ng/transducers-async" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/transducers-async</span><span class="invisible"></span></a> and/or non-async <a href="https://thi.ng/transducers" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/transducers</span><span class="invisible"></span></a> packages. I've also included a new small example project showing mixed usage patterns of working with CSP channels and combining them with (async) transducers to create derived views:</p><p>Demo:<br><a href="https://demo.thi.ng/umbrella/csp-bus/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">demo.thi.ng/umbrella/csp-bus/</span><span class="invisible"></span></a></p><p>Source:<br><a href="https://github.com/thi-ng/umbrella/blob/develop/examples/csp-bus/src/events.ts" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">github.com/thi-ng/umbrella/blo</span><span class="invisible">b/develop/examples/csp-bus/src/events.ts</span></a></p><p>Hand in hand with these major changes are smaller and still ongoing updates to <a href="https://thi.ng/rdom" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/rdom</span><span class="invisible"></span></a>, which recently received partial support for embedded async iterables as reactive values inside a UI/DOM component tree. The goal for this package is to become fully decoupled from <a href="https://thi.ng/rstream" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/rstream</span><span class="invisible"></span></a> and focus more on the equally powerful, but more lightweight (since part of the language) async iterables. Adapters from rstream → asynciter already exists (see docs).</p><p>Unrelated, but also part of this week's release: The new version of <a href="https://thi.ng/meta-css" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/meta-css</span><span class="invisible"></span></a> includes support for CSS `light-dark()`. The base framework now includes ~950 utilities & 70 functions. See readme for full list...</p><p>Happy coding! :)</p><p>[1] There're actually a lot more frequent release, but these days I'm only mentioning the more notable ones to not spam everyone...</p><p>[2] <a href="https://en.wikipedia.org/wiki/Communicating_sequential_processes" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">en.wikipedia.org/wiki/Communic</span><span class="invisible">ating_sequential_processes</span></a></p><p><a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> <a href="https://mastodon.thi.ng/tags/CSP" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CSP</span></a> <a href="https://mastodon.thi.ng/tags/Async" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Async</span></a> <a href="https://mastodon.thi.ng/tags/Transducers" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Transducers</span></a> <a href="https://mastodon.thi.ng/tags/Reactive" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Reactive</span></a> <a href="https://mastodon.thi.ng/tags/UI" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>UI</span></a> <a href="https://mastodon.thi.ng/tags/DOM" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>DOM</span></a> <a href="https://mastodon.thi.ng/tags/CSS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CSS</span></a> <a href="https://mastodon.thi.ng/tags/TypeScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TypeScript</span></a> <a href="https://mastodon.thi.ng/tags/JavaScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JavaScript</span></a> <a href="https://mastodon.thi.ng/tags/OpenSource" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>OpenSource</span></a></p>