From 7b2b4cf18f33864517670b27e89d33633b383ad4 Mon Sep 17 00:00:00 2001 From: Alex Eagle Date: Mon, 8 Jun 2020 10:03:42 -0700 Subject: [PATCH] fix: don't expose an npm dependency from builtin Add an example test for generated_file_test --- examples/BUILD.bazel | 3 - examples/parcel/BUILD.bazel | 8 +-- examples/parcel/bundle.golden.js_ | 6 ++ examples/parcel/package-lock.json | 62 ------------------- examples/parcel/package.json | 2 - examples/parcel/parcel.spec.js | 11 ---- internal/generated_file_test/BUILD.bazel | 26 +++++++- internal/generated_file_test/bin.js | 3 +- .../generated_file_test.bzl | 6 +- internal/generated_file_test/rollup.config.js | 9 +++ 10 files changed, 48 insertions(+), 88 deletions(-) create mode 100644 examples/parcel/bundle.golden.js_ delete mode 100644 examples/parcel/parcel.spec.js create mode 100644 internal/generated_file_test/rollup.config.js diff --git a/examples/BUILD.bazel b/examples/BUILD.bazel index dacd6682f8..49cff25941 100644 --- a/examples/BUILD.bazel +++ b/examples/BUILD.bazel @@ -89,9 +89,6 @@ example_integration_test( example_integration_test( name = "examples_parcel", - npm_packages = { - "//packages/jasmine:npm_package": "@bazel/jasmine", - }, # Parcel spawns a subprocess which requires our node-patches # but we don't yet have a mechanism on Windows for spawned processes # to inherit the --require script needed to install the patches diff --git a/examples/parcel/BUILD.bazel b/examples/parcel/BUILD.bazel index 6f4abe1133..04596b886b 100644 --- a/examples/parcel/BUILD.bazel +++ b/examples/parcel/BUILD.bazel @@ -1,4 +1,4 @@ -load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") +load("@build_bazel_rules_nodejs//:index.bzl", "generated_file_test") load(":parcel.bzl", "parcel") parcel( @@ -9,8 +9,8 @@ parcel( entry_point = ":foo.js", ) -jasmine_node_test( +generated_file_test( name = "test", - srcs = glob(["*.spec.js"]), - deps = [":bundle"], + src = "bundle.golden.js_", + generated = ":bundle.js", ) diff --git a/examples/parcel/bundle.golden.js_ b/examples/parcel/bundle.golden.js_ new file mode 100644 index 0000000000..a1522711ee --- /dev/null +++ b/examples/parcel/bundle.golden.js_ @@ -0,0 +1,6 @@ +parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcelRequire,u="function"==typeof require&&require;function f(t,n){if(!r[t]){if(!e[t]){var i="function"==typeof parcelRequire&&parcelRequire;if(!n&&i)return i(t,!0);if(o)return o(t,!0);if(u&&"string"==typeof t)return u(t);var c=new Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[t][1][r]||r},p.cache={};var l=r[t]=new f.Module(t);e[t][0].call(l.exports,p,l,l.exports,this)}return r[t].exports;function p(e){return f(p.resolve(e))}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=r,f.parent=o,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]};for(var c=0;c { - it('should work', () => { - let written; - console.log = (m) => written = m; - const bundlePath = runfiles.resolveWorkspaceRelative('bundle.js'); - require(bundlePath); - expect(written).toEqual('Hello, Bob'); - }); -}); diff --git a/internal/generated_file_test/BUILD.bazel b/internal/generated_file_test/BUILD.bazel index 40d131da5c..22e0cc2f9a 100644 --- a/internal/generated_file_test/BUILD.bazel +++ b/internal/generated_file_test/BUILD.bazel @@ -1,4 +1,6 @@ load("@bazel_skylib//:bzl_library.bzl", "bzl_library") +load("//packages/rollup:index.bzl", "rollup_bundle") +load("//third_party/github.com/bazelbuild/bazel-skylib:rules/write_file.bzl", "write_file") package(default_visibility = ["//visibility:public"]) @@ -8,9 +10,29 @@ bzl_library( visibility = ["//visibility:public"], ) -exports_files(["bin.js"]) +write_file( + name = "write_BUILD", + out = "BUILD", + content = ["""exports_files(["bundle.js"])"""], +) filegroup( name = "package_contents", - srcs = glob(["*"]), + srcs = [ + "BUILD", + "bundle.js", + "generated_file_test.bzl", + ], +) + +rollup_bundle( + name = "bundle", + config_file = "rollup.config.js", + entry_point = "bin.js", + sourcemap = "hidden", + deps = [ + "@npm//rollup-plugin-commonjs", + "@npm//rollup-plugin-node-resolve", + "@npm//unidiff", + ], ) diff --git a/internal/generated_file_test/bin.js b/internal/generated_file_test/bin.js index 8991c540f7..8385ab5e1d 100644 --- a/internal/generated_file_test/bin.js +++ b/internal/generated_file_test/bin.js @@ -1,5 +1,7 @@ const fs = require('fs'); const path = require('path'); +// We run rollup so this import will be vendored into the resulting bundle +import * as unidiff from 'unidiff/unidiff'; const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']); function main(args) { @@ -21,7 +23,6 @@ function main(args) { return 0; } if (mode === '--verify') { - const unidiff = require('unidiff'); // Generated does not match golden const diff = unidiff.diffLines(goldenContents, actualContents); let prettyDiff = diff --git a/internal/generated_file_test/generated_file_test.bzl b/internal/generated_file_test/generated_file_test.bzl index 534e8db699..6264a8c372 100644 --- a/internal/generated_file_test/generated_file_test.bzl +++ b/internal/generated_file_test/generated_file_test.bzl @@ -16,7 +16,7 @@ def generated_file_test(name, generated, src, src_dbg = None, **kwargs): In this case you can specify what the dbg version of the output should look like **kwargs: extra arguments passed to the underlying nodejs_test or nodejs_binary """ - data = [src, generated, "@npm//unidiff"] + data = [src, generated] if src_dbg: data.append(src_dbg) @@ -26,7 +26,7 @@ def generated_file_test(name, generated, src, src_dbg = None, **kwargs): loc = "$(rootpath %s)" nodejs_test( name = name, - entry_point = "@build_bazel_rules_nodejs//internal/generated_file_test:bin.js", + entry_point = "@build_bazel_rules_nodejs//internal/generated_file_test:bundle.js", templated_args = ["--verify", loc % src, loc % src_dbg, loc % generated], data = data, **kwargs @@ -35,7 +35,7 @@ def generated_file_test(name, generated, src, src_dbg = None, **kwargs): nodejs_binary( name = name + ".update", testonly = True, - entry_point = "@build_bazel_rules_nodejs//internal/generated_file_test:bin.js", + entry_point = "@build_bazel_rules_nodejs//internal/generated_file_test:bundle.js", templated_args = ["--out", loc % src, loc % src_dbg, loc % generated], data = data, **kwargs diff --git a/internal/generated_file_test/rollup.config.js b/internal/generated_file_test/rollup.config.js new file mode 100644 index 0000000000..91086703b3 --- /dev/null +++ b/internal/generated_file_test/rollup.config.js @@ -0,0 +1,9 @@ +const commonjs = require('rollup-plugin-commonjs'); +const nodeRequire = require('rollup-plugin-node-resolve'); + +module.exports = { + plugins: [ + nodeRequire(), + commonjs(), + ], +};