From 8de5bff7007eb5b9fcfe8f7b861a2a4feedfe18a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 11:31:50 +0000 Subject: [PATCH] Update plan - Fix frontend imports for cron-parser Co-authored-by: whyour <22700758+whyour@users.noreply.github.com> --- test-built-validation.cjs | 38 ++++++++++++++++++++++++++++++++++++++ test-cron.mjs | 23 +++++++++++++++++++++++ test-cron2.mjs | 22 ++++++++++++++++++++++ test-cron3.mjs | 6 ++++++ test-cron4.mjs | 20 ++++++++++++++++++++ test-import.cjs | 8 ++++++++ test-import2.cjs | 23 +++++++++++++++++++++++ test-validation.cjs | 32 ++++++++++++++++++++++++++++++++ test-validation.mjs | 32 ++++++++++++++++++++++++++++++++ 9 files changed, 204 insertions(+) create mode 100644 test-built-validation.cjs create mode 100644 test-cron.mjs create mode 100644 test-cron2.mjs create mode 100644 test-cron3.mjs create mode 100644 test-cron4.mjs create mode 100644 test-import.cjs create mode 100644 test-import2.cjs create mode 100644 test-validation.cjs create mode 100644 test-validation.mjs diff --git a/test-built-validation.cjs b/test-built-validation.cjs new file mode 100644 index 00000000..6cca7996 --- /dev/null +++ b/test-built-validation.cjs @@ -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); + } +}); diff --git a/test-cron.mjs b/test-cron.mjs new file mode 100644 index 00000000..23c52b25 --- /dev/null +++ b/test-cron.mjs @@ -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}`); + } +}); diff --git a/test-cron2.mjs b/test-cron2.mjs new file mode 100644 index 00000000..1600a7d9 --- /dev/null +++ b/test-cron2.mjs @@ -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}`); + } +}); diff --git a/test-cron3.mjs b/test-cron3.mjs new file mode 100644 index 00000000..3fd00bb6 --- /dev/null +++ b/test-cron3.mjs @@ -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)); diff --git a/test-cron4.mjs b/test-cron4.mjs new file mode 100644 index 00000000..c5f122fb --- /dev/null +++ b/test-cron4.mjs @@ -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}`); + } +}); diff --git a/test-import.cjs b/test-import.cjs new file mode 100644 index 00000000..1cf298cc --- /dev/null +++ b/test-import.cjs @@ -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); diff --git a/test-import2.cjs b/test-import2.cjs new file mode 100644 index 00000000..8b2cdc1c --- /dev/null +++ b/test-import2.cjs @@ -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}`); + } +}); diff --git a/test-validation.cjs b/test-validation.cjs new file mode 100644 index 00000000..24561830 --- /dev/null +++ b/test-validation.cjs @@ -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}`); + } +}); diff --git a/test-validation.mjs b/test-validation.mjs new file mode 100644 index 00000000..35774f93 --- /dev/null +++ b/test-validation.mjs @@ -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}`); + } +});