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, 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.