@@ -436,7 +436,8 @@ pub struct WorkspaceConfig {
436
436
pub struct WorkspaceMemberConfig {
437
437
// As defined in `member` setting of the workspace deno.json.
438
438
pub member_name : String ,
439
- pub path : PathBuf ,
439
+ /// Directory path of the workspace member.
440
+ pub dir_path : PathBuf ,
440
441
pub package_name : String ,
441
442
pub package_version : String ,
442
443
pub config_file : ConfigFile ,
@@ -1048,7 +1049,7 @@ impl ConfigFile {
1048
1049
} ;
1049
1050
members. push ( WorkspaceMemberConfig {
1050
1051
member_name : member. to_string ( ) ,
1051
- path : member_path,
1052
+ dir_path : member_path,
1052
1053
package_name : package_name. to_string ( ) ,
1053
1054
package_version : package_version. to_string ( ) ,
1054
1055
config_file : member_config_file,
@@ -1075,6 +1076,37 @@ impl ConfigFile {
1075
1076
} ) )
1076
1077
}
1077
1078
1079
+ /// Converts the configuration file into a list of workspace members.
1080
+ pub fn to_workspace_members (
1081
+ & self ,
1082
+ ) -> Result < Vec < WorkspaceMemberConfig > , AnyError > {
1083
+ let maybe_workspace_config = self . to_workspace_config ( ) ?;
1084
+ match maybe_workspace_config {
1085
+ Some ( workspace_config) => Ok ( workspace_config. members ) ,
1086
+ None => {
1087
+ let package_name = match self . json . name . clone ( ) {
1088
+ Some ( name) => name,
1089
+ None => bail ! ( "{} is missing 'name' field" , self . specifier) ,
1090
+ } ;
1091
+ Ok ( vec ! [ WorkspaceMemberConfig {
1092
+ member_name: package_name. clone( ) ,
1093
+ package_name,
1094
+ package_version: match self . json. version. clone( ) {
1095
+ Some ( version) => version,
1096
+ None => {
1097
+ bail!( "{} is missing 'version' field" , self . specifier)
1098
+ }
1099
+ } ,
1100
+ dir_path: specifier_to_file_path( & self . specifier) ?
1101
+ . parent( )
1102
+ . unwrap( )
1103
+ . to_path_buf( ) ,
1104
+ config_file: self . clone( ) ,
1105
+ } ] )
1106
+ }
1107
+ }
1108
+ }
1109
+
1078
1110
pub fn to_bench_config ( & self ) -> Result < Option < BenchConfig > , AnyError > {
1079
1111
let files_config = self . to_files_config ( ) ?;
1080
1112
let bench_config = match self . json . bench . clone ( ) {
@@ -2135,6 +2167,43 @@ mod tests {
2135
2167
) ;
2136
2168
}
2137
2169
2170
+ #[ test]
2171
+ fn test_to_workspace_members_no_name ( ) {
2172
+ let config_text = r#"{
2173
+ "version": "1.0.0"
2174
+ }"# ;
2175
+ let config_specifier = root_url ( ) . join ( "tsconfig.json" ) . unwrap ( ) ;
2176
+ let config_file = ConfigFile :: new ( config_text, config_specifier) . unwrap ( ) ;
2177
+
2178
+ let err = config_file. to_workspace_members ( ) . err ( ) . unwrap ( ) ;
2179
+ assert ! ( err. to_string( ) . ends_with( "is missing 'name' field" ) ) ;
2180
+ }
2181
+
2182
+ #[ test]
2183
+ fn test_to_workspace_members_no_version ( ) {
2184
+ let config_text = r#"{
2185
+ "name": "@pkg/pkg"
2186
+ }"# ;
2187
+ let config_specifier = root_url ( ) . join ( "tsconfig.json" ) . unwrap ( ) ;
2188
+ let config_file = ConfigFile :: new ( config_text, config_specifier) . unwrap ( ) ;
2189
+
2190
+ let err = config_file. to_workspace_members ( ) . err ( ) . unwrap ( ) ;
2191
+ assert ! ( err. to_string( ) . ends_with( "is missing 'version' field" ) ) ;
2192
+ }
2193
+
2194
+ #[ test]
2195
+ fn test_to_workspace_members_single_config ( ) {
2196
+ let config_text = r#"{
2197
+ "name": "@pkg/pkg"
2198
+ "version": "1.0.0",
2199
+ }"# ;
2200
+ let config_specifier = root_url ( ) . join ( "tsconfig.json" ) . unwrap ( ) ;
2201
+ let config_file = ConfigFile :: new ( config_text, config_specifier) . unwrap ( ) ;
2202
+
2203
+ let members = config_file. to_workspace_members ( ) . unwrap ( ) ;
2204
+ assert_eq ! ( members. len( ) , 1 ) ;
2205
+ }
2206
+
2138
2207
#[ test]
2139
2208
fn test_is_package ( ) {
2140
2209
fn get_for_config ( config_text : & str ) -> bool {
0 commit comments