bs-generators

    0.2.0 • Public • Published

    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); }"];

    Install

    npm i bs-generators

    DownloadsWeekly Downloads

    0

    Version

    0.2.0

    License

    MIT

    Unpacked Size

    9.96 kB

    Total Files

    8

    Last publish

    Collaborators

    • mscharley