@dxdeveloperexperience/hygie
Version:
Hygie is an easy-to-use Open-Source REST API allowing you to interact with GIT events. This NestJS API expose a set of customizable rules to automate your project's life cycle.
80 lines (67 loc) • 2.35 kB
text/typescript
import { CronFilenameException } from '../exceptions/cronFilename.exception';
export type CronType = CronInterface | CronInterface[];
export interface CronInterface {
filename: string | string[];
projectURL: string;
gitlabProjectId?: number;
expression?: string;
}
export class CronStandardClass {
filename: string;
projectURL: string;
gitlabProjectId?: number;
expression?: string;
updatedAt: Date;
}
export function isCronInterface(cron: CronType): cron is CronInterface {
return !Array.isArray(cron as CronInterface);
}
export function isCronInterfaceArray(cron: CronType): cron is CronInterface[] {
return Array.isArray(cron as CronInterface[]);
}
export function checkCronFilename(filename): boolean {
return /^cron-.*\.rulesrc$/.test(filename) ? true : false;
}
/**
* Convert any CronType object into CronStandardInterface
*/
export function convertCronType(cron: CronType): CronStandardClass[] {
const cronStandardInterfaces: CronStandardClass[] = new Array();
let cronStandardTpm: CronStandardClass;
let cronInterfaceArray: CronInterface[] = new Array();
if (isCronInterface(cron)) {
cronInterfaceArray.push(cron);
} else {
cronInterfaceArray = cron;
}
cronInterfaceArray.forEach(c => {
if (Array.isArray(c.filename)) {
(c.filename as string[]).forEach(f => {
cronStandardTpm = new CronStandardClass();
cronStandardTpm.expression = c.expression;
cronStandardTpm.projectURL = c.projectURL;
cronStandardTpm.gitlabProjectId = c.gitlabProjectId;
if (!checkCronFilename(f)) {
throw new CronFilenameException(
'Filename must fit the pattern: `cron-*.rulesrc`',
);
}
cronStandardTpm.filename = f;
cronStandardInterfaces.push(cronStandardTpm);
});
} else {
cronStandardTpm = new CronStandardClass();
cronStandardTpm.expression = c.expression;
cronStandardTpm.projectURL = c.projectURL;
cronStandardTpm.gitlabProjectId = c.gitlabProjectId;
if (!checkCronFilename(c.filename)) {
throw new CronFilenameException(
'Filename must fit the pattern: `cron-*.rulesrc`',
);
}
cronStandardTpm.filename = c.filename;
cronStandardInterfaces.push(cronStandardTpm);
}
});
return cronStandardInterfaces;
}