fork of hey-api/openapi-ts because I need some additional things

chore: add working local example with axios client

Lubos 776f5243 d4b6dbb5

+2172 -101
+24
examples/openapi-ts-axios/.gitignore
··· 1 + # Logs 2 + logs 3 + *.log 4 + npm-debug.log* 5 + yarn-debug.log* 6 + yarn-error.log* 7 + pnpm-debug.log* 8 + lerna-debug.log* 9 + 10 + node_modules 11 + dist 12 + dist-ssr 13 + *.local 14 + 15 + # Editor directories and files 16 + .vscode/* 17 + !.vscode/extensions.json 18 + .idea 19 + .DS_Store 20 + *.suo 21 + *.ntvs* 22 + *.njsproj 23 + *.sln 24 + *.sw?
+13
examples/openapi-ts-axios/index.html
··· 1 + <!doctype html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="UTF-8" /> 5 + <link rel="icon" type="image/svg+xml" href="/vite.svg" /> 6 + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 7 + <title>Hey API + Axios Demo</title> 8 + </head> 9 + <body> 10 + <div id="root"></div> 11 + <script type="module" src="/src/main.tsx"></script> 12 + </body> 13 + </html>
+10
examples/openapi-ts-axios/openapi-ts.config.ts
··· 1 + import { defineConfig } from '@hey-api/openapi-ts'; 2 + 3 + export default defineConfig({ 4 + base: 'https://petstore3.swagger.io/api/v3', 5 + format: 'prettier', 6 + input: 7 + 'https://raw.githubusercontent.com/swagger-api/swagger-petstore/master/src/main/resources/openapi.yaml', 8 + lint: 'eslint', 9 + output: './src/client', 10 + });
+33
examples/openapi-ts-axios/package.json
··· 1 + { 2 + "name": "@examples/openapi-ts-axios", 3 + "private": true, 4 + "version": "0.0.0", 5 + "type": "module", 6 + "scripts": { 7 + "build": "tsc && vite build", 8 + "dev": "vite", 9 + "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", 10 + "openapi-ts": "openapi-ts", 11 + "preview": "vite preview" 12 + }, 13 + "dependencies": { 14 + "@hey-api/client-axios": "workspace:*", 15 + "axios": "1.6.8", 16 + "react": "18.2.0", 17 + "react-dom": "18.2.0" 18 + }, 19 + "devDependencies": { 20 + "@hey-api/openapi-ts": "workspace:*", 21 + "@types/react": "18.2.79", 22 + "@types/react-dom": "18.2.25", 23 + "@typescript-eslint/eslint-plugin": "7.7.1", 24 + "@typescript-eslint/parser": "7.7.1", 25 + "@vitejs/plugin-react": "4.2.1", 26 + "eslint": "8.57.0", 27 + "eslint-plugin-react-hooks": "4.6.0", 28 + "eslint-plugin-react-refresh": "0.4.6", 29 + "prettier": "3.2.5", 30 + "typescript": "5.4.5", 31 + "vite": "5.2.10" 32 + } 33 + }
+102
examples/openapi-ts-axios/src/App.css
··· 1 + :root { 2 + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; 3 + line-height: 1.5; 4 + font-weight: 400; 5 + 6 + color-scheme: light dark; 7 + color: rgba(255, 255, 255, 0.87); 8 + background-color: #242424; 9 + 10 + font-synthesis: none; 11 + text-rendering: optimizeLegibility; 12 + -webkit-font-smoothing: antialiased; 13 + -moz-osx-font-smoothing: grayscale; 14 + } 15 + 16 + .flex { 17 + align-items: center; 18 + display: flex; 19 + padding: 1em 0; 20 + } 21 + 22 + .pet-name { 23 + padding: 0 1em; 24 + } 25 + 26 + .button { 27 + border: 1px solid #444; 28 + } 29 + 30 + #root { 31 + max-width: 1280px; 32 + margin: 0 auto; 33 + padding: 0.5rem 2rem; 34 + } 35 + 36 + body { 37 + margin: 0; 38 + display: flex; 39 + place-items: center; 40 + min-width: 320px; 41 + min-height: 100vh; 42 + } 43 + 44 + .h1 { 45 + font-size: 1.2em; 46 + line-height: 1.1; 47 + } 48 + 49 + .logo { 50 + height: 4em; 51 + will-change: filter; 52 + transition: filter 300ms; 53 + } 54 + .logo:hover { 55 + filter: drop-shadow(0 0 2em #646cffaa); 56 + } 57 + .logo.react:hover { 58 + filter: drop-shadow(0 0 2em #61dafbaa); 59 + } 60 + 61 + @keyframes logo-spin { 62 + from { 63 + transform: rotate(0deg); 64 + } 65 + to { 66 + transform: rotate(360deg); 67 + } 68 + } 69 + 70 + @media (prefers-reduced-motion: no-preference) { 71 + a:nth-of-type(2) .logo { 72 + animation: logo-spin infinite 20s linear; 73 + } 74 + } 75 + 76 + .card { 77 + padding: 2em; 78 + } 79 + 80 + .container { 81 + align-items: center; 82 + display: flex; 83 + grid-gap: 1em; 84 + text-align: center; 85 + } 86 + 87 + .openapi-ts { 88 + color: #444; 89 + } 90 + 91 + @media (prefers-color-scheme: light) { 92 + :root { 93 + color: #213547; 94 + background-color: #ffffff; 95 + } 96 + a:hover { 97 + color: #747bff; 98 + } 99 + button { 100 + background-color: #f9f9f9; 101 + } 102 + }
+56
examples/openapi-ts-axios/src/App.tsx
··· 1 + import './App.css'; 2 + 3 + import { OpenAPI } from '@hey-api/client-axios'; 4 + import { useState } from 'react'; 5 + 6 + import { $Pet } from './client/schemas.gen'; 7 + import { PetService } from './client/services.gen'; 8 + 9 + OpenAPI.BASE = 'https://petstore3.swagger.io/api/v3'; 10 + 11 + // OpenAPI.interceptors.response.use((response) => { 12 + // if (response.status === 200) { 13 + // console.log(`request to ${response.url} was successful`); 14 + // } 15 + // return response; 16 + // }); 17 + 18 + function App() { 19 + const [pet, setPet] = 20 + useState<Awaited<ReturnType<typeof PetService.getPetById>>>(); 21 + 22 + const onFetchPet = async () => { 23 + const pet = await PetService.getPetById({ 24 + // random id 1-10 25 + petId: Math.floor(Math.random() * (10 - 1 + 1) + 1), 26 + }); 27 + setPet(pet); 28 + }; 29 + 30 + return ( 31 + <> 32 + <div className="container"> 33 + <a href="https://heyapi.vercel.app/" target="_blank"> 34 + <img 35 + src="https://heyapi.vercel.app/logo.png" 36 + className="logo vanilla" 37 + alt="Hey API logo" 38 + /> 39 + </a> 40 + <h1 className="h1">@hey-api/openapi-ts example</h1> 41 + </div> 42 + <div className="flex"> 43 + <button className="button" onClick={onFetchPet}> 44 + Fetch random pet 45 + </button> 46 + <span className="pet-name">Fetched pet's name: {pet?.name}</span> 47 + </div> 48 + <div className="openapi-ts"> 49 + <code>{"import { $Pet } from './client/schemas.gen'"}</code> 50 + <pre>{JSON.stringify($Pet, null, 2)}</pre> 51 + </div> 52 + </> 53 + ); 54 + } 55 + 56 + export default App;
+4
examples/openapi-ts-axios/src/client/index.ts
··· 1 + // This file is auto-generated by @hey-api/openapi-ts 2 + export * from './schemas.gen'; 3 + export * from './services.gen'; 4 + export * from './types.gen';
+244
examples/openapi-ts-axios/src/client/schemas.gen.ts
··· 1 + // This file is auto-generated by @hey-api/openapi-ts 2 + 3 + export const $Order = { 4 + properties: { 5 + complete: { 6 + type: 'boolean', 7 + }, 8 + id: { 9 + example: 10, 10 + format: 'int64', 11 + type: 'integer', 12 + }, 13 + petId: { 14 + example: 198772, 15 + format: 'int64', 16 + type: 'integer', 17 + }, 18 + quantity: { 19 + example: 7, 20 + format: 'int32', 21 + type: 'integer', 22 + }, 23 + shipDate: { 24 + format: 'date-time', 25 + type: 'string', 26 + }, 27 + status: { 28 + description: 'Order Status', 29 + enum: ['placed', 'approved', 'delivered'], 30 + example: 'approved', 31 + type: 'string', 32 + }, 33 + }, 34 + type: 'object', 35 + 'x-swagger-router-model': 'io.swagger.petstore.model.Order', 36 + xml: { 37 + name: 'order', 38 + }, 39 + } as const; 40 + 41 + export const $Customer = { 42 + properties: { 43 + address: { 44 + items: { 45 + $ref: '#/components/schemas/Address', 46 + }, 47 + type: 'array', 48 + xml: { 49 + name: 'addresses', 50 + wrapped: true, 51 + }, 52 + }, 53 + id: { 54 + example: 100000, 55 + format: 'int64', 56 + type: 'integer', 57 + }, 58 + username: { 59 + example: 'fehguy', 60 + type: 'string', 61 + }, 62 + }, 63 + type: 'object', 64 + xml: { 65 + name: 'customer', 66 + }, 67 + } as const; 68 + 69 + export const $Address = { 70 + properties: { 71 + city: { 72 + example: 'Palo Alto', 73 + type: 'string', 74 + }, 75 + state: { 76 + example: 'CA', 77 + type: 'string', 78 + }, 79 + street: { 80 + example: '437 Lytton', 81 + type: 'string', 82 + }, 83 + zip: { 84 + example: 94301, 85 + type: 'string', 86 + }, 87 + }, 88 + type: 'object', 89 + xml: { 90 + name: 'address', 91 + }, 92 + } as const; 93 + 94 + export const $Category = { 95 + properties: { 96 + id: { 97 + example: 1, 98 + format: 'int64', 99 + type: 'integer', 100 + }, 101 + name: { 102 + example: 'Dogs', 103 + type: 'string', 104 + }, 105 + }, 106 + type: 'object', 107 + 'x-swagger-router-model': 'io.swagger.petstore.model.Category', 108 + xml: { 109 + name: 'category', 110 + }, 111 + } as const; 112 + 113 + export const $User = { 114 + properties: { 115 + email: { 116 + example: 'john@email.com', 117 + type: 'string', 118 + }, 119 + firstName: { 120 + example: 'John', 121 + type: 'string', 122 + }, 123 + id: { 124 + example: 10, 125 + format: 'int64', 126 + type: 'integer', 127 + }, 128 + lastName: { 129 + example: 'James', 130 + type: 'string', 131 + }, 132 + password: { 133 + example: 12345, 134 + type: 'string', 135 + }, 136 + phone: { 137 + example: 12345, 138 + type: 'string', 139 + }, 140 + userStatus: { 141 + description: 'User Status', 142 + example: 1, 143 + format: 'int32', 144 + type: 'integer', 145 + }, 146 + username: { 147 + example: 'theUser', 148 + type: 'string', 149 + }, 150 + }, 151 + type: 'object', 152 + 'x-swagger-router-model': 'io.swagger.petstore.model.User', 153 + xml: { 154 + name: 'user', 155 + }, 156 + } as const; 157 + 158 + export const $Tag = { 159 + properties: { 160 + id: { 161 + format: 'int64', 162 + type: 'integer', 163 + }, 164 + name: { 165 + type: 'string', 166 + }, 167 + }, 168 + type: 'object', 169 + 'x-swagger-router-model': 'io.swagger.petstore.model.Tag', 170 + xml: { 171 + name: 'tag', 172 + }, 173 + } as const; 174 + 175 + export const $Pet = { 176 + properties: { 177 + category: { 178 + $ref: '#/components/schemas/Category', 179 + }, 180 + id: { 181 + example: 10, 182 + format: 'int64', 183 + type: 'integer', 184 + }, 185 + name: { 186 + example: 'doggie', 187 + type: 'string', 188 + }, 189 + photoUrls: { 190 + items: { 191 + type: 'string', 192 + xml: { 193 + name: 'photoUrl', 194 + }, 195 + }, 196 + type: 'array', 197 + xml: { 198 + wrapped: true, 199 + }, 200 + }, 201 + status: { 202 + description: 'pet status in the store', 203 + enum: ['available', 'pending', 'sold'], 204 + type: 'string', 205 + }, 206 + tags: { 207 + items: { 208 + $ref: '#/components/schemas/Tag', 209 + xml: { 210 + name: 'tag', 211 + }, 212 + }, 213 + type: 'array', 214 + xml: { 215 + wrapped: true, 216 + }, 217 + }, 218 + }, 219 + required: ['name', 'photoUrls'], 220 + type: 'object', 221 + 'x-swagger-router-model': 'io.swagger.petstore.model.Pet', 222 + xml: { 223 + name: 'pet', 224 + }, 225 + } as const; 226 + 227 + export const $ApiResponse = { 228 + properties: { 229 + code: { 230 + format: 'int32', 231 + type: 'integer', 232 + }, 233 + message: { 234 + type: 'string', 235 + }, 236 + type: { 237 + type: 'string', 238 + }, 239 + }, 240 + type: 'object', 241 + xml: { 242 + name: '##default', 243 + }, 244 + } as const;
+444
examples/openapi-ts-axios/src/client/services.gen.ts
··· 1 + // This file is auto-generated by @hey-api/openapi-ts 2 + 3 + import type { CancelablePromise } from '@hey-api/client-axios'; 4 + import { OpenAPI } from '@hey-api/client-axios'; 5 + import { request as __request } from '@hey-api/client-axios'; 6 + 7 + import type { $OpenApiTs } from './types.gen'; 8 + 9 + export class PetService { 10 + /** 11 + * Add a new pet to the store 12 + * Add a new pet to the store 13 + * @param data The data for the request. 14 + * @param data.requestBody Create a new pet in the store 15 + * @returns Pet Successful operation 16 + * @throws ApiError 17 + */ 18 + public static addPet( 19 + data: $OpenApiTs['/pet']['post']['req'], 20 + ): CancelablePromise<$OpenApiTs['/pet']['post']['res'][200]> { 21 + return __request(OpenAPI, { 22 + body: data.requestBody, 23 + errors: { 24 + 405: 'Invalid input', 25 + }, 26 + mediaType: 'application/json', 27 + method: 'POST', 28 + url: '/pet', 29 + }); 30 + } 31 + 32 + /** 33 + * Update an existing pet 34 + * Update an existing pet by Id 35 + * @param data The data for the request. 36 + * @param data.requestBody Update an existent pet in the store 37 + * @returns Pet Successful operation 38 + * @throws ApiError 39 + */ 40 + public static updatePet( 41 + data: $OpenApiTs['/pet']['put']['req'], 42 + ): CancelablePromise<$OpenApiTs['/pet']['put']['res'][200]> { 43 + return __request(OpenAPI, { 44 + body: data.requestBody, 45 + errors: { 46 + 400: 'Invalid ID supplied', 47 + 404: 'Pet not found', 48 + 405: 'Validation exception', 49 + }, 50 + mediaType: 'application/json', 51 + method: 'PUT', 52 + url: '/pet', 53 + }); 54 + } 55 + 56 + /** 57 + * Finds Pets by status 58 + * Multiple status values can be provided with comma separated strings 59 + * @param data The data for the request. 60 + * @param data.status Status values that need to be considered for filter 61 + * @returns Pet successful operation 62 + * @throws ApiError 63 + */ 64 + public static findPetsByStatus( 65 + data: $OpenApiTs['/pet/findByStatus']['get']['req'] = {}, 66 + ): CancelablePromise<$OpenApiTs['/pet/findByStatus']['get']['res'][200]> { 67 + return __request(OpenAPI, { 68 + errors: { 69 + 400: 'Invalid status value', 70 + }, 71 + method: 'GET', 72 + query: { 73 + status: data.status, 74 + }, 75 + url: '/pet/findByStatus', 76 + }); 77 + } 78 + 79 + /** 80 + * Finds Pets by tags 81 + * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. 82 + * @param data The data for the request. 83 + * @param data.tags Tags to filter by 84 + * @returns Pet successful operation 85 + * @throws ApiError 86 + */ 87 + public static findPetsByTags( 88 + data: $OpenApiTs['/pet/findByTags']['get']['req'] = {}, 89 + ): CancelablePromise<$OpenApiTs['/pet/findByTags']['get']['res'][200]> { 90 + return __request(OpenAPI, { 91 + errors: { 92 + 400: 'Invalid tag value', 93 + }, 94 + method: 'GET', 95 + query: { 96 + tags: data.tags, 97 + }, 98 + url: '/pet/findByTags', 99 + }); 100 + } 101 + 102 + /** 103 + * Find pet by ID 104 + * Returns a single pet 105 + * @param data The data for the request. 106 + * @param data.petId ID of pet to return 107 + * @returns Pet successful operation 108 + * @throws ApiError 109 + */ 110 + public static getPetById( 111 + data: $OpenApiTs['/pet/{petId}']['get']['req'], 112 + ): CancelablePromise<$OpenApiTs['/pet/{petId}']['get']['res'][200]> { 113 + return __request(OpenAPI, { 114 + errors: { 115 + 400: 'Invalid ID supplied', 116 + 404: 'Pet not found', 117 + }, 118 + method: 'GET', 119 + path: { 120 + petId: data.petId, 121 + }, 122 + url: '/pet/{petId}', 123 + }); 124 + } 125 + 126 + /** 127 + * Updates a pet in the store with form data 128 + * @param data The data for the request. 129 + * @param data.petId ID of pet that needs to be updated 130 + * @param data.name Name of pet that needs to be updated 131 + * @param data.status Status of pet that needs to be updated 132 + * @throws ApiError 133 + */ 134 + public static updatePetWithForm( 135 + data: $OpenApiTs['/pet/{petId}']['post']['req'], 136 + ): CancelablePromise<void> { 137 + return __request(OpenAPI, { 138 + errors: { 139 + 405: 'Invalid input', 140 + }, 141 + method: 'POST', 142 + path: { 143 + petId: data.petId, 144 + }, 145 + query: { 146 + name: data.name, 147 + status: data.status, 148 + }, 149 + url: '/pet/{petId}', 150 + }); 151 + } 152 + 153 + /** 154 + * Deletes a pet 155 + * @param data The data for the request. 156 + * @param data.petId Pet id to delete 157 + * @param data.apiKey 158 + * @throws ApiError 159 + */ 160 + public static deletePet( 161 + data: $OpenApiTs['/pet/{petId}']['delete']['req'], 162 + ): CancelablePromise<void> { 163 + return __request(OpenAPI, { 164 + errors: { 165 + 400: 'Invalid pet value', 166 + }, 167 + headers: { 168 + api_key: data.apiKey, 169 + }, 170 + method: 'DELETE', 171 + path: { 172 + petId: data.petId, 173 + }, 174 + url: '/pet/{petId}', 175 + }); 176 + } 177 + 178 + /** 179 + * uploads an image 180 + * @param data The data for the request. 181 + * @param data.petId ID of pet to update 182 + * @param data.additionalMetadata Additional Metadata 183 + * @param data.requestBody 184 + * @returns ApiResponse successful operation 185 + * @throws ApiError 186 + */ 187 + public static uploadFile( 188 + data: $OpenApiTs['/pet/{petId}/uploadImage']['post']['req'], 189 + ): CancelablePromise< 190 + $OpenApiTs['/pet/{petId}/uploadImage']['post']['res'][200] 191 + > { 192 + return __request(OpenAPI, { 193 + body: data.requestBody, 194 + mediaType: 'application/octet-stream', 195 + method: 'POST', 196 + path: { 197 + petId: data.petId, 198 + }, 199 + query: { 200 + additionalMetadata: data.additionalMetadata, 201 + }, 202 + url: '/pet/{petId}/uploadImage', 203 + }); 204 + } 205 + } 206 + 207 + export class StoreService { 208 + /** 209 + * Returns pet inventories by status 210 + * Returns a map of status codes to quantities 211 + * @returns number successful operation 212 + * @throws ApiError 213 + */ 214 + public static getInventory(): CancelablePromise< 215 + $OpenApiTs['/store/inventory']['get']['res'][200] 216 + > { 217 + return __request(OpenAPI, { 218 + method: 'GET', 219 + url: '/store/inventory', 220 + }); 221 + } 222 + 223 + /** 224 + * Place an order for a pet 225 + * Place a new order in the store 226 + * @param data The data for the request. 227 + * @param data.requestBody 228 + * @returns Order successful operation 229 + * @throws ApiError 230 + */ 231 + public static placeOrder( 232 + data: $OpenApiTs['/store/order']['post']['req'] = {}, 233 + ): CancelablePromise<$OpenApiTs['/store/order']['post']['res'][200]> { 234 + return __request(OpenAPI, { 235 + body: data.requestBody, 236 + errors: { 237 + 405: 'Invalid input', 238 + }, 239 + mediaType: 'application/json', 240 + method: 'POST', 241 + url: '/store/order', 242 + }); 243 + } 244 + 245 + /** 246 + * Find purchase order by ID 247 + * For valid response try integer IDs with value <= 5 or > 10. Other values will generate exceptions. 248 + * @param data The data for the request. 249 + * @param data.orderId ID of order that needs to be fetched 250 + * @returns Order successful operation 251 + * @throws ApiError 252 + */ 253 + public static getOrderById( 254 + data: $OpenApiTs['/store/order/{orderId}']['get']['req'], 255 + ): CancelablePromise< 256 + $OpenApiTs['/store/order/{orderId}']['get']['res'][200] 257 + > { 258 + return __request(OpenAPI, { 259 + errors: { 260 + 400: 'Invalid ID supplied', 261 + 404: 'Order not found', 262 + }, 263 + method: 'GET', 264 + path: { 265 + orderId: data.orderId, 266 + }, 267 + url: '/store/order/{orderId}', 268 + }); 269 + } 270 + 271 + /** 272 + * Delete purchase order by ID 273 + * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors 274 + * @param data The data for the request. 275 + * @param data.orderId ID of the order that needs to be deleted 276 + * @throws ApiError 277 + */ 278 + public static deleteOrder( 279 + data: $OpenApiTs['/store/order/{orderId}']['delete']['req'], 280 + ): CancelablePromise<void> { 281 + return __request(OpenAPI, { 282 + errors: { 283 + 400: 'Invalid ID supplied', 284 + 404: 'Order not found', 285 + }, 286 + method: 'DELETE', 287 + path: { 288 + orderId: data.orderId, 289 + }, 290 + url: '/store/order/{orderId}', 291 + }); 292 + } 293 + } 294 + 295 + export class UserService { 296 + /** 297 + * Create user 298 + * This can only be done by the logged in user. 299 + * @param data The data for the request. 300 + * @param data.requestBody Created user object 301 + * @returns User successful operation 302 + * @throws ApiError 303 + */ 304 + public static createUser( 305 + data: $OpenApiTs['/user']['post']['req'] = {}, 306 + ): CancelablePromise<$OpenApiTs['/user']['post']['res'][200]> { 307 + return __request(OpenAPI, { 308 + body: data.requestBody, 309 + mediaType: 'application/json', 310 + method: 'POST', 311 + url: '/user', 312 + }); 313 + } 314 + 315 + /** 316 + * Creates list of users with given input array 317 + * Creates list of users with given input array 318 + * @param data The data for the request. 319 + * @param data.requestBody 320 + * @returns User Successful operation 321 + * @returns unknown successful operation 322 + * @throws ApiError 323 + */ 324 + public static createUsersWithListInput( 325 + data: $OpenApiTs['/user/createWithList']['post']['req'] = {}, 326 + ): CancelablePromise< 327 + | $OpenApiTs['/user/createWithList']['post']['res'][200] 328 + | $OpenApiTs['/user/createWithList']['post']['res'][200] 329 + > { 330 + return __request(OpenAPI, { 331 + body: data.requestBody, 332 + mediaType: 'application/json', 333 + method: 'POST', 334 + url: '/user/createWithList', 335 + }); 336 + } 337 + 338 + /** 339 + * Logs user into the system 340 + * @param data The data for the request. 341 + * @param data.username The user name for login 342 + * @param data.password The password for login in clear text 343 + * @returns string successful operation 344 + * @throws ApiError 345 + */ 346 + public static loginUser( 347 + data: $OpenApiTs['/user/login']['get']['req'] = {}, 348 + ): CancelablePromise<$OpenApiTs['/user/login']['get']['res'][200]> { 349 + return __request(OpenAPI, { 350 + errors: { 351 + 400: 'Invalid username/password supplied', 352 + }, 353 + method: 'GET', 354 + query: { 355 + password: data.password, 356 + username: data.username, 357 + }, 358 + url: '/user/login', 359 + }); 360 + } 361 + 362 + /** 363 + * Logs out current logged in user session 364 + * @returns unknown successful operation 365 + * @throws ApiError 366 + */ 367 + public static logoutUser(): CancelablePromise< 368 + $OpenApiTs['/user/logout']['get']['res'][200] 369 + > { 370 + return __request(OpenAPI, { 371 + method: 'GET', 372 + url: '/user/logout', 373 + }); 374 + } 375 + 376 + /** 377 + * Get user by user name 378 + * @param data The data for the request. 379 + * @param data.username The name that needs to be fetched. Use user1 for testing. 380 + * @returns User successful operation 381 + * @throws ApiError 382 + */ 383 + public static getUserByName( 384 + data: $OpenApiTs['/user/{username}']['get']['req'], 385 + ): CancelablePromise<$OpenApiTs['/user/{username}']['get']['res'][200]> { 386 + return __request(OpenAPI, { 387 + errors: { 388 + 400: 'Invalid username supplied', 389 + 404: 'User not found', 390 + }, 391 + method: 'GET', 392 + path: { 393 + username: data.username, 394 + }, 395 + url: '/user/{username}', 396 + }); 397 + } 398 + 399 + /** 400 + * Update user 401 + * This can only be done by the logged in user. 402 + * @param data The data for the request. 403 + * @param data.username name that needs to be updated 404 + * @param data.requestBody Update an existent user in the store 405 + * @returns unknown successful operation 406 + * @throws ApiError 407 + */ 408 + public static updateUser( 409 + data: $OpenApiTs['/user/{username}']['put']['req'], 410 + ): CancelablePromise<$OpenApiTs['/user/{username}']['put']['res'][200]> { 411 + return __request(OpenAPI, { 412 + body: data.requestBody, 413 + mediaType: 'application/json', 414 + method: 'PUT', 415 + path: { 416 + username: data.username, 417 + }, 418 + url: '/user/{username}', 419 + }); 420 + } 421 + 422 + /** 423 + * Delete user 424 + * This can only be done by the logged in user. 425 + * @param data The data for the request. 426 + * @param data.username The name that needs to be deleted 427 + * @throws ApiError 428 + */ 429 + public static deleteUser( 430 + data: $OpenApiTs['/user/{username}']['delete']['req'], 431 + ): CancelablePromise<void> { 432 + return __request(OpenAPI, { 433 + errors: { 434 + 400: 'Invalid username supplied', 435 + 404: 'User not found', 436 + }, 437 + method: 'DELETE', 438 + path: { 439 + username: data.username, 440 + }, 441 + url: '/user/{username}', 442 + }); 443 + } 444 + }
+433
examples/openapi-ts-axios/src/client/types.gen.ts
··· 1 + // This file is auto-generated by @hey-api/openapi-ts 2 + 3 + export type Order = { 4 + id?: number; 5 + petId?: number; 6 + quantity?: number; 7 + shipDate?: string; 8 + /** 9 + * Order Status 10 + */ 11 + status?: 'placed' | 'approved' | 'delivered'; 12 + complete?: boolean; 13 + }; 14 + 15 + export type Customer = { 16 + id?: number; 17 + username?: string; 18 + address?: Array<Address>; 19 + }; 20 + 21 + export type Address = { 22 + street?: string; 23 + city?: string; 24 + state?: string; 25 + zip?: string; 26 + }; 27 + 28 + export type Category = { 29 + id?: number; 30 + name?: string; 31 + }; 32 + 33 + export type User = { 34 + id?: number; 35 + username?: string; 36 + firstName?: string; 37 + lastName?: string; 38 + email?: string; 39 + password?: string; 40 + phone?: string; 41 + /** 42 + * User Status 43 + */ 44 + userStatus?: number; 45 + }; 46 + 47 + export type Tag = { 48 + id?: number; 49 + name?: string; 50 + }; 51 + 52 + export type Pet = { 53 + id?: number; 54 + name: string; 55 + category?: Category; 56 + photoUrls: Array<string>; 57 + tags?: Array<Tag>; 58 + /** 59 + * pet status in the store 60 + */ 61 + status?: 'available' | 'pending' | 'sold'; 62 + }; 63 + 64 + export type ApiResponse = { 65 + code?: number; 66 + type?: string; 67 + message?: string; 68 + }; 69 + 70 + export type $OpenApiTs = { 71 + '/pet': { 72 + post: { 73 + req: { 74 + /** 75 + * Create a new pet in the store 76 + */ 77 + requestBody: Pet; 78 + }; 79 + res: { 80 + /** 81 + * Successful operation 82 + */ 83 + 200: Pet; 84 + /** 85 + * Invalid input 86 + */ 87 + 405: unknown; 88 + }; 89 + }; 90 + put: { 91 + req: { 92 + /** 93 + * Update an existent pet in the store 94 + */ 95 + requestBody: Pet; 96 + }; 97 + res: { 98 + /** 99 + * Successful operation 100 + */ 101 + 200: Pet; 102 + /** 103 + * Invalid ID supplied 104 + */ 105 + 400: unknown; 106 + /** 107 + * Pet not found 108 + */ 109 + 404: unknown; 110 + /** 111 + * Validation exception 112 + */ 113 + 405: unknown; 114 + }; 115 + }; 116 + }; 117 + '/pet/findByStatus': { 118 + get: { 119 + req: { 120 + /** 121 + * Status values that need to be considered for filter 122 + */ 123 + status?: 'available' | 'pending' | 'sold'; 124 + }; 125 + res: { 126 + /** 127 + * successful operation 128 + */ 129 + 200: Array<Pet>; 130 + /** 131 + * Invalid status value 132 + */ 133 + 400: unknown; 134 + }; 135 + }; 136 + }; 137 + '/pet/findByTags': { 138 + get: { 139 + req: { 140 + /** 141 + * Tags to filter by 142 + */ 143 + tags?: Array<string>; 144 + }; 145 + res: { 146 + /** 147 + * successful operation 148 + */ 149 + 200: Array<Pet>; 150 + /** 151 + * Invalid tag value 152 + */ 153 + 400: unknown; 154 + }; 155 + }; 156 + }; 157 + '/pet/{petId}': { 158 + get: { 159 + req: { 160 + /** 161 + * ID of pet to return 162 + */ 163 + petId: number; 164 + }; 165 + res: { 166 + /** 167 + * successful operation 168 + */ 169 + 200: Pet; 170 + /** 171 + * Invalid ID supplied 172 + */ 173 + 400: unknown; 174 + /** 175 + * Pet not found 176 + */ 177 + 404: unknown; 178 + }; 179 + }; 180 + post: { 181 + req: { 182 + /** 183 + * Name of pet that needs to be updated 184 + */ 185 + name?: string; 186 + /** 187 + * ID of pet that needs to be updated 188 + */ 189 + petId: number; 190 + /** 191 + * Status of pet that needs to be updated 192 + */ 193 + status?: string; 194 + }; 195 + res: { 196 + /** 197 + * Invalid input 198 + */ 199 + 405: unknown; 200 + }; 201 + }; 202 + delete: { 203 + req: { 204 + apiKey?: string; 205 + /** 206 + * Pet id to delete 207 + */ 208 + petId: number; 209 + }; 210 + res: { 211 + /** 212 + * Invalid pet value 213 + */ 214 + 400: unknown; 215 + }; 216 + }; 217 + }; 218 + '/pet/{petId}/uploadImage': { 219 + post: { 220 + req: { 221 + /** 222 + * Additional Metadata 223 + */ 224 + additionalMetadata?: string; 225 + /** 226 + * ID of pet to update 227 + */ 228 + petId: number; 229 + requestBody?: Blob | File; 230 + }; 231 + res: { 232 + /** 233 + * successful operation 234 + */ 235 + 200: ApiResponse; 236 + }; 237 + }; 238 + }; 239 + '/store/inventory': { 240 + get: { 241 + res: { 242 + /** 243 + * successful operation 244 + */ 245 + 200: { 246 + [key: string]: number; 247 + }; 248 + }; 249 + }; 250 + }; 251 + '/store/order': { 252 + post: { 253 + req: { 254 + requestBody?: Order; 255 + }; 256 + res: { 257 + /** 258 + * successful operation 259 + */ 260 + 200: Order; 261 + /** 262 + * Invalid input 263 + */ 264 + 405: unknown; 265 + }; 266 + }; 267 + }; 268 + '/store/order/{orderId}': { 269 + get: { 270 + req: { 271 + /** 272 + * ID of order that needs to be fetched 273 + */ 274 + orderId: number; 275 + }; 276 + res: { 277 + /** 278 + * successful operation 279 + */ 280 + 200: Order; 281 + /** 282 + * Invalid ID supplied 283 + */ 284 + 400: unknown; 285 + /** 286 + * Order not found 287 + */ 288 + 404: unknown; 289 + }; 290 + }; 291 + delete: { 292 + req: { 293 + /** 294 + * ID of the order that needs to be deleted 295 + */ 296 + orderId: number; 297 + }; 298 + res: { 299 + /** 300 + * Invalid ID supplied 301 + */ 302 + 400: unknown; 303 + /** 304 + * Order not found 305 + */ 306 + 404: unknown; 307 + }; 308 + }; 309 + }; 310 + '/user': { 311 + post: { 312 + req: { 313 + /** 314 + * Created user object 315 + */ 316 + requestBody?: User; 317 + }; 318 + res: { 319 + /** 320 + * successful operation 321 + */ 322 + 200: User; 323 + }; 324 + }; 325 + }; 326 + '/user/createWithList': { 327 + post: { 328 + req: { 329 + requestBody?: Array<User>; 330 + }; 331 + res: { 332 + /** 333 + * successful operation 334 + */ 335 + 200: unknown; 336 + }; 337 + }; 338 + }; 339 + '/user/login': { 340 + get: { 341 + req: { 342 + /** 343 + * The password for login in clear text 344 + */ 345 + password?: string; 346 + /** 347 + * The user name for login 348 + */ 349 + username?: string; 350 + }; 351 + res: { 352 + /** 353 + * successful operation 354 + */ 355 + 200: string; 356 + /** 357 + * Invalid username/password supplied 358 + */ 359 + 400: unknown; 360 + }; 361 + }; 362 + }; 363 + '/user/logout': { 364 + get: { 365 + res: { 366 + /** 367 + * successful operation 368 + */ 369 + 200: unknown; 370 + }; 371 + }; 372 + }; 373 + '/user/{username}': { 374 + get: { 375 + req: { 376 + /** 377 + * The name that needs to be fetched. Use user1 for testing. 378 + */ 379 + username: string; 380 + }; 381 + res: { 382 + /** 383 + * successful operation 384 + */ 385 + 200: User; 386 + /** 387 + * Invalid username supplied 388 + */ 389 + 400: unknown; 390 + /** 391 + * User not found 392 + */ 393 + 404: unknown; 394 + }; 395 + }; 396 + put: { 397 + req: { 398 + /** 399 + * Update an existent user in the store 400 + */ 401 + requestBody?: User; 402 + /** 403 + * name that needs to be updated 404 + */ 405 + username: string; 406 + }; 407 + res: { 408 + /** 409 + * successful operation 410 + */ 411 + 200: unknown; 412 + }; 413 + }; 414 + delete: { 415 + req: { 416 + /** 417 + * The name that needs to be deleted 418 + */ 419 + username: string; 420 + }; 421 + res: { 422 + /** 423 + * Invalid username supplied 424 + */ 425 + 400: unknown; 426 + /** 427 + * User not found 428 + */ 429 + 404: unknown; 430 + }; 431 + }; 432 + }; 433 + };
+68
examples/openapi-ts-axios/src/index.css
··· 1 + :root { 2 + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; 3 + line-height: 1.5; 4 + font-weight: 400; 5 + 6 + color-scheme: light dark; 7 + color: rgba(255, 255, 255, 0.87); 8 + background-color: #242424; 9 + 10 + font-synthesis: none; 11 + text-rendering: optimizeLegibility; 12 + -webkit-font-smoothing: antialiased; 13 + -moz-osx-font-smoothing: grayscale; 14 + } 15 + 16 + a { 17 + font-weight: 500; 18 + color: #646cff; 19 + text-decoration: inherit; 20 + } 21 + a:hover { 22 + color: #535bf2; 23 + } 24 + 25 + body { 26 + margin: 0; 27 + display: flex; 28 + place-items: center; 29 + min-width: 320px; 30 + min-height: 100vh; 31 + } 32 + 33 + h1 { 34 + font-size: 3.2em; 35 + line-height: 1.1; 36 + } 37 + 38 + button { 39 + border-radius: 8px; 40 + border: 1px solid transparent; 41 + padding: 0.6em 1.2em; 42 + font-size: 1em; 43 + font-weight: 500; 44 + font-family: inherit; 45 + background-color: #1a1a1a; 46 + cursor: pointer; 47 + transition: border-color 0.25s; 48 + } 49 + button:hover { 50 + border-color: #646cff; 51 + } 52 + button:focus, 53 + button:focus-visible { 54 + outline: 4px auto -webkit-focus-ring-color; 55 + } 56 + 57 + @media (prefers-color-scheme: light) { 58 + :root { 59 + color: #213547; 60 + background-color: #ffffff; 61 + } 62 + a:hover { 63 + color: #747bff; 64 + } 65 + button { 66 + background-color: #f9f9f9; 67 + } 68 + }
+12
examples/openapi-ts-axios/src/main.tsx
··· 1 + import './index.css'; 2 + 3 + import React from 'react'; 4 + import ReactDOM from 'react-dom/client'; 5 + 6 + import App from './App.tsx'; 7 + 8 + ReactDOM.createRoot(document.getElementById('root')!).render( 9 + <React.StrictMode> 10 + <App /> 11 + </React.StrictMode>, 12 + );
+1
examples/openapi-ts-axios/src/vite-env.d.ts
··· 1 + /// <reference types="vite/client" />
+25
examples/openapi-ts-axios/tsconfig.json
··· 1 + { 2 + "compilerOptions": { 3 + "target": "ES2020", 4 + "useDefineForClassFields": true, 5 + "lib": ["ES2020", "DOM", "DOM.Iterable"], 6 + "module": "ESNext", 7 + "skipLibCheck": true, 8 + 9 + /* Bundler mode */ 10 + "moduleResolution": "bundler", 11 + "allowImportingTsExtensions": true, 12 + "resolveJsonModule": true, 13 + "isolatedModules": true, 14 + "noEmit": true, 15 + "jsx": "react-jsx", 16 + 17 + /* Linting */ 18 + "strict": true, 19 + "noUnusedLocals": true, 20 + "noUnusedParameters": true, 21 + "noFallthroughCasesInSwitch": true 22 + }, 23 + "include": ["src"], 24 + "references": [{ "path": "./tsconfig.node.json" }] 25 + }
+11
examples/openapi-ts-axios/tsconfig.node.json
··· 1 + { 2 + "compilerOptions": { 3 + "composite": true, 4 + "skipLibCheck": true, 5 + "module": "ESNext", 6 + "moduleResolution": "bundler", 7 + "allowSyntheticDefaultImports": true, 8 + "strict": true 9 + }, 10 + "include": ["vite.config.ts"] 11 + }
+7
examples/openapi-ts-axios/vite.config.ts
··· 1 + import react from '@vitejs/plugin-react'; 2 + import { defineConfig } from 'vite'; 3 + 4 + // https://vitejs.dev/config/ 5 + export default defineConfig({ 6 + plugins: [react()], 7 + });
+1
package.json
··· 21 21 "client-fetch": "pnpm --filter @hey-api/client-fetch --", 22 22 "client-nextjs": "pnpm --filter @hey-api/client-nextjs --", 23 23 "docs": "pnpm --filter @hey-api/docs --", 24 + "example": "pnpm --filter @examples/openapi-ts-axios --", 24 25 "format": "prettier --write .", 25 26 "lint:fix": "prettier --check . && eslint . --fix", 26 27 "lint": "prettier --check . && eslint .",
+6 -3
packages/client-axios/package.json
··· 26 26 "typescript", 27 27 "vue" 28 28 ], 29 - "main": "./dist/index.cjs", 30 - "types": "./dist/index.d.ts", 29 + "exports": { 30 + "import": "./dist/node/index.mjs", 31 + "require": "./dist/node/index.cjs", 32 + "types": "./dist/node/index.d.ts" 33 + }, 31 34 "scripts": { 32 35 "build-bundle": "rollup --config rollup.config.ts --configPlugin typescript", 33 36 "build-types-check": "tsc --project tsconfig.check.json", 34 37 "build-types-roll": "rollup --config rollup.dts.config.ts --configPlugin typescript && rimraf temp", 35 - "build-types-temp": "tsc --emitDeclarationOnly --outDir temp -p src", 38 + "build-types-temp": "tsc --emitDeclarationOnly --outDir temp -p src/node", 36 39 "build-types": "pnpm build-types-temp && pnpm build-types-roll && pnpm build-types-check", 37 40 "build": "pnpm clean && pnpm build-bundle && pnpm build-types", 38 41 "clean": "rimraf dist coverage node_modules/.cache",
+39 -19
packages/client-axios/rollup.config.ts
··· 20 20 ]; 21 21 22 22 function createConfig(isProduction: boolean) { 23 - return defineConfig({ 24 - external: externalDependencies, 25 - input: path.resolve(__dirname, 'src/index.ts'), 26 - output: { 27 - file: path.resolve(__dirname, 'dist/index.cjs'), 28 - format: 'cjs', 29 - }, 30 - plugins: [ 31 - typescript({ 32 - declaration: false, 33 - tsconfig: path.resolve(__dirname, 'src/tsconfig.json'), 34 - }), 35 - commonjs({ 36 - sourceMap: false, 37 - }), 38 - isProduction && terser(), 39 - ], 40 - }); 23 + return [ 24 + defineConfig({ 25 + external: externalDependencies, 26 + input: path.resolve(__dirname, 'src/node/index.ts'), 27 + output: { 28 + file: path.resolve(__dirname, 'dist/node/index.cjs'), 29 + format: 'cjs', 30 + }, 31 + plugins: [ 32 + typescript({ 33 + declaration: false, 34 + tsconfig: path.resolve(__dirname, 'src/node/tsconfig.json'), 35 + }), 36 + commonjs({ 37 + sourceMap: false, 38 + }), 39 + isProduction && terser(), 40 + ], 41 + }), 42 + defineConfig({ 43 + external: externalDependencies, 44 + input: path.resolve(__dirname, 'src/node/index.ts'), 45 + output: { 46 + file: path.resolve(__dirname, 'dist/node/index.mjs'), 47 + format: 'esm', 48 + }, 49 + plugins: [ 50 + typescript({ 51 + declaration: false, 52 + tsconfig: path.resolve(__dirname, 'src/node/tsconfig.json'), 53 + }), 54 + commonjs({ 55 + sourceMap: false, 56 + }), 57 + isProduction && terser(), 58 + ], 59 + }), 60 + ]; 41 61 } 42 62 43 63 export default (commandLineArgs: any): RollupOptions[] => { 44 64 const isDev = commandLineArgs.watch; 45 65 const isProduction = !isDev; 46 - return defineConfig([createConfig(isProduction)]); 66 + return defineConfig(createConfig(isProduction)); 47 67 };
+2 -2
packages/client-axios/rollup.dts.config.ts
··· 6 6 export default defineConfig({ 7 7 external: externalDependencies, 8 8 input: { 9 - index: './temp/index.d.ts', 9 + index: './temp/node/index.d.ts', 10 10 }, 11 11 output: { 12 - dir: './dist', 12 + dir: './dist/node', 13 13 format: 'cjs', 14 14 }, 15 15 plugins: [dts({ respectExternal: true })],
+34
packages/client-axios/src/index.ts
··· 25 25 } from 'axios'; 26 26 import axios from 'axios'; 27 27 28 + type Middleware<T> = (value: T) => T | Promise<T>; 29 + 30 + class Interceptors<T> { 31 + _fns: Middleware<T>[]; 32 + 33 + constructor() { 34 + this._fns = []; 35 + } 36 + 37 + eject(fn: Middleware<T>) { 38 + const index = this._fns.indexOf(fn); 39 + if (index !== -1) { 40 + this._fns = [...this._fns.slice(0, index), ...this._fns.slice(index + 1)]; 41 + } 42 + } 43 + 44 + use(fn: Middleware<T>) { 45 + this._fns = [...this._fns, fn]; 46 + } 47 + } 48 + 49 + export const OpenAPI: OpenAPIConfig<AxiosRequestConfig, AxiosResponse> = { 50 + BASE: '', 51 + CREDENTIALS: 'include', 52 + ENCODE_PATH: undefined, 53 + HEADERS: undefined, 54 + PASSWORD: undefined, 55 + TOKEN: undefined, 56 + USERNAME: undefined, 57 + VERSION: '1.26.0', 58 + WITH_CREDENTIALS: false, 59 + interceptors: { request: new Interceptors(), response: new Interceptors() }, 60 + }; 61 + 28 62 export const getHeaders = async ( 29 63 config: OpenAPIConfig, 30 64 options: ApiRequestOptions,
+2
packages/client-axios/src/node/index.ts
··· 1 + export { OpenAPI, request } from '../'; 2 + export type { CancelablePromise } from '@hey-api/client-core';
+9
packages/client-axios/src/node/tsconfig.json
··· 1 + { 2 + "compilerOptions": { 3 + "lib": ["ES2020", "DOM"], 4 + "stripInternal": true 5 + }, 6 + "exclude": ["../**/__tests__"], 7 + "extends": "../../tsconfig.base.json", 8 + "include": ["../"] 9 + }
-9
packages/client-axios/src/tsconfig.json
··· 1 - { 2 - "compilerOptions": { 3 - "lib": ["ESNext"], 4 - "stripInternal": true 5 - }, 6 - "exclude": ["./**/__tests__"], 7 - "extends": "../tsconfig.base.json", 8 - "include": ["./"] 9 - }
+6 -3
packages/client-core/package.json
··· 13 13 "url": "https://github.com/hey-api/openapi-ts/issues" 14 14 }, 15 15 "license": "MIT", 16 - "main": "./dist/index.cjs", 17 - "types": "./dist/index.d.ts", 16 + "exports": { 17 + "import": "./dist/node/index.mjs", 18 + "require": "./dist/node/index.cjs", 19 + "types": "./dist/node/index.d.ts" 20 + }, 18 21 "scripts": { 19 22 "build-bundle": "rollup --config rollup.config.ts --configPlugin typescript", 20 23 "build-types-check": "tsc --project tsconfig.check.json", 21 24 "build-types-roll": "rollup --config rollup.dts.config.ts --configPlugin typescript && rimraf temp", 22 - "build-types-temp": "tsc --emitDeclarationOnly --outDir temp -p src", 25 + "build-types-temp": "tsc --emitDeclarationOnly --outDir temp -p src/node", 23 26 "build-types": "pnpm build-types-temp && pnpm build-types-roll && pnpm build-types-check", 24 27 "build": "pnpm clean && pnpm build-bundle && pnpm build-types", 25 28 "clean": "rimraf dist coverage node_modules/.cache",
+39 -19
packages/client-core/rollup.config.ts
··· 20 20 ]; 21 21 22 22 function createConfig(isProduction: boolean) { 23 - return defineConfig({ 24 - external: externalDependencies, 25 - input: path.resolve(__dirname, 'src/index.ts'), 26 - output: { 27 - file: path.resolve(__dirname, 'dist/index.cjs'), 28 - format: 'cjs', 29 - }, 30 - plugins: [ 31 - typescript({ 32 - declaration: false, 33 - tsconfig: path.resolve(__dirname, 'src/tsconfig.json'), 34 - }), 35 - commonjs({ 36 - sourceMap: false, 37 - }), 38 - isProduction && terser(), 39 - ], 40 - }); 23 + return [ 24 + defineConfig({ 25 + external: externalDependencies, 26 + input: path.resolve(__dirname, 'src/node/index.ts'), 27 + output: { 28 + file: path.resolve(__dirname, 'dist/node/index.cjs'), 29 + format: 'cjs', 30 + }, 31 + plugins: [ 32 + typescript({ 33 + declaration: false, 34 + tsconfig: path.resolve(__dirname, 'src/node/tsconfig.json'), 35 + }), 36 + commonjs({ 37 + sourceMap: false, 38 + }), 39 + isProduction && terser(), 40 + ], 41 + }), 42 + defineConfig({ 43 + external: externalDependencies, 44 + input: path.resolve(__dirname, 'src/node/index.ts'), 45 + output: { 46 + file: path.resolve(__dirname, 'dist/node/index.mjs'), 47 + format: 'esm', 48 + }, 49 + plugins: [ 50 + typescript({ 51 + declaration: false, 52 + tsconfig: path.resolve(__dirname, 'src/node/tsconfig.json'), 53 + }), 54 + commonjs({ 55 + sourceMap: false, 56 + }), 57 + isProduction && terser(), 58 + ], 59 + }), 60 + ]; 41 61 } 42 62 43 63 export default (commandLineArgs: any): RollupOptions[] => { 44 64 const isDev = commandLineArgs.watch; 45 65 const isProduction = !isDev; 46 - return defineConfig([createConfig(isProduction)]); 66 + return defineConfig(createConfig(isProduction)); 47 67 };
+2 -2
packages/client-core/rollup.dts.config.ts
··· 6 6 export default defineConfig({ 7 7 external: externalDependencies, 8 8 input: { 9 - index: './temp/index.d.ts', 9 + index: './temp/node/index.d.ts', 10 10 }, 11 11 output: { 12 - dir: './dist', 12 + dir: './dist/node', 13 13 format: 'cjs', 14 14 }, 15 15 plugins: [dts({ respectExternal: true })],
+3 -4
packages/client-core/src/index.ts
··· 7 7 } from './types'; 8 8 9 9 export { CancelablePromise, CancelError, OnCancel } from './cancelablePromise'; 10 - export type { ApiRequestOptions, ApiResult } from './types'; 11 10 12 11 export class ApiError extends Error { 13 12 public readonly url: string; ··· 51 50 } 52 51 } 53 52 54 - export type OpenAPIConfig = { 53 + export type OpenAPIConfig<TRequest = any, TResponse = any> = { 55 54 BASE: string; 56 55 CREDENTIALS: 'include' | 'omit' | 'same-origin'; 57 56 ENCODE_PATH?: ((path: string) => string) | undefined; ··· 62 61 VERSION: string; 63 62 WITH_CREDENTIALS: boolean; 64 63 interceptors: { 65 - request: Interceptors<any>; 66 - response: Interceptors<any>; 64 + request: Interceptors<TRequest>; 65 + response: Interceptors<TResponse>; 67 66 }; 68 67 }; 69 68
+21
packages/client-core/src/node/index.ts
··· 1 + export { 2 + ApiError, 3 + base64, 4 + CancelablePromise, 5 + CancelError, 6 + catchErrorCodes, 7 + getFormData, 8 + getQueryString, 9 + getUrl, 10 + Interceptors, 11 + isBlob, 12 + isFormData, 13 + isString, 14 + isStringWithValue, 15 + isSuccess, 16 + OnCancel, 17 + OpenAPI, 18 + type OpenAPIConfig, 19 + resolve, 20 + } from '../'; 21 + export type { ApiRequestOptions, ApiResult } from '../types';
+9
packages/client-core/src/node/tsconfig.json
··· 1 + { 2 + "compilerOptions": { 3 + "lib": ["ES2020", "DOM"], 4 + "stripInternal": true 5 + }, 6 + "exclude": ["../**/__tests__"], 7 + "extends": "../../tsconfig.base.json", 8 + "include": ["../"] 9 + }
-9
packages/client-core/src/tsconfig.json
··· 1 - { 2 - "compilerOptions": { 3 - "lib": ["ESNext"], 4 - "stripInternal": true 5 - }, 6 - "exclude": ["./**/__tests__"], 7 - "extends": "../tsconfig.base.json", 8 - "include": ["./"] 9 - }
+8 -8
packages/openapi-ts/src/index.ts
··· 21 21 22 22 // Dependencies used in each client. User must have installed these to use the generated client 23 23 const clientDependencies: Record<Config['client'], string[]> = { 24 - '@hey-api': [], 24 + '@hey-api/client-axios': ['axios'], 25 + '@hey-api/client-fetch': [], 25 26 angular: ['@angular/common', '@angular/core', 'rxjs'], 26 27 axios: ['axios'], 27 28 fetch: [], ··· 93 94 }; 94 95 95 96 const inferClient = (dependencies: Dependencies): Config['client'] => { 96 - if ( 97 - dependencies['@hey-api/client-axios'] || 98 - dependencies['@hey-api/client-fetch'] || 99 - dependencies['@hey-api/client-nextjs'] 100 - ) { 101 - return '@hey-api'; 97 + if (dependencies['@hey-api/client-axios']) { 98 + return '@hey-api/client-axios'; 99 + } 100 + if (dependencies['@hey-api/client-fetch']) { 101 + return '@hey-api/client-fetch'; 102 102 } 103 103 if (dependencies.axios) { 104 104 return 'axios'; ··· 297 297 debug, 298 298 dryRun, 299 299 enums, 300 - exportCore: client === '@hey-api' ? false : exportCore, 300 + exportCore: client.startsWith('@hey-api') ? false : exportCore, 301 301 format, 302 302 input, 303 303 lint,
+8 -1
packages/openapi-ts/src/types/config.ts
··· 7 7 * The selected HTTP client (fetch, xhr, node or axios) 8 8 * @default 'fetch' 9 9 */ 10 - client?: '@hey-api' | 'angular' | 'axios' | 'fetch' | 'node' | 'xhr'; 10 + client?: 11 + | '@hey-api/client-axios' 12 + | '@hey-api/client-fetch' 13 + | 'angular' 14 + | 'axios' 15 + | 'fetch' 16 + | 'node' 17 + | 'xhr'; 11 18 /** 12 19 * Run in debug mode? 13 20 * @default false
+2 -2
packages/openapi-ts/src/utils/getHttpRequestName.ts
··· 6 6 */ 7 7 export const getHttpRequestName = (client: Config['client']): string => { 8 8 switch (client) { 9 - case '@hey-api': 10 - return ''; 11 9 case 'angular': 12 10 return 'AngularHttpRequest'; 13 11 case 'axios': ··· 18 16 return 'NodeHttpRequest'; 19 17 case 'xhr': 20 18 return 'XHRHttpRequest'; 19 + default: 20 + return ''; 21 21 } 22 22 };
+29 -10
packages/openapi-ts/src/utils/write/services.ts
··· 288 288 // Import required packages and core files. 289 289 if (config.client === 'angular') { 290 290 file.addNamedImport('Injectable', '@angular/core'); 291 - if (config.name === undefined) { 291 + 292 + if (!config.name) { 292 293 file.addNamedImport('HttpClient', '@angular/common/http'); 293 294 } 295 + 294 296 file.addNamedImport({ isTypeOnly: true, name: 'Observable' }, 'rxjs'); 295 297 } else { 296 - file.addNamedImport( 297 - { isTypeOnly: true, name: 'CancelablePromise' }, 298 - './core/CancelablePromise', 299 - ); 298 + if (config.client.startsWith('@hey-api')) { 299 + file.addNamedImport( 300 + { isTypeOnly: true, name: 'CancelablePromise' }, 301 + config.client, 302 + ); 303 + } else { 304 + file.addNamedImport( 305 + { isTypeOnly: true, name: 'CancelablePromise' }, 306 + './core/CancelablePromise', 307 + ); 308 + } 300 309 } 310 + 301 311 if (config.services.response === 'response') { 302 312 file.addNamedImport( 303 313 { isTypeOnly: true, name: 'ApiResult' }, 304 314 './core/ApiResult', 305 315 ); 306 316 } 317 + 307 318 if (config.name) { 308 319 file.addNamedImport( 309 320 { isTypeOnly: config.client !== 'angular', name: 'BaseHttpRequest' }, 310 321 './core/BaseHttpRequest', 311 322 ); 312 323 } else { 313 - file.addNamedImport('OpenAPI', './core/OpenAPI'); 314 - file.addNamedImport( 315 - { alias: '__request', name: 'request' }, 316 - './core/request', 317 - ); 324 + if (config.client.startsWith('@hey-api')) { 325 + file.addNamedImport('OpenAPI', config.client); 326 + file.addNamedImport( 327 + { alias: '__request', name: 'request' }, 328 + config.client, 329 + ); 330 + } else { 331 + file.addNamedImport('OpenAPI', './core/OpenAPI'); 332 + file.addNamedImport( 333 + { alias: '__request', name: 'request' }, 334 + './core/request', 335 + ); 336 + } 318 337 } 319 338 320 339 // Import all models required by the services.
+464 -10
pnpm-lock.yaml
··· 82 82 specifier: 1.1.3 83 83 version: 1.1.3(@algolia/client-search@4.23.3)(@types/node@20.12.7)(search-insights@2.13.0)(typescript@5.4.5) 84 84 85 + examples/openapi-ts-axios: 86 + dependencies: 87 + '@hey-api/client-axios': 88 + specifier: workspace:* 89 + version: link:../../packages/client-axios 90 + axios: 91 + specifier: 1.6.8 92 + version: 1.6.8 93 + react: 94 + specifier: 18.2.0 95 + version: 18.2.0 96 + react-dom: 97 + specifier: 18.2.0 98 + version: 18.2.0(react@18.2.0) 99 + devDependencies: 100 + '@hey-api/openapi-ts': 101 + specifier: workspace:* 102 + version: link:../../packages/openapi-ts 103 + '@types/react': 104 + specifier: 18.2.79 105 + version: 18.2.79 106 + '@types/react-dom': 107 + specifier: 18.2.25 108 + version: 18.2.25 109 + '@typescript-eslint/eslint-plugin': 110 + specifier: 7.7.1 111 + version: 7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0)(typescript@5.4.5) 112 + '@typescript-eslint/parser': 113 + specifier: 7.7.1 114 + version: 7.7.1(eslint@8.57.0)(typescript@5.4.5) 115 + '@vitejs/plugin-react': 116 + specifier: 4.2.1 117 + version: 4.2.1(vite@5.2.10) 118 + eslint: 119 + specifier: 8.57.0 120 + version: 8.57.0 121 + eslint-plugin-react-hooks: 122 + specifier: 4.6.0 123 + version: 4.6.0(eslint@8.57.0) 124 + eslint-plugin-react-refresh: 125 + specifier: 0.4.6 126 + version: 0.4.6(eslint@8.57.0) 127 + prettier: 128 + specifier: 3.2.5 129 + version: 3.2.5 130 + typescript: 131 + specifier: 5.4.5 132 + version: 5.4.5 133 + vite: 134 + specifier: 5.2.10 135 + version: 5.2.10(@types/node@20.12.7) 136 + 85 137 packages/client-axios: 86 138 dependencies: 87 139 '@hey-api/client-core': ··· 1683 1735 '@babel/helper-plugin-utils': 7.24.0 1684 1736 dev: true 1685 1737 1738 + /@babel/plugin-transform-react-jsx-self@7.24.1(@babel/core@7.24.0): 1739 + resolution: {integrity: sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w==} 1740 + engines: {node: '>=6.9.0'} 1741 + peerDependencies: 1742 + '@babel/core': ^7.0.0-0 1743 + dependencies: 1744 + '@babel/core': 7.24.0 1745 + '@babel/helper-plugin-utils': 7.24.0 1746 + dev: true 1747 + 1748 + /@babel/plugin-transform-react-jsx-source@7.24.1(@babel/core@7.24.0): 1749 + resolution: {integrity: sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==} 1750 + engines: {node: '>=6.9.0'} 1751 + peerDependencies: 1752 + '@babel/core': ^7.0.0-0 1753 + dependencies: 1754 + '@babel/core': 7.24.0 1755 + '@babel/helper-plugin-utils': 7.24.0 1756 + dev: true 1757 + 1686 1758 /@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.24.0): 1687 1759 resolution: {integrity: sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==} 1688 1760 engines: {node: '>=6.9.0'} ··· 2843 2915 dev: true 2844 2916 optional: true 2845 2917 2918 + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): 2919 + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 2920 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 2921 + peerDependencies: 2922 + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 2923 + dependencies: 2924 + eslint: 8.57.0 2925 + eslint-visitor-keys: 3.4.3 2926 + dev: true 2927 + 2846 2928 /@eslint-community/eslint-utils@4.4.0(eslint@9.1.0): 2847 2929 resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 2848 2930 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} ··· 2858 2940 engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 2859 2941 dev: true 2860 2942 2943 + /@eslint/eslintrc@2.1.4: 2944 + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} 2945 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 2946 + dependencies: 2947 + ajv: 6.12.6 2948 + debug: 4.3.4 2949 + espree: 9.6.1 2950 + globals: 13.24.0 2951 + ignore: 5.3.1 2952 + import-fresh: 3.3.0 2953 + js-yaml: 4.1.0 2954 + minimatch: 3.1.2 2955 + strip-json-comments: 3.1.1 2956 + transitivePeerDependencies: 2957 + - supports-color 2958 + dev: true 2959 + 2861 2960 /@eslint/eslintrc@3.0.2: 2862 2961 resolution: {integrity: sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==} 2863 2962 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} ··· 2875 2974 - supports-color 2876 2975 dev: true 2877 2976 2977 + /@eslint/js@8.57.0: 2978 + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} 2979 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 2980 + dev: true 2981 + 2878 2982 /@eslint/js@9.1.1: 2879 2983 resolution: {integrity: sha512-5WoDz3Y19Bg2BnErkZTp0en+c/i9PvgFS7MBe1+m60HjFr0hrphlAGp4yzI7pxpt4xShln4ZyYp4neJm8hmOkQ==} 2880 2984 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 2985 + dev: true 2986 + 2987 + /@humanwhocodes/config-array@0.11.14: 2988 + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} 2989 + engines: {node: '>=10.10.0'} 2990 + dependencies: 2991 + '@humanwhocodes/object-schema': 2.0.3 2992 + debug: 4.3.4 2993 + minimatch: 3.1.2 2994 + transitivePeerDependencies: 2995 + - supports-color 2881 2996 dev: true 2882 2997 2883 2998 /@humanwhocodes/config-array@0.13.0: ··· 3514 3629 minimatch: 9.0.4 3515 3630 dev: true 3516 3631 3632 + /@types/babel__core@7.20.5: 3633 + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 3634 + dependencies: 3635 + '@babel/parser': 7.24.4 3636 + '@babel/types': 7.24.0 3637 + '@types/babel__generator': 7.6.8 3638 + '@types/babel__template': 7.4.4 3639 + '@types/babel__traverse': 7.20.5 3640 + dev: true 3641 + 3642 + /@types/babel__generator@7.6.8: 3643 + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} 3644 + dependencies: 3645 + '@babel/types': 7.24.0 3646 + dev: true 3647 + 3648 + /@types/babel__template@7.4.4: 3649 + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 3650 + dependencies: 3651 + '@babel/parser': 7.24.4 3652 + '@babel/types': 7.24.0 3653 + dev: true 3654 + 3655 + /@types/babel__traverse@7.20.5: 3656 + resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} 3657 + dependencies: 3658 + '@babel/types': 7.24.0 3659 + dev: true 3660 + 3517 3661 /@types/body-parser@1.19.5: 3518 3662 resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} 3519 3663 dependencies: ··· 3638 3782 resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} 3639 3783 dev: true 3640 3784 3785 + /@types/prop-types@15.7.12: 3786 + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} 3787 + dev: true 3788 + 3641 3789 /@types/qs@6.9.15: 3642 3790 resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} 3643 3791 dev: true ··· 3646 3794 resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} 3647 3795 dev: true 3648 3796 3797 + /@types/react-dom@18.2.25: 3798 + resolution: {integrity: sha512-o/V48vf4MQh7juIKZU2QGDfli6p1+OOi5oXx36Hffpc9adsHeXjVp8rHuPkjd8VT8sOJ2Zp05HR7CdpGTIUFUA==} 3799 + dependencies: 3800 + '@types/react': 18.2.79 3801 + dev: true 3802 + 3803 + /@types/react@18.2.79: 3804 + resolution: {integrity: sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w==} 3805 + dependencies: 3806 + '@types/prop-types': 15.7.12 3807 + csstype: 3.1.3 3808 + dev: true 3809 + 3649 3810 /@types/resolve@1.20.2: 3650 3811 resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} 3651 3812 dev: true ··· 3732 3893 - supports-color 3733 3894 dev: true 3734 3895 3896 + /@typescript-eslint/eslint-plugin@7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0)(typescript@5.4.5): 3897 + resolution: {integrity: sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==} 3898 + engines: {node: ^18.18.0 || >=20.0.0} 3899 + peerDependencies: 3900 + '@typescript-eslint/parser': ^7.0.0 3901 + eslint: ^8.56.0 3902 + typescript: '*' 3903 + peerDependenciesMeta: 3904 + typescript: 3905 + optional: true 3906 + dependencies: 3907 + '@eslint-community/regexpp': 4.10.0 3908 + '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.4.5) 3909 + '@typescript-eslint/scope-manager': 7.7.1 3910 + '@typescript-eslint/type-utils': 7.7.1(eslint@8.57.0)(typescript@5.4.5) 3911 + '@typescript-eslint/utils': 7.7.1(eslint@8.57.0)(typescript@5.4.5) 3912 + '@typescript-eslint/visitor-keys': 7.7.1 3913 + debug: 4.3.4 3914 + eslint: 8.57.0 3915 + graphemer: 1.4.0 3916 + ignore: 5.3.1 3917 + natural-compare: 1.4.0 3918 + semver: 7.6.0 3919 + ts-api-utils: 1.3.0(typescript@5.4.5) 3920 + typescript: 5.4.5 3921 + transitivePeerDependencies: 3922 + - supports-color 3923 + dev: true 3924 + 3735 3925 /@typescript-eslint/parser@7.7.0(eslint@9.1.0)(typescript@5.4.5): 3736 3926 resolution: {integrity: sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==} 3737 3927 engines: {node: ^18.18.0 || >=20.0.0} ··· 3753 3943 - supports-color 3754 3944 dev: true 3755 3945 3946 + /@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5): 3947 + resolution: {integrity: sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==} 3948 + engines: {node: ^18.18.0 || >=20.0.0} 3949 + peerDependencies: 3950 + eslint: ^8.56.0 3951 + typescript: '*' 3952 + peerDependenciesMeta: 3953 + typescript: 3954 + optional: true 3955 + dependencies: 3956 + '@typescript-eslint/scope-manager': 7.7.1 3957 + '@typescript-eslint/types': 7.7.1 3958 + '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5) 3959 + '@typescript-eslint/visitor-keys': 7.7.1 3960 + debug: 4.3.4 3961 + eslint: 8.57.0 3962 + typescript: 5.4.5 3963 + transitivePeerDependencies: 3964 + - supports-color 3965 + dev: true 3966 + 3756 3967 /@typescript-eslint/scope-manager@7.7.0: 3757 3968 resolution: {integrity: sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==} 3758 3969 engines: {node: ^18.18.0 || >=20.0.0} 3759 3970 dependencies: 3760 3971 '@typescript-eslint/types': 7.7.0 3761 3972 '@typescript-eslint/visitor-keys': 7.7.0 3973 + dev: true 3974 + 3975 + /@typescript-eslint/scope-manager@7.7.1: 3976 + resolution: {integrity: sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==} 3977 + engines: {node: ^18.18.0 || >=20.0.0} 3978 + dependencies: 3979 + '@typescript-eslint/types': 7.7.1 3980 + '@typescript-eslint/visitor-keys': 7.7.1 3762 3981 dev: true 3763 3982 3764 3983 /@typescript-eslint/type-utils@7.7.0(eslint@9.1.0)(typescript@5.4.5): ··· 3781 4000 - supports-color 3782 4001 dev: true 3783 4002 4003 + /@typescript-eslint/type-utils@7.7.1(eslint@8.57.0)(typescript@5.4.5): 4004 + resolution: {integrity: sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==} 4005 + engines: {node: ^18.18.0 || >=20.0.0} 4006 + peerDependencies: 4007 + eslint: ^8.56.0 4008 + typescript: '*' 4009 + peerDependenciesMeta: 4010 + typescript: 4011 + optional: true 4012 + dependencies: 4013 + '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5) 4014 + '@typescript-eslint/utils': 7.7.1(eslint@8.57.0)(typescript@5.4.5) 4015 + debug: 4.3.4 4016 + eslint: 8.57.0 4017 + ts-api-utils: 1.3.0(typescript@5.4.5) 4018 + typescript: 5.4.5 4019 + transitivePeerDependencies: 4020 + - supports-color 4021 + dev: true 4022 + 3784 4023 /@typescript-eslint/types@7.7.0: 3785 4024 resolution: {integrity: sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==} 4025 + engines: {node: ^18.18.0 || >=20.0.0} 4026 + dev: true 4027 + 4028 + /@typescript-eslint/types@7.7.1: 4029 + resolution: {integrity: sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==} 3786 4030 engines: {node: ^18.18.0 || >=20.0.0} 3787 4031 dev: true 3788 4032 ··· 3808 4052 - supports-color 3809 4053 dev: true 3810 4054 4055 + /@typescript-eslint/typescript-estree@7.7.1(typescript@5.4.5): 4056 + resolution: {integrity: sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==} 4057 + engines: {node: ^18.18.0 || >=20.0.0} 4058 + peerDependencies: 4059 + typescript: '*' 4060 + peerDependenciesMeta: 4061 + typescript: 4062 + optional: true 4063 + dependencies: 4064 + '@typescript-eslint/types': 7.7.1 4065 + '@typescript-eslint/visitor-keys': 7.7.1 4066 + debug: 4.3.4 4067 + globby: 11.1.0 4068 + is-glob: 4.0.3 4069 + minimatch: 9.0.4 4070 + semver: 7.6.0 4071 + ts-api-utils: 1.3.0(typescript@5.4.5) 4072 + typescript: 5.4.5 4073 + transitivePeerDependencies: 4074 + - supports-color 4075 + dev: true 4076 + 3811 4077 /@typescript-eslint/utils@7.7.0(eslint@9.1.0)(typescript@5.4.5): 3812 4078 resolution: {integrity: sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==} 3813 4079 engines: {node: ^18.18.0 || >=20.0.0} ··· 3827 4093 - typescript 3828 4094 dev: true 3829 4095 4096 + /@typescript-eslint/utils@7.7.1(eslint@8.57.0)(typescript@5.4.5): 4097 + resolution: {integrity: sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==} 4098 + engines: {node: ^18.18.0 || >=20.0.0} 4099 + peerDependencies: 4100 + eslint: ^8.56.0 4101 + dependencies: 4102 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 4103 + '@types/json-schema': 7.0.15 4104 + '@types/semver': 7.5.8 4105 + '@typescript-eslint/scope-manager': 7.7.1 4106 + '@typescript-eslint/types': 7.7.1 4107 + '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5) 4108 + eslint: 8.57.0 4109 + semver: 7.6.0 4110 + transitivePeerDependencies: 4111 + - supports-color 4112 + - typescript 4113 + dev: true 4114 + 3830 4115 /@typescript-eslint/visitor-keys@7.7.0: 3831 4116 resolution: {integrity: sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==} 3832 4117 engines: {node: ^18.18.0 || >=20.0.0} 3833 4118 dependencies: 3834 4119 '@typescript-eslint/types': 7.7.0 3835 4120 eslint-visitor-keys: 3.4.3 4121 + dev: true 4122 + 4123 + /@typescript-eslint/visitor-keys@7.7.1: 4124 + resolution: {integrity: sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==} 4125 + engines: {node: ^18.18.0 || >=20.0.0} 4126 + dependencies: 4127 + '@typescript-eslint/types': 7.7.1 4128 + eslint-visitor-keys: 3.4.3 4129 + dev: true 4130 + 4131 + /@ungap/structured-clone@1.2.0: 4132 + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 3836 4133 dev: true 3837 4134 3838 4135 /@vitejs/plugin-basic-ssl@1.1.0(vite@5.1.7): ··· 3844 4141 vite: 5.1.7(@types/node@20.12.7)(less@4.2.0)(sass@1.71.1)(terser@5.29.1) 3845 4142 dev: true 3846 4143 4144 + /@vitejs/plugin-react@4.2.1(vite@5.2.10): 4145 + resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==} 4146 + engines: {node: ^14.18.0 || >=16.0.0} 4147 + peerDependencies: 4148 + vite: ^4.2.0 || ^5.0.0 4149 + dependencies: 4150 + '@babel/core': 7.24.0 4151 + '@babel/plugin-transform-react-jsx-self': 7.24.1(@babel/core@7.24.0) 4152 + '@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.0) 4153 + '@types/babel__core': 7.20.5 4154 + react-refresh: 0.14.0 4155 + vite: 5.2.10(@types/node@20.12.7) 4156 + transitivePeerDependencies: 4157 + - supports-color 4158 + dev: true 4159 + 3847 4160 /@vitejs/plugin-vue@5.0.4(vite@5.2.10)(vue@3.4.23): 3848 4161 resolution: {integrity: sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==} 3849 4162 engines: {node: ^18.0.0 || >=20.0.0} ··· 4490 4803 4491 4804 /asynckit@0.4.0: 4492 4805 resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 4493 - dev: true 4494 4806 4495 4807 /autoprefixer@10.4.18(postcss@8.4.35): 4496 4808 resolution: {integrity: sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==} ··· 4523 4835 proxy-from-env: 1.1.0 4524 4836 transitivePeerDependencies: 4525 4837 - debug 4526 - dev: true 4527 4838 4528 4839 /b4a@1.6.6: 4529 4840 resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==} ··· 5031 5342 engines: {node: '>= 0.8'} 5032 5343 dependencies: 5033 5344 delayed-stream: 1.0.0 5034 - dev: true 5035 5345 5036 5346 /commander@11.1.0: 5037 5347 resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} ··· 5417 5727 /delayed-stream@1.0.0: 5418 5728 resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 5419 5729 engines: {node: '>=0.4.0'} 5420 - dev: true 5421 5730 5422 5731 /depd@1.1.2: 5423 5732 resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} ··· 5475 5784 '@leichtgewicht/ip-codec': 2.0.5 5476 5785 dev: true 5477 5786 5787 + /doctrine@3.0.0: 5788 + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 5789 + engines: {node: '>=6.0.0'} 5790 + dependencies: 5791 + esutils: 2.0.3 5792 + dev: true 5793 + 5478 5794 /dom-serializer@2.0.0: 5479 5795 resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} 5480 5796 dependencies: ··· 5837 6153 eslint: 9.1.0 5838 6154 dev: true 5839 6155 6156 + /eslint-plugin-react-hooks@4.6.0(eslint@8.57.0): 6157 + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} 6158 + engines: {node: '>=10'} 6159 + peerDependencies: 6160 + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 6161 + dependencies: 6162 + eslint: 8.57.0 6163 + dev: true 6164 + 6165 + /eslint-plugin-react-refresh@0.4.6(eslint@8.57.0): 6166 + resolution: {integrity: sha512-NjGXdm7zgcKRkKMua34qVO9doI7VOxZ6ancSvBELJSSoX97jyndXcSoa8XBh69JoB31dNz3EEzlMcizZl7LaMA==} 6167 + peerDependencies: 6168 + eslint: '>=7' 6169 + dependencies: 6170 + eslint: 8.57.0 6171 + dev: true 6172 + 5840 6173 /eslint-plugin-simple-import-sort@12.1.0(eslint@9.1.0): 5841 6174 resolution: {integrity: sha512-Y2fqAfC11TcG/WP3TrI1Gi3p3nc8XJyEOJYHyEPEGI/UAgNx6akxxlX74p7SbAQdLcgASKhj8M0GKvH3vq/+ig==} 5842 6175 peerDependencies: ··· 5863 6196 estraverse: 4.3.0 5864 6197 dev: true 5865 6198 6199 + /eslint-scope@7.2.2: 6200 + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 6201 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 6202 + dependencies: 6203 + esrecurse: 4.3.0 6204 + estraverse: 5.3.0 6205 + dev: true 6206 + 5866 6207 /eslint-scope@8.0.1: 5867 6208 resolution: {integrity: sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==} 5868 6209 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} ··· 5886 6227 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 5887 6228 dev: true 5888 6229 6230 + /eslint@8.57.0: 6231 + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} 6232 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 6233 + hasBin: true 6234 + dependencies: 6235 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 6236 + '@eslint-community/regexpp': 4.10.0 6237 + '@eslint/eslintrc': 2.1.4 6238 + '@eslint/js': 8.57.0 6239 + '@humanwhocodes/config-array': 0.11.14 6240 + '@humanwhocodes/module-importer': 1.0.1 6241 + '@nodelib/fs.walk': 1.2.8 6242 + '@ungap/structured-clone': 1.2.0 6243 + ajv: 6.12.6 6244 + chalk: 4.1.2 6245 + cross-spawn: 7.0.3 6246 + debug: 4.3.4 6247 + doctrine: 3.0.0 6248 + escape-string-regexp: 4.0.0 6249 + eslint-scope: 7.2.2 6250 + eslint-visitor-keys: 3.4.3 6251 + espree: 9.6.1 6252 + esquery: 1.5.0 6253 + esutils: 2.0.3 6254 + fast-deep-equal: 3.1.3 6255 + file-entry-cache: 6.0.1 6256 + find-up: 5.0.0 6257 + glob-parent: 6.0.2 6258 + globals: 13.24.0 6259 + graphemer: 1.4.0 6260 + ignore: 5.3.1 6261 + imurmurhash: 0.1.4 6262 + is-glob: 4.0.3 6263 + is-path-inside: 3.0.3 6264 + js-yaml: 4.1.0 6265 + json-stable-stringify-without-jsonify: 1.0.1 6266 + levn: 0.4.1 6267 + lodash.merge: 4.6.2 6268 + minimatch: 3.1.2 6269 + natural-compare: 1.4.0 6270 + optionator: 0.9.3 6271 + strip-ansi: 6.0.1 6272 + text-table: 0.2.0 6273 + transitivePeerDependencies: 6274 + - supports-color 6275 + dev: true 6276 + 5889 6277 /eslint@9.1.0: 5890 6278 resolution: {integrity: sha512-1TCBecGFQtItia2o39P7Z4BK1X7ByNPxAiWJvwiyTGcOwYnTiiASgMpNA6a+beu8cFPhEDWvPf6mIlYUJv6sgA==} 5891 6279 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} ··· 5945 6333 acorn: 7.4.1 5946 6334 acorn-jsx: 5.3.2(acorn@7.4.1) 5947 6335 eslint-visitor-keys: 1.3.0 6336 + dev: true 6337 + 6338 + /espree@9.6.1: 6339 + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 6340 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 6341 + dependencies: 6342 + acorn: 8.11.3 6343 + acorn-jsx: 5.3.2(acorn@8.11.3) 6344 + eslint-visitor-keys: 3.4.3 5948 6345 dev: true 5949 6346 5950 6347 /esprima@4.0.1: ··· 6170 6567 escape-string-regexp: 1.0.5 6171 6568 dev: true 6172 6569 6570 + /file-entry-cache@6.0.1: 6571 + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 6572 + engines: {node: ^10.12.0 || >=12.0.0} 6573 + dependencies: 6574 + flat-cache: 3.2.0 6575 + dev: true 6576 + 6173 6577 /file-entry-cache@8.0.0: 6174 6578 resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 6175 6579 engines: {node: '>=16.0.0'} ··· 6237 6641 pkg-dir: 4.2.0 6238 6642 dev: true 6239 6643 6644 + /flat-cache@3.2.0: 6645 + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 6646 + engines: {node: ^10.12.0 || >=12.0.0} 6647 + dependencies: 6648 + flatted: 3.3.1 6649 + keyv: 4.5.4 6650 + rimraf: 3.0.2 6651 + dev: true 6652 + 6240 6653 /flat-cache@4.0.1: 6241 6654 resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 6242 6655 engines: {node: '>=16'} ··· 6268 6681 peerDependenciesMeta: 6269 6682 debug: 6270 6683 optional: true 6271 - dev: true 6272 6684 6273 6685 /for-each@0.3.3: 6274 6686 resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} ··· 6291 6703 asynckit: 0.4.0 6292 6704 combined-stream: 1.0.8 6293 6705 mime-types: 2.1.35 6294 - dev: true 6295 6706 6296 6707 /formdata-polyfill@4.0.10: 6297 6708 resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} ··· 6527 6938 /globals@11.12.0: 6528 6939 resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 6529 6940 engines: {node: '>=4'} 6941 + dev: true 6942 + 6943 + /globals@13.24.0: 6944 + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} 6945 + engines: {node: '>=8'} 6946 + dependencies: 6947 + type-fest: 0.20.2 6530 6948 dev: true 6531 6949 6532 6950 /globals@14.0.0: ··· 7257 7675 7258 7676 /js-tokens@4.0.0: 7259 7677 resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 7260 - dev: true 7261 7678 7262 7679 /js-tokens@9.0.0: 7263 7680 resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==} ··· 7563 7980 wrap-ansi: 9.0.0 7564 7981 dev: true 7565 7982 7983 + /loose-envify@1.4.0: 7984 + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 7985 + hasBin: true 7986 + dependencies: 7987 + js-tokens: 4.0.0 7988 + dev: false 7989 + 7566 7990 /loupe@2.3.7: 7567 7991 resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} 7568 7992 dependencies: ··· 7731 8155 /mime-db@1.52.0: 7732 8156 resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 7733 8157 engines: {node: '>= 0.6'} 7734 - dev: true 7735 8158 7736 8159 /mime-types@2.1.35: 7737 8160 resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 7738 8161 engines: {node: '>= 0.6'} 7739 8162 dependencies: 7740 8163 mime-db: 1.52.0 7741 - dev: true 7742 8164 7743 8165 /mime@1.6.0: 7744 8166 resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} ··· 8772 9194 8773 9195 /proxy-from-env@1.1.0: 8774 9196 resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} 8775 - dev: true 8776 9197 8777 9198 /prr@1.0.1: 8778 9199 resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} ··· 8877 9298 destr: 2.0.3 8878 9299 dev: false 8879 9300 9301 + /react-dom@18.2.0(react@18.2.0): 9302 + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} 9303 + peerDependencies: 9304 + react: ^18.2.0 9305 + dependencies: 9306 + loose-envify: 1.4.0 9307 + react: 18.2.0 9308 + scheduler: 0.23.0 9309 + dev: false 9310 + 8880 9311 /react-is@18.2.0: 8881 9312 resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} 8882 9313 dev: true 9314 + 9315 + /react-refresh@0.14.0: 9316 + resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} 9317 + engines: {node: '>=0.10.0'} 9318 + dev: true 9319 + 9320 + /react@18.2.0: 9321 + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} 9322 + engines: {node: '>=0.10.0'} 9323 + dependencies: 9324 + loose-envify: 1.4.0 9325 + dev: false 8883 9326 8884 9327 /read-package-json-fast@3.0.2: 8885 9328 resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} ··· 9253 9696 requiresBuild: true 9254 9697 dev: true 9255 9698 optional: true 9699 + 9700 + /scheduler@0.23.0: 9701 + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} 9702 + dependencies: 9703 + loose-envify: 1.4.0 9704 + dev: false 9256 9705 9257 9706 /schema-utils@3.3.0: 9258 9707 resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} ··· 10078 10527 10079 10528 /type-fest@0.13.1: 10080 10529 resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} 10530 + engines: {node: '>=10'} 10531 + dev: true 10532 + 10533 + /type-fest@0.20.2: 10534 + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 10081 10535 engines: {node: '>=10'} 10082 10536 dev: true 10083 10537
+1
pnpm-workspace.yaml
··· 1 1 packages: 2 2 - docs 3 + - examples/* 3 4 - packages/*