@@ -177,6 +177,53 @@ impl Run {
177
177
Ok ( None )
178
178
}
179
179
180
+ pub ( crate ) fn check_tag (
181
+ & self ,
182
+ diagnostics : & mut Vec < BoundariesDiagnostic > ,
183
+ dependencies : Option < & ProcessedPermissions > ,
184
+ dependents : Option < & ProcessedPermissions > ,
185
+ pkg : & PackageNode ,
186
+ package_json : & PackageJson ,
187
+ ) -> Result < ( ) , Error > {
188
+ if let Some ( dependency_permissions) = dependencies {
189
+ for dependency in self . pkg_dep_graph ( ) . dependencies ( & pkg) {
190
+ if matches ! ( dependency, PackageNode :: Root ) {
191
+ continue ;
192
+ }
193
+
194
+ let dependency_tags = self . load_package_tags ( dependency. as_package_name ( ) ) ;
195
+
196
+ diagnostics. extend ( self . validate_relation (
197
+ pkg. as_package_name ( ) ,
198
+ package_json,
199
+ dependency. as_package_name ( ) ,
200
+ dependency_tags,
201
+ dependency_permissions. allow . as_ref ( ) ,
202
+ dependency_permissions. deny . as_ref ( ) ,
203
+ ) ?) ;
204
+ }
205
+ }
206
+
207
+ if let Some ( dependent_permissions) = dependents {
208
+ for dependent in self . pkg_dep_graph ( ) . ancestors ( & pkg) {
209
+ if matches ! ( dependent, PackageNode :: Root ) {
210
+ continue ;
211
+ }
212
+ let dependent_tags = self . load_package_tags ( dependent. as_package_name ( ) ) ;
213
+ diagnostics. extend ( self . validate_relation (
214
+ pkg. as_package_name ( ) ,
215
+ package_json,
216
+ dependent. as_package_name ( ) ,
217
+ dependent_tags,
218
+ dependent_permissions. allow . as_ref ( ) ,
219
+ dependent_permissions. deny . as_ref ( ) ,
220
+ ) ?)
221
+ }
222
+ }
223
+
224
+ Ok ( ( ) )
225
+ }
226
+
180
227
pub ( crate ) fn check_package_tags (
181
228
& self ,
182
229
pkg : PackageNode ,
@@ -185,6 +232,34 @@ impl Run {
185
232
tags_rules : & ProcessedRulesMap ,
186
233
) -> Result < Vec < BoundariesDiagnostic > , Error > {
187
234
let mut diagnostics = Vec :: new ( ) ;
235
+ let package_boundaries = self
236
+ . turbo_json_loader ( )
237
+ . load ( pkg. as_package_name ( ) )
238
+ . ok ( )
239
+ . and_then ( |turbo_json| turbo_json. boundaries . as_ref ( ) ) ;
240
+
241
+ if let Some ( boundaries) = package_boundaries {
242
+ if let Some ( tags) = & boundaries. tags {
243
+ let ( span, text) = tags. span_and_text ( "turbo.json" ) ;
244
+ diagnostics. push ( BoundariesDiagnostic :: PackageBoundariesHasTags { span, text } ) ;
245
+ }
246
+ let dependencies = boundaries
247
+ . dependencies
248
+ . clone ( )
249
+ . map ( |deps| deps. into_inner ( ) . into ( ) ) ;
250
+ let dependents = boundaries
251
+ . dependents
252
+ . clone ( )
253
+ . map ( |deps| deps. into_inner ( ) . into ( ) ) ;
254
+
255
+ self . check_tag (
256
+ & mut diagnostics,
257
+ dependencies. as_ref ( ) ,
258
+ dependents. as_ref ( ) ,
259
+ & pkg,
260
+ package_json,
261
+ ) ?;
262
+ }
188
263
189
264
// We don't allow tags to share the same name as the package because
190
265
// we allow package names to be used as a tag
@@ -210,41 +285,13 @@ impl Run {
210
285
211
286
for tag in current_package_tags. iter ( ) {
212
287
if let Some ( rule) = tags_rules. get ( tag. as_inner ( ) ) {
213
- if let Some ( dependency_permissions) = & rule. dependencies {
214
- for dependency in self . pkg_dep_graph ( ) . dependencies ( & pkg) {
215
- if matches ! ( dependency, PackageNode :: Root ) {
216
- continue ;
217
- }
218
-
219
- let dependency_tags = self . load_package_tags ( dependency. as_package_name ( ) ) ;
220
-
221
- diagnostics. extend ( self . validate_relation (
222
- pkg. as_package_name ( ) ,
223
- package_json,
224
- dependency. as_package_name ( ) ,
225
- dependency_tags,
226
- dependency_permissions. allow . as_ref ( ) ,
227
- dependency_permissions. deny . as_ref ( ) ,
228
- ) ?) ;
229
- }
230
- }
231
-
232
- if let Some ( dependent_permissions) = & rule. dependents {
233
- for dependent in self . pkg_dep_graph ( ) . ancestors ( & pkg) {
234
- if matches ! ( dependent, PackageNode :: Root ) {
235
- continue ;
236
- }
237
- let dependent_tags = self . load_package_tags ( dependent. as_package_name ( ) ) ;
238
- diagnostics. extend ( self . validate_relation (
239
- pkg. as_package_name ( ) ,
240
- package_json,
241
- dependent. as_package_name ( ) ,
242
- dependent_tags,
243
- dependent_permissions. allow . as_ref ( ) ,
244
- dependent_permissions. deny . as_ref ( ) ,
245
- ) ?)
246
- }
247
- }
288
+ self . check_tag (
289
+ & mut diagnostics,
290
+ rule. dependencies . as_ref ( ) ,
291
+ rule. dependents . as_ref ( ) ,
292
+ & pkg,
293
+ package_json,
294
+ ) ?;
248
295
}
249
296
}
250
297
0 commit comments