Update plan - Fix frontend imports for cron-parser

Co-authored-by: whyour <22700758+whyour@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2026-01-29 11:31:50 +00:00
parent bcf1cffb88
commit 8de5bff700
9 changed files with 204 additions and 0 deletions

38
test-built-validation.cjs Normal file
View File

@ -0,0 +1,38 @@
// Simulating the built code
const cron_parser_1 = require("cron-parser");
const validateSchedule = (value, helpers) => {
const mockHelpers = {
error: (msg) => ({ error: msg })
};
helpers = helpers || mockHelpers;
try {
if (cron_parser_1.default.parse(value).hasNext()) {
return value;
}
}
catch (e) {
return helpers.error('any.invalid');
}
return helpers.error('any.invalid');
};
// Test cases
const testExpressions = [
'*/8 * * * *', // 5 fields (every 8 minutes)
'*/8 * * * * ?', // 6 fields with seconds (every 8 seconds) - FROM THE IMAGE
'0 */8 * * * *', // 6 fields with seconds (every 8 minutes at 0 seconds)
'*/5 * * * * *', // 6 fields (every 5 seconds)
];
console.log('Testing built validation logic:\n');
testExpressions.forEach(expr => {
const result = validateSchedule(expr);
if (result === expr) {
console.log(`✓ "${expr}" - VALID`);
} else {
console.log(`✗ "${expr}" - INVALID:`, result);
}
});

23
test-cron.mjs Normal file
View File

@ -0,0 +1,23 @@
import * as parser from 'cron-parser';
console.log('Available exports:', Object.keys(parser));
console.log('Default export:', parser.default);
// Try with the named export
const testExpressions = [
'*/8 * * * *', // 5 fields (every 8 minutes)
'*/8 * * * * ?', // 6 fields with seconds (every 8 seconds)
'0 */8 * * * *', // 6 fields with seconds (every 8 minutes at 0 seconds)
'*/5 * * * * *', // 6 fields (every 5 seconds)
];
console.log('\nTesting cron-parser with various expressions:\n');
testExpressions.forEach(expr => {
try {
const parsed = parser.CronExpressionParser.parse(expr);
console.log(`✓ "${expr}" - VALID, hasNext: ${parsed.hasNext()}`);
} catch (e) {
console.log(`✗ "${expr}" - INVALID: ${e.message}`);
}
});

22
test-cron2.mjs Normal file
View File

@ -0,0 +1,22 @@
import CronExpressionParser from 'cron-parser';
// Test cases - same as the image shows
const testExpressions = [
'*/8 * * * *', // 5 fields (every 8 minutes)
'*/8 * * * * ?', // 6 fields with seconds (every 8 seconds) - FROM THE IMAGE
];
console.log('Testing with default import (like the validation code):\n');
testExpressions.forEach(expr => {
try {
const parsed = CronExpressionParser.parse(expr);
if (parsed.hasNext()) {
console.log(`✓ "${expr}" - VALID, hasNext: true`);
} else {
console.log(`? "${expr}" - parsed but hasNext is false`);
}
} catch (e) {
console.log(`✗ "${expr}" - INVALID: ${e.message}`);
}
});

6
test-cron3.mjs Normal file
View File

@ -0,0 +1,6 @@
import CronExpressionParser from 'cron-parser';
console.log('Default import type:', typeof CronExpressionParser);
console.log('Default import:', CronExpressionParser);
console.log('Is it a class?', CronExpressionParser.prototype);
console.log('Available static methods:', Object.getOwnPropertyNames(CronExpressionParser));

20
test-cron4.mjs Normal file
View File

@ -0,0 +1,20 @@
import CronExpressionParser from 'cron-parser';
// Test both ways
const testExpressions = [
'*/8 * * * *', // 5 fields (every 8 minutes)
'*/8 * * * * ?', // 6 fields with seconds (every 8 seconds)
];
console.log('Testing CronExpressionParser.CronExpressionParser.parse:\n');
testExpressions.forEach(expr => {
try {
const parsed = CronExpressionParser.CronExpressionParser.parse(expr);
if (parsed.hasNext()) {
console.log(`✓ "${expr}" - VALID`);
}
} catch (e) {
console.log(`✗ "${expr}" - INVALID: ${e.message}`);
}
});

8
test-import.cjs Normal file
View File

@ -0,0 +1,8 @@
const cronParser = require('cron-parser');
console.log('Type:', typeof cronParser);
console.log('Keys:', Object.keys(cronParser));
console.log('\nCronExpressionParser:', cronParser.CronExpressionParser);
console.log('Default:', cronParser.default);
console.log('\nIs parse a method on default?', typeof cronParser.default?.parse);
console.log('Is parse a method on CronExpressionParser?', typeof cronParser.CronExpressionParser?.parse);

23
test-import2.cjs Normal file
View File

@ -0,0 +1,23 @@
const cronParser = require('cron-parser');
const CronExpressionParser = cronParser.default || cronParser; // Simulating esModuleInterop
// Test cases
const testExpressions = [
'*/8 * * * *', // 5 fields (every 8 minutes)
'*/8 * * * * ?', // 6 fields with seconds (every 8 seconds)
'0 */8 * * * *', // 6 fields with seconds (every 8 minutes at 0 seconds)
'*/5 * * * * *', // 6 fields (every 5 seconds)
];
console.log('Testing with .default:\n');
testExpressions.forEach(expr => {
try {
const parsed = CronExpressionParser.parse(expr);
if (parsed.hasNext()) {
console.log(`✓ "${expr}" - VALID`);
}
} catch (e) {
console.log(`✗ "${expr}" - INVALID: ${e.message}`);
}
});

32
test-validation.cjs Normal file
View File

@ -0,0 +1,32 @@
const CronExpressionParser = require('cron-parser');
// Replicate the validation logic
const validateSchedule = (value) => {
try {
if (CronExpressionParser.parse(value).hasNext()) {
return { valid: true };
}
} catch (e) {
return { valid: false, error: e.message };
}
return { valid: false, error: 'hasNext() returned false' };
};
// Test cases from the issue
const testExpressions = [
'*/8 * * * *', // 5 fields (every 8 minutes)
'*/8 * * * * ?', // 6 fields with seconds (every 8 seconds) - FROM THE IMAGE
'0 */8 * * * *', // 6 fields with seconds (every 8 minutes at 0 seconds)
'*/5 * * * * *', // 6 fields (every 5 seconds)
];
console.log('Testing validation logic with CommonJS:\n');
testExpressions.forEach(expr => {
const result = validateSchedule(expr);
if (result.valid) {
console.log(`✓ "${expr}" - VALID`);
} else {
console.log(`✗ "${expr}" - INVALID: ${result.error}`);
}
});

32
test-validation.mjs Normal file
View File

@ -0,0 +1,32 @@
import CronExpressionParser from 'cron-parser';
// Replicate the validation logic
const validateSchedule = (value) => {
try {
if (CronExpressionParser.parse(value).hasNext()) {
return { valid: true };
}
} catch (e) {
return { valid: false, error: e.message };
}
return { valid: false, error: 'hasNext() returned false' };
};
// Test cases from the issue
const testExpressions = [
'*/8 * * * *', // 5 fields (every 8 minutes)
'*/8 * * * * ?', // 6 fields with seconds (every 8 seconds) - FROM THE IMAGE
'0 */8 * * * *', // 6 fields with seconds (every 8 minutes at 0 seconds)
'*/5 * * * * *', // 6 fields (every 5 seconds)
];
console.log('Testing validation logic:\n');
testExpressions.forEach(expr => {
const result = validateSchedule(expr);
if (result.valid) {
console.log(`✓ "${expr}" - VALID`);
} else {
console.log(`✗ "${expr}" - INVALID: ${result.error}`);
}
});