# 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 = [
        ":packet_proto_tspb",
        "//pw_protobuf_compiler/ts:pw_protobuf_compiler",
        "//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 = "@pigweed//pw_rpc/ts:test_protos_tspb",
    proto_library = "@pigweed//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 = [
        ":lib",
        ":packet_proto_tspb",
        ":rpc_proto_collection",
        ":test_protos_tspb",
        "//pw_protobuf_compiler/ts:pw_protobuf_compiler",
        "//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"],
)

js_proto_library(
    name = "packet_proto_tspb",
    protos = ["//pw_rpc:internal_packet_proto"],
)
