From 37751162194b8669bf6c73e246bff729bd3186eb Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Fri, 1 May 2020 20:25:25 +0200 Subject: [PATCH] chore: remove support for `browser` field in config --- CHANGELOG.md | 2 + TestUtils.ts | 1 - docs/Configuration.md | 7 -- .../__snapshots__/showConfig.test.ts.snap | 1 - e2e/__tests__/resolveBrowserField.test.ts | 72 ------------------- packages/jest-config/src/Defaults.ts | 1 - packages/jest-config/src/Deprecated.ts | 12 ++++ packages/jest-config/src/Descriptions.ts | 1 - packages/jest-config/src/ValidConfig.ts | 1 - .../src/__tests__/normalize.test.js | 14 ---- packages/jest-config/src/index.ts | 1 - packages/jest-config/src/normalize.ts | 1 - packages/jest-resolve/package.json | 2 - packages/jest-resolve/src/defaultResolver.ts | 5 +- packages/jest-resolve/src/index.ts | 3 - packages/jest-resolve/src/types.ts | 1 - .../src/__tests__/resolve_browser.test.js | 43 ----------- packages/jest-runtime/src/index.ts | 1 - packages/jest-types/src/Config.ts | 4 -- yarn.lock | 21 +----- 20 files changed, 16 insertions(+), 178 deletions(-) delete mode 100644 e2e/__tests__/resolveBrowserField.test.ts delete mode 100644 packages/jest-runtime/src/__tests__/resolve_browser.test.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ae8c772d18b..e47befa5468c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ ### Fixes +- `[jest-config, jest-resolve]` [**BREAKING**] Remove support for `browser` field ([#9943](https://github.com/facebook/jest/pull/9943)) + ### Chore & Maintenance ### Performance diff --git a/TestUtils.ts b/TestUtils.ts index a84f3f8bc630..8f4f6096707d 100644 --- a/TestUtils.ts +++ b/TestUtils.ts @@ -67,7 +67,6 @@ const DEFAULT_GLOBAL_CONFIG: Config.GlobalConfig = { const DEFAULT_PROJECT_CONFIG: Config.ProjectConfig = { automock: false, - browser: false, cache: false, cacheDirectory: '/test_cache_dir/', clearMocks: false, diff --git a/docs/Configuration.md b/docs/Configuration.md index c80c9af8b351..8f82e53dd8a8 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -105,12 +105,6 @@ Default: `0` By default, Jest runs all tests and produces all errors into the console upon completion. The bail config option can be used here to have Jest stop running tests after `n` failures. Setting bail to `true` is the same as setting bail to `1`. -### `browser` [boolean] - -Default: `false` - -Respect Browserify's [`"browser"` field](https://github.com/substack/browserify-handbook#browser-field) in `package.json` when resolving modules. Some modules export different versions based on whether they are operating in Node or a browser. - ### `cacheDirectory` [string] Default: `"/tmp/"` @@ -689,7 +683,6 @@ This option allows the use of a custom resolver. This resolver must be a node mo ```json { "basedir": string, - "browser": bool, "defaultResolver": "function(request, options)", "extensions": [string], "moduleDirectory": [string], diff --git a/e2e/__tests__/__snapshots__/showConfig.test.ts.snap b/e2e/__tests__/__snapshots__/showConfig.test.ts.snap index 7f3d73efee7c..be82d2534558 100644 --- a/e2e/__tests__/__snapshots__/showConfig.test.ts.snap +++ b/e2e/__tests__/__snapshots__/showConfig.test.ts.snap @@ -5,7 +5,6 @@ exports[`--showConfig outputs config info and exits 1`] = ` "configs": [ { "automock": false, - "browser": false, "cache": false, "cacheDirectory": "/tmp/jest", "clearMocks": false, diff --git a/e2e/__tests__/resolveBrowserField.test.ts b/e2e/__tests__/resolveBrowserField.test.ts deleted file mode 100644 index 2c37924e2bc5..000000000000 --- a/e2e/__tests__/resolveBrowserField.test.ts +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -import {tmpdir} from 'os'; -import * as path from 'path'; -import {wrap} from 'jest-snapshot-serializer-raw'; -import {cleanup, writeFiles, writeSymlinks} from '../Utils'; -import runJest from '../runJest'; - -const DIR = path.resolve(tmpdir(), 'resolve-browser-field-test'); - -beforeEach(() => cleanup(DIR)); -afterAll(() => cleanup(DIR)); - -test('preserves module identity for symlinks when using browser field resolution', () => { - /* eslint-disable sort-keys */ - writeFiles(DIR, { - 'packages/needs-preserved-id/index.js': ` - console.log("needs-preserved-id executed"); - module.exports = {}; - `, - 'packages/needs-preserved-id/package.json': JSON.stringify({ - name: 'needs-preserved-id', - }), - 'packages/has-browser-field/package.json': JSON.stringify({ - name: 'has-browser-field', - browser: 'browser.js', - }), - 'packages/has-browser-field/browser.js': ` - module.exports = require("needs-preserved-id"); - `, - 'package.json': JSON.stringify({ - jest: { - testMatch: ['/test-files/test.js'], - browser: true, - }, - }), - 'test-files/test.js': ` - const id1 = require("needs-preserved-id"); - const id2 = require("has-browser-field"); - - test("module should have reference equality", () => { - expect(id1).toBe(id2); - }); - `, - }); - /* eslint-enable */ - - writeSymlinks(DIR, { - 'packages/has-browser-field': 'node_modules/has-browser-field', - 'packages/needs-preserved-id': 'node_modules/needs-preserved-id', - }); - - writeSymlinks(DIR, { - 'packages/needs-preserved-id': - 'packages/has-browser-field/node_modules/needs-preserved-id', - }); - - const {stdout, stderr, exitCode} = runJest(DIR, ['--no-watchman']); - expect(stderr).toContain('Test Suites: 1 passed, 1 total'); - expect(wrap(stdout.trim())).toMatchInlineSnapshot(` - console.log - needs-preserved-id executed - - at Object. (packages/needs-preserved-id/index.js:1:13) - `); - expect(exitCode).toEqual(0); -}); diff --git a/packages/jest-config/src/Defaults.ts b/packages/jest-config/src/Defaults.ts index 6cdc3cbe8a01..32dcbf3c0df7 100644 --- a/packages/jest-config/src/Defaults.ts +++ b/packages/jest-config/src/Defaults.ts @@ -15,7 +15,6 @@ const NODE_MODULES_REGEXP = replacePathSepForRegex(NODE_MODULES); const defaultOptions: Config.DefaultOptions = { automock: false, bail: 0, - browser: false, cache: true, cacheDirectory: getCacheDirectory(), changedFilesWithAncestor: false, diff --git a/packages/jest-config/src/Deprecated.ts b/packages/jest-config/src/Deprecated.ts index a76f26229ddd..ba3a067fbb6f 100644 --- a/packages/jest-config/src/Deprecated.ts +++ b/packages/jest-config/src/Deprecated.ts @@ -11,6 +11,18 @@ import prettyFormat = require('pretty-format'); const format = (value: unknown) => prettyFormat(value, {min: true}); export default { + browser: () => ` Option ${chalk.bold( + '"browser"', + )} has been deprecated. Please install \`browser-resolve\` and use the \`resolver\` option. + + Jest now treats your current configuration as: + { + ${chalk.bold('"resolve"')}: ${chalk.bold('"browser-resolve"')} + } + + Please update your configuration. + `, + mapCoverage: () => ` Option ${chalk.bold( '"mapCoverage"', )} has been removed, as it's no longer necessary. diff --git a/packages/jest-config/src/Descriptions.ts b/packages/jest-config/src/Descriptions.ts index 8e67339e0637..322a39af3e5b 100644 --- a/packages/jest-config/src/Descriptions.ts +++ b/packages/jest-config/src/Descriptions.ts @@ -10,7 +10,6 @@ import type {Config} from '@jest/types'; const descriptions: {[key in keyof Config.InitialOptions]: string} = { automock: 'All imported modules in your tests should be mocked automatically', bail: 'Stop running tests after `n` failures', - browser: 'Respect "browser" field in package.json when resolving modules', cacheDirectory: 'The directory where Jest should store its cached dependency information', clearMocks: 'Automatically clear mock calls and instances between every test', diff --git a/packages/jest-config/src/ValidConfig.ts b/packages/jest-config/src/ValidConfig.ts index de566c08c036..6486947f48ac 100644 --- a/packages/jest-config/src/ValidConfig.ts +++ b/packages/jest-config/src/ValidConfig.ts @@ -15,7 +15,6 @@ const NODE_MODULES_REGEXP = replacePathSepForRegex(NODE_MODULES); const initialOptions: Config.InitialOptions = { automock: false, bail: multipleValidOptions(false, 0), - browser: false, cache: true, cacheDirectory: '/tmp/user/jest', changedFilesWithAncestor: false, diff --git a/packages/jest-config/src/__tests__/normalize.test.js b/packages/jest-config/src/__tests__/normalize.test.js index 4022b2baec66..eb7ba42ad4a5 100644 --- a/packages/jest-config/src/__tests__/normalize.test.js +++ b/packages/jest-config/src/__tests__/normalize.test.js @@ -154,20 +154,6 @@ describe('automock', () => { }); }); -describe('browser', () => { - it('falsy browser is not overwritten', () => { - const {options} = normalize( - { - browser: true, - rootDir: '/root/path/foo', - }, - {}, - ); - - expect(options.browser).toBe(true); - }); -}); - describe('collectCoverageOnlyFrom', () => { it('normalizes all paths relative to rootDir', () => { const {options} = normalize( diff --git a/packages/jest-config/src/index.ts b/packages/jest-config/src/index.ts index 0331c2d23379..0bcb65fc670e 100644 --- a/packages/jest-config/src/index.ts +++ b/packages/jest-config/src/index.ts @@ -163,7 +163,6 @@ const groupOptions = ( }), projectConfig: Object.freeze({ automock: options.automock, - browser: options.browser, cache: options.cache, cacheDirectory: options.cacheDirectory, clearMocks: options.clearMocks, diff --git a/packages/jest-config/src/normalize.ts b/packages/jest-config/src/normalize.ts index 4cff07d83bc8..75727fa23c74 100644 --- a/packages/jest-config/src/normalize.ts +++ b/packages/jest-config/src/normalize.ts @@ -869,7 +869,6 @@ export default function normalize( break; } case 'automock': - case 'browser': case 'cache': case 'changedSince': case 'changedFilesWithAncestor': diff --git a/packages/jest-resolve/package.json b/packages/jest-resolve/package.json index 4ad1b61c8f33..5645f2741d8b 100644 --- a/packages/jest-resolve/package.json +++ b/packages/jest-resolve/package.json @@ -18,7 +18,6 @@ }, "dependencies": { "@jest/types": "^25.5.0", - "browser-resolve": "^1.11.3", "chalk": "^3.0.0", "graceful-fs": "^4.2.4", "jest-pnp-resolver": "^1.2.1", @@ -28,7 +27,6 @@ "slash": "^3.0.0" }, "devDependencies": { - "@types/browser-resolve": "^1.11.0", "@types/graceful-fs": "^4.1.3", "@types/resolve": "^1.14.0", "jest-haste-map": "^25.5.1" diff --git a/packages/jest-resolve/src/defaultResolver.ts b/packages/jest-resolve/src/defaultResolver.ts index e66a74036a3f..cb570d390a5a 100644 --- a/packages/jest-resolve/src/defaultResolver.ts +++ b/packages/jest-resolve/src/defaultResolver.ts @@ -7,7 +7,6 @@ import * as fs from 'graceful-fs'; import {sync as resolveSync} from 'resolve'; -import {sync as browserResolve} from 'browser-resolve'; import {sync as realpath} from 'realpath-native'; import pnpResolver from 'jest-pnp-resolver'; import type {Config} from '@jest/types'; @@ -31,9 +30,7 @@ export default function defaultResolver( return pnpResolver(path, options); } - const resolve = options.browser ? browserResolve : resolveSync; - - const result = resolve(path, { + const result = resolveSync(path, { basedir: options.basedir, extensions: options.extensions, isDirectory, diff --git a/packages/jest-resolve/src/index.ts b/packages/jest-resolve/src/index.ts index 19937efafd7b..1c04a9429f96 100644 --- a/packages/jest-resolve/src/index.ts +++ b/packages/jest-resolve/src/index.ts @@ -62,7 +62,6 @@ class Resolver { constructor(moduleMap: ModuleMap, options: ResolverConfig) { this._options = { - browser: options.browser, defaultPlatform: options.defaultPlatform, extensions: options.extensions, hasCoreModules: @@ -184,7 +183,6 @@ class Resolver { const resolveNodeModule = (name: Config.Path, throwIfNotFound = false) => Resolver.findNodeModule(name, { basedir: dirname, - browser: this._options.browser, extensions, moduleDirectory, paths, @@ -438,7 +436,6 @@ class Resolver { this.getModule(updatedName) || Resolver.findNodeModule(updatedName, { basedir: dirname, - browser: this._options.browser, extensions, moduleDirectory, paths, diff --git a/packages/jest-resolve/src/types.ts b/packages/jest-resolve/src/types.ts index 7d8a11d48fc9..cbe7666ac21f 100644 --- a/packages/jest-resolve/src/types.ts +++ b/packages/jest-resolve/src/types.ts @@ -8,7 +8,6 @@ import type {Config} from '@jest/types'; export type ResolverConfig = { - browser?: boolean; defaultPlatform?: string | null; extensions: Array; hasCoreModules: boolean; diff --git a/packages/jest-runtime/src/__tests__/resolve_browser.test.js b/packages/jest-runtime/src/__tests__/resolve_browser.test.js deleted file mode 100644 index f0c5d289e84d..000000000000 --- a/packages/jest-runtime/src/__tests__/resolve_browser.test.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - */ - -'use strict'; - -let createRuntime; - -describe('resolve', () => { - beforeEach(() => { - createRuntime = require('createRuntime'); - }); - - it('respects "browser" dependency when browser:true configured', () => - createRuntime(__filename, { - browser: true, - }).then(runtime => { - const exports = runtime.requireModuleOrMock( - runtime.__mockRootPath, - 'jest-resolve-test', - ); - expect(exports.isBrowser).toBe(true); - })); - - it(`doesn't resolve "browser" dependency by default`, () => - createRuntime( - __filename, - {}, - { - browser: false, - }, - ).then(runtime => { - const exports = runtime.requireModuleOrMock( - runtime.__mockRootPath, - 'jest-resolve-test', - ); - expect(exports.isBrowser).toBe(false); - })); -}); diff --git a/packages/jest-runtime/src/index.ts b/packages/jest-runtime/src/index.ts index 32c1c751b7f1..41499f9fc2a5 100644 --- a/packages/jest-runtime/src/index.ts +++ b/packages/jest-runtime/src/index.ts @@ -303,7 +303,6 @@ class Runtime { moduleMap: HasteMap.ModuleMap, ): Resolver { return new Resolver(moduleMap, { - browser: config.browser, defaultPlatform: config.haste.defaultPlatform, extensions: config.moduleFileExtensions.map(extension => '.' + extension), hasCoreModules: true, diff --git a/packages/jest-types/src/Config.ts b/packages/jest-types/src/Config.ts index 6c5ab99f1a26..e9c02ea340e4 100644 --- a/packages/jest-types/src/Config.ts +++ b/packages/jest-types/src/Config.ts @@ -34,7 +34,6 @@ export interface ConfigGlobals { export type DefaultOptions = { automock: boolean; bail: number; - browser: boolean; cache: boolean; cacheDirectory: Path; changedFilesWithAncestor: boolean; @@ -99,7 +98,6 @@ export type InitialOptionsWithRootDir = InitialOptions & export type InitialOptions = Partial<{ automock: boolean; bail: boolean | number; - browser: boolean; cache: boolean; cacheDirectory: Path; clearMocks: boolean; @@ -301,7 +299,6 @@ export type GlobalConfig = { export type ProjectConfig = { automock: boolean; - browser: boolean; cache: boolean; cacheDirectory: Path; clearMocks: boolean; @@ -360,7 +357,6 @@ export type Argv = Arguments< all: boolean; automock: boolean; bail: boolean | number; - browser: boolean; cache: boolean; cacheDirectory: string; changedFilesWithAncestor: boolean; diff --git a/yarn.lock b/yarn.lock index 253db2b1ef97..972ca1c18448 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2217,13 +2217,6 @@ resolved "https://registry.yarnpkg.com/@types/braces/-/braces-3.0.0.tgz#7da1c0d44ff1c7eb660a36ec078ea61ba7eb42cb" integrity sha512-TbH79tcyi9FHwbyboOKeRachRq63mSuWYXOflsNO9ZyE5ClQ/JaozNKl+aWUq87qPNsXasXxi2AbgfwIJ+8GQw== -"@types/browser-resolve@^1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@types/browser-resolve/-/browser-resolve-1.11.0.tgz#28c427182a6e340b3d7082b62da8128c562f04d6" - integrity sha512-fI2q5j/5w2TuO+lIGj7bMcvOQQCo5Eq71OLiWttohpp4xW6xhA9ltN2ielMSvl5ochAIY0Z3E8LtVRMIGLYy2w== - dependencies: - "@types/resolve" "*" - "@types/cheerio@^0.22.8": version "0.22.17" resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.17.tgz#e54f71c3135f71ebc16c8dc62edad533872c9e72" @@ -2514,7 +2507,7 @@ "@types/prop-types" "*" csstype "^2.2.0" -"@types/resolve@*", "@types/resolve@^1.14.0": +"@types/resolve@^1.14.0": version "1.14.0" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.14.0.tgz#c95d696264f8e53e764a7c0b83e9317b458b76c3" integrity sha512-bmjNBW6tok+67iOsASeYSJxSgY++BIR35nGyGLORTDirhra9reJ0shgGL3U7KPDUbOBCx8JrlCjd4d/y5uiMRQ== @@ -3818,13 +3811,6 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browser-resolve@^1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== - dependencies: - resolve "1.1.7" - browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" @@ -12731,11 +12717,6 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= - resolve@^1.1.6, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.0, resolve@^1.15.1, resolve@^1.17.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: version "1.17.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"