| // Copyright (c) 2019, 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 '../package_config.dart'; |
| |
| /// General superclass of most errors and exceptions thrown by this package. |
| /// |
| /// Only covers errors thrown while parsing package configuration files. |
| /// Programming errors and I/O exceptions are not covered. |
| abstract class PackageConfigError { |
| PackageConfigError._(); |
| } |
| |
| class PackageConfigArgumentError extends ArgumentError |
| implements PackageConfigError { |
| PackageConfigArgumentError( |
| Object? super.value, |
| String super.name, |
| String super.message, |
| ) : super.value(); |
| |
| PackageConfigArgumentError.from(ArgumentError error) |
| : super.value(error.invalidValue, error.name, error.message); |
| } |
| |
| class PackageConfigFormatException extends FormatException |
| implements PackageConfigError { |
| PackageConfigFormatException( |
| super.message, |
| Object? super.source, [ |
| super.offset, |
| ]); |
| |
| PackageConfigFormatException.from(FormatException exception) |
| : super(exception.message, exception.source, exception.offset); |
| } |
| |
| /// Exception reported when finding a configuration with an unaccepted version. |
| /// |
| /// Used by [findPackageConfig] and similar functions if specifying a |
| /// `minVersion`, or by parsing if finding a package configuration file |
| /// with a version that is not in the range |
| /// [PackageConfig.minVersion]..[PackageConfig.maxVersion]. |
| abstract class PackageConfigVersionException { |
| abstract final int actualVersion; |
| abstract final int? minVersion; |
| abstract final int? maxVersion; |
| |
| factory PackageConfigVersionException.clientLimit( |
| int actualVersion, |
| int? minVersion, |
| int? maxVersion, |
| ) = _PackageConfigVersionFormatException; |
| |
| factory PackageConfigVersionException.supportedLimit( |
| int actualVersion, |
| String keyName, |
| ) = _PackageConfigVersionArgumentError; |
| |
| static String _rangeMessage(int actual, int? minVersion, int? maxVersion) { |
| String errorMessage; |
| if (minVersion != null) { |
| if (maxVersion != null) { |
| errorMessage = |
| minVersion == maxVersion |
| ? 'Must be $minVersion' |
| : 'Must be in the range $minVersion..$maxVersion'; |
| } else { |
| errorMessage = 'Must be at least $minVersion'; |
| } |
| } else if (maxVersion != null) { |
| errorMessage = 'Must be at most $maxVersion'; |
| } else { |
| errorMessage = 'Not accepted'; |
| } |
| return 'Configuration version $actual: $errorMessage'; |
| } |
| } |
| |
| /// Error when configuration specifies an unsupported configuration version. |
| class _PackageConfigVersionArgumentError extends PackageConfigArgumentError |
| implements PackageConfigVersionException { |
| _PackageConfigVersionArgumentError(int actualVersion, String name) |
| : super( |
| actualVersion, |
| name, |
| PackageConfigVersionException._rangeMessage( |
| actualVersion, |
| PackageConfig.minVersion, |
| PackageConfig.maxVersion, |
| ), |
| ); |
| @override |
| int get actualVersion => super.invalidValue as int; |
| @override |
| int get minVersion => PackageConfig.minVersion; |
| @override |
| int get maxVersion => PackageConfig.maxVersion; |
| } |
| |
| /// Exception when found configuration doesn't match client's set limits. |
| class _PackageConfigVersionFormatException extends PackageConfigFormatException |
| implements PackageConfigVersionException { |
| @override |
| final int actualVersion; |
| @override |
| final int? minVersion; |
| @override |
| final int? maxVersion; |
| _PackageConfigVersionFormatException( |
| this.actualVersion, |
| this.minVersion, |
| this.maxVersion, |
| ) : super( |
| PackageConfigVersionException._rangeMessage( |
| actualVersion, |
| minVersion, |
| maxVersion, |
| ), |
| null, |
| ); |
| } |
| |
| /// The default `onError` handler. |
| // ignore: only_throw_errors |
| Never throwError(Object error, [Object? _]) => throw error; |