# Copyright 2021 The Pigweed Authors # # Licensed under the Apache License, Version 2.0 (the "License"); you may not # use this file except in compliance with the License. You may obtain a copy of # the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations under # the License. """Utility for generating TS code with string replacement.""" load("@build_bazel_rules_nodejs//:providers.bzl", "run_node") def _template_replacement_impl(ctx): output_file = ctx.actions.declare_file(ctx.attr.output_file) descriptor_data = ctx.files.descriptor_data[0] template_file = ctx.files.template_file[0] run_node( ctx, executable = "_template_replacement_bin", inputs = [descriptor_data, template_file], outputs = [output_file], arguments = [ "--template", template_file.path, "--descriptor_data", descriptor_data.path, "--output", output_file.path, "--proto_root_dir", ctx.attr.proto_root_dir, ], ) return [DefaultInfo(files = depset([output_file]))] template_replacement = rule( implementation = _template_replacement_impl, attrs = { "_template_replacement_bin": attr.label( executable = True, cfg = "exec", default = Label("@//pw_protobuf_compiler/ts/codegen:template_replacement_bin"), ), "descriptor_data": attr.label( allow_files = [".proto.bin"], ), "proto_root_dir": attr.string(mandatory = True), "output_file": attr.string(mandatory = True), "template_file": attr.label( allow_files = [".ts"], default = Label("@//pw_protobuf_compiler/ts:ts_proto_collection_template"), ), }, )