11"""Implementation for `swift_deps` bzlmod extension.""" 
22
33load ("@bazel_skylib//lib:dicts.bzl" , "dicts" )
4+ load ("@bazel_skylib//lib:paths.bzl" , "paths" )
45load ("//swiftpkg/internal:bazel_repo_names.bzl" , "bazel_repo_names" )
56load ("//swiftpkg/internal:local_swift_package.bzl" , "local_swift_package" )
67load ("//swiftpkg/internal:pkginfos.bzl" , "pkginfos" )
@@ -59,11 +60,21 @@ def _declare_pkgs_from_package(module_ctx, from_package, config_pkgs, config_swi
5960    # Get the package info. 
6061    pkg_swift  =  module_ctx .path (from_package .swift )
6162    debug_path  =  module_ctx .path ("." )
63+     workspace_root  =  str (pkg_swift .dirname )
64+ 
65+     root_cached_json_directory  =  None 
66+     if  from_package .cached_json_directory :
67+         root_cached_json_directory  =  paths .join (
68+             workspace_root ,
69+             from_package .cached_json_directory ,
70+         )
71+ 
6272    pkg_info  =  pkginfos .get (
6373        module_ctx ,
64-         directory  =  str ( pkg_swift . dirname ) ,
74+         directory  =  workspace_root ,
6575        env  =  env ,
6676        debug_path  =  str (debug_path ),
77+         cached_json_directory  =  root_cached_json_directory ,
6778        resolved_pkg_map  =  resolved_pkg_map ,
6879        collect_src_info  =  False ,
6980        registries_directory  =  registries_directory ,
@@ -157,10 +168,18 @@ the Swift package to make it available.\
157168            processing  =  to_process 
158169            to_process  =  []
159170            for  dep  in  processing :
171+                 dep_cached_json_directory  =  None 
172+ 
173+                 if  from_package .cached_json_directory :
174+                     dep_cached_json_directory  =  paths .join (
175+                         dep .file_system .path ,
176+                         from_package .cached_json_directory ,
177+                     )
160178                dep_pkg_info  =  pkginfos .get (
161179                    module_ctx ,
162180                    directory  =  dep .file_system .path ,
163181                    debug_path  =  None ,
182+                     cached_json_directory  =  dep_cached_json_directory ,
164183                    resolved_pkg_map  =  None ,
165184                    collect_src_info  =  False ,
166185                )
@@ -185,7 +204,13 @@ the Swift package to make it available.\
185204            config_pkg  =  config_pkgs .get (
186205                bazel_repo_names .from_identity (dep .identity ),
187206            )
188-         _declare_pkg_from_dependency (dep , config_pkg , from_package , config_swift_package )
207+         _declare_pkg_from_dependency (
208+             dep ,
209+             config_pkg ,
210+             from_package ,
211+             config_swift_package ,
212+             from_package .cached_json_directory ,
213+         )
189214
190215    # Add all transitive dependencies to direct_dep_repo_names if `publicly_expose_all_targets` flag is set. 
191216    for  dep  in  all_deps_by_id .values ():
@@ -199,7 +224,15 @@ the Swift package to make it available.\
199224
200225    return  direct_dep_repo_names 
201226
202- def  _declare_pkg_from_dependency (dep , config_pkg , from_package , config_swift_package ):
227+ def  _declare_pkg_from_dependency (
228+         dep ,
229+         config_pkg ,
230+         from_package ,
231+         config_swift_package ,
232+         cached_json_directory ):
233+     if  cached_json_directory :
234+         cached_json_directory  =  paths .join (cached_json_directory , dep .name )
235+ 
203236    name  =  bazel_repo_names .from_identity (dep .identity )
204237    if  dep .source_control :
205238        init_submodules  =  None 
@@ -236,7 +269,7 @@ def _declare_pkg_from_dependency(dep, config_pkg, from_package, config_swift_pac
236269            dependencies_index  =  None ,
237270            env  =  from_package .env ,
238271            env_inherit  =  from_package .env_inherit ,
239-             init_submodules  =  init_submodules ,
272+             cached_json_directory   =   cached_json_directory ,             init_submodules  =  init_submodules ,
240273            recursive_init_submodules  =  recursive_init_submodules ,
241274            patch_args  =  patch_args ,
242275            patch_cmds  =  patch_cmds ,
@@ -256,6 +289,7 @@ def _declare_pkg_from_dependency(dep, config_pkg, from_package, config_swift_pac
256289            env_inherit  =  from_package .env_inherit ,
257290            path  =  dep .file_system .path ,
258291            dependencies_index  =  None ,
292+             cached_json_directory  =  cached_json_directory ,
259293        )
260294
261295    elif  dep .registry :
@@ -350,6 +384,7 @@ bazel run @swift_package//:resolve
350384``` 
351385""" ,
352386            ),
387+             "cached_json_directory" : attr .string (),
353388            "env" : attr .string_dict (
354389                doc  =  """\  
355390 Environment variables that will be passed to the execution environments for \ 
0 commit comments