# 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//:defs.bzl", "nodejs_binary")
load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
load("@npm_bazel_jasmine//:index.bzl", "jasmine_node_test")
load("@npm_bazel_typescript//:defs.bzl", "ts_library")

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

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

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

# Vanilla typescript compiler: run the tsc.js binary distributed by TypeScript
nodejs_binary(
    name = "tsc",
    data = [
        "@npm//source-map-support",
        "@npm//typescript",
    ],
    entry_point = "@npm//:node_modules/typescript/lib/tsc.js",
    visibility = ["//internal:__subpackages__"],
)

# Build our custom compiler using the vanilla one
ts_library(
    name = "tsc_wrapped",
    srcs = glob(
        [
            "tsc_wrapped/*.ts",
            "tsetse/**/*.ts",
        ],
        exclude = [
            "**/test_support.ts",
            "**/*_test.ts",
        ],
    ),
    compiler = ":tsc",
    data = [
        "//third_party/github.com/bazelbuild/bazel/src/main/protobuf:worker_protocol.proto",
    ],
    module_name = "@bazel/typescript",
    module_root = "tsc_wrapped/index.d.ts",
    supports_workers = False,
    tsconfig = "//internal:tsc_wrapped/tsconfig.json",
    visibility = ["//visibility:public"],
    # Cannot have any deps (except npm fine grained deps) because it doesn't
    # work with vanilla tsc.
    # Workaround for https://github.com/Microsoft/TypeScript/issues/22208
    deps = [
        "@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",
        "@npm//protobufjs",
        "@npm//source-map-support",
        "@npm//tsickle",
        "@npm//tsutils",
        "@npm//typescript",
        "//third_party/github.com/bazelbuild/bazel/src/main/protobuf:worker_protocol.proto",
    ],
    entry_point = ":tsc_wrapped/tsc_wrapped.ts",
    visibility = ["//visibility:public"],
)

ts_library(
    name = "test_lib",
    srcs = glob([
        "tsc_wrapped/*_test.ts",
        "tsetse/**/*_test.ts",
    ]) + [
        "tsc_wrapped/test_support.ts",
        "tsetse/util/testing/test_support.ts",
    ],
    compiler = "@build_bazel_rules_typescript//internal:tsc_wrapped_bin",
    tsconfig = "//internal:tsc_wrapped/tsconfig.json",
    deps = [
        ":tsc_wrapped",
        "@npm//@types/jasmine",
        "@npm//@types/node",
        "@npm//tsickle",
        "@npm//typescript",
    ],
)

jasmine_node_test(
    name = "test",
    srcs = [],
    deps = [
        ":test_lib",
        "@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",
    ],
)
