├── .gitignore ├── .npmignore ├── jest.config.js ├── samples ├── tsconfig.json ├── package.json ├── index.tsx └── yarn.lock ├── tsconfig.json ├── .github ├── ISSUE_TEMPLATE │ ├── feature_request.md │ └── bug_report.md └── workflows │ ├── release.yml │ ├── pull_request.yml │ └── merge.yml ├── package.json ├── LICENSE ├── README.md ├── index.ts └── tests └── index.spec.ts /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | coverage 4 | .vscode 5 | codecov -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | coverage 2 | node_modules 3 | samples 4 | tests 5 | *.ts 6 | !*.d.ts 7 | jest.config.js 8 | tsconfig.json 9 | yarn.lock -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: 'ts-jest', 3 | testEnvironment: 'node', 4 | collectCoverage: true, 5 | coverageDirectory: './coverage/', 6 | }; -------------------------------------------------------------------------------- /samples/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "jsx": "react", 4 | "target": "es5", 5 | "module": "commonjs", 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "strict": true, 9 | "skipLibCheck": true 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /samples/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "samples", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "license": "MIT", 6 | "dependencies": { 7 | "formik": "^2.2.9", 8 | "react": "^17.0.2", 9 | "react-dom": "^17.0.2", 10 | "zod": "~3.7.2", 11 | "zod-formik-adapter": "^1.0.1" 12 | }, 13 | "devDependencies": { 14 | "@types/react-dom": "^17.0.11", 15 | "typescript": "^4.4.4" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "commonjs", 5 | "strict": true, 6 | "esModuleInterop": true, 7 | "skipLibCheck": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "baseUrl": ".", 10 | "declaration": true, 11 | "outDir": "./dist", 12 | "lib": ["ES2019"], 13 | "skipDefaultLibCheck": true, 14 | "moduleResolution": "node" 15 | }, 16 | "include": ["./"], 17 | "exclude": [ 18 | "node_modules", 19 | "samples", 20 | "tests", 21 | "dist", 22 | "coverage", 23 | "**/*.spec.ts", 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | on: workflow_dispatch 3 | 4 | jobs: 5 | release: 6 | name: Release 7 | runs-on: ubuntu-latest 8 | steps: 9 | - name: Checkout 10 | uses: actions/checkout@v3 11 | with: 12 | fetch-depth: 0 13 | - name: Setup Node.js 14 | uses: actions/setup-node@v3 15 | with: 16 | node-version: 24 17 | - name: Install dependencies 18 | run: yarn install --frozen-lockfile 19 | 20 | - name: Build distributable 21 | run: yarn build 22 | - name: Release 23 | env: 24 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 25 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }} 26 | run: npx semantic-release 27 | -------------------------------------------------------------------------------- /samples/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Formik } from 'formik'; 3 | import { z } from 'zod'; 4 | import { toFormikValidationSchema } from 'zod-formik-adapter'; 5 | 6 | const Schema = z.object({ 7 | name: z.string(), 8 | age: z.number(), 9 | }); 10 | 11 | const initialValues = { 12 | name: "", 13 | age: 1, 14 | } 15 | 16 | export const SampleForm = () => ( 17 | 22 | {({ errors, values, handleChange }) => ( 23 |
24 | 25 | {errors.name} 26 | 27 | 28 | {errors.age} 29 |
30 | )} 31 |
32 | ); 33 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "zod-formik-adapter", 3 | "version": "1.1.0", 4 | "description": "An adapter of zod object validation to Formik validation schema", 5 | "main": "./dist/index.js", 6 | "author": "Matheus Robert Lichtnow ", 7 | "license": "MIT", 8 | "repository": { 9 | "type": "git", 10 | "url": "https://github.com/robertLichtnow/zod-formik-adapter" 11 | }, 12 | "scripts": { 13 | "build": "tsc", 14 | "test": "jest --coverage", 15 | "test:ci": "jest --ci --coverage", 16 | "build:clean": "rm -rf dist && yarn build" 17 | }, 18 | "devDependencies": { 19 | "@types/jest": "^30.0.0", 20 | "formik": "~2.2.9", 21 | "jest": "^30.1.3", 22 | "react": "~17.0.2", 23 | "semantic-release": "^17.4.5", 24 | "ts-jest": "^29.4.1", 25 | "typescript": "^5.9.2", 26 | "zod": "^4.0.14" 27 | }, 28 | "peerDependencies": { 29 | "formik": "^2.2.9", 30 | "zod": "4.x" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: "[BUG]" 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Node version:** 32 | 33 | **Zod, Formik and zod-formik-adapter versions:** 34 | - Zod: 35 | - Formik: 36 | - zod-formik-adapter: 37 | 38 | **Additional context** 39 | Add any other context about the problem here. 40 | -------------------------------------------------------------------------------- /.github/workflows/pull_request.yml: -------------------------------------------------------------------------------- 1 | name: Pull Request 2 | on: 3 | pull_request: 4 | jobs: 5 | test: 6 | name: Test 7 | runs-on: ubuntu-latest 8 | steps: 9 | - name: Checkout 10 | uses: actions/checkout@v3 11 | with: 12 | fetch-depth: 0 13 | - name: Setup Node.js 14 | uses: actions/setup-node@v3 15 | with: 16 | node-version: 24 17 | - name: Install dependencies 18 | run: yarn install --frozen-lockfile 19 | - name: Test 20 | run: yarn test:ci 21 | 22 | 23 | build: 24 | name: Build 25 | runs-on: ubuntu-latest 26 | steps: 27 | - name: Checkout 28 | uses: actions/checkout@v3 29 | with: 30 | fetch-depth: 0 31 | - name: Setup Node.js 32 | uses: actions/setup-node@v3 33 | with: 34 | node-version: 24 35 | - name: Install dependencies 36 | run: yarn install --frozen-lockfile 37 | - name: Build 38 | run: yarn build 39 | 40 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 zod-formik-adapter 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /.github/workflows/merge.yml: -------------------------------------------------------------------------------- 1 | name: Merge 2 | on: 3 | push: 4 | branches: 5 | - master 6 | jobs: 7 | test: 8 | name: Code Coverage 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: Checkout 12 | uses: actions/checkout@v3 13 | with: 14 | fetch-depth: 0 15 | - name: Setup Node.js 16 | uses: actions/setup-node@v3 17 | with: 18 | node-version: 24 19 | - name: Install dependencies 20 | run: yarn install --frozen-lockfile 21 | - name: Test 22 | run: yarn test:ci 23 | - name: Download codecov 24 | run: curl -Os https://uploader.codecov.io/latest/linux/codecov && chmod +x codecov 25 | - name: Run codecov 26 | run: ./codecov 27 | 28 | build: 29 | name: Build 30 | runs-on: ubuntu-latest 31 | steps: 32 | - name: Checkout 33 | uses: actions/checkout@v3 34 | with: 35 | fetch-depth: 0 36 | - name: Setup Node.js 37 | uses: actions/setup-node@v3 38 | with: 39 | node-version: 24 40 | - name: Install dependencies 41 | run: yarn install --frozen-lockfile 42 | - name: Build 43 | run: yarn build 44 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # zod-formik-adapter 2 | 3 | [![codecov](https://codecov.io/gh/robertLichtnow/zod-formik-adapter/branch/master/graph/badge.svg?token=Z5V1VKCGV9)](https://codecov.io/gh/robertLichtnow/zod-formik-adapter) 4 | 5 | This library adapts a [zod](https://www.npmjs.com/package/zod) schema to work as a `validationSchema` prop or `validate` prop on [Formik](https://www.npmjs.com/package/formik) 6 | 7 | ## Install 8 | 9 | ```sh 10 | # npm 11 | $ npm install zod-formik-adapter 12 | 13 | # yarn 14 | $ yarn add zod-formik-adapter 15 | ``` 16 | 17 | ## Usage 18 | 19 | ```TSX 20 | import { z } from 'zod'; 21 | import { Formik } from 'formik'; 22 | import { toFormikValidationSchema } from 'zod-formik-adapter'; 23 | 24 | const Schema = z.object({ 25 | name: z.string(), 26 | age: z.number(), 27 | }); 28 | 29 | const Component = () => ( 30 | 33 | {...} 34 | 35 | ); 36 | ``` 37 | 38 | ```TSX 39 | import { z } from 'zod'; 40 | import { Formik } from 'formik'; 41 | import { toFormikValidate } from 'zod-formik-adapter'; 42 | 43 | const Schema = z.object({ 44 | name: z.string(), 45 | age: z.number(), 46 | }); 47 | 48 | const Component = () => ( 49 | 52 | {...} 53 | 54 | ); 55 | ``` 56 | -------------------------------------------------------------------------------- /index.ts: -------------------------------------------------------------------------------- 1 | import { core, z } from "zod/v4"; 2 | 3 | export class ValidationError extends Error { 4 | public name = "ValidationError"; 5 | 6 | public inner: Array<{ path: string; message: string }> = []; 7 | 8 | public constructor(message: string) { 9 | super(message); 10 | } 11 | } 12 | 13 | function createValidationError(e: z.ZodError) { 14 | const error = new ValidationError(e.message); 15 | error.inner = e.issues.map((err) => ({ 16 | message: err.message, 17 | path: err.path.join("."), 18 | })); 19 | 20 | return error; 21 | } 22 | 23 | /** 24 | * Wrap your zod schema in this function when providing it to Formik's validation schema prop 25 | * @param schema The zod schema 26 | * @returns An object containing the `validate` method expected by Formik 27 | */ 28 | export function toFormikValidationSchema( 29 | schema: z.ZodSchema, 30 | params?: Partial> 31 | ): { validate: (obj: T) => Promise } { 32 | return { 33 | async validate(obj: T) { 34 | try { 35 | await schema.parseAsync(obj, params); 36 | } catch (err: unknown) { 37 | throw createValidationError(err as z.ZodError); 38 | } 39 | }, 40 | }; 41 | } 42 | 43 | function createValidationResult(error: z.ZodError) { 44 | const result: Record = {}; 45 | 46 | for (const x of error.issues) { 47 | result[x.path.filter(Boolean).join(".")] = x.message; 48 | } 49 | 50 | return result; 51 | } 52 | 53 | /** 54 | * Wrap your zod schema in this function when providing it to Formik's validate prop 55 | * @param schema The zod schema 56 | * @returns An validate function as expected by Formik 57 | */ 58 | export function toFormikValidate( 59 | schema: z.ZodSchema, 60 | params?: Partial> 61 | ) { 62 | return async (values: T) => { 63 | const result = await schema.safeParseAsync(values, params); 64 | if (!result.success) { 65 | return createValidationResult(result.error); 66 | } 67 | }; 68 | } 69 | -------------------------------------------------------------------------------- /tests/index.spec.ts: -------------------------------------------------------------------------------- 1 | import { z } from "zod/v4"; 2 | import { toFormikValidationSchema, toFormikValidate } from "../index"; 3 | 4 | describe("toFormikValidationSchema", () => { 5 | it("should pass validate without errors", async () => { 6 | // given 7 | const object = { name: "mock", age: 32 }; 8 | const { schema } = makeSut(); 9 | const { validate } = toFormikValidationSchema(schema); 10 | 11 | // when 12 | const errors = await validate(object); 13 | 14 | // then 15 | expect(errors).toEqual(undefined); 16 | }); 17 | 18 | it("should fail validate with error object", async () => { 19 | // given 20 | const object = { name: undefined, age: "32" } as any; 21 | const { schema } = makeSut(); 22 | const { validate } = toFormikValidationSchema(schema); 23 | 24 | const error = {} as any; 25 | error.inner = [ 26 | { 27 | path: "name", 28 | message: "Invalid input: expected string, received undefined", 29 | }, 30 | { 31 | path: "age", 32 | message: "Invalid input: expected number, received string", 33 | }, 34 | ]; 35 | 36 | // when 37 | await expect(validate(object)).rejects.toMatchObject(error); 38 | }); 39 | }); 40 | 41 | describe("toFormikValidate", () => { 42 | it("should pass validate without errors", async () => { 43 | // given 44 | const object = { name: "mock", age: 32 }; 45 | const { schema } = makeSut(); 46 | const validate = toFormikValidate(schema); 47 | 48 | // when 49 | const errors = await validate(object); 50 | 51 | // then 52 | expect(errors).toEqual(undefined); 53 | }); 54 | 55 | it("should fail validate with error object", async () => { 56 | // given 57 | const object = { name: undefined, age: "32" } as any; 58 | const { schema } = makeSut(); 59 | const validate = toFormikValidate(schema); 60 | 61 | const error = { 62 | name: "Invalid input: expected string, received undefined", 63 | age: "Invalid input: expected number, received string", 64 | }; 65 | 66 | // when 67 | const errors = await validate(object); 68 | 69 | // then 70 | expect(errors).toMatchObject(error); 71 | }); 72 | }); 73 | 74 | function makeSut() { 75 | const schema = z.object({ 76 | name: z.string(), // obrigatory name 77 | age: z.number().optional(), // optional age 78 | }); 79 | 80 | return { 81 | schema, 82 | }; 83 | } 84 | -------------------------------------------------------------------------------- /samples/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/prop-types@*": 6 | version "15.7.4" 7 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" 8 | integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== 9 | 10 | "@types/react-dom@^17.0.11": 11 | version "17.0.11" 12 | resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.11.tgz#e1eadc3c5e86bdb5f7684e00274ae228e7bcc466" 13 | integrity sha512-f96K3k+24RaLGVu/Y2Ng3e1EbZ8/cVJvypZWd7cy0ofCBaf2lcM46xNhycMZ2xGwbBjRql7hOlZ+e2WlJ5MH3Q== 14 | dependencies: 15 | "@types/react" "*" 16 | 17 | "@types/react@*": 18 | version "17.0.34" 19 | resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.34.tgz#797b66d359b692e3f19991b6b07e4b0c706c0102" 20 | integrity sha512-46FEGrMjc2+8XhHXILr+3+/sTe3OfzSPU9YGKILLrUYbQ1CLQC9Daqo1KzENGXAWwrFwiY0l4ZbF20gRvgpWTg== 21 | dependencies: 22 | "@types/prop-types" "*" 23 | "@types/scheduler" "*" 24 | csstype "^3.0.2" 25 | 26 | "@types/scheduler@*": 27 | version "0.16.2" 28 | resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" 29 | integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== 30 | 31 | csstype@^3.0.2: 32 | version "3.0.9" 33 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.9.tgz#6410af31b26bd0520933d02cbc64fce9ce3fbf0b" 34 | integrity sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw== 35 | 36 | deepmerge@^2.1.1: 37 | version "2.2.1" 38 | resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" 39 | integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== 40 | 41 | formik@^2.2.9: 42 | version "2.2.9" 43 | resolved "https://registry.yarnpkg.com/formik/-/formik-2.2.9.tgz#8594ba9c5e2e5cf1f42c5704128e119fc46232d0" 44 | integrity sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA== 45 | dependencies: 46 | deepmerge "^2.1.1" 47 | hoist-non-react-statics "^3.3.0" 48 | lodash "^4.17.21" 49 | lodash-es "^4.17.21" 50 | react-fast-compare "^2.0.1" 51 | tiny-warning "^1.0.2" 52 | tslib "^1.10.0" 53 | 54 | hoist-non-react-statics@^3.3.0: 55 | version "3.3.2" 56 | resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" 57 | integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== 58 | dependencies: 59 | react-is "^16.7.0" 60 | 61 | "js-tokens@^3.0.0 || ^4.0.0": 62 | version "4.0.0" 63 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 64 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 65 | 66 | lodash-es@^4.17.21: 67 | version "4.17.21" 68 | resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" 69 | integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== 70 | 71 | lodash@^4.17.21: 72 | version "4.17.21" 73 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 74 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 75 | 76 | loose-envify@^1.1.0: 77 | version "1.4.0" 78 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 79 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 80 | dependencies: 81 | js-tokens "^3.0.0 || ^4.0.0" 82 | 83 | object-assign@^4.1.1: 84 | version "4.1.1" 85 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 86 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 87 | 88 | react-dom@^17.0.2: 89 | version "17.0.2" 90 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" 91 | integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== 92 | dependencies: 93 | loose-envify "^1.1.0" 94 | object-assign "^4.1.1" 95 | scheduler "^0.20.2" 96 | 97 | react-fast-compare@^2.0.1: 98 | version "2.0.4" 99 | resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" 100 | integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== 101 | 102 | react-is@^16.7.0: 103 | version "16.13.1" 104 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" 105 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== 106 | 107 | react@^17.0.2: 108 | version "17.0.2" 109 | resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" 110 | integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== 111 | dependencies: 112 | loose-envify "^1.1.0" 113 | object-assign "^4.1.1" 114 | 115 | scheduler@^0.20.2: 116 | version "0.20.2" 117 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" 118 | integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== 119 | dependencies: 120 | loose-envify "^1.1.0" 121 | object-assign "^4.1.1" 122 | 123 | tiny-warning@^1.0.2: 124 | version "1.0.3" 125 | resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" 126 | integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== 127 | 128 | tslib@^1.10.0: 129 | version "1.14.1" 130 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 131 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 132 | 133 | typescript@^4.4.4: 134 | version "4.4.4" 135 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.4.tgz#2cd01a1a1f160704d3101fd5a58ff0f9fcb8030c" 136 | integrity sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA== 137 | 138 | zod-formik-adapter@~1.0.1: 139 | version "1.0.1" 140 | resolved "https://registry.yarnpkg.com/zod-formik-adapter/-/zod-formik-adapter-1.0.1.tgz#6b12fe20ae17cd005aec73dc10de3381a347a92a" 141 | integrity sha512-TzX7/kpibeb6BCh0wLIM/tCX4nKbWJCfJRr6AmhP0CZEjFY8hBfVX6Y6Ir6UTkhNcCjj8cy28jQlrLmEwDefjw== 142 | 143 | zod@~3.7.2: 144 | version "3.7.3" 145 | resolved "https://registry.yarnpkg.com/zod/-/zod-3.7.3.tgz#83363e528de4538429f0b5828a5a0ad6198b70e1" 146 | integrity sha512-g2vA55KUfAkQPNPg0Ikj1Qy9THLUBHlnh2ZRXJc0eUaue81Sm0J4w1daRcuzdgapxn+J71kbxg0lBqMJJZSK5g== 147 | --------------------------------------------------------------------------------