# 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/typescript:index.bzl", "ts_library", "ts_project")
load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test")
load("@rules_proto_grpc//js:defs.bzl", "js_proto_library")
load("//pw_protobuf_compiler/ts:ts_proto_collection.bzl", "ts_proto_collection")

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

ts_project(
    name = "lib",
    srcs = [
        "call.ts",
        "client.ts",
        "descriptors.ts",
        "hash.ts",
        "index.ts",
        "method.ts",
        "packets.ts",
        "rpc_classes.ts",
    ],
    declaration = True,
    source_map = True,
    deps = [
        "//pw_protobuf_compiler/ts:pw_protobuf_compiler",
        "//pw_rpc:packet_proto_tspb",
        "//pw_status/ts:pw_status",
        "@npm//@types/google-protobuf",
        "@npm//wait-queue",
    ],
)

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

ts_proto_collection(
    name = "rpc_proto_collection",
    js_proto_library = "@//pw_rpc/ts:test_protos_tspb",
    proto_library = "@//pw_rpc/ts:test_protos",
)

ts_library(
    name = "rpc_test_lib",
    srcs = [
        "call_test.ts",
        "client_test.ts",
        "descriptors_test.ts",
        "packets_test.ts",
    ],
    data = [
        ":test_protos",
    ],
    deps = [
        "test_protos_tspb",
        ":lib",
        ":rpc_proto_collection",
        "//pw_protobuf_compiler/ts:pw_protobuf_compiler",
        "//pw_rpc:packet_proto_tspb",
        "//pw_status/ts:pw_status",
        "@npm//@types/google-protobuf",
        "@npm//@types/jasmine",
        "@npm//@types/node",
    ],
)

jasmine_node_test(
    name = "rpc_test",
    srcs = [
        ":rpc_test_lib",
    ],
)

proto_library(
    name = "test_protos",
    srcs = [
        "test.proto",
        "test2.proto",
    ],
)

js_proto_library(
    name = "test_protos_tspb",
    protos = [":test_protos"],
)
