fix: custom endpoints with method: 'put' (#9037)
### What?
Fixes support for custom endpoints with `method: 'put'`.
Previously, this didn't work:
```ts
export default buildConfigWithDefaults({
collections: [ ],
endpoints: [
{
method: 'put',
handler: () => new Response(),
path: '/put',
},
],
})
```
### Why?
We supported this in 2.0 and docs are saying that we can use `'put'` as
`method`
https://payloadcms.com/docs/beta/rest-api/overview#custom-endpoints
### How?
Implements the `REST_PUT` export for `@payloadcms/next/routes`, updates
all templates. Additionally, adds tests to ensure root/collection level
custom endpoints with all necessary methods execute properly.
Fixes https://github.com/payloadcms/payload/issues/8807
-->
This commit is contained in:
@@ -7,6 +7,7 @@ import {
|
||||
GRAPHQL_POST as createGraphqlPOST,
|
||||
REST_PATCH as createPATCH,
|
||||
REST_POST as createPOST,
|
||||
REST_PUT as createPUT,
|
||||
} from '@payloadcms/next/routes'
|
||||
import * as qs from 'qs-esm'
|
||||
|
||||
@@ -67,6 +68,11 @@ export class NextRESTClient {
|
||||
args: { params: Promise<{ slug: string[] }> },
|
||||
) => Promise<Response>
|
||||
|
||||
private _PUT: (
|
||||
request: Request,
|
||||
args: { params: Promise<{ slug: string[] }> },
|
||||
) => Promise<Response>
|
||||
|
||||
private readonly config: SanitizedConfig
|
||||
|
||||
private token: string
|
||||
@@ -82,6 +88,7 @@ export class NextRESTClient {
|
||||
this._POST = createPOST(config)
|
||||
this._DELETE = createDELETE(config)
|
||||
this._PATCH = createPATCH(config)
|
||||
this._PUT = createPUT(config)
|
||||
this._GRAPHQL_POST = createGraphqlPOST(config)
|
||||
}
|
||||
|
||||
@@ -221,4 +228,17 @@ export class NextRESTClient {
|
||||
})
|
||||
return this._POST(request, { params: Promise.resolve({ slug }) })
|
||||
}
|
||||
|
||||
async PUT(path: ValidPath, options: FileArg & RequestInit & RequestOptions): Promise<Response> {
|
||||
const { slug, params, url } = this.generateRequestParts(path)
|
||||
const { query, ...rest } = options
|
||||
const queryParams = generateQueryString(query, params)
|
||||
|
||||
const request = new Request(`${url}${queryParams}`, {
|
||||
...rest,
|
||||
headers: this.buildHeaders(options),
|
||||
method: 'PUT',
|
||||
})
|
||||
return this._PUT(request, { params: Promise.resolve({ slug }) })
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user