50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
"""Lightweight JS/TS source grouping rules."""
|
|
|
|
BunSourcesInfo = provider(
|
|
"Provides transitive sources for Bun libraries.",
|
|
fields = ["transitive_sources"],
|
|
)
|
|
|
|
def _bun_library_impl(ctx):
|
|
transitive_sources = [
|
|
dep[BunSourcesInfo].transitive_sources
|
|
for dep in ctx.attr.deps
|
|
if BunSourcesInfo in dep
|
|
]
|
|
all_sources = depset(
|
|
direct = ctx.files.srcs,
|
|
transitive = transitive_sources,
|
|
)
|
|
return [
|
|
BunSourcesInfo(transitive_sources = all_sources),
|
|
DefaultInfo(files = all_sources),
|
|
]
|
|
|
|
js_library = rule(
|
|
implementation = _bun_library_impl,
|
|
doc = "Aggregates JavaScript sources and transitive Bun source dependencies.",
|
|
attrs = {
|
|
"srcs": attr.label_list(
|
|
allow_files = [".js", ".jsx", ".mjs", ".cjs"],
|
|
doc = "JavaScript source files in this library.",
|
|
),
|
|
"deps": attr.label_list(
|
|
doc = "Other Bun source libraries to include transitively.",
|
|
),
|
|
},
|
|
)
|
|
|
|
ts_library = rule(
|
|
implementation = _bun_library_impl,
|
|
doc = "Aggregates TypeScript sources and transitive Bun source dependencies.",
|
|
attrs = {
|
|
"srcs": attr.label_list(
|
|
allow_files = [".ts", ".tsx"],
|
|
doc = "TypeScript source files in this library.",
|
|
),
|
|
"deps": attr.label_list(
|
|
doc = "Other Bun source libraries to include transitively.",
|
|
),
|
|
},
|
|
)
|