Nincompoops Producing Methane

    sporadic

    0.4.2 • Public • Published

    sporadic

    Composable Concurrency Abstractions for JavaScript.


    Example

    #!/usr/bin/env node
     
    (async () => {
      const sporadic = require('sporadic')
      const channel = await sporadic.channels.open()
     
      const wasReceivedPromise = sporadic.channels.send(channel, "Hello, World!")
      const messagePromise = sporadic.channels.receive(channel)
      const promises = [ wasReceivedPromise, messagePromise ]
     
      const [ wasReceived, message ] = await Promise.all(promises)
      console.log(wasReceived) // ==> true
      console.log(message) // ==> Hello, World!
    })()

    Installation

    Through UNPKG (for browsers):

    <script src="https://unpkg.com/sporadic/dist/index.js"></script>

    Through NPM:

    $ npm install sporadic

    To install the development snapshot, use npm link. For example, on this cloned repository:

    $ npm link .

    And then, on your project:

    $ npm link sporadic

    Stable releases are tags in the branch release. The master branch here is only to track the next releases, please don't rely too much on that branch. All the hard work is made on the development branch.

    Documentation

    For every submodule within this sporadic library, there's an API documentation available at the directory docs/ under the filename SUBMODULE.md, where SUBMODULE stands for the submodule provided with this library (yes, I know the redundancy 😂). Each submodule corresponds to a concurrency abstraction. Currently, the following abstractions are implemented:

    • sporadic.streams, an abstraction for reactive streams made of multiple publishers and multiple subscribers. The subscription process is implicit, the reference for the stream object is all that is needed.

    • sporadic.channels, an abstraction for synchronous queues made of many producers and consumers. This concurrent data type is a bare minimal tool for pipelines of chained producers and consumers.

    • sporadic.coroutines, an abstraction for suspendable subroutines. Such abstraction also behaves as a task/promise whenever we wait for the final coroutine result (but keep in mind that coroutines can "loop" forever). It's kinda like the JavaScript generators, with the sole difference of being asynchronous instead synchronous calls (and thus, allowing us to mix asynchronous I/O with that).

    Remarks

    PRs & Issues are always welcome 🏠! Feel free to open one ✌️! Happy hacking 💻!

    License

    FOSSA Status

    Install

    npm i sporadic

    DownloadsWeekly Downloads

    12

    Version

    0.4.2

    License

    MIT

    Unpacked Size

    198 kB

    Total Files

    37

    Last publish

    Collaborators

    • marcoonroad