Valimock
🃏 Generate mock data for Valibot schemas using Faker
Install / Use
/learn @Saeris/ValimockREADME
🃏 Valimock
Generate mock data for Valibot schemas using Faker
</div>📦 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 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.
Related Skills
gh-issues
338.7kFetch GitHub issues, spawn sub-agents to implement fixes and open PRs, then monitor and address PR review comments. Usage: /gh-issues [owner/repo] [--label bug] [--limit 5] [--milestone v1.0] [--assignee @me] [--fork user/repo] [--watch] [--interval 5] [--reviews-only] [--cron] [--dry-run] [--model glm-5] [--notify-channel -1002381931352]
node-connect
338.7kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
Writing Hookify Rules
83.6kThis skill should be used when the user asks to "create a hookify rule", "write a hook rule", "configure hookify", "add a hookify rule", or needs guidance on hookify rule syntax and patterns.
