# 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("//pw_protobuf_compiler/ts:ts_proto_collection.bzl", "ts_proto_collection")

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

ts_proto_collection(
    name = "transfer_proto_collection",
    js_proto_library = "@//pw_transfer:transfer_proto_tspb",
    proto_library = "@//pw_transfer:transfer_proto",
)

ts_project(
    name = "lib",
    srcs = [
        "client.ts",
        "transfer.ts",
    ],
    declaration = True,
    source_map = True,
    deps = [
        "//pw_rpc/ts:pw_rpc",
        "//pw_status/ts:pw_status",
        "//pw_transfer:transfer_proto_tspb",
        "@npm//:node_modules",  # can't use fine-grained deps
    ],
)

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

ts_library(
    name = "test_lib",
    srcs = [
        "transfer_test.ts",
    ],
    deps = [
        ":lib",
        ":transfer_proto_collection",
        "//pw_rpc/ts:lib",
        "//pw_rpc/ts:packet_proto_tspb",
        "//pw_status/ts:pw_status",
        "//pw_transfer:transfer_proto_tspb",
        "@npm//@types/jasmine",
    ],
)

jasmine_node_test(
    name = "test",
    srcs = [
        ":test_lib",
    ],
)
