Skip to content

deserialize doesn't throw errors if beforeDeserialize passes errors to callback #181

@yifanwww

Description

@yifanwww

This doc implies that in beforeDeserialize we can do callback(err) to stop the deserialization and get a throwed error, just like we do it in afterDeserialize.

However, the real behavior is different. It behaves like the field/prop doesn't exist and just skips it.

For example:

// example 1

const schema = createSimpleSchema({
    a: primitive({ beforeDeserialize: (done) => done('err') }),
    b: raw({ beforeDeserialize: (done) => done('err') }),
    c: identifier({ beforeDeserialize: (done) => done('err') }),
    d: date({ beforeDeserialize: (done) => done('err') }),
});

deserialize(schema, { a: 1, b: 1, c: 1, d: 1 });

// example 2

const schema = createSimpleSchema({
    a: object(
        createSimpleSchema({
            b: primitive({ beforeDeserialize: (done) => done('err') }),
        }),
    ),
});

deserialize(schema, { a: { b: 1 } });

We would expect that it should throw an error err, but it doesn't.

I checked the code, here it just ignores any errors from beforeDeserialize, is there any reason or is it a bug?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions