This page will explain how to install the Wonka package and its basic usage and helper functions.
Installation
The wonka
package from npm
is all you need to install to use
Wonka. The process is the same with yarn
and esy
.
bash
yarn add wonka# or with npm:npm install --save wonka# or with esy:esy add wonka
For JavaScript projects, the package contains both CommonJS and ES Modules bundles. For Flow and TypeScript the package also contains typings files already, so if you’re using either you’re already done and ready to go.
If you’re using BuckleScript or bs-native
you will need to add "wonka"
to your bs-dependencies
in your bsconfig.json
configuration file:
diff
{"name": "<some_name>","version": "0.1.0","sources": ["src"],"bsc-flags": ["-bs-super-errors"],"bs-dependencies": [+ "wonka"]}
If you’re using Dune and Esy you will need to add wonka
to
your libraries
entry in the respective dune
configuration file:
diff
(library(name some_name)(public_name some_name)+ (libraries wonka))
Usage with JavaScript
In most cases you’ll simply import or require wonka
and use its exposed
methods and utilities. In both CommonJS and ES Modules the Wonka package
simply exposes all its utilities.
js
// With CommonJSconst { fromArray } = require('wonka');// With ES Modulesimport { fromArray } from 'wonka';
There are also some special operators in Wonka that will only be exposed in
Web/JavaScript environments, like fromPromise
, toPromise
,
or fromEvent
, or even debounce
and throttle
.
In TypeScript and Flow the typings also expose all types.
There’s also a special utility in JavaScript environments to replace the pipeline
operator. This function is called pipe
and simply calls functions that it’s
being passed in order with the previous return value.
js
import { pipe } from 'wonka';const output = pipe('test',x => x + ' this',x => x.toUpperCase());output; // "TEST THIS"
As shown above, the pipe
function takes the first argument and passes it
in order to the other function arguments. The return value of one function will
be passed on to the next function.
In TypeScript and Flow the pipe
function is also typed to handle all generics
in Wonka utilities correctly. Using it will ensure that most of the time you won’t
have to specify the types of any generics manually.
If you’re using Babel and the pipeline proposal plugin, you can just use
the pipeline operator to do the same and not use the pipe
helper.
Usage with Reason
Everything in the Wonka package is exposed under a single module called Wonka
.
This module also contains Wonka.Types
, which contains all internal types of the Wonka
library, but you will typically not need it.
In BuckleScript
when you’re compiling to JavaScript you will also have access to
more utilities like fromPromise
, toPromise
, fromEvent
, or even debounce
and throttle
.
These utilities are missing in native compilation, like Dune or bsb-native
, since they’re
relying on JavaScript APIs like Promises, window.addEventListener
, and setTimeout
.
When using Wonka you’d simply either open the module and use its utilities or just
access them from the Wonka
module:
reason
Wonka.fromValue("test")|> Wonka.map((.x) => x ++ " this")|> Wonka.forEach((.x) => print_endline(x));
It’s worth noting that most callbacks in Wonka need to be explicitly uncurried, since this will help them compile cleanly to JavaScript.
Interoperability
In JavaScript environments, Wonka comes with several utilities that make it easier to interoperate with JavaScript primitives and other libraries:
fromPromise
&toPromise
can be used to interoperate with PromisesfromObservable
&toObservable
can be used to interoperate with spec-compliant ObservablesfromCallbag
&toCallbag
can be used to interoperate with spec-compliant Callbags
Furthermore there are a couple of operators that only work in JavaScript environments
since they need timing primitives, like setTimeout
and setInterval
: