# 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("@io_bazel_rules_go//go:def.bzl", "gazelle")
load("@build_bazel_rules_nodejs//internal/js_library:js_library.bzl", "js_library")

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

# The node_modules directory is created by `yarn install`
# WORKAROUND for https://github.com/bazelbuild/bazel/issues/374#issuecomment-296217940
filegroup(
    name = "node_modules",
    # Only include files needed for type-checking and runtime
    srcs = glob([
        "node_modules/**/*.js",
        "node_modules/**/*.d.ts",
        "node_modules/**/*.json"
    ]),
    visibility = ["//visibility:public"],
)

load("@io_bazel_skydoc//skylark:skylark.bzl", "skylark_doc")

skylark_doc(
    name = "docs",
    srcs = [
        "//internal:ts_repositories.bzl",
        "//internal:build_defs.bzl",
        "//internal:ts_config.bzl",
        "//internal/devserver:ts_devserver.bzl",
        "//internal/karma:ts_web_test.bzl",
        "//internal/protobufjs:ts_proto_library.bzl",
    ],
    format = "html",
    # The site is served at http://tsetse.info so the URL doesn't include a
    # /rules_typescript segment.
    # TODO(alexeagle): separate Tsetse docs from the rest of rules_typescript
    site_root = "/api",
    strip_prefix = "internal/",
)

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