resolveResource function

Future<Json> resolveResource(
  1. dynamic resource,
  2. API api
)

Implementation

Future<Json> resolveResource(dynamic resource, API api) async {
  if (resource is! String && resource is! int) throw _ResourceError('text');

  resource = resource.toString().trim();

  if (_onlyNumberRe.hasMatch(resource)) {
    return _resolveTargetResource(
        _transformNumberResourceToTarget(int.parse(resource)));
  }

  if (_systemMentionRe.hasMatch(resource)) {
    return _resolveTargetResource(_transformMentionResourceToTarget(resource));
  }

  if (_parseOwnerResourceRe.hasMatch(resource)) {
    return _resolveOwnerResource(resource);
  }

  if (_parseTargetResourceRe.hasMatch(resource)) {
    return _resolveTargetResource(resource);
  }

  if (!_isVKUrlRe.hasMatch(resource)) {
    return _resolveSlugResource(resource, api);
  }

  final resourceUrl =
      !_isHttpsRe.hasMatch(resource) ? 'https://$resource' : resource;

  final raw = Uri.parse(resourceUrl);

  if (raw.path == '/') throw _ResourceError('URL should contain path');

  final pathname = raw.path.substring(1);

  final search = raw.queryParameters['w'] ?? raw.queryParameters['z'];

  if (search != null && _parseOwnerResourceRe.hasMatch(search)) {
    return _resolveOwnerResource(search);
  }

  if (_parseOwnerResourceRe.hasMatch(pathname)) {
    return _resolveOwnerResource(pathname);
  }

  if (_parseTargetResourceRe.hasMatch(pathname)) {
    return _resolveTargetResource(pathname);
  }

  return _resolveSlugResource(pathname, api);
}