Request
Request is a class that represents a request sent to the server. It contains all the necessary information to make a request, like endpoint, method, headers, data, and much more.
It is executed at any time via methods like
send
or
exec
.
We can set it up with options like endpoint, method, headers and more. We can choose some of advanced settings like cache, invalidation patterns, concurrency, retries and much, much more.
import { Request } from "@hyper-fetch/core"
Parameters
class Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext> {
constructor(client: Client, requestOptions: ClientRequestOptions<Endpoint, Client>, initialRequestConfiguration: RequestConfigurationType<Payload, Endpoint extends string ? ExtractUrlParams<Endpoint<Endpoint>> : never, QueryParams, Endpoint, ExtractAdapterOptionsType<ExtractClientAdapterType<Client>>, ExtractAdapterMethodType<ExtractClientAdapterType<Client>>>) {};
used: boolean;
unstable_mock: { config: MockerConfigType; fn: (options: { request: RequestInstance; requestId: string }) => MockResponseType<Response, LocalError | ExtractClientGlobalError<Client>, ExtractClientAdapterType<Client>> };
unstable_hasQuery: HasQuery;
unstable_hasPayload: HasPayload;
unstable_hasParams: HasParams;
unstable_hasMutationContext: MutationContext;
staleTime: number;
scope: null | string;
retryTime: number;
retry: number;
requestOptions: ClientRequestOptions<Endpoint, Client>;
queued: boolean;
queryParams: EmptyTypes | QueryParams;
queryKey: string;
payload: PayloadType<Payload>;
params: EmptyTypes | ExtractUrlParams<Endpoint>;
options: ExtractAdapterOptionsType<ExtractClientAdapterType<Client>>;
offline: boolean;
method: ExtractAdapterMethodType<ExtractClientAdapterType<Client>>;
isMockerEnabled: boolean;
initialRequestConfiguration: RequestConfigurationType<Payload, Endpoint extends string ? ExtractUrlParams<Endpoint<Endpoint>> : never, QueryParams, Endpoint, ExtractAdapterOptionsType<ExtractClientAdapterType<Client>>, ExtractAdapterMethodType<ExtractClientAdapterType<Client>>>;
headers: HeadersInit;
endpoint: Endpoint;
deduplicateTime: null | number;
deduplicate: boolean;
client: Client;
cancelable: boolean;
cacheTime: number;
cacheKey: string;
cache: boolean;
auth: boolean;
abortKey: string;
$hooks: RequestHooks<RequestInstance>;
exec() => RequestSendType<Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>>;
send() => RequestSendType<Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>>;
abort() => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
clearMock() => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
clone<NewData, NewParams, NewQueryParams>(configuration?: RequestConfigurationType<Payload, EmptyTypes | ExtractUrlParams<Endpoint>, QueryParams, Endpoint, ExtractAdapterOptionsType<ExtractClientAdapterType<Client>>, ExtractAdapterMethodType<ExtractClientAdapterType<Client>>>) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, NewData, NewParams, NewQueryParams, MutationContext>;
dehydrate(config?: { override?: boolean; response?: ResponseType<Response, LocalError | ExtractClientGlobalError<Client>, ExtractClientAdapterType<Client>> }) => undefined | HydrateDataType<Response, (LocalError | ExtractClientGlobalError<Client>), ExtractClientAdapterType<Client>>;
read() => undefined | ResponseType<Response, (LocalError | ExtractClientGlobalError<Client>), ExtractClientAdapterType<Client>>;
setAbortKey(abortKey: string) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
setAuth(auth: boolean) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
setCache(cache: undefined | boolean) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
setCacheKey(cacheKey: string) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
setCacheTime(cacheTime: undefined | number) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
setCancelable(cancelable: boolean) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
setDeduplicate(deduplicate: boolean) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
setDeduplicateTime(deduplicateTime: number) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
setHeaders(headers: HeadersInit) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
setMock(fn: (options: { request: Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, undefined>; requestId: string }) => SyncOrAsync<MockResponseType<Response, LocalError | ExtractClientGlobalError<Client>, ExtractClientAdapterType<Client>>>, config: MockerConfigType) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
setMockingEnabled(isMockerEnabled: boolean) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
setOffline(offline: boolean) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
setOptimistic<Ctx>(callback: OptimisticCallback<Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>, Ctx>) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, Ctx>;
setOptions(options: ExtractAdapterOptionsType<ExtractClientAdapterType<Client>>) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, true, MutationContext>;
setParams<P>(params: P) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, P extends null ? false : true, HasQuery, MutationContext>;
setPayload<P>(payload: P) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, P extends null ? false : true, HasParams, HasQuery, MutationContext>;
setPayloadMapper<MappedPayload>(payloadMapper: (data: Payload) => MappedPayload) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
setQueryKey(queryKey: string) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
setQueryParams(queryParams: QueryParams) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, true, MutationContext>;
setQueued(queued: boolean) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
setRequestMapper<NewRequest>(requestMapper: RequestMapper<Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>, NewRequest>) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
setResponseMapper<MappedResponse>(responseMapper?: ResponseMapper<Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>, MappedResponse>) => Request<MappedResponse extends ResponseType<R, any, any> ? R : Response, Payload, QueryParams, MappedResponse extends ResponseType<any, E, any> ? E : LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
setRetry(retry: undefined | number) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
setRetryOnError(callback: RetryOnErrorCallbackType<Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, undefined>>) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
setRetryTime(retryTime: undefined | number) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
setScope(scopeId: string) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
setStaleTime(staleTime: undefined | number) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
setUsed(used: boolean) => Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>;
toJSON() => RequestJSON<Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>>;
fromJSON<NewResponse, NewPayload, NewQueryParams, NewLocalError, NewEndpoint, NewClient, NewHasPayload, NewHasParams, NewHasQuery>(client: NewClient, json: RequestJSON<Request<NewResponse, NewPayload, NewQueryParams, NewLocalError, NewEndpoint, NewClient, NewHasPayload, NewHasParams, NewHasQuery, undefined>>) => Request<NewResponse, NewPayload, NewQueryParams, NewLocalError, NewEndpoint, NewClient, NewHasPayload, NewHasParams, NewHasQuery, undefined>;
}
| Name | Type | Description |
|---|---|---|
| client | | |
| requestOptions | | |
| initialRequestConfiguration | |
Properties
$hooks
Instance-level lifecycle hooks. These callbacks fire for every
send()
/
exec()
call
made on this request instance (and its clones), without needing to pass them to
send()
each time.
Useful for cross-cutting concerns like logging, analytics, or toast notifications.
Each method registers a callback and returns an unsubscribe function. Multiple listeners per hook are supported.
Type
RequestHooks<RequestInstance>
initialRequestConfiguration
Type
RequestConfigurationType<Payload, Endpoint extends string ? ExtractUrlParams<Endpoint<Endpoint>> : never, QueryParams, Endpoint, ExtractAdapterOptionsType<ExtractClientAdapterType<Client>>, ExtractAdapterMethodType<ExtractClientAdapterType<Client>>>
unstable_mock
Type
{ config: MockerConfigType; fn: (options: { request: RequestInstance; requestId: string }) => MockResponseType<Response, LocalError | ExtractClientGlobalError<Client>, ExtractClientAdapterType<Client>> }
Methods
abort()
Preview
abort()
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
clearMock()
Preview
clearMock()
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
clone()
Preview
clone<NewData, NewParams, NewQueryParams>(configuration: RequestConfigurationType<Payload, EmptyTypes | ExtractUrlParams<Endpoint>, QueryParams, Endpoint, ExtractAdapterOptionsType<ExtractClientAdapterType<Client>>, ExtractAdapterMethodType<ExtractClientAdapterType<Client>>>)
Parameters
| Name | Type | Description |
|---|---|---|
| configuration | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, NewData, NewParams, NewQueryParams, MutationContext>
dehydrate()
Preview
dehydrate(config: { override?: boolean; response?: ResponseType<Response, LocalError | ExtractClientGlobalError<Client>, ExtractClientAdapterType<Client>> })
Parameters
| Name | Type | Description |
|---|---|---|
| config | |
Returns
undefined | HydrateDataType<Response, (LocalError | ExtractClientGlobalError<Client>), ExtractClientAdapterType<Client>>
read()
Read the response from cache data
If it returns error and data at the same time, it means that latest request was failed and we show previous data from cache together with error received from actual request
Preview
read()
Returns
undefined | ResponseType<Response, (LocalError | ExtractClientGlobalError<Client>), ExtractClientAdapterType<Client>>
setAbortKey()
Preview
setAbortKey(abortKey: string)
Parameters
| Name | Type | Description |
|---|---|---|
| abortKey | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
setAuth()
Preview
setAuth(auth: boolean)
Parameters
| Name | Type | Description |
|---|---|---|
| auth | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
setCache()
Preview
setCache(cache: undefined | boolean)
Parameters
| Name | Type | Description |
|---|---|---|
| cache | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
setCacheKey()
Preview
setCacheKey(cacheKey: string)
Parameters
| Name | Type | Description |
|---|---|---|
| cacheKey | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
setCacheTime()
Preview
setCacheTime(cacheTime: undefined | number)
Parameters
| Name | Type | Description |
|---|---|---|
| cacheTime | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
setCancelable()
Preview
setCancelable(cancelable: boolean)
Parameters
| Name | Type | Description |
|---|---|---|
| cancelable | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
setDeduplicate()
Preview
setDeduplicate(deduplicate: boolean)
Parameters
| Name | Type | Description |
|---|---|---|
| deduplicate | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
setDeduplicateTime()
Preview
setDeduplicateTime(deduplicateTime: number)
Parameters
| Name | Type | Description |
|---|---|---|
| deduplicateTime | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
setHeaders()
Preview
setHeaders(headers: HeadersInit)
Parameters
| Name | Type | Description |
|---|---|---|
| headers | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
setMock()
Preview
setMock(fn: (options: { request: Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, undefined>; requestId: string }) => SyncOrAsync<MockResponseType<Response, LocalError | ExtractClientGlobalError<Client>, ExtractClientAdapterType<Client>>>, config: MockerConfigType)
Parameters
| Name | Type | Description |
|---|---|---|
| fn | | |
| config | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
setMockingEnabled()
Preview
setMockingEnabled(isMockerEnabled: boolean)
Parameters
| Name | Type | Description |
|---|---|---|
| isMockerEnabled | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
setOffline()
Preview
setOffline(offline: boolean)
Parameters
| Name | Type | Description |
|---|---|---|
| offline | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
setOptimistic()
Configure optimistic update behavior for this request.
The callback runs before the request is sent (in React's
useSubmit
) and receives
the request, client, and payload. Return
context
(available in submit callbacks),
rollback
(called automatically on failure/abort), and
invalidate
(cache keys
invalidated on success).
Preview
setOptimistic<Ctx>(callback: OptimisticCallback<Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>, Ctx>)
Parameters
| Name | Type | Description |
|---|---|---|
| callback | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, Ctx>
setOptions()
Preview
setOptions(options: ExtractAdapterOptionsType<ExtractClientAdapterType<Client>>)
Parameters
| Name | Type | Description |
|---|---|---|
| options | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, true, MutationContext>
setParams()
Preview
setParams<P>(params: P)
Parameters
| Name | Type | Description |
|---|---|---|
| params | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, P extends null ? false : true, HasQuery, MutationContext>
setPayload()
Preview
setPayload<P>(payload: P)
Parameters
| Name | Type | Description |
|---|---|---|
| payload | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, P extends null ? false : true, HasParams, HasQuery, MutationContext>
setPayloadMapper()
Map data before it gets send to the server
Preview
setPayloadMapper<MappedPayload>(payloadMapper: (data: Payload) => MappedPayload)
Parameters
| Name | Type | Description |
|---|---|---|
| payloadMapper | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
setQueryKey()
Preview
setQueryKey(queryKey: string)
Parameters
| Name | Type | Description |
|---|---|---|
| queryKey | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
setQueryParams()
Preview
setQueryParams(queryParams: QueryParams)
Parameters
| Name | Type | Description |
|---|---|---|
| queryParams | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, true, MutationContext>
setQueued()
Preview
setQueued(queued: boolean)
Parameters
| Name | Type | Description |
|---|---|---|
| queued | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
setRequestMapper()
Map request before it gets send to the server
Preview
setRequestMapper<NewRequest>(requestMapper: RequestMapper<Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>, NewRequest>)
Parameters
| Name | Type | Description |
|---|---|---|
| requestMapper | | mapper of the request |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
setResponseMapper()
Map the response to the new interface
Preview
setResponseMapper<MappedResponse>(responseMapper: ResponseMapper<Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>, MappedResponse>)
Parameters
| Name | Type | Description |
|---|---|---|
| responseMapper | | our mapping callback |
Returns
Request<MappedResponse extends ResponseType<R, any, any> ? R : Response, Payload, QueryParams, MappedResponse extends ResponseType<any, E, any> ? E : LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
setRetry()
Preview
setRetry(retry: undefined | number)
Parameters
| Name | Type | Description |
|---|---|---|
| retry | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
setRetryOnError()
Set a callback that controls whether a failed request should be retried.
Called on each failed attempt before scheduling the next retry.
Return
true
to allow the retry,
false
to stop retrying immediately.
Preview
setRetryOnError(callback: RetryOnErrorCallbackType<Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, undefined>>)
Parameters
| Name | Type | Description |
|---|---|---|
| callback | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
setRetryTime()
Preview
setRetryTime(retryTime: undefined | number)
Parameters
| Name | Type | Description |
|---|---|---|
| retryTime | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
setScope()
Set a scope identifier for this request. All keys (cache, queue, abort) are prefixed with this scope, isolating the request from other scopes. In "server" client mode, setting a scope also enables caching (which is otherwise disabled to prevent cross-request leaks).
Preview
setScope(scopeId: string)
Parameters
| Name | Type | Description |
|---|---|---|
| scopeId | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
setStaleTime()
Preview
setStaleTime(staleTime: undefined | number)
Parameters
| Name | Type | Description |
|---|---|---|
| staleTime | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
setUsed()
Preview
setUsed(used: boolean)
Parameters
| Name | Type | Description |
|---|---|---|
| used | |
Returns
Request<Response, Payload, QueryParams, LocalError, Endpoint, Client, HasPayload, HasParams, HasQuery, MutationContext>
toJSON()
Preview
toJSON()
Returns
| Name | Type | Description |
|---|---|---|
| abortKey | | |
| auth | | |
| cache | | |
| cacheKey | | |
| cacheTime | | |
| cancelable | | |
| deduplicate | | |
| deduplicateTime | | |
| disableRequestInterceptors | | |
| disableResponseInterceptors | | |
| endpoint | | |
| hasMock | | |
| headers | | |
| isMockerEnabled | | |
| method | | |
| offline | | |
| options | | |
| params | | |
| payload | | |
| queryKey | | |
| queryParams | | |
| queued | | |
| requestOptions | | |
| retry | | |
| retryTime | | |
| scope | | |
| staleTime | | |
| updatedAbortKey | | |
| updatedCacheKey | | |
| updatedQueryKey | | |
| used | |
fromJSON()
Preview
fromJSON<NewResponse, NewPayload, NewQueryParams, NewLocalError, NewEndpoint, NewClient, NewHasPayload, NewHasParams, NewHasQuery>(client: NewClient, json: RequestJSON<Request<NewResponse, NewPayload, NewQueryParams, NewLocalError, NewEndpoint, NewClient, NewHasPayload, NewHasParams, NewHasQuery, undefined>>)
Parameters
| Name | Type | Description |
|---|---|---|
| client | | |
| json | |
Returns
Request<NewResponse, NewPayload, NewQueryParams, NewLocalError, NewEndpoint, NewClient, NewHasPayload, NewHasParams, NewHasQuery, undefined>
