// 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. library sdk_source; import 'dart:async'; import '../../pkg/path/lib/path.dart' as path; import 'io.dart'; import 'package.dart'; import 'pubspec.dart'; import 'sdk.dart' as sdk; import 'source.dart'; import 'utils.dart'; import 'version.dart'; /// A package source that uses libraries from the Dart SDK. class SdkSource extends Source { final String name = "sdk"; final bool shouldCache = false; /// SDK packages are not individually versioned. Instead, their version is /// inferred from the revision number of the SDK itself. Future describe(PackageId id) { return defer(() { var packageDir = _getPackagePath(id); // TODO(rnystrom): What if packageDir is null? var pubspec = new Pubspec.load(id.name, packageDir, systemCache.sources); // Ignore the pubspec's version, and use the SDK's. return new Pubspec(id.name, sdk.version, pubspec.dependencies, pubspec.environment); }); } /// Since all the SDK files are already available locally, installation just /// involves symlinking the SDK library into the packages directory. Future install(PackageId id, String destPath) { return defer(() { var path = _getPackagePath(id); if (path == null) return false; return createPackageSymlink(id.name, path, destPath).then((_) => true); }); } /// Gets the path in the SDK's "pkg" directory to the directory containing /// package [id]. Returns `null` if the package could not be found. String _getPackagePath(PackageId id) { var pkgPath = path.join(sdk.rootDirectory, "pkg", id.description); return dirExists(pkgPath) ? pkgPath : null; } }