feat: Enhanced custom methods with @method decorator#3642
Closed
marshallswain wants to merge 3 commits intov6from
Closed
feat: Enhanced custom methods with @method decorator#3642marshallswain wants to merge 3 commits intov6from
marshallswain wants to merge 3 commits intov6from
Conversation
- Add @method decorator for configuring custom service methods - Support different argument signatures (not just data, params) - Support different HTTP verbs (GET, POST, PUT, PATCH, DELETE) - Support clean URL paths (e.g., /messages/:id/status) - Support internal-only methods with external: false - Add buildMethodConfig() helper for client configuration - Add InferServiceTypes type helper for typed clients - Update REST client to support custom method paths and verbs - Update services and REST client documentation The @method decorator allows custom methods to be first-class citizens with flexible signatures, proper HTTP verb mapping, and clean URLs instead of relying on X-Service-Method headers. Closes #1976 Replaces #3638
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ❌ Deployment failed View logs |
feathers-v6 | d691de1 | Jan 30 2026, 03:17 PM |
- Add clientMethods() to filter and prepare method configs for client - Remove buildMethodConfig(), getClientMethodConfig(), InferServiceTypes - clientMethods() filters out external:false methods and strips server-only properties - Types come from service class definitions, not runtime config - Remove any types from method.ts, use proper typing - Add custom methods type test to declarations.test.ts - Update documentation for new pattern
Member
Author
|
Update: Improved client configuration API** Changed how method configuration is passed to the client to avoid bundling server-side code. Before (problematic): // This required importing service CLASSES, bundling server code into the client
import { buildMethodConfig, type InferServiceTypes } from '@feathersjs/feathers'
import { MessageService } from './services/messages.service'
const services = { messages: MessageService }
export const serviceMethods = buildMethodConfig(services) // instantiated classes internally
export type ServiceTypes = InferServiceTypes<typeof services>After (secure): // Only imports the static methods CONFIG object, not the class implementation
import { clientMethods } from '@feathersjs/feathers'
import { MessageService } from './services/messages.service'
export const serviceMethods = clientMethods({
messages: MessageService.methods // just the static property
})
export type ServiceTypes = {
messages: MessageService // types defined separately
}What
Key insight: Types come from the service class definition itself. The runtime config ( |
a5673bd to
d691de1
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR adds enhanced custom method support for Feathers v6, allowing custom methods to be first-class citizens with flexible signatures, proper HTTP verb mapping, and clean URLs.
Features
@methoddecorator for configuring custom service methodsdata, params)/messages/:id/statusinstead ofX-Service-Methodheader)external: falseclientMethods()helper for client configurationExample
Documentation
@methoddecorator guidedocs/v6-custom-methods-plan.mdTests
All 405 tests pass.
Related