# Copyright 2017 The Bazel Authors. All rights reserved.
#
# 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
#
#    http://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.

# gazelle:exclude worker_protocol.proto

load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary")
load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
load("@npm_bazel_jasmine//:index.bzl", "jasmine_node_test")
load("@npm//typescript:index.bzl", "tsc")
load("@npm_bazel_typescript//:index.bzl", "ts_library")

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

exports_files(["tsetse/tsconfig.json"])

bzl_library(
    name = "bzl",
    srcs = glob(["common/*.bzl"]),
    visibility = ["//visibility:public"],
)

_TSC_WRAPPED_TESTS = [
    "**/test_support.ts",
    "**/*_test.ts",
]

_TSC_WRAPPED_SRCS = glob(
    [
        "tsc_wrapped/*.ts",
        "tsetse/**/*.ts",
    ],
    exclude = _TSC_WRAPPED_TESTS + ["tsetse/tests/**"],
)

_TSC_WRAPPED_JS = [k[:-3] + ".js" for k in _TSC_WRAPPED_SRCS]
_TSC_WRAPPED_TYPINGS = [k[:-3] + ".d.ts" for k in _TSC_WRAPPED_SRCS]
# Build our custom compiler using the vanilla one
tsc(
    name = "tsc_wrapped",
    args = [
        "--declaration",
        "-p",
        "$(execpath //internal:tsconfig.json)",
        "--outDir",
        "$(RULEDIR)",
    ],
    outs = _TSC_WRAPPED_JS + _TSC_WRAPPED_TYPINGS,
    visibility = ["//visibility:public"],
    data = _TSC_WRAPPED_SRCS + [
        "//internal:tsconfig.json",
        "@npm//@types/node",
        "@npm//protobufjs",
        "@npm//tsickle",
        "@npm//tsutils",
        "@npm//typescript",
    ],
)

# Other ts_library rules will use this custom compiler, which calls the
# TypeScript APIs to act like tsc, but adds capabilities like Bazel workers.
# TODO(gregmagolan): make @npm//tsickle dependency optional
nodejs_binary(
    name = "tsc_wrapped_bin",
    data = [
        ":tsc_wrapped",
        "//third_party/github.com/bazelbuild/bazel/src/main/protobuf:worker_protocol.proto",
        "@npm//protobufjs",
        "@npm//source-map-support",
        "@npm//tsickle",
        "@npm//tsutils",
        "@npm//typescript",
    ],
    entry_point = ":tsc_wrapped/tsc_wrapped.js",
    visibility = ["//visibility:public"],
)

ts_library(
    name = "test_lib",
    srcs = glob(_TSC_WRAPPED_TESTS) + _TSC_WRAPPED_TYPINGS,
    compiler = "@build_bazel_rules_typescript//internal:tsc_wrapped_bin",
    tsconfig = "//internal:tsconfig.json",
    deps = [
        "@npm//@types/jasmine",
        "@npm//@types/node",
        "@npm//tsickle",
        "@npm//typescript",
    ],
)

jasmine_node_test(
    name = "test",
    srcs = [],
    deps = _TSC_WRAPPED_JS + [
        ":test_lib",
        "//third_party/github.com/bazelbuild/bazel/src/main/protobuf:worker_protocol.proto",
        "@npm//jasmine",
        "@npm//protobufjs",
        "@npm//source-map",
        "@npm//typescript",
    ],
)

# We don't need to distribute any of the content of the BUILD.bazel file in this package
# So generate an empty marker file
genrule(
    name = "generated_BUILD",
    srcs = [],
    # Name the output "BUILD" so it doesn't collide with InputArtifact "BUILD.bazel"
    outs = ["BUILD"],
    cmd = "echo \"# Marker that this directory is a Bazel package\" > $@",
)

filegroup(
    name = "npm_package_assets",
    srcs = [
        "common/compilation.bzl",
        "common/json_marshal.bzl",
        "common/module_mappings.bzl",
        "common/tsconfig.bzl",
    ],
)
