This commit is contained in:
xiaojiujiu 2024-11-30 23:50:17 +00:00 committed by GitHub
commit 7c7e933da4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 47 additions and 0 deletions

View file

@ -56,6 +56,7 @@
"colord": "^2.9.3",
"composerize-ts": "^0.6.2",
"country-code-lookup": "^0.1.0",
"cron-parser": "^4.9.0",
"cron-validator": "^1.3.1",
"cronstrue": "^2.26.0",
"crypto-js": "^4.1.1",

15
pnpm-lock.yaml generated
View file

@ -65,6 +65,9 @@ dependencies:
country-code-lookup:
specifier: ^0.1.0
version: 0.1.0
cron-parser:
specifier: ^4.9.0
version: 4.9.0
cron-validator:
specifier: ^1.3.1
version: 1.3.1
@ -4682,6 +4685,13 @@ packages:
resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==}
dev: false
/cron-parser@4.9.0:
resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==}
engines: {node: '>=12.0.0'}
dependencies:
luxon: 3.5.0
dev: false
/cron-validator@1.3.1:
resolution: {integrity: sha512-C1HsxuPCY/5opR55G5/WNzyEGDWFVG+6GLrA+fW/sCTcP6A6NTjUP2AK7B8n2PyFs90kDG2qzwm8LMheADku6A==}
dev: false
@ -6834,6 +6844,11 @@ packages:
dependencies:
yallist: 4.0.0
/luxon@3.5.0:
resolution: {integrity: sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==}
engines: {node: '>=12'}
dev: false
/magic-string@0.25.9:
resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
dependencies:

View file

@ -1,6 +1,7 @@
<script setup lang="ts">
import cronstrue from 'cronstrue';
import { isValidCron } from 'cron-validator';
import { parseExpression } from 'cron-parser';
import { useStyleStore } from '@/stores/style.store';
function isCronValid(v: string) {
@ -92,6 +93,15 @@ const helpers = [
},
];
function getLastExecutionTimes(cronExpression: string) {
const interval = parseExpression(cronExpression);
const times = [];
for (let i = 0; i < 5; i++) {
times.push(interval.next().toJSON());
}
return times;
}
const cronString = computed(() => {
if (isCronValid(cron.value)) {
return cronstrue.toString(cron.value, cronstrueConfig);
@ -99,6 +109,15 @@ const cronString = computed(() => {
return ' ';
});
const executionTimesString = computed(() => {
if (isCronValid(cron.value)) {
const lastExecutionTimes = getLastExecutionTimes(cron.value);
const executionTimesString = lastExecutionTimes.join('\n');
return `Next 5 execution times:\n${executionTimesString}`;
}
return ' ';
});
const cronValidationRules = [
{
validator: (value: string) => isCronValid(value),
@ -123,6 +142,10 @@ const cronValidationRules = [
{{ cronString }}
</div>
<div class="cron-execution-string">
{{ executionTimesString }}
</div>
<n-divider />
<div flex justify-center>
@ -187,6 +210,14 @@ const cronValidationRules = [
margin: 5px 0 15px;
}
.cron-execution-string{
text-align: center;
font-size: 14px;
opacity: 0.8;
margin: 5px 0 15px;
white-space: pre-wrap;
}
pre {
overflow: auto;
padding: 10px 0;