Add Parse.defaulted

This commit is contained in:
Endeavorance 2025-05-21 11:49:42 -04:00
parent 1baf20f6c0
commit 3252c741ec
3 changed files with 25 additions and 4 deletions

View file

@ -1,6 +1,6 @@
{ {
"name": "@endeavorance/parsec", "name": "@endeavorance/parsec",
"version": "0.3.0", "version": "0.4.0",
"author": "Endeavorance", "author": "Endeavorance",
"type": "module", "type": "module",
"module": "dist/index.js", "module": "dist/index.js",

View file

@ -223,6 +223,19 @@ export const Parse = {
}; };
}, },
defaulted<T>(
parser: (val: unknown) => T,
defaultVal: T,
): (val: unknown) => T {
return (val: unknown) => {
if (val === undefined || val === null) {
return defaultVal;
}
return parser(val);
};
},
oneOf<T extends Parser<unknown>[]>( oneOf<T extends Parser<unknown>[]>(
parsers: T, parsers: T,
shapeName = "Union", shapeName = "Union",

View file

@ -176,6 +176,14 @@ describe(Parse.nullable, () => {
}); });
}); });
describe(Parse.defaulted, () => {
test("Parses uses a default value for undefined params", () => {
expect(Parse.defaulted(Parse.string, "default!")(undefined)).toBe(
"default!",
);
});
});
describe(Parse.nan, () => { describe(Parse.nan, () => {
test("Parses NaN", () => { test("Parses NaN", () => {
expect(Parse.nan(Number.NaN)).toBe(Number.NaN); expect(Parse.nan(Number.NaN)).toBe(Number.NaN);