# 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.

load("@build_bazel_rules_nodejs//:index.bzl", "js_library")
load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test")
load("@npm//@bazel/typescript:index.bzl", "ts_library", "ts_project")
load("ts_proto_collection.bzl", "ts_proto_collection")

package(default_visibility = ["//visibility:public"])

filegroup(
    name = "ts_proto_collection_template",
    srcs = ["ts_proto_collection.template.ts"],
)

ts_project(
    name = "lib",
    srcs = [
        "index.ts",
        "proto_collection.ts",
    ],
    declaration = True,
    source_map = True,
    deps = ["@npm//:node_modules"],  # can't use fine-grained deps
)

js_library(
    name = "pw_protobuf_compiler",
    package_name = "@pigweed/pw_protobuf_compiler",
    srcs = ["package.json"],
    deps = [":lib"],
)

ts_proto_collection(
    name = "test_proto_collection",
    js_proto_library = "//pw_protobuf_compiler:test_protos_tspb",
    proto_library = "//pw_protobuf_compiler:test_protos",
)

ts_library(
    name = "ts_proto_collection_test_lib",
    srcs = [
        "ts_proto_collection_test.ts",
    ],
    deps = [
        ":test_proto_collection",
        "//pw_protobuf_compiler:test_protos_tspb",
        "//pw_rpc:packet_proto_tspb",
        "@npm//@types/google-protobuf",
        "@npm//@types/jasmine",
    ],
)

jasmine_node_test(
    name = "ts_proto_collection_test",
    srcs = [
        ":ts_proto_collection_test_lib",
    ],
)
