Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 1,000,000+ packages pre-installed, including bs-generators with all npm packages installed. Try it out:

bs-generators lists no main file and has no index.js, so it can't be directly required. If this is a mistake, please let us know. It may however contain internal files that you can require manually:

// require("bs-generators/[??]")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

bs-generators v0.2.0

BuckleScript bindings to JavaScripts Generator objects

bs-generators

npm

Source: https://github.com/mscharley/bs-generators
Author: Matthew Scharley
Contributors: See contributors on GitHub
Bugs/Support: Github Issues
Copyright: 2018
License: MIT license
Status: Active

Synopsis

This package provides bindings to use and create JavaScripts' Generator objects, aka function*() {}.

Using this library you can consume JavaScript libraries that use function* and you can create objects that operate like that JS syntax to send into JavaScript land as well.

A word of warning. This library should only really be considered for interoperation with existing JavaScript code that uses Generators. I do not recommend using these types on their own inside ReasonML/Ocaml codebases.

Installation

Depending on your package manager of choice,

npm install bs-generators

or

yarn add bs-generators

Usage

The best API documentation so far is the interface file.

Using a function* defined in JavaScript and provided to your Reason code

open JsGenerator;

/* Create a generator - pretend this comes from the outside */
let jsGen: JsGenerator.fnU(int) = [%raw "function *() { yield 1; yield 2; yield 3 }"];
let gen = jsGen();

/* Iterate over the generator and stop when doneGet returns true */
Js.log("Running the JavaScript generator:");
let i = ref(gen->next());
while (! (i^)->doneGet) {
  Js.log((i^)->valueGet);
  i := gen->next();
}

Creating a Generator to pass into JavaScript code

let reGen: JsGenerator.fn(int) = _ => JsGenerator.fromNext({
  /* Create a mutable counter */
  let i = ref(0);
  () => {
    if (i^ < 3) {
      i := i^ + 1;
      /* You can also return Some(None) to send an undefined value to JS without closing the Generator */
      Some(Some(i^));
    }
    else {
      /* Close the Generator */
      None;
    }
  }
});

Js.log("Running the Reason generator:");
[%%raw "for (var x of reGen()) { console.log(x); }"];

Metadata

RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free