parseCronDuration function

Duration? parseCronDuration(
  1. Object? value, [
  2. Duration? def
])

Parses a Duration from a config value: a number of seconds, or a string with a unit suffix: ms, s, m, h or d (e.g. 30s, 5m, 1h).

Returns def if value is null or invalid.

Implementation

Duration? parseCronDuration(Object? value, [Duration? def]) {
  if (value == null) return def;
  if (value is Duration) return value;
  if (value is num) return Duration(milliseconds: (value * 1000).round());

  var s = value.toString().trim().toLowerCase();
  if (s.isEmpty) return def;

  var m = RegExp(r'^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)?$').firstMatch(s);
  if (m == null) return def;

  var n = double.parse(m.group(1)!);
  var unitMs = switch (m.group(2)) {
    'ms' => 1,
    'm' => 60 * 1000,
    'h' => 60 * 60 * 1000,
    'd' => 24 * 60 * 60 * 1000,
    _ => 1000,
  };

  return Duration(milliseconds: (n * unitMs).round());
}