js-csp

CSP channels for Javascript (like Clojurescript's core.async, or Go)

  • Owner: js-csp/js-csp
  • Platform:
  • License::
  • Category::
  • Topic:
  • Like:
    0
      Compare:

Github stars Tracking Chart

Build Status
codecov
Dependency Status
devDependency Status

js-csp

Communicating sequential processes for Javascript (like Clojurescript core.async, or Go).

Maintainer wanted

This project is at maintenance mode at the moment, and actively looking for new maintainers. Please send us
an issue via github if you are interested.

Current maintainer: hung-phan, gt3

Examples

const csp = require('js-csp');

Pingpong (ported from Go).

function* player(name, table) {
  while (true) {
    let ball = yield csp.take(table);

    if (ball === csp.CLOSED) {
      console.log(name + ": table's gone");
      return;
    }

    ball.hits += 1;
    console.log(`${name} ${ball.hits}`);

    yield csp.timeout(100);
    yield csp.put(table, ball);
  }
}

csp.go(function* () {
  const table = csp.chan();

  csp.go(player, ["ping", table]);
  csp.go(player, ["pong", table]);

  yield csp.put(table, {hits: 0});
  yield csp.timeout(1000);

  table.close();
});

There are more under examples directory.

Documentation

This is a very close port of Clojurescript's core.async. The most significant difference
is that the IOC logic is encapsulated using generators (yield) instead of macros. Therefore resources on core.async or Go channels are also helpful.

Other

Or, if you use Python's Twisted:
https://github.com/ubolonton/twisted-csp

Or, if you use Clojure:
https://github.com/clojure/core.async

Install

npm install js-csp
bower install js-csp

Contribution

Feel free to open issues for questions/discussions, or create pull requests for improvement.

Some areas that need attention:

  • More documentation, examples, and maybe some visualization. Porting RxJS/Bacon examples may help.
  • Multiplexing, mixing, publishing/subscribing. These need to be tested more. The API could also be improved.
  • Deadlock detection.

Development

These commands are supposed to run separately

$ npm run test:watch
$ npm run lint # for code quality checking
$ npm run flow:watch # to stop server after you are done run npm run flow:stop

Production

$ npm run build

It will transpile all the codes in src to lib, or even better if you use webpack 2 to consume
the lib via "module": "./src/csp.js".

Inspiration

License

Distributed under MIT License.

Main metrics

Overview
Name With Ownerjs-csp/js-csp
Primary LanguageJavaScript
Program languageJavaScript (Language Count: 1)
Platform
License:
所有者活动
Created At2014-01-29 14:49:13
Pushed At2022-07-20 03:14:27
Last Commit At2018-02-08 14:50:30
Release Count22
Last Release Name0.9.2 (Posted on )
First Release Name0.1.0 (Posted on )
用户参与
Stargazers Count2.3k
Watchers Count53
Fork Count121
Commits Count369
Has Issues Enabled
Issues Count79
Issue Open Count28
Pull Requests Count49
Pull Requests Open Count8
Pull Requests Close Count11
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private