@@ -102,18 +102,17 @@ def _short_path_to_manifest_path(ctx, short_path):
102102def _nodejs_binary_impl (ctx ):
103103 node = ctx .file .node
104104 node_modules = ctx .files .node_modules
105- sources = []
105+
106+ # Using a depset will allow us to avoid flattening files and sources
107+ # inside this loop. This should reduce the performances hits,
108+ # since we don't need to call .to_list()
109+ sources = depset ()
110+
106111 for d in ctx .attr .data :
107112 if hasattr (d , "node_sources" ):
108- # sources += d.node_sources.to_list()
109- sources += [f for f in d .node_sources ]
113+ sources = depset ( transitive = [sources , d .node_sources ] )
110114 if hasattr (d , "files" ):
111- # sources += d.files.to_list()
112- sources += [f for f in d .files ]
113-
114- # print([f for f in d.files])
115- # print(d.files.to_list())
116- # print(sources)
115+ sources = depset ( transitive = [sources , d .files ] )
117116
118117 _write_loader_script (ctx )
119118
@@ -152,13 +151,24 @@ def _nodejs_binary_impl(ctx):
152151 is_executable = True ,
153152 )
154153
155- runfiles = depset (sources + [node , ctx .outputs .loader , ctx .file ._repository_args ] + node_modules + ctx .files ._node_runfiles )
154+ runfiles = depset (
155+ transitive = [sources + [node , ctx .outputs .loader , ctx .file ._repository_args ] + node_modules + ctx .files ._node_runfiles ]
156+ )
156157
157158 return [DefaultInfo (
158159 executable = ctx .outputs .script ,
159160 runfiles = ctx .runfiles (
160161 transitive_files = runfiles ,
161- files = [node , ctx .outputs .loader ] + ctx .files ._source_map_support_files + node_modules + sources ,
162+ files = [
163+ node ,
164+ ctx .outputs .loader
165+ ] + ctx .files ._source_map_support_files + node_modules +
166+
167+ # We need this call to the list of Files.
168+ # Calling the .to_list() method may have some perfs hits,
169+ # so we should be running this method only once per rule.
170+ # see: https://docs.bazel.build/versions/master/skylark/depsets.html#performance
171+ sources .to_list (),
162172 collect_data = True ,
163173 ),
164174 )]
0 commit comments