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

load("//:index.bzl", "generated_file_test")
load("//tools/stardoc:index.bzl", "stardoc")

stardoc(
    name = "builtins",
    out = "builtins.md_",
    input = "//:index.for_docs.bzl",
    tags = ["fix-windows"],
    deps = [
        "//:bzl",
        "//internal/node:bzl",
    ],
)

stardoc(
    name = "providers",
    out = "providers.md_",
    input = "//:providers.bzl",
    tags = ["fix-windows"],
    deps = [
        "//:bzl",
    ],
)

_READMES = {
    "Built-ins": ":builtins.md_",
    "Concatjs": "//packages/concatjs:README.md",
    "Cypress": "//packages/cypress:README.md",
    "Jasmine": "//packages/jasmine:README.md",
    "Labs": "//packages/labs:README.md",
    "Protractor": "//packages/protractor:README.md",
    "Providers": ":providers.md_",
    "Rollup": "//packages/rollup:README.md",
    "Terser": "//packages/terser:README.md",
    "Toolchains": "//toolchains:README.md",
    "TypeScript": "//packages/typescript:README.md",
    "esbuild": "//packages/esbuild:README.md",
}

[
    generated_file_test(
        name = "check_" + k.lower(),
        src = k + ".md",
        generated = v,
    )
    for [
        k,
        v,
    ] in _READMES.items()
]
