0.17.0 • Published 6 years ago

flow-runtime v0.17.0

Weekly downloads
21,141
License
MIT
Repository
github
Last release
6 years ago

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
@hellpack/packermultipart-raw-parser@lanetix/odata-ast-transformations@lanetix/odata-parser@oss-stealth/base@oss-stealth/paper@gratico/npmlazada-nodejs-sdk@everything-registry/sub-chunk-1684postfix.js@rachio-npm/com-rachio-web-coresimple-auth-client@playlyfe/gqlreact-alp-routepooliot-clientraspberry-client@nod/scripts@nod/emptypromise-callback-factoryshipxanh-oalazadashopify-coresocifi-rollup-config@troveng/swagger-gen-js@tychot/gql@sprucelabs/heartwood-components-react@stefanwimmer128/core@stefanwimmer128/core-class@stefanwimmer128/core-data@stefanwimmer128/core-event@stefanwimmer128/core-types@stefanwimmer128/core-utilsswaggernautfodyflow-runtime-cliflow-runtime-docsflow-runtime-fakerflowqlfinal-arangofinal-serverlilalila-webpack-lib-configmultipart-raw-parser-legacylucas-gqllazada-apilazada-open-platform-sdklazada-sdkmastarmmangakamendermindless-route53google-apisnightingale-error-processornightingale-file-outputnightingale-handlernitro-sgliwi-rethinkdbkrobotjskoackhangagrumbler-scriptsisomorphic-webpackpg-db-objects@flowaccount/lazada-open-platform-sdk@forabi/gqlpipesjs@vlsergey/babel-configbabel-preset-playlyfebabel-plugin-conditionalbabel-plugin-conditional-skitalp-errors-browseralp-languagealp-react-reduxalp-configalp-limosaalp-authalouetteasync-storage-replalaudats-runtime@zalastax/nolb-flowboleto-brcabbie-synccabbie-async@chantelle/gulp-tasks@chantelle/scripts@chantelle/config@jcoreio/auth0-meteor@bodidata/eventsyosugacloe@infinitebrahmanuniverse/nolb-flow@lectro/enhancer-flowruntime@leansdk/leanes@maggiben/electron-clipboard-manager@maggiben/google-apis@maggiben/scurrydraper
0.17.0

6 years ago

0.16.0

6 years ago

0.15.0

6 years ago

0.14.0

7 years ago

0.13.0

7 years ago

0.12.0

7 years ago

0.11.1

7 years ago

0.11.0

7 years ago

0.10.0

7 years ago

0.9.1

7 years ago

0.9.0

7 years ago

0.8.0

7 years ago

0.7.0

7 years ago

0.6.1

7 years ago

0.6.0

7 years ago

0.5.0

7 years ago

0.4.0

7 years ago

0.3.0

7 years ago

0.2.1

7 years ago

0.2.0

7 years ago

0.1.0

7 years ago

0.0.6

7 years ago

0.0.5

7 years ago

0.0.4

7 years ago

0.0.3

7 years ago

0.0.2

7 years ago

0.0.1

7 years ago

0.0.0

7 years ago