@kingjs/define-enumerable-type

1.0.0 • Public • Published

@kingjs/define-enumerable-type

Define an enumerable type from a MoveNext() factory.

Usage

Define an enumerable type for iterating Array using a moveNext() factory like this:

var defineEnumerableType = require('@kingjs/define-enumerable-type');

var moveNextFactory = function(array) {
  var index = -1;
  return function moveNext() {
    if (index + 1 == array.length)
      return false;
    this.current_ = array[++index];
    return true;
  }
}

var ArrayEnumerable = defineEnumerableType(moveNextFactory);

Voila! Now, test the ArrayEnumerable like this:

var enumerable = new ArrayEnumerable([0, 1, 2]);
var enumerator = enumerable.getEnumerator();

var actual = [];
while (enumerator.moveNext())
  actual.push(enumerator.current);
actual;

outputs:

[0, 1, 2];

API

declare function defineEnumerableType(
    moveNextFactory: {
        (...args: any[]): {
            moveNext: { (): Boolean }
        }
    }): typeof Enumerable;
    
declare class Enumerable {
    constructor(...args: any[]);

    getEnumerator: {
        (): {
            moveNext: { (): Boolean },
            current: any
        }
    }
}

Parameters

moveNextFactory: a function that returns a moveNext() function closed over the enumerable activation arguments.

Return Value

An enumerable type whose activation arguments are saved and passed to the specified moveNextFactory when getEnumerator() is called.

Install

With npm installed, run

$ npm install @kingjs/define-enumerable-type

Acknowledgments

define-enumerable-type was inspired by the boilerplate generated by C# yield syntax. Though we cannot generate the state machine, we can generate the type scaffolding.

See Also

License

MIT

Readme

Keywords

none

Package Sidebar

Install

npm i @kingjs/define-enumerable-type

Weekly Downloads

0

Version

1.0.0

License

MIT

Unpacked Size

4.24 kB

Total Files

4

Last publish

Collaborators

  • kingces95