diff --git a/packages/effect/src/ParseResult.ts b/packages/effect/src/ParseResult.ts index 585616a94fe..92b95b5c3ab 100644 --- a/packages/effect/src/ParseResult.ts +++ b/packages/effect/src/ParseResult.ts @@ -461,198 +461,220 @@ const getEffect = (ast: AST.AST, isDecoding: boolean, options?: AST.ParseOpti * @category decoding * @since 3.10.0 */ -export const decodeUnknownSync = ( - schema: Schema.Schema, +export const decodeUnknownSync = ( + schema: S, options?: AST.ParseOptions -): (u: unknown, overrideOptions?: AST.ParseOptions) => A => getSync(schema.ast, true, options) +): (u: unknown, overrideOptions?: AST.ParseOptions) => Schema.Schema.Type => getSync(schema.ast, true, options) /** * @category decoding * @since 3.10.0 */ -export const decodeUnknownOption = ( - schema: Schema.Schema, +export const decodeUnknownOption = ( + schema: S, options?: AST.ParseOptions -): (u: unknown, overrideOptions?: AST.ParseOptions) => Option.Option => getOption(schema.ast, true, options) +): (u: unknown, overrideOptions?: AST.ParseOptions) => Option.Option> => + getOption(schema.ast, true, options) /** * @category decoding * @since 3.10.0 */ -export const decodeUnknownEither = ( - schema: Schema.Schema, +export const decodeUnknownEither = ( + schema: S, options?: AST.ParseOptions -): (u: unknown, overrideOptions?: AST.ParseOptions) => Either.Either => +): (u: unknown, overrideOptions?: AST.ParseOptions) => Either.Either, ParseIssue> => getEither(schema.ast, true, options) /** * @category decoding * @since 3.10.0 */ -export const decodeUnknownPromise = ( - schema: Schema.Schema, +export const decodeUnknownPromise = ( + schema: S, options?: AST.ParseOptions ) => { - const parser = decodeUnknown(schema, options) - return (u: unknown, overrideOptions?: AST.ParseOptions): Promise => Effect.runPromise(parser(u, overrideOptions)) + const parser = decodeUnknown>(schema, options) + return (u: unknown, overrideOptions?: AST.ParseOptions): Promise> => + Effect.runPromise(parser(u, overrideOptions)) } /** * @category decoding * @since 3.10.0 */ -export const decodeUnknown = ( - schema: Schema.Schema, +export const decodeUnknown = ( + schema: S, options?: AST.ParseOptions -): (u: unknown, overrideOptions?: AST.ParseOptions) => Effect.Effect => - getEffect(schema.ast, true, options) +): ( + u: unknown, + overrideOptions?: AST.ParseOptions +) => Effect.Effect, ParseIssue, Schema.Schema.Context> => getEffect(schema.ast, true, options) /** * @throws `ParseError` * @category encoding * @since 3.10.0 */ -export const encodeUnknownSync = ( - schema: Schema.Schema, +export const encodeUnknownSync = ( + schema: S, options?: AST.ParseOptions -): (u: unknown, overrideOptions?: AST.ParseOptions) => I => getSync(schema.ast, false, options) +): (u: unknown, overrideOptions?: AST.ParseOptions) => Schema.Schema.Encoded => getSync(schema.ast, false, options) /** * @category encoding * @since 3.10.0 */ -export const encodeUnknownOption = ( - schema: Schema.Schema, +export const encodeUnknownOption = ( + schema: S, options?: AST.ParseOptions -): (u: unknown, overrideOptions?: AST.ParseOptions) => Option.Option => getOption(schema.ast, false, options) +): (u: unknown, overrideOptions?: AST.ParseOptions) => Option.Option> => + getOption(schema.ast, false, options) /** * @category encoding * @since 3.10.0 */ -export const encodeUnknownEither = ( - schema: Schema.Schema, +export const encodeUnknownEither = ( + schema: S, options?: AST.ParseOptions -): (u: unknown, overrideOptions?: AST.ParseOptions) => Either.Either => +): (u: unknown, overrideOptions?: AST.ParseOptions) => Either.Either, ParseIssue> => getEither(schema.ast, false, options) /** * @category encoding * @since 3.10.0 */ -export const encodeUnknownPromise = ( - schema: Schema.Schema, +export const encodeUnknownPromise = ( + schema: S, options?: AST.ParseOptions ) => { - const parser = encodeUnknown(schema, options) - return (u: unknown, overrideOptions?: AST.ParseOptions): Promise => Effect.runPromise(parser(u, overrideOptions)) + const parser = encodeUnknown>(schema, options) + return (u: unknown, overrideOptions?: AST.ParseOptions): Promise> => + Effect.runPromise(parser(u, overrideOptions)) } /** * @category encoding * @since 3.10.0 */ -export const encodeUnknown = ( - schema: Schema.Schema, +export const encodeUnknown = ( + schema: S, options?: AST.ParseOptions -): (u: unknown, overrideOptions?: AST.ParseOptions) => Effect.Effect => +): ( + u: unknown, + overrideOptions?: AST.ParseOptions +) => Effect.Effect, ParseIssue, Schema.Schema.Context> => getEffect(schema.ast, false, options) /** * @category decoding * @since 3.10.0 */ -export const decodeSync: ( - schema: Schema.Schema, +export const decodeSync: ( + schema: S, options?: AST.ParseOptions -) => (i: I, overrideOptions?: AST.ParseOptions) => A = decodeUnknownSync +) => (i: Schema.Schema.Encoded, overrideOptions?: AST.ParseOptions) => Schema.Schema.Type = decodeUnknownSync /** * @category decoding * @since 3.10.0 */ -export const decodeOption: ( - schema: Schema.Schema, +export const decodeOption: ( + schema: S, options?: AST.ParseOptions -) => (i: I, overrideOptions?: AST.ParseOptions) => Option.Option = decodeUnknownOption +) => (i: Schema.Schema.Encoded, overrideOptions?: AST.ParseOptions) => Option.Option> = + decodeUnknownOption /** * @category decoding * @since 3.10.0 */ -export const decodeEither: ( - schema: Schema.Schema, +export const decodeEither: ( + schema: S, options?: AST.ParseOptions -) => (i: I, overrideOptions?: AST.ParseOptions) => Either.Either = decodeUnknownEither +) => ( + i: Schema.Schema.Encoded, + overrideOptions?: AST.ParseOptions +) => Either.Either, ParseIssue> = decodeUnknownEither /** * @category decoding * @since 3.10.0 */ -export const decodePromise: ( - schema: Schema.Schema, +export const decodePromise: ( + schema: S, options?: AST.ParseOptions -) => (i: I, overrideOptions?: AST.ParseOptions) => Promise = decodeUnknownPromise +) => (i: Schema.Schema.Encoded, overrideOptions?: AST.ParseOptions) => Promise> = + decodeUnknownPromise /** * @category decoding * @since 3.10.0 */ -export const decode: ( - schema: Schema.Schema, +export const decode: ( + schema: S, options?: AST.ParseOptions -) => (i: I, overrideOptions?: AST.ParseOptions) => Effect.Effect = decodeUnknown +) => ( + i: Schema.Schema.Encoded, + overrideOptions?: AST.ParseOptions +) => Effect.Effect, ParseIssue, Schema.Schema.Context> = decodeUnknown /** * @throws `ParseError` * @category validation * @since 3.10.0 */ -export const validateSync = ( - schema: Schema.Schema, +export const validateSync = ( + schema: S, options?: AST.ParseOptions -): (u: unknown, overrideOptions?: AST.ParseOptions) => A => getSync(AST.typeAST(schema.ast), true, options) +): (u: unknown, overrideOptions?: AST.ParseOptions) => Schema.Schema.Type => + getSync(AST.typeAST(schema.ast), true, options) /** * @category validation * @since 3.10.0 */ -export const validateOption = ( - schema: Schema.Schema, +export const validateOption = ( + schema: S, options?: AST.ParseOptions -): (u: unknown, overrideOptions?: AST.ParseOptions) => Option.Option => +): (u: unknown, overrideOptions?: AST.ParseOptions) => Option.Option> => getOption(AST.typeAST(schema.ast), true, options) /** * @category validation * @since 3.10.0 */ -export const validateEither = ( - schema: Schema.Schema, +export const validateEither = ( + schema: S, options?: AST.ParseOptions -): (u: unknown, overrideOptions?: AST.ParseOptions) => Either.Either => +): (u: unknown, overrideOptions?: AST.ParseOptions) => Either.Either, ParseIssue> => getEither(AST.typeAST(schema.ast), true, options) /** * @category validation * @since 3.10.0 */ -export const validatePromise = ( - schema: Schema.Schema, +export const validatePromise = ( + schema: S, options?: AST.ParseOptions ) => { - const parser = validate(schema, options) - return (u: unknown, overrideOptions?: AST.ParseOptions): Promise => Effect.runPromise(parser(u, overrideOptions)) + const parser = validate>(schema, options) + return (u: unknown, overrideOptions?: AST.ParseOptions): Promise> => + Effect.runPromise(parser(u, overrideOptions)) } /** * @category validation * @since 3.10.0 */ -export const validate = ( - schema: Schema.Schema, +export const validate = ( + schema: S, options?: AST.ParseOptions -): (a: unknown, overrideOptions?: AST.ParseOptions) => Effect.Effect => +): ( + a: unknown, + overrideOptions?: AST.ParseOptions +) => Effect.Effect, ParseIssue, Schema.Schema.Context> => getEffect(AST.typeAST(schema.ast), true, options) /** @@ -661,9 +683,9 @@ export const validate = ( * @category validation * @since 3.10.0 */ -export const is = (schema: Schema.Schema, options?: AST.ParseOptions) => { +export const is = (schema: S, options?: AST.ParseOptions) => { const parser = goMemo(AST.typeAST(schema.ast), true) - return (u: unknown, overrideOptions?: AST.ParseOptions | number): u is A => + return (u: unknown, overrideOptions?: AST.ParseOptions | number): u is Schema.Schema.Type => Either.isRight(parser(u, { exact: true, ...mergeInternalOptions(options, overrideOptions) }) as any) } @@ -674,9 +696,9 @@ export const is = (schema: Schema.Schema, options?: AST.ParseO * @category validation * @since 3.10.0 */ -export const asserts = (schema: Schema.Schema, options?: AST.ParseOptions) => { +export const asserts = (schema: S, options?: AST.ParseOptions) => { const parser = goMemo(AST.typeAST(schema.ast), true) - return (u: unknown, overrideOptions?: AST.ParseOptions): asserts u is A => { + return (u: unknown, overrideOptions?: AST.ParseOptions): asserts u is Schema.Schema.Type => { const result: Either.Either = parser(u, { exact: true, ...mergeInternalOptions(options, overrideOptions) @@ -691,46 +713,54 @@ export const asserts = (schema: Schema.Schema, options?: AST.P * @category encoding * @since 3.10.0 */ -export const encodeSync: ( - schema: Schema.Schema, +export const encodeSync: ( + schema: S, options?: AST.ParseOptions -) => (a: A, overrideOptions?: AST.ParseOptions) => I = encodeUnknownSync +) => (a: Schema.Schema.Type, overrideOptions?: AST.ParseOptions) => Schema.Schema.Encoded = encodeUnknownSync /** * @category encoding * @since 3.10.0 */ -export const encodeOption: ( - schema: Schema.Schema, +export const encodeOption: ( + schema: S, options?: AST.ParseOptions -) => (input: A, overrideOptions?: AST.ParseOptions) => Option.Option = encodeUnknownOption +) => (a: Schema.Schema.Type, overrideOptions?: AST.ParseOptions) => Option.Option> = + encodeUnknownOption /** * @category encoding * @since 3.10.0 */ -export const encodeEither: ( - schema: Schema.Schema, +export const encodeEither: ( + schema: S, options?: AST.ParseOptions -) => (a: A, overrideOptions?: AST.ParseOptions) => Either.Either = encodeUnknownEither +) => ( + a: Schema.Schema.Type, + overrideOptions?: AST.ParseOptions +) => Either.Either, ParseIssue> = encodeUnknownEither /** * @category encoding * @since 3.10.0 */ -export const encodePromise: ( - schema: Schema.Schema, +export const encodePromise: ( + schema: S, options?: AST.ParseOptions -) => (a: A, overrideOptions?: AST.ParseOptions) => Promise = encodeUnknownPromise +) => (a: Schema.Schema.Type, overrideOptions?: AST.ParseOptions) => Promise> = + encodeUnknownPromise /** * @category encoding * @since 3.10.0 */ -export const encode: ( - schema: Schema.Schema, +export const encode: ( + schema: S, options?: AST.ParseOptions -) => (a: A, overrideOptions?: AST.ParseOptions) => Effect.Effect = encodeUnknown +) => ( + a: Schema.Schema.Type, + overrideOptions?: AST.ParseOptions +) => Effect.Effect, ParseIssue, Schema.Schema.Context> = encodeUnknown interface InternalOptions extends AST.ParseOptions { readonly isEffectAllowed?: boolean diff --git a/packages/effect/src/Schema.ts b/packages/effect/src/Schema.ts index b259c7dd364..c1f88fe6b24 100644 --- a/packages/effect/src/Schema.ts +++ b/packages/effect/src/Schema.ts @@ -342,6 +342,11 @@ export declare namespace Schema { */ export type Context = S extends Schema.Variance ? R : never + /** + * @since 3.18.4 + */ + export type WithoutContext = Schema, Encoded> + /** * @since 3.10.0 */