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

# BEGIN-DEV-ONLY
# Parts of this BUILD file only necessary when building within the bazelbuild/rules_typescript repo.
# The generated `@bazel/typescript` npm package contains a trimmed BUILD file using # DEV-ONLY fences.
#
# 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")

# END-DEV-ONLY
load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_binary", "npm_package")

# BEGIN-DEV-ONLY
load("@build_bazel_rules_nodejs//internal/js_library:js_library.bzl", "js_library")
load("//:version.bzl", "COMPAT_VERSION")

# 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"],
)

npm_package(
    name = "npm_package",
    srcs = [
        "BUILD.bazel",
        "LICENSE",
        "README.md",
        "WORKSPACE",
        "defs.bzl",
        "package.bzl",
        "package.json",
        "version.bzl",
        "//devserver:npm_package_assets",
        "//internal:npm_package_assets",
        "//third_party/github.com/bazelbuild/bazel/src/main/protobuf:npm_package_assets",
        "//ts_auto_deps:npm_package_assets",
    ],
    replacements = {
        "(#|\/\/)\\s+BEGIN-DEV-ONLY[\\w\W]+?(#|\/\/)\\s+END-DEV-ONLY": "",
        # Do a simple replacement needed to make the local development differ
        # from how our release is used.
        "//devserver:devserver_bin": "//devserver",
        "0.0.0-COMPAT_VERSION": COMPAT_VERSION,
    },
    deps = [
        "//devserver:devserver-darwin",
        "//devserver:devserver-linux",
        "//devserver:devserver-windows",
        "//internal:tsc_wrapped",
        "//ts_auto_deps:ts_auto_deps-darwin",
        "//ts_auto_deps:ts_auto_deps-linux",
        "//ts_auto_deps:ts_auto_deps-windows",
    ],
)

# Produces the release we publish to GitHub. Users download this starlark package
# to get the @build_bazel_rules_typescript workspace.
# FIXME(gregmagolan): strip the npm_package prefix from within the generated archive
# pkg_tar(
#     name = "release",
#     srcs = ["//:npm_package"],
#     extension = "tgz",
# )

# END-DEV-ONLY
# 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. A generated @npm//@bazel/typescript/bin:tsc_wrapped target
# would 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/internal/tsc_wrapped/tsc_wrapped.js",
    install_source_map_support = False,
    templated_args = ["--node_options=--expose-gc"],
    visibility = ["//visibility:public"],
)
