RoutePattern constructor

RoutePattern(
  1. String pattern
)

Implementation

factory RoutePattern(String pattern) {
  if (!_vrExp.hasMatch(pattern)) {
    throw ApiError('Invalid route pattern: $pattern');
  }

  final patternSegments = pattern.split('/').where((s) => !nullOrEmpty(s));
  final segments = <_Segment>[];
  var hasWildcard = false;
  for (final segment in patternSegments) {
    final plMatch = _plExp.firstMatch(segment);
    if (plMatch != null) {
      segments.add(_PLSegment(
          segment,
          plMatch.namedGroup(_prefixGroup)!,
          plMatch.namedGroup(_keyGroup)!,
          plMatch.namedGroup(_optionalGroup)!.isNotEmpty));
      continue;
    }

    if (segment == '*') {
      segments.add(_WildcardSegment());
      hasWildcard = true;
      break;
    }

    segments.add(_Segment(segment));
  }

  final matchExp = RegExp(
      '^' + segments.map((s) => s.toMatchExp()).join() + '\\/?\$',
      caseSensitive: false);

  return RoutePattern._(pattern, segments, matchExp, hasWildcard);
}