UNPKG

node-cron-management

Version:
61 lines (60 loc) 2.57 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.cronJob = exports.JOB_SYMBOL = void 0; require("reflect-metadata"); const cron = __importStar(require("node-cron")); const moment = __importStar(require("moment-timezone")); exports.JOB_SYMBOL = Symbol("job"); /** * * Decorator for the cron job method * @param cronExpression : Expression defining how often the function should run * @param handlerTag : tag to uniquely identify the handler so the handler can be started or stopped using the tag * @returns : MethodDecorator */ function cronJob(cronExpression, handlerTag, timezone) { return function (target, propertyKey, descriptor) { const isValid = cron.validate(cronExpression); if (!isValid) throw new Error(`${cronExpression} is not a valid cron expression`); if (timezone) { const isTimezone = moment.tz.zone(timezone); if (!isTimezone) throw new Error(`${timezone} is not a valid timezone`); } const allHandlers = Reflect.getMetadata(exports.JOB_SYMBOL, target.constructor) || []; allHandlers.push({ handlerTag, cronExpression, func: propertyKey, constructor: target.constructor, className: target.constructor.name, timezone: timezone !== null && timezone !== void 0 ? timezone : "", }); Reflect.defineMetadata(exports.JOB_SYMBOL, allHandlers, target.constructor); }; } exports.cronJob = cronJob;