Package Exports
- sodiumjs
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (sodiumjs) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Sodium
A Functional Reactive Programming (FRP) library for TypeScript/JavaScript
Examples
Here are some demos from the community you can try in your browser:
Prerequisite: Node.js
Install Node.js® and npm if they are not already on your machine.
Installation
via NPM
$> npm install sodiumjs
$> npm install -g sodiumjsvia Yarn
$> yarn add sodiumjs
$> yarn global add sodiumjsvia html include
<script src="https://cdn.jsdelivr.net/npm/sodiumjs/dist/sodium.umd.min.js"></script>this requires also including sanctuary-type-classes and typescript-collections dependencies
How to use
Import
import { Cell } from 'sodiumjs';ES6
const c = new Cell(12);TypeScript
const c = new Cell<number>(12);In a browser
<script>
var cell = new Sodium.Cell(12);
</script>Development
The usual npm run build/test/clean commands are available to produce the distribution package.
However, a more comfortable iteration style may be using the the live integration testing approach:
- cd
src/tests/integration npm run dev:auto-reload(or justnpm run devwithout live reloading)
This starts up a local development server and showcases integration with a webpack app.
Changes to the core lib are then seen live since it uses a local alias rather than reference the lastest build or distribution of the library
Sodium library code is in src/lib
Packaging/tree-shaking and bundling of the library is done with Rollup
Testing is via Jest
License
Distributed under BSD 3-Clause
Announcement
Stephen Blackheath, 9 Jul 2016
I am very happy to announce that the Typescript implementation of Sodium is ready!
It features a newly developed scheme for memory management, which was needed because Javascript has no finalizers. Memory management in Sodium is 100% automatic.
This scheme imposes one small requirement on the API: You must declare any Sodium objects held inside closures using wrapper functions lambda1, lambda2 .. lambda6 - depending on the number of arguments that the closure has. These take a second argument, which is a list of the Sodium objects contained in the context of the closure. For example:
csw = csw_str.map(lambda1(sw => sw == "sa" ? sa : sb, [sa, sb])),
This allows Sodium to track all dependencies. There are some limitations to this scheme - for example, it can't track dependencies if you poke arbitrary Sodium objects into a StreamSink, but I think these should not affect any normal usages. Time will tell.
CHANGELOG
1.0.5 Migrate build environment over to fuse-box. Begin adding fantasy-land compatibility
1.0.0 Add snapshot3(), snapshot4(), snapshot5() and snapshot6(). Fix a serious bug in TimerSystem where timers sometimes don't fire.