Skip to content

Typescript/Javascript implementation of Sodium FRP (Functional Reactive Programming) library

Notifications You must be signed in to change notification settings

SodiumFRP/sodium-typescript

Folders and files

NameName
Last commit message
Last commit date
Mar 27, 2025
Jul 30, 2016
Feb 19, 2019
May 29, 2019
Jan 3, 2018
Feb 8, 2018
Mar 27, 2025
Jul 18, 2019
Aug 31, 2018
Aug 31, 2018
Jul 12, 2018
Jan 3, 2018

Repository files navigation

Build Status npm version Bower version Downloads

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 sodiumjs

via Yarn

$> yarn add sodiumjs
$> yarn global add sodiumjs

via 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:

  1. cd src/tests/integration
  2. npm run dev:auto-reload (or just npm run dev without 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.