diff --git a/e2e/webapp/test.js b/e2e/webapp/test.js index c8c8d64272..14b0c57f06 100644 --- a/e2e/webapp/test.js +++ b/e2e/webapp/test.js @@ -1,5 +1,6 @@ const fs = require('fs'); -const content = fs.readFileSync(require.resolve('e2e_webapp/out.min/app.js'), 'utf-8'); +const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']); +const content = fs.readFileSync(runfiles.resolve('e2e_webapp/out.min/app.js'), 'utf-8'); if (content.indexOf('import("./strings') < 0) { console.error(content); process.exitCode = 1; diff --git a/internal/bazel_integration_test/test_runner.js b/internal/bazel_integration_test/test_runner.js index 03f1e52e0c..70f205dbbe 100644 --- a/internal/bazel_integration_test/test_runner.js +++ b/internal/bazel_integration_test/test_runner.js @@ -23,7 +23,7 @@ const spawnSync = require('child_process').spawnSync; const fs = require('fs'); const path = require('path'); const tmp = require('tmp'); - +const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']); const DEBUG = !!process.env['BAZEL_INTEGRATION_TEST_DEBUG']; const VERBOSE_LOGS = !!process.env['VERBOSE_LOGS']; @@ -189,7 +189,7 @@ if (bazelrcImportsKeys.length && isFile(bazelrcFile)) { let bazelrcContents = fs.readFileSync(bazelrcFile, {encoding: 'utf-8'}); for (const importKey of bazelrcImportsKeys) { const importContents = - fs.readFileSync(require.resolve(config.bazelrcImports[importKey]), {encoding: 'utf-8'}); + fs.readFileSync(runfiles.resolve(config.bazelrcImports[importKey]), {encoding: 'utf-8'}); bazelrcContents = bazelrcContents.replace(importKey, importContents); } fs.writeFileSync(bazelrcFile, bazelrcContents); @@ -212,7 +212,7 @@ if (config.bazelrcAppend) { let workspaceContents = fs.readFileSync(workspaceFile, {encoding: 'utf-8'}); // replace repositories for (const repositoryKey of Object.keys(config.repositories)) { - const archiveFile = require.resolve(config.repositories[repositoryKey]).replace(/\\/g, '/'); + const archiveFile = runfiles.resolve(config.repositories[repositoryKey]).replace(/\\/g, '/'); const regex = new RegExp(`(local_repository|http_archive|git_repository)\\(\\s*name\\s*\\=\\s*"${ repositoryKey}"[^)]+`); @@ -281,7 +281,7 @@ if (isFile(packageJsonFile)) { const isWindows = process.platform === 'win32'; const bazelBinary = - require.resolve(`${config.bazelBinaryWorkspace}/bazel${isWindows ? '.exe' : ''}`); + runfiles.resolve(`${config.bazelBinaryWorkspace}/bazel${isWindows ? '.exe' : ''}`); if (DEBUG) { log(` diff --git a/internal/check_bazel_version.js b/internal/check_bazel_version.js index 534a26e5cf..78cc81fc68 100644 --- a/internal/check_bazel_version.js +++ b/internal/check_bazel_version.js @@ -16,15 +16,16 @@ */ 'use strict'; +const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']); const fs = require('fs'); const args = process.argv.slice(2); const BAZEL_VERSION = args[0]; const version = - fs.readFileSync(require.resolve('build_bazel_rules_nodejs/.bazelversion'), 'utf-8').trim(); + fs.readFileSync(runfiles.resolve('build_bazel_rules_nodejs/.bazelversion'), 'utf-8').trim(); const bazelci_version = - fs.readFileSync(require.resolve('build_bazel_rules_nodejs/.bazelci/presubmit.yml'), 'utf-8') + fs.readFileSync(runfiles.resolve('build_bazel_rules_nodejs/.bazelci/presubmit.yml'), 'utf-8') .split('\n') .find(v => v.startsWith('bazel:')); diff --git a/internal/npm_install/test/browserify.spec.js b/internal/npm_install/test/browserify.spec.js index a930edf306..747c9fb094 100644 --- a/internal/npm_install/test/browserify.spec.js +++ b/internal/npm_install/test/browserify.spec.js @@ -1,7 +1,9 @@ const fs = require('fs'); const path = require('path'); -const mainFile = 'build_bazel_rules_nodejs/third_party/npm/node_modules/browserify/index.js'; -const directory = 'build_bazel_rules_nodejs/internal/npm_install/test'; +const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']); +const mainFile = + runfiles.resolve('build_bazel_rules_nodejs/third_party/npm/node_modules/browserify/index.js'); +const directory = runfiles.resolve('build_bazel_rules_nodejs/internal/npm_install/test'); describe('our bundled, vendored browserify binary', () => { it('should preserve licenses', () => { diff --git a/internal/npm_install/test/check.js b/internal/npm_install/test/check.js index 22e00fad46..919f80aea1 100644 --- a/internal/npm_install/test/check.js +++ b/internal/npm_install/test/check.js @@ -1,11 +1,12 @@ const fs = require('fs'); const path = require('path'); -const unidiff = require('unidiff') +const unidiff = require('unidiff'); +const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']); function check(file, updateGolden = false) { // Strip comments from generated file for comparison to golden // to make comparison less brittle - const actual = require.resolve(path.posix.join('fine_grained_goldens', file)); + const actual = runfiles.resolve(path.posix.join('fine_grained_goldens', file)); const actualContents = fs.readFileSync(actual, {encoding: 'utf-8'}) .replace(/\r\n/g, '\n') @@ -18,7 +19,7 @@ function check(file, updateGolden = false) { .replace(/[\n]+/g, '\n'); // Load the golden file for comparison - const golden = require.resolve('./golden/' + file + '.golden'); + const golden = runfiles.resolvePackageRelative('./golden/' + file + '.golden'); if (updateGolden) { // Write to golden file diff --git a/internal/pkg_web/test2/spec.js b/internal/pkg_web/test2/spec.js index 4022c4c881..a86a4e7472 100644 --- a/internal/pkg_web/test2/spec.js +++ b/internal/pkg_web/test2/spec.js @@ -1,14 +1,13 @@ const fs = require('fs'); const path = require('path'); +const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']); -process.chdir(path.join(process.env['TEST_SRCDIR'], 'build_bazel_rules_nodejs')); -console.error(fs.readdirSync('.')); describe('pkg_web paths', () => { it('should match the golden file', () => { const output = 'build_bazel_rules_nodejs/internal/pkg_web/test2/pkg/index.html'; const golden = 'build_bazel_rules_nodejs/internal/pkg_web/test2/index_golden.html_'; - const actual = fs.readFileSync(require.resolve(output), {encoding: 'utf-8'}); - const expected = fs.readFileSync(require.resolve(golden), {encoding: 'utf-8'}); + const actual = fs.readFileSync(runfiles.resolve(output), {encoding: 'utf-8'}); + const expected = fs.readFileSync(runfiles.resolve(golden), {encoding: 'utf-8'}); // make the input hermetic by replacing the cache-buster timestamp expect(actual.replace(/\?v=\d+/g, '?v=123').trim()).toBe(expected.trim()); }); diff --git a/packages/concatjs/web_test/test/karma_typescript/user_files.spec.js b/packages/concatjs/web_test/test/karma_typescript/user_files.spec.js index 2cf0ef40eb..342ef42002 100644 --- a/packages/concatjs/web_test/test/karma_typescript/user_files.spec.js +++ b/packages/concatjs/web_test/test/karma_typescript/user_files.spec.js @@ -1,11 +1,12 @@ const fs = require('fs'); +const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']); describe('karma_web_test_suite', () => { let config; beforeAll(() => { config = fs.readFileSync( - require.resolve( + runfiles.resolve( 'build_bazel_rules_nodejs/packages/concatjs/web_test/test/karma_typescript/testing_wrapped_test.conf.js'), 'utf-8'); }); diff --git a/packages/create/test.js b/packages/create/test.js index 105d69c9f7..851c13aa4d 100644 --- a/packages/create/test.js +++ b/packages/create/test.js @@ -2,7 +2,8 @@ * Simple node program to test that workspace creation works. * We don't use a test framework here since dependencies are awkward. */ -const pkg = 'build_bazel_rules_nodejs/packages/create/npm_package'; +const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']); +const pkg = runfiles.resolve('build_bazel_rules_nodejs/packages/create/npm_package'); const fs = require('fs'); const {main} = require(pkg); diff --git a/packages/labs/test/protobufjs/BUILD.bazel b/packages/labs/test/protobufjs/BUILD.bazel index 28b9802a17..8271540814 100644 --- a/packages/labs/test/protobufjs/BUILD.bazel +++ b/packages/labs/test/protobufjs/BUILD.bazel @@ -9,6 +9,7 @@ ts_library( deps = [ ":test_ts_proto", "@npm//@types/jasmine", + "@npm//@types/node", ], ) diff --git a/packages/labs/test/protobufjs/test.ts b/packages/labs/test/protobufjs/test.ts index d9d80f5360..78deddced9 100644 --- a/packages/labs/test/protobufjs/test.ts +++ b/packages/labs/test/protobufjs/test.ts @@ -1,4 +1,5 @@ -import {TestMessage} from 'build_bazel_rules_nodejs/packages/labs/test/protobufjs/test_ts_proto'; +const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']!); +const {TestMessage} = require(runfiles.resolvePackageRelative('test_ts_proto.js')); describe('protobufjs', () => { it('should work in node', () => { diff --git a/packages/protractor/protractor-utils.ts b/packages/protractor/protractor-utils.ts index 427197851b..16e2322eb4 100644 --- a/packages/protractor/protractor-utils.ts +++ b/packages/protractor/protractor-utils.ts @@ -15,6 +15,7 @@ * limitations under the License. */ +const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']!); import * as child_process from 'child_process'; import * as net from 'net'; @@ -98,7 +99,7 @@ export interface ServerSpec { export async function runServer( workspace: string, serverTarget: string, portFlag: string, serverArgs: string[], timeout = 5000): Promise { - const serverPath = require.resolve(`${workspace}/${serverTarget}`); + const serverPath = runfiles.resolve(`${workspace}/${serverTarget}`); const port = await findFreeTcpPort(); // Start the Bazel server binary with a random free TCP port. diff --git a/packages/protractor/protractor.conf.js b/packages/protractor/protractor.conf.js index 6726f5610c..897cf48f90 100644 --- a/packages/protractor/protractor.conf.js +++ b/packages/protractor/protractor.conf.js @@ -14,6 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']); const path = require('path'); function log_verbose(...m) { @@ -76,7 +77,7 @@ let conf = {}; // Import the user's base protractor configuration if specified if (configPath) { - const baseConf = require(configPath); + const baseConf = require(runfiles.resolve(configPath)); if (!baseConf.config) { throw new Error('Invalid base protractor configuration. Expected config to be exported.'); } @@ -86,7 +87,7 @@ if (configPath) { // Import the user's on prepare function if specified if (onPreparePath) { - const onPrepare = require(onPreparePath); + const onPrepare = require(runfiles.resolve(onPreparePath)); if (typeof onPrepare === 'function') { const original = conf.onPrepare; conf.onPrepare = function() { @@ -104,7 +105,7 @@ if (onPreparePath) { setConf(conf, 'framework', 'jasmine2', 'is set to jasmine2'); const specs = - [TMPL_specs].map(s => require.resolve(s)).filter(s => /(\b|_)(spec|test)\.js$/.test(s)); + [TMPL_specs].map(s => runfiles.resolve(s)).filter(s => /(\b|_)(spec|test)\.js$/.test(s)); setConf(conf, 'specs', specs, 'are determined by the srcs and deps attribute'); @@ -112,7 +113,7 @@ setConf(conf, 'specs', specs, 'are determined by the srcs and deps attribute'); // of the browsers attribute passed to karma_web_test_suite // We setup the protractor configuration based on the values in this object if (process.env['WEB_TEST_METADATA']) { - const webTestMetadata = require(process.env['WEB_TEST_METADATA']); + const webTestMetadata = require(runfiles.resolve(process.env['WEB_TEST_METADATA'])); log_verbose(`WEB_TEST_METADATA: ${JSON.stringify(webTestMetadata, null, 2)}`); if (webTestMetadata['environment'] === 'local') { // When a local chrome or firefox browser is chosen such as @@ -123,8 +124,8 @@ if (process.env['WEB_TEST_METADATA']) { const webTestNamedFiles = webTestMetadata['webTestFiles'][0]['namedFiles']; const headless = !process.env['DISPLAY']; if (webTestNamedFiles['CHROMIUM']) { - const chromeBin = require.resolve(webTestNamedFiles['CHROMIUM']); - const chromeDriver = require.resolve(webTestNamedFiles['CHROMEDRIVER']); + const chromeBin = runfiles.resolve(webTestNamedFiles['CHROMIUM']); + const chromeDriver = runfiles.resolve(webTestNamedFiles['CHROMEDRIVER']); // The sandbox needs to be disabled, because it causes Chrome to crash on some environments. // See: http://chromedriver.chromium.org/help/chrome-doesn-t-start @@ -146,7 +147,7 @@ if (process.env['WEB_TEST_METADATA']) { // TODO(gmagolan): implement firefox support for protractor throw new Error('Firefox not yet support by protractor_web_test_suite'); - // const firefoxBin = require.resolve(webTestNamedFiles['FIREFOX']) + // const firefoxBin = runfiles.resolve(webTestNamedFiles['FIREFOX']) // const args = []; // if (headless) { // args.push("--headless") diff --git a/packages/terser/test/directory-args.spec.js b/packages/terser/test/directory-args.spec.js index 9df530f3c0..fff58edf60 100644 --- a/packages/terser/test/directory-args.spec.js +++ b/packages/terser/test/directory-args.spec.js @@ -1,4 +1,6 @@ -const {directoryArgs} = require('build_bazel_rules_nodejs/packages/terser/index') +const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']); +const {directoryArgs} = + require(runfiles.resolve('build_bazel_rules_nodejs/packages/terser/index.js')); const fs = require('fs'); const path = require('path'); const tmp = require('tmp'); @@ -43,4 +45,4 @@ describe('directoryArgs', () => { '--keep-fnames', ]); }); -}) \ No newline at end of file +}) diff --git a/packages/terser/test/exec/spec.js b/packages/terser/test/exec/spec.js index 599ced10c0..3d4ca63974 100644 --- a/packages/terser/test/exec/spec.js +++ b/packages/terser/test/exec/spec.js @@ -2,8 +2,8 @@ const fs = require('fs'); const cp = require('child_process'); const util = require('util'); const assert = require('assert'); - -const terserWrap = require.resolve('build_bazel_rules_nodejs/packages/terser/index.js'); +const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']); +const terserWrap = runfiles.resolve('build_bazel_rules_nodejs/packages/terser/index.js'); if (!fs.existsSync(terserWrap)) { throw new Error( diff --git a/packages/terser/test/sourcemap/terser_spec.js b/packages/terser/test/sourcemap/terser_spec.js index dd788d22a0..4aa41135b2 100644 --- a/packages/terser/test/sourcemap/terser_spec.js +++ b/packages/terser/test/sourcemap/terser_spec.js @@ -1,10 +1,11 @@ const fs = require('fs'); const sm = require('source-map'); +const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']); const DIR = 'build_bazel_rules_nodejs/packages/terser/test/sourcemap'; describe('terser sourcemap handling', () => { it('should produce a sourcemap output', async () => { - const file = require.resolve(DIR + '/src1.min.js.map'); + const file = runfiles.resolve(DIR + '/src1.min.js.map'); const debugBuild = /\/bazel-out\/[^/\s]*-dbg\//.test(file); const rawSourceMap = JSON.parse(fs.readFileSync(file, 'utf-8')); await sm.SourceMapConsumer.with(rawSourceMap, null, consumer => { @@ -18,4 +19,4 @@ describe('terser sourcemap handling', () => { expect(pos.name).toBe('MyClass'); }); }); -}); \ No newline at end of file +});