diff --git a/package-lock.json b/package-lock.json index f77485aa5..294bc4709 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "io-ts", - "version": "2.2.14", + "version": "2.2.15", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -2313,6 +2313,12 @@ "ts-node": "^8.10.2" }, "dependencies": { + "fp-ts": { + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.9.5.tgz", + "integrity": "sha512-MiHrA5teO6t8zKArE3DdMPT/Db6v2GUt5yfWnhBTrrsVfeCJUUnV6sgFvjGNBKDmEMqVwRFkEePL7wPwqrLKKA==", + "dev": true + }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -3269,9 +3275,9 @@ "dev": true }, "fp-ts": { - "version": "2.9.5", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.9.5.tgz", - "integrity": "sha512-MiHrA5teO6t8zKArE3DdMPT/Db6v2GUt5yfWnhBTrrsVfeCJUUnV6sgFvjGNBKDmEMqVwRFkEePL7wPwqrLKKA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.5.0.tgz", + "integrity": "sha512-xkC9ZKl/i2cU+8FAsdyLcTvPRXphp42FcK5WmZpB47VXb4gggC3DHlVDKNLdbC+U8zz6yp1b0bj0mZg0axmZYQ==", "dev": true }, "fragment-cache": { diff --git a/package.json b/package.json index f949262ef..f904dc85d 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "homepage": "https://github.com/gcanti/io-ts", "dependencies": {}, "peerDependencies": { - "fp-ts": "^2.0.0" + "fp-ts": "^2.5.0" }, "devDependencies": { "@types/benchmark": "1.0.31", @@ -54,7 +54,7 @@ "dtslint": "github:gcanti/dtslint", "eslint": "^7.18.0", "fast-check": "^1.24.2", - "fp-ts": "^2.9.5", + "fp-ts": "^2.5.0", "import-path-rewrite": "github:gcanti/import-path-rewrite", "jest": "25.2.7", "mocha": "7.1.1", diff --git a/scripts/FileSystem.ts b/scripts/FileSystem.ts index 9e2c2c468..fa10d9f0f 100644 --- a/scripts/FileSystem.ts +++ b/scripts/FileSystem.ts @@ -1,5 +1,5 @@ -import * as TE from 'fp-ts/TaskEither' -import { flow } from 'fp-ts/function' +import * as TE from 'fp-ts/lib/TaskEither' +import { flow } from 'fp-ts/lib/function' import * as fs from 'fs' import G from 'glob' diff --git a/scripts/build.ts b/scripts/build.ts index ba6ec6f59..eabd0eb52 100644 --- a/scripts/build.ts +++ b/scripts/build.ts @@ -1,9 +1,9 @@ import * as path from 'path' -import * as E from 'fp-ts/Either' -import { pipe } from 'fp-ts/function' -import * as RTE from 'fp-ts/ReaderTaskEither' -import * as A from 'fp-ts/ReadonlyArray' -import * as TE from 'fp-ts/TaskEither' +import * as E from 'fp-ts/lib/Either' +import { pipe } from 'fp-ts/lib/pipeable' +import * as RTE from 'fp-ts/lib/ReaderTaskEither' +import * as A from 'fp-ts/lib/ReadonlyArray' +import * as TE from 'fp-ts/lib/TaskEither' import { FileSystem, fileSystem } from './FileSystem' import { run } from './run' @@ -31,18 +31,15 @@ export const copyPackageJson: Build = (C) => export const FILES: ReadonlyArray = ['CHANGELOG.md', 'LICENSE', 'README.md'] export const copyFiles: Build> = (C) => - pipe( - FILES, - A.traverse(TE.taskEither)((from) => C.copyFile(from, path.resolve(OUTPUT_FOLDER, from))) - ) + A.readonlyArray.traverse(TE.taskEither)(FILES, (from) => C.copyFile(from, path.resolve(OUTPUT_FOLDER, from))) -const traverse = A.traverse(TE.taskEither) +const traverse = A.readonlyArray.traverse(TE.taskEither) export const makeModules: Build = (C) => pipe( C.glob(`${OUTPUT_FOLDER}/lib/*.js`), TE.map(getModules), - TE.chain(traverse(makeSingleModule(C))), + TE.chain((modules) => traverse(modules, makeSingleModule(C))), TE.map(() => undefined) ) diff --git a/scripts/pre-publish.ts b/scripts/pre-publish.ts index c326efd04..01db9915c 100644 --- a/scripts/pre-publish.ts +++ b/scripts/pre-publish.ts @@ -1,7 +1,6 @@ -import { left } from 'fp-ts/TaskEither' +import { left } from 'fp-ts/lib/TaskEither' import { run } from './run' const main = left(new Error('"npm publish" can not be run from root, run "npm run release" instead')) run(main) - diff --git a/scripts/release.ts b/scripts/release.ts index 750f3eddd..418c37ffe 100644 --- a/scripts/release.ts +++ b/scripts/release.ts @@ -1,7 +1,7 @@ import { run } from './run' import * as child_process from 'child_process' -import { left, right } from 'fp-ts/Either' -import * as TE from 'fp-ts/TaskEither' +import { left, right } from 'fp-ts/lib/Either' +import * as TE from 'fp-ts/lib/TaskEither' const DIST = 'dist' diff --git a/scripts/run.ts b/scripts/run.ts index 7629fe11d..6c259ef49 100644 --- a/scripts/run.ts +++ b/scripts/run.ts @@ -1,5 +1,5 @@ -import { fold } from 'fp-ts/Either' -import { TaskEither } from 'fp-ts/TaskEither' +import { fold } from 'fp-ts/lib/Either' +import { TaskEither } from 'fp-ts/lib/TaskEither' export function run(eff: TaskEither): void { eff() diff --git a/test/Codec.ts b/test/Codec.ts index cfc48d99b..8b228ee39 100644 --- a/test/Codec.ts +++ b/test/Codec.ts @@ -20,6 +20,18 @@ const codecInt: _.Codec = _.fromDecoder(H.decoderInt) const codecUndefined: _.Codec = _.fromDecoder(H.decoderUndefined) +export type Json = boolean | number | string | null | JsonArray | JsonRecord + +export interface JsonRecord { + readonly [key: string]: Json +} + +export interface JsonArray extends ReadonlyArray {} + +export function parseJSON(s: string, onError: (reason: unknown) => E): E.Either { + return E.tryCatch(() => JSON.parse(s), onError) +} + describe('Codec', () => { describe('Invariant', () => { it('imap', () => { @@ -624,8 +636,8 @@ describe('Codec', () => { encode: (s) => Buffer.from(s).toString('base64') } - const Json: _.Codec = { - decode: (s) => E.parseJSON(s, () => D.error(s, 'Json')), + const Json: _.Codec = { + decode: (s) => parseJSON(s, () => D.error(s, 'Json')), encode: (a) => JSON.stringify(a) } diff --git a/test/Eq.ts b/test/Eq.ts index 6e74bfc71..a7b1921bb 100644 --- a/test/Eq.ts +++ b/test/Eq.ts @@ -44,7 +44,7 @@ describe('Eq', () => { }) it('intersect', () => { - const eq = pipe(E.type({ a: E.string }), E.intersect(E.type({ b: E.number }))) + const eq = pipe(E.struct({ a: E.string }), E.intersect(E.struct({ b: E.number }))) assert.deepStrictEqual(eq.equals({ a: 'a', b: 1 }, { a: 'a', b: 1 }), true) assert.deepStrictEqual(eq.equals({ a: 'a', b: 1 }, { a: 'c', b: 1 }), false) assert.deepStrictEqual(eq.equals({ a: 'a', b: 1 }, { a: 'a', b: 2 }), false) @@ -57,7 +57,7 @@ describe('Eq', () => { } const eq: Eq = E.Schemable.lazy('A', () => - E.type({ + E.struct({ a: E.number, b: E.array(eq) }) @@ -71,8 +71,8 @@ describe('Eq', () => { it('sum', () => { const sum = E.sum('_tag') const eq = sum({ - A: E.type({ _tag: E.Schemable.literal('A'), a: E.string }), - B: E.type({ _tag: E.Schemable.literal('B'), b: E.number }) + A: E.struct({ _tag: E.Schemable.literal('A'), a: E.string }), + B: E.struct({ _tag: E.Schemable.literal('B'), b: E.number }) }) assert.strictEqual(eq.equals({ _tag: 'A', a: 'a' }, { _tag: 'A', a: 'a' }), true) assert.strictEqual(eq.equals({ _tag: 'B', b: 1 }, { _tag: 'B', b: 1 }), true) diff --git a/test/JsonSchema.test.ts b/test/JsonSchema.test.ts index c8a86d81b..670f4b924 100644 --- a/test/JsonSchema.test.ts +++ b/test/JsonSchema.test.ts @@ -1,8 +1,8 @@ import * as assert from 'assert' import Ajv from 'ajv' import * as J from './JsonSchema' -import * as C from 'fp-ts/Const' -import { pipe } from 'fp-ts/function' +import * as C from 'fp-ts/lib/Const' +import { pipe } from 'fp-ts/lib/pipeable' const ajv = new Ajv() diff --git a/test/JsonSchema.ts b/test/JsonSchema.ts index bdc331c54..99be4dc9f 100644 --- a/test/JsonSchema.ts +++ b/test/JsonSchema.ts @@ -1,6 +1,7 @@ -import * as C from 'fp-ts/Const' -import { identity, pipe } from 'fp-ts/function' -import * as R from 'fp-ts/ReadonlyRecord' +import * as C from 'fp-ts/lib/Const' +import { identity } from 'fp-ts/lib/function' +import { pipe } from 'fp-ts/lib/pipeable' +import * as R from 'fp-ts/lib/ReadonlyRecord' import { JSONSchema7 } from 'json-schema' import * as S from '../src/Schemable'