in lib/src/compiler.dart [48:118]
Future<CompilationResults> compile(
String input, {
bool returnSourceMap = false,
}) async {
final imports = getAllImportsFor(input);
final unsupportedImports =
getUnsupportedImports(imports, devMode: _sdk.devMode);
if (unsupportedImports.isNotEmpty) {
return CompilationResults(problems: [
for (var import in unsupportedImports)
CompilationProblem._('unsupported import: ${import.uri.stringValue}'),
]);
}
final temp = await Directory.systemTemp.createTemp('dartpad');
_logger.info('Temp directory created: ${temp.path}');
try {
await copyPath(_projectTemplates.dartPath, temp.path);
await Directory(path.join(temp.path, 'lib')).create(recursive: true);
final arguments = <String>[
'compile',
'js',
'--suppress-hints',
'--terse',
if (!returnSourceMap) '--no-source-maps',
'--packages=${path.join('.dart_tool', 'package_config.json')}',
'--sound-null-safety',
'--enable-asserts',
'-o',
'$kMainDart.js',
path.join('lib', kMainDart),
];
final compileTarget = path.join(temp.path, 'lib', kMainDart);
final mainDart = File(compileTarget);
await mainDart.writeAsString(input);
final mainJs = File(path.join(temp.path, '$kMainDart.js'));
final mainSourceMap = File(path.join(temp.path, '$kMainDart.js.map'));
_logger.info('About to exec: $_dartPath ${arguments.join(' ')}');
final result =
await Process.run(_dartPath, arguments, workingDirectory: temp.path);
if (result.exitCode != 0) {
final results = CompilationResults(problems: <CompilationProblem>[
CompilationProblem._(result.stdout as String),
]);
return results;
} else {
String? sourceMap;
if (returnSourceMap && await mainSourceMap.exists()) {
sourceMap = await mainSourceMap.readAsString();
}
final results = CompilationResults(
compiledJS: await mainJs.readAsString(),
sourceMap: sourceMap,
);
return results;
}
} catch (e, st) {
_logger.warning('Compiler failed: $e\n$st');
rethrow;
} finally {
await temp.delete(recursive: true);
_logger.info('temp folder removed: ${temp.path}');
}
}