npm install --save-dev valimock @faker-js/faker
yarn add -D valimock @faker-js/faker
Import and optionally configure a new instance of the Valimock
class, then pass along your valibot
schema to mock()
, that's it!
import { parse, array, union, string, url, number, maxValue } from "valibot";
import { Valimock } from "valimock";
describe(`example test`, () => {
it(`should generate valid mock data`, () => {
const schema = array(union([string([url()]), number([maxValue(20)])]));
const result = new Valimock().mock(schema);
expect(parse(schema, result)).toStrictEqual(result);
});
});
Note
For async schemas, you will need to use parseAsync()
. Be aware that async schemas generate a Promise
and may need to be await
'ed depending on usage.
Please see the __tests__
folder for more usage examples of different schema types.
Warning
At present, not all of valibot
's API is fully covered by valimock
, however, any unimplemented schema type can be handled by a user-supplied map via the customMocks
configuration option. The schema's type
proerty is used as the property key for this map.
Implemented | Incomplete | Not Implemented | Unsupported | |
---|---|---|---|---|
Symbol | ✔ | ⚠ | ❌ | ➖ |
Any | Array | Bigint | Blob | Boolean | Date | Enum |
---|---|---|---|---|---|---|
❌ | ✔ | ✔ | ➖ | ✔ | ⚠ | ✔ |
Instance | Intersect | Literal | Map | NaN | Never | NonNullable |
➖ | ✔ | ✔ | ✔ | ✔ | ❌ | ✔ |
NonNullish | NonOptional | Null | Nullable | Nullish | Number | Object |
✔ | ✔ | ✔ | ✔ | ✔ | ⚠ | ✔ |
Optional | Picklist | Record | Recursive | Set | Special | String |
✔ | ✔ | ✔ | ✔ | ✔ | ➖ | ⚠ |
Symbol | Tuple | Undefined | Union | Unknown | Variant | Void |
➖ | ✔ | ✔ | ✔ | ❌ | ❌ | ❌ |
String | Number | Bigint | Boolean | Date | Array | Tuple | Union | Map | Set | Object | Blob | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
bytes | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
cuid2 | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
custom | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
customAsync | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | |
emoji | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
endsWith | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
excludes | ❌ | ➖ | ➖ | ➖ | ➖ | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
finite | ➖ | ❌ | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
imei | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
includes | ❌ | ➖ | ➖ | ➖ | ➖ | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
integer | ➖ | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
ip | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
ipv4 | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
ipv6 | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
isoDate | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
isoDateTime | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
isoTime | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
isoTimeSecond | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
isoTimestamp | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
isoWeek | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
length | ✔ | ➖ | ➖ | ➖ | ➖ | ✔ | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ |
mexBytes | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
maxLength | ✔ | ➖ | ➖ | ➖ | ➖ | ✔ | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ |
maxSize | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ❌ | ❌ | ➖ | ➖ |
maxValue | ❌ | ✔ | ✔ | ➖ | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
mimeType | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ❌ |
minBytes | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
minLength | ✔ | ➖ | ➖ | ➖ | ➖ | ✔ | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ |
minSize | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ❌ | ❌ | ➖ | ➖ |
minValue | ❌ | ✔ | ✔ | ➖ | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
multipleOf | ➖ | ❌ | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
notBytes | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
notLength | ❌ | ➖ | ➖ | ➖ | ➖ | ❌ | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ |
notSize | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ❌ | ❌ | ❌ | ❌ |
notValue | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
regex | ⚠ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
safeInteger | ➖ | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
size | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ❌ | ❌ | ➖ | ➖ |
startsWith | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
ulid | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
url | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
uuid | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
value | ❌ | ✔ | ✔ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
Valimock's implementation is based on @anatine/zod-mock
Released under the MIT license.