https://github.com/saeris/valimock
🃏 Generate mock data for Valibot schemas using Faker
https://github.com/saeris/valimock
faker mocking-library testing valibot
Last synced: 2 months ago
JSON representation
🃏 Generate mock data for Valibot schemas using Faker
- Host: GitHub
- URL: https://github.com/saeris/valimock
- Owner: Saeris
- Created: 2023-10-17T03:17:16.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-05-01T14:11:19.000Z (over 1 year ago)
- Last Synced: 2024-12-01T08:33:49.633Z (10 months ago)
- Topics: faker, mocking-library, testing, valibot
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/valimock
- Size: 3.58 MB
- Stars: 25
- Watchers: 2
- Forks: 0
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
Awesome Lists containing this project
README
# 🃏 Valimock
[![npm version][npm_badge]][npm]
[![CI status][ci_badge]][ci]Generate mock data for [Valibot][valibot] schemas using [Faker][faker]
---
## 📦 Installation
```bash
npm install --save-dev valimock @faker-js/faker
``````bash
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!
```ts
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__`][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`][zod-mock]
## 🥂 License
Released under the [MIT license][license] © [Drake Costa][personal-website].
[npm_badge]: https://img.shields.io/npm/v/valimock.svg?style=flat
[npm]: https://www.npmjs.com/package/valimock
[ci_badge]: https://github.com/saeris/valimock/actions/workflows/ci.yml/badge.svg
[ci]: https://github.com/saeris/valimock/actions/workflows/ci.yml
[valibot]: https://github.com/fabian-hiller/valibot
[faker]: https://github.com/faker-js/faker
[tests]: ./src/__tests__/
[zod-mock]: https://github.com/anatine/zod-plugins/tree/main/packages/zod-mock
[license]: ./LICENSE.md
[personal-website]: https://saeris.gg