js-csp/js-csp
{ "createdAt": "2014-01-29T14:49:13Z", "defaultBranch": "master", "description": "CSP channels for Javascript (like Clojurescript's core.async, or Go)", "fullName": "js-csp/js-csp", "homepage": "", "language": "JavaScript", "name": "js-csp", "pushedAt": "2022-07-20T03:14:27Z", "stargazersCount": 2329, "topics": [], "updatedAt": "2025-11-19T02:29:56Z", "url": "https://github.com/js-csp/js-csp"}js-csp
Section titled “js-csp”Communicating sequential processes for Javascript (like Clojurescript core.async, or Go).
Maintainer wanted
Section titled “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
Section titled “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]!(examples/) directory.
Documentation
Section titled “Documentation”- [Basic concepts and API]!(doc/basic.md).
- [Advanced operations]!(doc/advanced.md).
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.
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
Section titled “Install”npm install js-cspbower install js-cspContribution
Section titled “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
Section titled “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:stopProduction
Section titled “Production”$ npm run buildIt 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
Section titled “Inspiration”- http://swannodette.github.io/2013/08/24/es6-generators-and-csp
- https://github.com/clojure/core.async
- https://github.com/olahol/node-csp
License
Section titled “License”Distributed under MIT License.