diff --git a/.direnv/flake-inputs/m8b59f51n4mjwch34bk6zhyak3v1n222-source b/.direnv/flake-inputs/m8b59f51n4mjwch34bk6zhyak3v1n222-source deleted file mode 120000 index dc3b129..0000000 --- a/.direnv/flake-inputs/m8b59f51n4mjwch34bk6zhyak3v1n222-source +++ /dev/null @@ -1 +0,0 @@ -/nix/store/m8b59f51n4mjwch34bk6zhyak3v1n222-source \ No newline at end of file diff --git a/README.md b/README.md index 8d211c0..13456ce 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,7 @@ load( "bun_binary", "bun_bundle", "bun_dev", + "bun_script", "bun_test", "js_library", "ts_library", @@ -111,6 +112,36 @@ bazel test //path/to:your_bun_test All `rules_bun` rule-driven Bun invocations pass `--bun`. +## Package scripts (`bun_script`) + +Use `bun_script` to expose a `package.json` script as a Bazel executable target. + +```starlark +load("@rules_bun//bun:defs.bzl", "bun_script") + +bun_script( + name = "web_dev", + script = "dev", + package_json = "package.json", + node_modules = "@npm//:node_modules", + data = glob([ + "src/**", + "static/**", + "vite.config.*", + "svelte.config.*", + "tsconfig*.json", + ]), +) +``` + +Run it with: + +```bash +bazel run //path/to:web_dev -- --host +``` + +`bun_script` defaults to running from the directory containing `package.json`, which matches the usual expectations for `vite`, `svelte-kit`, and similar package scripts. + ## Development mode (`bun_dev`) Use `bun_dev` for long-running local development with Bun watch mode. diff --git a/bun/BUILD.bazel b/bun/BUILD.bazel index bdccb03..051b570 100644 --- a/bun/BUILD.bazel +++ b/bun/BUILD.bazel @@ -22,6 +22,7 @@ bzl_library( "//internal:bun_binary_bzl", "//internal:bun_bundle_bzl", "//internal:bun_dev_bzl", + "//internal:bun_script_bzl", "//internal:bun_test_bzl", "//internal:js_library_bzl", ], diff --git a/bun/defs.bzl b/bun/defs.bzl index baf4960..104f73a 100644 --- a/bun/defs.bzl +++ b/bun/defs.bzl @@ -2,6 +2,7 @@ load("//internal:bun_binary.bzl", _bun_binary = "bun_binary") load("//internal:bun_bundle.bzl", _bun_bundle = "bun_bundle") load("//internal:bun_dev.bzl", _bun_dev = "bun_dev") +load("//internal:bun_script.bzl", _bun_script = "bun_script") load("//internal:bun_test.bzl", _bun_test = "bun_test") load("//internal:js_library.bzl", _js_library = "js_library", _ts_library = "ts_library") load(":toolchain.bzl", _BunToolchainInfo = "BunToolchainInfo", _bun_toolchain = "bun_toolchain") @@ -11,6 +12,7 @@ visibility("public") bun_binary = _bun_binary bun_bundle = _bun_bundle bun_dev = _bun_dev +bun_script = _bun_script bun_test = _bun_test js_library = _js_library ts_library = _ts_library diff --git a/docs/BUILD.bazel b/docs/BUILD.bazel index 396b198..1114830 100644 --- a/docs/BUILD.bazel +++ b/docs/BUILD.bazel @@ -10,6 +10,7 @@ stardoc( "bun_binary", "bun_bundle", "bun_dev", + "bun_script", "bun_test", "js_library", "ts_library", diff --git a/docs/rules.md b/docs/rules.md index 689f5c2..85e1279 100644 --- a/docs/rules.md +++ b/docs/rules.md @@ -26,6 +26,18 @@ Attributes: - `data` (label_list, optional): additional runtime files for dev process. - `working_dir` (string, default: `"workspace"`, values: `"workspace" | "entry_point"`): runtime working directory. +## bun_script + +Runs a named `package.json` script with Bun as an executable target (`bazel run`). + +Attributes: + +- `script` (string, required): package script name passed to `bun run