From 62e450dedeccb24f7fe6525342e9c2d50373364d Mon Sep 17 00:00:00 2001 From: gcanti Date: Sun, 11 Feb 2018 08:58:24 +0100 Subject: [PATCH 1/2] 0.3.0 --- README.md | 4 +- package.json | 14 +- src/Date/DateFromISOString.ts | 14 +- src/Date/DateFromNumber.ts | 14 +- src/Date/DateFromUnixTime.ts | 15 +- src/JSON/JSONFromString.ts | 13 +- src/JSON/JSONTypeRT.ts | 5 +- src/fp-ts/createEitherFromJSON.ts | 33 ++-- src/fp-ts/createOptionFromJSON.ts | 21 +-- src/fp-ts/createOptionFromNullable.ts | 4 +- src/index.ts | 14 -- src/monocle-ts/AnyNumberPrism.ts | 4 - src/monocle-ts/AnyStringPrism.ts | 4 - src/monocle-ts/ISOStringDatePrism.ts | 10 -- src/monocle-ts/MillisecondSecondIso.ts | 3 - src/monocle-ts/MixedStringPrism.ts | 5 - src/monocle-ts/NumberDatePrism.ts | 10 -- src/monocle-ts/NumberIntegerPrism.ts | 4 - src/monocle-ts/StringJSONPrism.ts | 11 -- src/monocle-ts/StringNumberPrism.ts | 10 -- src/monocle-ts/TypePrismIso.ts | 9 +- src/monocle-ts/createRangePrism.ts | 5 - src/monocle-ts/lensesFromInterface.ts | 2 +- src/monocle-ts/lensesFromProps.ts | 2 +- src/newtype-ts/fromNewtype.ts | 4 +- src/number/NumberFromString.ts | 14 +- src/number/createInfRange.ts | 10 -- src/number/createInfSupRange.ts | 10 -- src/number/createRange.ts | 10 -- src/number/createSupRange.ts | 10 -- test/helpers.ts | 16 -- test/index.ts | 217 +++++++++++++------------ 32 files changed, 202 insertions(+), 319 deletions(-) delete mode 100644 src/monocle-ts/AnyNumberPrism.ts delete mode 100644 src/monocle-ts/AnyStringPrism.ts delete mode 100644 src/monocle-ts/ISOStringDatePrism.ts delete mode 100644 src/monocle-ts/MillisecondSecondIso.ts delete mode 100644 src/monocle-ts/MixedStringPrism.ts delete mode 100644 src/monocle-ts/NumberDatePrism.ts delete mode 100644 src/monocle-ts/NumberIntegerPrism.ts delete mode 100644 src/monocle-ts/StringJSONPrism.ts delete mode 100644 src/monocle-ts/StringNumberPrism.ts delete mode 100644 src/monocle-ts/createRangePrism.ts delete mode 100644 src/number/createInfRange.ts delete mode 100644 src/number/createInfSupRange.ts delete mode 100644 src/number/createRange.ts delete mode 100644 src/number/createSupRange.ts delete mode 100644 test/helpers.ts diff --git a/README.md b/README.md index ecd8530..72adf46 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ Solution import * as t from 'io-ts' import { fromNewtype } from 'io-ts-types/lib/newtype-ts/fromNewtype' -const Person = t.interface({ +const Person = t.type({ name: t.string, age: fromNewtype(t.Integer) }) @@ -47,6 +47,6 @@ const ageLens = Lens.fromProp('age').composeIso(iso()) const sum = (a: number) => (b: number) => a + b -console.log(t.validate({ name: 'Giulio', age: 43 }, Person).map(ageLens.modify(sum(1)))) +console.log(Person.decode({ name: 'Giulio', age: 44 }).map(ageLens.modify(sum(1)))) // => right({ name: 'Giulio', age: 44 }) ``` diff --git a/package.json b/package.json index 4163da9..7aa31d1 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,13 @@ { "name": "io-ts-types", - "version": "0.2.4", + "version": "0.3.0", "description": "A collection of runtime types for use with io-ts", "files": ["lib"], "main": "lib/index.js", "typings": "lib/index.d.ts", "scripts": { "lint": "tslint src/**/*.ts test/**/*.ts", - "mocha": "mocha -r ts-node/register test/*.ts", + "mocha": "TS_NODE_CACHE=false mocha -r ts-node/register test/*.ts", "prettier": "prettier --no-semi --single-quote --print-width 120 --parser typescript --list-different \"{src,test}/**/*.ts\"", "fix-prettier": @@ -27,10 +27,10 @@ }, "homepage": "https://github.com/gcanti/io-ts-types", "dependencies": { - "fp-ts": "^0.6.4", - "io-ts": "^0.9.5", - "monocle-ts": "^0.5.2", - "newtype-ts": "^0.1.0" + "fp-ts": "gcanti/fp-ts#next", + "io-ts": "gcanti/io-ts#next", + "monocle-ts": "gcanti/monocle-ts#next", + "newtype-ts": "gcanti/newtype-ts#next" }, "devDependencies": { "@types/mocha": "2.2.38", @@ -40,7 +40,7 @@ "ts-node": "3.2.1", "tslint": "4.4.2", "tslint-config-standard": "4.0.0", - "typescript": "2.6.2" + "typescript": "2.7.1" }, "tags": ["io-ts", "fp-ts", "monocle-ts", "newtype-ts"], "keywords": ["io-ts", "fp-ts", "monocle-ts", "newtype-ts"] diff --git a/src/Date/DateFromISOString.ts b/src/Date/DateFromISOString.ts index 5afa3c0..666ecd2 100644 --- a/src/Date/DateFromISOString.ts +++ b/src/Date/DateFromISOString.ts @@ -1,10 +1,12 @@ import * as t from 'io-ts' -import { reverseGet } from '../monocle-ts/TypePrismIso' -import { AnyStringPrism } from '../monocle-ts/AnyStringPrism' -import { ISOStringDatePrism } from '../monocle-ts/ISOStringDatePrism' -export const DateFromISOString: t.Type = reverseGet( +export const DateFromISOString = new t.Type( 'DateFromISOString', - AnyStringPrism.compose(ISOStringDatePrism), - (v): v is Date => v instanceof Date + (m): m is Date => m instanceof Date, + (m, c) => + t.string.validate(m, c).chain(s => { + const d = new Date(s) + return isNaN(d.getTime()) ? t.failure(s, c) : t.success(d) + }), + a => a.toISOString() ) diff --git a/src/Date/DateFromNumber.ts b/src/Date/DateFromNumber.ts index 48af9c5..8333c18 100644 --- a/src/Date/DateFromNumber.ts +++ b/src/Date/DateFromNumber.ts @@ -1,10 +1,12 @@ import * as t from 'io-ts' -import { reverseGet } from '../monocle-ts/TypePrismIso' -import { AnyNumberPrism } from '../monocle-ts/AnyNumberPrism' -import { NumberDatePrism } from '../monocle-ts/NumberDatePrism' -export const DateFromNumber: t.Type = reverseGet( +export const DateFromNumber = new t.Type( 'DateFromNumber', - AnyNumberPrism.compose(NumberDatePrism), - (v): v is Date => v instanceof Date + (m): m is Date => m instanceof Date, + (m, c) => + t.number.validate(m, c).chain(n => { + const d = new Date(n) + return isNaN(d.getTime()) ? t.failure(n, c) : t.success(d) + }), + a => a.getTime() ) diff --git a/src/Date/DateFromUnixTime.ts b/src/Date/DateFromUnixTime.ts index a8962d0..01e5517 100644 --- a/src/Date/DateFromUnixTime.ts +++ b/src/Date/DateFromUnixTime.ts @@ -1,11 +1,12 @@ import * as t from 'io-ts' -import { reverseGet } from '../monocle-ts/TypePrismIso' -import { AnyNumberPrism } from '../monocle-ts/AnyNumberPrism' -import { NumberDatePrism } from '../monocle-ts/NumberDatePrism' -import { MillisecondSecondIso } from '../monocle-ts/MillisecondSecondIso' -export const DateFromUnixTime: t.Type = reverseGet( +export const DateFromUnixTime = new t.Type( 'DateFromUnixTime', - AnyNumberPrism.composeIso(MillisecondSecondIso.reverse()).compose(NumberDatePrism), - (v): v is Date => v instanceof Date + (m): m is Date => m instanceof Date, + (m, c) => + t.Integer.validate(m, c).chain(n => { + const d = new Date(n * 1000) + return isNaN(d.getTime()) ? t.failure(n, c) : t.success(d) + }), + a => a.getTime() / 1000 ) diff --git a/src/JSON/JSONFromString.ts b/src/JSON/JSONFromString.ts index 3dec9e2..e649ded 100644 --- a/src/JSON/JSONFromString.ts +++ b/src/JSON/JSONFromString.ts @@ -1,13 +1,12 @@ import * as t from 'io-ts' -import { reverseGet } from '../monocle-ts/TypePrismIso' -import { AnyStringPrism } from '../monocle-ts/AnyStringPrism' -import { JSONType, StringJSONPrism } from '../monocle-ts/StringJSONPrism' -import { JSONTypeRT } from './JSONTypeRT' +import { JSONType, JSONTypeRT } from './JSONTypeRT' +import { tryCatch } from 'fp-ts/lib/Either' export type JSONType = JSONType -export const JSONFromString: t.Type = reverseGet( +export const JSONFromString = new t.Type( 'JSONFromString', - AnyStringPrism.compose(StringJSONPrism), - JSONTypeRT.is + JSONTypeRT.is, + (m, c) => t.string.validate(m, c).chain(s => tryCatch(() => JSON.parse(s)).fold(() => t.failure(s, c), t.success)), + JSON.stringify ) diff --git a/src/JSON/JSONTypeRT.ts b/src/JSON/JSONTypeRT.ts index 4200c47..0cbcfcd 100644 --- a/src/JSON/JSONTypeRT.ts +++ b/src/JSON/JSONTypeRT.ts @@ -1,7 +1,8 @@ import * as t from 'io-ts' -import { JSONType } from '../monocle-ts/StringJSONPrism' -export type JSONType = JSONType +export type JSONObject = { [key: string]: JSONType } +export interface JSONArray extends Array {} +export type JSONType = null | string | number | boolean | JSONArray | JSONObject export const JSONTypeRT = t.recursion('JSONType', Self => t.union([t.null, t.string, t.number, t.boolean, t.array(Self), t.dictionary(t.string, Self)]) diff --git a/src/fp-ts/createEitherFromJSON.ts b/src/fp-ts/createEitherFromJSON.ts index ef86dd0..b0bd8d7 100644 --- a/src/fp-ts/createEitherFromJSON.ts +++ b/src/fp-ts/createEitherFromJSON.ts @@ -1,37 +1,38 @@ import * as t from 'io-ts' -import { Either, left, right } from 'fp-ts/lib/Either' +import { Either, Right, Left, left, right } from 'fp-ts/lib/Either' -export type JSONLeft = { +export interface JSONLeft { type: 'Left' value: L } -export type JSONRight = { +export interface JSONRight { type: 'Right' value: A } export type JSONEither = JSONLeft | JSONRight -export function createEitherFromJSON( - leftType: t.Type, - rightType: t.Type -): t.Type> { - const JSONLeft = t.interface({ +export function createEitherFromJSON( + leftType: t.Type, + rightType: t.Type +): t.Type, JSONEither> { + const JSONLeft = t.type({ type: t.literal('Left'), value: leftType }) - const JSONRight = t.interface({ + const JSONRight = t.type({ type: t.literal('Right'), value: rightType }) - const JSONEither = t.union([JSONLeft, JSONRight]) + const JSONEither = t.taggedUnion('type', [JSONLeft, JSONRight]) return new t.Type( `Either<${leftType.name}, ${rightType.name}>`, - (v): v is Either => leftType.is(v) || rightType.is(v), - (s, c) => - JSONEither.validate(s, c).chain(e => { + (m): m is Either => + (m instanceof Right && rightType.is(m.value)) || (m instanceof Left && leftType.is(m.value)), + (m, c) => + JSONEither.validate(m, c).chain(e => { switch (e.type) { case 'Left': return t.success(left(e.value)) @@ -40,9 +41,9 @@ export function createEitherFromJSON( } }), a => - a.fold>( - l => ({ type: 'Left', value: leftType.serialize(l) }), - a => ({ type: 'Right', value: rightType.serialize(a) }) + a.fold>( + l => ({ type: 'Left', value: leftType.encode(l) }), + a => ({ type: 'Right', value: rightType.encode(a) }) ) ) } diff --git a/src/fp-ts/createOptionFromJSON.ts b/src/fp-ts/createOptionFromJSON.ts index 2fe5f27..0a7a4c4 100644 --- a/src/fp-ts/createOptionFromJSON.ts +++ b/src/fp-ts/createOptionFromJSON.ts @@ -1,24 +1,25 @@ import * as t from 'io-ts' -import { None, Option, Some, fromNullable } from 'fp-ts/lib/Option' +import { Option, None, Some, fromNullable } from 'fp-ts/lib/Option' -export type JSONOption = { +export interface JSONOption { type: 'Option' value: A | null | undefined } -export function createOptionFromJSON(type: t.Type): t.Type> { - const JSONOption = t.interface({ +export function createOptionFromJSON(type: t.Type): t.Type, JSONOption> { + const JSONOption = t.type({ type: t.literal('Option'), value: t.union([type, t.null, t.undefined]) }) return new t.Type( `Option<${type.name}>`, - (v): v is Option => v instanceof Some || v instanceof None, - (s, c) => JSONOption.validate(s, c).chain(o => t.success(fromNullable(o.value))), - a => { - const res = a.toNullable() - return { type: 'Option', value: res !== null ? type.serialize(res) : null } - } + (m): m is Option => m instanceof None || (m instanceof Some && type.is(m.value)), + (m, c) => JSONOption.validate(m, c).chain(o => t.success(fromNullable(o.value))), + a => + a.foldL>( + () => ({ type: 'Option', value: null }), + value => ({ type: 'Option', value: type.encode(value) }) + ) ) } diff --git a/src/fp-ts/createOptionFromNullable.ts b/src/fp-ts/createOptionFromNullable.ts index 9082566..86e6e9f 100644 --- a/src/fp-ts/createOptionFromNullable.ts +++ b/src/fp-ts/createOptionFromNullable.ts @@ -1,11 +1,11 @@ import * as t from 'io-ts' import { Option, Some, None, fromNullable } from 'fp-ts/lib/Option' -export const createOptionFromNullable = (type: t.Type): t.Type> => { +export const createOptionFromNullable = (type: t.Type): t.Type, A | null> => { const Nullable = t.union([type, t.null, t.undefined]) return new t.Type( `Option<${type.name}>`, - (v): v is Option => v instanceof Some || v instanceof None, + (m): m is Option => m instanceof None || (m instanceof Some && type.is(m.value)), (s, c) => Nullable.validate(s, c).chain(u => t.success(fromNullable(u))), a => a.toNullable() ) diff --git a/src/index.ts b/src/index.ts index 5ffbbc5..359438d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,25 +9,11 @@ export { createOptionFromNullable } from './fp-ts/createOptionFromNullable' export { JSONFromString, JSONType } from './JSON/JSONFromString' export { JSONTypeRT } from './JSON/JSONTypeRT' -export { AnyNumberPrism } from './monocle-ts/AnyNumberPrism' -export { AnyStringPrism } from './monocle-ts/AnyStringPrism' -export { createRangePrism } from './monocle-ts/createRangePrism' -export { ISOStringDatePrism } from './monocle-ts/ISOStringDatePrism' export { lensesFromInterface } from './monocle-ts/lensesFromInterface' export { lensesFromProps } from './monocle-ts/lensesFromProps' -export { MillisecondSecondIso } from './monocle-ts/MillisecondSecondIso' -export { MixedStringPrism } from './monocle-ts/MixedStringPrism' -export { NumberDatePrism } from './monocle-ts/NumberDatePrism' -export { NumberIntegerPrism } from './monocle-ts/NumberIntegerPrism' -export { StringJSONPrism } from './monocle-ts/StringJSONPrism' -export { StringNumberPrism } from './monocle-ts/StringNumberPrism' import * as TypePrismIso from './monocle-ts/TypePrismIso' export { TypePrismIso } export { fromNewtype } from './newtype-ts/fromNewtype' -export { createInfRange } from './number/createInfRange' -export { createInfSupRange } from './number/createInfSupRange' -export { createRange } from './number/createRange' -export { createSupRange } from './number/createSupRange' export { IntegerFromString } from './number/IntegerFromString' export { NumberFromString } from './number/NumberFromString' diff --git a/src/monocle-ts/AnyNumberPrism.ts b/src/monocle-ts/AnyNumberPrism.ts deleted file mode 100644 index 624b28b..0000000 --- a/src/monocle-ts/AnyNumberPrism.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Prism } from 'monocle-ts' -import { some, none } from 'fp-ts/lib/Option' - -export const AnyNumberPrism = new Prism(s => (typeof s === 'number' ? some(s) : none), a => a) diff --git a/src/monocle-ts/AnyStringPrism.ts b/src/monocle-ts/AnyStringPrism.ts deleted file mode 100644 index c2f403f..0000000 --- a/src/monocle-ts/AnyStringPrism.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Prism } from 'monocle-ts' -import { some, none } from 'fp-ts/lib/Option' - -export const AnyStringPrism = new Prism(s => (typeof s === 'string' ? some(s) : none), a => a) diff --git a/src/monocle-ts/ISOStringDatePrism.ts b/src/monocle-ts/ISOStringDatePrism.ts deleted file mode 100644 index 63ea34d..0000000 --- a/src/monocle-ts/ISOStringDatePrism.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Prism } from 'monocle-ts' -import { none, some } from 'fp-ts/lib/Option' - -export const ISOStringDatePrism = new Prism( - s => { - const d = new Date(s) - return isNaN(d.getTime()) ? none : some(d) - }, - a => a.toISOString() -) diff --git a/src/monocle-ts/MillisecondSecondIso.ts b/src/monocle-ts/MillisecondSecondIso.ts deleted file mode 100644 index 5fa3b95..0000000 --- a/src/monocle-ts/MillisecondSecondIso.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Iso } from 'monocle-ts' - -export const MillisecondSecondIso = new Iso(s => s / 1000, a => a * 1000) diff --git a/src/monocle-ts/MixedStringPrism.ts b/src/monocle-ts/MixedStringPrism.ts deleted file mode 100644 index 5d2f89c..0000000 --- a/src/monocle-ts/MixedStringPrism.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Prism } from 'monocle-ts' -import { some, none } from 'fp-ts/lib/Option' -import { mixed } from 'io-ts' - -export const MixedStringPrism = new Prism(s => (typeof s === 'string' ? some(s) : none), a => a) diff --git a/src/monocle-ts/NumberDatePrism.ts b/src/monocle-ts/NumberDatePrism.ts deleted file mode 100644 index e446d06..0000000 --- a/src/monocle-ts/NumberDatePrism.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Prism } from 'monocle-ts' -import { none, some } from 'fp-ts/lib/Option' - -export const NumberDatePrism = new Prism( - s => { - const d = new Date(s) - return isNaN(d.getTime()) ? none : some(d) - }, - a => a.getTime() -) diff --git a/src/monocle-ts/NumberIntegerPrism.ts b/src/monocle-ts/NumberIntegerPrism.ts deleted file mode 100644 index f0340cd..0000000 --- a/src/monocle-ts/NumberIntegerPrism.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Integer } from 'io-ts' -import { Prism } from 'monocle-ts' - -export const NumberIntegerPrism: Prism = Prism.fromPredicate(Integer.predicate) diff --git a/src/monocle-ts/StringJSONPrism.ts b/src/monocle-ts/StringJSONPrism.ts deleted file mode 100644 index 3547a34..0000000 --- a/src/monocle-ts/StringJSONPrism.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Prism } from 'monocle-ts' -import { tryCatch } from 'fp-ts/lib/Either' - -export type JSONObject = { [key: string]: JSONType } -export interface JSONArray extends Array {} -export type JSONType = null | string | number | boolean | JSONArray | JSONObject - -export const StringJSONPrism = new Prism( - s => tryCatch(() => JSON.parse(s)).toOption(), - a => JSON.stringify(a) -) diff --git a/src/monocle-ts/StringNumberPrism.ts b/src/monocle-ts/StringNumberPrism.ts deleted file mode 100644 index eb44f43..0000000 --- a/src/monocle-ts/StringNumberPrism.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Prism } from 'monocle-ts' -import { none, some } from 'fp-ts/lib/Option' - -export const StringNumberPrism = new Prism( - s => { - const n = parseFloat(s) - return isNaN(n) ? none : some(n) - }, - a => String(a) -) diff --git a/src/monocle-ts/TypePrismIso.ts b/src/monocle-ts/TypePrismIso.ts index 6dfc8f2..3152028 100644 --- a/src/monocle-ts/TypePrismIso.ts +++ b/src/monocle-ts/TypePrismIso.ts @@ -1,10 +1,11 @@ import { Prism } from 'monocle-ts' import * as t from 'io-ts' +import { fromEither } from 'fp-ts/lib/Option' -export function get(type: t.Type): Prism { - return new Prism(s => t.validate(s, type).toOption(), type.serialize) +export function get(type: t.Type): Prism { + return new Prism(s => fromEither(type.decode(s)), type.encode) } -export function reverseGet(name: string, prism: Prism, is: t.Is): t.Type { - return new t.Type(name, is, (s, c) => prism.getOption(s).fold(() => t.failure(s, c), t.success), prism.reverseGet) +export function reverseGet(name: string, prism: Prism, is: t.Is): t.Type { + return new t.Type(name, is, (s, c) => prism.getOption(s).foldL(() => t.failure(s, c), t.success), prism.reverseGet) } diff --git a/src/monocle-ts/createRangePrism.ts b/src/monocle-ts/createRangePrism.ts deleted file mode 100644 index 43dd870..0000000 --- a/src/monocle-ts/createRangePrism.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Prism } from 'monocle-ts' - -export const createRangePrism = (from: number, to: number): Prism => { - return Prism.fromPredicate(n => n >= from && n <= to) -} diff --git a/src/monocle-ts/lensesFromInterface.ts b/src/monocle-ts/lensesFromInterface.ts index 85f14ff..30b2697 100644 --- a/src/monocle-ts/lensesFromInterface.ts +++ b/src/monocle-ts/lensesFromInterface.ts @@ -1,6 +1,6 @@ import * as t from 'io-ts' import { lensesFromProps, LensesFromProps } from './lensesFromProps' -export const lensesFromInterface =

(i: t.InterfaceType>): LensesFromProps

=> { +export const lensesFromInterface =

(i: t.InterfaceType

| t.StrictType

): LensesFromProps

=> { return lensesFromProps(i.props) } diff --git a/src/monocle-ts/lensesFromProps.ts b/src/monocle-ts/lensesFromProps.ts index 2c70855..c058fd1 100644 --- a/src/monocle-ts/lensesFromProps.ts +++ b/src/monocle-ts/lensesFromProps.ts @@ -1,7 +1,7 @@ import * as t from 'io-ts' import { Lens } from 'monocle-ts' -export type LensesFromProps

= t.InterfaceOf

> = { +export type LensesFromProps

= t.TypeOfProps

> = { [K in keyof P]: Lens } diff --git a/src/newtype-ts/fromNewtype.ts b/src/newtype-ts/fromNewtype.ts index 3bc6867..147022f 100644 --- a/src/newtype-ts/fromNewtype.ts +++ b/src/newtype-ts/fromNewtype.ts @@ -1,4 +1,6 @@ import { AnyNewtype, Carrier } from 'newtype-ts' import { Type, mixed } from 'io-ts' -export const fromNewtype: (type: Type>) => Type = type => type as any +export const fromNewtype: ( + type: Type, Carrier, mixed> +) => Type, mixed> = type => type as any diff --git a/src/number/NumberFromString.ts b/src/number/NumberFromString.ts index 205b087..474ba44 100644 --- a/src/number/NumberFromString.ts +++ b/src/number/NumberFromString.ts @@ -1,6 +1,12 @@ import * as t from 'io-ts' -import { reverseGet } from '../monocle-ts/TypePrismIso' -import { MixedStringPrism } from '../monocle-ts/MixedStringPrism' -import { StringNumberPrism } from '../monocle-ts/StringNumberPrism' -export const NumberFromString = reverseGet('NumberFromString', MixedStringPrism.compose(StringNumberPrism), t.number.is) +export const NumberFromString = new t.Type( + 'NumberFromString', + t.number.is, + (m, c) => + t.string.validate(m, c).chain(s => { + const n = parseFloat(s) + return isNaN(n) ? t.failure(s, c) : t.success(n) + }), + String +) diff --git a/src/number/createInfRange.ts b/src/number/createInfRange.ts deleted file mode 100644 index 9af9935..0000000 --- a/src/number/createInfRange.ts +++ /dev/null @@ -1,10 +0,0 @@ -import * as t from 'io-ts' - -export function createInfRange>( - type: T, - from: number, - to: number, - name?: string -): t.RefinementType { - return t.refinement(type, n => n > from && n <= to, name || `Range(${from}, ${to}]`) -} diff --git a/src/number/createInfSupRange.ts b/src/number/createInfSupRange.ts deleted file mode 100644 index f0efbcc..0000000 --- a/src/number/createInfSupRange.ts +++ /dev/null @@ -1,10 +0,0 @@ -import * as t from 'io-ts' - -export function createInfSupRange>( - type: T, - from: number, - to: number, - name?: string -): t.RefinementType { - return t.refinement(type, n => n > from && n < to, name || `Range(${from}, ${to})`) -} diff --git a/src/number/createRange.ts b/src/number/createRange.ts deleted file mode 100644 index 695d1f3..0000000 --- a/src/number/createRange.ts +++ /dev/null @@ -1,10 +0,0 @@ -import * as t from 'io-ts' - -export function createRange>( - type: T, - from: number, - to: number, - name?: string -): t.RefinementType { - return t.refinement(type, n => n >= from && n <= to, name || `Range[${from}, ${to}]`) -} diff --git a/src/number/createSupRange.ts b/src/number/createSupRange.ts deleted file mode 100644 index a0d41c9..0000000 --- a/src/number/createSupRange.ts +++ /dev/null @@ -1,10 +0,0 @@ -import * as t from 'io-ts' - -export function createSupRange>( - type: T, - from: number, - to: number, - name?: string -): t.RefinementType { - return t.refinement(type, n => n >= from && n < to, name || `Range[${from}, ${to})`) -} diff --git a/test/helpers.ts b/test/helpers.ts deleted file mode 100644 index 87f5203..0000000 --- a/test/helpers.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Option, isSome } from 'fp-ts/lib/Option' -import { Either, isRight } from 'fp-ts/lib/Either' - -export function fromSome(o: Option): A { - if (isSome(o)) { - return o.value - } - throw new Error(`fromSome called when is None`) -} - -export function fromRight(e: Either): A { - if (isRight(e)) { - return e.value - } - throw new Error(`fromRight called when is Left ${JSON.stringify(e.value, null, 2)}`) -} diff --git a/test/index.ts b/test/index.ts index c594e2f..081287d 100644 --- a/test/index.ts +++ b/test/index.ts @@ -1,8 +1,9 @@ import * as assert from 'assert' import * as t from 'io-ts' +import { PathReporter } from 'io-ts/lib/PathReporter' +import { iso } from 'newtype-ts' import { - AnyStringPrism, DateFromISOString, DateFromNumber, DateFromUnixTime, @@ -10,18 +11,15 @@ import { JSONFromString, JSONTypeRT, NumberFromString, - StringJSONPrism, - StringNumberPrism, createEitherFromJSON, createOptionFromJSON, createOptionFromNullable, - createRange, fromNewtype, - lensesFromProps + lensesFromProps, + lensesFromInterface } from '../src' -import { Left, Right, left, right } from 'fp-ts/lib/Either' -import { None, Some, none, some } from 'fp-ts/lib/Option' -import { fromRight, fromSome } from './helpers' +import { left, right } from 'fp-ts/lib/Either' +import { none, some } from 'fp-ts/lib/Option' import { Newtype } from 'newtype-ts' import { Validation } from 'io-ts' @@ -29,87 +27,80 @@ import { Validation } from 'io-ts' describe('fp-ts', () => { it('createOptionFromNullable', () => { const T = createOptionFromNullable(t.number) - assert.ok(fromRight(t.validate(null, T)) instanceof None) - assert.ok(fromRight(t.validate(undefined, T)) instanceof None) - assert.ok(fromRight(t.validate(1, T)) instanceof Some) - assert.deepEqual(T.serialize(some(1)), 1) - assert.deepEqual(T.serialize(none), null) + assert.deepEqual(T.decode(null), right(none)) + assert.deepEqual(T.decode(undefined), right(none)) + assert.deepEqual(T.decode(1), right(some(1))) + assert.deepEqual(T.encode(some(1)), 1) + assert.deepEqual(T.encode(none), null) + assert.strictEqual(T.is(some(1)), true) + assert.strictEqual(T.is(some('foo')), false) }) it('createOptionFromJSON', () => { const T = createOptionFromJSON(t.number) - assert.ok(fromRight(t.validate({ type: 'Option', value: null }, T)) instanceof None) - assert.ok(fromRight(t.validate({ type: 'Option', value: undefined }, T)) instanceof None) - assert.ok(fromRight(t.validate({ type: 'Option', value: 1 }, T)) instanceof Some) - assert.deepEqual(T.serialize(some(1)), { type: 'Option', value: 1 }) - assert.deepEqual(T.serialize(none), { type: 'Option', value: null }) + assert.deepEqual(T.decode({ type: 'Option', value: null }), right(none)) + assert.deepEqual(T.decode({ type: 'Option', value: undefined }), right(none)) + assert.deepEqual(T.decode({ type: 'Option', value: 1 }), right(some(1))) + assert.deepEqual(T.encode(some(1)), { type: 'Option', value: 1 }) + assert.deepEqual(T.encode(none), { type: 'Option', value: null }) + assert.strictEqual(T.is(some(1)), true) + assert.strictEqual(T.is(some('foo')), false) }) it('createOptionOfOptionFromJSON', () => { const T = createOptionFromJSON(createOptionFromJSON(t.number)) - assert.deepEqual(fromRight(t.validate({ type: 'Option', value: { type: 'Option', value: 1 } }, T)), some(some(1))) - assert.deepEqual(T.serialize(some(some(1))), { type: 'Option', value: { type: 'Option', value: 1 } }) - assert.deepEqual(T.serialize(some(none)), { type: 'Option', value: { type: 'Option', value: null } }) - assert.deepEqual(fromRight(t.validate({ type: 'Option', value: { type: 'Option', value: null } }, T)), some(none)) - assert.deepEqual(T.serialize(none), { type: 'Option', value: null }) - assert.deepEqual(fromRight(t.validate({ type: 'Option', value: null }, T)), none) + assert.deepEqual(T.decode({ type: 'Option', value: { type: 'Option', value: 1 } }), right(some(some(1)))) + assert.deepEqual(T.encode(some(some(1))), { type: 'Option', value: { type: 'Option', value: 1 } }) + assert.deepEqual(T.encode(some(none)), { type: 'Option', value: { type: 'Option', value: null } }) + assert.deepEqual(T.decode({ type: 'Option', value: { type: 'Option', value: null } }), right(some(none))) + assert.deepEqual(T.encode(none), { type: 'Option', value: null }) + assert.deepEqual(T.decode({ type: 'Option', value: null }), right(none)) }) it('createEitherFromJSON', () => { const T = createEitherFromJSON(t.string, t.number) - assert.ok(fromRight(t.validate({ type: 'Left', value: 's' }, T)) instanceof Left) - assert.ok(fromRight(t.validate({ type: 'Right', value: 1 }, T)) instanceof Right) - assert.deepEqual(T.serialize(left('a')), { type: 'Left', value: 'a' }) - assert.deepEqual(T.serialize(right(1)), { type: 'Right', value: 1 }) + assert.deepEqual(T.decode({ type: 'Left', value: 's' }), right(left('s'))) + assert.deepEqual(T.decode({ type: 'Right', value: 1 }), right(right(1))) + assert.deepEqual(T.encode(left('a')), { type: 'Left', value: 'a' }) + assert.deepEqual(T.encode(right(1)), { type: 'Right', value: 1 }) + assert.strictEqual(T.is(right(1)), true) + assert.strictEqual(T.is(right('foo')), false) + assert.strictEqual(T.is(left(1)), false) + assert.strictEqual(T.is(left('foo')), true) }) it('createEitherOfOptionFromJSON', () => { const T = createEitherFromJSON(createOptionFromJSON(t.string), createOptionFromJSON(t.number)) - assert.deepEqual(fromRight(t.validate({ type: 'Left', value: { type: 'Option', value: 's' } }, T)), left(some('s'))) - assert.deepEqual(fromRight(t.validate({ type: 'Right', value: { type: 'Option', value: 1 } }, T)), right(some(1))) - assert.deepEqual(fromRight(t.validate({ type: 'Left', value: { type: 'Option', value: null } }, T)), left(none)) - assert.deepEqual(fromRight(t.validate({ type: 'Right', value: { type: 'Option', value: null } }, T)), right(none)) - assert.deepEqual(T.serialize(left(some('a'))), { type: 'Left', value: { type: 'Option', value: 'a' } }) - assert.deepEqual(T.serialize(right(some(1))), { type: 'Right', value: { type: 'Option', value: 1 } }) - assert.deepEqual(T.serialize(left(none)), { type: 'Left', value: { type: 'Option', value: null } }) - assert.deepEqual(T.serialize(right(none)), { type: 'Right', value: { type: 'Option', value: null } }) + assert.deepEqual(T.decode({ type: 'Left', value: { type: 'Option', value: 's' } }), right(left(some('s')))) + assert.deepEqual(T.decode({ type: 'Right', value: { type: 'Option', value: 1 } }), right(right(some(1)))) + assert.deepEqual(T.decode({ type: 'Left', value: { type: 'Option', value: null } }), right(left(none))) + assert.deepEqual(T.decode({ type: 'Right', value: { type: 'Option', value: null } }), right(right(none))) + assert.deepEqual(T.encode(left(some('a'))), { type: 'Left', value: { type: 'Option', value: 'a' } }) + assert.deepEqual(T.encode(right(some(1))), { type: 'Right', value: { type: 'Option', value: 1 } }) + assert.deepEqual(T.encode(left(none)), { type: 'Left', value: { type: 'Option', value: null } }) + assert.deepEqual(T.encode(right(none)), { type: 'Right', value: { type: 'Option', value: null } }) }) }) describe('number', () => { - it('createRange', () => { - const T = createRange(t.number, 0, 10) - assert.strictEqual(fromRight(t.validate(0, T)), 0) - assert.strictEqual(fromRight(t.validate(10, T)), 10) - assert.strictEqual(fromRight(t.validate(5.5, T)), 5.5) - assert.ok(t.validate(-1, T) instanceof Left) - assert.ok(t.validate(11, T) instanceof Left) - const TT = createRange(t.Integer, 0, 10) - assert.strictEqual(fromRight(t.validate(0, TT)), 0) - assert.strictEqual(fromRight(t.validate(10, TT)), 10) - assert.ok(t.validate(5.5, TT) instanceof Left) - assert.ok(t.validate(-1, TT) instanceof Left) - assert.ok(t.validate(11, TT) instanceof Left) - }) - it('NumberFromString', () => { const T = NumberFromString - assert.strictEqual(fromRight(t.validate('0', T)), 0) - assert.strictEqual(fromRight(t.validate('10', T)), 10) - assert.strictEqual(fromRight(t.validate('-1', T)), -1) - assert.strictEqual(fromRight(t.validate('11', T)), 11) - assert.strictEqual(fromRight(t.validate('5.5', T)), 5.5) - assert.strictEqual(fromRight(t.validate('-5.5', T)), -5.5) + assert.deepEqual(T.decode('0'), right(0)) + assert.deepEqual(T.decode('10'), right(10)) + assert.deepEqual(T.decode('-1'), right(-1)) + assert.deepEqual(T.decode('11'), right(11)) + assert.deepEqual(T.decode('5.5'), right(5.5)) + assert.deepEqual(T.decode('-5.5'), right(-5.5)) }) it('IntegerFromString', () => { const T = IntegerFromString - assert.strictEqual(fromRight(t.validate('0', T)), 0) - assert.strictEqual(fromRight(t.validate('10', T)), 10) - assert.strictEqual(fromRight(t.validate('-1', T)), -1) - assert.strictEqual(fromRight(t.validate('11', T)), 11) - assert.ok(t.validate('5.5', T) instanceof Left) - assert.ok(t.validate('-5.5', T) instanceof Left) + assert.deepEqual(T.decode('0'), right(0)) + assert.deepEqual(T.decode('10'), right(10)) + assert.deepEqual(T.decode('-1'), right(-1)) + assert.deepEqual(T.decode('11'), right(11)) + assert.deepEqual(PathReporter.report(T.decode('5.5')), ['Invalid value 5.5 supplied to : IntegerFromString']) + assert.deepEqual(PathReporter.report(T.decode('-5.5')), ['Invalid value -5.5 supplied to : IntegerFromString']) }) }) @@ -118,86 +109,98 @@ describe('Date', () => { const T = DateFromISOString const d = new Date(1973, 10, 30) const s = d.toISOString() - assert.ok(fromRight(t.validate(s, T)) instanceof Date) - assert.strictEqual(fromRight(t.validate(s, T)).getTime(), d.getTime()) - assert.ok(t.validate('foo', T) instanceof Left) + assert.deepEqual(T.decode(s), right(d)) + assert.deepEqual(T.decode(s).map(d => d.getTime()), right(d.getTime())) + assert.deepEqual(PathReporter.report(T.decode('foo')), ['Invalid value "foo" supplied to : DateFromISOString']) }) it('DateFromNumber', () => { const T = DateFromNumber - const millis = new Date(1973, 10, 30).getTime() - assert.ok(fromRight(t.validate(millis, T)) instanceof Date) - assert.strictEqual(fromRight(t.validate(millis, T)).getTime(), millis) - assert.ok(t.validate(NaN, T) instanceof Left) + const d = new Date(1973, 10, 30) + const millis = d.getTime() + assert.deepEqual(T.decode(millis), right(d)) + assert.deepEqual(T.decode(millis).map(d => d.getTime()), right(millis)) + assert.deepEqual(PathReporter.report(T.decode(NaN)), ['Invalid value null supplied to : DateFromNumber']) }) it('DateFromUnixTime', () => { const T = DateFromUnixTime const getSeconds = (d: Date): number => d.getTime() / 1000 - const seconds = getSeconds(new Date(1973, 10, 30)) - assert.ok(fromRight(t.validate(seconds, T)) instanceof Date) - assert.strictEqual(getSeconds(fromRight(t.validate(seconds, T))), seconds) - assert.ok(t.validate(NaN, T) instanceof Left) + const d = new Date(1973, 10, 30) + const seconds = getSeconds(d) + assert.deepEqual(T.decode(seconds), right(d)) + assert.deepEqual(T.decode(seconds).map(getSeconds), right(seconds)) + assert.deepEqual(PathReporter.report(T.decode(NaN)), ['Invalid value null supplied to : DateFromUnixTime']) }) }) describe('monocle-ts', () => { - it('AnyStringPrism/StringNumberPrism', () => { - const P = AnyStringPrism.compose(StringNumberPrism) - assert.strictEqual(fromSome(P.getOption('10')), 10) - }) + it('lensesFromProps', () => { + const T1 = t.type({ + name: t.string, + age: t.number + }) + const lenses1 = lensesFromProps(T1.props) + assert.strictEqual(lenses1.age.get({ name: 'Giulio', age: 43 }), 43) - it('StringJSONPrism', () => { - const P = StringJSONPrism - assert.deepEqual(fromSome(P.getOption('{}')), {}) - assert.deepEqual(fromSome(P.getOption('[]')), []) - assert.deepEqual(fromSome(P.getOption('"s"')), 's') - assert.strictEqual(fromSome(P.getOption('1')), 1) - assert.strictEqual(fromSome(P.getOption('true')), true) - assert.strictEqual(fromSome(P.getOption('null')), null) - assert.deepEqual(fromSome(P.getOption('{"name":"Giulio"}')), { name: 'Giulio' }) + const T2 = t.strict({ + name: t.string, + age: t.number + }) + const lenses2 = lensesFromProps(T2.props) + assert.strictEqual(lenses2.age.get({ name: 'Giulio', age: 43 }), 43) }) - it('lensesFromProps', () => { - const Person = t.interface({ + it('lensesFromInterface', () => { + const T1 = t.type({ + name: t.string, + age: t.number + }) + const lenses1 = lensesFromInterface(T1) + assert.strictEqual(lenses1.age.get({ name: 'Giulio', age: 43 }), 43) + + const T2 = t.strict({ name: t.string, age: t.number }) - const lenses = lensesFromProps(Person.props) - assert.strictEqual(lenses.age.get({ name: 'Giulio', age: 43 }), 43) + const lenses2 = lensesFromInterface(T2) + assert.strictEqual(lenses2.age.get({ name: 'Giulio', age: 43 }), 43) }) }) describe('newtype-ts', () => { it('fromNewtype', () => { type Age = Newtype<'Age', number> + const isoAge = iso() const T = fromNewtype(t.number) - const res: Validation = t.validate(42, T) - assert.deepEqual(fromRight(res), 42) + const res: Validation = T.decode(42) + assert.deepEqual(res, right(42)) + const e: number = T.encode(isoAge.wrap(42)) + assert.strictEqual(e, 42) }) }) describe('JSON', () => { it('JSONTypeRT', () => { const T = JSONTypeRT - assert.deepEqual(fromRight(t.validate({}, T)), {}) - assert.deepEqual(fromRight(t.validate([], T)), []) - assert.deepEqual(fromRight(t.validate('s', T)), 's') - assert.strictEqual(fromRight(t.validate(1, T)), 1) - assert.strictEqual(fromRight(t.validate(true, T)), true) - assert.strictEqual(fromRight(t.validate(null, T)), null) - assert.deepEqual(fromRight(t.validate({ name: 'Giulio' }, T)), { name: 'Giulio' }) + assert.deepEqual(T.decode({}), right({})) + assert.deepEqual(T.decode([]), right([])) + assert.deepEqual(T.decode('s'), right('s')) + assert.deepEqual(T.decode(1), right(1)) + assert.deepEqual(T.decode(true), right(true)) + assert.deepEqual(T.decode(null), right(null)) + assert.deepEqual(T.decode({ name: 'Giulio' }), right({ name: 'Giulio' })) assert.strictEqual(JSONTypeRT.is([{ a: [true] }]), true) }) it('JSONFromString', () => { const T = JSONFromString - assert.deepEqual(fromRight(t.validate('{}', T)), {}) - assert.deepEqual(fromRight(t.validate('[]', T)), []) - assert.deepEqual(fromRight(t.validate('"s"', T)), 's') - assert.strictEqual(fromRight(t.validate('1', T)), 1) - assert.strictEqual(fromRight(t.validate('true', T)), true) - assert.strictEqual(fromRight(t.validate('null', T)), null) - assert.deepEqual(fromRight(t.validate('{"name":"Giulio"}', T)), { name: 'Giulio' }) + assert.deepEqual(T.decode('{}'), right({})) + assert.deepEqual(T.decode('[]'), right([])) + assert.deepEqual(T.decode('"s"'), right('s')) + assert.deepEqual(T.decode('1'), right(1)) + assert.deepEqual(T.decode('true'), right(true)) + assert.deepEqual(T.decode('null'), right(null)) + assert.deepEqual(T.decode('{"name":"Giulio"}'), right({ name: 'Giulio' })) }) }) From ffd22d5aa0820869440fa24e5355b003037f7c5e Mon Sep 17 00:00:00 2001 From: gcanti Date: Mon, 12 Feb 2018 16:16:44 +0100 Subject: [PATCH 2/2] upgrade to `fp-ts@1.0.0`, `io-ts@1.0.0`, `monocle-ts@1.0.0`, `newtype-ts@0.2.0` --- CHANGELOG.md | 5 + package-lock.json | 1103 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 8 +- 3 files changed, 1112 insertions(+), 4 deletions(-) create mode 100644 package-lock.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ef1301..b9e10ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,11 @@ **Note**: Gaps between patch versions are faulty/broken releases. **Note**: A feature tagged as Experimental is in a high state of flux, you're at risk of it changing without notice. +# 0.3.0 + +* **Breaking Change** + * upgrade to `fp-ts@1.0.0`, `io-ts@1.0.0`, `monocle-ts@1.0.0`, `newtype-ts@0.2.0` (@gcanti) + # 0.2.4 * **Bug Fix** diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..3e9f2cf --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1103 @@ +{ + "name": "io-ts-types", + "version": "0.3.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/mocha": { + "version": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.38.tgz", + "integrity": "sha1-jBiPbjTC58Px0BJ9kI1aNuWmDck=", + "dev": true + }, + "@types/node": { + "version": "https://registry.npmjs.org/@types/node/-/node-7.0.4.tgz", + "integrity": "sha1-mqvBNZed7TgzJXSfUIiUxmKUjIs=", + "dev": true + }, + "ansi-align": { + "version": "https://registry.npmjs.org/ansi-align/-/ansi-align-1.1.0.tgz", + "integrity": "sha1-LwwWWIKXOa3V67FeawxuNCPwFro=", + "dev": true, + "requires": { + "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" + } + }, + "ansi-regex": { + "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "babel-code-frame": { + "version": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", + "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "js-tokens": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.1.tgz" + } + }, + "balanced-match": { + "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + }, + "boxen": { + "version": "https://registry.npmjs.org/boxen/-/boxen-0.6.0.tgz", + "integrity": "sha1-g2TUJIrDT/DvGy8r9JpsYM4NgbY=", + "dev": true, + "requires": { + "ansi-align": "https://registry.npmjs.org/ansi-align/-/ansi-align-1.1.0.tgz", + "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "cli-boxes": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "filled-array": "https://registry.npmjs.org/filled-array/-/filled-array-1.1.0.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "repeating": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "widest-line": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz" + } + }, + "brace-expansion": { + "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", + "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", + "dev": true, + "requires": { + "balanced-match": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + } + }, + "browser-stdout": { + "version": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "dev": true + }, + "buffer-shims": { + "version": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", + "dev": true + }, + "camelcase": { + "version": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "capture-stack-trace": { + "version": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", + "dev": true + }, + "chalk": { + "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "has-ansi": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + }, + "dependencies": { + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "cli-boxes": { + "version": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true + }, + "code-point-at": { + "version": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "color-convert": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", + "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "commander": { + "version": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" + } + }, + "concat-map": { + "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "configstore": { + "version": "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz", + "integrity": "sha1-c3o6cDbpiGECqmCZ5HuzOrGroaE=", + "dev": true, + "requires": { + "dot-prop": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "osenv": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "uuid": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "write-file-atomic": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "xdg-basedir": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz" + } + }, + "core-util-is": { + "version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "create-error-class": { + "version": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz" + } + }, + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz" + } + }, + "deep-extend": { + "version": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "dev": true + }, + "diff": { + "version": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", + "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", + "dev": true + }, + "doctrine": { + "version": "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz", + "integrity": "sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM=", + "dev": true, + "requires": { + "esutils": "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + }, + "dependencies": { + "esutils": { + "version": "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz", + "integrity": "sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U=", + "dev": true + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "dot-prop": { + "version": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", + "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", + "dev": true, + "requires": { + "is-obj": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz" + } + }, + "duplexer2": { + "version": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz" + } + }, + "error-ex": { + "version": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + } + }, + "escape-string-regexp": { + "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esutils": { + "version": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "filled-array": { + "version": "https://registry.npmjs.org/filled-array/-/filled-array-1.1.0.tgz", + "integrity": "sha1-w8T2xmO5I0WamqKZEtLQMfFQf4Q=", + "dev": true + }, + "findup-sync": { + "version": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", + "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", + "dev": true, + "requires": { + "glob": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz" + }, + "dependencies": { + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + } + } + }, + "fp-ts": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.0.0.tgz", + "integrity": "sha512-eXq3sOoJNS4aQJFSi8LWoz9TSLAdm9+TZqnj1aA55AC4fSltlGeOorJ3zQiQWcWFea3DdTXSEoUuAp97ObCI2Q==" + }, + "fs.realpath": { + "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-7.0.5.tgz", + "integrity": "sha1-tCAqaQmbu00pKnwblbZoK2fr3JU=", + "dev": true, + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + }, + "got": { + "version": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", + "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", + "dev": true, + "requires": { + "create-error-class": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "duplexer2": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "is-redirect": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "is-retry-allowed": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "is-stream": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "lowercase-keys": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "node-status-codes": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "parse-json": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "read-all-stream": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "timed-out": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", + "unzip-response": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", + "url-parse-lax": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz" + } + }, + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "graceful-readlink": { + "version": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "growl": { + "version": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "dev": true + }, + "has-ansi": { + "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + } + }, + "has-flag": { + "version": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "imurmurhash": { + "version": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + } + }, + "inherits": { + "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "http://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "dev": true + }, + "io-ts": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.0.0.tgz", + "integrity": "sha512-BvVSFYflZc2vW5eufbBwd5H3NwROVjIs+/B5Q2RA3oBaHywJOUZ+kzKPHhj1pcp2JpQQznLluhyQ6dz9O0ozgA==", + "requires": { + "fp-ts": "1.0.0" + } + }, + "is-arrayish": { + "version": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-finite": { + "version": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + } + }, + "is-fullwidth-code-point": { + "version": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + } + }, + "is-npm": { + "version": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true + }, + "is-obj": { + "version": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-redirect": { + "version": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, + "is-retry-allowed": { + "version": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, + "is-stream": { + "version": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "js-tokens": { + "version": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.1.tgz", + "integrity": "sha1-COnxMkhKLEWjCQfp3E1VZ7fxFNc=", + "dev": true + }, + "json3": { + "version": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "latest-version": { + "version": "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz", + "integrity": "sha1-VvjWE5YghHuAF/jx9NeOIRMkFos=", + "dev": true, + "requires": { + "package-json": "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz" + } + }, + "lazy-req": { + "version": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz", + "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=", + "dev": true + }, + "lodash._baseassign": { + "version": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "dev": true, + "requires": { + "lodash._basecopy": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "lodash.keys": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz" + } + }, + "lodash._basecopy": { + "version": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basecreate": { + "version": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", + "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=", + "dev": true + }, + "lodash._getnative": { + "version": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash.create": { + "version": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", + "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", + "dev": true, + "requires": { + "lodash._baseassign": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "lodash._basecreate": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", + "lodash._isiterateecall": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz" + } + }, + "lodash.isarguments": { + "version": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.keys": { + "version": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "lodash.isarguments": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "lodash.isarray": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz" + } + }, + "lowercase-keys": { + "version": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true + }, + "make-error": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.0.tgz", + "integrity": "sha1-Uq06M5zPEM5itAQLcI/nByRLi5Y=", + "dev": true + }, + "minimatch": { + "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dev": true, + "requires": { + "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz" + } + }, + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + } + }, + "mocha": { + "version": "https://registry.npmjs.org/mocha/-/mocha-3.2.0.tgz", + "integrity": "sha1-fcT0XlCIB1FxpoiWgU5q6et6heM=", + "dev": true, + "requires": { + "browser-stdout": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "commander": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "diff": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.0.5.tgz", + "growl": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "json3": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "lodash.create": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz" + } + }, + "monocle-ts": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/monocle-ts/-/monocle-ts-1.0.0.tgz", + "integrity": "sha512-3xnUHUr1t8+sV6Kc0lsCg12GmMtoOUFpPxhgvVi9YYwq1iYhPxWtpyurMQ8xRQEiauNzdXWjtKBycr12E1f9NA==", + "requires": { + "fp-ts": "1.0.0" + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + }, + "newtype-ts": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/newtype-ts/-/newtype-ts-0.2.0.tgz", + "integrity": "sha512-SpXwI1Q0D3ST4MZw70G/Mwl1JAtNyL8Yg4l9wmAeEn13ndhRfVKi5toYsqZienDzjWgBLGWmhUHtnYvaX2+1+w==", + "requires": { + "fp-ts": "1.0.0", + "monocle-ts": "1.0.0" + } + }, + "node-status-codes": { + "version": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", + "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=", + "dev": true + }, + "number-is-nan": { + "version": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "object-assign": { + "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "once": { + "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + } + }, + "optimist": { + "version": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz" + } + }, + "os-homedir": { + "version": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-tmpdir": { + "version": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "dev": true, + "requires": { + "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + } + }, + "package-json": { + "version": "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz", + "integrity": "sha1-DRW9Z9HLvduyyiIv8u24a8sxqLs=", + "dev": true, + "requires": { + "got": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", + "registry-auth-token": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz", + "registry-url": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "semver": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz" + } + }, + "parse-json": { + "version": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz" + } + }, + "path-is-absolute": { + "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-parse": { + "version": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "pinkie": { + "version": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + } + }, + "prepend-http": { + "version": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "prettier": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.8.2.tgz", + "integrity": "sha512-fHWjCwoRZgjP1rvLP7OGqOznq7xH1sHMQUFLX8qLRO79hI57+6xbc5vB904LxEkCfgFgyr3vv06JkafgCSzoZg==", + "dev": true + }, + "process-nextick-args": { + "version": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "rc": { + "version": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", + "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", + "dev": true, + "requires": { + "deep-extend": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "ini": "http://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "strip-json-comments": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + }, + "dependencies": { + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "read-all-stream": { + "version": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", + "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", + "dev": true, + "requires": { + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz" + } + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "dev": true, + "requires": { + "buffer-shims": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "registry-auth-token": { + "version": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz", + "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", + "dev": true, + "requires": { + "rc": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz" + } + }, + "registry-url": { + "version": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz" + } + }, + "repeating": { + "version": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz" + } + }, + "resolve": { + "version": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz", + "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=", + "dev": true, + "requires": { + "path-parse": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz" + } + }, + "safe-buffer": { + "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", + "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", + "dev": true + }, + "semver": { + "version": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + }, + "semver-diff": { + "version": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, + "requires": { + "semver": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz" + } + }, + "slide": { + "version": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "dev": true + }, + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + }, + "source-map-support": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz", + "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=", + "dev": true, + "requires": { + "source-map": "0.5.6" + } + }, + "string-width": { + "version": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "is-fullwidth-code-point": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + } + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", + "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz" + } + }, + "strip-ansi": { + "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-json-comments": { + "version": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", + "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", + "dev": true, + "requires": { + "has-flag": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz" + } + }, + "timed-out": { + "version": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", + "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=", + "dev": true + }, + "ts-node": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-3.2.1.tgz", + "integrity": "sha1-lZXdhA0D5ivHkhTOWntR5V48T/w=", + "dev": true, + "requires": { + "arrify": "1.0.1", + "chalk": "2.0.1", + "diff": "3.3.0", + "make-error": "1.3.0", + "minimist": "1.2.0", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "source-map-support": "0.4.15", + "tsconfig": "6.0.0", + "v8flags": "3.0.0", + "yn": "2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.1.0.tgz", + "integrity": "sha1-CcIC1ckX7CMYjKpcnLkXnNlUd1A=", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz", + "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", + "dev": true, + "requires": { + "ansi-styles": "3.1.0", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "supports-color": "4.2.0" + } + }, + "diff": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.0.tgz", + "integrity": "sha512-w0XZubFWn0Adlsapj9EAWX0FqWdO4tz8kc3RiYdWLh4k/V8PTb6i0SMgXt0vRM3zyKnT8tKO7mUlieRQHIjMNg==", + "dev": true + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "supports-color": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.0.tgz", + "integrity": "sha512-Ts0Mu/A1S1aZxEJNG88I4Oc9rcZSBFNac5e27yh4j2mqbhZSSzR1Ah79EYwSn9Zuh7lrlGD2cVGzw1RKGzyLSg==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "tsconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-6.0.0.tgz", + "integrity": "sha1-aw6DdgA9evGGT434+J3QBZ/80DI=", + "dev": true, + "requires": { + "strip-bom": "3.0.0", + "strip-json-comments": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + } + }, + "tslint": { + "version": "https://registry.npmjs.org/tslint/-/tslint-4.4.2.tgz", + "integrity": "sha1-sUy3muA5xyRxq0wmJyJrlA3aGcY=", + "dev": true, + "requires": { + "babel-code-frame": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", + "colors": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "diff": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", + "findup-sync": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "optimist": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz", + "update-notifier": "https://registry.npmjs.org/update-notifier/-/update-notifier-1.0.3.tgz" + }, + "dependencies": { + "diff": { + "version": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", + "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", + "dev": true + }, + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", + "dev": true, + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + } + } + }, + "tslint-config-standard": { + "version": "https://registry.npmjs.org/tslint-config-standard/-/tslint-config-standard-4.0.0.tgz", + "integrity": "sha1-1FYRLsgeutqgC+sNjzDnhkU4zT0=", + "dev": true, + "requires": { + "tslint-eslint-rules": "https://registry.npmjs.org/tslint-eslint-rules/-/tslint-eslint-rules-3.5.1.tgz" + } + }, + "tslint-eslint-rules": { + "version": "https://registry.npmjs.org/tslint-eslint-rules/-/tslint-eslint-rules-3.5.1.tgz", + "integrity": "sha1-5D79zddg1ihWAAMXIPlyyS9KBYo=", + "dev": true, + "requires": { + "doctrine": "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz" + } + }, + "typescript": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.7.1.tgz", + "integrity": "sha512-bqB1yS6o9TNA9ZC/MJxM0FZzPnZdtHj0xWK/IZ5khzVqdpGul/R/EIiHRgFXlwTD7PSIaYVnGKq1QgMCu2mnqw==", + "dev": true + }, + "unzip-response": { + "version": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", + "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=", + "dev": true + }, + "update-notifier": { + "version": "https://registry.npmjs.org/update-notifier/-/update-notifier-1.0.3.tgz", + "integrity": "sha1-j5LFFUgr1oMbfJMBPnD4dVLHz1o=", + "dev": true, + "requires": { + "boxen": "https://registry.npmjs.org/boxen/-/boxen-0.6.0.tgz", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "configstore": "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz", + "is-npm": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "latest-version": "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz", + "lazy-req": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz", + "semver-diff": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "xdg-basedir": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz" + } + }, + "url-parse-lax": { + "version": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz" + } + }, + "user-home": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "dev": true + }, + "util-deprecate": { + "version": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "dev": true + }, + "v8flags": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.0.0.tgz", + "integrity": "sha512-AGl+C+4qpeSu2g3JxCD/mGFFOs/vVZ3XREkD3ibQXEqr4Y4zgIrPWW124/IKJFHOIVFIoH8miWrLf0o84HYjwA==", + "dev": true, + "requires": { + "user-home": "1.1.1" + } + }, + "widest-line": { + "version": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz", + "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=", + "dev": true, + "requires": { + "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" + } + }, + "wordwrap": { + "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrappy": { + "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "imurmurhash": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "slide": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz" + } + }, + "xdg-basedir": { + "version": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", + "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", + "dev": true, + "requires": { + "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" + } + }, + "yn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", + "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "dev": true + } + } +} diff --git a/package.json b/package.json index 7aa31d1..3a811f5 100644 --- a/package.json +++ b/package.json @@ -27,10 +27,10 @@ }, "homepage": "https://github.com/gcanti/io-ts-types", "dependencies": { - "fp-ts": "gcanti/fp-ts#next", - "io-ts": "gcanti/io-ts#next", - "monocle-ts": "gcanti/monocle-ts#next", - "newtype-ts": "gcanti/newtype-ts#next" + "fp-ts": "^1.0.0", + "io-ts": "^1.0.0", + "monocle-ts": "^1.0.0", + "newtype-ts": "^0.2.0" }, "devDependencies": { "@types/mocha": "2.2.38",