# 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

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

exports_files([
    "worker_protocol.proto",
    # Exported to be consumed for generating skydoc.
    "build_defs.bzl", "ts_config.bzl", "ts_repositories.bzl",
])

load("//internal:build_defs.bzl", "ts_library")
load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_binary", "jasmine_node_test")

# Vanilla typescript compiler: run the tsc.js binary distributed by TypeScript
nodejs_binary(
    name = "tsc",
    node_modules = "@build_bazel_rules_typescript_tsc_wrapped_deps//:node_modules",
    entry_point = "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",
      "tsetse/rules/*.ts"
    ], exclude=["**/test_support.ts", "**/*_test.ts"]),
    supports_workers = False,
    compiler = ":tsc",
    node_modules = "@build_bazel_rules_typescript_tsc_wrapped_deps//:node_modules",
    module_name = "@bazel/typescript",
    module_root = "tsc_wrapped/index.d.ts",
    tsconfig = "//internal:tsc_wrapped/tsconfig.json",
    visibility = ["//visibility:public"],
    data = [
        # Should be @bazel_tools//src/main/protobuf:worker_protocol.proto
        # see https://github.com/bazelbuild/bazel/issues/3155#issuecomment-308156976
        ":worker_protocol.proto",
    ],
    # Cannot have any deps because it doesn't work with vanilla tsc
    # Workaround for https://github.com/Microsoft/TypeScript/issues/22208
    deps = [
    ],
)

# Other ts_library rules will use this custom compiler, which calls the
# TypeScript APIs to act like tsc, but adds capabilities like Bazel workers.
nodejs_binary(
    name = "tsc_wrapped_bin",
    data = [
        ":tsc_wrapped",
    ],
    node_modules = "@build_bazel_rules_typescript_tsc_wrapped_deps//:node_modules",
    entry_point = "build_bazel_rules_typescript/internal/tsc_wrapped/tsc_wrapped.js",
    templated_args = ["--node_options=--expose-gc"],
    visibility = ["//visibility:public"],
)

ts_library(
    name = "test_lib",
    srcs = glob(["tsc_wrapped/*_test.ts"]) + ["tsc_wrapped/test_support.ts"],
    deps = [":tsc_wrapped"],
    tsconfig = "//internal:tsc_wrapped/tsconfig.json",
)

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