diff --git a/packages/esbuild/esbuild.bzl b/packages/esbuild/esbuild.bzl index bae8889bf7..b3a8220ca8 100644 --- a/packages/esbuild/esbuild.bzl +++ b/packages/esbuild/esbuild.bzl @@ -291,13 +291,18 @@ def esbuild_macro(name, output_dir = False, **kwargs): **kwargs ) else: + output = "%s.js" % name + if "output" in kwargs: + output = kwargs.pop("output") + output_map = None sourcemap = kwargs.get("sourcemap", None) if sourcemap != "inline": - output_map = "%s.js.map" % name + output_map = "%s.map" % output + esbuild( name = name, - output = "%s.js" % name, + output = output, output_map = output_map, **kwargs ) diff --git a/packages/esbuild/test/output/BUILD.bazel b/packages/esbuild/test/output/BUILD.bazel new file mode 100644 index 0000000000..fa004b8b5a --- /dev/null +++ b/packages/esbuild/test/output/BUILD.bazel @@ -0,0 +1,29 @@ +load("//packages/esbuild/test:tests.bzl", "esbuild") +load("//packages/jasmine:index.bzl", "jasmine_node_test") +load("//packages/typescript:index.bzl", "ts_library") + +ts_library( + name = "main", + srcs = [ + "main.ts", + ], + deps = [ + "@npm//@types/node", + ], +) + +esbuild( + name = "bundle_different_output", + args = ["--keep-names"], + entry_point = "main.ts", + output = "different_output.js", + deps = [":main"], +) + +jasmine_node_test( + name = "bundle_test", + srcs = ["bundle_test.js"], + data = [ + ":bundle_different_output", + ], +) diff --git a/packages/esbuild/test/output/bundle_test.js b/packages/esbuild/test/output/bundle_test.js new file mode 100644 index 0000000000..0c6d7b8151 --- /dev/null +++ b/packages/esbuild/test/output/bundle_test.js @@ -0,0 +1,25 @@ +const {readFileSync} = require('fs'); +const path = require('path'); + +const helper = require(process.env.BAZEL_NODE_RUNFILES_HELPER); +const locationBase = 'build_bazel_rules_nodejs/packages/esbuild/test/output/'; + +// Location for :bundle_output +const bundleOutputLocation = helper.resolve(path.join(locationBase, 'different_output.js')); +const bundleOutputSourcemapLocation = + helper.resolve(path.join(locationBase, 'different_output.js.map')); + +describe('esbuild sourcemap', () => { + it('writes the bundle with name specified by \'output\'', () => { + const bundle = readFileSync(bundleOutputLocation, {encoding: 'utf8'}); + expect(bundle).toContain('foo = {'); + // Sourcemaps should point to the right file + expect(bundle).toContain('//# sourceMappingURL=different_output.js.map'); + }); + + it('writes the sourcemap with name specified by \'output\'', () => { + const sourcemap = readFileSync(bundleOutputSourcemapLocation, {encoding: 'utf8'}); + expect(sourcemap).toContain('"sources":'); + expect(sourcemap).toContain('"mappings":'); + }); +}) diff --git a/packages/esbuild/test/output/main.ts b/packages/esbuild/test/output/main.ts new file mode 100644 index 0000000000..7dabd31053 --- /dev/null +++ b/packages/esbuild/test/output/main.ts @@ -0,0 +1,8 @@ +export interface Foo { + x: number, y: string, +} + +export const foo: Foo = { + x: 123, + y: 'hello', +}