Comments (3)
I suggest returning special object that represents validation error just like ValiError. It has special tag to distinguish it. For user convenience, add error
method into info context agument in parse and pipeline functions
// example
const StringSchema = string([
(input, ctx) => {
if (input.length > 10) {
return ctx.error(
{
validation: "custom",
origin: "value",
message: "Invalid length",
input, // can be spreaded inside `error`
},
);
}
return input;
},
]);
const _ErrorTag = Symbol();
function isError(obj: unknown): obj is Issue {
return obj != null && typeof obj === "object" && obj[_ErrorTag] === _ErrorTag;
}
function createContext(info) {
return {
...info,
error: (errorObj: Issue) => ({
[_ErrorTag]: _ErrorTag,
...info,
...errorObj,
}),
};
}
// executePipe
for (const action of pipe) {
const outputOrError = action(output, createContext(info));
if (isError(outputOrError)) {
if (info.abortEarly || info.abortPipeEarly) {
return error;
}
issues.push(outputOrError);
} else output = outputOrError;
}
// parse method
function parse<TSchema extends BaseSchema>(
schema: TSchema,
input: unknown,
info?: Pick<ParseInfo, 'abortEarly' | 'abortPipeEarly'>
): Output<TSchema> {
const result = schema.parse(input, createContext(info));
if(isError(result)) throw new ValiError(result) // prevent breaking changes
return result;
}
from valibot.
Thank you for this insight. Do you have an idea how the implementation could look like here? With a global object or array? Or a parameter that is passed through and modified directly?
from valibot.
Thank you for the code example! I will give it some thought.
from valibot.
Related Issues (20)
- [Proposal] Considering Biome for formating and linting HOT 1
- Branded schema doesn't provide the type guard thru the `is`. HOT 2
- Add CIDR Schema Type HOT 3
- Reporting of Errors (ValiError Format compared with ZodError Format) HOT 3
- Nullable, how can i do
- isoTimestamp only supports decimal fraction up to 3 digits HOT 8
- Cannot use `brand` with `url` or `email` HOT 1
- Document minimum typescript version HOT 7
- Nextjs build Failed HOT 6
- How can I define a schema so that it can be validated as a function? HOT 1
- getDefaults returns undefined for optional with a default of empty string or false HOT 2
- The validation of the object is not rigorous enough HOT 3
- Optional Objects with Literal Fields and Raw Default Result in "| undefined" Type HOT 1
- union(): Union wrong behavior when type validation pass HOT 2
- A GPT companion for the Zod to Valibot conversion HOT 1
- `union()` of object with overlapping field drops other fields HOT 4
- Supporte Metadata like description
- Support non-string array in `picklist` HOT 4
- customAsync not resolved inside issues? HOT 4
- Change omit() parameter type to `readonly TKeys[]` HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from valibot.