| """This module provides macros for JS bundles made with the esbuild rule. |
| |
| To learn more about esbuild and the esbuild Bazel rule, see: |
| - https://esbuild.github.io |
| - https://docs.aspect.build/rulesets/aspect_rules_esbuild/ |
| """ |
| |
| load("@aspect_rules_esbuild//esbuild:defs.bzl", "esbuild") |
| |
| # Global defines required for bundles targeting the browser. |
| _BROWSER_DEFINES = { |
| # Prevent "global is not defined" errors. See https://github.com/evanw/esbuild/issues/73. |
| "global": "window", |
| } |
| |
| def esbuild_dev_bundle( |
| name, |
| entry_point, |
| output, |
| deps = [], |
| visibility = ["//visibility:public"], |
| **kwargs): |
| """Builds a development JS bundle. |
| |
| This macro is a wrapper around the esbuild rule with common settings for development builds, |
| such as sourcemap generation and no minification. |
| |
| Args: |
| name: The name of the rule. |
| entry_point: Entry-point TypeScript or JavaScript file. |
| deps: Any ts_library dependencies. |
| output: Name of the output JS file. |
| visibility: Visibility of the rule. |
| **kwargs: Any other arguments to be passed to the esbuild rule. |
| """ |
| esbuild( |
| name = name, |
| tsconfig = "//:ts_config", |
| entry_point = entry_point, |
| define = _BROWSER_DEFINES, |
| deps = deps, |
| sourcemap = "inline", |
| sources_content = True, |
| output = output, |
| visibility = visibility, |
| **kwargs |
| ) |
| |
| def esbuild_prod_bundle( |
| name, |
| entry_point, |
| output, |
| deps = [], |
| sourcemap = False, |
| visibility = ["//visibility:public"], |
| **kwargs): |
| """Builds a production JS bundle. |
| |
| This macro is a wrapper around the esbuild rule with common settings for production builds, such |
| as minifying the output. |
| |
| Args: |
| name: The name of the rule. |
| entry_point: Entry-point TypeScript or JavaScript file. |
| deps: Any ts_library dependencies. |
| output: Name of the output JS file. |
| sourcemap: Whether or not to produce a sourcemap. The bundle will be minified regardless. |
| visibility: Visibility of the rule. |
| **kwargs: Any other arguments to be passed to the esbuild rule. |
| """ |
| esbuild( |
| name = name, |
| tsconfig = "//:ts_config", |
| entry_point = entry_point, |
| define = _BROWSER_DEFINES, |
| deps = deps, |
| minify = True, |
| output = output, |
| visibility = visibility, |
| # Defaults to "linked" (https://esbuild.github.io/api/#sourcemap). |
| sourcemap = "linked" if sourcemap else "", |
| sources_content = sourcemap, |
| **kwargs |
| ) |
| |
| def esbuild_node_bundle( |
| name, |
| entry_point, |
| output, |
| deps = [], |
| visibility = ["//visibility:public"], |
| **kwargs): |
| """Builds a Node.JS JS bundle. |
| |
| This macro is a wrapper around the esbuild rule with common settings for Node.JS builds, |
| such as sourcemaps, no minification and the --platform esbuild flag set to "node". |
| |
| Args: |
| name: The name of the rule. |
| entry_point: Entry-point TypeScript or JavaScript file. |
| deps: Any ts_library dependencies. |
| output: Name of the output JS file. |
| visibility: Visibility of the rule. |
| **kwargs: Any other arguments to be passed to the esbuild rule. |
| """ |
| esbuild( |
| name = name, |
| tsconfig = "//:ts_config", |
| entry_point = entry_point, |
| deps = deps, |
| sourcemap = "inline", |
| sources_content = True, |
| output = output, |
| platform = "node", |
| target = "node16", |
| visibility = visibility, |
| **kwargs |
| ) |