// Copyright (c) 2017, 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 'dart:io'; import 'package:dev_compiler/src/kernel/command.dart'; import 'package:front_end/src/api_unstable/ddc.dart' as fe; import 'package:sourcemap_testing/src/stepping_helper.dart'; import 'package:testing/testing.dart'; import 'common.dart'; import 'ddc_common.dart'; Future createContext( Chain suite, Map environment) async { return SourceMapContext(environment); } class SourceMapContext extends ChainContextWithCleanupHelper implements WithCompilerState { final Map environment; @override fe.InitializedCompilerState compilerState; SourceMapContext(this.environment); List _steps; @override List get steps { return _steps ??= [ const Setup(), Compile(DevCompilerRunner(this, debugging())), const StepWithD8(), CheckSteps(debugging()), ]; } @override bool debugging() => environment.containsKey("debug"); } class DevCompilerRunner implements CompilerRunner { final WithCompilerState context; final bool debugging; const DevCompilerRunner(this.context, [this.debugging = false]); @override Future run(Uri inputFile, Uri outputFile, Uri outWrapperFile) async { Uri outDir = outputFile.resolve("."); String outputFilename = outputFile.pathSegments.last; File sdkJsFile = findInOutDir("gen/utils/dartdevc/js/es6/dart_sdk.js"); var jsSdkPath = sdkJsFile.uri; File ddcSdkSummary = findInOutDir("gen/utils/dartdevc/kernel/ddc_sdk.dill"); List args = [ "--packages=${sdkRoot.uri.resolve(".packages").toFilePath()}", "--modules=es6", "--dart-sdk-summary=${ddcSdkSummary.path}", "-o", outputFile.toFilePath(), inputFile.toFilePath() ]; bool succeeded = false; try { var result = await compile(args, compilerState: context.compilerState); context.compilerState = result.compilerState as fe.InitializedCompilerState; succeeded = result.success; } catch (e, s) { print('Unhandled exception:'); print(e); print(s); } if (!succeeded) { var ddc = getDdcDir().uri.resolve("bin/dartdevc.dart"); throw "Error from ddc when executing with something like " "$dartExecutable ${ddc.toFilePath()} --kernel " "${args.reduce((value, element) => '$value "$element"')}"; } var jsContent = File.fromUri(outputFile).readAsStringSync(); File.fromUri(outputFile).writeAsStringSync(jsContent.replaceFirst( "from 'dart_sdk.js'", "from '${uriPathForwardSlashed(jsSdkPath)}'")); if (debugging) { createHtmlWrapper( sdkJsFile, outputFile, jsContent, outputFilename, outDir); } var inputFileName = inputFile.pathSegments.last; var inputFileNameNoExt = inputFileName.substring(0, inputFileName.lastIndexOf(".")); File.fromUri(outWrapperFile).writeAsStringSync( getWrapperContent(jsSdkPath, inputFileNameNoExt, outputFilename)); } } void main(List arguments) => runMe(arguments, createContext, "testing.json");