Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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: 12 days 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 (about 1 year ago)
- Default Branch: main
- Last Pushed: 2024-05-01T14:11:19.000Z (6 months ago)
- Last Synced: 2024-09-12T03:03:00.081Z (about 2 months ago)
- Topics: faker, mocking-library, testing, valibot
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/valimock
- Size: 3.58 MB
- Stars: 22
- 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](https://img.shields.io/npm/v/valimock.svg?style=flat)](https://www.npmjs.com/package/valimock)
[![CI status](https://github.com/saeris/valimock/actions/workflows/ci.yml/badge.svg)](https://github.com/saeris/valimock/actions/workflows/ci.yml)Generate mock data for [Valibot](https://github.com/fabian-hiller/valibot) schemas using [Faker](https://github.com/faker-js/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, url, number, maxValue } from "valibot";
import { Valimock } from "valimock";describe(`example test`, () => {
it(`should generate valid mock data`, () => {
const schema = array(union([string([url()]), 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__`](./src/__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
| | String | Number | Bigint | Boolean | Date | Array | Tuple | Union | Map | Set | Object | Blob |
| ----------------- | :----: | :----: | :----: | :-----: | :--: | :---: | :---: | :---: | :-: | :-: | :----: | :--: |
| **bytes** | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **cuid2** | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **custom** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| **customAsync** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| **email** | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **emoji** | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **endsWith** | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **excludes** | ❌ | ➖ | ➖ | ➖ | ➖ | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **finite** | ➖ | ❌ | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **imei** | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **includes** | ❌ | ➖ | ➖ | ➖ | ➖ | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **integer** | ➖ | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **ip** | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **ipv4** | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **ipv6** | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **isoDate** | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **isoDateTime** | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **isoTime** | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **isoTimeSecond** | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **isoTimestamp** | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **isoWeek** | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **length** | ✔ | ➖ | ➖ | ➖ | ➖ | ✔ | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **mexBytes** | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **maxLength** | ✔ | ➖ | ➖ | ➖ | ➖ | ✔ | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **maxSize** | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ❌ | ❌ | ➖ | ➖ |
| **maxValue** | ❌ | ✔ | ✔ | ➖ | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **mimeType** | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ❌ |
| **minBytes** | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **minLength** | ✔ | ➖ | ➖ | ➖ | ➖ | ✔ | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **minSize** | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ❌ | ❌ | ➖ | ➖ |
| **minValue** | ❌ | ✔ | ✔ | ➖ | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **multipleOf** | ➖ | ❌ | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **notBytes** | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **notLength** | ❌ | ➖ | ➖ | ➖ | ➖ | ❌ | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **notSize** | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ❌ | ❌ | ❌ | ❌ |
| **notValue** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| **regex** | ⚠ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **safeInteger** | ➖ | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **size** | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ❌ | ❌ | ➖ | ➖ |
| **startsWith** | ❌ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **ulid** | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **url** | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **uuid** | ✔ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ | ➖ |
| **value** | ❌ | ✔ | ✔ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |## 📣 Acknowledgements
Valimock's implementation is based on [`@anatine/zod-mock`](https://github.com/anatine/zod-plugins/tree/main/packages/zod-mock)
## 🥂 License
Released under the [MIT license](https://github.com/Saeris/discordkit/blob/master/LICENSE.md).