# 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.

# To update BUILD.bazel files after changing Go code, run
# bazel run //:gazelle
#
# Exclude node_modules, see
# https://github.com/bazelbuild/rules_go/blob/master/go/tools/gazelle/README.rst#directives
# gazelle:exclude node_modules
load("@bazel_gazelle//:def.bzl", "gazelle")
load("@build_bazel_rules_nodejs//internal/js_library:js_library.bzl", "js_library")

# ts_library defaults to this label in the top-level package.
# Point to where the file actually lives.
alias(
    name = "tsconfig.json",
    actual = "//examples:tsconfig.json",
    visibility = ["//visibility:public"],
)

exports_files(["LICENSE"])

gazelle(
    name = "gazelle",
    prefix = "github.com/bazelbuild/rules_typescript",
)

# Runtime libraries needed by the protobufjs library.
# Any JS code produced by the ts_proto_library rule has a runtime dependency on these scripts.
js_library(
    name = "protobufjs_bootstrap_scripts",
    srcs = [
        "@build_bazel_rules_typescript_protobufs_compiletime_deps//:node_modules/long/dist/long.js",
        "@build_bazel_rules_typescript_protobufs_compiletime_deps//:node_modules/protobufjs/dist/minimal/protobuf.min.js",
    ],
    # Make devmode loading work when it does require("protobufjs/minimal")
    # so this is shimmed to define it to equal global.protobuf
    amd_names = {
        "long": "Long",
        "protobufjs/minimal": "protobuf",
    },
    visibility = ["//visibility:public"],
)

load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_binary")

# A nodejs_binary for karma/karma to use by default in ts_web_test &
# ts_web_test_suite that depends on @npm//:@bazel/karma instead of the
# output of the //internal/karma/karma_concat_js ts_library rule. This
# default is for downstream users that depend on the @bazel/karma npm
# package. The generated @npm//:karma/karma target does not work
# as it does not have the additional data dependencies required.
nodejs_binary(
    name = "karma/karma",
    data = ["@npm//:@bazel/karma"],
    entry_point = "karma/bin/karma",
    install_source_map_support = False,
    visibility = ["//visibility:public"],
)

# A nodejs_binary for @bazel/typescript/tsc_wrapped to use by default in
# ts_library that depends on @npm//:@bazel/typescript instead of the
# output of the //internal/tsc_wrapped ts_library rule. This
# default is for downstream users that depend on the @bazel/karma npm
# package. The generated @npm//:@bazel/typescript/tsc_wrapped target
# does not work because it does not have the node `--expose-gc` flag
# set which is required to support the call to `global.gc()`.
nodejs_binary(
    name = "@bazel/typescript/tsc_wrapped",
    data = ["@npm//:@bazel/typescript"],
    entry_point = "@bazel/typescript/tsc_wrapped/tsc_wrapped.js",
    install_source_map_support = False,
    templated_args = ["--node_options=--expose-gc"],
    visibility = ["//visibility:public"],
)
