blob: c58ab1771ebcb3abb30052fd238106cde485bbce [file]
// Copyright (c) 2016, 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.
library fasta.environment_variable;
import 'dart:async' show
Future;
import 'dart:io' show
Directory,
File,
Platform;
import 'errors.dart' show
inputError;
class EnvironmentVariable {
final String name;
final String what;
const EnvironmentVariable(this.name, this.what);
Future<String> get value async {
String value = Platform.environment[name];
if (value == null) return variableNotDefined();
await validate(value);
return value;
}
Future<Null> validate(String value) => new Future<Null>.value();
variableNotDefined() {
inputError(null, null,
"The environment variable '$name' isn't defined. $what");
}
}
class EnvironmentVariableFile extends EnvironmentVariable {
const EnvironmentVariableFile(String name, String what)
: super(name, what);
Future<Null> validate(String value) async {
if (!await new File(value).exists()) notFound(value);
return null;
}
notFound(String value) {
inputError(null, null,"The environment variable '$name' has the value "
"'$value', that isn't a file. $what");
}
}
class EnvironmentVariableDirectory extends EnvironmentVariable {
const EnvironmentVariableDirectory(String name, String what)
: super(name, what);
Future<Null> validate(String value) async {
if (!await new Directory(value).exists()) notFound(value);
return null;
}
notFound(String value) {
inputError(null, null, "The environment variable '$name' has the value "
"'$value', that isn't a directory. $what");
}
}
Future<bool> fileExists(Uri base, String path) async {
return await new File.fromUri(base.resolve(path)).exists();
}