Skip to content

Commit 4ebbc9d

Browse files
committed
Support deps
1 parent 6e3cafd commit 4ebbc9d

1 file changed

Lines changed: 36 additions & 14 deletions

File tree

rules/private/closure_ts_compile.bzl

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
load("@bazel_skylib//lib:paths.bzl", "paths")
44

5+
ClosureTsCompileInfo = provider(doc = "info about a closure ts compile rule", fields = {
6+
"sources": "DepSet<File>: direct + transitive sources",
7+
})
8+
59
def _output_for_ts_input(ctx, src):
610
filename = paths.replace_extension(src.basename, ".js")
711
return ctx.actions.declare_file(filename, sibling = src)
@@ -10,46 +14,59 @@ def _output_for_externs(ctx):
1014
return ctx.actions.declare_file(ctx.label.name + ".externs.js")
1115

1216
def _tsickle_action(ctx):
17+
direct = ctx.files.srcs
18+
transitive = [dep[ClosureTsCompileInfo].sources for dep in ctx.attr.deps]
19+
1320
args = ctx.actions.args()
14-
args.add_all([src.short_path for src in ctx.files.srcs])
21+
args.add_all([src.short_path for src in direct])
1522

1623
env = {
1724
"BAZEL_BINDIR": ctx.bin_dir.path,
1825
"BAZEL_WORKSPACE": ctx.label.workspace_name,
1926
"BAZEL_PACKAGE": ctx.label.package,
2027
}
2128

22-
ts_inputs = []
23-
d_ts_inputs = []
24-
for src in ctx.files.srcs:
29+
direct_ts = []
30+
direct_dts = []
31+
for src in direct:
2532
if src.basename.endswith(".d.ts"):
26-
d_ts_inputs.append(src)
33+
direct_dts.append(src)
2734
else:
28-
ts_inputs.append(src)
35+
direct_ts.append(src)
2936

30-
outputs = [_output_for_ts_input(ctx, f) for f in ts_inputs]
31-
if len(d_ts_inputs) > 0:
37+
outputs = [_output_for_ts_input(ctx, f) for f in direct_ts]
38+
if len(direct_dts) > 0:
3239
externs_output = _output_for_externs(ctx)
3340
outputs.append(externs_output)
3441
env["EXTERNS_PATH"] = externs_output.short_path
3542

43+
inputs = depset(direct = direct, transitive = transitive)
44+
3645
ctx.actions.run(
3746
mnemonic = "TsickleCompile",
3847
executable = ctx.executable._compiler,
3948
arguments = [args],
40-
inputs = ts_inputs + d_ts_inputs,
49+
inputs = inputs,
4150
outputs = outputs,
4251
env = env,
4352
)
4453

45-
return outputs
54+
return struct(
55+
inputs = inputs,
56+
outputs = outputs,
57+
)
4658

4759
def _closure_ts_compile_impl(ctx):
48-
outputs = _tsickle_action(ctx)
60+
result = _tsickle_action(ctx)
4961

50-
return [DefaultInfo(
51-
files = depset(outputs),
52-
)]
62+
return [
63+
DefaultInfo(
64+
files = depset(result.outputs),
65+
),
66+
ClosureTsCompileInfo(
67+
sources = result.inputs,
68+
),
69+
]
5370

5471
closure_ts_compile = rule(
5572
implementation = _closure_ts_compile_impl,
@@ -59,11 +76,16 @@ closure_ts_compile = rule(
5976
allow_files = True,
6077
mandatory = True,
6178
),
79+
"deps": attr.label_list(
80+
doc = "list of ClosureTsCompileInfo dependencies",
81+
providers = [ClosureTsCompileInfo],
82+
),
6283
"_compiler": attr.label(
6384
default = "//tools/tsicklecompiler",
6485
doc = "the tsickle driver tool",
6586
executable = True,
6687
cfg = "exec",
6788
),
6889
},
90+
provides = [ClosureTsCompileInfo],
6991
)

0 commit comments

Comments
 (0)