blob: b302b4a039602d7c200e87f5516ec5f73f9f6aa7 [file] [log] [blame]
// Copyright (c) 2012, 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.
part of dart.io;
/// Information about the environment in which the current program is running.
///
/// Platform provides information such as the operating system,
/// the hostname of the computer, the value of environment variables,
/// the path to the running program,
/// and other global properties of the program being run.
///
/// ## Get the URI of the current Dart script
///
/// Use the [script] getter to get the URI to the currently running
/// Dart script.
/// ```dart
/// import 'dart:io' show Platform;
///
/// void main() {
/// // Get the URI of the script being run.
/// var uri = Platform.script;
/// // Convert the URI to a path.
/// var path = uri.toFilePath();
/// }
/// ```
/// ## Get the value of an environment variable
///
/// The [environment] getter returns a the names and values of environment
/// variables in a [Map] that contains key-value pairs of strings. The Map is
/// unmodifiable. This sample shows how to get the value of the `PATH`
/// environment variable.
/// ```dart
/// import 'dart:io' show Platform;
///
/// void main() {
/// Map<String, String> envVars = Platform.environment;
/// print(envVars['PATH']);
/// }
/// ```
/// ## Determine the OS
///
/// You can get the name of the operating system as a string with the
/// [operatingSystem] getter. You can also use one of the static boolean
/// getters: [isMacOS], [isLinux], [isWindows], etc.
/// ```dart
/// import 'dart:io' show Platform;
///
/// void main() {
/// // Get the operating system as a string.
/// String os = Platform.operatingSystem;
/// // Or, use a predicate getter.
/// if (Platform.isMacOS) {
/// print('is a Mac');
/// } else {
/// print('is not a Mac');
/// }
/// }
/// ```
class Platform {
static final _numberOfProcessors = _Platform.numberOfProcessors;
static final _pathSeparator = _Platform.pathSeparator;
static final _operatingSystem = _Platform.operatingSystem;
static final _operatingSystemVersion = _Platform.operatingSystemVersion;
static final _localHostname = _Platform.localHostname;
static final _version = _Platform.version;
/// The number of individual execution units of the machine.
static int get numberOfProcessors => _numberOfProcessors;
/// The path separator used by the operating system to separate
/// components in file paths.
static String get pathSeparator => _pathSeparator;
/// Get the name of the current locale.
///
/// The result usually consists of
/// - a language (e.g., "en"), or
/// - a language and country code (e.g. "en_US", "de_AT"), or
/// - a language, country code and character set (e.g. "en_US.UTF-8").
///
/// On macOS and iOS, the locale is taken from CFLocaleGetIdentifier.
///
/// On Linux and Fushia, the locale is taken from the "LANG" environment
/// variable, which may be set to any value. For example:
/// ```shell
/// LANG=kitten dart myfile.dart # localeName is "kitten"
/// ```
///
/// On Android, the value will not change while the application is running,
/// even if the user adjusts their language settings.
///
/// See https://en.wikipedia.org/wiki/Locale_(computer_software)
static String get localeName => _Platform.localeName();
/// A string representing the operating system or platform.
///
/// Possible values include:
/// "android"
/// "fuchsia"
/// "ios"
/// "linux"
/// "macos"
/// "windows"
///
/// Note that this list may change over time so platform-specific logic
/// should be guarded by the appropriate boolean getter e.g. [isMacOS].
static String get operatingSystem => _operatingSystem;
/// A string representing the version of the operating system or platform.
///
/// The format of this string will vary by operating system, platform and
/// version and is not suitable for parsing. For example:
/// "Linux 5.11.0-1018-gcp #20~20.04.2-Ubuntu SMP Fri Sep 3 01:01:37 UTC 2021"
/// "Version 14.5 (Build 18E182)"
/// '"Windows 10 Pro" 10.0 (Build 19043)'
static String get operatingSystemVersion => _operatingSystemVersion;
/// The local hostname for the system.
///
/// For example:
/// "mycomputer.corp.example.com"
/// "mycomputer"
///
/// Uses the platform
/// [`gethostname`](https://pubs.opengroup.org/onlinepubs/9699919799/functions/gethostname.html)
/// implementation.
static String get localHostname => _localHostname;
/// Whether the operating system is a version of
/// [Linux](https://en.wikipedia.org/wiki/Linux).
///
/// This value is `false` if the operating system is a specialized
/// version of Linux that identifies itself by a different name,
/// for example Android (see [isAndroid]).
static final bool isLinux = (_operatingSystem == "linux");
/// Whether the operating system is a version of
/// [macOS](https://en.wikipedia.org/wiki/MacOS).
static final bool isMacOS = (_operatingSystem == "macos");
/// Whether the operating system is a version of
/// [Microsoft Windows](https://en.wikipedia.org/wiki/Microsoft_Windows).
static final bool isWindows = (_operatingSystem == "windows");
/// Whether the operating system is a version of
/// [Android](https://en.wikipedia.org/wiki/Android_%28operating_system%29).
static final bool isAndroid = (_operatingSystem == "android");
/// Whether the operating system is a version of
/// [iOS](https://en.wikipedia.org/wiki/IOS).
static final bool isIOS = (_operatingSystem == "ios");
/// Whether the operating system is a version of
/// [Fuchsia](https://en.wikipedia.org/wiki/Google_Fuchsia).
static final bool isFuchsia = (_operatingSystem == "fuchsia");
/// The environment for this process as a map from string key to string value.
///
/// The map is unmodifiable,
/// and its content is retrieved from the operating system on its first use.
///
/// Environment variables on Windows are case-insensitive,
/// so on Windows the map is case-insensitive and will convert
/// all keys to upper case.
/// On other platforms, keys can be distinguished by case.
static Map<String, String> get environment => _Platform.environment;
/// The path of the executable used to run the script in this isolate.
/// Usually `dart` when running on the Dart VM or the
/// compiled script name (`script_name.exe`).
///
/// The literal path used to identify the executable.
/// This path might be relative or just be a name from which the executable
/// was found by searching the system path.
///
/// Use [resolvedExecutable] to get an absolute path to the executable.
static String get executable => _Platform.executable;
/// The path of the executable used to run the script in this
/// isolate after it has been resolved by the OS.
///
/// This is the absolute path, with all symlinks resolved, to the
/// executable used to run the script.
///
/// See [executable] for the unresolved version.
static String get resolvedExecutable => _Platform.resolvedExecutable;
/// The absolute URI of the script being run in this isolate.
///
/// If the script argument on the command line is relative,
/// it is resolved to an absolute URI before fetching the script, and
/// that absolute URI is returned.
///
/// URI resolution only does string manipulation on the script path, and this
/// may be different from the file system's path resolution behavior. For
/// example, a symbolic link immediately followed by '..' will not be
/// looked up.
///
/// If a compiled Dart script is being executed the URI to the compiled
/// script is returned, for example, `file:///full/path/to/script_name.exe`.
///
/// If running on the Dart VM the URI to the running Dart script is returned,
/// for example, `file:///full/path/to/script_name.dart`.
///
/// If the executable environment does not support [script],
/// the URI is empty.
static Uri get script => _Platform.script;
/// The flags passed to the executable used to run the script in this isolate.
///
/// These are the command-line flags to the executable that precedes
/// the script name.
/// Provides a new list every time the value is read.
static List<String> get executableArguments => _Platform.executableArguments;
/// The `--packages` flag passed to the executable used to run the script
/// in this isolate.
///
/// If present, it specifies a file describing how Dart packages are looked up.
///
/// Is `null` if there is no `--packages` flag.
static String? get packageConfig => _Platform.packageConfig;
/// The version of the current Dart runtime.
///
/// The value is a [semantic versioning](http://semver.org)
/// string representing the version of the current Dart runtime,
/// possibly followed by whitespace and other version and
/// build details.
static String get version => _version;
}