Skip to content

Saeris/valimock

Repository files navigation

🃏 Valimock

npm version CI status

Generate mock data for Valibot schemas using Faker


📦 Installation

npm install --save-dev valimock @faker-js/faker
yarn 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 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.

API Coverage

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

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.

About

🃏 Generate mock data for Valibot schemas using Faker

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Contributors 3

  •  
  •  
  •