Router/Methods.js

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Unlock = exports.Lock = exports.Purge = exports.Trace = exports.Options = exports.Head = exports.Copy = exports.Delete = exports.Patch = exports.Put = exports.Post = exports.Get = void 0;
var Router_1 = require("../@types/Router");
var defineMethod_1 = __importDefault(require("../app/defineMethod"));
/**
 * This decorator is used to define a GET Route.
 *
 * The middlewares can be [Class Middlewares (Injected)]{@link module:Injector~Middleware}
 * as strings or function middlewares.
 * @static
 * @return {any}
 * @memberof module:Router
 * @param {string} [child=/] The path of the route (This will have as prefix the Action's path)
 * @param {?Array.<string | Function>} middlewares Middlewares
 * @example <caption>Example usage of [\@Get]{@link Get}.</caption>
 * [\@Action]{@link Action}('/path', ['ClassMiddleware', functionMiddleware])
 * export default class ActionName {
 *    [\@Retrieve]{@link Retrieve}('Responder.Name')
 *    private [responder]{@link Responder}?: [ResponderName]{@link Responder};
 *
 *    [\@Get]{@link Get}('/sub-path', ['SubPathMiddleware']) // The url will be /api/path/sub-path
 *    public findAll(
 *      [\@Request]{@link @Request} req: Request,
 *      [\@Query]{@link @Query} query: any,
 *      [\@Response]{@link @Response} res: Response
 *    ): Promise<any> {
 *      return this.[responder]{@link Responder}!.[success]{@link Responder}(res);
 *    }
 *
 *    // The url will be /api/path/sub-path/:id (where :id is a path parameter)
 *    [\@Get]{@link Get}('/sub-path/:id', ['SubPathMiddleware'])
 *    public findById(
 *      [\@Params]{@link @Params} params: any,
 *      [\@Response]{@link @Response} res: Response
 *    ): Promise<any> {
 *      return this.[responder]{@link Responder}!.[success]{@link Responder}(res);
 *    }
 * }
 */
var Get = function (child, middlewares) {
    return (0, defineMethod_1.default)(Router_1.ActionMethods.GET, child, middlewares);
};
exports.Get = Get;
/**
 * This decorator is used to define a POST Route.
 *
 * The middlewares can be [Class Middlewares (Injected)]{@link module:Injector~Middleware}
 * as strings or function middlewares.
 * @static
 * @return {any}
 * @memberof module:Router
 * @param {string} [child=/] The path of the route (This will have as prefix the Action's path)
 * @param {?Array.<string | Function>} middlewares Middlewares
 * @example <caption>Example usage of [\@Post]{@link Post}.</caption>
 * [\@Action]{@link Action}('/path', ['ClassMiddleware', functionMiddleware])
 * export default class ActionName {
 *    [\@Retrieve]{@link Retrieve}('Responder.Name')
 *    private [responder]{@link Responder}?: [ResponderName]{@link Responder};
 *
 *    [\@Retrieve]{@link Retrieve}('Domain.Name')
 *    private [domain]{@link Domain}?: [DomainName]{@link Domain};
 *
 *    [\@Post]{@link Post}('/sub-path', ['SubPathMiddleware']) // The url will be /api/path/sub-path
 *    public saveItem(
 *      [\@Body]{@link @Body} body: any,
 *      [\@Response]{@link @Response} res: Response
 *    ): Promise<any> {
 *      const { userId } = (
 *        await this.[domain]{@link Domain}!.[saveUser]{@link Domain}('Some Name')
 *      );
 *      return this.[responder]{@link Responder}!.[created]{@link Responder}(res, userId);
 *    }
 * }
 */
var Post = function (child, middlewares) { return (0, defineMethod_1.default)(Router_1.ActionMethods.POST, child, middlewares); };
exports.Post = Post;
/**
 * This decorator is used to define a PUT Route.
 *
 * The middlewares can be [Class Middlewares (Injected)]{@link module:Injector~Middleware}
 * as strings or function middlewares.
 * @static
 * @return {any}
 * @memberof module:Router
 * @param {string} [child=/] The path of the route (This will have as prefix the Action's path)
 * @param {?Array.<string | Function>} middlewares Middlewares
 * @example <caption>Example usage of [\@Put]{@link Put}.</caption>
 * [\@Action]{@link Action}('/path', ['ClassMiddleware', functionMiddleware])
 * export default class ActionName {
 *    [\@Retrieve]{@link Retrieve}('Responder.Name')
 *    private [responder]{@link Responder}?: [ResponderName]{@link Responder};
 *
 *    // The url will be /api/path/sub-path/:id (where :id is a path parameter)
 *    [\@Put]{@link Put}('/sub-path/:id', ['SubPathMiddleware'])
 *    public replaceItem(
 *      [\@Request]{@link @Request} req: Request,
 *      [\@Response]{@link @Response} res: Response
 *    ): Promise<any> {
 *      return this.[responder]{@link Responder}!.[success]{@link Responder}(res);
 *    }
 * }
 */
var Put = function (child, middlewares) {
    return (0, defineMethod_1.default)(Router_1.ActionMethods.PUT, child, middlewares);
};
exports.Put = Put;
/**
 * This decorator is used to define a PATCH Route.
 *
 * The middlewares can be [Class Middlewares (Injected)]{@link module:Injector~Middleware}
 * as strings or function middlewares.
 * @static
 * @return {any}
 * @memberof module:Router
 * @param {string} [child=/] The path of the route (This will have as prefix the Action's path)
 * @param {?Array.<string | Function>} middlewares Middlewares
 * @example <caption>Example usage of [\@Patch]{@link Patch}.</caption>
 * [\@Action]{@link Action}('/path', ['ClassMiddleware', functionMiddleware])
 * export default class ActionName {
 *    [\@Retrieve]{@link Retrieve}('Responder.Name')
 *    private [responder]{@link Responder}?: [ResponderName]{@link Responder};
 *
 *    // The url will be /api/path/sub-path/:id (where :id is a path parameter)
 *    [\@Patch]{@link Patch}('/sub-path/:id', ['SubPathMiddleware'])
 *    public updateItem(
 *      [\@Request]{@link @Request} req: Request,
 *      [\@Response]{@link @Response} res: Response
 *    ): Promise<any> {
 *      return this.[responder]{@link Responder}!.[success]{@link Responder}(res);
 *    }
 * }
 */
var Patch = function (child, middlewares) { return (0, defineMethod_1.default)(Router_1.ActionMethods.PATCH, child, middlewares); };
exports.Patch = Patch;
/**
 * This decorator is used to define a DELETE Route.
 *
 * The middlewares can be [Class Middlewares (Injected)]{@link module:Injector~Middleware}
 * as strings or function middlewares.
 * @static
 * @return {any}
 * @memberof module:Router
 * @param {string} [child=/] The path of the route (This will have as prefix the Action's path)
 * @param {?Array.<string | Function>} middlewares Middlewares
 * @example <caption>Example usage of [\@Delete]{@link Delete}.</caption>
 * [\@Action]{@link Action}('/path', ['ClassMiddleware', functionMiddleware])
 * export default class ActionName {
 *    [\@Retrieve]{@link Retrieve}('Responder.Name')
 *    private [responder]{@link Responder}?: [ResponderName]{@link Responder};
 *
 *    // The url will be /api/path/sub-path/:id (where :id is a path parameter)
 *    [\@Delete]{@link Delete}('/sub-path/:id', ['SubPathMiddleware'])
 *    public deleteItem(
 *      [\@Request]{@link @Request} req: Request,
 *      [\@Response]{@link @Response} res: Response
 *    ): Promise<any> {
 *      return this.[responder]{@link Responder}!.[success]{@link Responder}(res);
 *    }
 * }
 */
var Delete = function (child, middlewares) { return (0, defineMethod_1.default)(Router_1.ActionMethods.DELETE, child, middlewares); };
exports.Delete = Delete;
/**
 * This decorator is used to define a COPY Route.
 *
 * The middlewares can be [Class Middlewares (Injected)]{@link module:Injector~Middleware}
 * as strings or function middlewares.
 * @static
 * @return {any}
 * @memberof module:Router
 * @param {string} [child=/] The path of the route (This will have as prefix the Action's path)
 * @param {?Array.<string | Function>} middlewares Middlewares
 * @example <caption>Example usage of [\@Copy]{@link Copy}.</caption>
 * [\@Action]{@link Action}('/path', ['ClassMiddleware', functionMiddleware])
 * export default class ActionName {
 *    [\@Retrieve]{@link Retrieve}('Responder.Name')
 *    private [responder]{@link Responder}?: [ResponderName]{@link Responder};
 *
 *    // The url will be /api/path/sub-path/:id (where :id is a path parameter)
 *    [\@Copy]{@link Copy}('/sub-path/:id', ['SubPathMiddleware'])
 *    public item(
 *      [\@Request]{@link @Request} req: Request,
 *      [\@Response]{@link @Response} res: Response
 *    ): Promise<any> {
 *      return this.[responder]{@link Responder}!.[success]{@link Responder}(res);
 *    }
 * }
 */
var Copy = function (child, middlewares) { return (0, defineMethod_1.default)(Router_1.ActionMethods.COPY, child, middlewares); };
exports.Copy = Copy;
/**
 * This decorator is used to define a HEAD Route.
 *
 * The middlewares can be [Class Middlewares (Injected)]{@link module:Injector~Middleware}
 * as strings or function middlewares.
 * @static
 * @return {any}
 * @memberof module:Router
 * @param {string} [child=/] The path of the route (This will have as prefix the Action's path)
 * @param {?Array.<string | Function>} middlewares Middlewares
 * @example <caption>Example usage of [\@Head]{@link Head}.</caption>
 * [\@Action]{@link Action}('/path', ['ClassMiddleware', functionMiddleware])
 * export default class ActionName {
 *    [\@Retrieve]{@link Retrieve}('Responder.Name')
 *    private [responder]{@link Responder}?: [ResponderName]{@link Responder};
 *
 *    // The url will be /api/path/sub-path/:id (where :id is a path parameter)
 *    [\@Head]{@link Head}('/sub-path/:id', ['SubPathMiddleware'])
 *    public item(
 *      [\@Request]{@link @Request} req: Request,
 *      [\@Response]{@link @Response} res: Response
 *    ): Promise<any> {
 *      return this.[responder]{@link Responder}!.[success]{@link Responder}(res);
 *    }
 * }
 */
var Head = function (child, middlewares) { return (0, defineMethod_1.default)(Router_1.ActionMethods.HEAD, child, middlewares); };
exports.Head = Head;
/**
 * This decorator is used to define a OPTIONS Route.
 *
 * The middlewares can be [Class Middlewares (Injected)]{@link module:Injector~Middleware}
 * as strings or function middlewares.
 * @static
 * @return {any}
 * @memberof module:Router
 * @param {string} [child=/] The path of the route (This will have as prefix the Action's path)
 * @param {?Array.<string | Function>} middlewares Middlewares
 * @example <caption>Example usage of [\@Options]{@link Options}.</caption>
 * [\@Action]{@link Action}('/path', ['ClassMiddleware', functionMiddleware])
 * export default class ActionName {
 *    [\@Retrieve]{@link Retrieve}('Responder.Name')
 *    private [responder]{@link Responder}?: [ResponderName]{@link Responder};
 *
 *    // The url will be /api/path/sub-path/:id (where :id is a path parameter)
 *    [\@Options]{@link Options}('/sub-path/:id', ['SubPathMiddleware'])
 *    public item(
 *      [\@Request]{@link @Request} req: Request,
 *      [\@Response]{@link @Response} res: Response
 *    ): Promise<any> {
 *      return this.[responder]{@link Responder}!.[success]{@link Responder}(res);
 *    }
 * }
 */
var Options = function (child, middlewares) { return (0, defineMethod_1.default)(Router_1.ActionMethods.OPTIONS, child, middlewares); };
exports.Options = Options;
/**
 * This decorator is used to define a TRACE Route.
 *
 * The middlewares can be [Class Middlewares (Injected)]{@link module:Injector~Middleware}
 * as strings or function middlewares.
 * @static
 * @return {any}
 * @memberof module:Router
 * @param {string} [child=/] The path of the route (This will have as prefix the Action's path)
 * @param {?Array.<string | Function>} middlewares Middlewares
 * @example <caption>Example usage of [\@Trace]{@link Trace}.</caption>
 * [\@Action]{@link Action}('/path', ['ClassMiddleware', functionMiddleware])
 * export default class ActionName {
 *    [\@Retrieve]{@link Retrieve}('Responder.Name')
 *    private [responder]{@link Responder}?: [ResponderName]{@link Responder};
 *
 *    // The url will be /api/path/sub-path/:id (where :id is a path parameter)
 *    [\@Trace]{@link Trace}('/sub-path/:id', ['SubPathMiddleware'])
 *    public item(
 *      [\@Request]{@link @Request} req: Request,
 *      [\@Response]{@link @Response} res: Response
 *    ): Promise<any> {
 *      return this.[responder]{@link Responder}!.[success]{@link Responder}(res);
 *    }
 * }
 */
var Trace = function (child, middlewares) { return (0, defineMethod_1.default)(Router_1.ActionMethods.TRACE, child, middlewares); };
exports.Trace = Trace;
/**
 * This decorator is used to define a PURGE Route.
 *
 * The middlewares can be [Class Middlewares (Injected)]{@link module:Injector~Middleware}
 * as strings or function middlewares.
 * @static
 * @return {any}
 * @memberof module:Router
 * @param {string} [child=/] The path of the route (This will have as prefix the Action's path)
 * @param {?Array.<string | Function>} middlewares Middlewares
 * @example <caption>Example usage of [\@Purge]{@link Purge}.</caption>
 * [\@Action]{@link Action}('/path', ['ClassMiddleware', functionMiddleware])
 * export default class ActionName {
 *    [\@Retrieve]{@link Retrieve}('Responder.Name')
 *    private [responder]{@link Responder}?: [ResponderName]{@link Responder};
 *
 *    // The url will be /api/path/sub-path/:id (where :id is a path parameter)
 *    [\@Purge]{@link Purge}('/sub-path/:id', ['SubPathMiddleware'])
 *    public item(
 *      [\@Request]{@link @Request} req: Request,
 *      [\@Response]{@link @Response} res: Response
 *    ): Promise<any> {
 *      return this.[responder]{@link Responder}!.[success]{@link Responder}(res);
 *    }
 * }
 */
var Purge = function (child, middlewares) { return (0, defineMethod_1.default)(Router_1.ActionMethods.PURGE, child, middlewares); };
exports.Purge = Purge;
/**
 * This decorator is used to define a LOCK Route.
 *
 * The middlewares can be [Class Middlewares (Injected)]{@link module:Injector~Middleware}
 * as strings or function middlewares.
 * @static
 * @return {any}
 * @memberof module:Router
 * @param {string} [child=/] The path of the route (This will have as prefix the Action's path)
 * @param {?Array.<string | Function>} middlewares Middlewares
 * @example <caption>Example usage of [\@Lock]{@link Lock}.</caption>
 * [\@Action]{@link Action}('/path', ['ClassMiddleware', functionMiddleware])
 * export default class ActionName {
 *    [\@Retrieve]{@link Retrieve}('Responder.Name')
 *    private [responder]{@link Responder}?: [ResponderName]{@link Responder};
 *
 *    // The url will be /api/path/sub-path/:id (where :id is a path parameter)
 *    [\@Lock]{@link Lock}('/sub-path/:id', ['SubPathMiddleware'])
 *    public item(
 *      [\@Request]{@link @Request} req: Request,
 *      [\@Response]{@link @Response} res: Response
 *    ): Promise<any> {
 *      return this.[responder]{@link Responder}!.[success]{@link Responder}(res);
 *    }
 * }
 */
var Lock = function (child, middlewares) { return (0, defineMethod_1.default)(Router_1.ActionMethods.LOCK, child, middlewares); };
exports.Lock = Lock;
/**
 * This decorator is used to define a UNLOCK Route.
 *
 * The middlewares can be [Class Middlewares (Injected)]{@link module:Injector~Middleware}
 * as strings or function middlewares.
 * @static
 * @return {any}
 * @memberof module:Router
 * @param {string} [child=/] The path of the route (This will have as prefix the Action's path)
 * @param {?Array.<string | Function>} middlewares Middlewares
 * @example <caption>Example usage of [\@Unlock]{@link Unlock}.</caption>
 * [\@Action]{@link Action}('/path', ['ClassMiddleware', functionMiddleware])
 * export default class ActionName {
 *    [\@Retrieve]{@link Retrieve}('Responder.Name')
 *    private [responder]{@link Responder}?: [ResponderName]{@link Responder};
 *
 *    // The url will be /api/path/sub-path/:id (where :id is a path parameter)
 *    [\@Unlock]{@link Unlock}('/sub-path/:id', ['SubPathMiddleware'])
 *    public item(
 *      [\@Request]{@link @Request} req: Request,
 *      [\@Response]{@link @Response} res: Response
 *    ): Promise<any> {
 *      return this.[responder]{@link Responder}!.[success]{@link Responder}(res);
 *    }
 * }
 */
var Unlock = function (child, middlewares) { return (0, defineMethod_1.default)(Router_1.ActionMethods.UNLOCK, child, middlewares); };
exports.Unlock = Unlock;
//# sourceMappingURL=Methods.js.map