# 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.
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")

go_library(
    name = "go_default_library",
    srcs = [
        "main.go",
        "runfile-filesystem.go",
    ],
    importpath = "github.com/bazelbuild/rules_typescript/devserver",
    visibility = ["//visibility:private"],
    deps = [
        "//devserver/concatjs:go_default_library",
        "//devserver/devserver:go_default_library",
        "//devserver/runfiles:go_default_library",
    ],
)

go_binary(
    name = "devserver_bin",
    embed = [":go_default_library"],
    visibility = ["//visibility:public"],
)

go_binary(
    name = "devserver-darwin",
    out = "devserver-darwin_x64",
    embed = [":go_default_library"],
    goarch = "amd64",
    goos = "darwin",
    pure = "on",
    visibility = ["//visibility:public"],
)

go_binary(
    name = "devserver-linux",
    out = "devserver-linux_x64",
    embed = [":go_default_library"],
    goarch = "amd64",
    goos = "linux",
    pure = "on",
    visibility = ["//visibility:public"],
)

go_binary(
    name = "devserver-windows",
    out = "devserver-windows_x64.exe",
    embed = [":go_default_library"],
    goarch = "amd64",
    goos = "windows",
    pure = "on",
    visibility = ["//visibility:public"],
)

filegroup(
    name = "npm_package_assets",
    srcs = [
        "BUILD.bazel",
    ],
    visibility = ["//visibility:public"],
)

# END-DEV-ONLY
config_setting(
    name = "darwin_x64",
    constraint_values = [
        "@bazel_tools//platforms:osx",
        "@bazel_tools//platforms:x86_64",
    ],
)

config_setting(
    name = "linux_x64",
    constraint_values = [
        "@bazel_tools//platforms:linux",
        "@bazel_tools//platforms:x86_64",
    ],
)

config_setting(
    name = "windows_x64",
    constraint_values = [
        "@bazel_tools//platforms:windows",
        "@bazel_tools//platforms:x86_64",
    ],
)

filegroup(
    name = "devserver",
    srcs = select({
        ":darwin_x64": ["devserver-darwin_x64"],
        ":linux_x64": ["devserver-linux_x64"],
        ":windows_x64": ["devserver-windows_x64.exe"],
    }),
    # Don't build on CI
    tags = ["manual"],
    visibility = ["//visibility:public"],
)
