| // 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), | |
| ); | |
| } |