@adonisjs-community/girouette
Version:
An AdonisJS package allowing decorators-based routing.
93 lines (92 loc) • 2.87 kB
JavaScript
import { REFLECT_ROUTES_KEY } from '../constants.js';
/**
* Creates a method decorator for HTTP routes in AdonisJS v6
* @param method The HTTP method (e.g., 'GET', 'POST')
* @returns A decorator function
*/
const MethodDecorator = (method) => (pattern, name) => {
return (target, key, descriptor) => {
const routes = Reflect.getMetadata(REFLECT_ROUTES_KEY, target.constructor) || {};
const newRoute = { method, pattern, name };
if (routes[key]) {
routes[key] = { ...newRoute, ...routes[key] };
}
else {
routes[key] = { method, pattern, name };
}
Reflect.defineMetadata(REFLECT_ROUTES_KEY, routes, target.constructor);
return descriptor;
};
};
/**
* Decorator for GET requests in AdonisJS v6
* @param pattern The route pattern
* @param name Optional name for the route
* @example
* // In an AdonisJS v6 controller:
* @Get('/users')
* async index({ response }: HttpContext) {
* // Handle GET request for /users
* }
*/
export const Get = MethodDecorator('GET');
/**
* Decorator for POST requests in AdonisJS v6
* @param pattern The route pattern
* @param name Optional name for the route
* @example
* // In an AdonisJS v6 controller:
* @Post('/users')
* async store({ request, response }: HttpContext) {
* // Handle POST request for /users
* }
*/
export const Post = MethodDecorator('POST');
/**
* Decorator for PUT requests in AdonisJS v6
* @param pattern The route pattern
* @param name Optional name for the route
* @example
* // In an AdonisJS v6 controller:
* @Put('/users/:id')
* async update({ params, request, response }: HttpContext) {
* // Handle PUT request for /users/:id
* }
*/
export const Put = MethodDecorator('PUT');
/**
* Decorator for PATCH requests in AdonisJS v6
* @param pattern The route pattern
* @param name Optional name for the route
* @example
* // In an AdonisJS v6 controller:
* @Patch('/users/:id')
* async partialUpdate({ params, request, response }: HttpContext) {
* // Handle PATCH request for /users/:id
* }
*/
export const Patch = MethodDecorator('PATCH');
/**
* Decorator for DELETE requests in AdonisJS v6
* @param pattern The route pattern
* @param name Optional name for the route
* @example
* // In an AdonisJS v6 controller:
* @Delete('/users/:id')
* async destroy({ params, response }: HttpContext) {
* // Handle DELETE request for /users/:id
* }
*/
export const Delete = MethodDecorator('DELETE');
/**
* Decorator for handling any HTTP method in AdonisJS v6
* @param pattern The route pattern
* @param name Optional name for the route
* @example
* // In an AdonisJS v6 controller:
* @Any('/wildcard')
* async handleAnyMethod({ request, response }: HttpContext) {
* // Handle any HTTP method for /wildcard
* }
*/
export const Any = MethodDecorator('ANY');