blob: 5569c4a15043b8220462fcb33fd9423628f99ddd [file] [log] [blame] [edit]
// Copyright (c) 2025, 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 'config.dart';
import 'hooks/syntax.g.dart';
/// The user-defines for [HookInputBuilder.setupShared].
///
/// Currently only holds [workspacePubspec]. (In the future this class will also
/// take command-line arguments and a working directory for the command-line
/// argument paths to be resolved against.)
final class PackageUserDefines {
/// User-defines originating from the `pubspec.yaml` in the workspace root.
final PackageUserDefinesSource? workspacePubspec;
/// Creates a [PackageUserDefines].
PackageUserDefines({required this.workspacePubspec});
@override
String toString() =>
'PackageUserDefines(workspacePubspec: $workspacePubspec)';
}
/// Extension methods for [PackageUserDefines] to convert to and from syntax
/// nodes.
extension PackageUserDefinesSyntaxExtension on PackageUserDefines {
/// Creates a [PackageUserDefines] from a [UserDefinesSyntax] node.
static PackageUserDefines fromSyntax(UserDefinesSyntax syntaxNode) =>
PackageUserDefines(
workspacePubspec: switch (syntaxNode.workspacePubspec) {
null => null,
final o => PackageUserDefinesSourceSyntaxExtension.fromSyntax(o),
},
);
/// Converts this [PackageUserDefines] to a [UserDefinesSyntax] node.
UserDefinesSyntax toSyntax() {
final result = UserDefinesSyntax(
workspacePubspec: workspacePubspec?.toSyntax(),
);
return result;
}
}
/// A source of user-defines in a [PackageUserDefines].
final class PackageUserDefinesSource {
/// The user-defined values.
final Map<String, Object?> defines;
/// The base path for relative paths in [defines].
final Uri basePath;
/// Creates a [PackageUserDefinesSource].
PackageUserDefinesSource({required this.defines, required this.basePath});
@override
String toString() =>
'PackageUserDefinesSource(defines: $defines, basePath: $basePath)';
}
/// Extension methods for [PackageUserDefinesSource] to convert to and from
/// syntax nodes.
extension PackageUserDefinesSourceSyntaxExtension on PackageUserDefinesSource {
/// Creates a [PackageUserDefinesSource] from a [UserDefinesSourceSyntax]
/// node.
static PackageUserDefinesSource fromSyntax(
UserDefinesSourceSyntax syntaxNode,
) => PackageUserDefinesSource(
defines: syntaxNode.defines.json,
basePath: syntaxNode.basePath,
);
/// Converts this [PackageUserDefinesSource] to a [UserDefinesSourceSyntax]
/// node.
UserDefinesSourceSyntax toSyntax() => UserDefinesSourceSyntax(
basePath: basePath,
defines: JsonObjectSyntax.fromJson(defines),
);
}