tryParseUri static method

Urn? tryParseUri(
  1. Uri uri
)

Implementation

static Urn? tryParseUri(Uri uri) {
  if (uri.scheme != schemeName) {
    throw ArgumentError.value(uri, 'uri', 'Not a URN');
  }

  var match = RegExp('^(?<nid>$_nid):(?<nss>$_nss)\$').firstMatch(uri.path);

  if (match == null) {
    return null;
  }

  var nid = match.namedGroup('nid');
  var nss = match.namedGroup('nss');

  if (nid == null || nss == null) {
    return null;
  }

  var query = '?${uri.query}';

  var rqComponentsMatch = RegExp(
    '(\\?\\+$_rComponent)?'
    '(\\?\\=$_qComponent)?',
  ).firstMatch(query);

  Map<String, String> qMap = {};
  String rcomponent = '';

  if (rqComponentsMatch != null) {
    rcomponent = rqComponentsMatch.namedGroup('rcomponent') ?? '';
    qMap = _parseQComponent(rqComponentsMatch.namedGroup('qcomponent') ?? '');
  }

  return Urn(
    nid: nid,
    nss: nss,
    qComponents: qMap,
    rComponent: rcomponent,
    fragment: uri.fragment,
  );
}