npm install --save-dev valimock @faker-js/fakeryarn add -D valimock @faker-js/fakerImport 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, pipe, url, number, maxValue } from "valibot";
import { Valimock } from "valimock";
describe(`example test`, () => {
it(`should generate valid mock data`, () => {
const schema = array(union([pipe(string(), url()), pipe(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 |
| β | β | β | β | β | β | β |
Below is an incomplete list of supported validations for the given schemas.
| check | checkItems | empty | everyItem | excludes |
|---|---|---|---|---|
| β | β | β | β | β |
| includes | length | maxLength | minLength | nonEmpty |
| β | β | β | β | β |
| notLength | partialCheck | rawCheck | someItem | |
| β | β | β | β |
| check | gtValue | ltValue | maxValue | minValue |
|---|---|---|---|---|
| β | β | β | β | β |
| multipleOf | notValue | notValues | rawCheck | value |
| β | β | β | β | β |
| values | ||||
| β |
| check | gtValue | ltValue | maxValue | minValue |
|---|---|---|---|---|
| β | β | β | β | β |
| notValue | notValues | rawCheck | value | values |
| β | β | β | β | β |
| check | finite | gtValue | integer | ltValue |
|---|---|---|---|---|
| β | β | β | β | β |
| maxValue | minValue | multipleOf | notValue | notValues |
| β | β | β | β | β |
| rawCheck | safeInteger | value | values | |
| β | β | β | β |
| base64 | bic | bytes | creditCard | cuid2 |
|---|---|---|---|---|
| β | β | β | β | β |
| check | decimal | digits | emoji | |
| β | β | β | β | β |
| empty | endsWith | excludes | graphemes | gtValue |
| β | β | β | β | β |
| hash | hexadecimal | hexColor | imei | includes |
| β | β | β | β | β |
| ip | ipv4 | ipv6 | isoDate | isoDateTime |
| β | β | β | β | β |
| isoTime | isoTimeSecond | isoTimestamp | isoWeek | length |
| β | β | β | β | β |
| ltValue | mac | mac48 | mac64 | maxBytes |
| β | β | β | β | β |
| maxGraphemes | maxLength | maxValue | maxWords | minBytes |
| β | β | β | β | β |
| minGraphemes | minLength | minValue | minWords | nanoid |
| β | β | β | β | β |
| nonEmpty | notBytes | notEntries | notGraphemes | notLength |
| β | β | β | β | β |
| notValue | notValues | notWords | octal | rawCheck |
| β | β | β | β | β |
| regex | rfcEmail | slug | startsWith | ulid |
| β | β | β | β | β |
| url | uuid | value | values | words |
| β | β | β | β | β |
Valimock's implementation is based on @anatine/zod-mock
Released under the MIT license Β© Drake Costa.