valimock
v1.4.0
Published
Generate mock data for Valibot schemas using Faker
Readme
🃏 Valimock
Generate mock data for Valibot schemas using Faker
📦 Installation
npm install --save-dev valimock @faker-js/fakeryarn add -D valimock @faker-js/faker🔧 Usage
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 aPromiseand may need to beawait'ed depending on usage.Please see the
__tests__folder for more usage examples of different schema types.
API Coverage
[!WARNING]
At present, not all of
valibot's API is fully covered byvalimock, however, any unimplemented schema type can be handled by a user-supplied map via thecustomMocksconfiguration option. The schema'stypeproerty is used as the property key for this map.
| | Implemented | Incomplete | Not Implemented | Unsupported | | ---------- | :---------: | :--------: | :-------------: | :---------: | | Symbol | ✔ | ⚠ | ❌ | ➖ |
Schemas
| 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 | | ➖ | ✔ | ✔ | ✔ | ❌ | ❌ | ❌ |
Validations
Below is an incomplete list of supported validations for the given schemas.
Array
| check | checkItems | empty | everyItem | excludes | | :-----------: | :--------------: | :-----------: | :-----------: | :----------: | | ❌ | ❌ | ✔ | ❌ | ❌ | | includes | length | maxLength | minLength | nonEmpty | | ❌ | ✔ | ✔ | ✔ | ✔ | | notLength | partialCheck | rawCheck | someItem | | ❌ | ❌ | ❌ | ❌ |
BigInt
| check | gtValue | ltValue | maxValue | minValue | | :------------: | :----------: | :-----------: | :----------: | :-------: | | ❌ | ❌ | ❌ | ✔ | ✔ | | multipleOf | notValue | notValues | rawCheck | value | | ❌ | ❌ | ❌ | ❌ | ✔ | | values | | ❌ |
Date
| check | gtValue | ltValue | maxValue | minValue | | :----------: | :-----------: | :----------: | :-------: | :--------: | | ❌ | ❌ | ❌ | ✔ | ✔ | | notValue | notValues | rawCheck | value | values | | ❌ | ❌ | ❌ | ✔ | ❌ |
Number
| check | finite | gtValue | integer | ltValue | | :----------: | :-------------: | :------------: | :----------: | :-----------: | | ❌ | ❌ | ❌ | ✔ | ❌ | | maxValue | minValue | multipleOf | notValue | notValues | | ✔ | ✔ | ❌ | ❌ | ❌ | | rawCheck | safeInteger | value | values | | ❌ | ❌ | ✔ | ❌ |
String
| base64 | bic | bytes | creditCard | cuid2 | | :--------------: | :---------------: | :--------------: | :--------------: | :-------------: | | ✔ | ✔ | ❌ | ✔ | ✔ | | check | decimal | digits | email | 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 | | ✔ | ✔ | ❌ | ❌ | ❌ |
📣 Acknowledgements
Valimock's implementation is based on @anatine/zod-mock
🥂 License
Released under the MIT license © Drake Costa.
