load("@aspect_rules_js//npm:defs.bzl", "npm_package")
load("@aspect_rules_ts//ts:defs.bzl", "ts_project")
load("@flatbuffers_npm//:defs.bzl", "npm_link_all_packages")
load("@rules_shell//shell:sh_binary.bzl", "sh_binary")

filegroup(
    name = "distribution",
    srcs = [
        "BUILD.bazel",
        "compile_flat_file.sh",
        "pnpm-lock.yaml",
    ] + glob([
        "*.ts",
    ]),
    visibility = ["//visibility:public"],
)

npm_link_all_packages(name = "node_modules")

# Add an index to emulate the top-level package.json's "main" entry.
genrule(
    name = "generate_index.ts",
    outs = ["index.ts"],
    cmd = """echo "export * from './flatbuffers.js'" > $(OUTS)""",
)

ts_project(
    name = "flatbuffers_ts",
    srcs = [
        "builder.ts",
        "byte-buffer.ts",
        "constants.ts",
        "encoding.ts",
        "flatbuffers.ts",
        "types.ts",
        "utils.ts",
        ":index.ts",
    ],
    declaration = True,
    tsconfig = {
        "compilerOptions": {
            "module": "commonjs",
            "declaration": True,
            "moduleResolution": "node",
            "lib": [
                "ES2015",
                "ES2020.BigInt",
                "DOM",
            ],
            "types": ["node"],
            "strict": True,
        },
    },
    visibility = ["//visibility:public"],
    deps = [
        ":node_modules/@types/node",
    ],
)

npm_package(
    name = "flatbuffers",
    srcs = [":flatbuffers_ts"],
    include_external_repositories = ["*"],
    package = "flatbuffers",
    visibility = ["//visibility:public"],
)

sh_binary(
    name = "compile_flat_file",
    srcs = ["compile_flat_file.sh"],
    data = [
        "//:flatc",
        "@nodejs_linux_amd64//:node_bin",
    ],
    # We just depend directly on the linux amd64 nodejs binary, so only support
    # running this script on amd64 for now.
    target_compatible_with = [
        "@platforms//cpu:x86_64",
        "@platforms//os:linux",
    ],
    visibility = ["//visibility:public"],
    deps = ["@bazel_tools//tools/bash/runfiles"],
)
