From aabc374869682881cb94832f5eedbb1d021cff2b Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Thu, 2 Dec 2021 21:49:41 -0500 Subject: [PATCH 1/6] Enable transpiling node_modules --- .../babel-node-modules-jsx/.eslintrc.json | 6 ++ .../babel-node-modules-jsx/index.js | 4 ++ .../node_modules/foo/index.js | 3 + .../node_modules/foo/package.json | 3 + .../babel-node-modules-jsx/package.json | 5 ++ .../babel-node-modules-jsx/yarn.lock | 0 .../integration-tests/test/transpilation.js | 16 +++-- packages/transformers/js/src/JSTransformer.js | 65 +++++++++---------- 8 files changed, 63 insertions(+), 39 deletions(-) create mode 100644 packages/core/integration-tests/test/integration/babel-node-modules-jsx/.eslintrc.json create mode 100644 packages/core/integration-tests/test/integration/babel-node-modules-jsx/index.js create mode 100644 packages/core/integration-tests/test/integration/babel-node-modules-jsx/node_modules/foo/index.js create mode 100644 packages/core/integration-tests/test/integration/babel-node-modules-jsx/node_modules/foo/package.json create mode 100644 packages/core/integration-tests/test/integration/babel-node-modules-jsx/package.json create mode 100644 packages/core/integration-tests/test/integration/babel-node-modules-jsx/yarn.lock diff --git a/packages/core/integration-tests/test/integration/babel-node-modules-jsx/.eslintrc.json b/packages/core/integration-tests/test/integration/babel-node-modules-jsx/.eslintrc.json new file mode 100644 index 00000000000..f89e231fa93 --- /dev/null +++ b/packages/core/integration-tests/test/integration/babel-node-modules-jsx/.eslintrc.json @@ -0,0 +1,6 @@ +{ + "extends": "../.eslintrc.json", + "parserOptions": { + "sourceType": "module" + } +} \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/babel-node-modules-jsx/index.js b/packages/core/integration-tests/test/integration/babel-node-modules-jsx/index.js new file mode 100644 index 00000000000..21b5030d8ab --- /dev/null +++ b/packages/core/integration-tests/test/integration/babel-node-modules-jsx/index.js @@ -0,0 +1,4 @@ +import Foo from 'foo'; + +export {Foo}; +export class Bar {} diff --git a/packages/core/integration-tests/test/integration/babel-node-modules-jsx/node_modules/foo/index.js b/packages/core/integration-tests/test/integration/babel-node-modules-jsx/node_modules/foo/index.js new file mode 100644 index 00000000000..14b30579450 --- /dev/null +++ b/packages/core/integration-tests/test/integration/babel-node-modules-jsx/node_modules/foo/index.js @@ -0,0 +1,3 @@ +export default function Test() { + return
Test
+} diff --git a/packages/core/integration-tests/test/integration/babel-node-modules-jsx/node_modules/foo/package.json b/packages/core/integration-tests/test/integration/babel-node-modules-jsx/node_modules/foo/package.json new file mode 100644 index 00000000000..bde99de9287 --- /dev/null +++ b/packages/core/integration-tests/test/integration/babel-node-modules-jsx/node_modules/foo/package.json @@ -0,0 +1,3 @@ +{ + "name": "foo" +} diff --git a/packages/core/integration-tests/test/integration/babel-node-modules-jsx/package.json b/packages/core/integration-tests/test/integration/babel-node-modules-jsx/package.json new file mode 100644 index 00000000000..8e8616ee3b0 --- /dev/null +++ b/packages/core/integration-tests/test/integration/babel-node-modules-jsx/package.json @@ -0,0 +1,5 @@ +{ + "name": "parcel-test-browser-browserslist", + "private": true, + "browserslist": ["last 2 Chrome versions", "IE >= 11"] +} diff --git a/packages/core/integration-tests/test/integration/babel-node-modules-jsx/yarn.lock b/packages/core/integration-tests/test/integration/babel-node-modules-jsx/yarn.lock new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/core/integration-tests/test/transpilation.js b/packages/core/integration-tests/test/transpilation.js index de40708e7e2..f6576940972 100644 --- a/packages/core/integration-tests/test/transpilation.js +++ b/packages/core/integration-tests/test/transpilation.js @@ -56,17 +56,25 @@ describe('transpilation', function () { assert(modern.includes('class Bar')); }); - it('should not transpile node_modules by default', async function () { + it('should transpile node_modules by default', async function () { await bundle( path.join(__dirname, '/integration/babel-node-modules/index.js'), ); let file = await outputFS.readFile(path.join(distDir, 'index.js'), 'utf8'); - assert(/class \S+ \{/.test(file)); + assert(!/class \S+ \{/.test(file)); assert(file.includes('function Bar')); }); - it('should not compile node_modules with a source field in package.json when not symlinked', async function () { + it('should not support JSX in node_modules', async function () { + assert.rejects( + bundle( + path.join(__dirname, '/integration/babel-node-modules-jsx/index.js'), + ), + ); + }); + + it('should compile node_modules with a source field in package.json when not symlinked', async function () { await bundle( path.join( __dirname, @@ -75,7 +83,7 @@ describe('transpilation', function () { ); let file = await outputFS.readFile(path.join(distDir, 'index.js'), 'utf8'); - assert(!file.includes('function Foo')); + assert(file.includes('function Foo')); assert(file.includes('function Bar')); }); diff --git a/packages/transformers/js/src/JSTransformer.js b/packages/transformers/js/src/JSTransformer.js index 08a758971c0..7b217414322 100644 --- a/packages/transformers/js/src/JSTransformer.js +++ b/packages/transformers/js/src/JSTransformer.js @@ -281,49 +281,44 @@ export default (new Transformer({ ]); let targets; - if (asset.isSource) { - if (asset.env.isElectron() && asset.env.engines.electron) { - targets = { - electron: semver.minVersion(asset.env.engines.electron)?.toString(), - }; - } else if (asset.env.isBrowser() && asset.env.engines.browsers) { - targets = {}; + if (asset.env.isElectron() && asset.env.engines.electron) { + targets = { + electron: semver.minVersion(asset.env.engines.electron)?.toString(), + }; + } else if (asset.env.isBrowser() && asset.env.engines.browsers) { + targets = {}; - let browsers = Array.isArray(asset.env.engines.browsers) - ? asset.env.engines.browsers - : [asset.env.engines.browsers]; + let browsers = Array.isArray(asset.env.engines.browsers) + ? asset.env.engines.browsers + : [asset.env.engines.browsers]; - // If the output format is esmodule, exclude browsers - // that support them natively so that we transpile less. - if (asset.env.outputFormat === 'esmodule') { - browsers = [...browsers, ...ESMODULE_BROWSERS]; - } + // If the output format is esmodule, exclude browsers + // that support them natively so that we transpile less. + if (asset.env.outputFormat === 'esmodule') { + browsers = [...browsers, ...ESMODULE_BROWSERS]; + } - browsers = browserslist(browsers); - for (let browser of browsers) { - let [name, version] = browser.split(' '); - if (BROWSER_MAPPING.hasOwnProperty(name)) { - name = BROWSER_MAPPING[name]; - if (!name) { - continue; - } + browsers = browserslist(browsers); + for (let browser of browsers) { + let [name, version] = browser.split(' '); + if (BROWSER_MAPPING.hasOwnProperty(name)) { + name = BROWSER_MAPPING[name]; + if (!name) { + continue; } + } - let [major, minor = '0', patch = '0'] = version - .split('-')[0] - .split('.'); - let semverVersion = `${major}.${minor}.${patch}`; + let [major, minor = '0', patch = '0'] = version + .split('-')[0] + .split('.'); + let semverVersion = `${major}.${minor}.${patch}`; - if ( - targets[name] == null || - semver.gt(targets[name], semverVersion) - ) { - targets[name] = semverVersion; - } + if (targets[name] == null || semver.gt(targets[name], semverVersion)) { + targets[name] = semverVersion; } - } else if (asset.env.isNode() && asset.env.engines.node) { - targets = {node: semver.minVersion(asset.env.engines.node)?.toString()}; } + } else if (asset.env.isNode() && asset.env.engines.node) { + targets = {node: semver.minVersion(asset.env.engines.node)?.toString()}; } let env: EnvMap = {}; From eb6a93d74fa4656832793d8043add8ace2ad0f1b Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Mon, 3 Jan 2022 14:23:45 -0500 Subject: [PATCH 2/6] Update browser compat data --- packages/core/core/src/public/Environment.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/core/core/src/public/Environment.js b/packages/core/core/src/public/Environment.js index 16e27070aea..4782de5ad46 100644 --- a/packages/core/core/src/public/Environment.js +++ b/packages/core/core/src/public/Environment.js @@ -57,13 +57,15 @@ const supportData = { edge: '16', firefox: '60', chrome: '61', - safari: '11', + safari: '10.1', opera: '48', - ios: '11', + ios: '10.3', android: '76', and_chr: '76', and_ff: '68', samsung: '8.2', + and_qq: '10.4', + op_mob: '64', }, 'dynamic-import': { edge: '76', @@ -76,6 +78,8 @@ const supportData = { and_chr: '63', and_ff: '67', samsung: '8', + and_qq: '10.4', + op_mob: '64', }, 'worker-module': { edge: '80', @@ -98,6 +102,8 @@ const supportData = { and_chr: '64', and_ff: '62', samsung: '9.2', + and_qq: '10.4', + op_mob: '64', }, 'arrow-functions': { chrome: '47', @@ -109,6 +115,12 @@ const supportData = { ios: '10', samsung: '5', electron: '0.36', + android: '50', + qq: '10.4', + baidu: '7.12', + kaios: '2.5', + and_qq: '12.12', + op_mob: '64', }, }; From bb934c48295b64d5527f036dfe9efcc4ce5b05e7 Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Mon, 3 Jan 2022 14:39:51 -0500 Subject: [PATCH 3/6] Fix issue with Safari TP browser versions --- packages/transformers/js/src/JSTransformer.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/transformers/js/src/JSTransformer.js b/packages/transformers/js/src/JSTransformer.js index 65e19628086..2ba3eacfc9b 100644 --- a/packages/transformers/js/src/JSTransformer.js +++ b/packages/transformers/js/src/JSTransformer.js @@ -320,6 +320,9 @@ export default (new Transformer({ let [major, minor = '0', patch = '0'] = version .split('-')[0] .split('.'); + if (isNaN(major) || isNaN(minor) || isNaN(patch)) { + continue; + } let semverVersion = `${major}.${minor}.${patch}`; if (targets[name] == null || semver.gt(targets[name], semverVersion)) { From de740b5ef984f22381b2903bc9c4dabb2e75083b Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Tue, 4 Jan 2022 10:24:46 -0500 Subject: [PATCH 4/6] fix flow --- packages/core/integration-tests/test/transpilation.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core/integration-tests/test/transpilation.js b/packages/core/integration-tests/test/transpilation.js index d0ee1f8a430..3d9637033ea 100644 --- a/packages/core/integration-tests/test/transpilation.js +++ b/packages/core/integration-tests/test/transpilation.js @@ -67,6 +67,7 @@ describe('transpilation', function () { }); it('should not support JSX in node_modules', async function () { + // $FlowFixMe assert.rejects( bundle( path.join(__dirname, '/integration/babel-node-modules-jsx/index.js'), From 13b496f05854297f71c64adf75ad113376f4d163 Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Tue, 4 Jan 2022 11:26:20 -0500 Subject: [PATCH 5/6] Clear config cache after each build, even when an error occurs --- packages/core/core/src/Parcel.js | 3 ++- packages/core/integration-tests/test/transpilation.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/core/core/src/Parcel.js b/packages/core/core/src/Parcel.js index bc748d31b6c..02ee4b07046 100644 --- a/packages/core/core/src/Parcel.js +++ b/packages/core/core/src/Parcel.js @@ -164,7 +164,6 @@ export default class Parcel { this.#disposable.dispose(), await this.#requestTracker.writeToCache(), ]); - await this.#farm.callAllWorkers('clearConfigCache', []); } async _startNextBuild(): Promise { @@ -359,6 +358,8 @@ export default class Parcel { if (this.isProfiling) { await this.stopProfiling(); } + + await this.#farm.callAllWorkers('clearConfigCache', []); } } diff --git a/packages/core/integration-tests/test/transpilation.js b/packages/core/integration-tests/test/transpilation.js index 3d9637033ea..1108f2167cc 100644 --- a/packages/core/integration-tests/test/transpilation.js +++ b/packages/core/integration-tests/test/transpilation.js @@ -66,7 +66,7 @@ describe('transpilation', function () { assert(file.includes('function Bar')); }); - it('should not support JSX in node_modules', async function () { + it('should not support JSX in node_modules', function () { // $FlowFixMe assert.rejects( bundle( From 3e8e8675b93f4298301de022276ac43adb200d16 Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Tue, 4 Jan 2022 14:58:54 -0500 Subject: [PATCH 6/6] omg --- packages/core/integration-tests/test/transpilation.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/integration-tests/test/transpilation.js b/packages/core/integration-tests/test/transpilation.js index 1108f2167cc..4ee4e9a6a05 100644 --- a/packages/core/integration-tests/test/transpilation.js +++ b/packages/core/integration-tests/test/transpilation.js @@ -66,9 +66,9 @@ describe('transpilation', function () { assert(file.includes('function Bar')); }); - it('should not support JSX in node_modules', function () { + it('should not support JSX in node_modules', async function () { // $FlowFixMe - assert.rejects( + await assert.rejects(() => bundle( path.join(__dirname, '/integration/babel-node-modules-jsx/index.js'), ),