@@ -40,6 +40,7 @@ import type {
40
40
import { isNotNullish } from './utils'
41
41
import type { NamedSchemaError } from './standardSchema'
42
42
43
+ const rawResultType = /* @__PURE__ */ Symbol ( )
43
44
const resultType = /* @__PURE__ */ Symbol ( )
44
45
const baseQuery = /* @__PURE__ */ Symbol ( )
45
46
@@ -118,10 +119,52 @@ type EndpointDefinitionWithQuery<
118
119
arg : QueryArg ,
119
120
) : unknown
120
121
121
- /** A schema for the result *before* it's passed to `transformResponse` */
122
+ /**
123
+ * A schema for the result *before* it's passed to `transformResponse`
124
+ *
125
+ * @example
126
+ * ```ts
127
+ * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
128
+ * import * as v from "valibot"
129
+ *
130
+ * const postSchema = v.object({ id: v.number(), name: v.string() })
131
+ * type Post = v.InferOutput<typeof postSchema>
132
+ *
133
+ * const api = createApi({
134
+ * baseQuery: fetchBaseQuery({ baseUrl: '/' }),
135
+ * endpoints: (build) => ({
136
+ * getPostName: build.query<Post, { id: number }>({
137
+ * query: ({ id }) => `/post/${id}`,
138
+ * rawResponseSchema: postSchema,
139
+ * transformResponse: (post) => post.name,
140
+ * }),
141
+ * })
142
+ * })
143
+ * ```
144
+ */
122
145
rawResponseSchema ?: StandardSchemaV1 < RawResultType >
123
146
124
- /** A schema for the error object returned by the `query` or `queryFn`, *before* it's passed to `transformErrorResponse` */
147
+ /**
148
+ * A schema for the error object returned by the `query` or `queryFn`, *before* it's passed to `transformErrorResponse`
149
+ *
150
+ * @example
151
+ * ```ts
152
+ * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
153
+ * import * as v from "valibot"
154
+ * import {customBaseQuery, baseQueryErrorSchema} from "./customBaseQuery"
155
+ *
156
+ * const api = createApi({
157
+ * baseQuery: customBaseQuery,
158
+ * endpoints: (build) => ({
159
+ * getPost: build.query<Post, { id: number }>({
160
+ * query: ({ id }) => `/post/${id}`,
161
+ * rawErrorResponseSchema: baseQueryErrorSchema,
162
+ * transformErrorResponse: (error) => error.data,
163
+ * }),
164
+ * })
165
+ * })
166
+ * ```
167
+ */
125
168
rawErrorResponseSchema ?: StandardSchemaV1 < BaseQueryError < BaseQuery > >
126
169
}
127
170
@@ -193,32 +236,98 @@ type BaseEndpointTypes<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {
193
236
ResultType : ResultType
194
237
}
195
238
196
- export type BaseEndpointDefinition <
239
+ interface CommonEndpointDefinition <
197
240
QueryArg ,
198
241
BaseQuery extends BaseQueryFn ,
199
242
ResultType ,
200
- RawResultType extends BaseQueryResult < BaseQuery > = BaseQueryResult < BaseQuery > ,
201
- > = (
202
- | ( [ CastAny < BaseQueryResult < BaseQuery > , { } > ] extends [ NEVER ]
203
- ? never
204
- : EndpointDefinitionWithQuery <
205
- QueryArg ,
206
- BaseQuery ,
207
- ResultType ,
208
- RawResultType
209
- > )
210
- | EndpointDefinitionWithQueryFn < QueryArg , BaseQuery , ResultType >
211
- ) & {
212
- /** A schema for the arguments to be passed to the `query` or `queryFn` */
243
+ > {
244
+ /**
245
+ * A schema for the arguments to be passed to the `query` or `queryFn`.
246
+ *
247
+ * @example
248
+ * ```ts
249
+ * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
250
+ * import * as v from "valibot"
251
+ *
252
+ * const api = createApi({
253
+ * baseQuery: fetchBaseQuery({ baseUrl: '/' }),
254
+ * endpoints: (build) => ({
255
+ * getPost: build.query<Post, { id: number }>({
256
+ * query: ({ id }) => `/post/${id}`,
257
+ * argSchema: v.object({ id: v.number() }),
258
+ * }),
259
+ * })
260
+ * })
261
+ * ```
262
+ */
213
263
argSchema ?: StandardSchemaV1 < QueryArg >
214
264
215
- /** A schema for the result (including `transformResponse` if provided) */
265
+ /**
266
+ * A schema for the result (including `transformResponse` if provided)
267
+ *
268
+ * @example
269
+ * ```ts
270
+ * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
271
+ * import * as v from "valibot"
272
+ *
273
+ * const postSchema = v.object({ id: v.number(), name: v.string() })
274
+ * type Post = v.InferOutput<typeof postSchema>
275
+ *
276
+ * const api = createApi({
277
+ * baseQuery: fetchBaseQuery({ baseUrl: '/' }),
278
+ * endpoints: (build) => ({
279
+ * getPost: build.query<Post, { id: number }>({
280
+ * query: ({ id }) => `/post/${id}`,
281
+ * responseSchema: postSchema,
282
+ * }),
283
+ * })
284
+ * })
285
+ * ```
286
+ */
216
287
responseSchema ?: StandardSchemaV1 < ResultType >
217
288
218
- /** A schema for the error object returned by the `query` or `queryFn` (including `transformErrorResponse` if provided) */
289
+ /**
290
+ * A schema for the error object returned by the `query` or `queryFn` (including `transformErrorResponse` if provided)
291
+ *
292
+ * @example
293
+ * ```ts
294
+ * import { createApi } from '@reduxjs/toolkit/query/react'
295
+ * import * as v from "valibot"
296
+ * import { customBaseQuery, baseQueryErrorSchema } from "./customBaseQuery"
297
+ *
298
+ * const api = createApi({
299
+ * baseQuery: customBaseQuery,
300
+ * endpoints: (build) => ({
301
+ * getPost: build.query<Post, { id: number }>({
302
+ * query: ({ id }) => `/post/${id}`,
303
+ * errorResponseSchema: baseQueryErrorSchema,
304
+ * }),
305
+ * })
306
+ * })
307
+ * ```
308
+ */
219
309
errorResponseSchema ?: StandardSchemaV1 < BaseQueryError < BaseQuery > >
220
310
221
- /** A schema for the `meta` property returned by the `query` or `queryFn` */
311
+ /**
312
+ * A schema for the `meta` property returned by the `query` or `queryFn`
313
+ *
314
+ * @example
315
+ * ```ts
316
+ * import { createApi } from '@reduxjs/toolkit/query/react'
317
+ * import * as v from "valibot"
318
+ * import { customBaseQuery, baseQueryMetaSchema } from "./customBaseQuery"
319
+ *
320
+ * const api = createApi({
321
+ * baseQuery: customBaseQuery,
322
+ * endpoints: (build) => ({
323
+ * getPost: build.query<Post, { id: number }>({
324
+ * query: ({ id }) => `/post/${id}`,
325
+ * metaSchema: baseQueryMetaSchema,
326
+ * }),
327
+ * })
328
+ * })
329
+ * ```
330
+ */
222
331
metaSchema ?: StandardSchemaV1 < BaseQueryMeta < BaseQuery > >
223
332
224
333
/**
@@ -237,12 +346,32 @@ export type BaseEndpointDefinition<
237
346
238
347
onSchemaFailure ?: SchemaFailureHandler
239
348
skipSchemaValidation ?: boolean
349
+ }
240
350
241
- /* phantom type */
242
- [ resultType ] ?: ResultType
243
- /* phantom type */
244
- [ baseQuery ] ?: BaseQuery
245
- } & HasRequiredProps <
351
+ export type BaseEndpointDefinition <
352
+ QueryArg ,
353
+ BaseQuery extends BaseQueryFn ,
354
+ ResultType ,
355
+ RawResultType extends BaseQueryResult < BaseQuery > = BaseQueryResult < BaseQuery > ,
356
+ > = (
357
+ | ( [ CastAny < BaseQueryResult < BaseQuery > , { } > ] extends [ NEVER ]
358
+ ? never
359
+ : EndpointDefinitionWithQuery <
360
+ QueryArg ,
361
+ BaseQuery ,
362
+ ResultType ,
363
+ RawResultType
364
+ > )
365
+ | EndpointDefinitionWithQueryFn < QueryArg , BaseQuery , ResultType >
366
+ ) &
367
+ CommonEndpointDefinition < QueryArg , BaseQuery , ResultType > & {
368
+ /* phantom type */
369
+ [ rawResultType ] ?: RawResultType
370
+ /* phantom type */
371
+ [ resultType ] ?: ResultType
372
+ /* phantom type */
373
+ [ baseQuery ] ?: BaseQuery
374
+ } & HasRequiredProps <
246
375
BaseQueryExtraOptions < BaseQuery > ,
247
376
{ extraOptions : BaseQueryExtraOptions < BaseQuery > } ,
248
377
{ extraOptions ?: BaseQueryExtraOptions < BaseQuery > }
0 commit comments