@anglr/rest
Version:
Angular module representing rest services
51 lines • 2.2 kB
JavaScript
import { isPresent } from '@jscrpt/common';
import { BodyParameterMiddleware, PathParameterMiddleware, QueryParameterMiddleware, QueryObjectParameterMiddleware, HeaderParameterMiddleware } from '../middlewares';
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function paramBuilder(paramName, middleware) {
return function (key) {
return function (target, propertyKey, parameterIndex) {
const paramObj = {
key: key,
parameterIndex: parameterIndex
};
//params metadata missing
target.parameters = target.parameters ?? {};
//params metadata for method missing
target.parameters[propertyKey] = target.parameters[propertyKey] ?? {};
//parameter transforms object missing
target.parameters[propertyKey][paramName] = target.parameters[propertyKey][paramName] ?? [];
//adds params
target.parameters[propertyKey][paramName]?.push(paramObj);
//sets middleware
if (isPresent(middleware)) {
target.parameters[propertyKey].middlewareTypes = target.parameters[propertyKey].middlewareTypes ?? [];
target.parameters[propertyKey].middlewareTypes?.push(middleware);
}
};
};
}
/**
* Path variable of a method's url, type: string
* @param key - path key to bind value
*/
export const Path = paramBuilder('path', PathParameterMiddleware);
/**
* Query value of a method's url, type: string
* @param key - query key to bind value
*/
export const Query = paramBuilder('query', QueryParameterMiddleware);
/**
* Query object serialized with dot notation separating hierarchies
*/
export const QueryObject = paramBuilder('queryObject', QueryObjectParameterMiddleware)('queryObject');
/**
* Body of a REST method, json stringify applied
* Only one body per method!
*/
export const Body = paramBuilder('body', BodyParameterMiddleware)('body');
/**
* Custom header of a REST method, type: string
* @param key - header key to bind value
*/
export const Header = paramBuilder('header', HeaderParameterMiddleware);
//# sourceMappingURL=parameters.decorator.js.map