blob: bc92e9676d56c2e4b0e3f735a4608552b8c6859d [file] [log] [blame]
// Copyright (c) 2018, 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:async';
import 'package:build/build.dart';
import 'package:glob/glob.dart';
import 'common.dart';
import 'meta_module.dart';
import 'module_cache.dart';
import 'module_library_builder.dart';
import 'platform.dart';
/// The extension for serialized meta module assets for a specific platform.
String metaModuleExtension(DartPlatform platform) =>
'.${platform.name}.meta_module.raw';
/// Creates `.meta_module` file for any Dart library.
///
/// This file contains information about the full computed
/// module structure for the package.
class MetaModuleBuilder implements Builder {
@override
final Map<String, List<String>> buildExtensions;
final ModuleStrategy strategy;
final DartPlatform _platform;
MetaModuleBuilder(this._platform, {ModuleStrategy strategy})
: strategy = strategy ?? ModuleStrategy.coarse,
buildExtensions = {
r'$lib$': [metaModuleExtension(_platform)]
};
factory MetaModuleBuilder.forOptions(
DartPlatform platform, BuilderOptions options) =>
MetaModuleBuilder(platform, strategy: moduleStrategy(options));
@override
Future build(BuildStep buildStep) async {
if (buildStep.inputId.package == r'$sdk') return;
var libraryAssets =
await buildStep.findAssets(Glob('**$moduleLibraryExtension')).toList();
var metaModule = await MetaModule.forLibraries(
buildStep, libraryAssets, strategy, _platform);
var id = AssetId(
buildStep.inputId.package, 'lib/${metaModuleExtension(_platform)}');
var metaModules = await buildStep.fetchResource(metaModuleCache);
await metaModules.write(id, buildStep, metaModule);
}
}