blob: 0ed5f93b8181ba3818f0fe54fd2cf252207b4e99 [file] [log] [blame]
// Copyright (c) 2024, 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:convert';
import 'dart:io';
import 'package:dtd/dtd.dart';
import 'package:path/path.dart' as path;
/// IMPORTANT: the `dtdUrl` below should point to a Dart Tooling Daemon instance
/// that has been started with the --unrestricted flag:
/// ```sh
/// > dart tooling-daemon
/// The Dart Tooling Daemon is listening on ws://127.0.0.1:62925/cKB5QFiAUNMzSzlb
/// > dart run dtd_file_system_service_example.dart ws://127.0.0.1:62925/cKB5QFiAUNMzSzlb /path/to/a/test/directory
/// ```
void main(List<String> args) async {
final dtdUrl = args[0]; // pass the url as a param to the example
// The directory to run in is passed as the 2nd argument to this example.
final workingDirectory = Directory.fromUri(Uri.parse(args[1]));
final dtdSecret = args.length >= 3 ? args[2] : null;
// Create the client that will be talking to the FileSystem service..
DartToolingDaemon? client = await DartToolingDaemon.connect(
Uri.parse(dtdUrl),
);
if (dtdSecret != null) {
// If the dtd secret is passed as an argument, then set our example
// directory as the ide workspace roots. This will ensure that there is
// permission for the client to perform actions on that directory.
await client.setIDEWorkspaceRoots(dtdSecret, [workingDirectory.uri]);
}
try {
final testFile = Uri.file(path.join(workingDirectory.path, 'a.txt'));
// Writing a file from a DTD client.
await client.writeFileAsString(
testFile,
'Here are some file contents to write.',
);
// Reading a file from a DTD client.
final fileContents = await client.readFileAsString(testFile);
print(jsonEncode({'step': 'read', 'response': fileContents.toJson()}));
// Listing directories from a DTD client.
final listFilesResponse = await client.listDirectoryContents(
workingDirectory.uri,
);
print(
jsonEncode(
{'step': 'listDirectories', 'response': listFilesResponse.toJson()},
),
);
} finally {
await client.close();
}
}