ModuleNameRoot = provider( doc = "provides module_name and module_root to other rules", fields = { "module_name": "", "module_root": "", }, ) # From bazelbuild/rules_typescript # https://github.com/bazelbuild/rules_typescript/blob/2312a8507090182d6565a4b072eb7893b20bce0b/internal/common/compilation.bzl def ts_providers_dict_to_struct(d): for key, value in d.items(): if key != "output_groups" and type(value) == type({}): d[key] = struct(**value) return struct(**d) def _raw_ts_library(ctx): return ts_providers_dict_to_struct({ "files": depset(ctx.files.srcs + ctx.files.deps), "module_name": ctx.attr.module_name, "module_root": ctx.attr.module_root, "raw_ts": True, }) raw_ts_library = rule( attrs = { "srcs": attr.label_list( allow_files = [".js", ".jsx", ".mjs", ".ts", ".tsx", ".less", ".scss", ".css"], ), "deps": attr.label_list( allow_files = True, ), "module_name": attr.string(), "module_root": attr.string(), }, implementation = _raw_ts_library, )