Skip to content

Commit

Permalink
fix merge return type
Browse files Browse the repository at this point in the history
  • Loading branch information
moshest committed May 20, 2020
1 parent 97e3e02 commit 0e67777
Show file tree
Hide file tree
Showing 3 changed files with 120 additions and 64 deletions.
83 changes: 51 additions & 32 deletions src/Schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { ErrorLike } from './schema/errors';
import {
MergeSchemaParameters,
SchemaParameters,
SchemaResolveType,
SchemaReturnType,
SchemaValidatorFunction,
} from './schema/io';
Expand Down Expand Up @@ -175,7 +176,7 @@ interface SchemaType {
): ValidatorProxy<
Validator<
FunctionType<
SchemaReturnType<A> & SchemaReturnType<B>,
SchemaReturnType<A & B, SchemaResolveType<A> & SchemaResolveType<B>>,
MergeSchemaParameters<SchemaParameters<A> & SchemaParameters<B>>
>
>
Expand All @@ -185,7 +186,10 @@ interface SchemaType {
): ValidatorProxy<
Validator<
FunctionType<
SchemaReturnType<A> & SchemaReturnType<B> & SchemaReturnType<C>,
SchemaReturnType<
A & B & C,
SchemaResolveType<A> & SchemaResolveType<B> & SchemaResolveType<C>
>,
MergeSchemaParameters<
SchemaParameters<A> & SchemaParameters<B> & SchemaParameters<C>
>
Expand All @@ -197,10 +201,13 @@ interface SchemaType {
): ValidatorProxy<
Validator<
FunctionType<
SchemaReturnType<A> &
SchemaReturnType<B> &
SchemaReturnType<C> &
SchemaReturnType<D>,
SchemaReturnType<
A & B & C & D,
SchemaResolveType<A> &
SchemaResolveType<B> &
SchemaResolveType<C> &
SchemaResolveType<D>
>,
MergeSchemaParameters<
SchemaParameters<A> &
SchemaParameters<B> &
Expand All @@ -215,11 +222,14 @@ interface SchemaType {
): ValidatorProxy<
Validator<
FunctionType<
SchemaReturnType<A> &
SchemaReturnType<B> &
SchemaReturnType<C> &
SchemaReturnType<D> &
SchemaReturnType<E>,
SchemaReturnType<
A & B & C & D & E,
SchemaResolveType<A> &
SchemaResolveType<B> &
SchemaResolveType<C> &
SchemaResolveType<D> &
SchemaResolveType<E>
>,
MergeSchemaParameters<
SchemaParameters<A> &
SchemaParameters<B> &
Expand All @@ -235,12 +245,15 @@ interface SchemaType {
): ValidatorProxy<
Validator<
FunctionType<
SchemaReturnType<A> &
SchemaReturnType<B> &
SchemaReturnType<C> &
SchemaReturnType<D> &
SchemaReturnType<E> &
SchemaReturnType<F>,
SchemaReturnType<
A & B & C & D & E & F,
SchemaResolveType<A> &
SchemaResolveType<B> &
SchemaResolveType<C> &
SchemaResolveType<D> &
SchemaResolveType<E> &
SchemaResolveType<F>
>,
MergeSchemaParameters<
SchemaParameters<A> &
SchemaParameters<B> &
Expand All @@ -257,13 +270,16 @@ interface SchemaType {
// ): ValidatorProxy<
// Validator<
// FunctionType<
// SchemaReturnType<A> &
// SchemaReturnType<B> &
// SchemaReturnType<C> &
// SchemaReturnType<D> &
// SchemaReturnType<E> &
// SchemaReturnType<F> &
// SchemaReturnType<G>,
// SchemaReturnType<
// A & B & C & D & E & F & G,
// SchemaResolveType<A> &
// SchemaResolveType<B> &
// SchemaResolveType<C> &
// SchemaResolveType<D> &
// SchemaResolveType<E> &
// SchemaResolveType<F> &
// SchemaResolveType<G>
// >,
// MergeSchemaParameters<
// SchemaParameters<A> &
// SchemaParameters<B> &
Expand All @@ -281,14 +297,17 @@ interface SchemaType {
// ): ValidatorProxy<
// Validator<
// FunctionType<
// SchemaReturnType<A> &
// SchemaReturnType<B> &
// SchemaReturnType<C> &
// SchemaReturnType<D> &
// SchemaReturnType<E> &
// SchemaReturnType<F> &
// SchemaReturnType<G> &
// SchemaReturnType<H>,
// SchemaReturnType<
// A & B & C & D & E & F & G & H,
// SchemaResolveType<A> &
// SchemaResolveType<B> &
// SchemaResolveType<C> &
// SchemaResolveType<D> &
// SchemaResolveType<E> &
// SchemaResolveType<F> &
// SchemaResolveType<G> &
// SchemaResolveType<H>
// >,
// MergeSchemaParameters<
// SchemaParameters<A> &
// SchemaParameters<B> &
Expand Down
18 changes: 18 additions & 0 deletions src/schema/logic.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,24 @@ describe('schema/logic', () => {
assert.deepEqual(validator({ x: 1, y: 2 }), { x: '1', y: '3' });
assert.deepEqual(validator({ x: 1 }), { x: '1', y: '1' });
});

it('merging [sync, async]', async () => {
const validator = merge(
(n: number) => n + 1,
(n: number) =>
n > 0
? Promise.resolve(n + 1)
: Promise.reject(new Error('negative')),
);

typeCheck<typeof validator, (x: number) => PromiseLike<number>>('ok');

await assert.isFulfilled(validator(2));
await assert.isRejected(validator(-1), 'negative');

assert.equal(await validator(2), 3);
assert.equal(await validator(6), 7);
});
});

describe('optional', () => {
Expand Down
83 changes: 51 additions & 32 deletions src/schema/logic.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import {
MergeSchemaParameters,
SchemaParameters,
SchemaResolveType,
SchemaReturnType,
} from './io';
import FunctionType from './FunctionType';
Expand Down Expand Up @@ -182,24 +183,30 @@ export function merge<A>(
export function merge<A, B>(
...args: [A, B]
): FunctionType<
SchemaReturnType<A> & SchemaReturnType<B>,
SchemaReturnType<A & B, SchemaResolveType<A> & SchemaResolveType<B>>,
MergeSchemaParameters<SchemaParameters<A> & SchemaParameters<B>>
>;
export function merge<A, B, C>(
...args: [A, B, C]
): FunctionType<
SchemaReturnType<A> & SchemaReturnType<B> & SchemaReturnType<C>,
SchemaReturnType<
A & B & C,
SchemaResolveType<A> & SchemaResolveType<B> & SchemaResolveType<C>
>,
MergeSchemaParameters<
SchemaParameters<A> & SchemaParameters<B> & SchemaParameters<C>
>
>;
export function merge<A, B, C, D>(
...args: [A, B, C, D]
): FunctionType<
SchemaReturnType<A> &
SchemaReturnType<B> &
SchemaReturnType<C> &
SchemaReturnType<D>,
SchemaReturnType<
A & B & C & D,
SchemaResolveType<A> &
SchemaResolveType<B> &
SchemaResolveType<C> &
SchemaResolveType<D>
>,
MergeSchemaParameters<
SchemaParameters<A> &
SchemaParameters<B> &
Expand All @@ -210,11 +217,14 @@ export function merge<A, B, C, D>(
export function merge<A, B, C, D, E>(
...args: [A, B, C, D, E]
): FunctionType<
SchemaReturnType<A> &
SchemaReturnType<B> &
SchemaReturnType<C> &
SchemaReturnType<D> &
SchemaReturnType<E>,
SchemaReturnType<
A & B & C & D & E,
SchemaResolveType<A> &
SchemaResolveType<B> &
SchemaResolveType<C> &
SchemaResolveType<D> &
SchemaResolveType<E>
>,
MergeSchemaParameters<
SchemaParameters<A> &
SchemaParameters<B> &
Expand All @@ -226,12 +236,15 @@ export function merge<A, B, C, D, E>(
export function merge<A, B, C, D, E, F>(
...args: [A, B, C, D, E, F]
): FunctionType<
SchemaReturnType<A> &
SchemaReturnType<B> &
SchemaReturnType<C> &
SchemaReturnType<D> &
SchemaReturnType<E> &
SchemaReturnType<F>,
SchemaReturnType<
A & B & C & D & E & F,
SchemaResolveType<A> &
SchemaResolveType<B> &
SchemaResolveType<C> &
SchemaResolveType<D> &
SchemaResolveType<E> &
SchemaResolveType<F>
>,
MergeSchemaParameters<
SchemaParameters<A> &
SchemaParameters<B> &
Expand All @@ -244,13 +257,16 @@ export function merge<A, B, C, D, E, F>(
// export function merge<A, B, C, D, E, F, G>(
// ...args: [A, B, C, D, E, F, G]
// ): FunctionType<
// SchemaReturnType<A> &
// SchemaReturnType<B> &
// SchemaReturnType<C> &
// SchemaReturnType<D> &
// SchemaReturnType<E> &
// SchemaReturnType<F> &
// SchemaReturnType<G>,
// SchemaReturnType<
// A & B & C & D & E & F & G,
// SchemaResolveType<A> &
// SchemaResolveType<B> &
// SchemaResolveType<C> &
// SchemaResolveType<D> &
// SchemaResolveType<E> &
// SchemaResolveType<F> &
// SchemaResolveType<G>
// >,
// MergeSchemaParameters<
// SchemaParameters<A> &
// SchemaParameters<B> &
Expand All @@ -264,14 +280,17 @@ export function merge<A, B, C, D, E, F>(
// export function merge<A, B, C, D, E, F, G, H>(
// ...args: [A, B, C, D, E, F, G, H]
// ): FunctionType<
// SchemaReturnType<A> &
// SchemaReturnType<B> &
// SchemaReturnType<C> &
// SchemaReturnType<D> &
// SchemaReturnType<E> &
// SchemaReturnType<F> &
// SchemaReturnType<G> &
// SchemaReturnType<H>,
// SchemaReturnType<
// A & B & C & D & E & F & G & H,
// SchemaResolveType<A> &
// SchemaResolveType<B> &
// SchemaResolveType<C> &
// SchemaResolveType<D> &
// SchemaResolveType<E> &
// SchemaResolveType<F> &
// SchemaResolveType<G> &
// SchemaResolveType<H>
// >,
// MergeSchemaParameters<
// SchemaParameters<A> &
// SchemaParameters<B> &
Expand Down

0 comments on commit 0e67777

Please sign in to comment.