@versatiledatakit/data-pipelines
Version:
Data Pipelines help Data Engineers develop, deploy, run, and manage data processing workloads (called 'Data Job')
71 lines • 8.34 kB
JavaScript
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
/* eslint-disable no-underscore-dangle */
import { Pipe } from '@angular/core';
import cronstrue from 'cronstrue';
import { CollectionsUtil } from '@versatiledatakit/shared';
import * as i0 from "@angular/core";
export class FormatSchedulePipe {
static _fallbackTransformNonStandardCron(cron) {
const match = `${cron}`.trim().match(/^@hourly|@daily|@midnight|@weekly|@monthly|@yearly|@annually$/);
if (CollectionsUtil.isNil(match)) {
throw new Error('Cron expression cannot be null or undefined.');
}
switch (match.input) {
case '@hourly':
return 'Run once an hour at the beginning of the hour';
case '@daily':
case '@midnight':
return 'Run once a day at midnight';
case '@weekly':
return 'Run once a week at midnight on Sunday morning';
case '@monthly':
return 'Run once a month at midnight of the first day of the month';
case '@yearly':
case '@annually':
return 'Run once a year at midnight of 1 January';
default:
throw new Error('Cron expression is NOT nonstandard predefined scheduling definition.');
}
}
/**
* @inheritDoc
*
* - Cron schedule default format from kubernetes https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/
* - Time in UTC
*/
transform(cronSchedule, defaultResult) {
try {
const defaultValue = defaultResult ?? '';
if (!cronSchedule) {
return defaultValue;
}
//TODO : https://github.com/bradymholt/cRonstrue/issues/94
// cronstrue doesn't support timezones. Need to use another library
return cronstrue.toString(cronSchedule, {
monthStartIndexZero: false,
dayOfWeekStartIndexZero: true
});
}
catch (e) {
try {
return FormatSchedulePipe._fallbackTransformNonStandardCron(cronSchedule);
}
catch (_e) {
console.error(`Parsing error. Cron expression "${cronSchedule}"`);
return `Invalid Cron expression "${cronSchedule}"`;
}
}
}
}
FormatSchedulePipe.ɵfac = function FormatSchedulePipe_Factory(t) { return new (t || FormatSchedulePipe)(); };
FormatSchedulePipe.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "formatSchedule", type: FormatSchedulePipe, pure: true });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FormatSchedulePipe, [{
type: Pipe,
args: [{
name: 'formatSchedule'
}]
}], null, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LXNjaGVkdWxlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLXBpcGVsaW5lcy9zcmMvbGliL3NoYXJlZC9waXBlcy9mb3JtYXQtc2NoZWR1bGUucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCx5Q0FBeUM7QUFFekMsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFcEQsT0FBTyxTQUFTLE1BQU0sV0FBVyxDQUFDO0FBRWxDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFLM0QsTUFBTSxPQUFPLGtCQUFrQjtJQUNuQixNQUFNLENBQUMsaUNBQWlDLENBQUMsSUFBWTtRQUN6RCxNQUFNLEtBQUssR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQywrREFBK0QsQ0FBQyxDQUFDO1FBRXRHLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7U0FDbkU7UUFFRCxRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDakIsS0FBSyxTQUFTO2dCQUNWLE9BQU8sK0NBQStDLENBQUM7WUFDM0QsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLFdBQVc7Z0JBQ1osT0FBTyw0QkFBNEIsQ0FBQztZQUN4QyxLQUFLLFNBQVM7Z0JBQ1YsT0FBTywrQ0FBK0MsQ0FBQztZQUMzRCxLQUFLLFVBQVU7Z0JBQ1gsT0FBTyw0REFBNEQsQ0FBQztZQUN4RSxLQUFLLFNBQVMsQ0FBQztZQUNmLEtBQUssV0FBVztnQkFDWixPQUFPLDBDQUEwQyxDQUFDO1lBQ3REO2dCQUNJLE1BQU0sSUFBSSxLQUFLLENBQUMsc0VBQXNFLENBQUMsQ0FBQztTQUMvRjtJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFNBQVMsQ0FBQyxZQUFvQixFQUFFLGFBQXNCO1FBQ2xELElBQUk7WUFDQSxNQUFNLFlBQVksR0FBRyxhQUFhLElBQUksRUFBRSxDQUFDO1lBRXpDLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ2YsT0FBTyxZQUFZLENBQUM7YUFDdkI7WUFFRCwwREFBMEQ7WUFDMUQsbUVBQW1FO1lBQ25FLE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUU7Z0JBQ3BDLG1CQUFtQixFQUFFLEtBQUs7Z0JBQzFCLHVCQUF1QixFQUFFLElBQUk7YUFDaEMsQ0FBQyxDQUFDO1NBQ047UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNSLElBQUk7Z0JBQ0EsT0FBTyxrQkFBa0IsQ0FBQyxpQ0FBaUMsQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUM3RTtZQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLFlBQVksR0FBRyxDQUFDLENBQUM7Z0JBRWxFLE9BQU8sNEJBQTRCLFlBQVksR0FBRyxDQUFDO2FBQ3REO1NBQ0o7SUFDTCxDQUFDOztvRkF2RFEsa0JBQWtCO3lGQUFsQixrQkFBa0I7dUZBQWxCLGtCQUFrQjtjQUg5QixJQUFJO2VBQUM7Z0JBQ0YsSUFBSSxFQUFFLGdCQUFnQjthQUN6QiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAyMy0yMDI1IEJyb2FkY29tXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5cbmltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IGNyb25zdHJ1ZSBmcm9tICdjcm9uc3RydWUnO1xuXG5pbXBvcnQgeyBDb2xsZWN0aW9uc1V0aWwgfSBmcm9tICdAdmVyc2F0aWxlZGF0YWtpdC9zaGFyZWQnO1xuXG5AUGlwZSh7XG4gICAgbmFtZTogJ2Zvcm1hdFNjaGVkdWxlJ1xufSlcbmV4cG9ydCBjbGFzcyBGb3JtYXRTY2hlZHVsZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBwcml2YXRlIHN0YXRpYyBfZmFsbGJhY2tUcmFuc2Zvcm1Ob25TdGFuZGFyZENyb24oY3Jvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBgJHtjcm9ufWAudHJpbSgpLm1hdGNoKC9eQGhvdXJseXxAZGFpbHl8QG1pZG5pZ2h0fEB3ZWVrbHl8QG1vbnRobHl8QHllYXJseXxAYW5udWFsbHkkLyk7XG5cbiAgICAgICAgaWYgKENvbGxlY3Rpb25zVXRpbC5pc05pbChtYXRjaCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ3JvbiBleHByZXNzaW9uIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAobWF0Y2guaW5wdXQpIHtcbiAgICAgICAgICAgIGNhc2UgJ0Bob3VybHknOlxuICAgICAgICAgICAgICAgIHJldHVybiAnUnVuIG9uY2UgYW4gaG91ciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBob3VyJztcbiAgICAgICAgICAgIGNhc2UgJ0BkYWlseSc6XG4gICAgICAgICAgICBjYXNlICdAbWlkbmlnaHQnOlxuICAgICAgICAgICAgICAgIHJldHVybiAnUnVuIG9uY2UgYSBkYXkgYXQgbWlkbmlnaHQnO1xuICAgICAgICAgICAgY2FzZSAnQHdlZWtseSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdSdW4gb25jZSBhIHdlZWsgYXQgbWlkbmlnaHQgb24gU3VuZGF5IG1vcm5pbmcnO1xuICAgICAgICAgICAgY2FzZSAnQG1vbnRobHknOlxuICAgICAgICAgICAgICAgIHJldHVybiAnUnVuIG9uY2UgYSBtb250aCBhdCBtaWRuaWdodCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSBtb250aCc7XG4gICAgICAgICAgICBjYXNlICdAeWVhcmx5JzpcbiAgICAgICAgICAgIGNhc2UgJ0Bhbm51YWxseSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdSdW4gb25jZSBhIHllYXIgYXQgbWlkbmlnaHQgb2YgMSBKYW51YXJ5JztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDcm9uIGV4cHJlc3Npb24gaXMgTk9UIG5vbnN0YW5kYXJkIHByZWRlZmluZWQgc2NoZWR1bGluZyBkZWZpbml0aW9uLicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKlxuICAgICAqICAgICAgLSBDcm9uIHNjaGVkdWxlIGRlZmF1bHQgZm9ybWF0IGZyb20ga3ViZXJuZXRlcyBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy93b3JrbG9hZHMvY29udHJvbGxlcnMvY3Jvbi1qb2JzL1xuICAgICAqICAgICAgLSBUaW1lIGluIFVUQ1xuICAgICAqL1xuICAgIHRyYW5zZm9ybShjcm9uU2NoZWR1bGU6IHN0cmluZywgZGVmYXVsdFJlc3VsdD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBkZWZhdWx0UmVzdWx0ID8/ICcnO1xuXG4gICAgICAgICAgICBpZiAoIWNyb25TY2hlZHVsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vVE9ETyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9icmFkeW1ob2x0L2NSb25zdHJ1ZS9pc3N1ZXMvOTRcbiAgICAgICAgICAgIC8vIGNyb25zdHJ1ZSBkb2Vzbid0IHN1cHBvcnQgdGltZXpvbmVzLiBOZWVkIHRvIHVzZSBhbm90aGVyIGxpYnJhcnlcbiAgICAgICAgICAgIHJldHVybiBjcm9uc3RydWUudG9TdHJpbmcoY3JvblNjaGVkdWxlLCB7XG4gICAgICAgICAgICAgICAgbW9udGhTdGFydEluZGV4WmVybzogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGF5T2ZXZWVrU3RhcnRJbmRleFplcm86IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBGb3JtYXRTY2hlZHVsZVBpcGUuX2ZhbGxiYWNrVHJhbnNmb3JtTm9uU3RhbmRhcmRDcm9uKGNyb25TY2hlZHVsZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChfZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFBhcnNpbmcgZXJyb3IuIENyb24gZXhwcmVzc2lvbiBcIiR7Y3JvblNjaGVkdWxlfVwiYCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYEludmFsaWQgQ3JvbiBleHByZXNzaW9uIFwiJHtjcm9uU2NoZWR1bGV9XCJgO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19