resolveResource function
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);
}