| // Copyright (c) 2023, 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:io'; | |
| import 'config.dart'; | |
| import 'source.dart'; | |
| class EnvironmentSource extends Source { | |
| /// Configuration options passed in via the [Platform.environment]. | |
| /// | |
| /// The keys have been transformed by `EnvironmentParser.parseKey`. | |
| /// | |
| /// Environment values are left intact. | |
| /// | |
| /// Stored as a flat non-hierarchical structure, keys contain `.`. | |
| final Map<String, String> _environment; | |
| EnvironmentSource(this._environment); | |
| @override | |
| String? optionalString(String key) => _environment[key]; | |
| @override | |
| List<String>? optionalStringList( | |
| String key, { | |
| String? splitPattern, | |
| }) { | |
| final envValue = _environment[key]; | |
| if (envValue == null) { | |
| return null; | |
| } | |
| if (splitPattern != null) { | |
| return envValue.split(splitPattern); | |
| } | |
| return [envValue]; | |
| } | |
| @override | |
| bool? optionalBool(String key) { | |
| final stringValue = optionalString(key); | |
| if (stringValue != null) { | |
| Source.throwIfUnexpectedValue(key, stringValue, Config.boolStrings.keys); | |
| return Config.boolStrings[stringValue]!; | |
| } | |
| return null; | |
| } | |
| @override | |
| int? optionalInt(String key) { | |
| final stringValue = optionalString(key); | |
| if (stringValue != null) { | |
| try { | |
| return int.parse(stringValue); | |
| } on FormatException catch (e) { | |
| throw FormatException( | |
| "Unexpected value '$stringValue' for key '$key'. Expected an int." | |
| ' ${e.message}'); | |
| } | |
| } | |
| return null; | |
| } | |
| @override | |
| double? optionalDouble(String key) { | |
| final stringValue = optionalString(key); | |
| if (stringValue != null) { | |
| try { | |
| return double.parse(stringValue); | |
| } on FormatException catch (e) { | |
| throw FormatException( | |
| "Unexpected value '$stringValue' for key '$key'. Expected a double." | |
| ' ${e.message}'); | |
| } | |
| } | |
| return null; | |
| } | |
| @override | |
| String toString() => 'EnvironmentSource($_environment)'; | |
| /// Environment path are not resolved. | |
| @override | |
| Uri? get baseUri => null; | |
| } |