@typegoose/typegoose
Version:
Define Mongoose models using TypeScript classes
38 lines • 2.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.queryMethod = queryMethod;
exports.QueryMethod = queryMethod;
const constants_1 = require("./internal/constants");
const utils_1 = require("./internal/utils");
const logSettings_1 = require("./logSettings");
/**
* Adds a query method to the Class which will then be added to the Schema.
* @param func The Query Method to add
* @example
* ```ts
* interface FindHelpers {
* findByTitle: AsQueryMethod<typeof findByTitle>;
* }
*
* function findByTitle(this: ReturnModelType<typeof Event, FindHelpers>, title: string) {
* return this.find({ title });
* }
*
* @queryMethod(findByTitle)
* class Event {
* @prop()
* public title: string;
* }
*
* const EventModel = getModelForClass<typeof Event, FindHelpers>(Event);
* ```
*/
function queryMethod(func) {
return (target) => {
logSettings_1.logger.info('Adding query method "%s" to %s', func.name, (0, utils_1.getName)(target));
const queryMethods = new Map(Reflect.getMetadata(constants_1.DecoratorKeys.QueryMethod, target) ?? []);
queryMethods.set(func.name, func);
Reflect.defineMetadata(constants_1.DecoratorKeys.QueryMethod, queryMethods, target);
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnlNZXRob2QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcXVlcnlNZXRob2QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE0QkEsa0NBU0M7QUFHdUIsa0NBQVc7QUF2Q25DLG9EQUFxRDtBQUNyRCw0Q0FBMkM7QUFDM0MsK0NBQXVDO0FBR3ZDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxTQUFnQixXQUFXLENBQ3pCLElBQW1GO0lBRW5GLE9BQU8sQ0FBQyxNQUFXLEVBQUUsRUFBRTtRQUNyQixvQkFBTSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUEsZUFBTyxFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDMUUsTUFBTSxZQUFZLEdBQW1CLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMseUJBQWEsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0csWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyxjQUFjLENBQUMseUJBQWEsQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFFLENBQUMsQ0FBQztBQUNKLENBQUMifQ==