| // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'dart:async'; |
| |
| import 'package:pub_semver/pub_semver.dart'; |
| |
| import '../language_version.dart'; |
| import '../package_name.dart'; |
| import '../pubspec.dart'; |
| import '../source.dart'; |
| import '../system_cache.dart'; |
| |
| /// A [Null Object] that represents a source not recognized by pub. |
| /// |
| /// It provides some default behavior so that pub can work with sources it |
| /// doesn't recognize. |
| /// |
| /// [null object]: http://en.wikipedia.org/wiki/Null_Object_pattern |
| class UnknownSource extends Source { |
| @override |
| final String name; |
| |
| UnknownSource(this.name); |
| |
| @override |
| BoundSource bind(SystemCache systemCache) => |
| _BoundUnknownSource(this, systemCache); |
| |
| /// Two unknown sources are the same if their names are the same. |
| @override |
| bool operator ==(other) => other is UnknownSource && other.name == name; |
| |
| @override |
| int get hashCode => name.hashCode; |
| |
| @override |
| bool descriptionsEqual(description1, description2) => |
| description1 == description2; |
| |
| @override |
| int hashDescription(description) => description.hashCode; |
| |
| @override |
| PackageRef parseRef( |
| String name, |
| description, { |
| String? containingPath, |
| LanguageVersion? languageVersion, |
| }) => |
| PackageRef(name, this, description); |
| |
| @override |
| PackageId parseId(String name, Version version, description, |
| {String? containingPath}) => |
| PackageId(name, this, version, description); |
| } |
| |
| class _BoundUnknownSource extends BoundSource { |
| @override |
| final UnknownSource source; |
| |
| @override |
| final SystemCache systemCache; |
| |
| _BoundUnknownSource(this.source, this.systemCache); |
| |
| @override |
| Future<List<PackageId>> doGetVersions(PackageRef ref, Duration? maxAge) => |
| throw UnsupportedError( |
| "Cannot get package versions from unknown source '${source.name}'."); |
| |
| @override |
| Future<Pubspec> doDescribe(PackageId id) => throw UnsupportedError( |
| "Cannot describe a package from unknown source '${source.name}'."); |
| |
| /// Returns the directory where this package can be found locally. |
| @override |
| String getDirectory(PackageId id, {String? relativeFrom}) => |
| throw UnsupportedError( |
| "Cannot find a package from an unknown source '${source.name}'."); |
| } |