support enabling experiments when starting the compiler (#1314)

diff --git a/frontend_server_client/CHANGELOG.md b/frontend_server_client/CHANGELOG.md
index 8544ef4..f8659ac 100644
--- a/frontend_server_client/CHANGELOG.md
+++ b/frontend_server_client/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.1.0
+
+- Support enabling experiments when starting the compiler.
+
 ## 2.0.1
 
 - Widen the upper bound sdk constraint to `<3.0.0`. The frontend server api
diff --git a/frontend_server_client/lib/src/frontend_server_client.dart b/frontend_server_client/lib/src/frontend_server_client.dart
index fc77c90..0f3a285 100644
--- a/frontend_server_client/lib/src/frontend_server_client.dart
+++ b/frontend_server_client/lib/src/frontend_server_client.dart
@@ -46,6 +46,7 @@
     String platformKernel, {
     String dartdevcModuleFormat = 'amd',
     bool debug = false,
+    List<String>? enabledExperiments,
     bool enableHttpUris = false,
     List<String> fileSystemRoots = const [], // For `fileSystemScheme` uris,
     String fileSystemScheme =
@@ -76,6 +77,9 @@
       '--incremental',
       if (verbose) '--verbose',
       if (!printIncrementalDependencies) '--no-print-incremental-dependencies',
+      if (enabledExperiments != null)
+        for (var experiment in enabledExperiments)
+          '--enable-experiment=$experiment',
     ]);
     var feServerStdoutLines = StreamQueue(feServer.stdout
         .transform(utf8.decoder)
diff --git a/frontend_server_client/pubspec.yaml b/frontend_server_client/pubspec.yaml
index 921ea14..4e0cf65 100644
--- a/frontend_server_client/pubspec.yaml
+++ b/frontend_server_client/pubspec.yaml
@@ -1,5 +1,5 @@
 name: frontend_server_client
-version: 2.0.1
+version: 2.1.0
 description: >-
   Client code to start and interact with the frontend_server compiler from the
   Dart SDK.
diff --git a/frontend_server_client/test/frontend_sever_client_test.dart b/frontend_server_client/test/frontend_sever_client_test.dart
index 87abd76..9fb0c23 100644
--- a/frontend_server_client/test/frontend_sever_client_test.dart
+++ b/frontend_server_client/test/frontend_sever_client_test.dart
@@ -237,6 +237,34 @@
         utf8.decode(dartDevcClient.assetBytes('${entrypointUri.path}.lib.js')!),
         contains('goodbye'));
   });
+
+  test('can enable experiments', () async {
+    await d.dir('a', [
+      d.dir('bin', [
+        d.file('nnbd.dart', '''
+// @dart=2.10
+
+// Compile time error if nnbd is enabled
+int x;
+
+void main() {
+  print(x);
+}
+''')
+      ])
+    ]).create();
+    var entrypoint = p.join(packageRoot, 'bin', 'nnbd.dart');
+    client = await FrontendServerClient.start(
+        entrypoint, p.join(packageRoot, 'out.dill'), vmPlatformDill,
+        enabledExperiments: ['non-nullable']);
+    var result = await client.compile();
+    if (result == null) {
+      fail('Expected compilation to be non-null');
+    }
+    client.accept();
+    expect(result.errorCount, 1);
+    expect(result.compilerOutputLines, contains(contains('int x;')));
+  });
 }
 
 Future<Isolate> waitForIsolatesAndResume(VmService vmService) async {