# 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")
load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar")

# 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 @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/typescript npm
# package. The generated @npm//@bazel/typescript/bin: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"],
)

# Produces the release we publish to GitHub. Users download this starlark package
# to get the @build_bazel_rules_typescript workspace.
# It's the companion of the @bazel/typescript, @bazel/karma, etc npm packages.
pkg_tar(
    name = "release",
    extension = "tgz",
    srcs = [
      "BUILD.bazel",
      "AUTHORS",
      "defs.bzl",
      "LICENSE",
      "package.bzl",
      "WORKSPACE",
    ],
    deps = [
      "//devserver:package",
      "//internal:package",
      "//third_party/github.com/bazelbuild/bazel/src/main/protobuf:package",
    ],
)
