build method

  1. @override
Future<void> build(
  1. BuildStep buildStep
)

Generates the outputs for a given BuildStep.

Implementation

@override
Future<void> build(BuildStep buildStep) async {
  final dartEntrypointId = buildStep.inputId;
  final isAppEntrypoint = await _isAppEntryPoint(dartEntrypointId, buildStep);
  if (!isAppEntrypoint) return;

  final compilationSteps = <Future>[];
  Dart2WasmBootstrapResult? dart2WasmResult;

  for (final compiler in options.compilers) {
    switch (compiler.compiler) {
      case WebCompiler.DartDevc:
        compilationSteps.add(
          Future(() async {
            try {
              final usesWebHotReload = options.usesWebHotReload;
              await bootstrapDdc(
                buildStep,
                nativeNullAssertions: options.nativeNullAssertions,
                requiredAssets:
                    usesWebHotReload
                        ? _ddcLibraryBundleSdkResources
                        : _ddcSdkResources,
                usesWebHotReload: usesWebHotReload,
              );
            } on MissingModulesException catch (e) {
              log.severe('$e');
            }
          }),
        );
      case WebCompiler.Dart2Js:
        compilationSteps.add(
          bootstrapDart2Js(
            buildStep,
            compiler.compilerArguments,
            nativeNullAssertions: options.nativeNullAssertions,
            onlyCompiler: options.compilers.length == 1,
            entrypointExtension: compiler.extension,
          ),
        );
      case WebCompiler.Dart2Wasm:
        compilationSteps.add(
          Future(() async {
            dart2WasmResult = await bootstrapDart2Wasm(
              buildStep,
              compiler.compilerArguments,
              compiler.extension,
            );
          }),
        );
    }
  }
  await Future.wait(compilationSteps);
  if (_generateLoader(buildStep.inputId, dart2WasmResult)
      case (final id, final loader)?) {
    await buildStep.writeAsString(id, loader);
  }
}