Nunchaku Pizza Master

    flow-runtime

    0.17.0 • Public • Published

    Flow Runtime

    A runtime type system for JavaScript with full Flow compatibility.

    What?

    Provides a rich API for defining, inspecting and verifying data types in JavaScript. Any value that can be represented in JS can be represented by flow-runtime, including full support for polymorphism and parameterized types.

    See the docs for more information.

    Usage

    import t from 'flow-runtime';
     
    const number = t.number();
    const string = t.string();
     
    string.accepts('foo'); // true
    string.accepts(123); // false
    number.accepts(123); // true
     
    string.assert('Hello World!'); // ok
    string.assert(false); // throws
    number.assert(456); // ok
    number.assert('nope'); // throws
     
    const numberOrString = t.union(number, string);
     
    numberOrString.assert(123); // ok
    numberOrString.assert("baz"); // ok
    numberOrString.assert(false); // throws
     
    const fooOrBar = t.union(
      t.string('foo'),
      t.string('bar')
    );
     
    fooOrBar.assert('foo'); // ok
    fooOrBar.assert('bar'); // ok
    fooOrBar.assert('qux'); // throws
     
    const Thing = t.object(
      t.property('name', t.string()),
      t.property('url', t.nullable(t.string()))
    );
     
    Thing.assert({
      name: 'Example',
      url: 'http://example.com/'
    }); // OK
     
     
    Thing.assert({
      name: 'Example'
    }); // OK
     
    Thing.assert({
      name: false
    }); // throws
     
    const arrayOfStrings = t.array(t.string());
     
    arrayOfStrings.assert()
     
    // ---------------------------------------------
     
    const UserStatus = t.union(
      t.string('PENDING'),
      t.string('ACTIVE'),
      t.string('INACTIVE')
    );
     
    const PreferenceName = t.union(
      t.string('marketingOptIn'),
      t.string('darkColourScheme')
    );
     
    const UserPreferences = t.object(
      t.indexer(PreferenceName, t.boolean())
    );
     
    const User = t.object({
      id: t.number(),
      name: t.string(),
      email: t.string(),
      status: UserStatus,
      preferences: UserPreferences
    });
     
    const validUser = {
      id: 123,
      name: 'Sally',
      email: 'sally@example.com',
      status: 'PENDING',
      preferences: {
        marketingOptIn: true
      }
    };
     
    const invalidUser = {
      id: false, // invalid
      name: 'Bob',
      email: 'bob@example.com',
      status: 'NOPE', // invalid
      preferences: {
        marketingOptIn: true,
        nope: true // invalid
      }
    };
     
    User.accepts(validUser); // true
    User.accepts(invalidUser); // false
     
    User.assert(validUser); // OK
    User.assert(invalidUser); // throws TypeError
     

    Keywords

    none

    Install

    npm i flow-runtime

    DownloadsWeekly Downloads

    18,270

    Version

    0.17.0

    License

    MIT

    Unpacked Size

    2.5 MB

    Total Files

    117

    Last publish

    Collaborators

    • gajus
    • charlespick
    • jedwards1211