From 96a1758db2c52bd0c5d5fcf34a47edfc388f7cff Mon Sep 17 00:00:00 2001 From: Drew Powers Date: Sat, 19 Aug 2023 18:17:40 -0600 Subject: [PATCH] Add Next.js example, fix some other example bugs --- .../content/docs/openapi-fetch/examples.md | 6 +- .../openapi-fetch/examples/nextjs/.gitignore | 35 ++ .../openapi-fetch/examples/nextjs/README.md | 14 + .../examples/nextjs/app/favicon.ico | Bin 0 -> 25931 bytes .../examples/nextjs/app/layout.tsx | 13 + .../examples/nextjs/app/page.tsx | 25 ++ .../examples/nextjs/lib/api/index.ts | 5 + .../examples/nextjs/lib/api/v1.d.ts | 191 ++++++++++ .../examples/nextjs/lib/api/v1.json | 229 ++++++++++++ .../examples/nextjs/next.config.js | 2 + .../examples/nextjs/package.json | 22 ++ .../examples/nextjs/public/next.svg | 1 + .../examples/nextjs/public/vercel.svg | 1 + .../examples/nextjs/tsconfig.json | 23 ++ .../examples/react-query/package.json | 1 + .../examples/react-query/src/index.tsx | 5 +- .../examples/react-query/src/lib/api/v1.d.ts | 28 +- .../examples/react-query/src/lib/api/v1.json | 47 ++- .../examples/sveltekit/package.json | 7 +- .../examples/sveltekit/src/lib/api/v1.d.ts | 28 +- .../examples/sveltekit/src/lib/api/v1.json | 47 ++- .../sveltekit/src/routes/+page.svelte | 31 +- .../src/routes/page-data/+page.svelte | 4 +- pnpm-lock.yaml | 338 +++++++++++++++++- 24 files changed, 1062 insertions(+), 41 deletions(-) create mode 100644 packages/openapi-fetch/examples/nextjs/.gitignore create mode 100644 packages/openapi-fetch/examples/nextjs/README.md create mode 100644 packages/openapi-fetch/examples/nextjs/app/favicon.ico create mode 100644 packages/openapi-fetch/examples/nextjs/app/layout.tsx create mode 100644 packages/openapi-fetch/examples/nextjs/app/page.tsx create mode 100644 packages/openapi-fetch/examples/nextjs/lib/api/index.ts create mode 100644 packages/openapi-fetch/examples/nextjs/lib/api/v1.d.ts create mode 100644 packages/openapi-fetch/examples/nextjs/lib/api/v1.json create mode 100644 packages/openapi-fetch/examples/nextjs/next.config.js create mode 100644 packages/openapi-fetch/examples/nextjs/package.json create mode 100644 packages/openapi-fetch/examples/nextjs/public/next.svg create mode 100644 packages/openapi-fetch/examples/nextjs/public/vercel.svg create mode 100644 packages/openapi-fetch/examples/nextjs/tsconfig.json diff --git a/docs/src/content/docs/openapi-fetch/examples.md b/docs/src/content/docs/openapi-fetch/examples.md index 8ced98832..7908eb939 100644 --- a/docs/src/content/docs/openapi-fetch/examples.md +++ b/docs/src/content/docs/openapi-fetch/examples.md @@ -78,9 +78,11 @@ openapi-fetch is simple vanilla JS that can be used in any project. But sometime [View a code example in GitHub](https://github.com/drwpow/openapi-typescript/tree/main/packages/openapi-fetch/examples/react-query) -### React + SWR +### Next.js -TODO +Next.js is the most popular SSR framework for React. While [React Query](#react--react-query) is recommended for clientside fetching, this example shows how to take advantage of server-side fetching. + +[View a code example in GitHub](https://github.com/drwpow/openapi-typescript/tree/main/packages/openapi-fetch/examples/nextjs) ### Svelte / SvelteKit diff --git a/packages/openapi-fetch/examples/nextjs/.gitignore b/packages/openapi-fetch/examples/nextjs/.gitignore new file mode 100644 index 000000000..8f322f0d8 --- /dev/null +++ b/packages/openapi-fetch/examples/nextjs/.gitignore @@ -0,0 +1,35 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/packages/openapi-fetch/examples/nextjs/README.md b/packages/openapi-fetch/examples/nextjs/README.md new file mode 100644 index 000000000..4c9bed7ba --- /dev/null +++ b/packages/openapi-fetch/examples/nextjs/README.md @@ -0,0 +1,14 @@ +# openapi-fetch + Next.js + +Example of using openapi-fetch in [Next.js](https://nextjs.org) using server-rendered data. + +For an example of fetching clientside, see the [React Query example](../react-query) which also works in Next.js (React Query is recommended over SWR because of type inference). + +## Setup + +```sh +pnpm i +pnpm run dev +``` + +You’ll see the server running at `localhost:3000` diff --git a/packages/openapi-fetch/examples/nextjs/app/favicon.ico b/packages/openapi-fetch/examples/nextjs/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 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 LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/packages/openapi-fetch/examples/nextjs/app/layout.tsx b/packages/openapi-fetch/examples/nextjs/app/layout.tsx new file mode 100644 index 000000000..33d46c728 --- /dev/null +++ b/packages/openapi-fetch/examples/nextjs/app/layout.tsx @@ -0,0 +1,13 @@ +import type { Metadata } from "next"; + +export const metadata: Metadata = { + title: "openapi-fetch + Next.js", +}; + +export default function RootLayout({ children }: { children: React.ReactNode }) { + return ( + + {children} + + ); +} diff --git a/packages/openapi-fetch/examples/nextjs/app/page.tsx b/packages/openapi-fetch/examples/nextjs/app/page.tsx new file mode 100644 index 000000000..5afc1b31b --- /dev/null +++ b/packages/openapi-fetch/examples/nextjs/app/page.tsx @@ -0,0 +1,25 @@ +import client from "../lib/api"; + +async function getFact() { + return await client.GET("/fact", { + params: { + query: { max_length: 500 }, + }, + }); +} + +export default async function Home() { + const fact = await getFact(); + + return ( +
+ {fact.error ? ( +
There was an error: {fact.error.message}
+ ) : ( +
+          {JSON.stringify(fact.data, undefined, 2)}
+        
+ )} +
+ ); +} diff --git a/packages/openapi-fetch/examples/nextjs/lib/api/index.ts b/packages/openapi-fetch/examples/nextjs/lib/api/index.ts new file mode 100644 index 000000000..bdbdcbd21 --- /dev/null +++ b/packages/openapi-fetch/examples/nextjs/lib/api/index.ts @@ -0,0 +1,5 @@ +import createClient from "openapi-fetch"; +import type { paths } from "./v1"; + +const client = createClient({ baseUrl: "https://catfact.ninja/" }); +export default client; diff --git a/packages/openapi-fetch/examples/nextjs/lib/api/v1.d.ts b/packages/openapi-fetch/examples/nextjs/lib/api/v1.d.ts new file mode 100644 index 000000000..fad1c0cc0 --- /dev/null +++ b/packages/openapi-fetch/examples/nextjs/lib/api/v1.d.ts @@ -0,0 +1,191 @@ +/** + * This file was auto-generated by openapi-typescript. + * Do not make direct changes to the file. + */ + + +export interface paths { + "/breeds": { + /** + * Get a list of breeds + * @description Returns a a list of breeds + */ + get: operations["getBreeds"]; + }; + "/fact": { + /** + * Get Random Fact + * @description Returns a random fact + */ + get: operations["getRandomFact"]; + }; + "/facts": { + /** + * Get a list of facts + * @description Returns a a list of facts + */ + get: operations["getFacts"]; + }; +} + +export type webhooks = Record; + +export interface components { + schemas: { + /** + * Breed model + * @description Breed + */ + Breed: { + /** + * Breed + * Format: string + * @description Breed + */ + breed?: string; + /** + * Country + * Format: string + * @description Country + */ + country?: string; + /** + * Origin + * Format: string + * @description Origin + */ + origin?: string; + /** + * Coat + * Format: string + * @description Coat + */ + coat?: string; + /** + * Pattern + * Format: string + * @description Pattern + */ + pattern?: string; + }; + /** + * CatFact model + * @description CatFact + */ + CatFact: { + /** + * Fact + * Format: string + * @description Fact + */ + fact?: string; + /** + * Length + * Format: int32 + * @description Length + */ + length?: number; + }; + Error: { + code: number; + message: string; + }; + }; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; +} + +export type external = Record; + +export interface operations { + + /** + * Get a list of breeds + * @description Returns a a list of breeds + */ + getBreeds: { + parameters: { + query?: { + /** @description limit the amount of results returned */ + limit?: number; + }; + }; + responses: { + /** @description successful operation */ + 200: { + content: { + "application/json": components["schemas"]["Breed"][]; + }; + }; + /** @description error */ + default: { + content: { + "application/json": components["schemas"]["Error"]; + }; + }; + }; + }; + /** + * Get Random Fact + * @description Returns a random fact + */ + getRandomFact: { + parameters: { + query?: { + /** @description maximum length of returned fact */ + max_length?: number; + }; + }; + responses: { + /** @description successful operation */ + 200: { + content: { + "application/json": components["schemas"]["CatFact"]; + }; + }; + /** @description not found */ + 404: { + content: { + "application/json": components["schemas"]["Error"]; + }; + }; + /** @description error */ + default: { + content: { + "application/json": components["schemas"]["Error"]; + }; + }; + }; + }; + /** + * Get a list of facts + * @description Returns a a list of facts + */ + getFacts: { + parameters: { + query?: { + /** @description maximum length of returned fact */ + max_length?: number; + /** @description limit the amount of results returned */ + limit?: number; + }; + }; + responses: { + /** @description successful operation */ + 200: { + content: { + "application/json": components["schemas"]["CatFact"][]; + }; + }; + /** @description error */ + default: { + content: { + "application/json": components["schemas"]["Error"]; + }; + }; + }; + }; +} diff --git a/packages/openapi-fetch/examples/nextjs/lib/api/v1.json b/packages/openapi-fetch/examples/nextjs/lib/api/v1.json new file mode 100644 index 000000000..baf0c069e --- /dev/null +++ b/packages/openapi-fetch/examples/nextjs/lib/api/v1.json @@ -0,0 +1,229 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Cat Facts API", + "version": "1.0" + }, + "paths": { + "/breeds": { + "get": { + "tags": ["Breeds"], + "summary": "Get a list of breeds", + "description": "Returns a a list of breeds", + "operationId": "getBreeds", + "parameters": [ + { + "name": "limit", + "in": "query", + "description": "limit the amount of results returned", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Breed" + } + } + } + } + }, + "default": { + "description": "error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + } + } + }, + "/fact": { + "get": { + "tags": ["Facts"], + "summary": "Get Random Fact", + "description": "Returns a random fact", + "operationId": "getRandomFact", + "parameters": [ + { + "name": "max_length", + "in": "query", + "description": "maximum length of returned fact", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CatFact" + } + } + } + }, + "404": { + "description": "not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "default": { + "description": "error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + } + } + }, + "/facts": { + "get": { + "tags": ["Facts"], + "summary": "Get a list of facts", + "description": "Returns a a list of facts", + "operationId": "getFacts", + "parameters": [ + { + "name": "max_length", + "in": "query", + "description": "maximum length of returned fact", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "description": "limit the amount of results returned", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CatFact" + } + } + } + } + }, + "default": { + "description": "error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "Breed": { + "title": "Breed model", + "description": "Breed", + "properties": { + "breed": { + "title": "Breed", + "description": "Breed", + "type": "string", + "format": "string" + }, + "country": { + "title": "Country", + "description": "Country", + "type": "string", + "format": "string" + }, + "origin": { + "title": "Origin", + "description": "Origin", + "type": "string", + "format": "string" + }, + "coat": { + "title": "Coat", + "description": "Coat", + "type": "string", + "format": "string" + }, + "pattern": { + "title": "Pattern", + "description": "Pattern", + "type": "string", + "format": "string" + } + }, + "type": "object" + }, + "CatFact": { + "title": "CatFact model", + "description": "CatFact", + "properties": { + "fact": { + "title": "Fact", + "description": "Fact", + "type": "string", + "format": "string" + }, + "length": { + "title": "Length", + "description": "Length", + "type": "integer", + "format": "int32" + } + }, + "type": "object" + }, + "Error": { + "type": "object", + "required": ["code", "message"], + "properties": { + "code": { "type": "number" }, + "message": { "type": "string" } + } + } + } + } +} diff --git a/packages/openapi-fetch/examples/nextjs/next.config.js b/packages/openapi-fetch/examples/nextjs/next.config.js new file mode 100644 index 000000000..c4a407b7c --- /dev/null +++ b/packages/openapi-fetch/examples/nextjs/next.config.js @@ -0,0 +1,2 @@ +/** @type {import('next').NextConfig} */ +export default {}; diff --git a/packages/openapi-fetch/examples/nextjs/package.json b/packages/openapi-fetch/examples/nextjs/package.json new file mode 100644 index 000000000..f92efb4b5 --- /dev/null +++ b/packages/openapi-fetch/examples/nextjs/package.json @@ -0,0 +1,22 @@ +{ + "name": "@example/openapi-fetch-nextjs", + "private": true, + "type": "module", + "scripts": { + "dev": "next dev", + "prepare": "openapi-typescript lib/api/v1.json -o lib/api/v1.d.ts" + }, + "dependencies": { + "next": "13.4.19", + "openapi-fetch": "file:../..", + "react": "18.2.0", + "react-dom": "18.2.0" + }, + "devDependencies": { + "@types/node": "20.5.1", + "@types/react": "18.2.20", + "@types/react-dom": "18.2.7", + "openapi-typescript": "workspace:^", + "typescript": "5.1.6" + } +} diff --git a/packages/openapi-fetch/examples/nextjs/public/next.svg b/packages/openapi-fetch/examples/nextjs/public/next.svg new file mode 100644 index 000000000..5174b28c5 --- /dev/null +++ b/packages/openapi-fetch/examples/nextjs/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/openapi-fetch/examples/nextjs/public/vercel.svg b/packages/openapi-fetch/examples/nextjs/public/vercel.svg new file mode 100644 index 000000000..d2f842227 --- /dev/null +++ b/packages/openapi-fetch/examples/nextjs/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/openapi-fetch/examples/nextjs/tsconfig.json b/packages/openapi-fetch/examples/nextjs/tsconfig.json new file mode 100644 index 000000000..c459a618f --- /dev/null +++ b/packages/openapi-fetch/examples/nextjs/tsconfig.json @@ -0,0 +1,23 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "allowJs": true, + "esModuleInterop": true, + "incremental": true, + "isolatedModules": true, + "jsx": "preserve", + "lib": ["dom", "dom.iterable", "esnext"], + "module": "esnext", + "moduleResolution": "bundler", + "noEmit": true, + "paths": { + "@/*": ["./*"] + }, + "plugins": [{ "name": "next" }], + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": true + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/packages/openapi-fetch/examples/react-query/package.json b/packages/openapi-fetch/examples/react-query/package.json index 85dcd85b9..d2a400b72 100644 --- a/packages/openapi-fetch/examples/react-query/package.json +++ b/packages/openapi-fetch/examples/react-query/package.json @@ -1,6 +1,7 @@ { "name": "@example/openapi-fetch-react-query", "private": true, + "type": "module", "scripts": { "dev": "vite dev", "prepare": "openapi-typescript src/lib/api/v1.json -o src/lib/api/v1.d.ts" diff --git a/packages/openapi-fetch/examples/react-query/src/index.tsx b/packages/openapi-fetch/examples/react-query/src/index.tsx index ecf35ea4e..d10ae09e9 100644 --- a/packages/openapi-fetch/examples/react-query/src/index.tsx +++ b/packages/openapi-fetch/examples/react-query/src/index.tsx @@ -13,8 +13,9 @@ function Fact() { return (
{fact.isLoading &&
Loading...
} - {!!fact.error &&
There was an error: {String(fact.error)}
} - {!!fact.data && ( + {fact.error ? ( +
There was an error: {fact.error}
+ ) : (
           {JSON.stringify(fact.data, undefined, 2)}
         
diff --git a/packages/openapi-fetch/examples/react-query/src/lib/api/v1.d.ts b/packages/openapi-fetch/examples/react-query/src/lib/api/v1.d.ts index 335091dfa..fad1c0cc0 100644 --- a/packages/openapi-fetch/examples/react-query/src/lib/api/v1.d.ts +++ b/packages/openapi-fetch/examples/react-query/src/lib/api/v1.d.ts @@ -86,6 +86,10 @@ export interface components { */ length?: number; }; + Error: { + code: number; + message: string; + }; }; responses: never; parameters: never; @@ -116,6 +120,12 @@ export interface operations { "application/json": components["schemas"]["Breed"][]; }; }; + /** @description error */ + default: { + content: { + "application/json": components["schemas"]["Error"]; + }; + }; }; }; /** @@ -136,9 +146,17 @@ export interface operations { "application/json": components["schemas"]["CatFact"]; }; }; - /** @description Fact not found */ + /** @description not found */ 404: { - content: never; + content: { + "application/json": components["schemas"]["Error"]; + }; + }; + /** @description error */ + default: { + content: { + "application/json": components["schemas"]["Error"]; + }; }; }; }; @@ -162,6 +180,12 @@ export interface operations { "application/json": components["schemas"]["CatFact"][]; }; }; + /** @description error */ + default: { + content: { + "application/json": components["schemas"]["Error"]; + }; + }; }; }; } diff --git a/packages/openapi-fetch/examples/react-query/src/lib/api/v1.json b/packages/openapi-fetch/examples/react-query/src/lib/api/v1.json index 198b17f79..baf0c069e 100644 --- a/packages/openapi-fetch/examples/react-query/src/lib/api/v1.json +++ b/packages/openapi-fetch/examples/react-query/src/lib/api/v1.json @@ -36,6 +36,16 @@ } } } + }, + "default": { + "description": "error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } } } } @@ -70,7 +80,24 @@ } }, "404": { - "description": "Fact not found" + "description": "not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "default": { + "description": "error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } } } } @@ -116,6 +143,16 @@ } } } + }, + "default": { + "description": "error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } } } } @@ -178,6 +215,14 @@ } }, "type": "object" + }, + "Error": { + "type": "object", + "required": ["code", "message"], + "properties": { + "code": { "type": "number" }, + "message": { "type": "string" } + } } } } diff --git a/packages/openapi-fetch/examples/sveltekit/package.json b/packages/openapi-fetch/examples/sveltekit/package.json index db5df1404..e7a0415e6 100644 --- a/packages/openapi-fetch/examples/sveltekit/package.json +++ b/packages/openapi-fetch/examples/sveltekit/package.json @@ -1,7 +1,7 @@ { - "name": "sveltekit", - "version": "0.0.1", + "name": "@example/openapi-fetch-sveltekit", "private": true, + "type": "module", "scripts": { "dev": "vite dev", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", @@ -20,6 +20,5 @@ "tslib": "^2.6.2", "typescript": "^5.1.6", "vite": "^4.4.9" - }, - "type": "module" + } } diff --git a/packages/openapi-fetch/examples/sveltekit/src/lib/api/v1.d.ts b/packages/openapi-fetch/examples/sveltekit/src/lib/api/v1.d.ts index 335091dfa..fad1c0cc0 100644 --- a/packages/openapi-fetch/examples/sveltekit/src/lib/api/v1.d.ts +++ b/packages/openapi-fetch/examples/sveltekit/src/lib/api/v1.d.ts @@ -86,6 +86,10 @@ export interface components { */ length?: number; }; + Error: { + code: number; + message: string; + }; }; responses: never; parameters: never; @@ -116,6 +120,12 @@ export interface operations { "application/json": components["schemas"]["Breed"][]; }; }; + /** @description error */ + default: { + content: { + "application/json": components["schemas"]["Error"]; + }; + }; }; }; /** @@ -136,9 +146,17 @@ export interface operations { "application/json": components["schemas"]["CatFact"]; }; }; - /** @description Fact not found */ + /** @description not found */ 404: { - content: never; + content: { + "application/json": components["schemas"]["Error"]; + }; + }; + /** @description error */ + default: { + content: { + "application/json": components["schemas"]["Error"]; + }; }; }; }; @@ -162,6 +180,12 @@ export interface operations { "application/json": components["schemas"]["CatFact"][]; }; }; + /** @description error */ + default: { + content: { + "application/json": components["schemas"]["Error"]; + }; + }; }; }; } diff --git a/packages/openapi-fetch/examples/sveltekit/src/lib/api/v1.json b/packages/openapi-fetch/examples/sveltekit/src/lib/api/v1.json index 198b17f79..baf0c069e 100644 --- a/packages/openapi-fetch/examples/sveltekit/src/lib/api/v1.json +++ b/packages/openapi-fetch/examples/sveltekit/src/lib/api/v1.json @@ -36,6 +36,16 @@ } } } + }, + "default": { + "description": "error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } } } } @@ -70,7 +80,24 @@ } }, "404": { - "description": "Fact not found" + "description": "not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "default": { + "description": "error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } } } } @@ -116,6 +143,16 @@ } } } + }, + "default": { + "description": "error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } } } } @@ -178,6 +215,14 @@ } }, "type": "object" + }, + "Error": { + "type": "object", + "required": ["code", "message"], + "properties": { + "code": { "type": "number" }, + "message": { "type": "string" } + } } } } diff --git a/packages/openapi-fetch/examples/sveltekit/src/routes/+page.svelte b/packages/openapi-fetch/examples/sveltekit/src/routes/+page.svelte index b3cfa1234..ccd8001b3 100644 --- a/packages/openapi-fetch/examples/sveltekit/src/routes/+page.svelte +++ b/packages/openapi-fetch/examples/sveltekit/src/routes/+page.svelte @@ -1,23 +1,30 @@

Example: Client | Page Data

- {#await fact} -
Loading...
- {:then { data, error }} - {#if error} -
There was an error: {String(error)}
+ {#if fact} + {#if fact.error} +
There was an error: {fact.error}
{:else} -
{JSON.stringify(data, undefined, 2)}
+
{JSON.stringify(fact.data, undefined, 2)}
{/if} - {/await} - + {/if} +
diff --git a/packages/openapi-fetch/examples/sveltekit/src/routes/page-data/+page.svelte b/packages/openapi-fetch/examples/sveltekit/src/routes/page-data/+page.svelte index 4658321b8..9a33d3dc3 100644 --- a/packages/openapi-fetch/examples/sveltekit/src/routes/page-data/+page.svelte +++ b/packages/openapi-fetch/examples/sveltekit/src/routes/page-data/+page.svelte @@ -7,11 +7,11 @@

Example: Client | Page Data

{#if data.fact.error} -
There was an error: {String(data.fact.error)}
+
There was an error: {data.fact.error.message}
{:else if data.fact.data}
{JSON.stringify(data.fact.data, undefined, 2)}
{:else}
Loading...
{/if} - +
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 82d420b2d..3d85a4dba 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -144,11 +144,42 @@ importers: version: 5.1.6 vitest: specifier: ^0.34.1 - version: 0.34.1(supports-color@9.4.0) + version: 0.34.1 vitest-fetch-mock: specifier: ^0.2.2 version: 0.2.2(vitest@0.34.1) + packages/openapi-fetch/examples/nextjs: + dependencies: + next: + specifier: 13.4.19 + version: 13.4.19(react-dom@18.2.0)(react@18.2.0) + openapi-fetch: + specifier: file:../.. + version: file:packages/openapi-fetch + react: + specifier: 18.2.0 + version: 18.2.0 + react-dom: + specifier: 18.2.0 + version: 18.2.0(react@18.2.0) + devDependencies: + '@types/node': + specifier: 20.5.1 + version: 20.5.1 + '@types/react': + specifier: 18.2.20 + version: 18.2.20 + '@types/react-dom': + specifier: 18.2.7 + version: 18.2.7 + openapi-typescript: + specifier: workspace:^ + version: link:../../../openapi-typescript + typescript: + specifier: 5.1.6 + version: 5.1.6 + packages/openapi-fetch/examples/react-query: dependencies: '@tanstack/react-query': @@ -1768,6 +1799,91 @@ packages: read-yaml-file: 1.1.0 dev: true + /@next/env@13.4.19: + resolution: {integrity: sha512-FsAT5x0jF2kkhNkKkukhsyYOrRqtSxrEhfliniIq0bwWbuXLgyt3Gv0Ml+b91XwjwArmuP7NxCiGd++GGKdNMQ==} + dev: false + + /@next/swc-darwin-arm64@13.4.19: + resolution: {integrity: sha512-vv1qrjXeGbuF2mOkhkdxMDtv9np7W4mcBtaDnHU+yJG+bBwa6rYsYSCI/9Xm5+TuF5SbZbrWO6G1NfTh1TMjvQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-darwin-x64@13.4.19: + resolution: {integrity: sha512-jyzO6wwYhx6F+7gD8ddZfuqO4TtpJdw3wyOduR4fxTUCm3aLw7YmHGYNjS0xRSYGAkLpBkH1E0RcelyId6lNsw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-gnu@13.4.19: + resolution: {integrity: sha512-vdlnIlaAEh6H+G6HrKZB9c2zJKnpPVKnA6LBwjwT2BTjxI7e0Hx30+FoWCgi50e+YO49p6oPOtesP9mXDRiiUg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-musl@13.4.19: + resolution: {integrity: sha512-aU0HkH2XPgxqrbNRBFb3si9Ahu/CpaR5RPmN2s9GiM9qJCiBBlZtRTiEca+DC+xRPyCThTtWYgxjWHgU7ZkyvA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-gnu@13.4.19: + resolution: {integrity: sha512-htwOEagMa/CXNykFFeAHHvMJeqZfNQEoQvHfsA4wgg5QqGNqD5soeCer4oGlCol6NGUxknrQO6VEustcv+Md+g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-musl@13.4.19: + resolution: {integrity: sha512-4Gj4vvtbK1JH8ApWTT214b3GwUh9EKKQjY41hH/t+u55Knxi/0wesMzwQRhppK6Ddalhu0TEttbiJ+wRcoEj5Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-arm64-msvc@13.4.19: + resolution: {integrity: sha512-bUfDevQK4NsIAHXs3/JNgnvEY+LRyneDN788W2NYiRIIzmILjba7LaQTfihuFawZDhRtkYCv3JDC3B4TwnmRJw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-ia32-msvc@13.4.19: + resolution: {integrity: sha512-Y5kikILFAr81LYIFaw6j/NrOtmiM4Sf3GtOc0pn50ez2GCkr+oejYuKGcwAwq3jiTKuzF6OF4iT2INPoxRycEA==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-x64-msvc@13.4.19: + resolution: {integrity: sha512-YzA78jBDXMYiINdPdJJwGgPNT3YqBNNGhsthsDoWHL9p24tEJn9ViQf/ZqTbwSpX/RrkPupLfuuTH2sf73JBAw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -2002,6 +2118,12 @@ packages: '@swc/core-win32-x64-msvc': 1.3.78 dev: true + /@swc/helpers@0.5.1: + resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==} + dependencies: + tslib: 2.6.2 + dev: false + /@tanstack/query-core@4.33.0: resolution: {integrity: sha512-qYu73ptvnzRh6se2nyBIDHGBQvPY1XXl3yR769B7B6mIDD7s+EZhdlWHQ67JI6UOTFRaI7wupnTnwJ3gE0Mr/g==} dev: false @@ -2167,7 +2289,6 @@ packages: /@types/prop-types@15.7.5: resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} - dev: false /@types/pug@2.0.6: resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==} @@ -2177,7 +2298,6 @@ packages: resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==} dependencies: '@types/react': 18.2.20 - dev: false /@types/react@18.2.20: resolution: {integrity: sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw==} @@ -2185,7 +2305,6 @@ packages: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.3 csstype: 3.1.2 - dev: false /@types/resolve@1.20.2: resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -2194,12 +2313,11 @@ packages: /@types/sax@1.2.4: resolution: {integrity: sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==} dependencies: - '@types/node': 20.5.0 + '@types/node': 20.5.1 dev: true /@types/scheduler@0.16.3: resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} - dev: false /@types/semver@7.5.0: resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} @@ -2822,7 +2940,7 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001521 + caniuse-lite: 1.0.30001522 electron-to-chromium: 1.4.494 node-releases: 2.0.13 update-browserslist-db: 1.0.11(browserslist@4.21.10) @@ -2905,8 +3023,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - /caniuse-lite@1.0.30001521: - resolution: {integrity: sha512-fnx1grfpEOvDGH+V17eccmNjucGUnCbP6KL+l5KqBIerp26WK/+RQ7CIDE37KGJjaPyqWXXlFUyKiWmvdNNKmQ==} + /caniuse-lite@1.0.30001522: + resolution: {integrity: sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==} dev: false /ccount@2.0.1: @@ -3008,6 +3126,10 @@ packages: engines: {node: '>=6'} dev: false + /client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + dev: false + /cliui@6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} dependencies: @@ -3176,7 +3298,6 @@ packages: /csstype@3.1.2: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} - dev: false /csv-generate@3.4.3: resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} @@ -4136,6 +4257,10 @@ packages: is-glob: 4.0.3 dev: true + /glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + dev: false + /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: @@ -5504,6 +5629,46 @@ packages: typescript: 5.1.6 dev: false + /next@13.4.19(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-HuPSzzAbJ1T4BD8e0bs6B9C1kWQ6gv8ykZoRWs5AQoiIuqbGHHdQO7Ljuvg05Q0Z24E2ABozHe6FxDvI6HfyAw==} + engines: {node: '>=16.8.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + sass: + optional: true + dependencies: + '@next/env': 13.4.19 + '@swc/helpers': 0.5.1 + busboy: 1.6.0 + caniuse-lite: 1.0.30001522 + postcss: 8.4.14 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + styled-jsx: 5.1.1(react@18.2.0) + watchpack: 2.4.0 + zod: 3.21.4 + optionalDependencies: + '@next/swc-darwin-arm64': 13.4.19 + '@next/swc-darwin-x64': 13.4.19 + '@next/swc-linux-arm64-gnu': 13.4.19 + '@next/swc-linux-arm64-musl': 13.4.19 + '@next/swc-linux-x64-gnu': 13.4.19 + '@next/swc-linux-x64-musl': 13.4.19 + '@next/swc-win32-arm64-msvc': 13.4.19 + '@next/swc-win32-ia32-msvc': 13.4.19 + '@next/swc-win32-x64-msvc': 13.4.19 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + dev: false + /nice-napi@1.0.2: resolution: {integrity: sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==} os: ['!win32'] @@ -5937,6 +6102,15 @@ packages: postcss: 8.4.28 dev: true + /postcss@8.4.14: + resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: false + /postcss@8.4.28: resolution: {integrity: sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==} engines: {node: ^10 || ^12 || >=14} @@ -6791,6 +6965,23 @@ packages: acorn: 8.10.0 dev: true + /styled-jsx@5.1.1(react@18.2.0): + resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + dependencies: + client-only: 0.0.1 + react: 18.2.0 + dev: false + /suf-log@2.5.3: resolution: {integrity: sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==} dependencies: @@ -7327,6 +7518,28 @@ packages: vfile-message: 3.1.4 dev: false + /vite-node@0.34.1(@types/node@20.5.0): + resolution: {integrity: sha512-odAZAL9xFMuAg8aWd7nSPT+hU8u2r9gU3LRm9QKjxBEF2rRdWpMuqkrkjvyVQEdNFiBctqr2Gg4uJYizm5Le6w==} + engines: {node: '>=v14.18.0'} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4(supports-color@9.4.0) + mlly: 1.4.0 + pathe: 1.1.1 + picocolors: 1.0.0 + vite: 4.4.9(@types/node@20.5.0)(sass@1.65.1) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + /vite-node@0.34.1(@types/node@20.5.0)(supports-color@9.4.0): resolution: {integrity: sha512-odAZAL9xFMuAg8aWd7nSPT+hU8u2r9gU3LRm9QKjxBEF2rRdWpMuqkrkjvyVQEdNFiBctqr2Gg4uJYizm5Le6w==} engines: {node: '>=v14.18.0'} @@ -7349,6 +7562,28 @@ packages: - terser dev: true + /vite-node@0.34.1(@types/node@20.5.1)(supports-color@9.4.0): + resolution: {integrity: sha512-odAZAL9xFMuAg8aWd7nSPT+hU8u2r9gU3LRm9QKjxBEF2rRdWpMuqkrkjvyVQEdNFiBctqr2Gg4uJYizm5Le6w==} + engines: {node: '>=v14.18.0'} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4(supports-color@9.4.0) + mlly: 1.4.0 + pathe: 1.1.1 + picocolors: 1.0.0 + vite: 4.4.9(@types/node@20.5.1) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + /vite-node@0.34.2(@types/node@20.5.1): resolution: {integrity: sha512-JtW249Zm3FB+F7pQfH56uWSdlltCo1IOkZW5oHBzeQo0iX4jtC7o1t9aILMGd9kVekXBP2lfJBEQt9rBh07ebA==} engines: {node: '>=v14.18.0'} @@ -7476,12 +7711,12 @@ packages: vitest: '>=0.16.0' dependencies: cross-fetch: 3.1.8 - vitest: 0.34.1(supports-color@9.4.0) + vitest: 0.34.1 transitivePeerDependencies: - encoding dev: true - /vitest@0.34.1(supports-color@9.4.0): + /vitest@0.34.1: resolution: {integrity: sha512-G1PzuBEq9A75XSU88yO5G4vPT20UovbC/2osB2KEuV/FisSIIsw7m5y2xMdB7RsAGHAfg2lPmp2qKr3KWliVlQ==} engines: {node: '>=v14.18.0'} hasBin: true @@ -7534,7 +7769,72 @@ packages: tinybench: 2.5.0 tinypool: 0.7.0 vite: 4.4.9(@types/node@20.5.0)(sass@1.65.1) - vite-node: 0.34.1(@types/node@20.5.0)(supports-color@9.4.0) + vite-node: 0.34.1(@types/node@20.5.0) + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vitest@0.34.1(supports-color@9.4.0): + resolution: {integrity: sha512-G1PzuBEq9A75XSU88yO5G4vPT20UovbC/2osB2KEuV/FisSIIsw7m5y2xMdB7RsAGHAfg2lPmp2qKr3KWliVlQ==} + engines: {node: '>=v14.18.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' + playwright: '*' + safaridriver: '*' + webdriverio: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + dependencies: + '@types/chai': 4.3.5 + '@types/chai-subset': 1.3.3 + '@types/node': 20.5.1 + '@vitest/expect': 0.34.1 + '@vitest/runner': 0.34.1 + '@vitest/snapshot': 0.34.1 + '@vitest/spy': 0.34.1 + '@vitest/utils': 0.34.1 + acorn: 8.10.0 + acorn-walk: 8.2.0 + cac: 6.7.14 + chai: 4.3.7 + debug: 4.3.4(supports-color@9.4.0) + local-pkg: 0.4.3 + magic-string: 0.30.2 + pathe: 1.1.1 + picocolors: 1.0.0 + std-env: 3.3.3 + strip-literal: 1.3.0 + tinybench: 2.5.0 + tinypool: 0.7.0 + vite: 4.4.9(@types/node@20.5.1) + vite-node: 0.34.1(@types/node@20.5.1)(supports-color@9.4.0) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -7672,6 +7972,14 @@ packages: resolution: {integrity: sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==} dev: false + /watchpack@2.4.0: + resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + engines: {node: '>=10.13.0'} + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + dev: false + /wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7868,6 +8176,10 @@ packages: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} + /zod@3.21.4: + resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} + dev: false + /zod@3.22.1: resolution: {integrity: sha512-+qUhAMl414+Elh+fRNtpU+byrwjDFOS1N7NioLY+tSlcADTx4TkCUua/hxJvxwDXcV4397/nZ420jy4n4+3WUg==}