From 8e1cfc90ff83b2ceeafac925054b46a3a2856bad Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Tue, 28 Sep 2021 23:07:15 -0700 Subject: [PATCH 01/68] Add XML transformer for RSS and Atom feeds (#6988) --- packages/configs/default/index.json | 8 +- packages/configs/default/package.json | 2 + .../test/integration/html-feed/feed.xml | 4 + .../test/integration/xml/100x100.png | Bin 0 -> 255 bytes .../test/integration/xml/atom-namespace.xml | 27 ++++ .../test/integration/xml/atom.xml | 27 ++++ .../test/integration/xml/post.html | 2 + .../test/integration/xml/rss.xml | 20 +++ packages/core/integration-tests/test/xml.js | 125 ++++++++++++++++++ .../htmlnano/src/HTMLNanoOptimizer.js | 7 +- packages/packagers/html/src/HTMLPackager.js | 6 +- packages/packagers/xml/package.json | 28 ++++ packages/packagers/xml/src/XMLPackager.js | 108 +++++++++++++++ .../transformers/html/src/HTMLTransformer.js | 12 +- .../transformers/html/src/dependencies.js | 2 +- .../posthtml/src/PostHTMLTransformer.js | 7 +- packages/transformers/xml/package.json | 26 ++++ .../transformers/xml/src/XMLTransformer.js | 55 ++++++++ packages/transformers/xml/src/atom.js | 73 ++++++++++ packages/transformers/xml/src/rss.js | 52 ++++++++ packages/transformers/xml/src/utils.js | 8 ++ yarn.lock | 5 + 22 files changed, 592 insertions(+), 12 deletions(-) create mode 100644 packages/core/integration-tests/test/integration/xml/100x100.png create mode 100644 packages/core/integration-tests/test/integration/xml/atom-namespace.xml create mode 100644 packages/core/integration-tests/test/integration/xml/atom.xml create mode 100644 packages/core/integration-tests/test/integration/xml/post.html create mode 100644 packages/core/integration-tests/test/integration/xml/rss.xml create mode 100644 packages/core/integration-tests/test/xml.js create mode 100644 packages/packagers/xml/package.json create mode 100644 packages/packagers/xml/src/XMLPackager.js create mode 100644 packages/transformers/xml/package.json create mode 100644 packages/transformers/xml/src/XMLTransformer.js create mode 100644 packages/transformers/xml/src/atom.js create mode 100644 packages/transformers/xml/src/rss.js create mode 100644 packages/transformers/xml/src/utils.js diff --git a/packages/configs/default/index.json b/packages/configs/default/index.json index 4c3da0c9b3f..9d51a249c46 100644 --- a/packages/configs/default/index.json +++ b/packages/configs/default/index.json @@ -26,7 +26,7 @@ "*.less": ["@parcel/transformer-less"], "*.{css,pcss}": ["@parcel/transformer-postcss", "@parcel/transformer-css"], "*.sss": ["@parcel/transformer-sugarss"], - "*.{htm,html}": [ + "*.{htm,html,xhtml}": [ "@parcel/transformer-posthtml", "@parcel/transformer-html" ], @@ -41,6 +41,7 @@ "custom:*.vue": ["@parcel/transformer-vue"], "*.{png,jpg,jpeg,webp}": ["@parcel/transformer-image"], "*.svg": ["@parcel/transformer-svg"], + "*.{xml,rss,atom}": ["@parcel/transformer-xml"], "url:*": ["...", "@parcel/transformer-raw"] }, "namers": ["@parcel/namer-default"], @@ -53,16 +54,17 @@ "optimizers": { "data-url:*": ["...", "@parcel/optimizer-data-url"], "*.css": ["@parcel/optimizer-cssnano"], - "*.html": ["@parcel/optimizer-htmlnano"], + "*.{html,xhtml}": ["@parcel/optimizer-htmlnano"], "*.{js,mjs,cjs}": ["@parcel/optimizer-terser"], "*.svg": ["@parcel/optimizer-svgo"], "*.{jpg,jpeg,png}": ["@parcel/optimizer-image"] }, "packagers": { - "*.html": "@parcel/packager-html", + "*.{html,xhtml}": "@parcel/packager-html", "*.css": "@parcel/packager-css", "*.{js,mjs,cjs}": "@parcel/packager-js", "*.svg": "@parcel/packager-svg", + "*.{xml,rss,atom}": "@parcel/packager-xml", "*.ts": "@parcel/packager-ts", "*.{jsonld,svg,webmanifest}": "@parcel/packager-raw-url", "*": "@parcel/packager-raw" diff --git a/packages/configs/default/package.json b/packages/configs/default/package.json index d09148de533..c207e472ef3 100644 --- a/packages/configs/default/package.json +++ b/packages/configs/default/package.json @@ -53,6 +53,7 @@ "@parcel/optimizer-data-url": "2.0.0-rc.0", "@parcel/packager-raw-url": "2.0.0-rc.0", "@parcel/packager-ts": "2.0.0-rc.0", + "@parcel/packager-xml": "2.0.0-rc.0", "@parcel/transformer-coffeescript": "2.0.0-rc.0", "@parcel/transformer-elm": "2.0.0-rc.0", "@parcel/transformer-glsl": "2.0.0-rc.0", @@ -70,6 +71,7 @@ "@parcel/transformer-vue": "2.0.0-rc.0", "@parcel/transformer-webmanifest": "2.0.0-rc.0", "@parcel/transformer-worklet": "2.0.0-rc.0", + "@parcel/transformer-xml": "2.0.0-rc.0", "@parcel/transformer-yaml": "2.0.0-rc.0" }, "peerDependencies": { diff --git a/packages/core/integration-tests/test/integration/html-feed/feed.xml b/packages/core/integration-tests/test/integration/html-feed/feed.xml index e69de29bb2d..c33693008d0 100644 --- a/packages/core/integration-tests/test/integration/html-feed/feed.xml +++ b/packages/core/integration-tests/test/integration/html-feed/feed.xml @@ -0,0 +1,4 @@ + + + Example Feed + diff --git a/packages/core/integration-tests/test/integration/xml/100x100.png b/packages/core/integration-tests/test/integration/xml/100x100.png new file mode 100644 index 0000000000000000000000000000000000000000..8a1daa0121d524256c1d1b45ff5e7ed771784c52 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^DImVS)*E46%Oq(`s&YU^>_U&7| zc=6GrN4Ia^zG~H~jT<-Ko_$0QsEo6~BeIx*f$sR&2=kJHM z&5N9@w|=XzipNCbb|s-xrJeH)f2E%im~OIrio1Qy&Sj1+>x<+1)+oPni}kGd6Ohy! z>6x1RttNZTv!7LG>?+Ii&zjEnadB}e3778<6P>u`Anzuis~9|8{an^LB{Ts5qZeh6 literal 0 HcmV?d00001 diff --git a/packages/core/integration-tests/test/integration/xml/atom-namespace.xml b/packages/core/integration-tests/test/integration/xml/atom-namespace.xml new file mode 100644 index 00000000000..aaa16f9bbdd --- /dev/null +++ b/packages/core/integration-tests/test/integration/xml/atom-namespace.xml @@ -0,0 +1,27 @@ + + + Example Feed + A subtitle. + + + urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6 + 2003-12-13T18:30:02Z + + Atom-Powered Robots Run Amok + + + urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a + 2003-12-13T18:30:02Z + Some text. + +
+

This is the entry content.

+ +
+
+ + John Doe + johndoe@example.com + +
+
diff --git a/packages/core/integration-tests/test/integration/xml/atom.xml b/packages/core/integration-tests/test/integration/xml/atom.xml new file mode 100644 index 00000000000..46bcea93106 --- /dev/null +++ b/packages/core/integration-tests/test/integration/xml/atom.xml @@ -0,0 +1,27 @@ + + + Example Feed + A subtitle. + + + urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6 + 2003-12-13T18:30:02Z + + Atom-Powered Robots Run Amok + + + urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a + 2003-12-13T18:30:02Z + Some text. + +
+

This is the entry content.

+ +
+
+ + John Doe + johndoe@example.com + +
+
diff --git a/packages/core/integration-tests/test/integration/xml/post.html b/packages/core/integration-tests/test/integration/xml/post.html new file mode 100644 index 00000000000..3f3f8c32cac --- /dev/null +++ b/packages/core/integration-tests/test/integration/xml/post.html @@ -0,0 +1,2 @@ + +

This is the post

diff --git a/packages/core/integration-tests/test/integration/xml/rss.xml b/packages/core/integration-tests/test/integration/xml/rss.xml new file mode 100644 index 00000000000..17849925859 --- /dev/null +++ b/packages/core/integration-tests/test/integration/xml/rss.xml @@ -0,0 +1,20 @@ + + + + RSS Title + This is an example of an RSS feed + http://www.example.com/main.html + 2020 Example.com All rights reserved + Mon, 06 Sep 2010 00:01:00 +0000 + Sun, 06 Sep 2009 16:20:00 +0000 + 1800 + + + Example entry + Here is some text containing an interesting description. <img src="100x100.png" /> + post.html + 7bd204c6-1655-4c27-aeee-53f933c5395f + Sun, 06 Sep 2009 16:20:00 +0000 + + + diff --git a/packages/core/integration-tests/test/xml.js b/packages/core/integration-tests/test/xml.js new file mode 100644 index 00000000000..8b3b3fac24e --- /dev/null +++ b/packages/core/integration-tests/test/xml.js @@ -0,0 +1,125 @@ +import assert from 'assert'; +import path from 'path'; +import {bundle, assertBundles, outputFS} from '@parcel/test-utils'; + +describe('xml', function() { + it('should transform an atom feed', async function() { + let b = await bundle(path.join(__dirname, '/integration/xml/atom.xml'), { + defaultTargetOptions: { + publicUrl: 'http://example.org/', + }, + }); + + assertBundles(b, [ + { + type: 'png', + assets: ['100x100.png'], + }, + { + type: 'xhtml', + assets: ['atom.xml'], + }, + { + name: 'post.html', + assets: ['post.html'], + }, + { + name: 'atom.xml', + assets: ['atom.xml'], + }, + ]); + + let contents = await outputFS.readFile(b.getBundles()[0].filePath, 'utf8'); + assert( + contents.includes( + ``, + ), + ); + assert(contents.includes(``)); + }); + + it('should transform an atom feed with namespaced elements', async function() { + let b = await bundle( + path.join(__dirname, '/integration/xml/atom-namespace.xml'), + { + defaultTargetOptions: { + publicUrl: 'http://example.org/', + }, + }, + ); + + assertBundles(b, [ + { + type: 'png', + assets: ['100x100.png'], + }, + { + type: 'xhtml', + assets: ['atom-namespace.xml'], + }, + { + name: 'post.html', + assets: ['post.html'], + }, + { + name: 'atom-namespace.xml', + assets: ['atom-namespace.xml'], + }, + ]); + + let contents = await outputFS.readFile(b.getBundles()[0].filePath, 'utf8'); + assert( + contents.includes( + ``, + ), + ); + assert( + contents.includes(``), + ); + }); + + it('should transform an rss feed', async function() { + let b = await bundle(path.join(__dirname, '/integration/xml/rss.xml'), { + defaultTargetOptions: { + publicUrl: 'http://example.org/', + }, + }); + + assertBundles(b, [ + { + type: 'png', + assets: ['100x100.png'], + }, + { + type: 'html', + assets: ['rss.xml'], + }, + { + type: 'html', + assets: ['rss.xml'], + }, + { + name: 'post.html', + assets: ['post.html'], + }, + { + name: 'rss.xml', + assets: ['rss.xml'], + }, + ]); + + let contents = await outputFS.readFile(b.getBundles()[0].filePath, 'utf8'); + assert( + contents.includes( + `<img src="http://example.org/${path.basename( + b.getBundles().find(b => b.type === 'png').filePath, + )}">`, + ), + ); + assert(contents.includes(`http://example.org/post.html`)); + }); +}); diff --git a/packages/optimizers/htmlnano/src/HTMLNanoOptimizer.js b/packages/optimizers/htmlnano/src/HTMLNanoOptimizer.js index 59dae165f47..322b8a92897 100644 --- a/packages/optimizers/htmlnano/src/HTMLNanoOptimizer.js +++ b/packages/optimizers/htmlnano/src/HTMLNanoOptimizer.js @@ -95,7 +95,12 @@ export default (new Optimizer({ } return { - contents: (await posthtml(plugins).process(contents)).html, + contents: ( + await posthtml(plugins).process(contents, { + xmlMode: bundle.type === 'xhtml', + closingSingleTag: bundle.type === 'xhtml' ? 'slash' : undefined, + }) + ).html, }; }, }): Optimizer); diff --git a/packages/packagers/html/src/HTMLPackager.js b/packages/packagers/html/src/HTMLPackager.js index eacdc35220e..33f3a28d470 100644 --- a/packages/packagers/html/src/HTMLPackager.js +++ b/packages/packagers/html/src/HTMLPackager.js @@ -63,7 +63,11 @@ export default (new Packager({ tree => insertBundleReferences(referencedBundles, tree), tree => replaceInlineAssetContent(bundleGraph, getInlineBundleContents, tree), - ]).process(code, renderConfig); + ]).process(code, { + ...renderConfig, + xmlMode: bundle.type === 'xhtml', + closingSingleTag: bundle.type === 'xhtml' ? 'slash' : undefined, + }); let {contents, map} = replaceURLReferences({ bundle, diff --git a/packages/packagers/xml/package.json b/packages/packagers/xml/package.json new file mode 100644 index 00000000000..981e8c092d6 --- /dev/null +++ b/packages/packagers/xml/package.json @@ -0,0 +1,28 @@ +{ + "name": "@parcel/packager-xml", + "version": "2.0.0-rc.0", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git" + }, + "main": "lib/XMLPackager.js", + "source": "src/XMLPackager.js", + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.0.0-beta.1" + }, + "dependencies": { + "@parcel/plugin": "2.0.0-rc.0", + "@parcel/types": "2.0.0-rc.0", + "@parcel/utils": "2.0.0-rc.0", + "@xmldom/xmldom": "^0.7.5" + } +} diff --git a/packages/packagers/xml/src/XMLPackager.js b/packages/packagers/xml/src/XMLPackager.js new file mode 100644 index 00000000000..1585d607ef2 --- /dev/null +++ b/packages/packagers/xml/src/XMLPackager.js @@ -0,0 +1,108 @@ +// @flow + +import type {Bundle, BundleGraph, NamedBundle} from '@parcel/types'; +import assert from 'assert'; +import {Packager} from '@parcel/plugin'; +import { + blobToString, + replaceInlineReferences, + replaceURLReferences, +} from '@parcel/utils'; +import {DOMParser, XMLSerializer} from '@xmldom/xmldom'; + +export default (new Packager({ + async package({bundle, bundleGraph, getInlineBundleContents}) { + const assets = []; + bundle.traverseAssets(asset => { + assets.push(asset); + }); + + assert.strictEqual( + assets.length, + 1, + 'XML bundles must only contain one asset', + ); + + let asset = assets[0]; + let code = await asset.getCode(); + let parser = new DOMParser(); + let dom = parser.parseFromString(code); + + let inlineElements = dom.getElementsByTagNameNS( + 'https://v2.parceljs.org', + 'inline', + ); + if (inlineElements.length > 0) { + for (let element of Array.from(inlineElements)) { + let key = element.getAttribute('key'); + let type = element.getAttribute('type'); + + const newContent = await getAssetContent( + bundleGraph, + getInlineBundleContents, + key, + ); + + if (newContent === null) { + continue; + } + + let contents = await blobToString(newContent.contents); + if (type === 'xhtml' || type === 'xml') { + let parsed = new DOMParser().parseFromString( + contents, + 'application/xml', + ); + element.parentNode.removeChild(element); + element.parentNode.appendChild(parsed.documentElement); + } else { + element.parentNode.textContent = contents; + } + } + + code = new XMLSerializer().serializeToString(dom); + } + + const {contents, map} = replaceURLReferences({ + bundle, + bundleGraph, + contents: code, + relative: false, + }); + + return replaceInlineReferences({ + bundle, + bundleGraph, + contents, + getInlineBundleContents, + getInlineReplacement: (dep, inlineType, contents) => ({ + from: dep.id, + to: contents.replace(/"/g, '"').trim(), + }), + map, + }); + }, +}): Packager); + +async function getAssetContent( + bundleGraph: BundleGraph, + getInlineBundleContents, + assetId, +) { + let inlineBundle: ?Bundle; + bundleGraph.traverseBundles((bundle, context, {stop}) => { + const entryAssets = bundle.getEntryAssets(); + if (entryAssets.some(a => a.uniqueKey === assetId)) { + inlineBundle = bundle; + stop(); + } + }); + + if (!inlineBundle) { + return null; + } + + const bundleResult = await getInlineBundleContents(inlineBundle, bundleGraph); + + return {bundle: inlineBundle, contents: bundleResult.contents}; +} diff --git a/packages/transformers/html/src/HTMLTransformer.js b/packages/transformers/html/src/HTMLTransformer.js index db7bf863f25..4e0fa01a69e 100644 --- a/packages/transformers/html/src/HTMLTransformer.js +++ b/packages/transformers/html/src/HTMLTransformer.js @@ -21,13 +21,15 @@ export default (new Transformer({ lowerCaseTags: true, lowerCaseAttributeNames: true, sourceLocations: true, + xmlMode: asset.type === 'xhtml', }), }; }, async transform({asset, options}) { - // Handle .htm - asset.type = 'html'; + if (asset.type === 'htm') { + asset.type = 'html'; + } asset.bundleBehavior = 'isolated'; let ast = nullthrows(await asset.getAST()); let hasScripts = collectDependencies(asset, ast); @@ -65,9 +67,11 @@ export default (new Transformer({ return result; }, - generate({ast}) { + generate({ast, asset}) { return { - content: render(ast.program), + content: render(ast.program, { + closingSingleTag: asset.type === 'xhtml' ? 'slash' : undefined, + }), }; }, }): Transformer); diff --git a/packages/transformers/html/src/dependencies.js b/packages/transformers/html/src/dependencies.js index 98e76f92313..5ce79ca5d8f 100644 --- a/packages/transformers/html/src/dependencies.js +++ b/packages/transformers/html/src/dependencies.js @@ -245,7 +245,7 @@ export default function collectDependencies( for (let attr in attrs) { // Check for virtual paths - if (tag === 'a' && attrs[attr].lastIndexOf('.') < 1) { + if (tag === 'a' && attrs[attr].split('#')[0].lastIndexOf('.') < 1) { continue; } diff --git a/packages/transformers/posthtml/src/PostHTMLTransformer.js b/packages/transformers/posthtml/src/PostHTMLTransformer.js index 49d3b3f7606..c2d81d78b36 100644 --- a/packages/transformers/posthtml/src/PostHTMLTransformer.js +++ b/packages/transformers/posthtml/src/PostHTMLTransformer.js @@ -88,6 +88,7 @@ export default (new Transformer({ program: parse(await asset.getCode(), { lowerCaseAttributeNames: true, sourceLocations: true, + xmlMode: asset.type === 'xhtml', }), }; }, @@ -123,9 +124,11 @@ export default (new Transformer({ return [asset]; }, - generate({ast}) { + generate({ast, asset}) { return { - content: render(ast.program), + content: render(ast.program, { + closingSingleTag: asset.type === 'xhtml' ? 'slash' : undefined, + }), }; }, }): Transformer); diff --git a/packages/transformers/xml/package.json b/packages/transformers/xml/package.json new file mode 100644 index 00000000000..ab5cdcbbf59 --- /dev/null +++ b/packages/transformers/xml/package.json @@ -0,0 +1,26 @@ +{ + "name": "@parcel/transformer-xml", + "version": "2.0.0-rc.0", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git" + }, + "main": "lib/XMLTransformer.js", + "source": "src/XMLTransformer.js", + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.0.0-beta.1" + }, + "dependencies": { + "@parcel/plugin": "2.0.0-rc.0", + "@xmldom/xmldom": "^0.7.5" + } +} diff --git a/packages/transformers/xml/src/XMLTransformer.js b/packages/transformers/xml/src/XMLTransformer.js new file mode 100644 index 00000000000..5d2b02b1d46 --- /dev/null +++ b/packages/transformers/xml/src/XMLTransformer.js @@ -0,0 +1,55 @@ +// @flow +import {Transformer} from '@parcel/plugin'; +import {DOMParser, XMLSerializer} from '@xmldom/xmldom'; +import * as atom from './atom'; +import * as rss from './rss'; + +const HANDLERS = { + 'http://www.w3.org/2005/Atom': atom, +}; + +const NON_NAMESPACED_HANDLERS = { + rss, +}; + +export default (new Transformer({ + async transform({asset}) { + let code = await asset.getCode(); + let parser = new DOMParser(); + let dom = parser.parseFromString(code, 'application/xml'); + + let parts = []; + let nonNamespacedHandlers = !dom.documentElement.namespaceURI + ? NON_NAMESPACED_HANDLERS[dom.documentElement.nodeName] || {} + : {}; + + walk(dom, node => { + if (node.nodeType !== 1) { + return; + } + + let handler = node.namespaceURI + ? HANDLERS[node.namespaceURI]?.[node.localName] + : nonNamespacedHandlers[node.nodeName]; + + if (handler) { + handler(node, asset, parts); + } + }); + + code = new XMLSerializer().serializeToString(dom); + asset.setCode(code); + + return [asset, ...parts]; + }, +}): Transformer); + +function walk(element, visit) { + visit(element); + + element = element.firstChild; + while (element) { + walk(element, visit); + element = element.nextSibling; + } +} diff --git a/packages/transformers/xml/src/atom.js b/packages/transformers/xml/src/atom.js new file mode 100644 index 00000000000..4e0e3adc7b5 --- /dev/null +++ b/packages/transformers/xml/src/atom.js @@ -0,0 +1,73 @@ +// @flow +import type {MutableAsset, TransformerResult} from '@parcel/types'; +import {XMLSerializer} from '@xmldom/xmldom'; +import {urlHandler} from './utils'; + +// Handlers for elements defined by the Atom spec. +// See https://datatracker.ietf.org/doc/html/rfc4287 + +export function link(element: Element, asset: MutableAsset) { + let href = element.getAttribute('href'); + if (href) { + href = asset.addURLDependency(href, { + needsStableName: true, + }); + + element.setAttribute('href', href); + } +} + +export const icon = urlHandler; +export const logo = urlHandler; + +export function content( + element: Element, + asset: MutableAsset, + parts: Array, +) { + let type = element.getAttribute('type'); + let contents; + switch (type) { + case 'html': + contents = element.textContent; + element.textContent = ''; + break; + case 'xhtml': { + let fragment = element.ownerDocument.createDocumentFragment(); + let child = element.firstChild; + while (child) { + element.removeChild(child); + fragment.appendChild(child.cloneNode(true)); + child = child.nextSibling; + } + contents = new XMLSerializer().serializeToString(fragment); + break; + } + default: + return; + } + + if (contents) { + let parcelKey = `${asset.id}:${parts.length}`; + let el = element.ownerDocument.createElementNS( + 'https://v2.parceljs.org', + 'inline', + ); + el.setAttribute('key', parcelKey); + el.setAttribute('type', type); + element.appendChild(el); + + asset.addDependency({ + specifier: parcelKey, + specifierType: 'esm', + bundleBehavior: 'inline', + }); + + parts.push({ + type, + content: contents, + uniqueKey: parcelKey, + bundleBehavior: 'inline', + }); + } +} diff --git a/packages/transformers/xml/src/rss.js b/packages/transformers/xml/src/rss.js new file mode 100644 index 00000000000..93119a18ea9 --- /dev/null +++ b/packages/transformers/xml/src/rss.js @@ -0,0 +1,52 @@ +// @flow +import type {MutableAsset, TransformerResult} from '@parcel/types'; +import {urlHandler} from './utils'; + +// Handlers for elements defined by the RSS spec. +// See https://validator.w3.org/feed/docs/rss2.html + +export const link = urlHandler; +export const url = urlHandler; +export const comments = urlHandler; + +export function enclosure(element: Element, asset: MutableAsset) { + let url = element.getAttribute('url'); + if (url) { + url = asset.addURLDependency(url, {}); + element.setAttribute('url', url); + } +} + +export function description( + element: Element, + asset: MutableAsset, + parts: Array, +) { + let parcelKey = `${asset.id}:${parts.length}`; + + asset.addDependency({ + specifier: parcelKey, + specifierType: 'esm', + bundleBehavior: 'inline', + }); + + parts.push({ + type: 'html', + content: element.textContent, + uniqueKey: parcelKey, + bundleBehavior: 'inline', + }); + + let child = element.firstChild; + while (child) { + element.removeChild(child); + child = child.nextSibling; + } + + let el = element.ownerDocument.createElementNS( + 'https://v2.parceljs.org', + 'inline', + ); + el.setAttribute('key', parcelKey); + element.appendChild(el); +} diff --git a/packages/transformers/xml/src/utils.js b/packages/transformers/xml/src/utils.js new file mode 100644 index 00000000000..c1083c9fff3 --- /dev/null +++ b/packages/transformers/xml/src/utils.js @@ -0,0 +1,8 @@ +// @flow +import type {MutableAsset} from '@parcel/types'; + +export function urlHandler(element: Element, asset: MutableAsset) { + element.textContent = asset.addURLDependency(element.textContent.trim(), { + needsStableName: true, + }); +} diff --git a/yarn.lock b/yarn.lock index c4176549c41..9ce974cc2b6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2459,6 +2459,11 @@ resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.0.4.tgz#6dc50f593bdfdeaa6183d1dbc15e2d45e7c6b8b3" integrity sha512-Swfbz31AaMX48CpFl+YmIrqOH9MgJMTrltG9e26A4ZxYx9LjGuMV+41WnxFzS3Bc9nbrc6sDPM37G6nIT8NJSg== +"@xmldom/xmldom@^0.7.5": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.7.5.tgz#09fa51e356d07d0be200642b0e4f91d8e6dd408d" + integrity sha512-V3BIhmY36fXZ1OtVcI9W+FxQqxVLsPKcNjWigIaa81dLC9IolJl5Mt4Cvhmr0flUnjSpTdrbMTSbXqYqV5dT6A== + "@zkochan/cmd-shim@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz#2ab8ed81f5bb5452a85f25758eb9b8681982fd2e" From 91df69254d2d7c46c6063055383fd56709fe72bb Mon Sep 17 00:00:00 2001 From: Jasper De Moor Date: Thu, 30 Sep 2021 07:44:34 +0200 Subject: [PATCH 02/68] Add sharp config to image transformer (#6876) --- packages/core/integration-tests/test/cache.js | 4 +- packages/core/integration-tests/test/image.js | 54 +++- .../test/integration/image-config/clock.png | Bin 0 -> 84435 bytes .../test/integration/image-config/foo.png | Bin 0 -> 255 bytes .../test/integration/image-config/image.jpg | Bin 0 -> 549196 bytes .../image-config/sharp.config.json | 13 + packages/transformers/image/package.json | 3 +- .../image/src/ImageTransformer.js | 75 +++-- .../transformers/image/src/validateConfig.js | 260 ++++++++++++++++++ 9 files changed, 378 insertions(+), 31 deletions(-) create mode 100644 packages/core/integration-tests/test/integration/image-config/clock.png create mode 100644 packages/core/integration-tests/test/integration/image-config/foo.png create mode 100755 packages/core/integration-tests/test/integration/image-config/image.jpg create mode 100644 packages/core/integration-tests/test/integration/image-config/sharp.config.json create mode 100644 packages/transformers/image/src/validateConfig.js diff --git a/packages/core/integration-tests/test/cache.js b/packages/core/integration-tests/test/cache.js index ab8b81980aa..c7ec9908156 100644 --- a/packages/core/integration-tests/test/cache.js +++ b/packages/core/integration-tests/test/cache.js @@ -5618,8 +5618,8 @@ describe('cache', function() { let bundles = b.bundleGraph.getBundles(); let contents = await overlayFS.readFile(bundles[0].filePath, 'utf8'); assert(contents.includes('.webp" type="image/webp">')); - assert(contents.includes('.jpg" type="image/jpeg">')); - assert(contents.includes('.jpg" alt="test image">')); + assert(contents.includes('.jpeg" type="image/jpeg">')); + assert(contents.includes('.jpeg" alt="test image">')); assert.equal(bundles.length, 4); }); }); diff --git a/packages/core/integration-tests/test/image.js b/packages/core/integration-tests/test/image.js index fa460566496..df7eea88e13 100644 --- a/packages/core/integration-tests/test/image.js +++ b/packages/core/integration-tests/test/image.js @@ -15,13 +15,13 @@ describe('image', function() { for (let filename of dirContent) { let ext = path.extname(filename); foundExtensions.push(ext); - if (ext === '.jpg') { + if (ext === '.jpeg') { imagePath = path.join(distDir, filename); } } assert.deepStrictEqual( foundExtensions.sort(), - ['.jpg', '.js', '.map'].sort(), + ['.jpeg', '.js', '.map'].sort(), ); let buffer = await outputFS.readFile(imagePath); @@ -45,7 +45,7 @@ describe('image', function() { assert.deepStrictEqual( foundExtensions.sort(), - ['.jpg', '.jpg', '.webp', '.html'].sort(), + ['.jpeg', '.jpeg', '.webp', '.html'].sort(), ); }); @@ -84,12 +84,12 @@ describe('image', function() { assert.deepStrictEqual( foundExtensions, - new Set(['html', 'webp', 'avif', 'jpg', 'png', 'tiff']), + new Set(['html', 'webp', 'avif', 'jpeg', 'png', 'tiff']), ); }); }); - it('should optimise JPEGs', async function() { + it('should lossless optimise JPEGs', async function() { let img = path.join(__dirname, '/integration/image/image.jpg'); let b = await bundle(img, { defaultTargetOptions: { @@ -112,7 +112,7 @@ describe('image', function() { assert(output.length < input.length); }); - it('should optimise PNGs', async function() { + it('should lossless optimise PNGs', async function() { let img = path.join(__dirname, '/integration/image/clock.png'); let b = await bundle(img, { defaultTargetOptions: { @@ -134,4 +134,46 @@ describe('image', function() { assert(outputRaw.equals(inputRaw)); assert(output.length < input.length); }); + + it('support config files for jpeg files', async function() { + let b = await bundle( + path.join(__dirname, '/integration/image-config/image.jpg'), + { + defaultTargetOptions: { + shouldOptimize: false, + }, + }, + ); + + const originalSize = 549196; + + const imagePath = b.getBundles().find(b => b.type === 'jpeg').filePath; + + const buffer = await outputFS.readFile(imagePath); + const image = await sharp(buffer).metadata(); + + assert.strictEqual(image.width, 1920); + assert.strictEqual(image.chromaSubsampling, '4:4:4'); + assert(image.size < originalSize); + }); + + it('support config files for png files', async function() { + let b = await bundle( + path.join(__dirname, '/integration/image-config/clock.png'), + { + defaultTargetOptions: { + shouldOptimize: false, + }, + }, + ); + + const originalSize = 84435; + const imagePath = b.getBundles().find(b => b.type === 'png').filePath; + const buffer = await outputFS.readFile(imagePath); + const image = await sharp(buffer).metadata(); + + assert.strictEqual(image.width, 200); + assert.strictEqual(image.paletteBitDepth, 8); + assert(image.size < originalSize); + }); }); diff --git a/packages/core/integration-tests/test/integration/image-config/clock.png b/packages/core/integration-tests/test/integration/image-config/clock.png new file mode 100644 index 0000000000000000000000000000000000000000..faf7bf89635e815e2fdfd56652bf537602898cc4 GIT binary patch literal 84435 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

2EthCR)=;e|3*8kx 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 literal 0 HcmV?d00001 diff --git a/packages/core/integration-tests/test/integration/image-config/image.jpg b/packages/core/integration-tests/test/integration/image-config/image.jpg new file mode 100755 index 0000000000000000000000000000000000000000..dce2488d49535655e3a19a4bde72da4889ed38b0 GIT binary patch literal 549196 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

vmHcr%B}a!eX8!A(zVygbL6Un;VB`oz4?v}{ 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 |+kn_`mo!fw1=BOE%~ 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�-jYn#ZJE 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 ZlG-Ew!c@=26vyVFz|_s3f42X({C{Z18PWg% literal 0 HcmV?d00001 diff --git a/packages/core/integration-tests/test/integration/image-config/sharp.config.json b/packages/core/integration-tests/test/integration/image-config/sharp.config.json new file mode 100644 index 00000000000..8e63cec71a6 --- /dev/null +++ b/packages/core/integration-tests/test/integration/image-config/sharp.config.json @@ -0,0 +1,13 @@ +{ + "jpeg": { + "quality": 75, + "chromaSubsampling": "4:4:4" + }, + "webp": { + "quality": 80 + }, + "png": { + "palette": true + }, + "quality": 90 +} diff --git a/packages/transformers/image/package.json b/packages/transformers/image/package.json index c5f509ed8c6..44bbd37614d 100644 --- a/packages/transformers/image/package.json +++ b/packages/transformers/image/package.json @@ -16,7 +16,8 @@ "parcel": "^2.0.0-beta.1" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0" + "@parcel/plugin": "2.0.0-rc.0", + "nullthrows": "^1.1.1" }, "devDependencies": { "sharp": "^0.28.3" diff --git a/packages/transformers/image/src/ImageTransformer.js b/packages/transformers/image/src/ImageTransformer.js index 3f2c577349a..1cb849cef31 100644 --- a/packages/transformers/image/src/ImageTransformer.js +++ b/packages/transformers/image/src/ImageTransformer.js @@ -1,34 +1,66 @@ // @flow +import {validateConfig} from './validateConfig'; import {Transformer} from '@parcel/plugin'; +import nullthrows from 'nullthrows'; // from https://github.com/lovell/sharp/blob/df7b8ba73808fc494be413e88cfb621b6279218c/lib/output.js#L6-L17 const FORMATS = new Map([ - ['heic', 'heif'], - ['heif', 'heif'], - ['avif', 'avif'], ['jpeg', 'jpeg'], ['jpg', 'jpeg'], ['png', 'png'], - ['raw', 'raw'], - ['tiff', 'tiff'], ['webp', 'webp'], ['gif', 'gif'], + ['tiff', 'tiff'], + ['avif', 'avif'], + ['heic', 'heif'], + ['heif', 'heif'], ]); const SHARP_RANGE = '^0.28.3'; export default (new Transformer({ - async transform({asset, options}) { + async loadConfig({config}) { + let configFile: any = await config.getConfig( + ['sharp.config.json'], // '.sharprc', '.sharprc.json' + {packageKey: 'sharp'}, + ); + + if (configFile?.contents) { + validateConfig(configFile.contents, configFile.filePath); + return configFile.contents; + } else { + return {}; + } + }, + + async transform({config, asset, options}) { asset.bundleBehavior = 'isolated'; - let width = asset.query.width ? parseInt(asset.query.width, 10) : null; - let height = asset.query.height ? parseInt(asset.query.height, 10) : null; - let quality = asset.query.quality + const originalFormat = FORMATS.get(asset.type); + if (!originalFormat) { + throw new Error( + `The image transformer does not support ${asset.type} images.`, + ); + } + + const width = asset.query.width ? parseInt(asset.query.width, 10) : null; + const height = asset.query.height ? parseInt(asset.query.height, 10) : null; + const quality = asset.query.quality ? parseInt(asset.query.quality, 10) - : undefined; - let format = asset.query.as ? asset.query.as.toLowerCase().trim() : null; + : config.quality; + let targetFormat = asset.query.as + ? asset.query.as.toLowerCase().trim() + : null; + if (targetFormat && !FORMATS.has(targetFormat)) { + throw new Error( + `The image transformer does not support ${targetFormat} images.`, + ); + } + + const format = nullthrows(FORMATS.get(targetFormat || originalFormat)); + const outputOptions = config[format]; - if (width || height || quality || format) { + if (width || height || quality || targetFormat || outputOptions) { let inputBuffer = await asset.getBuffer(); let sharp = await options.packageManager.require( 'sharp', @@ -46,18 +78,17 @@ export default (new Transformer({ imagePipeline.rotate(); - if (format) { - if (!FORMATS.has(format)) { - throw new Error(`Sharp does not support ${format} images.`); - } - - asset.type = format; - - imagePipeline[FORMATS.get(format)]({ - quality, - }); + const normalizedOutputOptions = outputOptions || {}; + if (format === 'jpeg') { + normalizedOutputOptions.mozjpeg = + normalizedOutputOptions.mozjpeg ?? true; } + imagePipeline[format]({ + quality, + ...normalizedOutputOptions, + }); + asset.type = format; asset.setStream(imagePipeline); } diff --git a/packages/transformers/image/src/validateConfig.js b/packages/transformers/image/src/validateConfig.js new file mode 100644 index 00000000000..03206b92294 --- /dev/null +++ b/packages/transformers/image/src/validateConfig.js @@ -0,0 +1,260 @@ +// @flow +import type {SchemaEntity} from '@parcel/utils'; +import {validateSchema} from '@parcel/utils'; + +// https://sharp.pixelplumbing.com/api-output#jpeg +const JPEG_OUTPUT_SCHEMA: SchemaEntity = { + type: 'object', + properties: { + quality: { + type: 'number', + }, + progressive: { + type: 'boolean', + }, + chromaSubsampling: { + type: 'string', + }, + optimiseCoding: { + type: 'boolean', + }, + optimizeCoding: { + type: 'boolean', + }, + mozjpeg: { + type: 'boolean', + }, + trellisQuantisation: { + type: 'boolean', + }, + overshootDeringing: { + type: 'boolean', + }, + optimiseScans: { + type: 'boolean', + }, + optimizeScans: { + type: 'boolean', + }, + quantisationTable: { + type: 'number', + }, + quantizationTable: { + type: 'number', + }, + force: { + type: 'boolean', + }, + }, + additionalProperties: true, +}; + +// https://sharp.pixelplumbing.com/api-output#png +const PNG_OUTPUT_SCHEMA: SchemaEntity = { + type: 'object', + properties: { + quality: { + type: 'number', + }, + progressive: { + type: 'boolean', + }, + compressionLevel: { + type: 'number', + }, + adaptiveFiltering: { + type: 'boolean', + }, + palette: { + type: 'boolean', + }, + colours: { + type: 'number', + }, + colors: { + type: 'number', + }, + dither: { + type: 'number', + }, + force: { + type: 'boolean', + }, + }, + additionalProperties: true, +}; + +// https://sharp.pixelplumbing.com/api-output#webp +const WEBP_OUTPUT_SCHEMA: SchemaEntity = { + type: 'object', + properties: { + quality: { + type: 'number', + }, + alphaQuality: { + type: 'number', + }, + lossless: { + type: 'boolean', + }, + nearLossless: { + type: 'boolean', + }, + smartSubsample: { + type: 'boolean', + }, + reductionEffort: { + type: 'number', + }, + pageHeight: { + type: 'number', + }, + loop: { + type: 'number', + }, + delay: { + type: 'array', + items: { + type: 'number', + }, + }, + force: { + type: 'boolean', + }, + }, + additionalProperties: true, +}; + +// https://sharp.pixelplumbing.com/api-output#gif +const GIF_OUTPUT_SCHEMA: SchemaEntity = { + type: 'object', + properties: { + pageHeight: { + type: 'number', + }, + loop: { + type: 'number', + }, + delay: { + type: 'array', + items: { + type: 'number', + }, + }, + force: { + type: 'boolean', + }, + }, + additionalProperties: true, +}; + +// https://sharp.pixelplumbing.com/api-output#tiff +const TIFF_OUTPUT_SCHEMA: SchemaEntity = { + type: 'object', + properties: { + quality: { + type: 'number', + }, + force: { + type: 'boolean', + }, + compression: { + type: 'string', + }, + predictor: { + type: 'string', + }, + pyramid: { + type: 'boolean', + }, + tile: { + type: 'boolean', + }, + tileWidth: { + type: 'number', + }, + tileHeight: { + type: 'number', + }, + xres: { + type: 'number', + }, + yres: { + type: 'number', + }, + bitdepth: { + type: 'number', + }, + }, + additionalProperties: true, +}; + +// https://sharp.pixelplumbing.com/api-output#avif +const AVIF_OUTPUT_SCHEMA: SchemaEntity = { + type: 'object', + properties: { + quality: { + type: 'number', + }, + lossless: { + type: 'boolean', + }, + speed: { + type: 'number', + }, + chromaSubsampling: { + type: 'string', + }, + }, + additionalProperties: true, +}; + +// https://sharp.pixelplumbing.com/api-output#heif +const HEIF_OUTPUT_SCHEMA: SchemaEntity = { + type: 'object', + properties: { + quality: { + type: 'number', + }, + compression: { + type: 'string', + }, + lossless: { + type: 'boolean', + }, + speed: { + type: 'number', + }, + chromaSubsampling: { + type: 'string', + }, + }, + additionalProperties: true, +}; + +const CONFIG_SCHEMA: SchemaEntity = { + type: 'object', + properties: { + // Fallback quality + quality: { + type: 'number', + }, + jpeg: JPEG_OUTPUT_SCHEMA, + png: PNG_OUTPUT_SCHEMA, + webp: WEBP_OUTPUT_SCHEMA, + gif: GIF_OUTPUT_SCHEMA, + tiff: TIFF_OUTPUT_SCHEMA, + avif: AVIF_OUTPUT_SCHEMA, + heif: HEIF_OUTPUT_SCHEMA, + }, + additionalProperties: false, +}; + +export function validateConfig(data: any, filePath: string) { + validateSchema.diagnostic( + CONFIG_SCHEMA, + {data, filePath}, + '@parcel/transformer-image', + 'Invalid sharp config', + ); +} From 5277d24b4e62a93ab7d42af8a89ee62a98e33d18 Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Wed, 29 Sep 2021 23:53:16 -0700 Subject: [PATCH 03/68] Update sharp and use buffers instead of streams (#7000) --- packages/transformers/image/package.json | 2 +- packages/transformers/image/src/ImageTransformer.js | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/transformers/image/package.json b/packages/transformers/image/package.json index 44bbd37614d..987b4800ac6 100644 --- a/packages/transformers/image/package.json +++ b/packages/transformers/image/package.json @@ -20,6 +20,6 @@ "nullthrows": "^1.1.1" }, "devDependencies": { - "sharp": "^0.28.3" + "sharp": "^0.29.1" } } diff --git a/packages/transformers/image/src/ImageTransformer.js b/packages/transformers/image/src/ImageTransformer.js index 1cb849cef31..be04989e578 100644 --- a/packages/transformers/image/src/ImageTransformer.js +++ b/packages/transformers/image/src/ImageTransformer.js @@ -16,7 +16,7 @@ const FORMATS = new Map([ ['heif', 'heif'], ]); -const SHARP_RANGE = '^0.28.3'; +const SHARP_RANGE = '^0.29.1'; export default (new Transformer({ async loadConfig({config}) { @@ -89,7 +89,9 @@ export default (new Transformer({ }); asset.type = format; - asset.setStream(imagePipeline); + + let buffer = await imagePipeline.toBuffer(); + asset.setBuffer(buffer); } return [asset]; From 7468864f5ef8404309f4c681a2aa104d400cf5fc Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Thu, 30 Sep 2021 19:19:58 -0700 Subject: [PATCH 04/68] HMR fixes for URL dependencies (#6986) --- packages/core/core/src/applyRuntimes.js | 22 +++++----- .../core/src/public/MutableBundleGraph.js | 4 +- .../core/src/requests/BundleGraphRequest.js | 34 ++++++++++++--- .../core/src/requests/ParcelBuildRequest.js | 7 ++- .../optimizers/image/src/ImageOptimizer.js | 4 ++ .../reporters/dev-server/src/HMRServer.js | 43 ++++++++++++++++--- packages/runtimes/hmr/src/HMRRuntime.js | 3 +- .../runtimes/hmr/src/loaders/hmr-runtime.js | 28 +++++++----- packages/runtimes/js/src/JSRuntime.js | 7 ++- 9 files changed, 116 insertions(+), 36 deletions(-) diff --git a/packages/core/core/src/applyRuntimes.js b/packages/core/core/src/applyRuntimes.js index fcd2a9a6707..c567ea10247 100644 --- a/packages/core/core/src/applyRuntimes.js +++ b/packages/core/core/src/applyRuntimes.js @@ -4,6 +4,7 @@ import type {ContentKey} from '@parcel/graph'; import type {Dependency, NamedBundle as INamedBundle} from '@parcel/types'; import type {SharedReference} from '@parcel/workers'; import type { + Asset, AssetGroup, Bundle as InternalBundle, Config, @@ -18,7 +19,7 @@ import path from 'path'; import assert from 'assert'; import invariant from 'assert'; import nullthrows from 'nullthrows'; -import AssetGraph, {nodeFromAssetGroup} from './AssetGraph'; +import {nodeFromAssetGroup} from './AssetGraph'; import BundleGraph from './public/BundleGraph'; import InternalBundleGraph, {bundleGraphEdgeTypes} from './BundleGraph'; import {NamedBundle} from './public/Bundle'; @@ -58,7 +59,7 @@ export default async function applyRuntimes({ previousDevDeps: Map, devDepRequests: Map, configs: Map, -|}): Promise { +|}): Promise> { let runtimes = await config.getRuntimes(); let connections: Array = []; @@ -137,11 +138,10 @@ export default async function applyRuntimes({ await runDevDepRequest(api, devDepRequest); } - let runtimesAssetGraph = await reconcileNewRuntimes( - api, - connections, - optionsRef, - ); + let { + assetGraph: runtimesAssetGraph, + changedAssets, + } = await reconcileNewRuntimes(api, connections, optionsRef); let runtimesGraph = InternalBundleGraph.fromAssetGraph( runtimesAssetGraph, @@ -245,13 +245,15 @@ export default async function applyRuntimes({ bundleGraph._graph.addEdge(dependencyNodeId, bundleGraphRuntimeNodeId); } } + + return changedAssets; } -async function reconcileNewRuntimes( +function reconcileNewRuntimes( api: RunAPI, connections: Array, optionsRef: SharedReference, -): Promise { +) { let assetGroups = connections.map(t => t.assetGroup); let request = createAssetGraphRequest({ name: 'Runtimes', @@ -260,5 +262,5 @@ async function reconcileNewRuntimes( }); // rebuild the graph - return (await api.runRequest(request, {force: true})).assetGraph; + return api.runRequest(request, {force: true}); } diff --git a/packages/core/core/src/public/MutableBundleGraph.js b/packages/core/core/src/public/MutableBundleGraph.js index e59a2d8ac9c..59a8028bd5d 100644 --- a/packages/core/core/src/public/MutableBundleGraph.js +++ b/packages/core/core/src/public/MutableBundleGraph.js @@ -191,7 +191,9 @@ export default class MutableBundleGraph extends BundleGraph id: bundleId, value: { id: bundleId, - hashReference: HASH_REF_PREFIX + bundleId, + hashReference: this.#options.shouldContentHash + ? HASH_REF_PREFIX + bundleId + : bundleId.slice(-8), type: opts.entryAsset ? opts.entryAsset.type : opts.type, env: opts.env ? environmentToInternalEnvironment(opts.env) diff --git a/packages/core/core/src/requests/BundleGraphRequest.js b/packages/core/core/src/requests/BundleGraphRequest.js index 13da2f1dbac..36952dc9e24 100644 --- a/packages/core/core/src/requests/BundleGraphRequest.js +++ b/packages/core/core/src/requests/BundleGraphRequest.js @@ -5,6 +5,7 @@ import type {SharedReference} from '@parcel/workers'; import type ParcelConfig, {LoadedPlugin} from '../ParcelConfig'; import type {StaticRunOpts, RunAPI} from '../RequestTracker'; import type { + Asset, Bundle as InternalBundle, Config, DevDepRequest, @@ -63,10 +64,15 @@ type RunInput = {| ...StaticRunOpts, |}; +type BundleGraphResult = {| + bundleGraph: InternalBundleGraph, + changedAssets: Map, +|}; + type BundleGraphRequest = {| id: string, +type: 'bundle_graph_request', - run: RunInput => Async, + run: RunInput => Async, input: BundleGraphRequestInput, |}; @@ -164,7 +170,7 @@ class BundlerRunner { await runDevDepRequest(this.api, devDepRequest); } - async bundle(graph: AssetGraph): Promise { + async bundle(graph: AssetGraph): Promise { report({ type: 'buildProgress', phase: 'bundling', @@ -194,7 +200,13 @@ class BundlerRunner { // Deserialize, and store the original buffer in an in memory cache so we avoid // re-serializing it when sending to workers, and in build mode, when writing to cache on shutdown. let graph = deserializeToCache(cached); - this.api.storeResult(graph, cacheKey); + this.api.storeResult( + { + bundleGraph: graph, + changedAssets: new Map(), + }, + cacheKey, + ); return graph; } } @@ -273,7 +285,7 @@ class BundlerRunner { await this.nameBundles(internalBundleGraph); - await applyRuntimes({ + let changedAssets = await applyRuntimes({ bundleGraph: internalBundleGraph, api: this.api, config: this.config, @@ -300,8 +312,18 @@ class BundlerRunner { // Recompute the cache key to account for new dev dependencies and invalidations. cacheKey = await this.getCacheKey(graph); - this.api.storeResult(internalBundleGraph, cacheKey); - return internalBundleGraph; + this.api.storeResult( + { + bundleGraph: internalBundleGraph, + changedAssets: new Map(), + }, + cacheKey, + ); + + return { + bundleGraph: internalBundleGraph, + changedAssets, + }; } async getCacheKey(assetGraph: AssetGraph): Promise { diff --git a/packages/core/core/src/requests/ParcelBuildRequest.js b/packages/core/core/src/requests/ParcelBuildRequest.js index ea5a2a00215..72a51011338 100644 --- a/packages/core/core/src/requests/ParcelBuildRequest.js +++ b/packages/core/core/src/requests/ParcelBuildRequest.js @@ -73,7 +73,12 @@ async function run({input, api, options}: RunInput) { optionsRef, }); - let bundleGraph = await api.runRequest(bundleGraphRequest); + let {bundleGraph, changedAssets: changedRuntimeAssets} = await api.runRequest( + bundleGraphRequest, + ); + for (let [id, asset] of changedRuntimeAssets) { + changedAssets.set(id, asset); + } // $FlowFixMe Added in Flow 0.121.0 upgrade in #4381 (Windows only) dumpGraphToGraphViz(bundleGraph._graph, 'BundleGraph', bundleGraphEdgeTypes); diff --git a/packages/optimizers/image/src/ImageOptimizer.js b/packages/optimizers/image/src/ImageOptimizer.js index 98be1160f89..e12cb53d3fc 100644 --- a/packages/optimizers/image/src/ImageOptimizer.js +++ b/packages/optimizers/image/src/ImageOptimizer.js @@ -5,6 +5,10 @@ import {optimize} from '../native'; export default (new Optimizer({ async optimize({bundle, contents}) { + if (!bundle.env.shouldOptimize) { + return {contents}; + } + let buffer = await blobToBuffer(contents); let optimized = optimize(bundle.type, buffer); return { diff --git a/packages/reporters/dev-server/src/HMRServer.js b/packages/reporters/dev-server/src/HMRServer.js index c245fb92fdc..15632b2e637 100644 --- a/packages/reporters/dev-server/src/HMRServer.js +++ b/packages/reporters/dev-server/src/HMRServer.js @@ -1,6 +1,6 @@ // @flow -import type {BuildSuccessEvent, PluginOptions} from '@parcel/types'; +import type {BuildSuccessEvent, Dependency, PluginOptions} from '@parcel/types'; import type {Diagnostic} from '@parcel/diagnostic'; import type {AnsiDiagnosticResult} from '@parcel/utils'; import type {ServerError, HMRServerOptions} from './types.js.flow'; @@ -95,11 +95,35 @@ export default class HMRServer { async emitUpdate(event: BuildSuccessEvent) { this.unresolvedError = null; - let changedAssets = Array.from(event.changedAssets.values()); - if (changedAssets.length === 0) return; + let changedAssets = new Set(event.changedAssets.values()); + if (changedAssets.size === 0) return; let queue = new PromiseQueue({maxConcurrent: FS_CONCURRENCY}); for (let asset of changedAssets) { + if (asset.type !== 'js') { + // If all of the incoming dependencies of the asset actually resolve to a JS asset + // rather than the original, we can mark the runtimes as changed instead. URL runtimes + // have a cache busting query param added with HMR enabled which will trigger a reload. + let runtimes = new Set(); + let incomingDeps = event.bundleGraph.getIncomingDependencies(asset); + let isOnlyReferencedByRuntimes = incomingDeps.every(dep => { + let resolved = event.bundleGraph.getResolvedAsset(dep); + let isRuntime = resolved?.type === 'js' && resolved !== asset; + if (resolved && isRuntime) { + runtimes.add(resolved); + } + return isRuntime; + }); + + if (isOnlyReferencedByRuntimes) { + for (let runtime of runtimes) { + changedAssets.add(runtime); + } + + continue; + } + } + queue.add(async () => { let dependencies = event.bundleGraph.getDependencies(asset); let depsByBundle = {}; @@ -108,7 +132,7 @@ export default class HMRServer { for (let dep of dependencies) { let resolved = event.bundleGraph.getResolvedAsset(dep, bundle); if (resolved) { - deps[dep.specifier] = event.bundleGraph.getAssetPublicId( + deps[getSpecifier(dep)] = event.bundleGraph.getAssetPublicId( resolved, ); } @@ -119,7 +143,8 @@ export default class HMRServer { return { id: event.bundleGraph.getAssetPublicId(asset), type: asset.type, - output: await asset.getCode(), + // No need to send the contents of non-JS assets to the client. + output: asset.type === 'js' ? await asset.getCode() : '', envHash: asset.env.id, depsByBundle, }; @@ -153,3 +178,11 @@ export default class HMRServer { } } } + +function getSpecifier(dep: Dependency): string { + if (typeof dep.meta.placeholder === 'string') { + return dep.meta.placeholder; + } + + return dep.specifier; +} diff --git a/packages/runtimes/hmr/src/HMRRuntime.js b/packages/runtimes/hmr/src/HMRRuntime.js index 5b953d1e680..5215b5c7e1d 100644 --- a/packages/runtimes/hmr/src/HMRRuntime.js +++ b/packages/runtimes/hmr/src/HMRRuntime.js @@ -15,7 +15,8 @@ export default (new Runtime({ bundle.type !== 'js' || !options.hmrOptions || bundle.env.isLibrary || - bundle.env.isWorklet() + bundle.env.isWorklet() || + bundle.env.sourceType === 'script' ) { return; } diff --git a/packages/runtimes/hmr/src/loaders/hmr-runtime.js b/packages/runtimes/hmr/src/loaders/hmr-runtime.js index 4b8da0d14d1..a5c0a9bb167 100644 --- a/packages/runtimes/hmr/src/loaders/hmr-runtime.js +++ b/packages/runtimes/hmr/src/loaders/hmr-runtime.js @@ -289,15 +289,14 @@ function hmrApply(bundle /*: ParcelRequire */, asset /*: HMRAsset */) { if (asset.type === 'css') { reloadCSS(); - return; - } - - let deps = asset.depsByBundle[bundle.HMR_BUNDLE_ID]; - if (deps) { - var fn = new Function('require', 'module', 'exports', asset.output); - modules[asset.id] = [fn, deps]; - } else if (bundle.parent) { - hmrApply(bundle.parent, asset); + } else if (asset.type === 'js') { + let deps = asset.depsByBundle[bundle.HMR_BUNDLE_ID]; + if (deps) { + var fn = new Function('require', 'module', 'exports', asset.output); + modules[asset.id] = [fn, deps]; + } else if (bundle.parent) { + hmrApply(bundle.parent, asset); + } } } @@ -322,7 +321,7 @@ function hmrAcceptCheck( } if (checkedAssets[id]) { - return; + return true; } checkedAssets[id] = true; @@ -335,7 +334,14 @@ function hmrAcceptCheck( return true; } - return getParents(module.bundle.root, id).some(function(v) { + let parents = getParents(module.bundle.root, id); + + // If no parents, the asset is new. Prevent reloading the page. + if (!parents.length) { + return true; + } + + return parents.some(function(v) { return hmrAcceptCheck(v[0], v[1], null); }); } diff --git a/packages/runtimes/js/src/JSRuntime.js b/packages/runtimes/js/src/JSRuntime.js index 21e19ef59bc..1bb52c84042 100644 --- a/packages/runtimes/js/src/JSRuntime.js +++ b/packages/runtimes/js/src/JSRuntime.js @@ -589,7 +589,12 @@ function getRelativePathExpr( ); } - return JSON.stringify(relativePath); + let res = JSON.stringify(relativePath); + if (options.hmrOptions) { + res += ' + "?" + Date.now()'; + } + + return res; } function getAbsoluteUrlExpr(relativePathExpr: string, bundle: NamedBundle) { From 87a44b97668666149807507aa73e3f2231ade0ab Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Thu, 30 Sep 2021 19:20:12 -0700 Subject: [PATCH 05/68] Require sharp from the main thread to prevent issues on worker exit (#7001) --- packages/transformers/image/package.json | 1 + .../image/src/ImageTransformer.js | 30 ++++++++++++++----- packages/transformers/image/src/loadSharp.js | 23 ++++++++++++++ 3 files changed, 47 insertions(+), 7 deletions(-) create mode 100644 packages/transformers/image/src/loadSharp.js diff --git a/packages/transformers/image/package.json b/packages/transformers/image/package.json index 987b4800ac6..e9cefdb7381 100644 --- a/packages/transformers/image/package.json +++ b/packages/transformers/image/package.json @@ -17,6 +17,7 @@ }, "dependencies": { "@parcel/plugin": "2.0.0-rc.0", + "@parcel/workers": "2.0.0-rc.0", "nullthrows": "^1.1.1" }, "devDependencies": { diff --git a/packages/transformers/image/src/ImageTransformer.js b/packages/transformers/image/src/ImageTransformer.js index be04989e578..eac4100cf3a 100644 --- a/packages/transformers/image/src/ImageTransformer.js +++ b/packages/transformers/image/src/ImageTransformer.js @@ -2,6 +2,8 @@ import {validateConfig} from './validateConfig'; import {Transformer} from '@parcel/plugin'; import nullthrows from 'nullthrows'; +import WorkerFarm from '@parcel/workers'; +import loadSharp from './loadSharp'; // from https://github.com/lovell/sharp/blob/df7b8ba73808fc494be413e88cfb621b6279218c/lib/output.js#L6-L17 const FORMATS = new Map([ @@ -16,7 +18,7 @@ const FORMATS = new Map([ ['heif', 'heif'], ]); -const SHARP_RANGE = '^0.29.1'; +let isSharpLoadedOnMainThread = false; export default (new Transformer({ async loadConfig({config}) { @@ -61,14 +63,28 @@ export default (new Transformer({ const outputOptions = config[format]; if (width || height || quality || targetFormat || outputOptions) { + // Sharp must be required from the main thread as well to prevent errors when workers exit + // See https://sharp.pixelplumbing.com/install#worker-threads and https://github.com/lovell/sharp/issues/2263 + if (WorkerFarm.isWorker() && !isSharpLoadedOnMainThread) { + let api = WorkerFarm.getWorkerApi(); + await api.callMaster({ + location: __dirname + '/loadSharp.js', + args: [ + options.packageManager, + asset.filePath, + options.shouldAutoInstall, + ], + }); + + isSharpLoadedOnMainThread = true; + } + let inputBuffer = await asset.getBuffer(); - let sharp = await options.packageManager.require( - 'sharp', + let sharp = await loadSharp( + options.packageManager, asset.filePath, - { - range: SHARP_RANGE, - shouldAutoInstall: options.shouldAutoInstall, - }, + options.shouldAutoInstall, + true, ); let imagePipeline = sharp(inputBuffer); diff --git a/packages/transformers/image/src/loadSharp.js b/packages/transformers/image/src/loadSharp.js new file mode 100644 index 00000000000..52e598cbf26 --- /dev/null +++ b/packages/transformers/image/src/loadSharp.js @@ -0,0 +1,23 @@ +// @flow +import type {PackageManager} from '@parcel/package-manager'; +import type {FilePath} from '@parcel/types'; + +const SHARP_RANGE = '^0.29.1'; + +// This is used to load sharp on the main thread, which prevents errors when worker threads exit +// See https://sharp.pixelplumbing.com/install#worker-threads and https://github.com/lovell/sharp/issues/2263 +module.exports = async ( + packageManager: PackageManager, + filePath: FilePath, + shouldAutoInstall: boolean, + shouldReturn: boolean, +): Promise => { + let sharp = await packageManager.require('sharp', filePath, { + range: SHARP_RANGE, + shouldAutoInstall: shouldAutoInstall, + }); + + if (shouldReturn) { + return sharp; + } +}; From 843eb50ef398f61acd07847bc12a9f72aef02c06 Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Fri, 1 Oct 2021 09:03:16 -0700 Subject: [PATCH 06/68] Better SVGO and htmlnano defaults (#7003) --- .../htmlnano/src/HTMLNanoOptimizer.js | 3 +++ packages/optimizers/svgo/src/SVGOOptimizer.js | 19 ++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/optimizers/htmlnano/src/HTMLNanoOptimizer.js b/packages/optimizers/htmlnano/src/HTMLNanoOptimizer.js index 322b8a92897..6eae2b144fc 100644 --- a/packages/optimizers/htmlnano/src/HTMLNanoOptimizer.js +++ b/packages/optimizers/htmlnano/src/HTMLNanoOptimizer.js @@ -53,7 +53,10 @@ export default (new Optimizer({ delete clonedConfig.preset; const htmlNanoConfig = { + // Inline - - -

Hello, World!

- - -``` +* [Building a webapp with Parcel](https://v2.parceljs.org/getting-started/webapp/) +* [Building a library with Parcel](https://v2.parceljs.org/getting-started/library/) +* [Migrating from Parcel v1](https://v2.parceljs.org/getting-started/migration/) ## Documentation - - - - -- [Introduction](#introduction) -- [Parcel CLI](#parcel-cli) - - [CLI Args & Flags](#cli-args--flags) - - [`parcel serve`](#parcel-serve) - - [`parcel watch`](#parcel-watch) - - [`parcel build`](#parcel-build) - - [`[...entries]`](#entries) - - [`--target [name]`](#--target-name) - - [`--open, -o [browser]`](#--open--o-browser) - - [`--host `](#--host-host) - - [`--port , -p`](#--port-port--p) - - [`--https`](#--https) - - [`--cert `](#--cert-path) - - [`--key `](#--key-path) - - [`--dist-dir
`](#--dist-dir-dir) - - [`--cache-dir `, `--no-cache`](#--cache-dir-dir---no-cache) - - [`--config `](#--config-path) - - [`--hot`, `--no-hot`](#--hot---no-hot) - - [`--hot-host `](#--hot-host-hostname) - - [`--hot-port `](#--hot-port-port) - - [`--[no-]source-maps`](#--no-source-maps) - - [`--autoinstall [npm/yarn], --no-autoinstall`](#--autoinstall-npmyarn---no-autoinstall) - - [`--log-level `](#--log-level-level) - - [`--version, -v, -V`](#--version--v--v) - - [`--help, -h`](#--help--h) -- [Parcel Config](#parcel-config) - - [Configuring external tools](#configuring-external-tools) - - [Configuring Parcel](#configuring-parcel) - - [`package.json`](#packagejson) - - [`package.json#name`](#packagejsonname) - - [`package.json#version`](#packagejsonversion) - - [`package.json#main`](#packagejsonmain) - - [`package.json#module`](#packagejsonmodule) - - [`package.json#browser`](#packagejsonbrowser) - - [`package.json#source`](#packagejsonsource) - - [`package.json#browserslist`](#packagejsonbrowserslist) - - [`package.json#engines`](#packagejsonengines) - - [`package.json#targets`](#packagejsontargets) - - [`package.json#alias`](#packagejsonalias) - - [`.parcelrc`](#parcelrc) - - [Glob maps in `.parcelrc`](#glob-maps-in-parcelrc) - - [`.parcelrc#extends`](#parcelrcextends) - - [`.parcelrc#resolvers`](#parcelrcresolvers) - - [`.parcelrc#transformers`](#parcelrctransformers) - - [`.parcelrc#bundler`](#parcelrcbundler) - - [`.parcelrc#namers`](#parcelrcnamers) - - [`.parcelrc#runtimes`](#parcelrcruntimes) - - [`.parcelrc#packagers`](#parcelrcpackagers) - - [`.parcelrc#optimizers`](#parcelrcoptimizers) - - [`.parcelrc#reporters`](#parcelrcreporters) - - [`.parcelrc#validators`](#parcelrcvalidators) -- [Parcel Architecture](#parcel-architecture) - - [Phases of Parcel](#phases-of-parcel) - - [Asset Graph](#asset-graph) - - [Bundles](#bundles) - - [Sources](#sources) - - [Targets](#targets) - - [Target Configuration](#target-configuration) - - [Environments](#environments) - - [Caching](#caching) -- [Asset Resolution](#asset-resolution) - - [Local Paths](#local-paths) - - [Package Paths](#package-paths) - - [URLs](#urls) - - [Tilde Paths](#tilde-paths) - - [Aliases](#aliases) -- [Plugins](#plugins) - - [Resolvers](#resolvers) - - [Transformers](#transformers) - - [Bundlers](#bundlers) - - [Namers](#namers) - - [Runtimes](#runtimes) - - [Packagers](#packagers) - - [Optimizers](#optimizers) - - [Reporters](#reporters) - - [Validators](#validators) -- [Creating Plugins](#creating-plugins) - - [Naming](#naming) - - [Versioning](#versioning) - - [Engines](#engines) -- [Plugin APIs](#plugin-apis) - - [Resolvers](#resolvers-1) - - [Transformers](#transformers-1) - - [Bundler](#bundler) - - [Namers](#namers-1) - - [Runtimes](#runtimes-1) - - [Packagers](#packagers-1) - - [Optimizers](#optimizers-1) - - [Reporters](#reporters-1) - - [Validators](#validators-1) - - - -## Introduction - -Parcel is a compiler for all your code, regardless of the language or toolchain. - -Parcel takes all of your files and dependencies, transforms them, and merges -them together into a smaller set of output files that can be used to run your -code. - -Parcel supports many different languages and file types out of the box, from -web technologies like HTML, CSS, and JavaScript, to lower level languages like -Rust, and anything that compiles to WebAssembly (WASM), to assets like images, -fonts, videos, and more. - -Parcel makes your code portable. You can build your code for different -environments, for the web for your server, or for an app. You can even build -multiple targets at once and have them live update as you make changes. - -Parcel is fast and predictable. It compiles all of your files in isolation in -parallel inside workers, caching all of them as it goes along. Caches are -stable across machines and are only affected by the files and configs within -your project (unless you want to pass specific environment variables). - -## Parcel CLI - -The Parcel CLI is built into the main `parcel` package. While you can install -it globally and run it, it is much better to install it locally into your -project as a dev dependency. - -```sh -yarn add --dev parcel@next -``` - -You should also add some "scripts" to your `package.json` to run it easier. - -```json -{ - "name": "my-project", - "scripts": { - "build": "parcel build index.html", - "start": "parcel serve index.html" - }, - "devDependencies": { - "parcel": "latest" - } -} -``` - -Now you can run `yarn build` to bundle your project for production and -`yarn start` to dev on your project. - -### CLI Args & Flags - -Usage: - -```sh -$ parcel [command] [...entries] [...flags] -``` - -#### `parcel serve` - -Serve assets on a local server. - -#### `parcel watch` - -Watch and rebuild code on file changes. - -#### `parcel build` - -Build code once, in production mode. - -#### `[...entries]` - -Entry files to start bundling, these will be preserved as entry points in the -output. Defaults to `package.json#source`, falling back to `src/index.*` or -`index.*`. See [#Sources](#sources). - -#### `--target [name]` - -Specifies a specific target to build. If unspecified, Parcel builds all -targets specified in package.json. See [#Targets](#targets). - -#### `--open, -o [browser]` - -Open your local server in a browser. You can optionally pass the name of the -browser you want to open, otherwise it will use your default browser. - -#### `--host ` - -Configure the host to serve assets on. The default is to listen on all interfaces. - -#### `--port , -p` - -Configure the port to serve assets on. Alternatively you can use the `$PORT` -environment variable. - -#### `--https` - -This will generate a local certificate (which will be untrusted by your -browser, you'll need to approve it) and serve your assets over `https://` - -##### `--cert ` - -Specify the filepath to your SSL certificate when using `--https`. - -##### `--key ` - -Specify the filepath to your SSL key when using `--https`. - -#### `--dist-dir ` - -Configure the directory where compiled assets are output. Default is `./dist`. - -#### `--cache-dir `, `--no-cache` - -Configure the cache directory with `--cache ` or disable it altogether -with `--no-cache`. - -#### `--config ` -specify which config to use. can be a path or a package name. -`--config ../.myparcelrc` or `--config @parcel/config-default` - -#### `--hot`, `--no-hot` - -Turn hot reloading on or off. - -##### `--hot-host ` - -Configure the hot reloading hostname. - -##### `--hot-port ` - -Configure the hot reloading port. - -#### `--[no-]source-maps` - -Turn source maps on or off. Source maps are turned on by default. - -#### `--autoinstall [npm/yarn], --no-autoinstall` - -When enabled, whenever Parcel discovers a dependency that isn't installed it -will attempt to install it with either npm or Yarn (defaults to npm unless a -`yarn.lock` exists). - -#### `--log-level ` - -Set the log level, either either "none", "error", "warn", "info", or "verbose". -The default is "info". - -#### `--version, -v, -V` - -Return the current version of Parcel. - -#### `--help, -h` - -Get help with the CLI. - -## Parcel Config - -Parcel has always and will always work out of the box for many projects with -zero configuration. It should always be extremely simple to get started. But if -you do want more control, we give you the tools to do so. - -### Configuring external tools - -A huge part of what Parcel does is run other tools over your code. Instead of -pulling all that configuration into Parcel, we make use of their own -configuration systems. So if you're using Babel, you should just use `.babelrc` -files to configure it. - -When we do need to introduce config, we create tool specific config files in -order to do so. - -### Configuring Parcel - -When you do need to configure Parcel, it will be in one of 3 places. - -- If you need to configure the CLI, it will be a CLI flag -- If you need to configure your package, it will be in the `package.json` -- If you need to configure something with your files or the Parcel asset - pipeline, it will be in `.parcelrc` - -### `package.json` - -[todo] - -```json -{ - "name": "foo", - "main": "dist/main/index.js", - "module": "dist/module/index.js", - "browser": "dist/browser/index.js", - "browserslist": ["> 1%", "not dead"], - "engines": { - "node": ">=4.x" - }, - "source": "src/index.js", - "targets": { - "main": { - "engines": { - "node": ">=4.x" - } - }, - "module": { - "engines": { - "node": ">=8.x" - } - }, - "browser": { - "engines": { - "browsers": ["> 1%", "not dead"] - } - } - }, - "alias": { - "react": "preact-compat", - "react-dom": "preact-compat" - } -} -``` - -#### `package.json#name` - -**(Required)** The name of the package is always required in order to be -considered a valid `package.json`. - -```json -{ - "name": "my-package" -} -``` - -#### `package.json#version` - -**(Required)** All packages inside `node_modules` must have a `package.json#version`. - -```json -{ - "version": "1.0.0" -} -``` - -#### `package.json#main` - -This is the "main" target's entry point for the package, by default in library mode (doesn't bundle dependencies). - -```json -{ - "main": "dist/main/index.js" -} -``` - -See [Targets](#targets) - -#### `package.json#module` - -This is the "module" target's entry point for the package, by default in library mode (doesn't bundle dependencies). - -```json -{ - "module": "dist/module/index.js" -} -``` - -See [Targets](#targets) - -#### `package.json#browser` - -This is the "browser" target's entry point for the package, by default in library mode (doesn't bundle dependencies). - -```json -{ - "browser": "dist/browser/index.js" -} -``` - -See [Targets](#targets) - -#### `package.json#source` - -Specify the entry points for your source code which gets mapped to your -targets. - -```json -{ - "source": "src/index.js", - "source": ["src/index.js", "src/index.html"] -} -``` - -See [Sources](#sources) - -#### `package.json#browserslist` - -As specified by Browserslist, this field is for specifying which transformers -should be applied to browser bundles. - -```json -{ - "browserslist": ["> 0.2%", "not dead"] -} -``` - -See [Environments](#environments) - -#### `package.json#engines` - -Specify what versions of what engines you want to support. - -```json -{ - "engines": { - "node": ">=4.x", - "electron": ">=2.x" - } -} -``` - -See [Environments](#environments) - -#### `package.json#targets` - -Configuration for individual targets. - -```json -{ - "targets": { - "main": { - "engines": { - "node": ">=4.x", - "electron": ">=2.x" - }, - }, - "browser": { - "engines": { - "browsers": ["> 1%", "not dead"] - } - } - } -} -``` - -See [Targets](#targets) - -#### `package.json#alias` - -Aliases asset names/paths to other assets. - -```json -{ - "alias": { - "react": "preact-compat", - "react-dom": "preact-compat" - } -} -``` - -See [Aliases](#aliases) - -### `.parcelrc` - -Your `.parcelrc` file will likely contain just a few fields (if you have one at -all), but here's an example of a `.parcelrc` file that contains every field: - -```json -{ - "extends": ["@parcel/config-default"], - "resolvers": ["@parcel/resolver-default"], - "transformers": { - "*.vue": ["@parcel/transformer-vue"], - "*.scss": ["@parcel/transformer-sass"], - "*.js": ["@parcel/transformer-babel"], - "*.css": ["@parcel/transformer-postcss"], - "*.html": ["@parcel/transformer-posthtml"] - }, - "bundler": "@parcel/bundler-default", - "namers": ["@parcel/namer-default"], - "runtimes": ["@parcel/runtime-js", "@parcel/runtime-browser-hmr"], - "packagers": { - "*.js": "@parcel/packager-js", - "*.css": "@parcel/packager-css", - "*.html": "@parcel/packager-html", - "*.wasm": "@parcel/packager-wasm", - "*.raw": "@parcel/packager-raw" - }, - "optimizers": { - "*.js": ["@parcel/optimizer-uglify"], - "*.css": ["@parcel/optimizer-cssnano"], - "*.html": ["@parcel/optimizer-htmlnano"], - "*.{png,jpg,jpeg,svg,...}": ["@parcel/optimizer-imagemin"] - }, - "reporters": ["@parcel/reporter-cli"] -} -``` - -#### Glob maps in `.parcelrc` - -Many config properties like `transformers` or `packagers` use objects as maps of -globs to package names. While objects in JSON are technically unordered, Parcel -does use the order to give globs priority when a file name is being tested -against them. - -```json -{ - "transformers": { - "icons/*.svg": ["highest-priority"], - "*.svg": ["lowest-priority"] - } -} -``` - -Here if we are trying to find a transform for the file `icons/home.svg`, we'll -work our way down the globs until we find a match, which would be -`icons/*.svg`, we never reach `*.svg`. - -#### `.parcelrc#extends` - -`extends` can either be a string or an array of strings that specify base -configs to extend. That base configuration can be the path to another -`.parcelrc` file or the name of a Parcel config package. - -```json -{ - "extends": "@parcel/config-default", - "extends": "../.parcelrc", - "extends": ["@parcel/config-default", "@company/parcel-config"] -} -``` - -When extending a config, Parcel does a shallow merge of the two configs. - -#### `.parcelrc#resolvers` - -`resolvers` is an array of strings that specifies the name of a Parcel resolver -package. - -```json -{ - "resolvers": ["@parcel/resolver-default"] -} -``` - -See [Resolvers](#resolvers) - -#### `.parcelrc#transformers` - -`transformers` is an object map of globs to arrays of Parcel transform packages. - -```json -{ - "transformers": { - "*.js": ["@parcel/transformer-babel"] - } -} -``` - -See [Transformers](#transformers) - -#### `.parcelrc#bundler` - -`bundler` is a string that specifies the name of a Parcel bundler package. - -```json -{ - "bundler": "@parcel/bundler-default" -} -``` - -See [Bundlers](#bundlers) - -#### `.parcelrc#namers` - -`namers` is an array of Parcel namer packages. - -```json -{ - "namers": ["@parcel/namer-default"] -} -``` - -See [Namers](#namers) - -#### `.parcelrc#runtimes` - -`runtimes` is an array of Parcel runtime packages. - -```json -{ - "runtimes": ["@parcel/runtime-js", "@parcel/runtime-browser-hmr"], -} -``` - -See [Runtimes](#runtimes) - -#### `.parcelrc#packagers` - -`packagers` is an object map of globs to Parcel packager packages. - -```json -{ - "packagers": { - "*.js": ["@parcel/packager-js"] - } -} -``` - -See [Packagers](#packagers) - -#### `.parcelrc#optimizers` - -`optimizers` is an object map of globs to arrays of Parcel optimizer packages. - -```json -{ - "optimizers": { - "*.js": ["@parcel/optimizer-uglify"] - } -} -``` - -See [Optimizers](#optimizers) - -#### `.parcelrc#reporters` - -`reporters` is an array of Parcel reporter packages. - -```json -{ - "reporters": ["@parcel/reporter-detailed"] -} -``` - -See [Reporters](#reporters). - -#### `.parcelrc#validators` - -`validators` is an object map of globs to arrays of Parcel validator packages. - -```json - - "validators": { - "*.ts": ["@parcel/validator-typescript"] - } -} -``` - -See [Validators](#validators). - -## Parcel Architecture - -Even if you aren't doing anything that complex, if you are going to use Parcel -a lot it makes sense to take some time and understand how it works. - -### Phases of Parcel - -At a high level Parcel runs through several phases: - -- Resolving -- Transforming -- Bundling -- Packaging -- Optimizing -- (Validating) - -The **resolving** and **transforming** phases work together in parallel to -build a graph of all your assets. - -This asset graph gets translated into bundles in the **bundling** phase. - -Then the **packaging** phase takes the assets in the calculated bundles and -merges them together into files each containing an entire bundle. - -Finally, in the **optimizing** phase, Parcel takes these bundles files and runs -them through optimizing transforms. - -### Asset Graph - -During the resolving and transforming phases, Parcel discovers all the assets -in your app or program. Every asset can have its own dependencies on other -assets which Parcel will pull in. - -The data structure that represents all of these assets and their dependencies -on one another is known as "The Asset Graph". - -| Asset Name | Dependencies | -| ------------ | ------------------- | -| `index.html` | `app.css`, `app.js` | -| `app.css` | N/A | -| `app.js` | `navbar.js` | -| `navbar.js` | etc. | - -### Bundles - -Once Parcel has built the entire Asset Graph, it begins turning it into -"bundles". These bundles are groupings of assets that get placed together in a -single file. - -Bundles will (generally) contain only assets in the same language: - -| Bundle Name | Assets | -| ------------ | --------------------------- | -| `index.html` | `index.html` | -| `app.css` | `app.css` | -| `app.js` | `app.js`, `navbar.js`, etc. | - -Some assets are considered "entry" points into your app, and will stay as -separate bundles. For example, if your `index.html` file links to an -`about.html` file, they won't be merged together. - -| Bundle Name | Assets | Entry URL | -| ------------ | ------------ | --------- | -| `index.html` | `index.html` | `/` | -| `about.html` | `about.html` | `/about` | - -### Sources - -"Sources" are the files that contain the source code to your app before being -compiled by Parcel. - -Parcel discovers these sources by following their dependencies on one another -starting at your "entries". - -These entries will be one of: - -1. `$ parcel <...entries>` -2. `~/package.json#source` -3. `./src/index.*` -4. `./index.*` - -From there, everything those assets depend on will be considered a "source" in -Parcel. - -### Targets - -When Parcel runs, it can build your asset graph in multiple different ways -simultaneously. These are called "targets". - -For example, you could have a "modern" target that _targets_ newer browsers -and a "legacy" target for older browsers. - -Sources get mapped to targets, - -#### Target Configuration - -In the most explicit form, targets are configured via the -`package.json#targets` field. - -```js -{ - "app": "dist/browser/index.js", - "appModern": "dist/browserModern/index.js", - "targets": { - "app": { /* target env */ }, - "appModern": { /* target env */ } - } -} -``` - -Each target has a name which corresponds to a top-level `package.json` field -such as `package.json#main` or `package.json#browser` which specify the primary -entry point for that target. - -Inside each of those targets contains the target's environment configuration: - -| Option | Possible values | Description | -| -------------------- | --------------- | ----------- | -| `context` | `'node' \| 'browser' \| 'web-worker' \| 'electron-main' \| 'electron-renderer'` | Where the bundle should run | -| `includeNodeModules` | `boolean \| [String]` | Whether to bundle all/none/some `node_module` dependency | -| `outputFormat` | `'global' \| 'esmodule' \| 'commonjs'` | Which type of imports/exports should be emitted| -| `publicUrl` | `string` | The public url of the bundle at runtime | -| `isLibrary` | `boolean` | Library as in 'npm library' | -| `sourceMap` | `boolean \| {inlineSources?: boolean, sourceRoot?: string, inline?: boolean}` | Enable/disable sourcemap and set options -| `engines` | Engines | Same as `package.json#engines` | - - -However, a lot of the normal configuration you might want will already have -defaults provided for you: - -```cs -targets = { - main: { - engines: { - node: value("package.json#engines.node"), - browsers: unless exists("package.json#browser") then value("package.json#browserlist") - }, - isLibrary: true - }, - module: { - engines: { - node: value("package.json#engines.node"), - browsers: unless exists("package.json#browser") then value("package.json#browserlist") - }, - isLibrary: true - }, - browser: { - engines: { - browsers: value("package.json#browserslist") - }, - isLibrary: true - }, - ...value("package.json#targets"), -} -``` - -### Environments - -Environments tell Parcel how to transform and bundle each asset. They tell -Parcel if an asset is going to be run in a browser or in NodeJS/Electron. - -They also tell Parcel's transform plugins how they should run. They tell -[Babel](http://babeljs.io/docs/en/babel-preset-env#targetsbrowsers) or -[Autoprefixer](https://github.com/postcss/autoprefixer#browsers) what browsers -your asset is targetting. - -You can configure environments through your targets. - -```json -{ - "targets": { - "main": { - "engines": { - "node": ">=4.x", - "electron": ">=2.x", - "browsers": ["> 1%", "not dead"] - } - } - } -} -``` - -When one asset depends on another, the environment is inherited from its -parent. But how you depend on the asset can change some properties of that -environment. - -For example: - -```js -navigator.serviceWorker.register('./service-worker.js'); -``` - -```js -let childEnvironment = {...parentEnvironment, browserContext: 'service-worker'}; -``` - -### Caching - -Parcel will create a `/.parcel-cache` directory. It will be filled with -directories with two letters, which are the start of a hash which is finished -by the names of the JSON files inside. - -``` -/.parcel-cache - /00/ - 213debd8ddd45819b79a3a974ed487.json - 40ae9b581afc53841307a4b3c2463d.json - 63a9dd58fc1e8f8bb819759ea9793c.json - ... - /01/ - /../ - /zy/ - /zz/ -``` - -It follows this weird structure in order to avoid too many files being created -in a single directory, which degrades file system performance. - -## Asset Resolution - -Parcel follows the Node module resolution algorithm with a few additions. - -### Local Paths - -``` -./path/to/file -./path/to/file.js -``` - -These follow the [Node module resolution algorithm](https://nodejs.org/api/modules.html#modules_all_together). - -### Package Paths - -``` -preact -lodash/cloneDeep -@sindresorhus/is -``` - -These follow the [Node module resolution algorithm](https://nodejs.org/api/modules.html#modules_all_together). - -### URLs - -``` -https://unpkg.com/preact@8.2.9/dist/preact.min.js -``` - -Parcel by default will ignore URL dependencies, other resolver plugins may -choose to do something with them. - -### Tilde Paths - -``` -~/src/file.js -``` - -Only when used outside of `node_modules` directories, the `~` is replaced by an -absolute path to the closest package root: - -```sh -/path/to/app #(/package.json) -``` - -To form a path that looks like: - -``` -/path/to/app/src/file.js -``` - -Then it follows the [Node module resolution algorithm](https://nodejs.org/api/modules.html#modules_all_together). - -### Aliases - -Aliases come in two forms: - -1. Package Aliases: `react -> preact` -2. File/Directory Aliases: `utils` -> `./src/utils` - -```json -{ - "name": "my-project", - "alias": { - "react": "preact-compat", - "react-dom": "preact-compat", - "utils": "./src/utils", - "components": "./src/components" - } -} -``` - -There are a couple of rules: - -1. Aliases will only be respected when specified outside of `node_modules`. -2. Aliases specified outside of `node_modules` will affect assets inside of `node_modules`. -3. Aliases cannot build off of other aliases. -4. Only one alias will be applied at a time. -5. Aliases must be valid npm package names. - -## Plugins - -### Resolvers - -When one asset depends on another through an asset specifier, the resolver is -responsible for determining what asset is being requested. - -See [Asset Resolution](#asset-resolution) for more details. - -```json -{ - "resolvers": ["@parcel/resolver-v1"] -} -``` - -**Official Resolvers:** - -- `@parcel/resolver-v1` - -### Transformers - -transformers _transform_ single assets as they are discovered and added to the -asset graph. They mostly call out to different compilers and preprocessors. - -```json -{ - "transformers": { - "*.js": ["@parcel/transformer-babel"] - } -} -``` - -**Official Transformers:** - -- `@parcel/transformer-babel` -- `@parcel/transformer-coffeescript` -- `@parcel/transformer-glsl` -- `@parcel/transformer-graphql` -- `@parcel/transformer-json` -- `@parcel/transformer-json5` -- `@parcel/transformer-less` -- `@parcel/transformer-posthtml` -- `@parcel/transformer-postcss` -- `@parcel/transformer-pug` -- `@parcel/transformer-raw` -- `@parcel/transformer-reason` -- `@parcel/transformer-rust` -- `@parcel/transformer-stylus` -- `@parcel/transformer-toml` -- `@parcel/transformer-typescript` -- `@parcel/transformer-vue` -- `@parcel/transformer-wasm` -- `@parcel/transformer-webmanifest` -- `@parcel/transformer-yaml` -- `@parcel/transformer-elm` -- ... - -### Bundlers - -Bundlers accept the entire asset graph and turn it into sets of bundles. - -```json -{ - "bundler": "@parcel/bundler-default" -} -``` - -**Official Bundlers:** - -- `@parcel/bundler-default` - -### Namers - -Namers accept a bundle and return a filename for that bundle. - -```json -{ - "namers": ["@parcel/namer-default"] -} -``` - -**Official Namers:** - -- `@parcel/namer-default` - -### Runtimes - -Runtimes get called after the bundler phase and generate an asset which gets -included in the final bundle. - -```json -{ - "runtimes": ["@parcel/runtime-js", "@parcel/runtime-browser-hmr"] -} -``` - -**Official Runtimes:** - -- `@parcel/runtime-js` -- `@parcel/runtime-hmr` - -### Packagers - -Packagers determine how to merge different asset types into a single bundle. - -```json -{ - "packagers": { - "*.css": "@parcel/packager-css" - } -} -``` - -**Official Packagers:** - -- `@parcel/packager-html` -- `@parcel/packager-js` -- `@parcel/packager-css` -- `@parcel/packager-wasm` -- `@parcel/packager-raw` - -### Optimizers - -Optimizers are similar to transformers, but they accept a bundle instead -of a single asset. - -```json -{ - "optimizers": { - "*.js": ["@parcel/optimizer-terser"], - "*.css": ["@parcel/optimizer-csso"] - } -} -``` - -**Official Optimizers:** - -- `@parcel/packager-terser` -- `@parcel/packager-csso` -- [todo] - -### Reporters - -Reporters receive events as they happen and can either use the Parcel logger to -output to stdout/stderr or they can return assets to be generated on the file -system. - -```json -{ - "reporters": ["@parcel/reporter-cli", "@parcel/reporter-dev-server"] -} -``` - -**Official Reporters:** - -- `@parcel/reporter-cli` -- `@parcel/reporter-dev-server` -- [todo] - -### Validators - -Validators emit errors for source code after a build is completed. -For example, type checking and linting. - -```json -{ - "validators": { - "*.ts": ["@parcel/validator-typescript"] - } -} -``` - -**Official Validators:** - -- `@parcel/validator-typescript` -- `@parcel/validator-eslint` -- [todo] - -## Creating Plugins - -### Naming - -All plugins must follow a naming system: - -| | Official package | Community packages | Private company/scoped team packages | -| ---------- | -------------------------- | ------------------------- | ------------------------------------ | -| Configs | `@parcel/config-{name}` | `parcel-config-{name}` | `@scope/parcel-config[-{name}]` | -| Resolvers | `@parcel/resolver-{name}` | `parcel-resolver-{name}` | `@scope/parcel-resolver[-{name}]` | -| Transformers | `@parcel/transformer-{name}` | `parcel-transformer-{name}` | `@scope/parcel-transformer[-{name}]` | -| Bundlers | `@parcel/bundler-{name}` | `parcel-bundler-{name}` | `@scope/parcel-bundler[-{name}]` | -| Namers | `@parcel/namer-{name}` | `parcel-namer-{name}` | `@scope/parcel-namer[-{name}]` | -| Runtimes | `@parcel/runtime-{name}` | `parcel-runtime-{name}` | `@scope/parcel-runtime[-{name}]` | -| Packagers | `@parcel/packager-{name}` | `parcel-packager-{name}` | `@scope/parcel-packager[-{name}]` | -| Optimizers | `@parcel/optimizer-{name}` | `parcel-optimizer-{name}` | `@scope/parcel-optimizer[-{name}]` | -| Reporters | `@parcel/reporter-{name}` | `parcel-reporter-{name}` | `@scope/parcel-reporter[-{name}]` | -| Validators | `@parcel/validator-{name}` | `parcel-validator-{name}`| `@scope/parcel-validator[-{name}]` | - -The `{name}` must be descriptive and directly related to the purpose of the -package. Someone should be able to have an idea of what the package does simply -by reading the name in a `.parcelrc` or `package.json#devDependencies`. - -``` -parcel-transformer-posthtml -parcel-packager-wasm -parcel-reporter-graph-visualizer -``` - -If your plugin adds support for a specific tool, please use the name of the -tool. - -``` -parcel-transformer-es6 (bad) -parcel-transformer-babel (good) -``` - -If your plugin is a reimplementation of something that exists, try naming it -something that explains why it is a separate: - -``` -parcel-transformer-better-typescript (bad) -parcel-transformer-typescript-server (good) -``` - -We ask that community members work together and when forks happen to try and -resolve them. If someone made a better version of your plugin, please consider -giving the better package name over, have them make a major version bump, and -redirect people to the new tool. - -### Versioning - -You must follow semantic versioning (to the best of your ability). No, it's not -the perfect system, but it's the best one we have and people do depend on it. - -If plugin authors intentionally don't follow semantic versioning, Parcel may -start warning users that they should be locking down the version number for -your plugin. - -> Warning: The plugin "parcel-transform-typescript" does not follow semantic -> versioning. You should lock the version range down so your code does not -> break when they make changes. Please upvote this issue to encourage them to -> follow semver: https://github.com/user/parcel-transform-typescript/issues/43 - -### Engines - -You must specify a `package.json#engines.parcel` field with the version range -of Parcel that your plugin supports: - -```json -{ - "name": "parcel-transform-imagemin", - "engines": { - "parcel": "2.x" - } -} -``` - -If you do not specify this field, Parcel will output a warning: - -``` -Warning: The plugin "parcel-transform-typescript" needs to specify a `package.json#engines.parcel` field with the supported Parcel version range. -``` - -If you do specify the parcel engine field and the user is using an incompatible -version of Parcel, they will see an error: - -``` -Error: The plugin "parcel-transform-typescript" is not compatible with the -current version of Parcel. Requires "2.x" but the current version is "3.1.4" -``` - -Parcel uses node-semver to match version ranges. - -## Plugin APIs - -There are several different types of plugins. They all look very similar, but -are kept separate so we can have strict contracts one what each one is allowed -to do. - -There are some rules that should be followed across every type of plugin: - -- **Stateless** — Avoid any kind of state, it will likely be the source of bugs - for your users. For example, the same transform may exist in multiple - separate workers which are not allowed to communicate with one another, state - will not work as expected. -- **Pure** — Given the same input, a plugin must produce the same output, and - you must not have any observable side effects, or implicit dependencies. - Otherwise Parcel's caching will break and your users will be sad. You should - never have to tell users to delete their caches. - -The plugin APIs all follow a common shape: - -```js -import {NameOfPluginType} from '@parcel/plugin'; - -export default new NameOfPluginType({ - async methodName(opts: JSONObject): Promise { - return result; - } -}); -``` - -They are made up of modules with well-known named exports of async functions -that: - -- Accept a strictly validated JSON-serializable `opts` object. -- Return a strictly validated JSON-serializable `vals` object. - -If something you need is not being passed through `opts`, please come talk to -the Parcel team about it. Avoid trying to get information yourself from other -sources, especially from the file system. - -### Resolvers - -Resolvers get called with an asset request (consisting of a source file path -and the specifier of what is being requested) which it then attempts to -resolve. If the resolver isn't sure how to handle a request, it can also return -`null` and pass it to the next resolver in the chain. - -```js -import {Resolver} from '@parcel/plugin'; - -export default new Resolver({ - async resolve({dependency}) { - // ... - return {filePath} || null; - } -}); -``` - -### Transformers - -Transformers _transform_ single assets as they are discovered and added to the -asset graph. They mostly call out to different compilers and preprocessors. - -```js -import {Transform} from '@parcel/plugin'; - -export default new Transform({ - async parse({asset}) { - // ... - return ast; - }, - - async transform({asset}) { - // ... - return [assets]; - }, - - async generate({asset}) { - // ... - return {code, map}; - } -}); -``` - -### Bundler - -Bundlers accept the entire asset graph and modify it to add bundle nodes that group the assets -into output bundles. - -```js -import {Bundler} from '@parcel/plugin'; - -export default new Bundler({ - async bundle({graph}) { - // ... - }, - - async optimize({graph}) { - // ... - } -}); -``` - -### Namers - -Namers accept a bundle and output a filename for that bundle. - -```js -import {Namer} from '@parcel/plugin'; - -export default new Namer({ - async name({bundle, bundleGraph}) { - // ... - return name; - } -}); -``` - -### Runtimes - -Runtimes accept a bundle and return assets to be inserted into that bundle. - -```js -import {Runtime} from '@parcel/runtime'; - -export default new Runtime({ - async apply({bundle, bundleGraph}) { - // ... - return assets; - } -}); -``` - -### Packagers - -Packagers determine how to merge different asset types into a single bundle. - -```js -import {Packager} from '@parcel/plugin'; - -export default new Packager({ - async package({bundle}) { - // ... - return {contents, map}; - }, -}); -``` - -### Optimizers - -Optimizers are similar to transformers, but they accept a bundle instead -of a single asset. - -```js -import {Optimizer} from '@parcel/plugin'; - -export default new Optimizer({ - async optimize({bundle, contents, map}) { - // ... - return {contents, map}; - } -}); -``` - -### Reporters - -Reporters receive events as they happen and can output to stdout/stderr, -or perform other actions. - -```js -import {Reporter} from '@parcel/plugin'; +Read the docs at https://v2.parceljs.org/docs/. -export default new Reporter({ - async report({ event: { type, ... } }) { - // ... - } -}); -``` +## Community -### Validators +- ❓ Ask questions on [GitHub Discussions](https://github.com/parcel-bundler/parcel/discussions). +- 💬 Join the community on [Discord](https://discord.gg/XSCzqGRuvr). +- 📣 Stay up to date on new features and announcements on [Twitter](https://twitter.com/parceljs). -Validators receive an asset, and can throw errors if that asset is invalid -in some way, e.g. type errors or linting errors. +## Contributors -```js -import {Validator} from '@parcel/plugin'; +This project exists thanks to all the people who contribute. [[Contribute]](CONTRIBUTING.md). +contributors -export default new Validator({ - async validate({asset}) { - // ... - throw error; - } -}); -``` -Some validators (such as `@parcel/validator-typescript`) may wish to maintain a project-wide cache for efficiency. For these cases, it is appropriate to use a different interface where parcel hands _all_ changed files to the validator at the same time: +## Backers -```js -import {Validator} from '@parcel/plugin'; +Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/parcel#backer)] -export default new Validator({ - async validateAll({assets}) { - // ... - throw error; - } -}); -``` + -If your plugin implements `validateAll`, Parcel will make sure to always invoke this method on the same thread (so that your cache state is accessible). +## Sponsors -## License +Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/parcel#sponsor)] -This project is licensed under the MIT License - see the [LICENSE.md](https://github.com/parcel-bundler/parcel/blob/v2/LICENSE) file for details + + + + + + + + + + From 8671ded09fc065938507c5bb512c1f81522a32ae Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Tue, 5 Oct 2021 05:02:37 +0200 Subject: [PATCH 12/68] Don't rename export default declarations when wrapping the asset (#7014) --- .../es6/export-default-class-wrapped/a.js | 3 ++ .../es6/export-default-class-wrapped/b.js | 4 +++ .../es6/export-default-function-wrapped/a.js | 3 ++ .../es6/export-default-function-wrapped/b.js | 4 +++ .../integration-tests/test/scope-hoisting.js | 24 +++++++++++++++ packages/transformers/js/core/src/hoist.rs | 29 +++++++++++++++++-- 6 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/export-default-class-wrapped/a.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/export-default-class-wrapped/b.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/export-default-function-wrapped/a.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/export-default-function-wrapped/b.js diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/export-default-class-wrapped/a.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/export-default-class-wrapped/a.js new file mode 100644 index 00000000000..1c9964afff3 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/export-default-class-wrapped/a.js @@ -0,0 +1,3 @@ +import b from "./b.js"; + +output = b; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/export-default-class-wrapped/b.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/export-default-class-wrapped/b.js new file mode 100644 index 00000000000..3dcde09a416 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/export-default-class-wrapped/b.js @@ -0,0 +1,4 @@ +export default class Log {} +Log.VERSION = 1234; + +sideEffectNoop(module) diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/export-default-function-wrapped/a.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/export-default-function-wrapped/a.js new file mode 100644 index 00000000000..1c9964afff3 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/export-default-function-wrapped/a.js @@ -0,0 +1,3 @@ +import b from "./b.js"; + +output = b; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/export-default-function-wrapped/b.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/export-default-function-wrapped/b.js new file mode 100644 index 00000000000..93804e2c784 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/export-default-function-wrapped/b.js @@ -0,0 +1,4 @@ +export default function log(){} +log.VERSION = 1234; + +sideEffectNoop(module) diff --git a/packages/core/integration-tests/test/scope-hoisting.js b/packages/core/integration-tests/test/scope-hoisting.js index 4a53c269ecd..7c9ffd32854 100644 --- a/packages/core/integration-tests/test/scope-hoisting.js +++ b/packages/core/integration-tests/test/scope-hoisting.js @@ -626,6 +626,30 @@ describe('scope hoisting', function() { assert.deepEqual(output, ['test']); }); + it('should default export classes when wrapped', async function() { + let b = await bundle( + path.join( + __dirname, + '/integration/scope-hoisting/es6/export-default-class-wrapped/a.js', + ), + ); + + let output = await run(b); + assert.strictEqual(output.VERSION, 1234); + }); + + it('should default export functions when wrapped', async function() { + let b = await bundle( + path.join( + __dirname, + '/integration/scope-hoisting/es6/export-default-function-wrapped/a.js', + ), + ); + + let output = await run(b); + assert.strictEqual(output.VERSION, 1234); + }); + it('should default export globals', async function() { let b = await bundle( path.join( diff --git a/packages/transformers/js/core/src/hoist.rs b/packages/transformers/js/core/src/hoist.rs index e114daaead7..f8d7bca3876 100644 --- a/packages/transformers/js/core/src/hoist.rs +++ b/packages/transformers/js/core/src/hoist.rs @@ -308,12 +308,20 @@ impl<'a> Fold for Hoist<'a> { ModuleDecl::ExportDefaultDecl(export) => { let decl = match export.decl { DefaultDecl::Class(class) => Decl::Class(ClassDecl { - ident: self.get_export_ident(DUMMY_SP, &"default".into()), + ident: if self.collect.should_wrap && class.ident.is_some() { + class.ident.unwrap() + } else { + self.get_export_ident(DUMMY_SP, &"default".into()) + }, declare: false, class: class.class.fold_with(self), }), DefaultDecl::Fn(func) => Decl::Fn(FnDecl { - ident: self.get_export_ident(DUMMY_SP, &"default".into()), + ident: if self.collect.should_wrap && func.ident.is_some() { + func.ident.unwrap() + } else { + self.get_export_ident(DUMMY_SP, &"default".into()) + }, declare: false, function: func.function.fold_with(self), }), @@ -3065,6 +3073,23 @@ mod tests { "#} ); + let (_collect, code, hoist) = parse( + r#" + console.log(module); + export default class X {} + "#, + ); + + assert!(hoist.should_wrap); + assert_eq!( + code, + indoc! {r#" + console.log(module); + class X { + } + "#} + ); + let (_collect, code, _hoist) = parse( r#" export var x = 2, y = 3; From 198aebff2417911179e17fba1c7eae6f56a2bc38 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Tue, 5 Oct 2021 05:04:11 +0200 Subject: [PATCH 13/68] Handle module.require with scope-hoisting (#7012) --- .../scope-hoisting/commonjs/module-require/a.js | 1 + .../scope-hoisting/commonjs/module-require/b.js | 1 + .../scope-hoisting/commonjs/module-require/yarn.lock | 0 .../core/integration-tests/test/scope-hoisting.js | 12 ++++++++++++ .../transformers/js/core/src/dependency_collector.rs | 4 +++- packages/transformers/js/core/src/hoist.rs | 4 ++++ packages/transformers/js/core/src/utils.rs | 11 +++++++++++ 7 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/commonjs/module-require/a.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/commonjs/module-require/b.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/commonjs/module-require/yarn.lock diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/commonjs/module-require/a.js b/packages/core/integration-tests/test/integration/scope-hoisting/commonjs/module-require/a.js new file mode 100644 index 00000000000..5455e45f4a7 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/commonjs/module-require/a.js @@ -0,0 +1 @@ +output = module.require("./b.js"); diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/commonjs/module-require/b.js b/packages/core/integration-tests/test/integration/scope-hoisting/commonjs/module-require/b.js new file mode 100644 index 00000000000..c04ea430ae1 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/commonjs/module-require/b.js @@ -0,0 +1 @@ +module.exports.b = 2; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/commonjs/module-require/yarn.lock b/packages/core/integration-tests/test/integration/scope-hoisting/commonjs/module-require/yarn.lock new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/core/integration-tests/test/scope-hoisting.js b/packages/core/integration-tests/test/scope-hoisting.js index 7c9ffd32854..7b0e9a9b153 100644 --- a/packages/core/integration-tests/test/scope-hoisting.js +++ b/packages/core/integration-tests/test/scope-hoisting.js @@ -4395,6 +4395,18 @@ describe('scope hoisting', function() { assert.strictEqual(output, 'Say other'); }); + it('supports using module.require like require', async function() { + let b = await bundle( + path.join( + __dirname, + '/integration/scope-hoisting/commonjs/module-require/a.js', + ), + ); + + let output = await run(b); + assert.strictEqual(output.b, 2); + }); + it('support url imports in wrapped modules with interop', async function() { let b = await bundle( path.join( diff --git a/packages/transformers/js/core/src/dependency_collector.rs b/packages/transformers/js/core/src/dependency_collector.rs index a8347af897d..dccb844d581 100644 --- a/packages/transformers/js/core/src/dependency_collector.rs +++ b/packages/transformers/js/core/src/dependency_collector.rs @@ -429,7 +429,9 @@ impl<'a> Fold for DependencyCollector<'a> { } } Member(member) => { - if self.config.is_browser + if match_member_expr(member, vec!["module", "require"], self.decls) { + DependencyKind::Require + } else if self.config.is_browser && match_member_expr( member, vec!["navigator", "serviceWorker", "register"], diff --git a/packages/transformers/js/core/src/hoist.rs b/packages/transformers/js/core/src/hoist.rs index f8d7bca3876..8177ea42185 100644 --- a/packages/transformers/js/core/src/hoist.rs +++ b/packages/transformers/js/core/src/hoist.rs @@ -1400,6 +1400,10 @@ impl Visit for Collect { return; } + if match_member_expr(node, vec!["module", "require"], &self.decls) { + return; + } + let is_static = match &*node.prop { Expr::Ident(_) => !node.computed, Expr::Lit(Lit::Str(_)) => true, diff --git a/packages/transformers/js/core/src/utils.rs b/packages/transformers/js/core/src/utils.rs index 34d22c05017..94938bc759c 100644 --- a/packages/transformers/js/core/src/utils.rs +++ b/packages/transformers/js/core/src/utils.rs @@ -114,6 +114,17 @@ pub fn match_require( None } + Expr::Member(member) => { + if match_member_expr(member, vec!["module", "require"], decls) { + if let Some(arg) = call.args.get(0) { + if let Expr::Lit(Lit::Str(str_)) = &*arg.expr { + return Some(str_.value.clone()); + } + } + } + + None + } _ => None, }, _ => None, From 5c20290d31237fccf41e11ed5fdc167f4c41f98e Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Tue, 5 Oct 2021 08:51:52 -0700 Subject: [PATCH 14/68] Fix hash collision in generated variable names (#7017) --- packages/transformers/js/core/src/hoist.rs | 194 ++++++++++----------- 1 file changed, 97 insertions(+), 97 deletions(-) diff --git a/packages/transformers/js/core/src/hoist.rs b/packages/transformers/js/core/src/hoist.rs index 8177ea42185..b4f06591df9 100644 --- a/packages/transformers/js/core/src/hoist.rs +++ b/packages/transformers/js/core/src/hoist.rs @@ -1,7 +1,7 @@ use serde::{Deserialize, Serialize}; use std::collections::hash_map::DefaultHasher; use std::collections::{HashMap, HashSet}; -use std::hash::{Hash, Hasher}; +use std::hash::Hasher; use swc_atoms::JsWord; use swc_common::{sync::Lrc, Mark, Span, SyntaxContext, DUMMY_SP}; use swc_ecmascript::ast::*; @@ -22,7 +22,7 @@ macro_rules! id { macro_rules! hash { ($str:expr) => {{ let mut hasher = DefaultHasher::new(); - $str.hash(&mut hasher); + hasher.write($str.as_bytes()); hasher.finish() }}; } @@ -559,7 +559,7 @@ impl<'a> Fold for Hoist<'a> { match &**expr { Expr::Ident(ident) => { // import * as y from 'x'; OR const y = require('x'); OR const y = await import('x'); - // y.foo -> $id$import$10b1f2ceae7ab64e$y + // y.foo -> $id$import$d141bba7fdc215a3$y if let Some(Import { source, specifier, @@ -568,7 +568,7 @@ impl<'a> Fold for Hoist<'a> { }) = self.collect.imports.get(&id!(ident)) { // If there are any non-static accesses of the namespace, don't perform any replacement. - // This will be handled in the Ident visitor below, which replaces y -> $id$import$10b1f2ceae7ab64e. + // This will be handled in the Ident visitor below, which replaces y -> $id$import$d141bba7fdc215a3. if specifier == "*" && !self.collect.non_static_access.contains_key(&id!(ident)) && !self.collect.non_const_bindings.contains_key(&id!(ident)) @@ -2537,7 +2537,7 @@ mod tests { let $abc$var$test = { bar: 3 }; - console.log($abc$import$558d6cfb8af8a010$ba02ad2230917043, $abc$var$test.bar); + console.log($abc$import$70a00e0a8474f72a$6a5cdcad01c973fa, $abc$var$test.bar); "#} ); @@ -2552,7 +2552,7 @@ mod tests { code, indoc! {r#" import "abc:other"; - console.log($abc$import$558d6cfb8af8a010$3705fc5f2281438d); + console.log($abc$import$70a00e0a8474f72a$d927737047eb3867); "#} ); @@ -2567,7 +2567,7 @@ mod tests { code, indoc! {r#" import "abc:other"; - console.log($abc$import$558d6cfb8af8a010$9099ad97b570f7c, $abc$import$558d6cfb8af8a010$9099ad97b570f7c.bar); + console.log($abc$import$70a00e0a8474f72a$2e2bcd8739ae039, $abc$import$70a00e0a8474f72a$2e2bcd8739ae039.bar); "#} ); } @@ -2588,8 +2588,8 @@ mod tests { indoc! {r#" import "abc:other"; import "abc:bar"; - console.log($abc$import$558d6cfb8af8a010$9099ad97b570f7c); - console.log($abc$import$3705fc5f2281438d$9099ad97b570f7c); + console.log($abc$import$70a00e0a8474f72a$2e2bcd8739ae039); + console.log($abc$import$d927737047eb3867$2e2bcd8739ae039); "#} ); @@ -2609,10 +2609,10 @@ mod tests { indoc! {r#" import "abc:other"; import "abc:bar"; - console.log($abc$import$558d6cfb8af8a010$9099ad97b570f7c); + console.log($abc$import$70a00e0a8474f72a$2e2bcd8739ae039); import "abc:x"; - console.log($abc$import$10b1f2ceae7ab64e); - console.log($abc$import$3705fc5f2281438d$9099ad97b570f7c); + console.log($abc$import$d141bba7fdc215a3); + console.log($abc$import$d927737047eb3867$2e2bcd8739ae039); "#} ); } @@ -2631,7 +2631,7 @@ mod tests { indoc! {r#" const $abc$var$x = 4; import "abc:other"; - var $abc$require$bar = $abc$import$558d6cfb8af8a010$3705fc5f2281438d; + var $abc$require$bar = $abc$import$70a00e0a8474f72a$d927737047eb3867; const $abc$var$baz = 3; console.log($abc$require$bar); "#} @@ -2650,7 +2650,7 @@ mod tests { const $abc$var$x = 3; import "abc:other"; const $abc$var$bar = 2; - console.log($abc$import$558d6cfb8af8a010$3705fc5f2281438d); + console.log($abc$import$70a00e0a8474f72a$d927737047eb3867); "#} ); } @@ -2668,7 +2668,7 @@ mod tests { code, indoc! {r#" import "abc:other"; - const { foo: $abc$var$foo , ...$abc$var$bar } = $abc$import$558d6cfb8af8a010; + const { foo: $abc$var$foo , ...$abc$var$bar } = $abc$import$70a00e0a8474f72a; console.log($abc$var$foo, $abc$var$bar); "#} ); @@ -2684,7 +2684,7 @@ mod tests { code, indoc! {r#" import "abc:x"; - const { x: { y: $abc$var$z } } = $abc$import$10b1f2ceae7ab64e; + const { x: { y: $abc$var$z } } = $abc$import$d141bba7fdc215a3; console.log($abc$var$z); "#} ); @@ -2700,7 +2700,7 @@ mod tests { code, indoc! {r#" import "abc:other"; - console.log($abc$import$558d6cfb8af8a010[bar]); + console.log($abc$import$70a00e0a8474f72a[bar]); "#} ); @@ -2715,7 +2715,7 @@ mod tests { code, indoc! {r#" import "abc:other"; - console.log($abc$import$558d6cfb8af8a010[bar], $abc$import$558d6cfb8af8a010.baz); + console.log($abc$import$70a00e0a8474f72a[bar], $abc$import$70a00e0a8474f72a.baz); "#} ); } @@ -2741,7 +2741,7 @@ mod tests { code, indoc! {r#" import "abc:other"; - var $abc$require$foo = $abc$import$558d6cfb8af8a010$ba02ad2230917043; + var $abc$require$foo = $abc$import$70a00e0a8474f72a$6a5cdcad01c973fa; console.log($abc$require$foo); "#} ); @@ -2757,7 +2757,7 @@ mod tests { code, indoc! {r#" import "abc:other"; - const $abc$var$foo = $abc$import$558d6cfb8af8a010[bar]; + const $abc$var$foo = $abc$import$70a00e0a8474f72a[bar]; console.log($abc$var$foo); "#} ); @@ -2773,7 +2773,7 @@ mod tests { code, indoc! {r#" import "abc:other"; - const { foo: $abc$var$foo } = $abc$import$558d6cfb8af8a010$ba02ad2230917043; + const { foo: $abc$var$foo } = $abc$import$70a00e0a8474f72a$6a5cdcad01c973fa; console.log($abc$var$foo); "#} ); @@ -2796,7 +2796,7 @@ mod tests { indoc! {r#" import "abc:other"; function $abc$var$x() { - const foo = $abc$import$558d6cfb8af8a010; + const foo = $abc$import$70a00e0a8474f72a; console.log(foo.bar); } import "abc:bar"; @@ -2823,7 +2823,7 @@ mod tests { import "abc:other"; var $abc$var$foo = (function() { if (Date.now() < 0) { - var bar = $abc$import$558d6cfb8af8a010; + var bar = $abc$import$70a00e0a8474f72a; } })(); "#} @@ -2847,7 +2847,7 @@ mod tests { indoc! {r#" import "abc:other"; function $abc$var$x() { - const foo = $abc$import$558d6cfb8af8a010$ba02ad2230917043; + const foo = $abc$import$70a00e0a8474f72a$6a5cdcad01c973fa; console.log(foo); } "#} @@ -2866,7 +2866,7 @@ mod tests { indoc! {r#" import "abc:other"; function $abc$var$x() { - console.log($abc$import$558d6cfb8af8a010$ba02ad2230917043); + console.log($abc$import$70a00e0a8474f72a$6a5cdcad01c973fa); } "#} ); @@ -2885,7 +2885,7 @@ mod tests { indoc! {r#" import "abc:other"; function $abc$var$x() { - const foo = $abc$import$558d6cfb8af8a010[test]; + const foo = $abc$import$70a00e0a8474f72a[test]; console.log(foo); } "#} @@ -2905,7 +2905,7 @@ mod tests { indoc! {r#" import "abc:other"; function $abc$var$x() { - const { foo: foo } = $abc$import$558d6cfb8af8a010; + const { foo: foo } = $abc$import$70a00e0a8474f72a; console.log(foo); } "#} @@ -2922,7 +2922,7 @@ mod tests { indoc! {r#" import "abc:a"; import "abc:b"; - let $abc$var$x = $abc$import$7ac649919d1c80a6 + $abc$import$a91ade93898ecc38; + let $abc$var$x = $abc$import$407448d2b89b1813 + $abc$import$8b22cf2602fb60ce; "#} ); @@ -2937,7 +2937,7 @@ mod tests { indoc! {r#" import "abc:a"; import "abc:b"; - let $abc$var$x = (!$abc$import$7ac649919d1c80a6, $abc$import$a91ade93898ecc38); + let $abc$var$x = (!$abc$import$407448d2b89b1813, $abc$import$8b22cf2602fb60ce); "#} ); @@ -2952,7 +2952,7 @@ mod tests { indoc! {r#" import "abc:a"; import "abc:b"; - let $abc$var$x = $abc$import$7ac649919d1c80a6 || $abc$import$a91ade93898ecc38; + let $abc$var$x = $abc$import$407448d2b89b1813 || $abc$import$8b22cf2602fb60ce; "#} ); @@ -2967,7 +2967,7 @@ mod tests { indoc! {r#" import "abc:a"; import "abc:b"; - let $abc$var$x = condition ? $abc$import$7ac649919d1c80a6 : $abc$import$a91ade93898ecc38; + let $abc$var$x = condition ? $abc$import$407448d2b89b1813 : $abc$import$8b22cf2602fb60ce; "#} ); @@ -2981,7 +2981,7 @@ mod tests { code, indoc! {r#" import "abc:a"; - if (condition) $abc$import$7ac649919d1c80a6; + if (condition) $abc$import$407448d2b89b1813; "#} ); @@ -2995,7 +2995,7 @@ mod tests { code, indoc! {r#" import "abc:y"; - for(let x = $abc$import$57bbd0ca114c72e; x < 5; x++){ + for(let x = $abc$import$4a5767248b18ef41; x < 5; x++){ } "#} ); @@ -3015,8 +3015,8 @@ mod tests { assert_eq!( code, indoc! {r#" - let $abc$export$10b1f2ceae7ab64e = 3; - let $abc$export$57bbd0ca114c72e = 4; + let $abc$export$d141bba7fdc215a3 = 3; + let $abc$export$4a5767248b18ef41 = 4; let $abc$var$z = 6; "#} ); @@ -3030,7 +3030,7 @@ mod tests { assert_eq!( code, indoc! {r#" - var $abc$export$9099ad97b570f7c = 3; + var $abc$export$2e2bcd8739ae039 = 3; "#} ); @@ -3045,7 +3045,7 @@ mod tests { code, indoc! {r#" let $abc$var$x = 3; - var $abc$export$9099ad97b570f7c = $abc$var$x; + var $abc$export$2e2bcd8739ae039 = $abc$var$x; "#} ); @@ -3058,7 +3058,7 @@ mod tests { assert_eq!( code, indoc! {r#" - function $abc$export$9099ad97b570f7c() { + function $abc$export$2e2bcd8739ae039() { } "#} ); @@ -3072,7 +3072,7 @@ mod tests { assert_eq!( code, indoc! {r#" - class $abc$export$9099ad97b570f7c { + class $abc$export$2e2bcd8739ae039 { } "#} ); @@ -3103,7 +3103,7 @@ mod tests { assert_eq!( code, indoc! {r#" - var $abc$export$10b1f2ceae7ab64e = 2, $abc$export$57bbd0ca114c72e = 3; + var $abc$export$d141bba7fdc215a3 = 2, $abc$export$4a5767248b18ef41 = 3; "#} ); @@ -3118,9 +3118,9 @@ mod tests { assert_eq!( code, indoc! {r#" - var { x: $abc$export$10b1f2ceae7ab64e , ...$abc$export$57bbd0ca114c72e } = something; - var [$abc$export$e809c7c5e035fc81, ...$abc$export$51cf687b896afa97] = something; - var { x: $abc$export$10b1f2ceae7ab64e = 3 } = something; + var { x: $abc$export$d141bba7fdc215a3 , ...$abc$export$4a5767248b18ef41 } = something; + var [$abc$export$ffb5f4729a158638, ...$abc$export$9e5f44173e64f162] = something; + var { x: $abc$export$d141bba7fdc215a3 = 3 } = something; "#} ); @@ -3133,7 +3133,7 @@ mod tests { assert_eq!( code, indoc! {r#" - function $abc$export$fdd70aeca3bc8cbb() { + function $abc$export$e0969da9b8fb378d() { } "#} ); @@ -3147,7 +3147,7 @@ mod tests { assert_eq!( code, indoc! {r#" - class $abc$export$785fc6237f113e49 { + class $abc$export$1b16fc9eb974a84d { } "#} ); @@ -3190,8 +3190,8 @@ mod tests { assert_eq!( code, indoc! {r#" - var $abc$export$ba02ad2230917043; - $abc$export$ba02ad2230917043 = 2; + var $abc$export$6a5cdcad01c973fa; + $abc$export$6a5cdcad01c973fa = 2; "#} ); @@ -3204,8 +3204,8 @@ mod tests { assert_eq!( code, indoc! {r#" - var $abc$export$ba02ad2230917043; - $abc$export$ba02ad2230917043 = 2; + var $abc$export$6a5cdcad01c973fa; + $abc$export$6a5cdcad01c973fa = 2; "#} ); @@ -3220,9 +3220,9 @@ mod tests { assert_eq!( code, indoc! {r#" - var $abc$export$ba02ad2230917043; + var $abc$export$6a5cdcad01c973fa; function $abc$var$init() { - $abc$export$ba02ad2230917043 = 2; + $abc$export$6a5cdcad01c973fa = 2; } "#} ); @@ -3236,8 +3236,8 @@ mod tests { assert_eq!( code, indoc! {r#" - var $abc$export$ba02ad2230917043; - $abc$export$ba02ad2230917043 = 2; + var $abc$export$6a5cdcad01c973fa; + $abc$export$6a5cdcad01c973fa = 2; "#} ); @@ -3250,8 +3250,8 @@ mod tests { assert_eq!( code, indoc! {r#" - var $abc$export$ba02ad2230917043; - $abc$export$ba02ad2230917043 = 2; + var $abc$export$6a5cdcad01c973fa; + $abc$export$6a5cdcad01c973fa = 2; "#} ); @@ -3265,9 +3265,9 @@ mod tests { assert_eq!( code, indoc! {r#" - var $abc$export$ba02ad2230917043; - $abc$export$ba02ad2230917043 = 2; - console.log($abc$export$ba02ad2230917043); + var $abc$export$6a5cdcad01c973fa; + $abc$export$6a5cdcad01c973fa = 2; + console.log($abc$export$6a5cdcad01c973fa); "#} ); @@ -3281,9 +3281,9 @@ mod tests { assert_eq!( code, indoc! {r#" - var $abc$export$ba02ad2230917043; - $abc$export$ba02ad2230917043 = 2; - console.log($abc$export$ba02ad2230917043); + var $abc$export$6a5cdcad01c973fa; + $abc$export$6a5cdcad01c973fa = 2; + console.log($abc$export$6a5cdcad01c973fa); "#} ); } @@ -3444,13 +3444,13 @@ mod tests { assert_eq_imported_symbols!( hoist.imported_symbols, map! { - w!("$abc$importAsync$558d6cfb8af8a010$ba02ad2230917043") => (w!("other"), w!("foo")) + w!("$abc$importAsync$70a00e0a8474f72a$6a5cdcad01c973fa") => (w!("other"), w!("foo")) } ); assert_eq!( hoist.dynamic_imports, map! { - w!("$abc$importAsync$558d6cfb8af8a010") => w!("other") + w!("$abc$importAsync$70a00e0a8474f72a") => w!("other") } ); assert_eq!( @@ -3458,7 +3458,7 @@ mod tests { indoc! {r#" import "abc:other"; async function $abc$var$test() { - const x = await $abc$importAsync$558d6cfb8af8a010; + const x = await $abc$importAsync$70a00e0a8474f72a; console.log(x.foo); } "#} @@ -3475,13 +3475,13 @@ mod tests { assert_eq_imported_symbols!( hoist.imported_symbols, map! { - w!("$abc$importAsync$558d6cfb8af8a010") => (w!("other"), w!("*")) + w!("$abc$importAsync$70a00e0a8474f72a") => (w!("other"), w!("*")) } ); assert_eq!( hoist.dynamic_imports, map! { - w!("$abc$importAsync$558d6cfb8af8a010") => w!("other") + w!("$abc$importAsync$70a00e0a8474f72a") => w!("other") } ); assert_eq!( @@ -3489,7 +3489,7 @@ mod tests { indoc! {r#" import "abc:other"; async function $abc$var$test() { - const x = await $abc$importAsync$558d6cfb8af8a010; + const x = await $abc$importAsync$70a00e0a8474f72a; console.log(x[foo]); } "#} @@ -3506,13 +3506,13 @@ mod tests { assert_eq_imported_symbols!( hoist.imported_symbols, map! { - w!("$abc$importAsync$558d6cfb8af8a010$ba02ad2230917043") => (w!("other"), w!("foo")) + w!("$abc$importAsync$70a00e0a8474f72a$6a5cdcad01c973fa") => (w!("other"), w!("foo")) } ); assert_eq!( hoist.dynamic_imports, map! { - w!("$abc$importAsync$558d6cfb8af8a010") => w!("other") + w!("$abc$importAsync$70a00e0a8474f72a") => w!("other") } ); assert_eq!( @@ -3520,7 +3520,7 @@ mod tests { indoc! {r#" import "abc:other"; async function $abc$var$test() { - const { foo: foo } = await $abc$importAsync$558d6cfb8af8a010; + const { foo: foo } = await $abc$importAsync$70a00e0a8474f72a; console.log(foo); } "#} @@ -3537,13 +3537,13 @@ mod tests { assert_eq_imported_symbols!( hoist.imported_symbols, map! { - w!("$abc$importAsync$558d6cfb8af8a010$ba02ad2230917043") => (w!("other"), w!("foo")) + w!("$abc$importAsync$70a00e0a8474f72a$6a5cdcad01c973fa") => (w!("other"), w!("foo")) } ); assert_eq!( hoist.dynamic_imports, map! { - w!("$abc$importAsync$558d6cfb8af8a010") => w!("other") + w!("$abc$importAsync$70a00e0a8474f72a") => w!("other") } ); assert_eq!( @@ -3551,7 +3551,7 @@ mod tests { indoc! {r#" import "abc:other"; async function $abc$var$test() { - const { foo: bar } = await $abc$importAsync$558d6cfb8af8a010; + const { foo: bar } = await $abc$importAsync$70a00e0a8474f72a; console.log(bar); } "#} @@ -3565,20 +3565,20 @@ mod tests { assert_eq_imported_symbols!( hoist.imported_symbols, map! { - w!("$abc$importAsync$558d6cfb8af8a010$ba02ad2230917043") => (w!("other"), w!("foo")) + w!("$abc$importAsync$70a00e0a8474f72a$6a5cdcad01c973fa") => (w!("other"), w!("foo")) } ); assert_eq!( hoist.dynamic_imports, map! { - w!("$abc$importAsync$558d6cfb8af8a010") => w!("other") + w!("$abc$importAsync$70a00e0a8474f72a") => w!("other") } ); assert_eq!( code, indoc! {r#" import "abc:other"; - $abc$importAsync$558d6cfb8af8a010.then((x)=>x.foo + $abc$importAsync$70a00e0a8474f72a.then((x)=>x.foo ); "#} ); @@ -3591,20 +3591,20 @@ mod tests { assert_eq_imported_symbols!( hoist.imported_symbols, map! { - w!("$abc$importAsync$558d6cfb8af8a010") => (w!("other"), w!("*")) + w!("$abc$importAsync$70a00e0a8474f72a") => (w!("other"), w!("*")) } ); assert_eq!( hoist.dynamic_imports, map! { - w!("$abc$importAsync$558d6cfb8af8a010") => w!("other") + w!("$abc$importAsync$70a00e0a8474f72a") => w!("other") } ); assert_eq!( code, indoc! {r#" import "abc:other"; - $abc$importAsync$558d6cfb8af8a010.then((x)=>x + $abc$importAsync$70a00e0a8474f72a.then((x)=>x ); "#} ); @@ -3617,20 +3617,20 @@ mod tests { assert_eq_imported_symbols!( hoist.imported_symbols, map! { - w!("$abc$importAsync$558d6cfb8af8a010$ba02ad2230917043") => (w!("other"), w!("foo")) + w!("$abc$importAsync$70a00e0a8474f72a$6a5cdcad01c973fa") => (w!("other"), w!("foo")) } ); assert_eq!( hoist.dynamic_imports, map! { - w!("$abc$importAsync$558d6cfb8af8a010") => w!("other") + w!("$abc$importAsync$70a00e0a8474f72a") => w!("other") } ); assert_eq!( code, indoc! {r#" import "abc:other"; - $abc$importAsync$558d6cfb8af8a010.then(({ foo: foo })=>foo + $abc$importAsync$70a00e0a8474f72a.then(({ foo: foo })=>foo ); "#} ); @@ -3643,20 +3643,20 @@ mod tests { assert_eq_imported_symbols!( hoist.imported_symbols, map! { - w!("$abc$importAsync$558d6cfb8af8a010$ba02ad2230917043") => (w!("other"), w!("foo")) + w!("$abc$importAsync$70a00e0a8474f72a$6a5cdcad01c973fa") => (w!("other"), w!("foo")) } ); assert_eq!( hoist.dynamic_imports, map! { - w!("$abc$importAsync$558d6cfb8af8a010") => w!("other") + w!("$abc$importAsync$70a00e0a8474f72a") => w!("other") } ); assert_eq!( code, indoc! {r#" import "abc:other"; - $abc$importAsync$558d6cfb8af8a010.then(({ foo: bar })=>bar + $abc$importAsync$70a00e0a8474f72a.then(({ foo: bar })=>bar ); "#} ); @@ -3669,20 +3669,20 @@ mod tests { assert_eq_imported_symbols!( hoist.imported_symbols, map! { - w!("$abc$importAsync$558d6cfb8af8a010$ba02ad2230917043") => (w!("other"), w!("foo")) + w!("$abc$importAsync$70a00e0a8474f72a$6a5cdcad01c973fa") => (w!("other"), w!("foo")) } ); assert_eq!( hoist.dynamic_imports, map! { - w!("$abc$importAsync$558d6cfb8af8a010") => w!("other") + w!("$abc$importAsync$70a00e0a8474f72a") => w!("other") } ); assert_eq!( code, indoc! {r#" import "abc:other"; - $abc$importAsync$558d6cfb8af8a010.then(function(x) { + $abc$importAsync$70a00e0a8474f72a.then(function(x) { return x.foo; }); "#} @@ -3696,20 +3696,20 @@ mod tests { assert_eq_imported_symbols!( hoist.imported_symbols, map! { - w!("$abc$importAsync$558d6cfb8af8a010") => (w!("other"), w!("*")) + w!("$abc$importAsync$70a00e0a8474f72a") => (w!("other"), w!("*")) } ); assert_eq!( hoist.dynamic_imports, map! { - w!("$abc$importAsync$558d6cfb8af8a010") => w!("other") + w!("$abc$importAsync$70a00e0a8474f72a") => w!("other") } ); assert_eq!( code, indoc! {r#" import "abc:other"; - $abc$importAsync$558d6cfb8af8a010.then(function(x) { + $abc$importAsync$70a00e0a8474f72a.then(function(x) { return x; }); "#} @@ -3723,20 +3723,20 @@ mod tests { assert_eq_imported_symbols!( hoist.imported_symbols, map! { - w!("$abc$importAsync$558d6cfb8af8a010$ba02ad2230917043") => (w!("other"), w!("foo")) + w!("$abc$importAsync$70a00e0a8474f72a$6a5cdcad01c973fa") => (w!("other"), w!("foo")) } ); assert_eq!( hoist.dynamic_imports, map! { - w!("$abc$importAsync$558d6cfb8af8a010") => w!("other") + w!("$abc$importAsync$70a00e0a8474f72a") => w!("other") } ); assert_eq!( code, indoc! {r#" import "abc:other"; - $abc$importAsync$558d6cfb8af8a010.then(function({ foo: foo }) { + $abc$importAsync$70a00e0a8474f72a.then(function({ foo: foo }) { }); "#} ); @@ -3749,20 +3749,20 @@ mod tests { assert_eq_imported_symbols!( hoist.imported_symbols, map! { - w!("$abc$importAsync$558d6cfb8af8a010$ba02ad2230917043") => (w!("other"), w!("foo")) + w!("$abc$importAsync$70a00e0a8474f72a$6a5cdcad01c973fa") => (w!("other"), w!("foo")) } ); assert_eq!( hoist.dynamic_imports, map! { - w!("$abc$importAsync$558d6cfb8af8a010") => w!("other") + w!("$abc$importAsync$70a00e0a8474f72a") => w!("other") } ); assert_eq!( code, indoc! {r#" import "abc:other"; - $abc$importAsync$558d6cfb8af8a010.then(function({ foo: bar }) { + $abc$importAsync$70a00e0a8474f72a.then(function({ foo: bar }) { }); "#} ); From 375fd68988823186708e46e48f18750ed318f6a5 Mon Sep 17 00:00:00 2001 From: Will Binns-Smith Date: Tue, 5 Oct 2021 09:29:43 -0700 Subject: [PATCH 15/68] Upgrade Flow to 0.161.0 (#7015) --- .flowconfig | 2 +- package.json | 2 +- .../runtimes/service-worker/src/ServiceWorkerRuntime.js | 5 ++--- yarn.lock | 8 ++++---- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/.flowconfig b/.flowconfig index 522d3c0d306..ba6ee95f4f4 100644 --- a/.flowconfig +++ b/.flowconfig @@ -36,4 +36,4 @@ untyped-import untyped-type-import [version] -0.160.1 +0.161.0 diff --git a/package.json b/package.json index 892dab33b71..be8a10235e1 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "cross-env": "^7.0.0", "doctoc": "^1.4.0", "eslint": "^7.20.0", - "flow-bin": "0.160.1", + "flow-bin": "0.161.0", "glob": "^7.1.6", "gulp": "^4.0.2", "gulp-babel": "^8.0.0", diff --git a/packages/runtimes/service-worker/src/ServiceWorkerRuntime.js b/packages/runtimes/service-worker/src/ServiceWorkerRuntime.js index a66419c9729..90bee96c3d6 100644 --- a/packages/runtimes/service-worker/src/ServiceWorkerRuntime.js +++ b/packages/runtimes/service-worker/src/ServiceWorkerRuntime.js @@ -8,14 +8,13 @@ export default (new Runtime({ return []; } - let asset; - bundle.traverse((node, _, actions) => { + let asset = bundle.traverse((node, _, actions) => { if ( node.type === 'dependency' && node.value.specifier === '@parcel/service-worker' ) { - asset = bundleGraph.getResolvedAsset(node.value, bundle); actions.stop(); + return bundleGraph.getResolvedAsset(node.value, bundle); } }); diff --git a/yarn.lock b/yarn.lock index f11b60f157f..cf5a9575b12 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6100,10 +6100,10 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== -flow-bin@0.160.1: - version "0.160.1" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.160.1.tgz#ae24ad6def1f05ae37789b6cc332b58975d29de0" - integrity sha512-LvQ9lB/vwW+lPjYIyACcGQCSLvL9f9hOM9jJJtfHQRrIgIShWqjvyv5V24M57HSxh0+6dBbVDYhUiZjjeArf7A== +flow-bin@0.161.0: + version "0.161.0" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.161.0.tgz#1c03ea4a9e3036a8bc639f050bd8dc6f5288e8bb" + integrity sha512-5BKQi+sjOXz67Kbc1teiBwd5e0Da6suW7S5oUCm9VclnzSZ3nlfNZUdrkvgJ5S4w5KDBDToEL7rREpn8rKF1zg== flush-write-stream@^1.0.0, flush-write-stream@^1.0.2: version "1.1.1" From fe41fc1a01b6f56cedebead424c01288fcf7deb3 Mon Sep 17 00:00:00 2001 From: Eric Eldredge Date: Tue, 5 Oct 2021 21:28:17 -0400 Subject: [PATCH 16/68] Parse babel configs as json5 (#7022) --- packages/transformers/babel/package.json | 1 + packages/transformers/babel/src/config.js | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/transformers/babel/package.json b/packages/transformers/babel/package.json index 9d34d97c4e5..285574036c7 100644 --- a/packages/transformers/babel/package.json +++ b/packages/transformers/babel/package.json @@ -32,6 +32,7 @@ "@parcel/utils": "2.0.0-rc.0", "browserslist": "^4.6.6", "core-js": "^3.2.1", + "json5": "^2.1.0", "nullthrows": "^1.1.1", "semver": "^5.7.0" }, diff --git a/packages/transformers/babel/src/config.js b/packages/transformers/babel/src/config.js index 8941f56247d..0acaf5db473 100644 --- a/packages/transformers/babel/src/config.js +++ b/packages/transformers/babel/src/config.js @@ -5,6 +5,7 @@ import typeof * as BabelCore from '@babel/core'; import type {Diagnostic} from '@parcel/diagnostic'; import type {BabelConfig} from './types'; +import json5 from 'json5'; import path from 'path'; import * as internalBabelCore from '@babel/core'; import {hashObject, relativePath, resolveConfig} from '@parcel/utils'; @@ -397,7 +398,7 @@ async function getCodeHighlights(fs, filePath, redundantPresets) { let ext = path.extname(filePath); if (ext !== '.js' && ext !== '.cjs' && ext !== '.mjs') { let contents = await fs.readFile(filePath, 'utf8'); - let json = JSON.parse(contents); + let json = json5.parse(contents); let presets = json.presets || []; let pointers = []; @@ -410,7 +411,12 @@ async function getCodeHighlights(fs, filePath, redundantPresets) { } if (pointers.length > 0) { - return generateJSONCodeHighlights(contents, pointers); + try { + return generateJSONCodeHighlights(contents, pointers); + } catch { + // TODO: support code highlights for json5 sources. + // Babel supports json5 syntax, but json-source-map does not. + } } } From 4904f20f59cf525d4a580c2b41968b7f1deba004 Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Wed, 6 Oct 2021 10:36:34 -0700 Subject: [PATCH 17/68] Fix autoinstall with Yarn 2+ (#7023) --- packages/core/package-manager/src/Yarn.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/core/package-manager/src/Yarn.js b/packages/core/package-manager/src/Yarn.js index b959f9cbb56..24d33e431f8 100644 --- a/packages/core/package-manager/src/Yarn.js +++ b/packages/core/package-manager/src/Yarn.js @@ -4,6 +4,8 @@ import type {PackageInstaller, InstallerOptions} from './types'; import commandExists from 'command-exists'; import spawn from 'cross-spawn'; +import {exec as _exec} from 'child_process'; +import {promisify} from 'util'; import logger from '@parcel/logger'; import split from 'split2'; import JSONParseStream from './JSONParseStream'; @@ -15,6 +17,7 @@ import {npmSpecifierFromModuleRequest} from './utils'; import pkg from '../package.json'; const YARN_CMD = 'yarn'; +const exec = promisify(_exec); type YarnStdOutMessage = | {| @@ -35,6 +38,8 @@ type YarnStdErrMessage = {| |}; let hasYarn: ?boolean; +let yarnVersion: ?number; + export class Yarn implements PackageInstaller { static async exists(): Promise { if (hasYarn != null) { @@ -55,12 +60,20 @@ export class Yarn implements PackageInstaller { cwd, saveDev = true, }: InstallerOptions): Promise { + if (yarnVersion == null) { + let version = await exec('yarn --version'); + yarnVersion = parseInt(version.stdout, 10); + } + let args = ['add', '--json'].concat( modules.map(npmSpecifierFromModuleRequest), ); if (saveDev) { - args.push('-D', '-W'); + args.push('-D'); + if (yarnVersion < 2) { + args.push('-W'); + } } // When Parcel is run by Yarn (e.g. via package.json scripts), several environment variables are From 2ebed006eea94cb3fb3396425fd56aefc9de4ca8 Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Wed, 6 Oct 2021 14:34:38 -0700 Subject: [PATCH 18/68] Ensure named exports are prioritized over wildcard re-exports (#7016) --- .../es6/re-export-priority/a.mjs | 2 + .../es6/re-export-priority/b.mjs | 2 + .../es6/re-export-priority/entry-a.mjs | 2 + .../es6/re-export-priority/entry-b.mjs | 2 + .../es6/re-export-priority/foo.mjs | 1 + .../es6/re-export-priority/namespace-a.mjs | 2 + .../es6/re-export-priority/namespace-b.mjs | 2 + .../core/integration-tests/test/javascript.js | 24 ++++++++++ .../integration-tests/test/scope-hoisting.js | 48 +++++++++++++++++++ packages/packagers/js/src/helpers.js | 2 +- .../transformers/js/src/esmodule-helpers.js | 7 +-- 11 files changed, 87 insertions(+), 7 deletions(-) create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/a.mjs create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/b.mjs create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/entry-a.mjs create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/entry-b.mjs create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/foo.mjs create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/namespace-a.mjs create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/namespace-b.mjs diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/a.mjs b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/a.mjs new file mode 100644 index 00000000000..a23c66a816d --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/a.mjs @@ -0,0 +1,2 @@ +export const foo = 2; +export * from './foo.mjs' diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/b.mjs b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/b.mjs new file mode 100644 index 00000000000..3d2ed8c4e66 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/b.mjs @@ -0,0 +1,2 @@ +export * from './foo.mjs' +export const foo = 2; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/entry-a.mjs b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/entry-a.mjs new file mode 100644 index 00000000000..57ea311f49d --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/entry-a.mjs @@ -0,0 +1,2 @@ +import {foo} from './a.mjs'; +output = foo; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/entry-b.mjs b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/entry-b.mjs new file mode 100644 index 00000000000..f6946df2c0c --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/entry-b.mjs @@ -0,0 +1,2 @@ +import {foo} from './b.mjs'; +output = foo; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/foo.mjs b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/foo.mjs new file mode 100644 index 00000000000..0146d2af06d --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/foo.mjs @@ -0,0 +1 @@ +export const foo = 3; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/namespace-a.mjs b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/namespace-a.mjs new file mode 100644 index 00000000000..f87cb2e1eae --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/namespace-a.mjs @@ -0,0 +1,2 @@ +import * as a from './a.mjs'; +output = a; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/namespace-b.mjs b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/namespace-b.mjs new file mode 100644 index 00000000000..1bd28b6d99e --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-priority/namespace-b.mjs @@ -0,0 +1,2 @@ +import * as b from './b.mjs'; +output = b; diff --git a/packages/core/integration-tests/test/javascript.js b/packages/core/integration-tests/test/javascript.js index e5f3e25ede9..69a59971a9c 100644 --- a/packages/core/integration-tests/test/javascript.js +++ b/packages/core/integration-tests/test/javascript.js @@ -4843,6 +4843,30 @@ describe('javascript', function() { assert.equal(typeof res.c, 'function'); }); + it('should prioritize named exports before re-exports withput scope hoisting (before)', async () => { + let b = await bundle( + path.join( + __dirname, + 'integration/scope-hoisting/es6/re-export-priority/entry-a.mjs', + ), + ); + + let res = await run(b, null, {require: false}); + assert.equal(res.output, 2); + }); + + it('should prioritize named exports before re-exports without scope hoisting (after)', async () => { + let b = await bundle( + path.join( + __dirname, + 'integration/scope-hoisting/es6/re-export-priority/entry-b.mjs', + ), + ); + + let res = await run(b, null, {require: false}); + assert.equal(res.output, 2); + }); + it('should exclude default from export all declaration', async function() { let b = await bundle( path.join(__dirname, 'integration/js-export-all/index.js'), diff --git a/packages/core/integration-tests/test/scope-hoisting.js b/packages/core/integration-tests/test/scope-hoisting.js index 7b0e9a9b153..9dc64403b2a 100644 --- a/packages/core/integration-tests/test/scope-hoisting.js +++ b/packages/core/integration-tests/test/scope-hoisting.js @@ -3774,6 +3774,54 @@ describe('scope hoisting', function() { test: 'foo', }); }); + + it('should prioritize named exports before re-exports (before)', async () => { + let b = await bundle( + path.join( + __dirname, + 'integration/scope-hoisting/es6/re-export-priority/entry-a.mjs', + ), + ); + + let res = await run(b); + assert.equal(res, 2); + }); + + it('should prioritize named exports before re-exports (after)', async () => { + let b = await bundle( + path.join( + __dirname, + 'integration/scope-hoisting/es6/re-export-priority/entry-b.mjs', + ), + ); + + let res = await run(b); + assert.equal(res, 2); + }); + + it('should prioritize named exports before re-exports in namespace (before)', async () => { + let b = await bundle( + path.join( + __dirname, + 'integration/scope-hoisting/es6/re-export-priority/namespace-a.mjs', + ), + ); + + let res = await run(b); + assert.deepEqual(res, {foo: 2}); + }); + + it('should prioritize named exports before re-exports in namespace (after)', async () => { + let b = await bundle( + path.join( + __dirname, + 'integration/scope-hoisting/es6/re-export-priority/namespace-b.mjs', + ), + ); + + let res = await run(b); + assert.deepEqual(res, {foo: 2}); + }); }); describe('commonjs', function() { diff --git a/packages/packagers/js/src/helpers.js b/packages/packagers/js/src/helpers.js index c09204bde85..4654d7b81e1 100644 --- a/packages/packagers/js/src/helpers.js +++ b/packages/packagers/js/src/helpers.js @@ -38,7 +38,7 @@ export const helpers = { `, $parcel$exportWildcard: `function $parcel$exportWildcard(dest, source) { Object.keys(source).forEach(function(key) { - if (key === 'default' || key === '__esModule') { + if (key === 'default' || key === '__esModule' || dest.hasOwnProperty(key)) { return; } diff --git a/packages/transformers/js/src/esmodule-helpers.js b/packages/transformers/js/src/esmodule-helpers.js index 926de91781b..de58a3fc981 100644 --- a/packages/transformers/js/src/esmodule-helpers.js +++ b/packages/transformers/js/src/esmodule-helpers.js @@ -8,12 +8,7 @@ exports.defineInteropFlag = function(a) { exports.exportAll = function(source, dest) { Object.keys(source).forEach(function(key) { - if (key === 'default' || key === '__esModule') { - return; - } - - // Skip duplicate re-exports when they have the same value. - if (key in dest && dest[key] === source[key]) { + if (key === 'default' || key === '__esModule' || dest.hasOwnProperty(key)) { return; } From 91de5c0cc2f02201789112ced53d3744887e20dd Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Wed, 6 Oct 2021 14:34:57 -0700 Subject: [PATCH 19/68] Ensure symbol order is consistent (#7021) --- packages/transformers/js/core/src/hoist.rs | 181 ++++++++++-------- packages/transformers/js/src/JSTransformer.js | 31 +-- 2 files changed, 119 insertions(+), 93 deletions(-) diff --git a/packages/transformers/js/core/src/hoist.rs b/packages/transformers/js/core/src/hoist.rs index b4f06591df9..6fb2f0c7f3a 100644 --- a/packages/transformers/js/core/src/hoist.rs +++ b/packages/transformers/js/core/src/hoist.rs @@ -55,14 +55,29 @@ pub fn hoist( Ok((module, hoist.get_result(), diagnostics)) } +#[derive(Debug, Serialize, Deserialize)] +struct ExportedSymbol { + local: JsWord, + exported: JsWord, + loc: SourceLocation, +} + +#[derive(Debug, Serialize, Deserialize)] +struct ImportedSymbol { + source: JsWord, + local: JsWord, + imported: JsWord, + loc: SourceLocation, +} + struct Hoist<'a> { module_id: &'a str, collect: &'a Collect, module_items: Vec, export_decls: HashSet, - imported_symbols: HashMap, - exported_symbols: HashMap, - re_exports: Vec<(JsWord, JsWord, JsWord, SourceLocation)>, + imported_symbols: Vec, + exported_symbols: Vec, + re_exports: Vec, self_references: HashSet, dynamic_imports: HashMap, in_function_scope: bool, @@ -71,9 +86,9 @@ struct Hoist<'a> { #[derive(Debug, Default, Serialize, Deserialize)] pub struct HoistResult { - imported_symbols: HashMap, - exported_symbols: HashMap, - re_exports: Vec<(JsWord, JsWord, JsWord, SourceLocation)>, + imported_symbols: Vec, + exported_symbols: Vec, + re_exports: Vec, self_references: HashSet, wrapped_requires: HashSet, dynamic_imports: HashMap, @@ -90,8 +105,8 @@ impl<'a> Hoist<'a> { collect, module_items: vec![], export_decls: HashSet::new(), - imported_symbols: HashMap::new(), - exported_symbols: HashMap::new(), + imported_symbols: vec![], + exported_symbols: vec![], re_exports: vec![], self_references: HashSet::new(), dynamic_imports: HashMap::new(), @@ -206,28 +221,28 @@ impl<'a> Fold for Hoist<'a> { Some(exported) => exported.sym, None => named.orig.sym.clone(), }; - self.re_exports.push(( - exported, - src.value.clone(), - named.orig.sym, - SourceLocation::from(&self.collect.source_map, named.span), - )); + self.re_exports.push(ImportedSymbol { + source: src.value.clone(), + local: exported, + imported: named.orig.sym, + loc: SourceLocation::from(&self.collect.source_map, named.span), + }); } ExportSpecifier::Default(default) => { - self.re_exports.push(( - default.exported.sym, - src.value.clone(), - js_word!("default"), - SourceLocation::from(&self.collect.source_map, default.exported.span), - )); + self.re_exports.push(ImportedSymbol { + source: src.value.clone(), + local: default.exported.sym, + imported: js_word!("default"), + loc: SourceLocation::from(&self.collect.source_map, default.exported.span), + }); } ExportSpecifier::Namespace(namespace) => { - self.re_exports.push(( - namespace.name.sym, - src.value.clone(), - "*".into(), - SourceLocation::from(&self.collect.source_map, namespace.span), - )); + self.re_exports.push(ImportedSymbol { + source: src.value.clone(), + local: namespace.name.sym, + imported: "*".into(), + loc: SourceLocation::from(&self.collect.source_map, namespace.span), + }); } } } @@ -243,12 +258,12 @@ impl<'a> Fold for Hoist<'a> { source, specifier, .. }) = self.collect.imports.get(&id) { - self.re_exports.push(( - exported, - source.clone(), - specifier.clone(), - SourceLocation::from(&self.collect.source_map, named.span), - )); + self.re_exports.push(ImportedSymbol { + source: source.clone(), + local: exported, + imported: specifier.clone(), + loc: SourceLocation::from(&self.collect.source_map, named.span), + }); } else { // A variable will appear only once in the `exports` mapping but // could be exported multiple times with different names. @@ -259,10 +274,11 @@ impl<'a> Fold for Hoist<'a> { } else { self.get_export_ident(DUMMY_SP, orig_exported) }; - self.exported_symbols.entry(exported).or_insert(( - id.sym, - SourceLocation::from(&self.collect.source_map, named.span), - )); + self.exported_symbols.push(ExportedSymbol { + local: id.sym, + exported, + loc: SourceLocation::from(&self.collect.source_map, named.span), + }); } } } @@ -281,12 +297,12 @@ impl<'a> Fold for Hoist<'a> { }, type_only: false, }))); - self.re_exports.push(( - "*".into(), - export.src.value, - "*".into(), - SourceLocation::from(&self.collect.source_map, export.span), - )); + self.re_exports.push(ImportedSymbol { + source: export.src.value, + local: "*".into(), + imported: "*".into(), + loc: SourceLocation::from(&self.collect.source_map, export.span), + }); } ModuleDecl::ExportDefaultExpr(export) => { let ident = self.get_export_ident(export.span, &"default".into()); @@ -582,14 +598,12 @@ impl<'a> Fold for Hoist<'a> { hash!(key) ) .into(); - self.imported_symbols.insert( - name, - ( - source.clone(), - key.clone(), - SourceLocation::from(&self.collect.source_map, member.span), - ), - ); + self.imported_symbols.push(ImportedSymbol { + source: source.clone(), + local: name, + imported: key.clone(), + loc: SourceLocation::from(&self.collect.source_map, member.span), + }); } else { return Expr::Ident(self.get_import_ident( member.span, @@ -676,14 +690,12 @@ impl<'a> Fold for Hoist<'a> { let name: JsWord = format!("${}$importAsync${:x}", self.module_id, hash!(source)).into(); self.dynamic_imports.insert(name.clone(), source.clone()); if self.collect.non_static_requires.contains(&source) || self.collect.should_wrap { - self.imported_symbols.insert( - name.clone(), - ( - source, - "*".into(), - SourceLocation::from(&self.collect.source_map, call.span), - ), - ); + self.imported_symbols.push(ImportedSymbol { + source: source, + local: name.clone(), + imported: "*".into(), + loc: SourceLocation::from(&self.collect.source_map, call.span), + }); } return Expr::Ident(Ident::new(name, call.span)); } @@ -784,15 +796,21 @@ impl<'a> Fold for Hoist<'a> { hash!(specifier) ) .into(); - self - .imported_symbols - .insert(name, (source.clone(), specifier.clone(), loc.clone())); + self.imported_symbols.push(ImportedSymbol { + source: source.clone(), + local: name, + imported: specifier.clone(), + loc: loc.clone(), + }); } else if self.collect.non_static_access.contains_key(&id!(node)) { let name: JsWord = format!("${}$importAsync${:x}", self.module_id, hash!(source)).into(); - self - .imported_symbols - .insert(name, (source.clone(), "*".into(), loc.clone())); + self.imported_symbols.push(ImportedSymbol { + source: source.clone(), + local: name, + imported: "*".into(), + loc: loc.clone(), + }); } } else { // If this identifier is not constant, we cannot directly reference the imported @@ -813,10 +831,11 @@ impl<'a> Fold for Hoist<'a> { // If wrapped, mark the original symbol as exported. // Otherwise replace with an export identifier. if self.collect.should_wrap { - self.exported_symbols.entry(exported.clone()).or_insert(( - node.sym.clone(), - SourceLocation::from(&self.collect.source_map, node.span), - )); + self.exported_symbols.push(ExportedSymbol { + local: node.sym.clone(), + exported: exported.clone(), + loc: SourceLocation::from(&self.collect.source_map, node.span), + }); return node; } else { return self.get_export_ident(node.span, exported); @@ -1007,13 +1026,16 @@ impl<'a> Hoist<'a> { &mut self, span: Span, source: &JsWord, - local: &JsWord, + imported: &JsWord, loc: SourceLocation, ) -> Ident { - let new_name = self.get_import_name(source, local); - self - .imported_symbols - .insert(new_name.clone(), (source.clone(), local.clone(), loc)); + let new_name = self.get_import_name(source, imported); + self.imported_symbols.push(ImportedSymbol { + source: source.clone(), + local: new_name.clone(), + imported: imported.clone(), + loc: loc.clone(), + }); Ident::new(new_name, span) } @@ -1031,10 +1053,11 @@ impl<'a> Hoist<'a> { format!("${}$export${:x}", self.module_id, hash!(exported)).into() }; - self.exported_symbols.entry(exported.clone()).or_insert(( - new_name.clone(), - SourceLocation::from(&self.collect.source_map, span), - )); + self.exported_symbols.push(ExportedSymbol { + local: new_name.clone(), + exported: exported.clone(), + loc: SourceLocation::from(&self.collect.source_map, span), + }); let mut span = span; span.ctxt = SyntaxContext::empty(); @@ -2054,8 +2077,8 @@ mod tests { macro_rules! assert_eq_imported_symbols { ($m: expr, $match: expr) => {{ let mut map = HashMap::new(); - for (key, val) in $m { - map.insert(key, (val.0, val.1)); + for sym in $m { + map.insert(sym.local, (sym.source, sym.imported)); } assert_eq!(map, $match); }}; diff --git a/packages/transformers/js/src/JSTransformer.js b/packages/transformers/js/src/JSTransformer.js index 4a3eee31836..a94895b77ad 100644 --- a/packages/transformers/js/src/JSTransformer.js +++ b/packages/transformers/js/src/JSTransformer.js @@ -674,9 +674,8 @@ export default (new Transformer({ asset.meta.id = asset.id; if (hoist_result) { asset.symbols.ensure(); - for (let symbol in hoist_result.exported_symbols) { - let [local, loc] = hoist_result.exported_symbols[symbol]; - asset.symbols.set(symbol, local, convertLoc(loc)); + for (let {exported, local, loc} of hoist_result.exported_symbols) { + asset.symbols.set(exported, local, convertLoc(loc)); } let deps = new Map( @@ -688,25 +687,29 @@ export default (new Transformer({ dep.symbols.ensure(); } - for (let name in hoist_result.imported_symbols) { - let [specifier, exported, loc] = hoist_result.imported_symbols[name]; - let dep = deps.get(specifier); + for (let { + source, + local, + imported, + loc, + } of hoist_result.imported_symbols) { + let dep = deps.get(source); if (!dep) continue; - dep.symbols.set(exported, name, convertLoc(loc)); + dep.symbols.set(imported, local, convertLoc(loc)); } - for (let [name, specifier, exported, loc] of hoist_result.re_exports) { - let dep = deps.get(specifier); + for (let {source, local, imported, loc} of hoist_result.re_exports) { + let dep = deps.get(source); if (!dep) continue; - if (name === '*' && exported === '*') { + if (local === '*' && imported === '*') { dep.symbols.set('*', '*', convertLoc(loc), true); } else { let reExportName = - dep.symbols.get(exported)?.local ?? - `$${asset.id}$re_export$${name}`; - asset.symbols.set(name, reExportName); - dep.symbols.set(exported, reExportName, convertLoc(loc), true); + dep.symbols.get(imported)?.local ?? + `$${asset.id}$re_export$${local}`; + asset.symbols.set(local, reExportName); + dep.symbols.set(imported, reExportName, convertLoc(loc), true); } } From 7d4d53a098755d3dd494eb28d593f1bb4d5c1ec7 Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Wed, 6 Oct 2021 14:43:57 -0700 Subject: [PATCH 20/68] Update all references to v2.parceljs.org to just parceljs.org (#7029) --- .../core/src/requests/ParcelConfigRequest.js | 2 +- .../core/core/src/requests/TargetRequest.js | 14 ++++++------ packages/core/core/test/ParcelConfig.test.js | 2 +- packages/core/core/test/TargetRequest.test.js | 14 ++++++------ packages/core/integration-tests/test/babel.js | 6 ++--- packages/core/integration-tests/test/html.js | 4 ++-- .../integration/webextension/manifest.json | 2 +- .../core/integration-tests/test/javascript.js | 6 ++--- packages/core/parcel/README.md | 10 ++++----- packages/packagers/css/src/CSSPackager.js | 2 +- packages/packagers/xml/src/XMLPackager.js | 2 +- packages/transformers/babel/src/config.js | 6 ++--- .../js/core/src/dependency_collector.rs | 10 ++++----- packages/transformers/js/core/src/utils.rs | 22 +++++++++---------- packages/transformers/xml/src/atom.js | 2 +- packages/transformers/xml/src/rss.js | 2 +- 16 files changed, 53 insertions(+), 53 deletions(-) diff --git a/packages/core/core/src/requests/ParcelConfigRequest.js b/packages/core/core/src/requests/ParcelConfigRequest.js index ed9b9409f61..d4c8d44078e 100644 --- a/packages/core/core/src/requests/ParcelConfigRequest.js +++ b/packages/core/core/src/requests/ParcelConfigRequest.js @@ -308,7 +308,7 @@ async function processMap( }, ], documentationURL: - 'https://v2.parceljs.org/features/dependency-resolution/#url-schemes', + 'https://parceljs.org/features/dependency-resolution/#url-schemes', }, }); } diff --git a/packages/core/core/src/requests/TargetRequest.js b/packages/core/core/src/requests/TargetRequest.js index 03d95e267ad..f456e75c75c 100644 --- a/packages/core/core/src/requests/TargetRequest.js +++ b/packages/core/core/src/requests/TargetRequest.js @@ -593,7 +593,7 @@ export class TargetResolver { `The "${targetName}" field is meant for libraries. If you meant to output a ${ext} file, either remove the "${targetName}" field or choose a different target name.`, ], documentationURL: - 'https://v2.parceljs.org/features/targets/#library-targets', + 'https://parceljs.org/features/targets/#library-targets', }, }); } @@ -625,7 +625,7 @@ export class TargetResolver { `The "${targetName}" field is meant for libraries. The outputFormat must be either "commonjs" or "esmodule". Either change or remove the declared outputFormat.`, ], documentationURL: - 'https://v2.parceljs.org/features/targets/#library-targets', + 'https://parceljs.org/features/targets/#library-targets', }, }); } @@ -684,7 +684,7 @@ export class TargetResolver { `Either change the output file extension to .mjs, add "type": "module" to package.json, or remove the declared outputFormat.`, ], documentationURL: - 'https://v2.parceljs.org/features/targets/#library-targets', + 'https://parceljs.org/features/targets/#library-targets', }, }); } @@ -716,7 +716,7 @@ export class TargetResolver { `The "${targetName}" target is meant for libraries. Either remove the "scopeHoist" option, or use a different target name.`, ], documentationURL: - 'https://v2.parceljs.org/features/targets/#library-targets', + 'https://parceljs.org/features/targets/#library-targets', }, }); } @@ -859,7 +859,7 @@ export class TargetResolver { ], hints: [`Either remove the "scopeHoist" or "isLibrary" option.`], documentationURL: - 'https://v2.parceljs.org/features/targets/#library-targets', + 'https://parceljs.org/features/targets/#library-targets', }, }); } @@ -1027,7 +1027,7 @@ export class TargetResolver { )}.`, ], documentationURL: - 'https://v2.parceljs.org/features/targets/#library-targets', + 'https://parceljs.org/features/targets/#library-targets', }, }); } @@ -1253,7 +1253,7 @@ function assertTargetsAreNotEntries( : '') + `Change the "${target.name}" field to point to an output file rather than your source code.`, ], - documentationURL: 'https://v2.parceljs.org/features/targets/', + documentationURL: 'https://parceljs.org/features/targets/', }, }); } diff --git a/packages/core/core/test/ParcelConfig.test.js b/packages/core/core/test/ParcelConfig.test.js index 54652c86c71..9cea05a6f95 100644 --- a/packages/core/core/test/ParcelConfig.test.js +++ b/packages/core/core/test/ParcelConfig.test.js @@ -312,7 +312,7 @@ describe('ParcelConfig', () => { }, ], documentationURL: - 'https://v2.parceljs.org/features/dependency-resolution/#url-schemes', + 'https://parceljs.org/features/dependency-resolution/#url-schemes', }, ], }, diff --git a/packages/core/core/test/TargetRequest.test.js b/packages/core/core/test/TargetRequest.test.js index 467bc0b1436..a6ef550681c 100644 --- a/packages/core/core/test/TargetRequest.test.js +++ b/packages/core/core/test/TargetRequest.test.js @@ -737,7 +737,7 @@ describe('TargetResolver', () => { 'The "main" field is meant for libraries. If you meant to output a .html file, either remove the "main" field or choose a different target name.', ], documentationURL: - 'https://v2.parceljs.org/features/targets/#library-targets', + 'https://parceljs.org/features/targets/#library-targets', }, ], }); @@ -779,7 +779,7 @@ describe('TargetResolver', () => { 'The "main" field is meant for libraries. The outputFormat must be either "commonjs" or "esmodule". Either change or remove the declared outputFormat.', ], documentationURL: - 'https://v2.parceljs.org/features/targets/#library-targets', + 'https://parceljs.org/features/targets/#library-targets', }, ], }); @@ -832,7 +832,7 @@ describe('TargetResolver', () => { 'Either change the output file extension to .mjs, add "type": "module" to package.json, or remove the declared outputFormat.', ], documentationURL: - 'https://v2.parceljs.org/features/targets/#library-targets', + 'https://parceljs.org/features/targets/#library-targets', }, ], }); @@ -885,7 +885,7 @@ describe('TargetResolver', () => { 'Either remove the target\'s declared "outputFormat" or change the extension to .mjs or .js.', ], documentationURL: - 'https://v2.parceljs.org/features/targets/#library-targets', + 'https://parceljs.org/features/targets/#library-targets', }, ], }); @@ -938,7 +938,7 @@ describe('TargetResolver', () => { 'Either remove the target\'s declared "outputFormat" or change the extension to .cjs or .js.', ], documentationURL: - 'https://v2.parceljs.org/features/targets/#library-targets', + 'https://parceljs.org/features/targets/#library-targets', }, ], }); @@ -979,7 +979,7 @@ describe('TargetResolver', () => { 'The "main" target is meant for libraries. Either remove the "scopeHoist" option, or use a different target name.', ], documentationURL: - 'https://v2.parceljs.org/features/targets/#library-targets', + 'https://parceljs.org/features/targets/#library-targets', }, ], }); @@ -1029,7 +1029,7 @@ describe('TargetResolver', () => { ], hints: ['Either remove the "scopeHoist" or "isLibrary" option.'], documentationURL: - 'https://v2.parceljs.org/features/targets/#library-targets', + 'https://parceljs.org/features/targets/#library-targets', }, ], }); diff --git a/packages/core/integration-tests/test/babel.js b/packages/core/integration-tests/test/babel.js index 09fe260eb6f..d0ab06dcb26 100644 --- a/packages/core/integration-tests/test/babel.js +++ b/packages/core/integration-tests/test/babel.js @@ -613,7 +613,7 @@ describe('babel', function() { md`Delete __${path.relative(process.cwd(), babelrcPath)}__`, ], documentationURL: - 'https://v2.parceljs.org/languages/javascript/#default-presets', + 'https://parceljs.org/languages/javascript/#default-presets', }, { origin: '@parcel/transformer-babel', @@ -641,7 +641,7 @@ describe('babel', function() { "Either remove __@babel/preset-env__ to use Parcel's builtin transpilation, or replace with __@parcel/babel-preset-env__", ], documentationURL: - 'https://v2.parceljs.org/languages/javascript/#custom-plugins', + 'https://parceljs.org/languages/javascript/#custom-plugins', }, ], }, @@ -697,7 +697,7 @@ describe('babel', function() { )}__`, ], documentationURL: - 'https://v2.parceljs.org/languages/javascript/#default-presets', + 'https://parceljs.org/languages/javascript/#default-presets', }, ], }, diff --git a/packages/core/integration-tests/test/html.js b/packages/core/integration-tests/test/html.js index 93a2504f830..5d0eb378d7b 100644 --- a/packages/core/integration-tests/test/html.js +++ b/packages/core/integration-tests/test/html.js @@ -1320,7 +1320,7 @@ describe('html', function() { ], hints: ['Add the type="module" attribute to the is added to make sure HMR is working even if user - // didn't add any. It's inserted at the very end to take into account cases - // when there's no html/head/body in source html. + // didn't add any. if (options.hmrOptions && !(hasScripts || hasInlineScripts)) { - ast.program.push({ + const script = { tag: 'script', attrs: { src: asset.addURLDependency('hmr.js', { @@ -53,7 +55,17 @@ export default (new Transformer({ }), }, content: [], - }); + }; + + const found = findFirstMatch(ast, [{tag: 'body'}, {tag: 'html'}]); + + if (found) { + found.content = found.content || []; + found.content.push(script); + } else { + // Insert at the very end. + ast.program.push(script); + } asset.setAST(ast); @@ -75,3 +87,21 @@ export default (new Transformer({ }; }, }): Transformer); + +function findFirstMatch( + ast: AST, + expressions: PostHTMLExpression[], +): ?PostHTMLNode { + let found; + + for (const expression of expressions) { + PostHTML().match.call(ast.program, expression, node => { + found = node; + return node; + }); + + if (found) { + return found; + } + } +} From d6de61d33450c753d5bb30d06426b35a4674a98b Mon Sep 17 00:00:00 2001 From: Kyle Herock Date: Fri, 8 Oct 2021 19:17:11 -0400 Subject: [PATCH 29/68] Fix shaking for functions types with overload signatures (#7036) --- .../ts-types/exporting-overload/expected.d.ts | 5 +++ .../ts-types/exporting-overload/index.ts | 7 ++++ .../ts-types/exporting-overload/package.json | 9 +++++ .../ts-types/exporting-overload/yarn.lock | 0 .../core/integration-tests/test/ts-types.js | 35 +++++++++++++++++++ .../typescript-types/src/TSModule.js | 6 ++-- .../typescript-types/src/TSModuleGraph.js | 8 +++-- 7 files changed, 65 insertions(+), 5 deletions(-) create mode 100644 packages/core/integration-tests/test/integration/ts-types/exporting-overload/expected.d.ts create mode 100644 packages/core/integration-tests/test/integration/ts-types/exporting-overload/index.ts create mode 100644 packages/core/integration-tests/test/integration/ts-types/exporting-overload/package.json create mode 100644 packages/core/integration-tests/test/integration/ts-types/exporting-overload/yarn.lock diff --git a/packages/core/integration-tests/test/integration/ts-types/exporting-overload/expected.d.ts b/packages/core/integration-tests/test/integration/ts-types/exporting-overload/expected.d.ts new file mode 100644 index 00000000000..f7303c873d2 --- /dev/null +++ b/packages/core/integration-tests/test/integration/ts-types/exporting-overload/expected.d.ts @@ -0,0 +1,5 @@ +import { Named1, Named2 } from "external"; +export function overloaded(arg: string): Named1; +export function overloaded(arg: number): Named2; + +//# sourceMappingURL=types.d.ts.map diff --git a/packages/core/integration-tests/test/integration/ts-types/exporting-overload/index.ts b/packages/core/integration-tests/test/integration/ts-types/exporting-overload/index.ts new file mode 100644 index 00000000000..2e5e1292437 --- /dev/null +++ b/packages/core/integration-tests/test/integration/ts-types/exporting-overload/index.ts @@ -0,0 +1,7 @@ +import {Named1, Named2} from 'external'; + +export function overloaded(arg: string): Named1; +export function overloaded(arg: number): Named2; +export function overloaded(arg: unknown): unknown { + return {}; +} diff --git a/packages/core/integration-tests/test/integration/ts-types/exporting-overload/package.json b/packages/core/integration-tests/test/integration/ts-types/exporting-overload/package.json new file mode 100644 index 00000000000..a5c9d84f206 --- /dev/null +++ b/packages/core/integration-tests/test/integration/ts-types/exporting-overload/package.json @@ -0,0 +1,9 @@ +{ + "name": "ts-types-exporting-overload", + "private": true, + "main": "dist/main.js", + "types": "dist/types.d.ts", + "dependencies": { + "external": "*" + } +} diff --git a/packages/core/integration-tests/test/integration/ts-types/exporting-overload/yarn.lock b/packages/core/integration-tests/test/integration/ts-types/exporting-overload/yarn.lock new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/core/integration-tests/test/ts-types.js b/packages/core/integration-tests/test/ts-types.js index 0a668cf2b49..b2d46fffd9f 100644 --- a/packages/core/integration-tests/test/ts-types.js +++ b/packages/core/integration-tests/test/ts-types.js @@ -135,6 +135,41 @@ describe('typescript types', function() { assert.equal(dist, expected); }); + it('should generate ts declarations with export of an overloaded function signature', async function() { + let b = await bundle( + path.join(__dirname, '/integration/ts-types/exporting-overload/index.ts'), + ); + + assertBundles(b, [ + { + type: 'js', + assets: ['index.ts'], + }, + { + type: 'ts', + assets: ['index.ts'], + }, + ]); + + let dist = ( + await outputFS.readFile( + path.join( + __dirname, + '/integration/ts-types/exporting-overload/dist/types.d.ts', + ), + 'utf8', + ) + ).replace(/\r\n/g, '\n'); + let expected = await inputFS.readFile( + path.join( + __dirname, + '/integration/ts-types/exporting-overload/expected.d.ts', + ), + 'utf8', + ); + assert.equal(dist, expected); + }); + it('should generate ts declarations with externals', async function() { let b = await bundle( path.join(__dirname, '/integration/ts-types/externals/index.tsx'), diff --git a/packages/transformers/typescript-types/src/TSModule.js b/packages/transformers/typescript-types/src/TSModule.js index a3f786de963..e71ca5a9e43 100644 --- a/packages/transformers/typescript-types/src/TSModule.js +++ b/packages/transformers/typescript-types/src/TSModule.js @@ -8,7 +8,7 @@ export type Export = export class TSModule { imports: Map; exports: Array; - bindings: Map; + bindings: Map>; names: Map; used: Set; @@ -37,7 +37,9 @@ export class TSModule { } addLocal(name: string, node: any) { - this.bindings.set(name, node); + const bindings = this.bindings.get(name) ?? new Set(); + bindings.add(node); + this.bindings.set(name, bindings); if (name !== 'default') { this.names.set(name, name); } diff --git a/packages/transformers/typescript-types/src/TSModuleGraph.js b/packages/transformers/typescript-types/src/TSModuleGraph.js index 18eeed88893..e522b19ec17 100644 --- a/packages/transformers/typescript-types/src/TSModuleGraph.js +++ b/packages/transformers/typescript-types/src/TSModuleGraph.js @@ -64,9 +64,11 @@ export class TSModuleGraph { return ts.visitEachChild(node, visit, context); }; - let node = module.bindings.get(name); - if (node) { - ts.visitEachChild(node, visit, context); + let bindings = module.bindings.get(name); + if (bindings) { + for (let node of bindings) { + ts.visitEachChild(node, visit, context); + } } } From 810a8547a981b72b86a8f0d501a5690d4d680019 Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Sat, 9 Oct 2021 13:00:19 -0700 Subject: [PATCH 30/68] Add missing C flags for SIMD support in build workflow (#7045) --- .github/workflows/nightly-release.yml | 6 ++++++ .github/workflows/tag-release.yml | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/.github/workflows/nightly-release.yml b/.github/workflows/nightly-release.yml index 4c6b57a4cc5..7f2eeea9653 100644 --- a/.github/workflows/nightly-release.yml +++ b/.github/workflows/nightly-release.yml @@ -71,9 +71,11 @@ jobs: - target: arm-unknown-linux-gnueabihf arch: armhf strip: arm-linux-gnueabihf-strip + cflags: -mfpu=neon - target: aarch64-unknown-linux-gnu arch: arm64 strip: aarch64-linux-gnu-strip + cflags: '' name: ${{ matrix.target }} runs-on: ubuntu-latest steps: @@ -94,6 +96,7 @@ jobs: run: yarn build-native-release env: RUST_TARGET: ${{ matrix.target }} + CFLAGS: ${{ matrix.cflags }} - name: Strip debug symbols # https://github.com/rust-lang/rust/issues/46034 run: ${{ matrix.strip }} packages/*/*/*.node - name: Upload artifacts @@ -119,8 +122,10 @@ jobs: include: - target: x86_64-unknown-linux-musl strip: strip + cflags: -msse4.2 - target: aarch64-unknown-linux-musl strip: aarch64-linux-musl-strip + cflags: '' name: ${{ matrix.target }} runs-on: ubuntu-latest container: @@ -150,6 +155,7 @@ jobs: run: yarn build-native-release env: RUST_TARGET: ${{ matrix.target }} + CFLAGS: ${{ matrix.cflags }} - name: Strip debug symbols # https://github.com/rust-lang/rust/issues/46034 run: ${{ matrix.strip }} packages/*/*/*.node - name: Upload artifacts diff --git a/.github/workflows/tag-release.yml b/.github/workflows/tag-release.yml index 65c9ab23542..b6a34074dc5 100644 --- a/.github/workflows/tag-release.yml +++ b/.github/workflows/tag-release.yml @@ -70,9 +70,11 @@ jobs: - target: arm-unknown-linux-gnueabihf arch: armhf strip: arm-linux-gnueabihf-strip + cflags: -mfpu=neon - target: aarch64-unknown-linux-gnu arch: arm64 strip: aarch64-linux-gnu-strip + cflags: '' name: ${{ matrix.target }} runs-on: ubuntu-latest steps: @@ -93,6 +95,7 @@ jobs: run: yarn build-native-release env: RUST_TARGET: ${{ matrix.target }} + CFLAGS: ${{ matrix.cflags }} - name: Strip debug symbols # https://github.com/rust-lang/rust/issues/46034 run: ${{ matrix.strip }} packages/*/*/*.node - name: Upload artifacts @@ -118,8 +121,10 @@ jobs: include: - target: x86_64-unknown-linux-musl strip: strip + cflags: -msse4.2 - target: aarch64-unknown-linux-musl strip: aarch64-linux-musl-strip + cflags: '' name: ${{ matrix.target }} runs-on: ubuntu-latest container: @@ -149,6 +154,7 @@ jobs: run: yarn build-native-release env: RUST_TARGET: ${{ matrix.target }} + CFLAGS: ${{ matrix.cflags }} - name: Strip debug symbols # https://github.com/rust-lang/rust/issues/46034 run: ${{ matrix.strip }} packages/*/*/*.node - name: Upload artifacts From 971ed24c2a49bcde4dc4e0b3d827d6eaf4513171 Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Sat, 9 Oct 2021 13:00:59 -0700 Subject: [PATCH 31/68] Update watcher and source-map library to 2.0.0 (#7044) --- packages/core/core/package.json | 2 +- packages/core/fs/package.json | 2 +- packages/core/types/package.json | 2 +- packages/core/utils/package.json | 2 +- packages/optimizers/cssnano/package.json | 2 +- packages/optimizers/esbuild/package.json | 2 +- packages/optimizers/terser/package.json | 2 +- packages/packagers/css/package.json | 2 +- packages/packagers/js/package.json | 2 +- packages/shared/babel-ast-utils/package.json | 2 +- packages/transformers/babel/package.json | 2 +- .../transformers/coffeescript/package.json | 2 +- packages/transformers/css/package.json | 2 +- packages/transformers/js/package.json | 2 +- packages/transformers/less/package.json | 2 +- packages/transformers/sass/package.json | 2 +- packages/transformers/stylus/package.json | 2 +- .../typescript-types/package.json | 2 +- packages/transformers/vue/package.json | 2 +- yarn.lock | 77 ++++++++++--------- 20 files changed, 60 insertions(+), 55 deletions(-) diff --git a/packages/core/core/package.json b/packages/core/core/package.json index ab652393c41..b3a068ba872 100644 --- a/packages/core/core/package.json +++ b/packages/core/core/package.json @@ -33,7 +33,7 @@ "@parcel/logger": "2.0.0-rc.0", "@parcel/package-manager": "2.0.0-rc.0", "@parcel/plugin": "2.0.0-rc.0", - "@parcel/source-map": "2.0.0-rc.7", + "@parcel/source-map": "^2.0.0", "@parcel/types": "2.0.0-rc.0", "@parcel/utils": "2.0.0-rc.0", "@parcel/workers": "2.0.0-rc.0", diff --git a/packages/core/fs/package.json b/packages/core/fs/package.json index 0c011ef0623..0d7e1917a12 100644 --- a/packages/core/fs/package.json +++ b/packages/core/fs/package.json @@ -29,7 +29,7 @@ "@parcel/fs-write-stream-atomic": "2.0.0-rc.0", "@parcel/types": "2.0.0-rc.0", "@parcel/utils": "2.0.0-rc.0", - "@parcel/watcher": "2.0.0-alpha.10", + "@parcel/watcher": "^2.0.0", "@parcel/workers": "2.0.0-rc.0", "graceful-fs": "^4.2.4", "mkdirp": "^0.5.1", diff --git a/packages/core/types/package.json b/packages/core/types/package.json index fe1f0d45666..59ca991a7cd 100644 --- a/packages/core/types/package.json +++ b/packages/core/types/package.json @@ -20,7 +20,7 @@ "@parcel/diagnostic": "2.0.0-rc.0", "@parcel/fs": "2.0.0-rc.0", "@parcel/package-manager": "2.0.0-rc.0", - "@parcel/source-map": "2.0.0-rc.7", + "@parcel/source-map": "^2.0.0", "@parcel/workers": "2.0.0-rc.0", "utility-types": "^3.10.0" } diff --git a/packages/core/utils/package.json b/packages/core/utils/package.json index 781f9eaca97..dddd39ca988 100644 --- a/packages/core/utils/package.json +++ b/packages/core/utils/package.json @@ -26,7 +26,7 @@ "@parcel/hash": "2.0.0-rc.0", "@parcel/logger": "2.0.0-rc.0", "@parcel/markdown-ansi": "2.0.0-rc.0", - "@parcel/source-map": "2.0.0-rc.7", + "@parcel/source-map": "^2.0.0", "ansi-html-community": "0.0.8", "chalk": "^4.1.0", "clone": "^2.1.1", diff --git a/packages/optimizers/cssnano/package.json b/packages/optimizers/cssnano/package.json index c0b801a11ee..8fb7862c141 100644 --- a/packages/optimizers/cssnano/package.json +++ b/packages/optimizers/cssnano/package.json @@ -21,7 +21,7 @@ }, "dependencies": { "@parcel/plugin": "2.0.0-rc.0", - "@parcel/source-map": "2.0.0-rc.7", + "@parcel/source-map": "^2.0.0", "cssnano": "^5.0.5", "postcss": "^8.3.0" } diff --git a/packages/optimizers/esbuild/package.json b/packages/optimizers/esbuild/package.json index 23bb42609d0..da2172d7bab 100644 --- a/packages/optimizers/esbuild/package.json +++ b/packages/optimizers/esbuild/package.json @@ -22,7 +22,7 @@ "dependencies": { "@parcel/diagnostic": "2.0.0-rc.0", "@parcel/plugin": "2.0.0-rc.0", - "@parcel/source-map": "2.0.0-rc.7", + "@parcel/source-map": "^2.0.0", "@parcel/utils": "2.0.0-rc.0", "esbuild": "^0.8.11", "nullthrows": "^1.1.1" diff --git a/packages/optimizers/terser/package.json b/packages/optimizers/terser/package.json index 7f0b40fe80a..fcbfe184471 100644 --- a/packages/optimizers/terser/package.json +++ b/packages/optimizers/terser/package.json @@ -22,7 +22,7 @@ "dependencies": { "@parcel/diagnostic": "2.0.0-rc.0", "@parcel/plugin": "2.0.0-rc.0", - "@parcel/source-map": "2.0.0-rc.7", + "@parcel/source-map": "^2.0.0", "@parcel/utils": "2.0.0-rc.0", "nullthrows": "^1.1.1", "terser": "^5.2.0" diff --git a/packages/packagers/css/package.json b/packages/packagers/css/package.json index 65a7f04805b..2c20b4128ac 100644 --- a/packages/packagers/css/package.json +++ b/packages/packagers/css/package.json @@ -21,7 +21,7 @@ }, "dependencies": { "@parcel/plugin": "2.0.0-rc.0", - "@parcel/source-map": "2.0.0-rc.7", + "@parcel/source-map": "^2.0.0", "@parcel/utils": "2.0.0-rc.0", "nullthrows": "^1.1.1", "postcss": "^8.3.0" diff --git a/packages/packagers/js/package.json b/packages/packagers/js/package.json index 07ed2be57b0..52708b9fce3 100644 --- a/packages/packagers/js/package.json +++ b/packages/packagers/js/package.json @@ -23,7 +23,7 @@ "@parcel/diagnostic": "2.0.0-rc.0", "@parcel/hash": "2.0.0-rc.0", "@parcel/plugin": "2.0.0-rc.0", - "@parcel/source-map": "2.0.0-rc.7", + "@parcel/source-map": "^2.0.0", "@parcel/utils": "2.0.0-rc.0", "globals": "^13.2.0", "nullthrows": "^1.1.1" diff --git a/packages/shared/babel-ast-utils/package.json b/packages/shared/babel-ast-utils/package.json index cd30231e462..beec07cf70f 100644 --- a/packages/shared/babel-ast-utils/package.json +++ b/packages/shared/babel-ast-utils/package.json @@ -22,7 +22,7 @@ "dependencies": { "@babel/parser": "^7.0.0", "@parcel/babylon-walk": "2.0.0-rc.0", - "@parcel/source-map": "2.0.0-rc.7", + "@parcel/source-map": "^2.0.0", "@parcel/utils": "2.0.0-rc.0", "astring": "^1.6.2" } diff --git a/packages/transformers/babel/package.json b/packages/transformers/babel/package.json index 285574036c7..f736d6de124 100644 --- a/packages/transformers/babel/package.json +++ b/packages/transformers/babel/package.json @@ -28,7 +28,7 @@ "@parcel/babel-ast-utils": "2.0.0-rc.0", "@parcel/diagnostic": "2.0.0-rc.0", "@parcel/plugin": "2.0.0-rc.0", - "@parcel/source-map": "2.0.0-rc.7", + "@parcel/source-map": "^2.0.0", "@parcel/utils": "2.0.0-rc.0", "browserslist": "^4.6.6", "core-js": "^3.2.1", diff --git a/packages/transformers/coffeescript/package.json b/packages/transformers/coffeescript/package.json index b2888cb5ccb..2e6f5c31d9a 100644 --- a/packages/transformers/coffeescript/package.json +++ b/packages/transformers/coffeescript/package.json @@ -21,7 +21,7 @@ }, "dependencies": { "@parcel/plugin": "2.0.0-rc.0", - "@parcel/source-map": "2.0.0-rc.7", + "@parcel/source-map": "^2.0.0", "@parcel/utils": "2.0.0-rc.0", "coffeescript": "^2.0.3", "nullthrows": "^1.1.1", diff --git a/packages/transformers/css/package.json b/packages/transformers/css/package.json index 0a1a3a70f16..9f353ddd090 100644 --- a/packages/transformers/css/package.json +++ b/packages/transformers/css/package.json @@ -21,7 +21,7 @@ }, "dependencies": { "@parcel/plugin": "2.0.0-rc.0", - "@parcel/source-map": "2.0.0-rc.7", + "@parcel/source-map": "^2.0.0", "@parcel/utils": "2.0.0-rc.0", "nullthrows": "^1.1.1", "postcss": "^8.3.0", diff --git a/packages/transformers/js/package.json b/packages/transformers/js/package.json index 818e7d8766b..9ce2bb92cad 100644 --- a/packages/transformers/js/package.json +++ b/packages/transformers/js/package.json @@ -32,7 +32,7 @@ "dependencies": { "@parcel/diagnostic": "2.0.0-rc.0", "@parcel/plugin": "2.0.0-rc.0", - "@parcel/source-map": "2.0.0-rc.7", + "@parcel/source-map": "^2.0.0", "@parcel/utils": "2.0.0-rc.0", "@swc/helpers": "^0.2.11", "browserslist": "^4.6.6", diff --git a/packages/transformers/less/package.json b/packages/transformers/less/package.json index 6390677f667..999b0322d61 100644 --- a/packages/transformers/less/package.json +++ b/packages/transformers/less/package.json @@ -21,7 +21,7 @@ }, "dependencies": { "@parcel/plugin": "2.0.0-rc.0", - "@parcel/source-map": "2.0.0-rc.7", + "@parcel/source-map": "^2.0.0", "less": "^4.1.1" } } diff --git a/packages/transformers/sass/package.json b/packages/transformers/sass/package.json index eabeb59c87e..da7d591b33b 100644 --- a/packages/transformers/sass/package.json +++ b/packages/transformers/sass/package.json @@ -21,7 +21,7 @@ }, "dependencies": { "@parcel/plugin": "2.0.0-rc.0", - "@parcel/source-map": "2.0.0-rc.7", + "@parcel/source-map": "^2.0.0", "sass": "^1.38.0" } } diff --git a/packages/transformers/stylus/package.json b/packages/transformers/stylus/package.json index 2a46d2ebb09..4ba8e8e925e 100644 --- a/packages/transformers/stylus/package.json +++ b/packages/transformers/stylus/package.json @@ -22,6 +22,6 @@ "dependencies": { "@parcel/plugin": "2.0.0-rc.0", "@parcel/utils": "2.0.0-rc.0", - "stylus": "^0.54.5" + "stylus": "^0.55.0" } } diff --git a/packages/transformers/typescript-types/package.json b/packages/transformers/typescript-types/package.json index 3795d800e17..346346dd179 100644 --- a/packages/transformers/typescript-types/package.json +++ b/packages/transformers/typescript-types/package.json @@ -21,7 +21,7 @@ }, "dependencies": { "@parcel/plugin": "2.0.0-rc.0", - "@parcel/source-map": "2.0.0-rc.7", + "@parcel/source-map": "^2.0.0", "@parcel/ts-utils": "2.0.0-rc.0", "nullthrows": "^1.1.1" }, diff --git a/packages/transformers/vue/package.json b/packages/transformers/vue/package.json index 121a512c0d6..28f6cc02b4d 100644 --- a/packages/transformers/vue/package.json +++ b/packages/transformers/vue/package.json @@ -22,7 +22,7 @@ "dependencies": { "@parcel/diagnostic": "2.0.0-rc.0", "@parcel/plugin": "2.0.0-rc.0", - "@parcel/source-map": "2.0.0-rc.7", + "@parcel/source-map": "^2.0.0", "@parcel/utils": "2.0.0-rc.0", "@vue/compiler-sfc": "^3.0.0", "consolidate": "^0.16.0", diff --git a/yarn.lock b/yarn.lock index e7141948a8d..ec86f03282c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2129,21 +2129,21 @@ detect-libc "^1.0.3" globby "^11.0.3" -"@parcel/source-map@2.0.0-rc.7": - version "2.0.0-rc.7" - resolved "https://registry.yarnpkg.com/@parcel/source-map/-/source-map-2.0.0-rc.7.tgz#73e3251c2169abf733f28b5d6649eb440e39995f" - integrity sha512-LFTvZz8wSOfQAHtczr2PVMBa2gSBeWTivJf4TPQ7neHqECIgAL2GvuCGhETZqU1OYXlnzuxdsiWvDKQtrLiWgA== +"@parcel/source-map@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@parcel/source-map/-/source-map-2.0.0.tgz#41cf004109bbf277ceaf096a58838ff6a59af774" + integrity sha512-njoUJpj2646NebfHp5zKJeYD1KwhsfQIoU9TnCTHmF9fGOaPbClmeq12G6/4ZqGASftRq+YhhukFBi/ncWKGvw== dependencies: detect-libc "^1.0.3" globby "^11.0.3" -"@parcel/watcher@2.0.0-alpha.10": - version "2.0.0-alpha.10" - resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.0.0-alpha.10.tgz#99266189f5193512dbdf6b0faca20400c519a16e" - integrity sha512-8uA7Tmx/1XvmUdGzksg0+oN7uj24pXFFnKJqZr3L3mgYjdrL7CMs3PRIHv1k3LUz/hNRsb/p3qxztSkWz1IGZA== +"@parcel/watcher@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.0.0.tgz#ebe992a4838b35c3da9a568eb95a71cb26ddf551" + integrity sha512-ByalKmRRXNNAhwZ0X1r0XeIhh1jG8zgdlvjgHk9ZV3YxiersEGNQkwew+RfqJbIL4gOJfvC2ey6lg5kaeRainw== dependencies: - node-addon-api "^3.0.2" - node-gyp-build "^4.2.3" + node-addon-api "^3.2.1" + node-gyp-build "^4.3.0" "@sinonjs/commons@^1", "@sinonjs/commons@^1.3.0", "@sinonjs/commons@^1.4.0", "@sinonjs/commons@^1.7.0": version "1.7.0" @@ -4344,13 +4344,6 @@ css-parse@1.7.x: resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b" integrity sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs= -css-parse@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-2.0.0.tgz#a468ee667c16d81ccf05c58c38d2a97c780dbfd4" - integrity sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q= - dependencies: - css "^2.0.0" - css-select-base-adapter@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" @@ -4412,15 +4405,14 @@ css-what@^5.0.0: resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.0.1.tgz#3efa820131f4669a8ac2408f9c32e7c7de9f4cad" integrity sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg== -css@^2.0.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" - integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== +css@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/css/-/css-3.0.0.tgz#4447a4d58fdd03367c516ca9f64ae365cee4aa5d" + integrity sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ== dependencies: - inherits "^2.0.3" + inherits "^2.0.4" source-map "^0.6.1" - source-map-resolve "^0.5.2" - urix "^0.1.0" + source-map-resolve "^0.6.0" cssesc@^0.1.0: version "0.1.0" @@ -8834,12 +8826,12 @@ mkdirp-promise@^5.0.1: dependencies: mkdirp "*" -mkdirp@*, mkdirp@^1.0.4: +mkdirp@*, mkdirp@^1.0.4, mkdirp@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1, mkdirp@~0.5.x: +mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -9083,7 +9075,7 @@ node-addon-api@^1.7.1: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.1.tgz#cf813cd69bb8d9100f6bdca6755fc268f54ac492" integrity sha512-2+DuKodWvwRTrCfKOeR24KIc5unKjOh8mz17NCzVnHWfjAdDqbfbjqh7gUT+BkXBRQM52+xCHciKWonJ3CbJMQ== -node-addon-api@^3.0.2: +node-addon-api@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== @@ -9127,6 +9119,11 @@ node-gyp-build@^4.2.3: resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739" integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg== +node-gyp-build@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3" + integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q== + node-gyp@^5.0.2: version "5.0.7" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.0.7.tgz#dd4225e735e840cf2870e4037c2ed9c28a31719e" @@ -11932,7 +11929,7 @@ source-map-js@^0.6.2: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== -source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: +source-map-resolve@^0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== @@ -11943,6 +11940,14 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: source-map-url "^0.4.0" urix "^0.1.0" +source-map-resolve@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" + integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + source-map-support@^0.5.16, source-map-support@~0.5.19: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" @@ -12377,18 +12382,18 @@ stylus@0.54.5: sax "0.5.x" source-map "0.1.x" -stylus@^0.54.5: - version "0.54.7" - resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.7.tgz#c6ce4793965ee538bcebe50f31537bfc04d88cd2" - integrity sha512-Yw3WMTzVwevT6ZTrLCYNHAFmanMxdylelL3hkWNgPMeTCpMwpV3nXjpOHuBXtFv7aiO2xRuQS6OoAdgkNcSNug== +stylus@^0.55.0: + version "0.55.0" + resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.55.0.tgz#bd404a36dd93fa87744a9dd2d2b1b8450345e5fc" + integrity sha512-MuzIIVRSbc8XxHH7FjkvWqkIcr1BvoMZoR/oFuAJDlh7VSaNJzrB4uJ38GRQa+mWjLXODAMzeDe0xi9GYbGwnw== dependencies: - css-parse "~2.0.0" + css "^3.0.0" debug "~3.1.0" - glob "^7.1.3" - mkdirp "~0.5.x" + glob "^7.1.6" + mkdirp "~1.0.4" safer-buffer "^2.1.2" sax "~1.2.4" - semver "^6.0.0" + semver "^6.3.0" source-map "^0.7.3" sugarss@^3.0.3: From 5afe766e637827ede728ec7a9fefcfea691dfa35 Mon Sep 17 00:00:00 2001 From: Chris Wilkinson Date: Sat, 9 Oct 2021 21:02:24 +0100 Subject: [PATCH 32/68] Fail when unable to build a native package (#6962) --- scripts/build-native.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/scripts/build-native.js b/scripts/build-native.js index e4a8058bc8b..080b7d35c1e 100644 --- a/scripts/build-native.js +++ b/scripts/build-native.js @@ -34,9 +34,8 @@ async function build() { shell: true, }); - yarn.on('error', reject); - yarn.on('close', resolve); - }); + yarn.on('close', code => (code === 0 ? resolve() : reject())); + }).catch(() => process.exit(1)); } } From 4312b91df293d15ad8f659ac2434d0d18ff006bb Mon Sep 17 00:00:00 2001 From: Nova Date: Sun, 10 Oct 2021 18:23:47 +0100 Subject: [PATCH 33/68] Update Micromatch (#6958) --- packages/core/utils/package.json | 2 +- packages/utils/node-resolver-core/package.json | 2 +- .../utils/node-resolver-core/src/NodeResolver.js | 4 ++++ yarn.lock | 13 +++++++++++++ 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/packages/core/utils/package.json b/packages/core/utils/package.json index dddd39ca988..5ac7b4fdd2e 100644 --- a/packages/core/utils/package.json +++ b/packages/core/utils/package.json @@ -36,7 +36,7 @@ "is-url": "^1.2.2", "json5": "^1.0.1", "lru-cache": "^6.0.0", - "micromatch": "^3.0.4", + "micromatch": "^4.0.4", "node-forge": "^0.10.0", "nullthrows": "^1.1.1", "open": "^7.0.3", diff --git a/packages/utils/node-resolver-core/package.json b/packages/utils/node-resolver-core/package.json index 8a0b3140d43..7193f31b80d 100644 --- a/packages/utils/node-resolver-core/package.json +++ b/packages/utils/node-resolver-core/package.json @@ -22,7 +22,7 @@ "@parcel/diagnostic": "2.0.0-rc.0", "@parcel/node-libs-browser": "2.0.0-rc.0", "@parcel/utils": "2.0.0-rc.0", - "micromatch": "^3.0.4", + "micromatch": "^4.0.4", "nullthrows": "^1.1.1" } } diff --git a/packages/utils/node-resolver-core/src/NodeResolver.js b/packages/utils/node-resolver-core/src/NodeResolver.js index 469076fef86..6f54806974c 100644 --- a/packages/utils/node-resolver-core/src/NodeResolver.js +++ b/packages/utils/node-resolver-core/src/NodeResolver.js @@ -1083,6 +1083,10 @@ export default class NodeResolver { for (let key in aliases) { let val = aliases[key]; if (typeof val === 'string' && isGlob(key)) { + // https://github.com/micromatch/picomatch/issues/77 + if (filename.startsWith('./')) { + filename = filename.slice(2); + } let re = micromatch.makeRe(key, {capture: true}); if (re.test(filename)) { alias = filename.replace(re, val); diff --git a/yarn.lock b/yarn.lock index ec86f03282c..76a1ac8e93f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8674,6 +8674,14 @@ micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.0.5" +micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -9949,6 +9957,11 @@ picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== +picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" From 2175e1b74f574a84355d55ddfa914ae134daadef Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Tue, 12 Oct 2021 02:01:16 +0200 Subject: [PATCH 34/68] Mark '*' as used when the reexport is only decided at runtime (#7049) --- .../core/src/requests/AssetGraphRequest.js | 54 +++++++++++++++++-- .../es6/re-export-all-fallback-1/empty.js | 0 .../es6/re-export-all-fallback-1/index.js | 2 + .../es6/re-export-all-fallback-1/lib.js | 2 + .../es6/re-export-all-fallback-1/mergeWith.js | 1 + .../es6/re-export-all-fallback-1/other.js | 1 + .../es6/re-export-all-fallback-2/a.js | 1 + .../es6/re-export-all-fallback-2/b.js | 1 + .../es6/re-export-all-fallback-2/index.js | 3 ++ .../es6/re-export-all-fallback-2/lib.js | 2 + .../es6/re-export-all-fallback-3/async.js | 3 ++ .../es6/re-export-all-fallback-3/entry.js | 3 ++ .../es6/re-export-all-fallback-3/foo.js | 3 ++ .../re-export-all-fallback-3/other/index.js | 9 ++++ .../es6/re-export-all-fallback-3/package.json | 8 +++ .../re-export-all-fallback-3/re-exports.js | 4 ++ .../es6/re-export-all-fallback-3/rest/bar.js | 3 ++ .../re-export-all-fallback-3/rest/hello.js | 3 ++ .../re-export-all-fallback-3/rest/index.js | 5 ++ .../re-export-all-fallback-3/rest/myString.js | 3 ++ .../es6/re-export-all-fallback-3/stuff.js | 11 ++++ .../es6/re-export-all-fallback-3/yarn.lock | 0 .../es6/re-export-all-fallback-nested/a.js | 1 + .../es6/re-export-all-fallback-nested/b.js | 1 + .../es6/re-export-all-fallback-nested/c.js | 1 + .../es6/re-export-all-fallback-nested/d.js | 1 + .../re-export-all-fallback-nested/index.js | 4 ++ .../es6/re-export-all-fallback-nested/lib.js | 2 + .../es6/re-export-all-fallback-nested/lib1.js | 2 + .../es6/re-export-all-fallback-nested/lib2.js | 2 + .../integration-tests/test/scope-hoisting.js | 49 ++++++++++++++++- .../packagers/js/src/ScopeHoistingPackager.js | 6 ++- 32 files changed, 186 insertions(+), 5 deletions(-) create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-1/empty.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-1/index.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-1/lib.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-1/mergeWith.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-1/other.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-2/a.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-2/b.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-2/index.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-2/lib.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/async.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/entry.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/foo.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/other/index.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/package.json create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/re-exports.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/rest/bar.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/rest/hello.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/rest/index.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/rest/myString.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/stuff.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/yarn.lock create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/a.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/b.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/c.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/d.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/index.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/lib.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/lib1.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/lib2.js diff --git a/packages/core/core/src/requests/AssetGraphRequest.js b/packages/core/core/src/requests/AssetGraphRequest.js index dd051332785..95b8b32ba2e 100644 --- a/packages/core/core/src/requests/AssetGraphRequest.js +++ b/packages/core/core/src/requests/AssetGraphRequest.js @@ -24,6 +24,7 @@ import invariant from 'assert'; import nullthrows from 'nullthrows'; import {PromiseQueue} from '@parcel/utils'; import {hashString} from '@parcel/hash'; +import logger from '@parcel/logger'; import ThrowableDiagnostic, {md} from '@parcel/diagnostic'; import {BundleBehavior, Priority} from '../types'; import AssetGraph from '../AssetGraph'; @@ -401,6 +402,26 @@ export class AssetGraphBuilder { } }); + const logFallbackNamespaceInsertion = ( + assetNode, + symbol, + depNode1, + depNode2, + ) => { + if (this.options.logLevel === 'verbose') { + logger.warn({ + message: `${fromProjectPathRelative( + assetNode.value.filePath, + )} reexports "${symbol}", which could be resolved either to the dependency "${ + depNode1.value.specifier + }" or "${ + depNode2.value.specifier + }" at runtime. Adding a namespace object to fall back on.`, + origin: '@parcel/core', + }); + } + }; + // Because namespace reexports introduce ambiguity, go up the graph from the leaves to the // root and remove requested symbols that aren't actually exported this.propagateSymbolsUp((assetNode, incomingDeps, outgoingDeps) => { @@ -424,7 +445,9 @@ export class AssetGraphBuilder { } } - let reexportedSymbols = new Set(); + // the symbols that are reexport (not used in `asset`) -> the corresponding outgoingDep(s) + // There could be multiple dependencies with non-statically analyzable exports + let reexportedSymbols = new Map(); for (let outgoingDep of outgoingDeps) { let outgoingDepSymbols = outgoingDep.value.symbols; if (!outgoingDepSymbols) continue; @@ -441,7 +464,20 @@ export class AssetGraphBuilder { } if (outgoingDepSymbols.get('*')?.local === '*') { - outgoingDep.usedSymbolsUp.forEach(s => reexportedSymbols.add(s)); + outgoingDep.usedSymbolsUp.forEach(s => { + // If the symbol could come from multiple assets at runtime, assetNode's + // namespace will be needed at runtime to perform the lookup on. + if (reexportedSymbols.has(s) && !assetNode.usedSymbols.has('*')) { + logFallbackNamespaceInsertion( + assetNode, + s, + nullthrows(reexportedSymbols.get(s)), + outgoingDep, + ); + assetNode.usedSymbols.add('*'); + } + reexportedSymbols.set(s, outgoingDep); + }); } for (let s of outgoingDep.usedSymbolsUp) { @@ -458,7 +494,19 @@ export class AssetGraphBuilder { let reexported = assetSymbolsInverse?.get(local); if (reexported != null) { - reexported.forEach(s => reexportedSymbols.add(s)); + reexported.forEach(s => { + // see same code above + if (reexportedSymbols.has(s) && !assetNode.usedSymbols.has('*')) { + logFallbackNamespaceInsertion( + assetNode, + s, + nullthrows(reexportedSymbols.get(s)), + outgoingDep, + ); + assetNode.usedSymbols.add('*'); + } + reexportedSymbols.set(s, outgoingDep); + }); } } } diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-1/empty.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-1/empty.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-1/index.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-1/index.js new file mode 100644 index 00000000000..2b1c9f26a96 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-1/index.js @@ -0,0 +1,2 @@ +import { mergeWith } from "./lib"; +output = mergeWith; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-1/lib.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-1/lib.js new file mode 100644 index 00000000000..8a1e438a54b --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-1/lib.js @@ -0,0 +1,2 @@ +export * from "./other"; +export * from "./empty"; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-1/mergeWith.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-1/mergeWith.js new file mode 100644 index 00000000000..4bbffde1044 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-1/mergeWith.js @@ -0,0 +1 @@ +module.exports = 2; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-1/other.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-1/other.js new file mode 100644 index 00000000000..d862a6ea17b --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-1/other.js @@ -0,0 +1 @@ +export { default as mergeWith } from "./mergeWith"; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-2/a.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-2/a.js new file mode 100644 index 00000000000..3b75bcaca3e --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-2/a.js @@ -0,0 +1 @@ +module.exports = { a: 1 }; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-2/b.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-2/b.js new file mode 100644 index 00000000000..f95f140aaf7 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-2/b.js @@ -0,0 +1 @@ +module.exports = { b: 2 }; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-2/index.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-2/index.js new file mode 100644 index 00000000000..cd93affa04f --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-2/index.js @@ -0,0 +1,3 @@ +import { b } from "./lib"; + +output = b; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-2/lib.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-2/lib.js new file mode 100644 index 00000000000..3ebcd0b9763 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-2/lib.js @@ -0,0 +1,2 @@ +export * from "./a"; +export * from "./b"; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/async.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/async.js new file mode 100644 index 00000000000..43497bd93f8 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/async.js @@ -0,0 +1,3 @@ +import { FOO } from './re-exports'; + +sideEffectNoop(FOO) diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/entry.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/entry.js new file mode 100644 index 00000000000..b1436b046f8 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/entry.js @@ -0,0 +1,3 @@ +import {doStuff} from './stuff'; + +output = doStuff(); diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/foo.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/foo.js new file mode 100644 index 00000000000..ff0ae0bacd0 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/foo.js @@ -0,0 +1,3 @@ +//@flow + +export const FOO = 'FOO'; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/other/index.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/other/index.js new file mode 100644 index 00000000000..111138fb70e --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/other/index.js @@ -0,0 +1,9 @@ +//@flow + +import {FOO, BAR, type MyString} from "../re-exports"; + +const myFunc = (): MyString => FOO + BAR; + +let res = myFunc(); + +export const fooBar = (): MyString => res; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/package.json b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/package.json new file mode 100644 index 00000000000..96cbe11e1f0 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/package.json @@ -0,0 +1,8 @@ +{ + "dependencies": { + "flow-bin": "0.157.0" + }, + "sideEffects": [ + "entry.js" + ] +} diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/re-exports.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/re-exports.js new file mode 100644 index 00000000000..f30dd87704d --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/re-exports.js @@ -0,0 +1,4 @@ +//@flow + +export * from './foo'; +export * from './rest'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/rest/bar.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/rest/bar.js new file mode 100644 index 00000000000..d69171edbdd --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/rest/bar.js @@ -0,0 +1,3 @@ +//@flow + +export const BAR = 'BAR'; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/rest/hello.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/rest/hello.js new file mode 100644 index 00000000000..7a2f7d24912 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/rest/hello.js @@ -0,0 +1,3 @@ +//@flow + +export type Hello = 1 | 2; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/rest/index.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/rest/index.js new file mode 100644 index 00000000000..4fb4d9d3d1d --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/rest/index.js @@ -0,0 +1,5 @@ +//@flow + +export * from './bar'; +export * from './myString'; +export * from './hello'; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/rest/myString.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/rest/myString.js new file mode 100644 index 00000000000..d0e06098035 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/rest/myString.js @@ -0,0 +1,3 @@ +//@flow + +export type MyString = string; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/stuff.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/stuff.js new file mode 100644 index 00000000000..2e871178bbe --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/stuff.js @@ -0,0 +1,11 @@ +//@flow + +import {fooBar} from './other' +import {FOO, BAR, type MyString} from './re-exports' +import("./async"); + +const res = (): MyString => fooBar() + "!"; +// $FlowFixMe +sideEffectNoop(res()); + +export const doStuff = res; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/yarn.lock b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-3/yarn.lock new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/a.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/a.js new file mode 100644 index 00000000000..3b75bcaca3e --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/a.js @@ -0,0 +1 @@ +module.exports = { a: 1 }; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/b.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/b.js new file mode 100644 index 00000000000..f95f140aaf7 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/b.js @@ -0,0 +1 @@ +module.exports = { b: 2 }; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/c.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/c.js new file mode 100644 index 00000000000..9d7553fb433 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/c.js @@ -0,0 +1 @@ +module.exports = { c: 3 }; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/d.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/d.js new file mode 100644 index 00000000000..f7e1e8a3d36 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/d.js @@ -0,0 +1 @@ +module.exports = { d: 4 }; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/index.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/index.js new file mode 100644 index 00000000000..d50b11090a7 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/index.js @@ -0,0 +1,4 @@ +import { b } from "./lib"; +import { d } from "./lib2"; + +output = `${b} ${d}` diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/lib.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/lib.js new file mode 100644 index 00000000000..83590708a85 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/lib.js @@ -0,0 +1,2 @@ +export * from "./lib1"; +export * from "./lib2"; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/lib1.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/lib1.js new file mode 100644 index 00000000000..3ebcd0b9763 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/lib1.js @@ -0,0 +1,2 @@ +export * from "./a"; +export * from "./b"; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/lib2.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/lib2.js new file mode 100644 index 00000000000..0f33339cfec --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/re-export-all-fallback-nested/lib2.js @@ -0,0 +1,2 @@ +export * from "./c"; +export * from "./d"; diff --git a/packages/core/integration-tests/test/scope-hoisting.js b/packages/core/integration-tests/test/scope-hoisting.js index 13cce7e853b..0e408ac46f4 100644 --- a/packages/core/integration-tests/test/scope-hoisting.js +++ b/packages/core/integration-tests/test/scope-hoisting.js @@ -261,6 +261,53 @@ describe('scope hoisting', function() { assert.equal(output, 6); }); + it('supports re-exporting all when falling back to namespace at runtime 1', async function() { + let b = await bundle( + path.join( + __dirname, + '/integration/scope-hoisting/es6/re-export-all-fallback-1/index.js', + ), + ); + + let output = await run(b); + assert.strictEqual(output, 2); + }); + + it('supports re-exporting all when falling back to namespace at runtime 2', async function() { + let b = await bundle( + path.join( + __dirname, + '/integration/scope-hoisting/es6/re-export-all-fallback-2/index.js', + ), + ); + + let output = await run(b); + assert.strictEqual(output, 2); + }); + + it('supports re-exporting all when falling back to namespace at runtime 3', async function() { + let b = await bundle( + path.join( + __dirname, + 'integration/scope-hoisting/es6/re-export-all-fallback-3/entry.js', + ), + ); + let output = await run(b); + assert.strictEqual(output, 'FOOBAR!'); + }); + + it('supports nested re-exporting all when falling back to namespace at runtime', async function() { + let b = await bundle( + path.join( + __dirname, + '/integration/scope-hoisting/es6/re-export-all-fallback-nested/index.js', + ), + ); + + let output = await run(b); + assert.strictEqual(output, '2 4'); + }); + it('supports re-exporting all exports from an external module', async function() { let b = await bundle( path.join( @@ -3293,7 +3340,7 @@ describe('scope hoisting', function() { }, }); - assert.deepEqual(calls, ['esm', 'commonjs']); + assert.deepEqual(calls, ['esm', 'commonjs', 'index']); assert.deepEqual(output, 'Message 1'); }); diff --git a/packages/packagers/js/src/ScopeHoistingPackager.js b/packages/packagers/js/src/ScopeHoistingPackager.js index 823552a303a..1e6d7e29a7c 100644 --- a/packages/packagers/js/src/ScopeHoistingPackager.js +++ b/packages/packagers/js/src/ScopeHoistingPackager.js @@ -978,7 +978,10 @@ ${code} if ( isWrapped || resolved.meta.staticExports === false || - nullthrows(this.bundleGraph.getUsedSymbols(resolved)).has('*') + nullthrows(this.bundleGraph.getUsedSymbols(resolved)).has('*') || + // an empty asset + (!resolved.meta.hasCJSExports && + resolved.symbols.hasExportSymbol('*')) ) { let obj = this.getSymbolResolution(asset, resolved, '*', dep); append += `$parcel$exportWildcard($${assetId}$exports, ${obj});\n`; @@ -1007,6 +1010,7 @@ ${code} prepend += `$parcel$export($${assetId}$exports, ${JSON.stringify( symbol, )}, ${get}${set});\n`; + this.usedHelpers.add('$parcel$export'); prependLineCount++; } } From bea9442267a7fcf9062fe58d1f8875fbc0493adb Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Tue, 12 Oct 2021 02:02:04 +0200 Subject: [PATCH 35/68] Fix named export with different export name for wrapped assets (#7052) --- .../named-export-variable-rename-wrapped/a.js | 3 +++ .../named-export-variable-rename-wrapped/b.js | 2 ++ .../es6/named-export-variable-rename/a.js | 3 +++ .../es6/named-export-variable-rename/b.js | 2 ++ .../integration-tests/test/scope-hoisting.js | 23 +++++++++++++++++++ packages/transformers/js/core/src/hoist.rs | 9 ++++---- 6 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/named-export-variable-rename-wrapped/a.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/named-export-variable-rename-wrapped/b.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/named-export-variable-rename/a.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/named-export-variable-rename/b.js diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/named-export-variable-rename-wrapped/a.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/named-export-variable-rename-wrapped/a.js new file mode 100644 index 00000000000..229761a608f --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/named-export-variable-rename-wrapped/a.js @@ -0,0 +1,3 @@ +import {foo} from './b'; + +output = foo; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/named-export-variable-rename-wrapped/b.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/named-export-variable-rename-wrapped/b.js new file mode 100644 index 00000000000..35602d134e0 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/named-export-variable-rename-wrapped/b.js @@ -0,0 +1,2 @@ +var bar = module && 2; +export {bar as foo}; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/named-export-variable-rename/a.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/named-export-variable-rename/a.js new file mode 100644 index 00000000000..229761a608f --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/named-export-variable-rename/a.js @@ -0,0 +1,3 @@ +import {foo} from './b'; + +output = foo; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/named-export-variable-rename/b.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/named-export-variable-rename/b.js new file mode 100644 index 00000000000..bfe56e11c81 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/named-export-variable-rename/b.js @@ -0,0 +1,2 @@ +var bar = 2; +export {bar as foo}; diff --git a/packages/core/integration-tests/test/scope-hoisting.js b/packages/core/integration-tests/test/scope-hoisting.js index 0e408ac46f4..f037b9dc871 100644 --- a/packages/core/integration-tests/test/scope-hoisting.js +++ b/packages/core/integration-tests/test/scope-hoisting.js @@ -123,6 +123,29 @@ describe('scope hoisting', function() { assert.equal(output, 2); }); + it('supports named exports of variables with a different name', async function() { + let b = await bundle( + path.join( + __dirname, + '/integration/scope-hoisting/es6/named-export-variable-rename/a.js', + ), + ); + + let output = await run(b); + assert.equal(output, 2); + }); + it('supports named exports of variables with a different name when wrapped', async function() { + let b = await bundle( + path.join( + __dirname, + '/integration/scope-hoisting/es6/named-export-variable-rename-wrapped/a.js', + ), + ); + + let output = await run(b); + assert.equal(output, 2); + }); + it('supports renaming non-ASCII identifiers', async function() { let b = await bundle( path.join( diff --git a/packages/transformers/js/core/src/hoist.rs b/packages/transformers/js/core/src/hoist.rs index ec0e648a712..f0ca7b13481 100644 --- a/packages/transformers/js/core/src/hoist.rs +++ b/packages/transformers/js/core/src/hoist.rs @@ -268,14 +268,15 @@ impl<'a> Fold for Hoist<'a> { // A variable will appear only once in the `exports` mapping but // could be exported multiple times with different names. // Find the original exported name, and remap. - let orig_exported = self.collect.exports.get(&id).unwrap(); let id = if self.collect.should_wrap { - Ident::new(orig_exported.clone(), DUMMY_SP) + id.0 } else { - self.get_export_ident(DUMMY_SP, orig_exported) + self + .get_export_ident(DUMMY_SP, self.collect.exports.get(&id).unwrap()) + .sym }; self.exported_symbols.push(ExportedSymbol { - local: id.sym, + local: id, exported, loc: SourceLocation::from(&self.collect.source_map, named.span), }); From dbe1153d144c155a418786c618217fd4931715f9 Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Mon, 11 Oct 2021 18:36:49 -0700 Subject: [PATCH 36/68] Fix order of hoisted variable declarations (#7053) --- packages/transformers/js/core/src/hoist.rs | 120 +++++++++++---------- 1 file changed, 66 insertions(+), 54 deletions(-) diff --git a/packages/transformers/js/core/src/hoist.rs b/packages/transformers/js/core/src/hoist.rs index f0ca7b13481..6b37bb45f2a 100644 --- a/packages/transformers/js/core/src/hoist.rs +++ b/packages/transformers/js/core/src/hoist.rs @@ -75,6 +75,7 @@ struct Hoist<'a> { collect: &'a Collect, module_items: Vec, export_decls: HashSet, + hoisted_imports: Vec, imported_symbols: Vec, exported_symbols: Vec, re_exports: Vec, @@ -105,6 +106,7 @@ impl<'a> Hoist<'a> { collect, module_items: vec![], export_decls: HashSet::new(), + hoisted_imports: vec![], imported_symbols: vec![], exported_symbols: vec![], re_exports: vec![], @@ -146,24 +148,25 @@ macro_rules! hoist_visit_fn { impl<'a> Fold for Hoist<'a> { fn fold_module(&mut self, node: Module) -> Module { let mut node = node; - let mut hoisted_imports = vec![]; for item in node.body { match item { ModuleItem::ModuleDecl(decl) => { match decl { ModuleDecl::Import(import) => { - hoisted_imports.push(ModuleItem::ModuleDecl(ModuleDecl::Import(ImportDecl { - specifiers: vec![], - asserts: None, - span: DUMMY_SP, - src: Str { - value: format!("{}:{}", self.module_id, import.src.value).into(), + self + .hoisted_imports + .push(ModuleItem::ModuleDecl(ModuleDecl::Import(ImportDecl { + specifiers: vec![], + asserts: None, span: DUMMY_SP, - kind: StrKind::Synthesized, - has_escape: false, - }, - type_only: false, - }))); + src: Str { + value: format!("{}:{}", self.module_id, import.src.value).into(), + span: DUMMY_SP, + kind: StrKind::Synthesized, + has_escape: false, + }, + type_only: false, + }))); // Ensure that all import specifiers are constant. for specifier in &import.specifiers { @@ -201,18 +204,20 @@ impl<'a> Fold for Hoist<'a> { ModuleDecl::ExportNamed(export) => { if let Some(src) = export.src { // TODO: skip if already imported. - hoisted_imports.push(ModuleItem::ModuleDecl(ModuleDecl::Import(ImportDecl { - specifiers: vec![], - asserts: None, - span: DUMMY_SP, - src: Str { - value: format!("{}:{}", self.module_id, src.value).into(), + self + .hoisted_imports + .push(ModuleItem::ModuleDecl(ModuleDecl::Import(ImportDecl { + specifiers: vec![], + asserts: None, span: DUMMY_SP, - kind: StrKind::Synthesized, - has_escape: false, - }, - type_only: false, - }))); + src: Str { + value: format!("{}:{}", self.module_id, src.value).into(), + span: DUMMY_SP, + kind: StrKind::Synthesized, + has_escape: false, + }, + type_only: false, + }))); for specifier in export.specifiers { match specifier { @@ -286,18 +291,20 @@ impl<'a> Fold for Hoist<'a> { } } ModuleDecl::ExportAll(export) => { - hoisted_imports.push(ModuleItem::ModuleDecl(ModuleDecl::Import(ImportDecl { - specifiers: vec![], - asserts: None, - span: DUMMY_SP, - src: Str { - value: format!("{}:{}", self.module_id, export.src.value).into(), + self + .hoisted_imports + .push(ModuleItem::ModuleDecl(ModuleDecl::Import(ImportDecl { + specifiers: vec![], + asserts: None, span: DUMMY_SP, - kind: StrKind::Synthesized, - has_escape: false, - }, - type_only: false, - }))); + src: Str { + value: format!("{}:{}", self.module_id, export.src.value).into(), + span: DUMMY_SP, + kind: StrKind::Synthesized, + has_escape: false, + }, + type_only: false, + }))); self.re_exports.push(ImportedSymbol { source: export.src.value, local: "*".into(), @@ -522,21 +529,9 @@ impl<'a> Fold for Hoist<'a> { } } - for name in self.export_decls.drain() { - hoisted_imports.push(ModuleItem::Stmt(Stmt::Decl(Decl::Var(VarDecl { - declare: false, - kind: VarDeclKind::Var, - span: node.span, - decls: vec![VarDeclarator { - definite: false, - span: node.span, - name: Pat::Ident(BindingIdent::from(Ident::new(name, DUMMY_SP))), - init: None, - }], - })))); - } - - self.module_items.splice(0..0, hoisted_imports); + self + .module_items + .splice(0..0, self.hoisted_imports.drain(0..)); node.body = std::mem::take(&mut self.module_items); node } @@ -922,7 +917,24 @@ impl<'a> Fold for Hoist<'a> { let ident = BindingIdent::from(self.get_export_ident(member.span, &key)); if self.collect.static_cjs_exports { - self.export_decls.insert(ident.id.sym.clone()); + if self.export_decls.insert(ident.id.sym.clone()) { + self + .hoisted_imports + .push(ModuleItem::Stmt(Stmt::Decl(Decl::Var(VarDecl { + declare: false, + kind: VarDeclKind::Var, + span: node.span, + decls: vec![VarDeclarator { + definite: false, + span: node.span, + name: Pat::Ident(BindingIdent::from(Ident::new( + ident.id.sym.clone(), + DUMMY_SP, + ))), + init: None, + }], + })))); + } } return AssignExpr { @@ -1070,7 +1082,7 @@ impl<'a> Hoist<'a> { // a local variable referencing them so that we can safely re-assign the local variable // without affecting the original export. This is only possible in CommonJS since ESM // imports are constant (this is ensured by the diagnostic in fold_module above). - let mut non_const_bindings = HashSet::new(); + let mut non_const_bindings = vec![]; self .collect .get_non_const_binding_idents(&v.name, &mut non_const_bindings); @@ -1850,11 +1862,11 @@ impl Collect { } } - fn get_non_const_binding_idents(&self, node: &Pat, idents: &mut HashSet) { + fn get_non_const_binding_idents(&self, node: &Pat, idents: &mut Vec) { match node { Pat::Ident(ident) => { if self.non_const_bindings.contains_key(&id!(ident.id)) { - idents.insert(ident.id.clone()); + idents.push(ident.id.clone()); } } Pat::Object(object) => { @@ -1865,7 +1877,7 @@ impl Collect { } ObjectPatProp::Assign(assign) => { if self.non_const_bindings.contains_key(&id!(assign.key)) { - idents.insert(assign.key.clone()); + idents.push(assign.key.clone()); } } ObjectPatProp::Rest(rest) => { From 2c83842687bda59beaa8e108cc30da6ea26b6a86 Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Tue, 12 Oct 2021 14:25:16 -0700 Subject: [PATCH 37/68] Fix scope resolution for TS enums (#7057) --- .../test/integration/typescript-enum/index.ts | 19 ++++++++++++ .../core/integration-tests/test/typescript.js | 31 +++++++++++++++++++ packages/transformers/js/core/src/lib.rs | 7 +++-- 3 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 packages/core/integration-tests/test/integration/typescript-enum/index.ts diff --git a/packages/core/integration-tests/test/integration/typescript-enum/index.ts b/packages/core/integration-tests/test/integration/typescript-enum/index.ts new file mode 100644 index 00000000000..bb5eb44e9cb --- /dev/null +++ b/packages/core/integration-tests/test/integration/typescript-enum/index.ts @@ -0,0 +1,19 @@ +export enum A { + X = 'X', + Y = 'Y', +} + +export enum B { + X = 'X', + Y = 'Y', +} + +export enum C { + X = 'X', + Y = 'Y', +} + +export const z = { + a: A.X, + c: C.Y, +}; diff --git a/packages/core/integration-tests/test/typescript.js b/packages/core/integration-tests/test/typescript.js index 619f92104ae..79f2e5e915f 100644 --- a/packages/core/integration-tests/test/typescript.js +++ b/packages/core/integration-tests/test/typescript.js @@ -203,5 +203,36 @@ describe('typescript', function() { {config}, ); }); + + it('should handle compile enums correctly', async function() { + if (config != null) { + return; + } + let b = await bundle( + path.join(__dirname, '/integration/typescript-enum/index.ts'), + {config}, + ); + + let output = await run(b); + + assert.deepEqual(output, { + A: { + X: 'X', + Y: 'Y', + }, + B: { + X: 'X', + Y: 'Y', + }, + C: { + X: 'X', + Y: 'Y', + }, + z: { + a: 'X', + c: 'Y', + }, + }); + }); } }); diff --git a/packages/transformers/js/core/src/lib.rs b/packages/transformers/js/core/src/lib.rs index 39e7e56a266..2d616ee0eb9 100644 --- a/packages/transformers/js/core/src/lib.rs +++ b/packages/transformers/js/core/src/lib.rs @@ -253,10 +253,9 @@ pub fn transform(config: Config) -> Result { let global_mark = Mark::fresh(Mark::root()); let ignore_mark = Mark::fresh(Mark::root()); - module = module.fold_with(&mut resolver_with_mark(global_mark)); - module = { let mut passes = chain!( + resolver_with_mark(global_mark), Optional::new( react::react( source_map.clone(), @@ -275,7 +274,9 @@ pub fn transform(config: Config) -> Result { }), config.decorators ), - Optional::new(typescript::strip(), config.is_type_script) + Optional::new(typescript::strip(), config.is_type_script), + // Run resolver again. TS pass messes things up. + resolver_with_mark(global_mark), ); module.fold_with(&mut passes) From c78601b90ca7aeb87a8a38b6221766cebbb09c71 Mon Sep 17 00:00:00 2001 From: Will Binns-Smith Date: Tue, 12 Oct 2021 15:10:58 -0700 Subject: [PATCH 38/68] shouldVisitChild: Check parent and child node previously deferred separately (#7043) --- packages/core/core/src/AssetGraph.js | 20 ++++---- .../unmarks-defer-for-assetgroup/index1.js | 3 ++ .../unmarks-defer-for-assetgroup/index2.js | 3 ++ .../unmarks-defer-for-assetgroup/index3.js | 3 ++ .../package/bar.js | 1 + .../package/barer.js | 1 + .../package/foo.js | 1 + .../package/index.js | 5 ++ .../package/package.json | 3 ++ .../integration-tests/test/scope-hoisting.js | 48 +++++++++++++++++++ 10 files changed, 80 insertions(+), 8 deletions(-) create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/index1.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/index2.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/index3.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/package/bar.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/package/barer.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/package/foo.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/package/index.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/package/package.json diff --git a/packages/core/core/src/AssetGraph.js b/packages/core/core/src/AssetGraph.js index e5d11df7e59..91ddf582faa 100644 --- a/packages/core/core/src/AssetGraph.js +++ b/packages/core/core/src/AssetGraph.js @@ -301,17 +301,21 @@ export default class AssetGraph extends ContentGraph { ) { return true; } - - let {sideEffects, canDefer = true} = childNode.value; - let dependency = node.value; - let previouslyDeferred = node.hasDeferred; + // Node types are proved above + let dependencyNode = node; + let assetGroupNode = childNode; + + let {sideEffects, canDefer = true} = assetGroupNode.value; + let dependency = dependencyNode.value; + let dependencyPreviouslyDeferred = dependencyNode.hasDeferred; + let assetGroupPreviouslyDeferred = assetGroupNode.deferred; let defer = this.shouldDeferDependency(dependency, sideEffects, canDefer); - node.hasDeferred = defer; - childNode.deferred = defer; + dependencyNode.hasDeferred = defer; + assetGroupNode.deferred = defer; - if (!previouslyDeferred && defer) { + if (!dependencyPreviouslyDeferred && defer) { this.markParentsWithHasDeferred(nodeId); - } else if (previouslyDeferred && !defer) { + } else if (assetGroupPreviouslyDeferred && !defer) { this.unmarkParentsWithHasDeferred(childNodeId); } diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/index1.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/index1.js new file mode 100644 index 00000000000..233715f298a --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/index1.js @@ -0,0 +1,3 @@ +import { barer } from './package'; + +output = barer; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/index2.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/index2.js new file mode 100644 index 00000000000..2bd05a28892 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/index2.js @@ -0,0 +1,3 @@ +import { barer, foo } from './package'; + +output = `${barer} ${foo}`; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/index3.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/index3.js new file mode 100644 index 00000000000..e0f57a6444a --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/index3.js @@ -0,0 +1,3 @@ +import { barer, foo, bar } from './package'; + +output = `${barer} ${foo} ${bar}`; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/package/bar.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/package/bar.js new file mode 100644 index 00000000000..9f17386851f --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/package/bar.js @@ -0,0 +1 @@ +export const bar = 'bar'; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/package/barer.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/package/barer.js new file mode 100644 index 00000000000..e03e7e8a0f9 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/package/barer.js @@ -0,0 +1 @@ +export {bar as barer} from "./bar"; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/package/foo.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/package/foo.js new file mode 100644 index 00000000000..3329a7d972f --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/package/foo.js @@ -0,0 +1 @@ +export const foo = 'foo'; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/package/index.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/package/index.js new file mode 100644 index 00000000000..db9e146a9e5 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/package/index.js @@ -0,0 +1,5 @@ +export {foo} from './foo'; +export {bar} from './bar'; +export {barer} from './barer'; + +sideEffectNoop(module); diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/package/package.json b/packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/package/package.json new file mode 100644 index 00000000000..c526b96ffdf --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/unmarks-defer-for-assetgroup/package/package.json @@ -0,0 +1,3 @@ +{ + "sideEffects": ["index.js"] +} diff --git a/packages/core/integration-tests/test/scope-hoisting.js b/packages/core/integration-tests/test/scope-hoisting.js index f037b9dc871..043915e08bc 100644 --- a/packages/core/integration-tests/test/scope-hoisting.js +++ b/packages/core/integration-tests/test/scope-hoisting.js @@ -6034,4 +6034,52 @@ describe('scope hoisting', function() { shouldDisableCache: false, }); }); + + it('unmark an asset group as deferred when it becomes used', async function() { + let testDir = path.join( + __dirname, + 'integration/scope-hoisting/es6/unmarks-defer-for-assetgroup', + ); + + await overlayFS.mkdirp(testDir); + await overlayFS.copyFile( + path.join(testDir, 'index1.js'), + path.join(testDir, 'index.js'), + ); + + let b = await bundle(path.join(testDir, 'index.js'), { + inputFS: overlayFS, + outputFS: overlayFS, + shouldDisableCache: true, + }); + + await run(b); + + await overlayFS.copyFile( + path.join(testDir, 'index2.js'), + path.join(testDir, 'index.js'), + ); + + b = await bundle(path.join(testDir, 'index.js'), { + inputFS: overlayFS, + outputFS: overlayFS, + shouldDisableCache: false, + }); + + await run(b); + + await overlayFS.copyFile( + path.join(testDir, 'index3.js'), + path.join(testDir, 'index.js'), + ); + + b = await bundle(path.join(testDir, 'index.js'), { + inputFS: overlayFS, + outputFS: overlayFS, + shouldDisableCache: false, + }); + + let output = await run(b); + assert.strictEqual(output, 'bar foo bar'); + }); }); From aa0a369e16e20e3348807093911385c93aa9f4c0 Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Tue, 12 Oct 2021 19:08:38 -0700 Subject: [PATCH 39/68] Small copy change --- packages/core/parcel/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/parcel/README.md b/packages/core/parcel/README.md index 05297619078..86b35105722 100644 --- a/packages/core/parcel/README.md +++ b/packages/core/parcel/README.md @@ -11,7 +11,7 @@ [![Discord](https://img.shields.io/discord/894288336095690753)](https://discord.gg/XSCzqGRuvr) [![Twitter Follow](https://img.shields.io/twitter/follow/parceljs.svg?style=social)](https://twitter.com/parceljs) -Parcel is a zero configuration build tool for the web. It combines a great out-of-the-box development experience with a scalable architecture that can take your project from just getting started to massive business-critical application. +Parcel is a zero configuration build tool for the web. It combines a great out-of-the-box development experience with a scalable architecture that can take your project from just getting started to massive production application. ## Features From 84da50ae6943bff9741e2fc76d2f4968074cbbd6 Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Tue, 12 Oct 2021 19:16:08 -0700 Subject: [PATCH 40/68] v2.0.0 --- package.json | 2 +- packages/bundlers/default/package.json | 12 +- packages/compressors/brotli/package.json | 6 +- packages/compressors/gzip/package.json | 6 +- packages/compressors/raw/package.json | 6 +- packages/configs/default/package.json | 110 +++++++++--------- packages/configs/webextension/package.json | 8 +- packages/core/cache/package.json | 8 +- packages/core/codeframe/package.json | 2 +- packages/core/core/package.json | 26 ++--- packages/core/diagnostic/package.json | 2 +- packages/core/fs/package.json | 14 +-- packages/core/graph/package.json | 2 +- packages/core/integration-tests/package.json | 4 +- .../package.json | 2 +- packages/core/is-v2-ready-yet/package.json | 4 +- packages/core/logger/package.json | 6 +- packages/core/markdown-ansi/package.json | 2 +- packages/core/package-manager/package.json | 16 +-- packages/core/parcel/package.json | 24 ++-- packages/core/plugin/package.json | 4 +- packages/core/register/package.json | 10 +- packages/core/test-utils/package.json | 12 +- packages/core/types/package.json | 12 +- packages/core/utils/package.json | 12 +- packages/core/workers/package.json | 12 +- packages/dev/babel-preset/package.json | 2 +- packages/dev/babel-register/package.json | 4 +- .../dev/eslint-config-browser/package.json | 4 +- packages/dev/eslint-config/package.json | 4 +- packages/dev/eslint-plugin/package.json | 2 +- packages/dev/esm-fuzzer/package.json | 2 +- packages/examples/eslint-example/package.json | 8 +- packages/examples/html/package.json | 6 +- .../examples/internalize-example/package.json | 2 +- packages/examples/kitchen-sink/package.json | 12 +- packages/examples/react-hmr/package.json | 4 +- packages/examples/react-refresh/package.json | 6 +- packages/examples/simple/package.json | 6 +- packages/examples/three/package.json | 6 +- packages/examples/ts-example/package.json | 6 +- .../ts-typecheck-example/package.json | 8 +- packages/namers/default/package.json | 8 +- packages/optimizers/blob-url/package.json | 8 +- packages/optimizers/cssnano/package.json | 6 +- packages/optimizers/data-url/package.json | 8 +- packages/optimizers/esbuild/package.json | 10 +- packages/optimizers/htmlnano/package.json | 6 +- packages/optimizers/image/package.json | 8 +- packages/optimizers/svgo/package.json | 10 +- packages/optimizers/terser/package.json | 10 +- packages/packagers/css/package.json | 8 +- packages/packagers/html/package.json | 10 +- packages/packagers/js/package.json | 12 +- packages/packagers/raw-url/package.json | 8 +- packages/packagers/raw/package.json | 6 +- packages/packagers/svg/package.json | 10 +- packages/packagers/ts/package.json | 6 +- packages/packagers/xml/package.json | 10 +- packages/reporters/build-metrics/package.json | 8 +- .../reporters/bundle-analyzer/package.json | 10 +- packages/reporters/bundle-buddy/package.json | 6 +- packages/reporters/cli/package.json | 10 +- packages/reporters/dev-server/package.json | 12 +- packages/reporters/json/package.json | 10 +- .../sourcemap-visualiser/package.json | 10 +- packages/resolvers/default/package.json | 8 +- packages/resolvers/glob/package.json | 10 +- packages/runtimes/hmr/package.json | 8 +- packages/runtimes/js/package.json | 8 +- packages/runtimes/react-refresh/package.json | 8 +- packages/runtimes/service-worker/package.json | 8 +- packages/shared/babel-ast-utils/package.json | 6 +- packages/transformers/babel/package.json | 14 +-- .../transformers/coffeescript/package.json | 8 +- packages/transformers/css/package.json | 8 +- packages/transformers/elm/package.json | 8 +- packages/transformers/glsl/package.json | 6 +- packages/transformers/graphql/package.json | 6 +- packages/transformers/html/package.json | 8 +- packages/transformers/image/package.json | 8 +- .../transformers/inline-string/package.json | 6 +- packages/transformers/inline/package.json | 6 +- packages/transformers/js/native.js | 2 - packages/transformers/js/package.json | 13 +-- packages/transformers/json/package.json | 6 +- packages/transformers/jsonld/package.json | 8 +- packages/transformers/less/package.json | 6 +- packages/transformers/mdx/package.json | 6 +- packages/transformers/postcss/package.json | 10 +- packages/transformers/posthtml/package.json | 8 +- packages/transformers/pug/package.json | 6 +- packages/transformers/raw/package.json | 6 +- .../react-refresh-wrap/package.json | 8 +- packages/transformers/sass/package.json | 6 +- packages/transformers/stylus/package.json | 8 +- packages/transformers/sugarss/package.json | 6 +- packages/transformers/svg-react/package.json | 6 +- packages/transformers/svg/package.json | 8 +- packages/transformers/toml/package.json | 6 +- .../transformers/typescript-tsc/package.json | 8 +- .../typescript-types/package.json | 8 +- packages/transformers/vue/package.json | 10 +- .../transformers/webextension/package.json | 10 +- .../transformers/webmanifest/package.json | 10 +- packages/transformers/worklet/package.json | 6 +- packages/transformers/xml/package.json | 6 +- packages/transformers/yaml/package.json | 6 +- .../package.json | 4 +- packages/utils/babel-preset-env/package.json | 2 +- packages/utils/babylon-walk/package.json | 2 +- packages/utils/create-react-app/package.json | 4 +- packages/utils/events/package.json | 2 +- packages/utils/fs-search/index.js | 2 - packages/utils/fs-search/package.json | 5 +- .../utils/fs-write-stream-atomic/package.json | 2 +- packages/utils/hash/index.js | 3 - packages/utils/hash/package.json | 2 +- packages/utils/node-libs-browser/package.json | 2 +- .../utils/node-resolver-core/package.json | 8 +- packages/utils/service-worker/package.json | 4 +- packages/utils/ts-utils/package.json | 2 +- packages/validators/eslint/package.json | 8 +- packages/validators/typescript/package.json | 14 +-- yarn.lock | 32 ----- 125 files changed, 495 insertions(+), 536 deletions(-) diff --git a/package.json b/package.json index be8a10235e1..2670e8f35e9 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "nightly:release": "lerna publish -y --canary --preid nightly --dist-tag=nightly --exact --force-publish=* --no-git-tag-version --no-push", "tag:prerelease": "lerna version --exact --force-publish=* --no-git-tag-version --no-push && node scripts/update-config-dependencies.js", "tag:release": "lerna version --force-publish=* --no-git-tag-version --no-push && node scripts/update-config-dependencies.js", - "release": "lerna publish -y from-package --dist-tag=next --no-git-tag-version --no-push", + "release": "lerna publish -y from-package --pre-dist-tag=next --no-git-tag-version --no-push", "prepare": "husky install" }, "devDependencies": { diff --git a/packages/bundlers/default/package.json b/packages/bundlers/default/package.json index bb686466d3c..6f421c4299f 100644 --- a/packages/bundlers/default/package.json +++ b/packages/bundlers/default/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/bundler-default", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,13 +17,13 @@ "source": "src/DefaultBundler.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/diagnostic": "2.0.0-rc.0", - "@parcel/hash": "2.0.0-rc.0", - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/diagnostic": "^2.0.0", + "@parcel/hash": "^2.0.0", + "@parcel/plugin": "^2.0.0", + "@parcel/utils": "^2.0.0", "nullthrows": "^1.1.1" } } diff --git a/packages/compressors/brotli/package.json b/packages/compressors/brotli/package.json index e295cbcf171..d084aa04b03 100644 --- a/packages/compressors/brotli/package.json +++ b/packages/compressors/brotli/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/compressor-brotli", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,9 +17,9 @@ "source": "src/BrotliCompressor.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0" + "@parcel/plugin": "^2.0.0" } } diff --git a/packages/compressors/gzip/package.json b/packages/compressors/gzip/package.json index c0659f8d69a..58cc0f794ca 100644 --- a/packages/compressors/gzip/package.json +++ b/packages/compressors/gzip/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/compressor-gzip", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,9 +17,9 @@ "source": "src/GzipCompressor.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0" + "@parcel/plugin": "^2.0.0" } } diff --git a/packages/compressors/raw/package.json b/packages/compressors/raw/package.json index 9d73543c7a8..d9da57298e4 100644 --- a/packages/compressors/raw/package.json +++ b/packages/compressors/raw/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/compressor-raw", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,9 +17,9 @@ "source": "src/RawCompressor.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0" + "@parcel/plugin": "^2.0.0" } } diff --git a/packages/configs/default/package.json b/packages/configs/default/package.json index c207e472ef3..435adb1776f 100644 --- a/packages/configs/default/package.json +++ b/packages/configs/default/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/config-default", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -18,63 +18,63 @@ "test-ci": "mocha" }, "dependencies": { - "@parcel/bundler-default": "2.0.0-rc.0", - "@parcel/compressor-raw": "2.0.0-rc.0", - "@parcel/namer-default": "2.0.0-rc.0", - "@parcel/optimizer-cssnano": "2.0.0-rc.0", - "@parcel/optimizer-htmlnano": "2.0.0-rc.0", - "@parcel/optimizer-image": "2.0.0-rc.0", - "@parcel/optimizer-svgo": "2.0.0-rc.0", - "@parcel/optimizer-terser": "2.0.0-rc.0", - "@parcel/packager-css": "2.0.0-rc.0", - "@parcel/packager-html": "2.0.0-rc.0", - "@parcel/packager-js": "2.0.0-rc.0", - "@parcel/packager-raw": "2.0.0-rc.0", - "@parcel/packager-svg": "2.0.0-rc.0", - "@parcel/reporter-dev-server": "2.0.0-rc.0", - "@parcel/resolver-default": "2.0.0-rc.0", - "@parcel/runtime-browser-hmr": "2.0.0-rc.0", - "@parcel/runtime-js": "2.0.0-rc.0", - "@parcel/runtime-react-refresh": "2.0.0-rc.0", - "@parcel/runtime-service-worker": "2.0.0-rc.0", - "@parcel/transformer-babel": "2.0.0-rc.0", - "@parcel/transformer-css": "2.0.0-rc.0", - "@parcel/transformer-html": "2.0.0-rc.0", - "@parcel/transformer-image": "2.0.0-rc.0", - "@parcel/transformer-js": "2.0.0-rc.0", - "@parcel/transformer-json": "2.0.0-rc.0", - "@parcel/transformer-postcss": "2.0.0-rc.0", - "@parcel/transformer-posthtml": "2.0.0-rc.0", - "@parcel/transformer-raw": "2.0.0-rc.0", - "@parcel/transformer-react-refresh-wrap": "2.0.0-rc.0", - "@parcel/transformer-svg": "2.0.0-rc.0" + "@parcel/bundler-default": "^2.0.0", + "@parcel/compressor-raw": "^2.0.0", + "@parcel/namer-default": "^2.0.0", + "@parcel/optimizer-cssnano": "^2.0.0", + "@parcel/optimizer-htmlnano": "^2.0.0", + "@parcel/optimizer-image": "^2.0.0", + "@parcel/optimizer-svgo": "^2.0.0", + "@parcel/optimizer-terser": "^2.0.0", + "@parcel/packager-css": "^2.0.0", + "@parcel/packager-html": "^2.0.0", + "@parcel/packager-js": "^2.0.0", + "@parcel/packager-raw": "^2.0.0", + "@parcel/packager-svg": "^2.0.0", + "@parcel/reporter-dev-server": "^2.0.0", + "@parcel/resolver-default": "^2.0.0", + "@parcel/runtime-browser-hmr": "^2.0.0", + "@parcel/runtime-js": "^2.0.0", + "@parcel/runtime-react-refresh": "^2.0.0", + "@parcel/runtime-service-worker": "^2.0.0", + "@parcel/transformer-babel": "^2.0.0", + "@parcel/transformer-css": "^2.0.0", + "@parcel/transformer-html": "^2.0.0", + "@parcel/transformer-image": "^2.0.0", + "@parcel/transformer-js": "^2.0.0", + "@parcel/transformer-json": "^2.0.0", + "@parcel/transformer-postcss": "^2.0.0", + "@parcel/transformer-posthtml": "^2.0.0", + "@parcel/transformer-raw": "^2.0.0", + "@parcel/transformer-react-refresh-wrap": "^2.0.0", + "@parcel/transformer-svg": "^2.0.0" }, "parcelDependencies": { - "@parcel/optimizer-data-url": "2.0.0-rc.0", - "@parcel/packager-raw-url": "2.0.0-rc.0", - "@parcel/packager-ts": "2.0.0-rc.0", - "@parcel/packager-xml": "2.0.0-rc.0", - "@parcel/transformer-coffeescript": "2.0.0-rc.0", - "@parcel/transformer-elm": "2.0.0-rc.0", - "@parcel/transformer-glsl": "2.0.0-rc.0", - "@parcel/transformer-graphql": "2.0.0-rc.0", - "@parcel/transformer-inline-string": "2.0.0-rc.0", - "@parcel/transformer-jsonld": "2.0.0-rc.0", - "@parcel/transformer-less": "2.0.0-rc.0", - "@parcel/transformer-mdx": "2.0.0-rc.0", - "@parcel/transformer-pug": "2.0.0-rc.0", - "@parcel/transformer-sass": "2.0.0-rc.0", - "@parcel/transformer-stylus": "2.0.0-rc.0", - "@parcel/transformer-sugarss": "2.0.0-rc.0", - "@parcel/transformer-toml": "2.0.0-rc.0", - "@parcel/transformer-typescript-types": "2.0.0-rc.0", - "@parcel/transformer-vue": "2.0.0-rc.0", - "@parcel/transformer-webmanifest": "2.0.0-rc.0", - "@parcel/transformer-worklet": "2.0.0-rc.0", - "@parcel/transformer-xml": "2.0.0-rc.0", - "@parcel/transformer-yaml": "2.0.0-rc.0" + "@parcel/optimizer-data-url": "^2.0.0", + "@parcel/packager-raw-url": "^2.0.0", + "@parcel/packager-ts": "^2.0.0", + "@parcel/packager-xml": "^2.0.0", + "@parcel/transformer-coffeescript": "^2.0.0", + "@parcel/transformer-elm": "^2.0.0", + "@parcel/transformer-glsl": "^2.0.0", + "@parcel/transformer-graphql": "^2.0.0", + "@parcel/transformer-inline-string": "^2.0.0", + "@parcel/transformer-jsonld": "^2.0.0", + "@parcel/transformer-less": "^2.0.0", + "@parcel/transformer-mdx": "^2.0.0", + "@parcel/transformer-pug": "^2.0.0", + "@parcel/transformer-sass": "^2.0.0", + "@parcel/transformer-stylus": "^2.0.0", + "@parcel/transformer-sugarss": "^2.0.0", + "@parcel/transformer-toml": "^2.0.0", + "@parcel/transformer-typescript-types": "^2.0.0", + "@parcel/transformer-vue": "^2.0.0", + "@parcel/transformer-webmanifest": "^2.0.0", + "@parcel/transformer-worklet": "^2.0.0", + "@parcel/transformer-xml": "^2.0.0", + "@parcel/transformer-yaml": "^2.0.0" }, "peerDependencies": { - "@parcel/core": "^2.0.0-alpha.3.1" + "@parcel/core": "^2.0.0" } } diff --git a/packages/configs/webextension/package.json b/packages/configs/webextension/package.json index 35510b7276b..5f1e34aecab 100644 --- a/packages/configs/webextension/package.json +++ b/packages/configs/webextension/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/config-webextension", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -15,8 +15,8 @@ }, "main": "index.json", "dependencies": { - "@parcel/config-default": "2.0.0-rc.0", - "@parcel/packager-raw-url": "2.0.0-rc.0", - "@parcel/transformer-webextension": "2.0.0-rc.0" + "@parcel/config-default": "^2.0.0", + "@parcel/packager-raw-url": "^2.0.0", + "@parcel/transformer-webextension": "^2.0.0" } } diff --git a/packages/core/cache/package.json b/packages/core/cache/package.json index a45582465a1..353daa23207 100644 --- a/packages/core/cache/package.json +++ b/packages/core/cache/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/cache", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -24,11 +24,11 @@ "check-ts": "tsc --noEmit index.d.ts" }, "dependencies": { - "@parcel/logger": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/logger": "^2.0.0", + "@parcel/utils": "^2.0.0", "lmdb-store": "^1.5.5" }, "peerDependencies": { - "@parcel/core": "^2.0.0-alpha.3.1" + "@parcel/core": "^2.0.0" } } diff --git a/packages/core/codeframe/package.json b/packages/core/codeframe/package.json index 998eca24d1a..8966a40f97d 100644 --- a/packages/core/codeframe/package.json +++ b/packages/core/codeframe/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/codeframe", - "version": "2.0.0-rc.0", + "version": "2.0.0", "description": "Blazing fast, zero configuration web application bundler", "license": "MIT", "publishConfig": { diff --git a/packages/core/core/package.json b/packages/core/core/package.json index b3a068ba872..4ee6063377b 100644 --- a/packages/core/core/package.json +++ b/packages/core/core/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/core", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -24,19 +24,19 @@ "check-ts": "tsc --noEmit index.d.ts" }, "dependencies": { - "@parcel/cache": "2.0.0-rc.0", - "@parcel/diagnostic": "2.0.0-rc.0", - "@parcel/events": "2.0.0-rc.0", - "@parcel/fs": "2.0.0-rc.0", - "@parcel/graph": "2.0.0-rc.0", - "@parcel/hash": "2.0.0-rc.0", - "@parcel/logger": "2.0.0-rc.0", - "@parcel/package-manager": "2.0.0-rc.0", - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/cache": "^2.0.0", + "@parcel/diagnostic": "^2.0.0", + "@parcel/events": "^2.0.0", + "@parcel/fs": "^2.0.0", + "@parcel/graph": "^2.0.0", + "@parcel/hash": "^2.0.0", + "@parcel/logger": "^2.0.0", + "@parcel/package-manager": "^2.0.0", + "@parcel/plugin": "^2.0.0", "@parcel/source-map": "^2.0.0", - "@parcel/types": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", - "@parcel/workers": "2.0.0-rc.0", + "@parcel/types": "^2.0.0", + "@parcel/utils": "^2.0.0", + "@parcel/workers": "^2.0.0", "abortcontroller-polyfill": "^1.1.9", "base-x": "^3.0.8", "browserslist": "^4.6.6", diff --git a/packages/core/diagnostic/package.json b/packages/core/diagnostic/package.json index f9909f09a26..b6468e9fb97 100644 --- a/packages/core/diagnostic/package.json +++ b/packages/core/diagnostic/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/diagnostic", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" diff --git a/packages/core/fs/package.json b/packages/core/fs/package.json index 0d7e1917a12..7c4ebb4b173 100644 --- a/packages/core/fs/package.json +++ b/packages/core/fs/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/fs", - "version": "2.0.0-rc.0", + "version": "2.0.0", "description": "Blazing fast, zero configuration web application bundler", "license": "MIT", "publishConfig": { @@ -25,12 +25,12 @@ "check-ts": "tsc --noEmit index.d.ts" }, "dependencies": { - "@parcel/fs-search": "2.0.0-rc.0", - "@parcel/fs-write-stream-atomic": "2.0.0-rc.0", - "@parcel/types": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/fs-search": "^2.0.0", + "@parcel/fs-write-stream-atomic": "^2.0.0", + "@parcel/types": "^2.0.0", + "@parcel/utils": "^2.0.0", "@parcel/watcher": "^2.0.0", - "@parcel/workers": "2.0.0-rc.0", + "@parcel/workers": "^2.0.0", "graceful-fs": "^4.2.4", "mkdirp": "^0.5.1", "ncp": "^2.0.0", @@ -39,6 +39,6 @@ "utility-types": "^3.10.0" }, "peerDependencies": { - "@parcel/core": "^2.0.0-alpha.3.1" + "@parcel/core": "^2.0.0" } } diff --git a/packages/core/graph/package.json b/packages/core/graph/package.json index 48cf3915825..3b1655db759 100644 --- a/packages/core/graph/package.json +++ b/packages/core/graph/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/graph", - "version": "2.0.0-rc.0", + "version": "2.0.0", "description": "Blazing fast, zero configuration web application bundler", "license": "MIT", "publishConfig": { diff --git a/packages/core/integration-tests/package.json b/packages/core/integration-tests/package.json index 8a076026f6c..6acbec458fd 100644 --- a/packages/core/integration-tests/package.json +++ b/packages/core/integration-tests/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/integration-tests", - "version": "2.0.0-rc.0", + "version": "2.0.0", "private": true, "license": "MIT", "repository": { @@ -41,7 +41,7 @@ "ncp": "^2.0.0", "nib": "^1.1.2", "node-elm-compiler": "^5.0.5", - "parcel": "2.0.0-rc.0", + "parcel": "^2.0.0", "postcss": "^8.3.0", "postcss-custom-properties": "^11.0.0", "postcss-import": "^14.0.2", diff --git a/packages/core/integration-tests/test/integration/babel-config-js-multitarget-transform-runtime/package.json b/packages/core/integration-tests/test/integration/babel-config-js-multitarget-transform-runtime/package.json index 9d12d0a5a5b..d19c56a62a3 100644 --- a/packages/core/integration-tests/test/integration/babel-config-js-multitarget-transform-runtime/package.json +++ b/packages/core/integration-tests/test/integration/babel-config-js-multitarget-transform-runtime/package.json @@ -4,7 +4,7 @@ "main": "dist/main.js", "module": "dist/module.js", "dependencies": { - "@parcel/babel-plugin-tranform-runtime": "^2.0.0-alpha.3.1", + "@parcel/babel-plugin-tranform-runtime": "^2.0.0", "@babel/plugin-proposal-object-rest-spread": "^7.8.3", "@babel/plugin-transform-runtime": "^7.8.3", "@babel/runtime": "^7.8.7" diff --git a/packages/core/is-v2-ready-yet/package.json b/packages/core/is-v2-ready-yet/package.json index 9354864e1a7..d1fe2ac2c98 100644 --- a/packages/core/is-v2-ready-yet/package.json +++ b/packages/core/is-v2-ready-yet/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/is-v2-ready-yet", - "version": "2.0.0-rc.0", + "version": "2.0.0", "private": true, "license": "MIT", "repository": { @@ -13,7 +13,7 @@ "build-app": "yarn parcel build index.html" }, "dependencies": { - "@parcel/integration-tests": "2.0.0-rc.0", + "@parcel/integration-tests": "^2.0.0", "react": "^16.6.3", "react-dom": "^16.6.3", "victory": "^31.0.1" diff --git a/packages/core/logger/package.json b/packages/core/logger/package.json index da260e00365..89fd7886776 100644 --- a/packages/core/logger/package.json +++ b/packages/core/logger/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/logger", - "version": "2.0.0-rc.0", + "version": "2.0.0", "description": "Blazing fast, zero configuration web application bundler", "license": "MIT", "publishConfig": { @@ -20,7 +20,7 @@ "node": ">= 12.0.0" }, "dependencies": { - "@parcel/diagnostic": "2.0.0-rc.0", - "@parcel/events": "2.0.0-rc.0" + "@parcel/diagnostic": "^2.0.0", + "@parcel/events": "^2.0.0" } } diff --git a/packages/core/markdown-ansi/package.json b/packages/core/markdown-ansi/package.json index 5f02214c027..982857e0305 100644 --- a/packages/core/markdown-ansi/package.json +++ b/packages/core/markdown-ansi/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/markdown-ansi", - "version": "2.0.0-rc.0", + "version": "2.0.0", "description": "Blazing fast, zero configuration web application bundler", "publishConfig": { "access": "public" diff --git a/packages/core/package-manager/package.json b/packages/core/package-manager/package.json index d417aad5a4d..9118c83d494 100644 --- a/packages/core/package-manager/package.json +++ b/packages/core/package-manager/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/package-manager", - "version": "2.0.0-rc.0", + "version": "2.0.0", "description": "Blazing fast, zero configuration web application bundler", "license": "MIT", "publishConfig": { @@ -25,12 +25,12 @@ "check-ts": "tsc --noEmit index.d.ts" }, "dependencies": { - "@parcel/diagnostic": "2.0.0-rc.0", - "@parcel/fs": "2.0.0-rc.0", - "@parcel/logger": "2.0.0-rc.0", - "@parcel/types": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", - "@parcel/workers": "2.0.0-rc.0", + "@parcel/diagnostic": "^2.0.0", + "@parcel/fs": "^2.0.0", + "@parcel/logger": "^2.0.0", + "@parcel/types": "^2.0.0", + "@parcel/utils": "^2.0.0", + "@parcel/workers": "^2.0.0", "command-exists": "^1.2.6", "cross-spawn": "^6.0.4", "nullthrows": "^1.1.1", @@ -38,6 +38,6 @@ "split2": "^3.1.1" }, "peerDependencies": { - "@parcel/core": "^2.0.0-alpha.3.1" + "@parcel/core": "^2.0.0" } } diff --git a/packages/core/parcel/package.json b/packages/core/parcel/package.json index 8866eaae154..693dc5e4f13 100644 --- a/packages/core/parcel/package.json +++ b/packages/core/parcel/package.json @@ -1,6 +1,6 @@ { "name": "parcel", - "version": "2.0.0-rc.0", + "version": "2.0.0", "description": "Blazing fast, zero configuration web application bundler", "license": "MIT", "publishConfig": { @@ -21,22 +21,22 @@ "node": ">= 12.0.0" }, "dependencies": { - "@parcel/config-default": "2.0.0-rc.0", - "@parcel/core": "2.0.0-rc.0", - "@parcel/diagnostic": "2.0.0-rc.0", - "@parcel/events": "2.0.0-rc.0", - "@parcel/fs": "2.0.0-rc.0", - "@parcel/logger": "2.0.0-rc.0", - "@parcel/package-manager": "2.0.0-rc.0", - "@parcel/reporter-cli": "2.0.0-rc.0", - "@parcel/reporter-dev-server": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/config-default": "^2.0.0", + "@parcel/core": "^2.0.0", + "@parcel/diagnostic": "^2.0.0", + "@parcel/events": "^2.0.0", + "@parcel/fs": "^2.0.0", + "@parcel/logger": "^2.0.0", + "@parcel/package-manager": "^2.0.0", + "@parcel/reporter-cli": "^2.0.0", + "@parcel/reporter-dev-server": "^2.0.0", + "@parcel/utils": "^2.0.0", "chalk": "^4.1.0", "commander": "^7.0.0", "get-port": "^4.2.0", "v8-compile-cache": "^2.0.0" }, "devDependencies": { - "@parcel/babel-register": "2.0.0-rc.0" + "@parcel/babel-register": "^2.0.0" } } diff --git a/packages/core/plugin/package.json b/packages/core/plugin/package.json index c3b5beda4e2..198faacbd66 100644 --- a/packages/core/plugin/package.json +++ b/packages/core/plugin/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/plugin", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -23,6 +23,6 @@ "check-ts": "tsc --noEmit src/PluginAPI.d.ts" }, "dependencies": { - "@parcel/types": "2.0.0-rc.0" + "@parcel/types": "^2.0.0" } } diff --git a/packages/core/register/package.json b/packages/core/register/package.json index 650e9119779..26b8580b006 100644 --- a/packages/core/register/package.json +++ b/packages/core/register/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/register", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -23,10 +23,10 @@ "clean": "rimraf .parcel-cache" }, "dependencies": { - "@parcel/config-default": "2.0.0-rc.0", - "@parcel/core": "2.0.0-rc.0", - "@parcel/fs": "2.0.0-rc.0", - "@parcel/package-manager": "2.0.0-rc.0", + "@parcel/config-default": "^2.0.0", + "@parcel/core": "^2.0.0", + "@parcel/fs": "^2.0.0", + "@parcel/package-manager": "^2.0.0", "deasync": "^0.1.14", "pirates": "^4.0.0" } diff --git a/packages/core/test-utils/package.json b/packages/core/test-utils/package.json index 41746b34ffb..3b1ab1eea1a 100644 --- a/packages/core/test-utils/package.json +++ b/packages/core/test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/test-utils", - "version": "2.0.0-rc.0", + "version": "2.0.0", "description": "Blazing fast, zero configuration web application bundler", "license": "MIT", "private": true, @@ -13,11 +13,11 @@ "node": ">= 12.0.0" }, "dependencies": { - "@parcel/config-default": "2.0.0-rc.0", - "@parcel/core": "2.0.0-rc.0", - "@parcel/fs": "2.0.0-rc.0", - "@parcel/package-manager": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/config-default": "^2.0.0", + "@parcel/core": "^2.0.0", + "@parcel/fs": "^2.0.0", + "@parcel/package-manager": "^2.0.0", + "@parcel/utils": "^2.0.0", "chalk": "^4.1.0", "ncp": "^2.0.0", "nullthrows": "^1.1.1", diff --git a/packages/core/types/package.json b/packages/core/types/package.json index 59ca991a7cd..d431680e7e6 100644 --- a/packages/core/types/package.json +++ b/packages/core/types/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/types", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "main": "src/index.js", "types": "lib/index.d.ts", @@ -16,12 +16,12 @@ "check-ts": "tsc --noEmit lib/index.d.ts" }, "dependencies": { - "@parcel/cache": "2.0.0-rc.0", - "@parcel/diagnostic": "2.0.0-rc.0", - "@parcel/fs": "2.0.0-rc.0", - "@parcel/package-manager": "2.0.0-rc.0", + "@parcel/cache": "^2.0.0", + "@parcel/diagnostic": "^2.0.0", + "@parcel/fs": "^2.0.0", + "@parcel/package-manager": "^2.0.0", "@parcel/source-map": "^2.0.0", - "@parcel/workers": "2.0.0-rc.0", + "@parcel/workers": "^2.0.0", "utility-types": "^3.10.0" } } diff --git a/packages/core/utils/package.json b/packages/core/utils/package.json index 5ac7b4fdd2e..020e994f10b 100644 --- a/packages/core/utils/package.json +++ b/packages/core/utils/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/utils", - "version": "2.0.0-rc.0", + "version": "2.0.0", "description": "Blazing fast, zero configuration web application bundler", "license": "MIT", "publishConfig": { @@ -21,11 +21,11 @@ }, "dependencies": { "@iarna/toml": "^2.2.0", - "@parcel/codeframe": "2.0.0-rc.0", - "@parcel/diagnostic": "2.0.0-rc.0", - "@parcel/hash": "2.0.0-rc.0", - "@parcel/logger": "2.0.0-rc.0", - "@parcel/markdown-ansi": "2.0.0-rc.0", + "@parcel/codeframe": "^2.0.0", + "@parcel/diagnostic": "^2.0.0", + "@parcel/hash": "^2.0.0", + "@parcel/logger": "^2.0.0", + "@parcel/markdown-ansi": "^2.0.0", "@parcel/source-map": "^2.0.0", "ansi-html-community": "0.0.8", "chalk": "^4.1.0", diff --git a/packages/core/workers/package.json b/packages/core/workers/package.json index 01198dee569..423615b53ee 100644 --- a/packages/core/workers/package.json +++ b/packages/core/workers/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/workers", - "version": "2.0.0-rc.0", + "version": "2.0.0", "description": "Blazing fast, zero configuration web application bundler", "license": "MIT", "publishConfig": { @@ -21,14 +21,14 @@ "node": ">= 12.0.0" }, "dependencies": { - "@parcel/diagnostic": "2.0.0-rc.0", - "@parcel/logger": "2.0.0-rc.0", - "@parcel/types": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/diagnostic": "^2.0.0", + "@parcel/logger": "^2.0.0", + "@parcel/types": "^2.0.0", + "@parcel/utils": "^2.0.0", "chrome-trace-event": "^1.0.2", "nullthrows": "^1.1.1" }, "peerDependencies": { - "@parcel/core": "^2.0.0-alpha.3.1" + "@parcel/core": "^2.0.0" } } diff --git a/packages/dev/babel-preset/package.json b/packages/dev/babel-preset/package.json index 21bcc550040..4f6b3b6ace9 100644 --- a/packages/dev/babel-preset/package.json +++ b/packages/dev/babel-preset/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/babel-preset", - "version": "2.0.0-rc.0", + "version": "2.0.0", "private": true, "license": "MIT", "dependencies": { diff --git a/packages/dev/babel-register/package.json b/packages/dev/babel-register/package.json index 708f5d17f6d..f9e67b81c9f 100644 --- a/packages/dev/babel-register/package.json +++ b/packages/dev/babel-register/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/babel-register", - "version": "2.0.0-rc.0", + "version": "2.0.0", "description": "Blazing fast, zero configuration web application bundler", "license": "MIT", "private": true, @@ -10,7 +10,7 @@ }, "dependencies": { "@babel/register": "^7.4.4", - "@parcel/babel-preset": "2.0.0-rc.0", + "@parcel/babel-preset": "^2.0.0", "resolve": "^1.12.0" } } diff --git a/packages/dev/eslint-config-browser/package.json b/packages/dev/eslint-config-browser/package.json index e783f1b4f04..632b260e070 100644 --- a/packages/dev/eslint-config-browser/package.json +++ b/packages/dev/eslint-config-browser/package.json @@ -1,8 +1,8 @@ { "name": "@parcel/eslint-config-browser", "private": true, - "version": "2.0.0-rc.0", + "version": "2.0.0", "dependencies": { - "@parcel/eslint-config": "2.0.0-rc.0" + "@parcel/eslint-config": "^2.0.0" } } diff --git a/packages/dev/eslint-config/package.json b/packages/dev/eslint-config/package.json index cc5b5c94f3f..3c04d1e4faf 100644 --- a/packages/dev/eslint-config/package.json +++ b/packages/dev/eslint-config/package.json @@ -1,10 +1,10 @@ { "name": "@parcel/eslint-config", "private": true, - "version": "2.0.0-rc.0", + "version": "2.0.0", "dependencies": { "@babel/eslint-parser": "^7.12.1", - "@parcel/eslint-plugin": "2.0.0-rc.0", + "@parcel/eslint-plugin": "^2.0.0", "eslint-config-prettier": "^7.2.0", "eslint-plugin-flowtype": "^5.2.0", "eslint-plugin-import": "^2.22.1", diff --git a/packages/dev/eslint-plugin/package.json b/packages/dev/eslint-plugin/package.json index c258be7f355..959f48ba244 100644 --- a/packages/dev/eslint-plugin/package.json +++ b/packages/dev/eslint-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@parcel/eslint-plugin", "private": true, - "version": "2.0.0-rc.0", + "version": "2.0.0", "main": "index.js", "scripts": {}, "dependencies": { diff --git a/packages/dev/esm-fuzzer/package.json b/packages/dev/esm-fuzzer/package.json index 47d7ccda1fd..aca0fd2390d 100644 --- a/packages/dev/esm-fuzzer/package.json +++ b/packages/dev/esm-fuzzer/package.json @@ -1,6 +1,6 @@ { "name": "fuzzer", - "version": "2.0.0-rc.0", + "version": "2.0.0", "private": true, "scripts": { "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules -r @parcel/babel-register index.js" diff --git a/packages/examples/eslint-example/package.json b/packages/examples/eslint-example/package.json index f46b1d993d1..df5325a5b1e 100644 --- a/packages/examples/eslint-example/package.json +++ b/packages/examples/eslint-example/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/eslint-example", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "private": true, "scripts": { @@ -17,8 +17,8 @@ } }, "devDependencies": { - "@parcel/babel-register": "2.0.0-rc.0", - "@parcel/core": "2.0.0-rc.0", - "@parcel/validator-eslint": "2.0.0-rc.0" + "@parcel/babel-register": "^2.0.0", + "@parcel/core": "^2.0.0", + "@parcel/validator-eslint": "^2.0.0" } } diff --git a/packages/examples/html/package.json b/packages/examples/html/package.json index dba48bf087b..1964aa57802 100644 --- a/packages/examples/html/package.json +++ b/packages/examples/html/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/html-example", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "private": true, "scripts": { @@ -12,8 +12,8 @@ "not firefox < 67" ], "devDependencies": { - "@parcel/babel-register": "2.0.0-rc.0", - "parcel": "2.0.0-rc.0" + "@parcel/babel-register": "^2.0.0", + "parcel": "^2.0.0" }, "dependencies": { "lodash": "^4.17.11", diff --git a/packages/examples/internalize-example/package.json b/packages/examples/internalize-example/package.json index 490981341d2..c4015ba81b0 100644 --- a/packages/examples/internalize-example/package.json +++ b/packages/examples/internalize-example/package.json @@ -1,4 +1,4 @@ { "name": "internalize-example", - "version": "2.0.0-rc.0" + "version": "2.0.0" } diff --git a/packages/examples/kitchen-sink/package.json b/packages/examples/kitchen-sink/package.json index 64ee29869ac..cd921f80482 100644 --- a/packages/examples/kitchen-sink/package.json +++ b/packages/examples/kitchen-sink/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/kitchen-sink-example", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "private": true, "scripts": { @@ -8,11 +8,11 @@ "build": "rm -rf dist && parcel build src/index.html --no-cache" }, "devDependencies": { - "@parcel/babel-register": "2.0.0-rc.0", - "@parcel/config-default": "2.0.0-rc.0", - "@parcel/optimizer-esbuild": "2.0.0-rc.0", - "@parcel/reporter-sourcemap-visualiser": "2.0.0-rc.0", - "parcel": "2.0.0-rc.0" + "@parcel/babel-register": "^2.0.0", + "@parcel/config-default": "^2.0.0", + "@parcel/optimizer-esbuild": "^2.0.0", + "@parcel/reporter-sourcemap-visualiser": "^2.0.0", + "parcel": "^2.0.0" }, "browser": "dist/legacy/index.html", "browserModern": "dist/modern/index.html", diff --git a/packages/examples/react-hmr/package.json b/packages/examples/react-hmr/package.json index 7a9b29e0bd1..562f616fa48 100644 --- a/packages/examples/react-hmr/package.json +++ b/packages/examples/react-hmr/package.json @@ -1,13 +1,13 @@ { "name": "@parcel/react-hmr-example", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "private": true, "scripts": { "demo": "parcel serve src/index.html --no-cache --https" }, "devDependencies": { - "parcel": "2.0.0-rc.0" + "parcel": "^2.0.0" }, "browser": "dist/legacy/index.html", "browserModern": "dist/modern/index.html", diff --git a/packages/examples/react-refresh/package.json b/packages/examples/react-refresh/package.json index 35f3da0198f..dda27ac3bf3 100644 --- a/packages/examples/react-refresh/package.json +++ b/packages/examples/react-refresh/package.json @@ -1,14 +1,14 @@ { "name": "@parcel/react-refresh-example", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "private": true, "scripts": { "start": "parcel src/index.html" }, "devDependencies": { - "@parcel/babel-register": "2.0.0-rc.0", - "@parcel/core": "2.0.0-rc.0" + "@parcel/babel-register": "^2.0.0", + "@parcel/core": "^2.0.0" }, "dependencies": { "react": "^16.11.0", diff --git a/packages/examples/simple/package.json b/packages/examples/simple/package.json index c82e875c027..16ddd910237 100644 --- a/packages/examples/simple/package.json +++ b/packages/examples/simple/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/simple-example", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "private": true, "scripts": { @@ -8,8 +8,8 @@ "clean-demo": "rm -rf .parcel-cache dist && yarn demo" }, "devDependencies": { - "@parcel/babel-register": "2.0.0-rc.0", - "@parcel/core": "2.0.0-rc.0" + "@parcel/babel-register": "^2.0.0", + "@parcel/core": "^2.0.0" }, "browser": "dist/legacy/index.js", "browserModern": "dist/modern/index.js", diff --git a/packages/examples/three/package.json b/packages/examples/three/package.json index bcba5ba1dc3..6d183a0c83d 100644 --- a/packages/examples/three/package.json +++ b/packages/examples/three/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/three-js-stresstest", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "private": true, "scripts": { @@ -27,7 +27,7 @@ } }, "devDependencies": { - "@parcel/config-default": "2.0.0-rc.0", - "parcel": "2.0.0-rc.0" + "@parcel/config-default": "^2.0.0", + "parcel": "^2.0.0" } } diff --git a/packages/examples/ts-example/package.json b/packages/examples/ts-example/package.json index fd27de544a8..7c8f9ece777 100644 --- a/packages/examples/ts-example/package.json +++ b/packages/examples/ts-example/package.json @@ -1,14 +1,14 @@ { "name": "@parcel/ts-example", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "private": true, "scripts": { "demo": "parcel build src/index.ts" }, "devDependencies": { - "@parcel/babel-register": "2.0.0-rc.0", - "@parcel/core": "2.0.0-rc.0" + "@parcel/babel-register": "^2.0.0", + "@parcel/core": "^2.0.0" }, "main": "dist/main.js", "module": "dist/module.js", diff --git a/packages/examples/ts-typecheck-example/package.json b/packages/examples/ts-typecheck-example/package.json index 4e2b7c5fcc7..f2299852c2f 100644 --- a/packages/examples/ts-typecheck-example/package.json +++ b/packages/examples/ts-typecheck-example/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/ts-typecheck-example", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "private": true, "scripts": { @@ -17,8 +17,8 @@ } }, "devDependencies": { - "@parcel/babel-register": "2.0.0-rc.0", - "@parcel/core": "2.0.0-rc.0", - "@parcel/validator-typescript": "2.0.0-rc.0" + "@parcel/babel-register": "^2.0.0", + "@parcel/core": "^2.0.0", + "@parcel/validator-typescript": "^2.0.0" } } diff --git a/packages/namers/default/package.json b/packages/namers/default/package.json index 3a1e4148324..868dbd346e8 100644 --- a/packages/namers/default/package.json +++ b/packages/namers/default/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/namer-default", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,11 +17,11 @@ "source": "src/DefaultNamer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/diagnostic": "2.0.0-rc.0", - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/diagnostic": "^2.0.0", + "@parcel/plugin": "^2.0.0", "nullthrows": "^1.1.1" } } diff --git a/packages/optimizers/blob-url/package.json b/packages/optimizers/blob-url/package.json index e3a21ca3b59..a25b98ae44c 100644 --- a/packages/optimizers/blob-url/package.json +++ b/packages/optimizers/blob-url/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/optimizer-blob-url", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/BlobURLOptimizer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0" + "@parcel/plugin": "^2.0.0", + "@parcel/utils": "^2.0.0" } } diff --git a/packages/optimizers/cssnano/package.json b/packages/optimizers/cssnano/package.json index 8fb7862c141..82b1397f0cb 100644 --- a/packages/optimizers/cssnano/package.json +++ b/packages/optimizers/cssnano/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/optimizer-cssnano", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/CSSNanoOptimizer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", "@parcel/source-map": "^2.0.0", "cssnano": "^5.0.5", "postcss": "^8.3.0" diff --git a/packages/optimizers/data-url/package.json b/packages/optimizers/data-url/package.json index c958ee5d519..9a6f6bbfff8 100644 --- a/packages/optimizers/data-url/package.json +++ b/packages/optimizers/data-url/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/optimizer-data-url", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,11 +17,11 @@ "source": "src/DataURLOptimizer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", + "@parcel/utils": "^2.0.0", "isbinaryfile": "^4.0.2", "mime": "^2.4.4" } diff --git a/packages/optimizers/esbuild/package.json b/packages/optimizers/esbuild/package.json index da2172d7bab..8f2462bc61c 100644 --- a/packages/optimizers/esbuild/package.json +++ b/packages/optimizers/esbuild/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/optimizer-esbuild", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,13 +17,13 @@ "source": "src/ESBuildOptimizer.js", "engines": { "node": ">= 10.0.0", - "parcel": "^2.0.0-alpha.1.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/diagnostic": "2.0.0-rc.0", - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/diagnostic": "^2.0.0", + "@parcel/plugin": "^2.0.0", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/utils": "^2.0.0", "esbuild": "^0.8.11", "nullthrows": "^1.1.1" } diff --git a/packages/optimizers/htmlnano/package.json b/packages/optimizers/htmlnano/package.json index 6c738f9ff61..cfcfb82735f 100644 --- a/packages/optimizers/htmlnano/package.json +++ b/packages/optimizers/htmlnano/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/optimizer-htmlnano", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/HTMLNanoOptimizer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", "htmlnano": "^1.0.1", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", diff --git a/packages/optimizers/image/package.json b/packages/optimizers/image/package.json index 297e558bc86..686b08ba34b 100644 --- a/packages/optimizers/image/package.json +++ b/packages/optimizers/image/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/optimizer-image", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "main": "lib/ImageOptimizer.js", "source": "src/ImageOptimizer.js", @@ -17,7 +17,7 @@ }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "files": [ "lib", @@ -32,8 +32,8 @@ "build-release": "napi build --platform --release" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", + "@parcel/utils": "^2.0.0", "detect-libc": "^1.0.3" }, "devDependencies": { diff --git a/packages/optimizers/svgo/package.json b/packages/optimizers/svgo/package.json index 9ab1e152702..3655337216d 100644 --- a/packages/optimizers/svgo/package.json +++ b/packages/optimizers/svgo/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/optimizer-svgo", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,12 +17,12 @@ "source": "src/SVGOOptimizer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/diagnostic": "2.0.0-rc.0", - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/diagnostic": "^2.0.0", + "@parcel/plugin": "^2.0.0", + "@parcel/utils": "^2.0.0", "svgo": "^2.4.0" } } diff --git a/packages/optimizers/terser/package.json b/packages/optimizers/terser/package.json index fcbfe184471..eb5be300284 100644 --- a/packages/optimizers/terser/package.json +++ b/packages/optimizers/terser/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/optimizer-terser", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,13 +17,13 @@ "source": "src/TerserOptimizer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/diagnostic": "2.0.0-rc.0", - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/diagnostic": "^2.0.0", + "@parcel/plugin": "^2.0.0", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/utils": "^2.0.0", "nullthrows": "^1.1.1", "terser": "^5.2.0" } diff --git a/packages/packagers/css/package.json b/packages/packagers/css/package.json index 2c20b4128ac..69bfbc7e82c 100644 --- a/packages/packagers/css/package.json +++ b/packages/packagers/css/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/packager-css", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,12 +17,12 @@ "source": "src/CSSPackager.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/utils": "^2.0.0", "nullthrows": "^1.1.1", "postcss": "^8.3.0" } diff --git a/packages/packagers/html/package.json b/packages/packagers/html/package.json index 3ad37a5bf89..32a82a3df31 100644 --- a/packages/packagers/html/package.json +++ b/packages/packagers/html/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/packager-html", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,12 +17,12 @@ "source": "src/HTMLPackager.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/types": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", + "@parcel/types": "^2.0.0", + "@parcel/utils": "^2.0.0", "nullthrows": "^1.1.1", "posthtml": "^0.16.5" } diff --git a/packages/packagers/js/package.json b/packages/packagers/js/package.json index 52708b9fce3..f6c9f487d78 100644 --- a/packages/packagers/js/package.json +++ b/packages/packagers/js/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/packager-js", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,14 +17,14 @@ "source": "src/index.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/diagnostic": "2.0.0-rc.0", - "@parcel/hash": "2.0.0-rc.0", - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/diagnostic": "^2.0.0", + "@parcel/hash": "^2.0.0", + "@parcel/plugin": "^2.0.0", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/utils": "^2.0.0", "globals": "^13.2.0", "nullthrows": "^1.1.1" } diff --git a/packages/packagers/raw-url/package.json b/packages/packagers/raw-url/package.json index 3ee7ce06183..70e8673a9e7 100644 --- a/packages/packagers/raw-url/package.json +++ b/packages/packagers/raw-url/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/packager-raw-url", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/RawUrlPackager.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0" + "@parcel/plugin": "^2.0.0", + "@parcel/utils": "^2.0.0" } } diff --git a/packages/packagers/raw/package.json b/packages/packagers/raw/package.json index 7f1f29b5eb1..592d74d9179 100644 --- a/packages/packagers/raw/package.json +++ b/packages/packagers/raw/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/packager-raw", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,9 +17,9 @@ "source": "src/RawPackager.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0" + "@parcel/plugin": "^2.0.0" } } diff --git a/packages/packagers/svg/package.json b/packages/packagers/svg/package.json index f85de448e8f..13fc3d91148 100644 --- a/packages/packagers/svg/package.json +++ b/packages/packagers/svg/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/packager-svg", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,12 +17,12 @@ "source": "src/SVGPackager.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/types": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", + "@parcel/types": "^2.0.0", + "@parcel/utils": "^2.0.0", "posthtml": "^0.16.4" } } diff --git a/packages/packagers/ts/package.json b/packages/packagers/ts/package.json index fc7de9292f9..63b32f77d5f 100644 --- a/packages/packagers/ts/package.json +++ b/packages/packagers/ts/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/packager-ts", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,9 +17,9 @@ "source": "src/TSPackager.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0" + "@parcel/plugin": "^2.0.0" } } diff --git a/packages/packagers/xml/package.json b/packages/packagers/xml/package.json index 981e8c092d6..2ba8949d2ff 100644 --- a/packages/packagers/xml/package.json +++ b/packages/packagers/xml/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/packager-xml", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,12 +17,12 @@ "source": "src/XMLPackager.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/types": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", + "@parcel/types": "^2.0.0", + "@parcel/utils": "^2.0.0", "@xmldom/xmldom": "^0.7.5" } } diff --git a/packages/reporters/build-metrics/package.json b/packages/reporters/build-metrics/package.json index 88a623a0600..fb9e63a79da 100644 --- a/packages/reporters/build-metrics/package.json +++ b/packages/reporters/build-metrics/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/reporter-build-metrics", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/BuildMetricsReporter.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0" + "@parcel/plugin": "^2.0.0", + "@parcel/utils": "^2.0.0" } } diff --git a/packages/reporters/bundle-analyzer/package.json b/packages/reporters/bundle-analyzer/package.json index caf1d6b5818..3d752da6a26 100644 --- a/packages/reporters/bundle-analyzer/package.json +++ b/packages/reporters/bundle-analyzer/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/reporter-bundle-analyzer", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,14 +17,14 @@ "source": "src/BundleAnalyzerReporter.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-alpha.3.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", + "@parcel/utils": "^2.0.0", "nullthrows": "^1.1.1" }, "devDependencies": { - "@parcel/types": "2.0.0-rc.0" + "@parcel/types": "^2.0.0" } } diff --git a/packages/reporters/bundle-buddy/package.json b/packages/reporters/bundle-buddy/package.json index 83cc3cccf29..52b4729fecc 100644 --- a/packages/reporters/bundle-buddy/package.json +++ b/packages/reporters/bundle-buddy/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/reporter-bundle-buddy", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,9 +17,9 @@ "source": "src/BundleBuddyReporter.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0" + "@parcel/plugin": "^2.0.0" } } diff --git a/packages/reporters/cli/package.json b/packages/reporters/cli/package.json index dac857f25d7..f829356d1b1 100644 --- a/packages/reporters/cli/package.json +++ b/packages/reporters/cli/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/reporter-cli", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,12 +17,12 @@ "source": "src/CLIReporter.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/types": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", + "@parcel/types": "^2.0.0", + "@parcel/utils": "^2.0.0", "chalk": "^4.1.0", "filesize": "^6.1.0", "nullthrows": "^1.1.1", diff --git a/packages/reporters/dev-server/package.json b/packages/reporters/dev-server/package.json index f94416581f8..f7eeb6b6cb8 100644 --- a/packages/reporters/dev-server/package.json +++ b/packages/reporters/dev-server/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/reporter-dev-server", - "version": "2.0.0-rc.0", + "version": "2.0.0", "description": "Blazing fast, zero configuration web application bundler", "license": "MIT", "publishConfig": { @@ -18,11 +18,11 @@ "source": "src/ServerReporter.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", + "@parcel/utils": "^2.0.0", "connect": "^3.7.0", "ejs": "^3.1.6", "http-proxy-middleware": "^1.0.0", @@ -31,7 +31,7 @@ "ws": "^7.0.0" }, "devDependencies": { - "@parcel/babel-preset": "2.0.0-rc.0", - "@parcel/types": "2.0.0-rc.0" + "@parcel/babel-preset": "^2.0.0", + "@parcel/types": "^2.0.0" } } diff --git a/packages/reporters/json/package.json b/packages/reporters/json/package.json index bf6c585a10c..c6cbf9eb480 100644 --- a/packages/reporters/json/package.json +++ b/packages/reporters/json/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/reporter-json", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,12 +17,12 @@ "source": "src/JSONReporter.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/types": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", + "@parcel/types": "^2.0.0", + "@parcel/utils": "^2.0.0", "nullthrows": "^1.1.1" } } diff --git a/packages/reporters/sourcemap-visualiser/package.json b/packages/reporters/sourcemap-visualiser/package.json index d6242c5fc7a..60e1d307174 100644 --- a/packages/reporters/sourcemap-visualiser/package.json +++ b/packages/reporters/sourcemap-visualiser/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/reporter-sourcemap-visualiser", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,14 +17,14 @@ "source": "src/SourceMapVisualiser.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-alpha.3.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", + "@parcel/utils": "^2.0.0", "nullthrows": "^1.1.1" }, "devDependencies": { - "@parcel/types": "2.0.0-rc.0" + "@parcel/types": "^2.0.0" } } diff --git a/packages/resolvers/default/package.json b/packages/resolvers/default/package.json index 2d7ec173f43..3c4eaefa8b0 100644 --- a/packages/resolvers/default/package.json +++ b/packages/resolvers/default/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/resolver-default", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,11 +17,11 @@ "source": "src/DefaultResolver.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/node-resolver-core": "2.0.0-rc.0", - "@parcel/plugin": "2.0.0-rc.0" + "@parcel/node-resolver-core": "^2.0.0", + "@parcel/plugin": "^2.0.0" }, "devDependencies": { "@babel/core": "^7.12.2" diff --git a/packages/resolvers/glob/package.json b/packages/resolvers/glob/package.json index 19b5b018e0b..43053508146 100644 --- a/packages/resolvers/glob/package.json +++ b/packages/resolvers/glob/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/resolver-glob", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,12 +17,12 @@ "source": "src/GlobResolver.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/diagnostic": "2.0.0-rc.0", - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/diagnostic": "^2.0.0", + "@parcel/plugin": "^2.0.0", + "@parcel/utils": "^2.0.0", "micromatch": "^4.0.2", "nullthrows": "^1.1.1" } diff --git a/packages/runtimes/hmr/package.json b/packages/runtimes/hmr/package.json index 14172cc6b32..6c674e6d8f6 100644 --- a/packages/runtimes/hmr/package.json +++ b/packages/runtimes/hmr/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/runtime-browser-hmr", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/HMRRuntime.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0" + "@parcel/plugin": "^2.0.0", + "@parcel/utils": "^2.0.0" } } diff --git a/packages/runtimes/js/package.json b/packages/runtimes/js/package.json index 80a026796a4..10e6fbc4e6d 100644 --- a/packages/runtimes/js/package.json +++ b/packages/runtimes/js/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/runtime-js", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,11 +17,11 @@ "source": "src/JSRuntime.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", + "@parcel/utils": "^2.0.0", "nullthrows": "^1.1.1" } } diff --git a/packages/runtimes/react-refresh/package.json b/packages/runtimes/react-refresh/package.json index 8d162fdb47e..7537aeae333 100644 --- a/packages/runtimes/react-refresh/package.json +++ b/packages/runtimes/react-refresh/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/runtime-react-refresh", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,11 +17,11 @@ "source": "src/ReactRefreshRuntime.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", + "@parcel/utils": "^2.0.0", "react-refresh": "^0.9.0" } } diff --git a/packages/runtimes/service-worker/package.json b/packages/runtimes/service-worker/package.json index 46e5335d254..ab628eded5a 100644 --- a/packages/runtimes/service-worker/package.json +++ b/packages/runtimes/service-worker/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/runtime-service-worker", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,11 +17,11 @@ "source": "./src/ServiceWorkerRuntime.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", + "@parcel/utils": "^2.0.0", "nullthrows": "^1.1.1" } } diff --git a/packages/shared/babel-ast-utils/package.json b/packages/shared/babel-ast-utils/package.json index beec07cf70f..d4f31404c69 100644 --- a/packages/shared/babel-ast-utils/package.json +++ b/packages/shared/babel-ast-utils/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/babel-ast-utils", - "version": "2.0.0-rc.0", + "version": "2.0.0", "description": "Blazing fast, zero configuration web application bundler", "license": "MIT", "publishConfig": { @@ -21,9 +21,9 @@ }, "dependencies": { "@babel/parser": "^7.0.0", - "@parcel/babylon-walk": "2.0.0-rc.0", + "@parcel/babylon-walk": "^2.0.0", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/utils": "^2.0.0", "astring": "^1.6.2" } } diff --git a/packages/transformers/babel/package.json b/packages/transformers/babel/package.json index f736d6de124..258c101fe9d 100644 --- a/packages/transformers/babel/package.json +++ b/packages/transformers/babel/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-babel", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,7 +17,7 @@ "source": "src/BabelTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { "@babel/core": "^7.12.0", @@ -25,11 +25,11 @@ "@babel/helper-compilation-targets": "^7.8.4", "@babel/plugin-transform-flow-strip-types": "^7.0.0", "@babel/traverse": "^7.0.0", - "@parcel/babel-ast-utils": "2.0.0-rc.0", - "@parcel/diagnostic": "2.0.0-rc.0", - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/babel-ast-utils": "^2.0.0", + "@parcel/diagnostic": "^2.0.0", + "@parcel/plugin": "^2.0.0", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/utils": "^2.0.0", "browserslist": "^4.6.6", "core-js": "^3.2.1", "json5": "^2.1.0", @@ -39,6 +39,6 @@ "devDependencies": { "@babel/core": "^7.12.0", "@babel/preset-env": "^7.0.0", - "@parcel/types": "2.0.0-rc.0" + "@parcel/types": "^2.0.0" } } diff --git a/packages/transformers/coffeescript/package.json b/packages/transformers/coffeescript/package.json index 2e6f5c31d9a..612a53f114b 100644 --- a/packages/transformers/coffeescript/package.json +++ b/packages/transformers/coffeescript/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-coffeescript", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,12 +17,12 @@ "source": "src/CoffeeScriptTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/utils": "^2.0.0", "coffeescript": "^2.0.3", "nullthrows": "^1.1.1", "semver": "^5.4.1" diff --git a/packages/transformers/css/package.json b/packages/transformers/css/package.json index 9f353ddd090..732df16c660 100644 --- a/packages/transformers/css/package.json +++ b/packages/transformers/css/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-css", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,12 +17,12 @@ "source": "src/CSSTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/utils": "^2.0.0", "nullthrows": "^1.1.1", "postcss": "^8.3.0", "postcss-value-parser": "^4.1.0", diff --git a/packages/transformers/elm/package.json b/packages/transformers/elm/package.json index 9872d0fd660..d89146b83ab 100644 --- a/packages/transformers/elm/package.json +++ b/packages/transformers/elm/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-elm", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,11 +17,11 @@ "source": "src/ElmTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-alpha.3.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/diagnostic": "2.0.0-rc.0", - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/diagnostic": "^2.0.0", + "@parcel/plugin": "^2.0.0", "command-exists": "^1.2.8", "cross-spawn": "^7.0.3", "elm-hot": "^1.1.5", diff --git a/packages/transformers/glsl/package.json b/packages/transformers/glsl/package.json index 1726493033c..dc998a547be 100644 --- a/packages/transformers/glsl/package.json +++ b/packages/transformers/glsl/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-glsl", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/GLSLTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", "glslify-bundle": "^5.1.1", "glslify-deps": "^1.3.1" } diff --git a/packages/transformers/graphql/package.json b/packages/transformers/graphql/package.json index 956d21be9dc..62f18adbf90 100644 --- a/packages/transformers/graphql/package.json +++ b/packages/transformers/graphql/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-graphql", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/GraphQLTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", "graphql": "^15.0.0", "graphql-import-macro": "^1.0.0" } diff --git a/packages/transformers/html/package.json b/packages/transformers/html/package.json index b1eb1ad5fd5..496a49ef487 100644 --- a/packages/transformers/html/package.json +++ b/packages/transformers/html/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-html", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,11 +17,11 @@ "source": "src/HTMLTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/hash": "2.0.0-rc.0", - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/hash": "^2.0.0", + "@parcel/plugin": "^2.0.0", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", "posthtml-parser": "^0.10.1", diff --git a/packages/transformers/image/package.json b/packages/transformers/image/package.json index e9cefdb7381..d2e0e22f65c 100644 --- a/packages/transformers/image/package.json +++ b/packages/transformers/image/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-image", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -13,11 +13,11 @@ "source": "src/ImageTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/workers": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", + "@parcel/workers": "^2.0.0", "nullthrows": "^1.1.1" }, "devDependencies": { diff --git a/packages/transformers/inline-string/package.json b/packages/transformers/inline-string/package.json index 5bc76ed05f8..fb5e8de2942 100644 --- a/packages/transformers/inline-string/package.json +++ b/packages/transformers/inline-string/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-inline-string", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,9 +17,9 @@ "source": "src/InlineStringTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0" + "@parcel/plugin": "^2.0.0" } } diff --git a/packages/transformers/inline/package.json b/packages/transformers/inline/package.json index d6cc684b3d5..0ee47c90535 100644 --- a/packages/transformers/inline/package.json +++ b/packages/transformers/inline/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-inline", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,9 +17,9 @@ "source": "src/InlineTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0" + "@parcel/plugin": "^2.0.0" } } diff --git a/packages/transformers/js/native.js b/packages/transformers/js/native.js index d211ea527b2..ad423318745 100644 --- a/packages/transformers/js/native.js +++ b/packages/transformers/js/native.js @@ -28,6 +28,4 @@ if (process.env.PARCEL_BUILD_ENV === 'production') { }; } else if (require('fs').existsSync(require('path').join(__dirname, name))) { module.exports = require(`./${name}`); -} else { - module.exports = require(`self-published/${name}`); } diff --git a/packages/transformers/js/package.json b/packages/transformers/js/package.json index 9ce2bb92cad..50e8d66170e 100644 --- a/packages/transformers/js/package.json +++ b/packages/transformers/js/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-js", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -19,7 +19,7 @@ "name": "parcel-swc" }, "engines": { - "parcel": "^2.0.0-beta.1", + "parcel": "^2.0.0", "node": ">= 12.0.0" }, "files": [ @@ -30,10 +30,10 @@ "*.node" ], "dependencies": { - "@parcel/diagnostic": "2.0.0-rc.0", - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/diagnostic": "^2.0.0", + "@parcel/plugin": "^2.0.0", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/utils": "^2.0.0", "@swc/helpers": "^0.2.11", "browserslist": "^4.6.6", "detect-libc": "^1.0.3", @@ -43,8 +43,7 @@ "semver": "^5.4.1" }, "devDependencies": { - "@napi-rs/cli": "1.0.4", - "self-published": "npm:@parcel/transformer-js@2.0.0-rc.0" + "@napi-rs/cli": "1.0.4" }, "scripts": { "build": "napi build --platform --cargo-cwd napi", diff --git a/packages/transformers/json/package.json b/packages/transformers/json/package.json index 5bd643d1cb3..bfd2189e82a 100644 --- a/packages/transformers/json/package.json +++ b/packages/transformers/json/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-json", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/JSONTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", "json5": "^2.1.0" } } diff --git a/packages/transformers/jsonld/package.json b/packages/transformers/jsonld/package.json index 6ed9d73e5d1..fffaa5a7f44 100644 --- a/packages/transformers/jsonld/package.json +++ b/packages/transformers/jsonld/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-jsonld", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,14 +17,14 @@ "source": "src/JSONLDTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "scripts": { "test": "yarn workspace @parcel/integration-tests test -g jsonld" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/types": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", + "@parcel/types": "^2.0.0", "json5": "^2.1.2" } } diff --git a/packages/transformers/less/package.json b/packages/transformers/less/package.json index 999b0322d61..e287190a28b 100644 --- a/packages/transformers/less/package.json +++ b/packages/transformers/less/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-less", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/LessTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", "@parcel/source-map": "^2.0.0", "less": "^4.1.1" } diff --git a/packages/transformers/mdx/package.json b/packages/transformers/mdx/package.json index 29e10c7a1ee..e1ce76610ae 100644 --- a/packages/transformers/mdx/package.json +++ b/packages/transformers/mdx/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-mdx", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,11 +17,11 @@ "source": "src/MDXTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { "@mdx-js/mdx": "^1.6.22", - "@parcel/plugin": "2.0.0-rc.0" + "@parcel/plugin": "^2.0.0" }, "peerDependencies": { "@mdx-js/react": "^1.6.22" diff --git a/packages/transformers/postcss/package.json b/packages/transformers/postcss/package.json index b58607bc838..0501069b1b7 100644 --- a/packages/transformers/postcss/package.json +++ b/packages/transformers/postcss/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-postcss", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,12 +17,12 @@ "source": "src/PostCSSTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/hash": "2.0.0-rc.0", - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/hash": "^2.0.0", + "@parcel/plugin": "^2.0.0", + "@parcel/utils": "^2.0.0", "clone": "^2.1.1", "css-modules-loader-core": "^1.1.0", "nullthrows": "^1.1.1", diff --git a/packages/transformers/posthtml/package.json b/packages/transformers/posthtml/package.json index b9180495d18..1aa3a4b4f61 100644 --- a/packages/transformers/posthtml/package.json +++ b/packages/transformers/posthtml/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-posthtml", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,11 +17,11 @@ "source": "src/PostHTMLTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", + "@parcel/utils": "^2.0.0", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", "posthtml-parser": "^0.10.1", diff --git a/packages/transformers/pug/package.json b/packages/transformers/pug/package.json index d943fefffce..f854b91c96e 100644 --- a/packages/transformers/pug/package.json +++ b/packages/transformers/pug/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-pug", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/PugTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", "pug": "^3.0.2" } } diff --git a/packages/transformers/raw/package.json b/packages/transformers/raw/package.json index 9cc735a5583..b3a9f68a957 100644 --- a/packages/transformers/raw/package.json +++ b/packages/transformers/raw/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-raw", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,9 +17,9 @@ "source": "src/RawTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0" + "@parcel/plugin": "^2.0.0" } } diff --git a/packages/transformers/react-refresh-wrap/package.json b/packages/transformers/react-refresh-wrap/package.json index 3c7c009f948..db2834ebc50 100644 --- a/packages/transformers/react-refresh-wrap/package.json +++ b/packages/transformers/react-refresh-wrap/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-react-refresh-wrap", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,11 +17,11 @@ "source": "src/ReactRefreshWrapTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", + "@parcel/utils": "^2.0.0", "react-refresh": "^0.9.0" } } diff --git a/packages/transformers/sass/package.json b/packages/transformers/sass/package.json index da7d591b33b..cbe72c64d34 100644 --- a/packages/transformers/sass/package.json +++ b/packages/transformers/sass/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-sass", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/SassTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", "@parcel/source-map": "^2.0.0", "sass": "^1.38.0" } diff --git a/packages/transformers/stylus/package.json b/packages/transformers/stylus/package.json index 4ba8e8e925e..cfbd3debf6c 100644 --- a/packages/transformers/stylus/package.json +++ b/packages/transformers/stylus/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-stylus", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,11 +17,11 @@ "source": "src/StylusTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", + "@parcel/utils": "^2.0.0", "stylus": "^0.55.0" } } diff --git a/packages/transformers/sugarss/package.json b/packages/transformers/sugarss/package.json index df761288d21..2749199b1fa 100644 --- a/packages/transformers/sugarss/package.json +++ b/packages/transformers/sugarss/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-sugarss", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/SugarssTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", "postcss": "^8.3.0", "sugarss": "^3.0.3" } diff --git a/packages/transformers/svg-react/package.json b/packages/transformers/svg-react/package.json index c78b53eb96e..702bc99cbc0 100644 --- a/packages/transformers/svg-react/package.json +++ b/packages/transformers/svg-react/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-svg-react", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/SvgReactTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", "@svgr/core": "^5.5.0", "@svgr/plugin-jsx": "^5.5.0", "@svgr/plugin-svgo": "^5.5.0", diff --git a/packages/transformers/svg/package.json b/packages/transformers/svg/package.json index 6d83419813f..f9c1a3f899e 100644 --- a/packages/transformers/svg/package.json +++ b/packages/transformers/svg/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-svg", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,11 +17,11 @@ "source": "src/SVGTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/hash": "2.0.0-rc.0", - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/hash": "^2.0.0", + "@parcel/plugin": "^2.0.0", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", "posthtml-parser": "^0.10.1", diff --git a/packages/transformers/toml/package.json b/packages/transformers/toml/package.json index 07695e6777c..4f926b6b2ba 100644 --- a/packages/transformers/toml/package.json +++ b/packages/transformers/toml/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-toml", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/TOMLTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { "@iarna/toml": "^2.2.3", - "@parcel/plugin": "2.0.0-rc.0" + "@parcel/plugin": "^2.0.0" } } diff --git a/packages/transformers/typescript-tsc/package.json b/packages/transformers/typescript-tsc/package.json index 29d664ae605..e53f850c80c 100644 --- a/packages/transformers/typescript-tsc/package.json +++ b/packages/transformers/typescript-tsc/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-typescript-tsc", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,11 +17,11 @@ "source": "src/TSCTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/ts-utils": "2.0.0-rc.0" + "@parcel/plugin": "^2.0.0", + "@parcel/ts-utils": "^2.0.0" }, "devDependencies": { "typescript": ">=3.0.0" diff --git a/packages/transformers/typescript-types/package.json b/packages/transformers/typescript-types/package.json index 346346dd179..c1e4382f8e0 100644 --- a/packages/transformers/typescript-types/package.json +++ b/packages/transformers/typescript-types/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-typescript-types", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,12 +17,12 @@ "source": "src/TSTypesTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", "@parcel/source-map": "^2.0.0", - "@parcel/ts-utils": "2.0.0-rc.0", + "@parcel/ts-utils": "^2.0.0", "nullthrows": "^1.1.1" }, "devDependencies": { diff --git a/packages/transformers/vue/package.json b/packages/transformers/vue/package.json index 28f6cc02b4d..d0a7fc9c2aa 100644 --- a/packages/transformers/vue/package.json +++ b/packages/transformers/vue/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-vue", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,13 +17,13 @@ "source": "src/VueTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/diagnostic": "2.0.0-rc.0", - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/diagnostic": "^2.0.0", + "@parcel/plugin": "^2.0.0", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/utils": "^2.0.0", "@vue/compiler-sfc": "^3.0.0", "consolidate": "^0.16.0", "nullthrows": "^1.1.1", diff --git a/packages/transformers/webextension/package.json b/packages/transformers/webextension/package.json index 59082a3a444..cace46290e9 100644 --- a/packages/transformers/webextension/package.json +++ b/packages/transformers/webextension/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-webextension", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -16,12 +16,12 @@ "main": "lib/WebExtensionTransformer.js", "source": "src/WebExtensionTransformer.js", "engines": { - "parcel": "^2.0.0-alpha.1.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/diagnostic": "2.0.0-rc.0", - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/diagnostic": "^2.0.0", + "@parcel/plugin": "^2.0.0", + "@parcel/utils": "^2.0.0", "content-security-policy-parser": "^0.3.0", "json-source-map": "^0.6.1" } diff --git a/packages/transformers/webmanifest/package.json b/packages/transformers/webmanifest/package.json index 2dac3d942a5..a506e482255 100644 --- a/packages/transformers/webmanifest/package.json +++ b/packages/transformers/webmanifest/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-webmanifest", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -16,12 +16,12 @@ "main": "lib/WebManifestTransformer.js", "source": "src/WebManifestTransformer.js", "engines": { - "parcel": "^2.0.0-alpha.1.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/diagnostic": "2.0.0-rc.0", - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/diagnostic": "^2.0.0", + "@parcel/plugin": "^2.0.0", + "@parcel/utils": "^2.0.0", "json-source-map": "^0.6.1" } } diff --git a/packages/transformers/worklet/package.json b/packages/transformers/worklet/package.json index 6a99fa480b1..5bb223e21b6 100644 --- a/packages/transformers/worklet/package.json +++ b/packages/transformers/worklet/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-worklet", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,9 +17,9 @@ "source": "src/WorkletTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0" + "@parcel/plugin": "^2.0.0" } } diff --git a/packages/transformers/xml/package.json b/packages/transformers/xml/package.json index ab5cdcbbf59..3e07c2769de 100644 --- a/packages/transformers/xml/package.json +++ b/packages/transformers/xml/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-xml", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/XMLTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", "@xmldom/xmldom": "^0.7.5" } } diff --git a/packages/transformers/yaml/package.json b/packages/transformers/yaml/package.json index acefaec94db..2ec9203d801 100644 --- a/packages/transformers/yaml/package.json +++ b/packages/transformers/yaml/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-yaml", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/YAMLTransformer.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", "js-yaml": "^3.10.0" } } diff --git a/packages/utils/babel-plugin-transform-runtime/package.json b/packages/utils/babel-plugin-transform-runtime/package.json index 954e617caf1..a5c3ec7348b 100644 --- a/packages/utils/babel-plugin-transform-runtime/package.json +++ b/packages/utils/babel-plugin-transform-runtime/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/babel-plugin-transform-runtime", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -23,6 +23,6 @@ }, "devDependencies": { "@babel/core": "^7.12.0", - "@parcel/babel-preset-env": "2.0.0-rc.0" + "@parcel/babel-preset-env": "^2.0.0" } } diff --git a/packages/utils/babel-preset-env/package.json b/packages/utils/babel-preset-env/package.json index 6ce766af130..8f4aebc7872 100644 --- a/packages/utils/babel-preset-env/package.json +++ b/packages/utils/babel-preset-env/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/babel-preset-env", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" diff --git a/packages/utils/babylon-walk/package.json b/packages/utils/babylon-walk/package.json index b3e736ef7c2..79ca807ba34 100755 --- a/packages/utils/babylon-walk/package.json +++ b/packages/utils/babylon-walk/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/babylon-walk", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" diff --git a/packages/utils/create-react-app/package.json b/packages/utils/create-react-app/package.json index 032f4063e9f..b15d36c6e5e 100644 --- a/packages/utils/create-react-app/package.json +++ b/packages/utils/create-react-app/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/create-react-app", - "version": "2.0.0-rc.0", + "version": "2.0.0", "bin": { "parcel-create-react-app": "src/bin.js" }, @@ -26,6 +26,6 @@ "v8-compile-cache": "^2.0.0" }, "devDependencies": { - "@parcel/babel-register": "2.0.0-rc.0" + "@parcel/babel-register": "^2.0.0" } } diff --git a/packages/utils/events/package.json b/packages/utils/events/package.json index 1b2cb572a74..86e9fdd91d8 100644 --- a/packages/utils/events/package.json +++ b/packages/utils/events/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/events", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" diff --git a/packages/utils/fs-search/index.js b/packages/utils/fs-search/index.js index 55c88411063..b2b2fda0387 100644 --- a/packages/utils/fs-search/index.js +++ b/packages/utils/fs-search/index.js @@ -17,6 +17,4 @@ if (process.env.PARCEL_BUILD_ENV === 'production') { module.exports = require(name); } else if (require('fs').existsSync(require('path').join(__dirname, name))) { module.exports = require(name); -} else { - module.exports = require('self-published'); } diff --git a/packages/utils/fs-search/package.json b/packages/utils/fs-search/package.json index a2d2a5a66bb..84e8dceca80 100644 --- a/packages/utils/fs-search/package.json +++ b/packages/utils/fs-search/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/fs-search", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -31,7 +31,6 @@ "detect-libc": "^1.0.3" }, "devDependencies": { - "@napi-rs/cli": "1.0.4", - "self-published": "npm:@parcel/fs-search@2.0.0-rc.0" + "@napi-rs/cli": "1.0.4" } } diff --git a/packages/utils/fs-write-stream-atomic/package.json b/packages/utils/fs-write-stream-atomic/package.json index 38eaa6ef342..b58f3d2b829 100644 --- a/packages/utils/fs-write-stream-atomic/package.json +++ b/packages/utils/fs-write-stream-atomic/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/fs-write-stream-atomic", - "version": "2.0.0-rc.0", + "version": "2.0.0", "description": "Like `fs.createWriteStream(...)`, but atomic.", "main": "index.js", "directories": { diff --git a/packages/utils/hash/index.js b/packages/utils/hash/index.js index 8a62a4dbcb3..7d873c47a22 100644 --- a/packages/utils/hash/index.js +++ b/packages/utils/hash/index.js @@ -17,9 +17,6 @@ if (process.env.PARCEL_BUILD_ENV === 'production') { module.exports = require(name); } else if (require('fs').existsSync(require('path').join(__dirname, name))) { module.exports = require(name); -} else { - // This has to be published first... - // module.exports = require('self-published'); } module.exports.init = Promise.resolve(); diff --git a/packages/utils/hash/package.json b/packages/utils/hash/package.json index 087f44a7dd4..f4751ef48de 100644 --- a/packages/utils/hash/package.json +++ b/packages/utils/hash/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/hash", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "main": "index.js", "browser": "browser.js", diff --git a/packages/utils/node-libs-browser/package.json b/packages/utils/node-libs-browser/package.json index 974594230a4..c9e1fab5d92 100755 --- a/packages/utils/node-libs-browser/package.json +++ b/packages/utils/node-libs-browser/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/node-libs-browser", - "version": "2.0.0-rc.0", + "version": "2.0.0", "author": "Tobias Koppers @sokra", "description": "The node core libs for in browser usage.", "license": "MIT", diff --git a/packages/utils/node-resolver-core/package.json b/packages/utils/node-resolver-core/package.json index 7193f31b80d..3504805e1d3 100644 --- a/packages/utils/node-resolver-core/package.json +++ b/packages/utils/node-resolver-core/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/node-resolver-core", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -19,9 +19,9 @@ "node": ">= 12.0.0" }, "dependencies": { - "@parcel/diagnostic": "2.0.0-rc.0", - "@parcel/node-libs-browser": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/diagnostic": "^2.0.0", + "@parcel/node-libs-browser": "^2.0.0", + "@parcel/utils": "^2.0.0", "micromatch": "^4.0.4", "nullthrows": "^1.1.1" } diff --git a/packages/utils/service-worker/package.json b/packages/utils/service-worker/package.json index 9826a67ce88..08476246b66 100644 --- a/packages/utils/service-worker/package.json +++ b/packages/utils/service-worker/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/service-worker", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -18,6 +18,6 @@ "sideEffects": false, "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" } } diff --git a/packages/utils/ts-utils/package.json b/packages/utils/ts-utils/package.json index ba5a07a620e..35face5b64d 100644 --- a/packages/utils/ts-utils/package.json +++ b/packages/utils/ts-utils/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/ts-utils", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" diff --git a/packages/validators/eslint/package.json b/packages/validators/eslint/package.json index ea01d148690..3d20de647e8 100644 --- a/packages/validators/eslint/package.json +++ b/packages/validators/eslint/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/validator-eslint", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,11 +17,11 @@ "source": "src/EslintValidator.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0", + "@parcel/plugin": "^2.0.0", + "@parcel/utils": "^2.0.0", "chalk": "^4.1.0" }, "devDependencies": { diff --git a/packages/validators/typescript/package.json b/packages/validators/typescript/package.json index e7c654cc007..4bd9980e305 100644 --- a/packages/validators/typescript/package.json +++ b/packages/validators/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/validator-typescript", - "version": "2.0.0-rc.0", + "version": "2.0.0", "license": "MIT", "publishConfig": { "access": "public" @@ -17,14 +17,14 @@ "source": "src/TypeScriptValidator.js", "engines": { "node": ">= 12.0.0", - "parcel": "^2.0.0-beta.1" + "parcel": "^2.0.0" }, "dependencies": { - "@parcel/diagnostic": "2.0.0-rc.0", - "@parcel/plugin": "2.0.0-rc.0", - "@parcel/ts-utils": "2.0.0-rc.0", - "@parcel/types": "2.0.0-rc.0", - "@parcel/utils": "2.0.0-rc.0" + "@parcel/diagnostic": "^2.0.0", + "@parcel/plugin": "^2.0.0", + "@parcel/ts-utils": "^2.0.0", + "@parcel/types": "^2.0.0", + "@parcel/utils": "^2.0.0" }, "devDependencies": { "typescript": ">=3.0.0" diff --git a/yarn.lock b/yarn.lock index 76a1ac8e93f..d4a41e2a882 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2121,14 +2121,6 @@ dependencies: "@octokit/openapi-types" "^6.2.0" -"@parcel/source-map@2.0.0-rc.6": - version "2.0.0-rc.6" - resolved "https://registry.yarnpkg.com/@parcel/source-map/-/source-map-2.0.0-rc.6.tgz#9b0e84ba4bca9fe8aee484941e48345c79c4121c" - integrity sha512-qtXLd9dbxWx/ybe1dduAzAGzb7iTSQv3imNZo7pVyEtSaCcphg+rTmY8/Fg3MQqqu7of/2+tEqNAGMz8nOJyUA== - dependencies: - detect-libc "^1.0.3" - globby "^11.0.3" - "@parcel/source-map@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@parcel/source-map/-/source-map-2.0.0.tgz#41cf004109bbf277ceaf096a58838ff6a59af774" @@ -11618,30 +11610,6 @@ scheduler@^0.18.0: loose-envify "^1.1.0" object-assign "^4.1.1" -"self-published@npm:@parcel/fs-search@2.0.0-rc.0": - version "2.0.0-rc.0" - resolved "https://registry.yarnpkg.com/@parcel/fs-search/-/fs-search-2.0.0-rc.0.tgz#c0a26cec8a703d1490ab7e8d323b9d2191212d19" - integrity sha512-x/gdmnxWIhuP6kVUe3u8fiY5JBCmALHNJIPNDGdoVada1CEEHF+DJtQG7LT+LIcPFeAqXT6qx05HrgO94KLaUQ== - dependencies: - detect-libc "^1.0.3" - -"self-published@npm:@parcel/transformer-js@2.0.0-rc.0": - version "2.0.0-rc.0" - resolved "https://registry.yarnpkg.com/@parcel/transformer-js/-/transformer-js-2.0.0-rc.0.tgz#92437bca0c48289ea7044c98f583b6a9d5028e90" - integrity sha512-zmp2ha7fnIBCG7d56MBneXjZxhOBcJLXpO+3rpiwGoic2fQdcNk702QHGBmfqnZW4u/pebGZpolj/wUqtP0bcQ== - dependencies: - "@parcel/diagnostic" "2.0.0-rc.0" - "@parcel/plugin" "2.0.0-rc.0" - "@parcel/source-map" "2.0.0-rc.6" - "@parcel/utils" "2.0.0-rc.0" - "@swc/helpers" "^0.2.11" - browserslist "^4.6.6" - detect-libc "^1.0.3" - micromatch "^4.0.2" - nullthrows "^1.1.1" - regenerator-runtime "^0.13.7" - semver "^5.4.1" - semver-compare@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" From 674539e13167275be17620f638ea2ceb98aa0c54 Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Thu, 14 Oct 2021 13:17:46 -0700 Subject: [PATCH 41/68] Don't load PostCSS and PostHTML config when inside node_modules (#7088) --- packages/transformers/postcss/src/loadConfig.js | 4 ++++ packages/transformers/posthtml/src/PostHTMLTransformer.js | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/packages/transformers/postcss/src/loadConfig.js b/packages/transformers/postcss/src/loadConfig.js index c2dd54fb41f..48cce81b222 100644 --- a/packages/transformers/postcss/src/loadConfig.js +++ b/packages/transformers/postcss/src/loadConfig.js @@ -104,6 +104,10 @@ export async function load({ options: PluginOptions, logger: PluginLogger, |}): Promise { + if (!config.isSource) { + return; + } + let configFile: any = await config.getConfig( ['.postcssrc', '.postcssrc.json', '.postcssrc.js', 'postcss.config.js'], {packageKey: 'postcss'}, diff --git a/packages/transformers/posthtml/src/PostHTMLTransformer.js b/packages/transformers/posthtml/src/PostHTMLTransformer.js index c2d81d78b36..fa7c11f9323 100644 --- a/packages/transformers/posthtml/src/PostHTMLTransformer.js +++ b/packages/transformers/posthtml/src/PostHTMLTransformer.js @@ -13,6 +13,10 @@ import loadPlugins from './loadPlugins'; export default (new Transformer({ async loadConfig({config, options, logger}) { + if (!config.isSource) { + return; + } + let configFile = await config.getConfig( ['.posthtmlrc', '.posthtmlrc.js', 'posthtml.config.js'], { From 85b76e86ddc431b7140e114db5b16486962bf964 Mon Sep 17 00:00:00 2001 From: Ruyi Li Date: Fri, 15 Oct 2021 04:41:15 -0400 Subject: [PATCH 42/68] =?UTF-8?q?fix(vuetransfomer):=20fix=20unknown=20ass?= =?UTF-8?q?et=20language=20for=20vue=20scripts/templa=E2=80=A6=20(#7056)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(vuetransfomer): fix unknown asset language for vue scripts/templates/styles * test: loading external files from vue sfcs Co-authored-by: Jasper De Moor --- .../integration/vue-external-files/App.vue | 3 +++ .../integration/vue-external-files/main.pug | 5 ++++ .../integration/vue-external-files/script.ts | 7 ++++++ .../integration/vue-external-files/style.scss | 24 +++++++++++++++++++ packages/core/integration-tests/test/vue.js | 15 ++++++++++++ .../transformers/vue/src/VueTransformer.js | 6 ++--- 6 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 packages/core/integration-tests/test/integration/vue-external-files/App.vue create mode 100644 packages/core/integration-tests/test/integration/vue-external-files/main.pug create mode 100644 packages/core/integration-tests/test/integration/vue-external-files/script.ts create mode 100644 packages/core/integration-tests/test/integration/vue-external-files/style.scss diff --git a/packages/core/integration-tests/test/integration/vue-external-files/App.vue b/packages/core/integration-tests/test/integration/vue-external-files/App.vue new file mode 100644 index 00000000000..eb279ac0e69 --- /dev/null +++ b/packages/core/integration-tests/test/integration/vue-external-files/App.vue @@ -0,0 +1,3 @@ + + + diff --git a/packages/core/integration-tests/test/integration/vue-external-files/main.pug b/packages/core/integration-tests/test/integration/vue-external-files/main.pug new file mode 100644 index 00000000000..3f8aacc9ed0 --- /dev/null +++ b/packages/core/integration-tests/test/integration/vue-external-files/main.pug @@ -0,0 +1,5 @@ +div + h1 foo + h2 bar + div.box + p {{ msg }} diff --git a/packages/core/integration-tests/test/integration/vue-external-files/script.ts b/packages/core/integration-tests/test/integration/vue-external-files/script.ts new file mode 100644 index 00000000000..1c588c46c0c --- /dev/null +++ b/packages/core/integration-tests/test/integration/vue-external-files/script.ts @@ -0,0 +1,7 @@ +export default { + data () { + return { + msg: 'Hello World' + } + } +} diff --git a/packages/core/integration-tests/test/integration/vue-external-files/style.scss b/packages/core/integration-tests/test/integration/vue-external-files/style.scss new file mode 100644 index 00000000000..a2c0d32288b --- /dev/null +++ b/packages/core/integration-tests/test/integration/vue-external-files/style.scss @@ -0,0 +1,24 @@ +$cool-color: #c0ff33; + +div { + h1 { + color: red; + } +} + +h2 { + color: blue; + + &:hover { + color: $cool-color; + } +} + +.box { + border: 1px solid black; + + p { + color: $cool-color; + font-size: 10rem; + } +} diff --git a/packages/core/integration-tests/test/vue.js b/packages/core/integration-tests/test/vue.js index f55b0b82376..dc87ba48ed7 100644 --- a/packages/core/integration-tests/test/vue.js +++ b/packages/core/integration-tests/test/vue.js @@ -105,4 +105,19 @@ describe('vue', function() { assert.equal(typeof output.render, 'function'); assert.deepEqual(output.data(), {msg: 'Hello from Component A!'}); }); + it('should load external templates/styles/scripts properly', async function() { + let b = await bundle( + path.join(__dirname, '/integration/vue-external-files/App.vue'), + ); + let output = (await run(b)).default; + assert.equal(typeof output.render, 'function'); + assert.deepEqual(output.data(), {msg: 'Hello World'}); + let contents = await outputFS.readFile( + path.join(distDir, 'App.css'), + 'utf8', + ); + assert(contents.includes('color: #c0ff33')); + assert(contents.includes('h2:hover')); + assert(contents.includes('.box p')); + }); }); diff --git a/packages/transformers/vue/src/VueTransformer.js b/packages/transformers/vue/src/VueTransformer.js index 130f1474514..d7c8de30485 100644 --- a/packages/transformers/vue/src/VueTransformer.js +++ b/packages/transformers/vue/src/VueTransformer.js @@ -207,7 +207,7 @@ async function processPipeline({ await resolve(asset.filePath, template.src), ) ).toString(); - template.lang = extname(template.src); + template.lang = extname(template.src).slice(1); } let content = template.content; if (template.lang && !['htm', 'html'].includes(template.lang)) { @@ -267,7 +267,7 @@ ${ await resolve(asset.filePath, script.src), ) ).toString(); - script.lang = extname(script.src); + script.lang = extname(script.src).slice(1); } let type; switch (script.lang || 'js') { @@ -323,7 +323,7 @@ ${ if (!style.module) { style.module = MODULE_BY_NAME_RE.test(style.src); } - style.lang = extname(style.src); + style.lang = extname(style.src).slice(1); } switch (style.lang) { case 'less': From 4a62581dd430a6b12aad688f0a0ac3d087a5b5ad Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Sat, 16 Oct 2021 09:48:28 +0200 Subject: [PATCH 43/68] Use our own fs instead of Node's fs in the Npm package installer (#7103) --- packages/core/package-manager/src/Npm.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/package-manager/src/Npm.js b/packages/core/package-manager/src/Npm.js index 307091b5955..6391ce5f82c 100644 --- a/packages/core/package-manager/src/Npm.js +++ b/packages/core/package-manager/src/Npm.js @@ -2,7 +2,6 @@ import type {PackageInstaller, InstallerOptions} from './types'; -import fs from 'fs'; import path from 'path'; import spawn from 'cross-spawn'; import logger from '@parcel/logger'; @@ -19,6 +18,7 @@ export class Npm implements PackageInstaller { async install({ modules, cwd, + fs, packagePath, saveDev = true, }: InstallerOptions): Promise { From efe72271aa84936c4533a7a10f0fd29b84810cf9 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Mon, 18 Oct 2021 02:47:29 +0200 Subject: [PATCH 44/68] Don't visit the property of non-computed member expressions in the esm2cjs folder (#7102) --- .../test/integration/jsx-member/foo.jsx | 1 + .../test/integration/jsx-member/index.jsx | 7 +++++++ .../integration-tests/test/transpilation.js | 7 +++++++ .../js/core/src/dependency_collector.rs | 12 ++---------- packages/transformers/js/core/src/modules.rs | 4 ++++ packages/transformers/js/core/src/utils.rs | 19 +++++++++++++++++++ 6 files changed, 40 insertions(+), 10 deletions(-) create mode 100644 packages/core/integration-tests/test/integration/jsx-member/foo.jsx create mode 100644 packages/core/integration-tests/test/integration/jsx-member/index.jsx diff --git a/packages/core/integration-tests/test/integration/jsx-member/foo.jsx b/packages/core/integration-tests/test/integration/jsx-member/foo.jsx new file mode 100644 index 00000000000..4013f887b3a --- /dev/null +++ b/packages/core/integration-tests/test/integration/jsx-member/foo.jsx @@ -0,0 +1 @@ +export const Foo = null; diff --git a/packages/core/integration-tests/test/integration/jsx-member/index.jsx b/packages/core/integration-tests/test/integration/jsx-member/index.jsx new file mode 100644 index 00000000000..94d3965468b --- /dev/null +++ b/packages/core/integration-tests/test/integration/jsx-member/index.jsx @@ -0,0 +1,7 @@ +import { Foo } from "./foo"; + +const S = { + Foo: () => "S", +}; + +module.exports = ; diff --git a/packages/core/integration-tests/test/transpilation.js b/packages/core/integration-tests/test/transpilation.js index 5397e170279..cc669bbce28 100644 --- a/packages/core/integration-tests/test/transpilation.js +++ b/packages/core/integration-tests/test/transpilation.js @@ -87,6 +87,13 @@ describe('transpilation', function() { assert(file.includes('fileName: "integration/jsx/index.jsx"')); }); + it('should support compiling JSX correctly with member expression type', async function() { + await bundle(path.join(__dirname, '/integration/jsx-member/index.jsx')); + + let file = await outputFS.readFile(path.join(distDir, 'index.js'), 'utf8'); + assert(file.includes('React.createElement(S.Foo')); + }); + it('should support compiling JSX in JS files with React dependency', async function() { await bundle(path.join(__dirname, '/integration/jsx-react/index.js')); diff --git a/packages/transformers/js/core/src/dependency_collector.rs b/packages/transformers/js/core/src/dependency_collector.rs index 8be27903394..6b2c4a34185 100644 --- a/packages/transformers/js/core/src/dependency_collector.rs +++ b/packages/transformers/js/core/src/dependency_collector.rs @@ -10,6 +10,7 @@ use swc_ecmascript::ast; use swc_ecmascript::utils::ident::IdentLike; use swc_ecmascript::visit::{Fold, FoldWith}; +use crate::fold_member_expr_skip_prop; use crate::utils::*; use crate::Config; @@ -780,16 +781,7 @@ impl<'a> Fold for DependencyCollector<'a> { node.fold_children_with(self) } - fn fold_member_expr(&mut self, mut node: ast::MemberExpr) -> ast::MemberExpr { - node.obj = node.obj.fold_children_with(self); - - // To ensure that fold_expr doesn't replace `require` in non-computed member expressions - if node.computed { - node.prop = node.prop.fold_children_with(self); - } - - node - } + fold_member_expr_skip_prop! {} fn fold_expr(&mut self, node: ast::Expr) -> ast::Expr { use ast::*; diff --git a/packages/transformers/js/core/src/modules.rs b/packages/transformers/js/core/src/modules.rs index c64e5baa986..f6aafaf28e4 100644 --- a/packages/transformers/js/core/src/modules.rs +++ b/packages/transformers/js/core/src/modules.rs @@ -6,6 +6,8 @@ use swc_ecma_preset_env::{Feature, Versions}; use swc_ecmascript::ast::*; use swc_ecmascript::visit::{Fold, FoldWith}; +use crate::fold_member_expr_skip_prop; + type IdentId = (JsWord, SyntaxContext); macro_rules! id { ($ident: expr) => { @@ -613,4 +615,6 @@ impl Fold for ESMFold { _ => node.fold_children_with(self), } } + + fold_member_expr_skip_prop! {} } diff --git a/packages/transformers/js/core/src/utils.rs b/packages/transformers/js/core/src/utils.rs index faa481956ec..3f6372a5684 100644 --- a/packages/transformers/js/core/src/utils.rs +++ b/packages/transformers/js/core/src/utils.rs @@ -309,3 +309,22 @@ impl BailoutReason { } } } + +#[macro_export] +macro_rules! fold_member_expr_skip_prop { + () => { + fn fold_member_expr( + &mut self, + mut node: swc_ecmascript::ast::MemberExpr, + ) -> swc_ecmascript::ast::MemberExpr { + node.obj = node.obj.fold_children_with(self); + + // To ensure that fold_expr doesn't replace `require` in non-computed member expressions + if node.computed { + node.prop = node.prop.fold_children_with(self); + } + + node + } + }; +} From daed0c3fa3c1c5c52ab3e3a98f5494bfc3be06c4 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Thu, 21 Oct 2021 05:38:20 +0200 Subject: [PATCH 45/68] Bump swc, use strip_with_jsx (#7114) --- Cargo.lock | 191 ++++++++++++++------- packages/transformers/js/core/Cargo.toml | 8 +- packages/transformers/js/core/src/hoist.rs | 34 ++-- packages/transformers/js/core/src/lib.rs | 35 ++-- 4 files changed, 168 insertions(+), 100 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b0c6ca6fd75..f3db17885a8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -26,9 +26,9 @@ checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" [[package]] name = "ahash" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43bb833f0bf979d8475d38fbf09ed3b8a55e1885fe93ad3f93239fc6a4f17b98" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ "getrandom 0.2.3", "once_cell", @@ -67,9 +67,9 @@ checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" [[package]] name = "ast_node" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93f52ce8fac3d0e6720a92b0576d737c01b1b5db4dd786e962e5925f00bf755" +checksum = "e96d5444b02f3080edac8a144f6baf29b2fb6ff589ad4311559731a7c7529381" dependencies = [ "darling", "pmutil", @@ -137,9 +137,9 @@ checksum = "b4ae4235e6dac0694637c763029ecea1a2ec9e4e06ec2729bd21ba4d9c863eb7" [[package]] name = "bumpalo" -version = "3.7.1" +version = "3.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9df67f7bf9ef8498769f994239c45613ef0c5899415fb58e9add412d2c1a538" +checksum = "8f1e260c3a9040a7c19a12468758f4c16f31a81a1fe087482be9570ec864bb6c" [[package]] name = "bytemuck" @@ -563,6 +563,15 @@ dependencies = [ "unindent", ] +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if 1.0.0", +] + [[package]] name = "is-macro" version = "0.1.9" @@ -661,9 +670,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8f7255a17a627354f321ef0055d63b898c6fb27eff628af4d1b66b7331edf6" +checksum = "7b2f96d100e1cf1929e7719b7edb3b90ab5298072638fccd77be9ce942ecdfce" [[package]] name = "libdeflate-sys" @@ -692,6 +701,15 @@ dependencies = [ "cc", ] +[[package]] +name = "lock_api" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109" +dependencies = [ + "scopeguard", +] + [[package]] name = "log" version = "0.4.14" @@ -1014,6 +1032,37 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" +dependencies = [ + "cfg-if 1.0.0", + "instant", + "libc", + "redox_syscall", + "smallvec", + "winapi", +] + +[[package]] +name = "path-clean" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecba01bf2678719532c5e3059e0b5f0811273d94b397088b82e3bd0a78c78fdd" + [[package]] name = "path-slash" version = "0.1.4" @@ -1107,9 +1156,9 @@ dependencies = [ [[package]] name = "ppv-lite86" -version = "0.2.10" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" +checksum = "c3ca011bd0129ff4ae15cd04c4eef202cadf6c51c21e47aba319b4e0501db741" [[package]] name = "precomputed-hash" @@ -1125,9 +1174,9 @@ checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" [[package]] name = "proc-macro2" -version = "1.0.29" +version = "1.0.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d" +checksum = "edc3358ebc67bc8b7fa0c007f945b0b18226f78437d61bec735a9eb96b61ee70" dependencies = [ "unicode-xid", ] @@ -1473,12 +1522,13 @@ dependencies = [ [[package]] name = "string_cache" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ddb1139b5353f96e429e1a5e19fbaf663bddedaa06d1dbd49f82e352601209a" +checksum = "923f0f39b6267d37d23ce71ae7235602134b250ace715dd2c90421998ddac0c6" dependencies = [ "lazy_static", "new_debug_unreachable", + "parking_lot", "phf_shared", "precomputed-hash", "serde", @@ -1523,9 +1573,9 @@ checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" [[package]] name = "swc_atoms" -version = "0.2.7" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "837a3ef86c2817228e733b6f173c821fd76f9eb21a0bc9001a826be48b00b4e7" +checksum = "9f5229fe227ff0060e13baa386d6e368797700eab909523f730008d191ee53ae" dependencies = [ "string_cache", "string_cache_codegen", @@ -1533,9 +1583,9 @@ dependencies = [ [[package]] name = "swc_common" -version = "0.13.2" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20bb644ce8a6cda46df6a91d7ee41461ad9255501e5244333a59c5f2c9be5d" +checksum = "de8be830f71f62908dae13fd9db66522e77dbf9188bd07d0b86d15f48557b219" dependencies = [ "ahash", "ast_node", @@ -1561,9 +1611,9 @@ dependencies = [ [[package]] name = "swc_ecma_ast" -version = "0.54.3" +version = "0.55.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae24a6603262822de50069ff72394b0d208267e5bd5298678ba6a79f670c40f" +checksum = "e40d99e5376086f6a057202b3889f276c3f5cbcafeead8f536ed088ad0bf36b3" dependencies = [ "is-macro", "num-bigint", @@ -1575,9 +1625,9 @@ dependencies = [ [[package]] name = "swc_ecma_codegen" -version = "0.74.1" +version = "0.77.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5e595c5fd97d872658a189741dfd84a9b5ef650eec90b3f4e8d8c4c02c0e9ab" +checksum = "9679c138f4cfe98c86e0947bdc089c4402b372db064f6aca2636a86c93898052" dependencies = [ "bitflags", "memchr", @@ -1589,6 +1639,7 @@ dependencies = [ "swc_ecma_ast", "swc_ecma_codegen_macros", "swc_ecma_parser", + "tracing", ] [[package]] @@ -1606,15 +1657,16 @@ dependencies = [ [[package]] name = "swc_ecma_loader" -version = "0.20.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21ee3552a577f1973ecb495ead954e96ae0fcea12c98bbfac0505b7da0963a2f" +checksum = "1a9507f40d574997316948f94423c3c93dcb03bf593bd0a5197b51c34ed09558" dependencies = [ + "ahash", "anyhow", "dashmap", "normpath", "once_cell", - "rustc-hash", + "path-clean", "serde", "serde_json", "swc_atoms", @@ -1626,15 +1678,14 @@ dependencies = [ [[package]] name = "swc_ecma_parser" -version = "0.73.3" +version = "0.75.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b3c147e79a3d9cedd804f2166b1082003b56cef21770a83ff181df3ab9eba18" +checksum = "5b995bafbbdfc9e4f755726462441c3b454a1004a57d3438b4feb7f81a1e89ee" dependencies = [ "either", "enum_kind", "lexical", "num-bigint", - "rustc-hash", "serde", "smallvec", "swc_atoms", @@ -1642,19 +1693,20 @@ dependencies = [ "swc_ecma_ast", "swc_ecma_visit", "tracing", + "typed-arena 2.0.1", "unicode-xid", ] [[package]] name = "swc_ecma_preset_env" -version = "0.50.1" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe57e87ab6648b1efd66054c53095c7624015635f2be860faea63e56653d3dce" +checksum = "6722395ed61072bb6ed5b085a5aa35e2add0fa35b45826858932251b3896bba6" dependencies = [ + "ahash", "dashmap", "indexmap", "once_cell", - "rustc-hash", "semver 0.9.0", "serde", "serde_json", @@ -1671,9 +1723,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms" -version = "0.79.1" +version = "0.88.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f78c7290d1fe46f06f27987fe4ea135113a1f18af5337477ec9ce7a38a265d6" +checksum = "c38ddf75f012a84fe05ccdbceaf3a57c8657a989ad376ad5a5fd0ec7cf197cf9" dependencies = [ "swc_atoms", "swc_common", @@ -1693,13 +1745,12 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "0.35.0" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31a7abb84019a7075d40ff64fabda1085549b52d0dd071ccf73bbcefd4c58ce3" +checksum = "d1ce842ee29a2e96647950dba48dddd757ad7e5b392b1902191a16c3e8be22ae" dependencies = [ "once_cell", "phf", - "rustc-hash", "scoped-tls", "smallvec", "swc_atoms", @@ -1712,9 +1763,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_classes" -version = "0.21.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8443bbb9640517da3be412db040b2806242670330020333782af4da04c9460d4" +checksum = "86440b9078c3496db893afb298d20a59baf2fc46caa3298d16fdf3c88f27a250" dependencies = [ "swc_atoms", "swc_common", @@ -1726,16 +1777,16 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_compat" -version = "0.40.0" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16601a7369bb4f32982ec02a92cb18d3506ffaab35e2a56fccb3f779e863db6f" +checksum = "295063deef51499ebc77657735c81153baa9906c5878083c2affc6f629a94356" dependencies = [ + "ahash", "arrayvec", "indexmap", "is-macro", "num-bigint", "ordered-float", - "rustc-hash", "serde", "smallvec", "swc_atoms", @@ -1750,9 +1801,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_macros" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7680ada61fa22c2164c3f32864efba31566710b503c30631ccc3b6f0fa800bc" +checksum = "063ad8426598df1aad8cdb9e9994a54cecb07fe902190c467bf195f5f553ed8d" dependencies = [ "pmutil", "proc-macro2", @@ -1763,15 +1814,15 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_module" -version = "0.44.0" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6af6f6e4cd400d8b7a5f7623f259986902d41e769dad009400b1d9a9df0bdd23" +checksum = "4a5d051c3670de64b4eb418054efb4fc562f9c0c47728970c5d4d28cd7947596" dependencies = [ "Inflector", + "ahash", "anyhow", "indexmap", "pathdiff", - "rustc-hash", "serde", "swc_atoms", "swc_common", @@ -1785,21 +1836,22 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_optimization" -version = "0.49.1" +version = "0.58.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77adc57cb52698c9d62444c95e67535e42ade153023c51d8eb207e9d4d9cc4b2" +checksum = "f8774d32f481b47dec0b0e30765a71d02a1c63919b4ca52f925afbf0dd5b81e6" dependencies = [ + "ahash", "dashmap", "indexmap", "once_cell", "retain_mut", - "rustc-hash", "serde_json", "swc_atoms", "swc_common", "swc_ecma_ast", "swc_ecma_parser", "swc_ecma_transforms_base", + "swc_ecma_transforms_macros", "swc_ecma_utils", "swc_ecma_visit", "tracing", @@ -1807,12 +1859,11 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_proposal" -version = "0.44.0" +version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12dace1bac2bbc49b3797d48bf0002c57d7ff78265cf873baab3ce8238b46ff" +checksum = "834c7d79c77c28f97232ed642543b5cb4d4cd310fbfccdf83dcc21d2df35155e" dependencies = [ "either", - "rustc-hash", "serde", "smallvec", "swc_atoms", @@ -1828,10 +1879,11 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_react" -version = "0.46.1" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c623d4718e6725fc885a2209f48fe49dcf9ab1202699a3f519e5d9be45112a6" +checksum = "4655b6e1f9d96a7f1080bf5344351a5cda939c05a5ee26f04201362056a4db47" dependencies = [ + "ahash", "base64 0.13.0", "dashmap", "indexmap", @@ -1845,32 +1897,33 @@ dependencies = [ "swc_ecma_ast", "swc_ecma_parser", "swc_ecma_transforms_base", + "swc_ecma_transforms_macros", "swc_ecma_utils", "swc_ecma_visit", ] [[package]] name = "swc_ecma_transforms_typescript" -version = "0.46.1" +version = "0.54.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd79a516cf3dff5c8b23b1d6ec0c40a19f8793d3bc0fed071a1abf51a5054faf" +checksum = "bfbca21d37a9ec2e5de9f92d6dd5ff2d749d741bc0fac832d38ccbcf4bde4f28" dependencies = [ - "rustc-hash", "serde", "swc_atoms", "swc_common", "swc_ecma_ast", "swc_ecma_parser", "swc_ecma_transforms_base", + "swc_ecma_transforms_react", "swc_ecma_utils", "swc_ecma_visit", ] [[package]] name = "swc_ecma_utils" -version = "0.46.2" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62c967ce4db75e9fb28c2e47e8cf07851fb282f28fa72640c996b52fbe6dd85" +checksum = "fc932d46dabd2250f4bb690cf5eb14a672c6c054caee1a1a9ff3ecf77b472606" dependencies = [ "once_cell", "scoped-tls", @@ -1883,9 +1936,9 @@ dependencies = [ [[package]] name = "swc_ecma_visit" -version = "0.40.0" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c24a7600061813d7df3248d93ff27cacc1a81f9eeec47701866f3adc9ae2930" +checksum = "c242ca4236cf826f9d575f27235a049e7e5629b66f130fdc1f333fa23e6a2ff4" dependencies = [ "num-bigint", "swc_atoms", @@ -1896,9 +1949,9 @@ dependencies = [ [[package]] name = "swc_ecmascript" -version = "0.71.1" +version = "0.80.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "638a61e53c63b99c6618e3c6416f9fa59f0178fe1b401a90e192d6f01008ec7c" +checksum = "cc83776796ba1c4602e268ff0a71a325fbaf8b65d312b8fe975ee94865300501" dependencies = [ "swc_ecma_ast", "swc_ecma_codegen", @@ -1934,9 +1987,9 @@ dependencies = [ [[package]] name = "swc_visit" -version = "0.2.6" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a423caa0b4585118164dbad8f1ad52b592a9a9370b25decc4d84c6b4309132c0" +checksum = "f8511a4788ab29daf00bee23e425aac92c9be4eec74c98fec4a45d0e710be695" dependencies = [ "either", "swc_visit_macros", @@ -2057,6 +2110,12 @@ version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9b2228007eba4120145f785df0f6c92ea538f5a3635a612ecf4e334c8c1446d" +[[package]] +name = "typed-arena" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0685c84d5d54d1c26f7d3eb96cd41550adb97baed141a761cf335d3d33bcd0ae" + [[package]] name = "typenum" version = "1.14.0" @@ -2252,5 +2311,5 @@ dependencies = [ "adler32", "byteorder", "crc 1.8.1", - "typed-arena", + "typed-arena 1.7.0", ] diff --git a/packages/transformers/js/core/Cargo.toml b/packages/transformers/js/core/Cargo.toml index e065cf0c352..e3b2501e769 100644 --- a/packages/transformers/js/core/Cargo.toml +++ b/packages/transformers/js/core/Cargo.toml @@ -8,10 +8,10 @@ edition = "2018" crate-type = ["rlib"] [dependencies] -swc_ecmascript = { version = "0.71.1", features = ["parser", "transforms", "module", "optimization", "react", "typescript", "utils", "visit", "codegen", "utils"] } -swc_ecma_preset_env = "0.50.1" -swc_common = { version = "0.13.2", features = ["tty-emitter", "sourcemap"] } -swc_atoms = "0.2.7" +swc_ecmascript = { version = "0.80.0", features = ["parser", "transforms", "module", "optimization", "react", "typescript", "utils", "visit", "codegen", "utils"] } +swc_ecma_preset_env = "0.59.0" +swc_common = { version = "0.14.1", features = ["tty-emitter", "sourcemap"] } +swc_atoms = "0.2.9" indoc = "1.0.3" serde = "1.0.123" serde_bytes = "0.11.5" diff --git a/packages/transformers/js/core/src/hoist.rs b/packages/transformers/js/core/src/hoist.rs index 6b37bb45f2a..d2a4abed5b1 100644 --- a/packages/transformers/js/core/src/hoist.rs +++ b/packages/transformers/js/core/src/hoist.rs @@ -916,25 +916,23 @@ impl<'a> Fold for Hoist<'a> { }; let ident = BindingIdent::from(self.get_export_ident(member.span, &key)); - if self.collect.static_cjs_exports { - if self.export_decls.insert(ident.id.sym.clone()) { - self - .hoisted_imports - .push(ModuleItem::Stmt(Stmt::Decl(Decl::Var(VarDecl { - declare: false, - kind: VarDeclKind::Var, + if self.collect.static_cjs_exports && self.export_decls.insert(ident.id.sym.clone()) { + self + .hoisted_imports + .push(ModuleItem::Stmt(Stmt::Decl(Decl::Var(VarDecl { + declare: false, + kind: VarDeclKind::Var, + span: node.span, + decls: vec![VarDeclarator { + definite: false, span: node.span, - decls: vec![VarDeclarator { - definite: false, - span: node.span, - name: Pat::Ident(BindingIdent::from(Ident::new( - ident.id.sym.clone(), - DUMMY_SP, - ))), - init: None, - }], - })))); - } + name: Pat::Ident(BindingIdent::from(Ident::new( + ident.id.sym.clone(), + DUMMY_SP, + ))), + init: None, + }], + })))); } return AssignExpr { diff --git a/packages/transformers/js/core/src/lib.rs b/packages/transformers/js/core/src/lib.rs index 2d616ee0eb9..09a0a472650 100644 --- a/packages/transformers/js/core/src/lib.rs +++ b/packages/transformers/js/core/src/lib.rs @@ -255,16 +255,6 @@ pub fn transform(config: Config) -> Result { let ignore_mark = Mark::fresh(Mark::root()); module = { let mut passes = chain!( - resolver_with_mark(global_mark), - Optional::new( - react::react( - source_map.clone(), - Some(&comments), - react_options, - global_mark - ), - config.is_jsx - ), // Decorators can use type information, so must run before the TypeScript pass. Optional::new( decorators::decorators(decorators::Config { @@ -274,9 +264,30 @@ pub fn transform(config: Config) -> Result { }), config.decorators ), - Optional::new(typescript::strip(), config.is_type_script), - // Run resolver again. TS pass messes things up. + Optional::new( + typescript::strip_with_jsx( + source_map.clone(), + typescript::Config { + pragma: Some(react_options.pragma.clone()), + pragma_frag: Some(react_options.pragma_frag.clone()), + ..Default::default() + }, + Some(&comments), + global_mark, + ), + config.is_type_script && config.is_jsx + ), + Optional::new(typescript::strip(), config.is_type_script && !config.is_jsx), resolver_with_mark(global_mark), + Optional::new( + react::react( + source_map.clone(), + Some(&comments), + react_options, + global_mark + ), + config.is_jsx + ), ); module.fold_with(&mut passes) From 530e06a20b7ba5729b54715a2e00f6e4ca2ad896 Mon Sep 17 00:00:00 2001 From: Nurettin Kaya Date: Sun, 24 Oct 2021 09:21:09 -0700 Subject: [PATCH 46/68] Return `undefined` `loc` if declaration missing `source` (#7079) Co-authored-by: Jasper De Moor Co-authored-by: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> --- .../integration/postcss-plugins-decl/index.css | 2 ++ .../postcss-plugins-decl/postcss.config.js | 11 +++++++++++ .../integration/postcss-plugins-decl/yarn.lock | 0 packages/core/integration-tests/test/postcss.js | 10 ++++++++++ packages/transformers/css/src/CSSTransformer.js | 15 +++++++++------ 5 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 packages/core/integration-tests/test/integration/postcss-plugins-decl/index.css create mode 100644 packages/core/integration-tests/test/integration/postcss-plugins-decl/postcss.config.js create mode 100644 packages/core/integration-tests/test/integration/postcss-plugins-decl/yarn.lock diff --git a/packages/core/integration-tests/test/integration/postcss-plugins-decl/index.css b/packages/core/integration-tests/test/integration/postcss-plugins-decl/index.css new file mode 100644 index 00000000000..37f1b9842f6 --- /dev/null +++ b/packages/core/integration-tests/test/integration/postcss-plugins-decl/index.css @@ -0,0 +1,2 @@ +.index { +} diff --git a/packages/core/integration-tests/test/integration/postcss-plugins-decl/postcss.config.js b/packages/core/integration-tests/test/integration/postcss-plugins-decl/postcss.config.js new file mode 100644 index 00000000000..ca2f9553b2a --- /dev/null +++ b/packages/core/integration-tests/test/integration/postcss-plugins-decl/postcss.config.js @@ -0,0 +1,11 @@ +module.exports = { + "plugins": [ + { + postcssPlugin: 'PLUGIN NAME', + Rule: (rule, { Declaration }) => { + const decl = new Declaration({ prop: 'background-image', value: 'url("data:image/gif;base64,quotes")' }) + rule.append(decl) + }, + } + ] +} diff --git a/packages/core/integration-tests/test/integration/postcss-plugins-decl/yarn.lock b/packages/core/integration-tests/test/integration/postcss-plugins-decl/yarn.lock new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/core/integration-tests/test/postcss.js b/packages/core/integration-tests/test/postcss.js index 2e11aa2e4f5..14496492e38 100644 --- a/packages/core/integration-tests/test/postcss.js +++ b/packages/core/integration-tests/test/postcss.js @@ -251,6 +251,16 @@ describe('postcss', () => { assert.equal(run1(), run2()); }); + it('should support transforming declarations with missing source', async () => { + await bundle( + path.join(__dirname, '/integration/postcss-plugins-decl/index.css'), + ); + + let css = await outputFS.readFile(path.join(distDir, 'index.css'), 'utf8'); + + assert(css.includes('url("data:image/gif;base64,quotes")')); + }); + it('should support postcss composes imports', async () => { let b = await bundle( path.join(__dirname, '/integration/postcss-composes/index.js'), diff --git a/packages/transformers/css/src/CSSTransformer.js b/packages/transformers/css/src/CSSTransformer.js index a5437582245..e8810d448d7 100644 --- a/packages/transformers/css/src/CSSTransformer.js +++ b/packages/transformers/css/src/CSSTransformer.js @@ -143,12 +143,15 @@ export default (new Transformer({ !node.nodes[0].value.startsWith('#') // IE's `behavior: url(#default#VML)` ) { let url = asset.addURLDependency(node.nodes[0].value, { - loc: createLoc( - nullthrows(decl.source.start), - node.nodes[0].value, - 0, - node.nodes[0].sourceIndex, - ), + loc: + decl.source && + decl.source.start && + createLoc( + decl.source.start, + node.nodes[0].value, + 0, + node.nodes[0].sourceIndex, + ), }); isDeclDirty = node.nodes[0].value !== url; node.nodes[0].value = url; From 8afcd1ec0f70d098fc0e18391e6a106d6570a015 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Tue, 26 Oct 2021 04:55:33 +0200 Subject: [PATCH 47/68] Add parenthesis around `$parcel$interopDefault` call for externals (#7113) --- .../formats/commonjs-external/default-new.js | 3 +++ .../commonjs-external/node_modules/test/index.js | 7 +++++++ .../node_modules/test/package.json | 4 ++++ .../formats/commonjs-external/package.json | 3 ++- .../core/integration-tests/test/output-formats.js | 15 ++++++++++++++- .../packagers/js/src/ScopeHoistingPackager.js | 2 +- 6 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 packages/core/integration-tests/test/integration/formats/commonjs-external/default-new.js create mode 100644 packages/core/integration-tests/test/integration/formats/commonjs-external/node_modules/test/index.js create mode 100644 packages/core/integration-tests/test/integration/formats/commonjs-external/node_modules/test/package.json diff --git a/packages/core/integration-tests/test/integration/formats/commonjs-external/default-new.js b/packages/core/integration-tests/test/integration/formats/commonjs-external/default-new.js new file mode 100644 index 00000000000..8b4d503bd49 --- /dev/null +++ b/packages/core/integration-tests/test/integration/formats/commonjs-external/default-new.js @@ -0,0 +1,3 @@ +import Foo from "test"; + +new Foo(); diff --git a/packages/core/integration-tests/test/integration/formats/commonjs-external/node_modules/test/index.js b/packages/core/integration-tests/test/integration/formats/commonjs-external/node_modules/test/index.js new file mode 100644 index 00000000000..5f3ae2e97c8 --- /dev/null +++ b/packages/core/integration-tests/test/integration/formats/commonjs-external/node_modules/test/index.js @@ -0,0 +1,7 @@ +function Foo(v) { + if (!(this instanceof Foo)) { + throw new Error("Called without new"); + } +} + +module.exports = Foo; diff --git a/packages/core/integration-tests/test/integration/formats/commonjs-external/node_modules/test/package.json b/packages/core/integration-tests/test/integration/formats/commonjs-external/node_modules/test/package.json new file mode 100644 index 00000000000..1545befa161 --- /dev/null +++ b/packages/core/integration-tests/test/integration/formats/commonjs-external/node_modules/test/package.json @@ -0,0 +1,4 @@ +{ + "name": "test", + "version": "0.0.0" +} diff --git a/packages/core/integration-tests/test/integration/formats/commonjs-external/package.json b/packages/core/integration-tests/test/integration/formats/commonjs-external/package.json index 0bd14c76a75..e734a965125 100644 --- a/packages/core/integration-tests/test/integration/formats/commonjs-external/package.json +++ b/packages/core/integration-tests/test/integration/formats/commonjs-external/package.json @@ -6,6 +6,7 @@ "node": ">= 10.x" }, "dependencies": { - "lodash": "*" + "lodash": "*", + "test": "*" } } diff --git a/packages/core/integration-tests/test/output-formats.js b/packages/core/integration-tests/test/output-formats.js index ad4c5d8cf51..ec37e93c7d0 100644 --- a/packages/core/integration-tests/test/output-formats.js +++ b/packages/core/integration-tests/test/output-formats.js @@ -168,6 +168,19 @@ describe('output formats', function() { assert.equal((await run(b)).bar, 3); }); + it('should support commonjs output with external modules (default import new call)', async function() { + let b = await bundle( + path.join( + __dirname, + '/integration/formats/commonjs-external/default-new.js', + ), + ); + + let dist = await outputFS.readFile(b.getBundles()[0].filePath, 'utf8'); + assert(dist.includes('$parcel$interopDefault')); + await run(b); + }); + it('should support commonjs output with external modules (multiple specifiers)', async function() { let b = await bundle( path.join( @@ -178,7 +191,7 @@ describe('output formats', function() { let dist = await outputFS.readFile(b.getBundles()[0].filePath, 'utf8'); assert(dist.includes('= require("lodash")')); - assert(dist.includes('= $parcel$interopDefault(')); + assert(dist.includes('= ($parcel$interopDefault(')); assert(/var {add: \s*\$.+?\$add\s*} = lodash/); assert.equal((await run(b)).bar, 6); }); diff --git a/packages/packagers/js/src/ScopeHoistingPackager.js b/packages/packagers/js/src/ScopeHoistingPackager.js index 1e6d7e29a7c..e7ca74cebf6 100644 --- a/packages/packagers/js/src/ScopeHoistingPackager.js +++ b/packages/packagers/js/src/ScopeHoistingPackager.js @@ -580,7 +580,7 @@ ${code} if (imported === '*') { replacement = renamed; } else if (imported === 'default') { - replacement = `$parcel$interopDefault(${renamed})`; + replacement = `($parcel$interopDefault(${renamed}))`; this.usedHelpers.add('$parcel$interopDefault'); } else { replacement = this.getPropertyAccess(renamed, imported); From 806bebe710a9f14c0fc3074b0883e0429a11e5b6 Mon Sep 17 00:00:00 2001 From: Marco Karaula Date: Tue, 26 Oct 2021 15:07:42 +0200 Subject: [PATCH 48/68] using @parcel/transformer-yaml for .yml files (#7192) --- packages/configs/default/index.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/configs/default/index.json b/packages/configs/default/index.json index 9d51a249c46..bda82bd3089 100644 --- a/packages/configs/default/index.json +++ b/packages/configs/default/index.json @@ -18,7 +18,7 @@ "*.toml": ["@parcel/transformer-toml"], "*.webmanifest": ["@parcel/transformer-webmanifest"], "webmanifest:*.{json,webmanifest}": ["@parcel/transformer-webmanifest"], - "*.yaml": ["@parcel/transformer-yaml"], + "*.{yaml,yml}": ["@parcel/transformer-yaml"], "*.{glsl,vert,frag}": ["@parcel/transformer-glsl"], "*.{gql,graphql}": ["@parcel/transformer-graphql"], "*.{styl,stylus}": ["@parcel/transformer-stylus"], From da998f7548f4624bfeb17dd8a3ef17bdd96652a0 Mon Sep 17 00:00:00 2001 From: Jasper De Moor Date: Tue, 26 Oct 2021 21:31:13 +0200 Subject: [PATCH 49/68] Log warning instead of crash if image optimizer fails (#7119) --- packages/core/integration-tests/test/image.js | 25 ++++++++++++++++ .../test/integration/image/banana.jpg | Bin 0 -> 38128 bytes packages/optimizers/image/package.json | 1 + .../optimizers/image/src/ImageOptimizer.js | 28 ++++++++++++++---- 4 files changed, 49 insertions(+), 5 deletions(-) create mode 100644 packages/core/integration-tests/test/integration/image/banana.jpg diff --git a/packages/core/integration-tests/test/image.js b/packages/core/integration-tests/test/image.js index 4299e050aed..a12897068cf 100644 --- a/packages/core/integration-tests/test/image.js +++ b/packages/core/integration-tests/test/image.js @@ -113,6 +113,31 @@ describe('image', function() { assert(output.length < input.length); }); + it('should lossless optimise progressive JPEGs', async function() { + let img = path.join(__dirname, '/integration/image/banana.jpg'); + let b = await bundle(img, { + defaultTargetOptions: { + shouldOptimize: true, + }, + logLevel: 'verbose', + }); + + const imagePath = b.getBundles().find(b => b.type === 'jpg').filePath; + + // let input = await inputFS.readFile(img); + // let inputRaw = await sharp(input) + // .toFormat('raw') + // .toBuffer(); + // Check validity of image + let output = await outputFS.readFile(imagePath); + await sharp(output) + .toFormat('raw') + .toBuffer(); + + // assert(outputRaw.equals(inputRaw)); + // assert(output.length < input.length); + }); + it('should lossless optimise PNGs', async function() { let img = path.join(__dirname, '/integration/image/clock.png'); let b = await bundle(img, { diff --git a/packages/core/integration-tests/test/integration/image/banana.jpg b/packages/core/integration-tests/test/integration/image/banana.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23b5408399ec6aa9c6920c697aefe8de6295ae0e GIT binary patch literal 38128 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 Date: Wed, 27 Oct 2021 18:03:43 +0200 Subject: [PATCH 50/68] fix #6730: add transformer-raw as dependency of config-webextension (#7193) --- packages/configs/webextension/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/configs/webextension/package.json b/packages/configs/webextension/package.json index 5f1e34aecab..044095bbf8d 100644 --- a/packages/configs/webextension/package.json +++ b/packages/configs/webextension/package.json @@ -17,6 +17,7 @@ "dependencies": { "@parcel/config-default": "^2.0.0", "@parcel/packager-raw-url": "^2.0.0", + "@parcel/transformer-raw": "^2.0.0", "@parcel/transformer-webextension": "^2.0.0" } } From d80749f71a59606a235a4a0be667a902a58bb610 Mon Sep 17 00:00:00 2001 From: rancyr Date: Fri, 29 Oct 2021 22:32:42 +0800 Subject: [PATCH 51/68] Update package.json to include the repository (#7184) --- packages/dev/babel-preset/package.json | 5 +++++ packages/utils/babylon-walk/package.json | 5 +++++ packages/utils/create-react-app/package.json | 5 +++++ packages/utils/fs-write-stream-atomic/package.json | 5 +++++ 4 files changed, 20 insertions(+) diff --git a/packages/dev/babel-preset/package.json b/packages/dev/babel-preset/package.json index 4f6b3b6ace9..6fe4fd6b9a5 100644 --- a/packages/dev/babel-preset/package.json +++ b/packages/dev/babel-preset/package.json @@ -3,6 +3,11 @@ "version": "2.0.0", "private": true, "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git", + "directory": "packages/dev/babel-preset" + }, "dependencies": { "@babel/plugin-proposal-class-properties": "^7.1.0", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.4.4", diff --git a/packages/utils/babylon-walk/package.json b/packages/utils/babylon-walk/package.json index 79ca807ba34..20d7892051f 100755 --- a/packages/utils/babylon-walk/package.json +++ b/packages/utils/babylon-walk/package.json @@ -10,6 +10,11 @@ "url": "https://opencollective.com/parcel" }, "description": "Lightweight Babylon AST traversal", + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git", + "directory": "packages/utils/babylon-walk" + }, "main": "lib/index.js", "source": "src/index.js", "engines": { diff --git a/packages/utils/create-react-app/package.json b/packages/utils/create-react-app/package.json index b15d36c6e5e..238cb783dae 100644 --- a/packages/utils/create-react-app/package.json +++ b/packages/utils/create-react-app/package.json @@ -5,6 +5,11 @@ "parcel-create-react-app": "src/bin.js" }, "main": "lib/bin.js", + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git", + "directory": "packages/utils/create-react-app" + }, "source": "src/bin.js", "files": [ "templates", diff --git a/packages/utils/fs-write-stream-atomic/package.json b/packages/utils/fs-write-stream-atomic/package.json index b58f3d2b829..02fde45008c 100644 --- a/packages/utils/fs-write-stream-atomic/package.json +++ b/packages/utils/fs-write-stream-atomic/package.json @@ -3,6 +3,11 @@ "version": "2.0.0", "description": "Like `fs.createWriteStream(...)`, but atomic.", "main": "index.js", + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git", + "directory": "packages/utils/fs-write-stream-atomic" + }, "directories": { "test": "test" }, From c8a64c9a533072c12681ca0805d1e4d7481ee53d Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Sun, 31 Oct 2021 09:57:03 +0100 Subject: [PATCH 52/68] Fix serve mode with target override and target source fields (#7187) --- .../core/core/src/requests/TargetRequest.js | 2 +- .../core/integration-tests/test/monorepos.js | 22 ++++++++++ yarn.lock | 40 +++++-------------- 3 files changed, 34 insertions(+), 30 deletions(-) diff --git a/packages/core/core/src/requests/TargetRequest.js b/packages/core/core/src/requests/TargetRequest.js index f456e75c75c..ece93ebf6fe 100644 --- a/packages/core/core/src/requests/TargetRequest.js +++ b/packages/core/core/src/requests/TargetRequest.js @@ -279,7 +279,7 @@ export class TargetResolver { } let serve = this.options.serveOptions; - if (serve) { + if (serve && targets.length > 0) { // In serve mode, we only support a single browser target. If the user // provided more than one, or the matching target is not a browser, throw. if (targets.length > 1) { diff --git a/packages/core/integration-tests/test/monorepos.js b/packages/core/integration-tests/test/monorepos.js index a62670acbfb..b1b40bf89ef 100644 --- a/packages/core/integration-tests/test/monorepos.js +++ b/packages/core/integration-tests/test/monorepos.js @@ -142,6 +142,28 @@ describe('monorepos', function() { } }); + it('should compile packages with target source overrides and --target option in serve mode', async function() { + let fixture = path.join(__dirname, '/integration/target-source'); + let oldcwd = inputFS.cwd(); + inputFS.chdir(fixture); + + try { + let b = await bundle(path.join(fixture, 'packages/package-b'), { + targets: ['alternate'], + serveOptions: {port: 1234}, + }); + + assertBundles(b, [ + { + name: 'indexAlternate.js', + assets: ['bar.js', 'esmodule-helpers.js', 'indexAlternate.js'], + }, + ]); + } finally { + inputFS.chdir(oldcwd); + } + }); + it('should build using root targets with entry files inside packages and cwd at project root', async function() { let fixture = path.join(__dirname, '/integration/monorepo'); let oldcwd = inputFS.cwd(); diff --git a/yarn.lock b/yarn.lock index d4a41e2a882..fc1de409701 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3516,9 +3516,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001219: - version "1.0.30001228" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz#bfdc5942cd3326fa51ee0b42fbef4da9d492a7fa" - integrity sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A== + version "1.0.30001271" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001271.tgz#0dda0c9bcae2cf5407cd34cac304186616cc83e8" + integrity sha512-BBruZFWmt3HFdVPS8kceTBIguKxu4f99n5JNp06OlPD/luoAMIaIK5ieV5YjnBLH3Nysai9sxj9rpJj4ZisXOA== caseless@~0.12.0: version "0.12.0" @@ -8658,15 +8658,7 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== - dependencies: - braces "^3.0.1" - picomatch "^2.0.5" - -micromatch@^4.0.4: +micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== @@ -9080,7 +9072,7 @@ node-addon-api@^3.2.1: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== -node-addon-api@^4.1.0: +node-addon-api@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.2.0.tgz#117cbb5a959dff0992e1c586ae0393573e4d2a87" integrity sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q== @@ -9114,12 +9106,7 @@ node-forge@^0.10.0: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== -node-gyp-build@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739" - integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg== - -node-gyp-build@^4.3.0: +node-gyp-build@^4.2.3, node-gyp-build@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3" integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q== @@ -9944,12 +9931,7 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== - -picomatch@^2.2.3: +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.3: version "2.3.0" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== @@ -11706,13 +11688,13 @@ shallow-copy@0.0.1: integrity sha1-QV9CcC1z2BAzApLMXuhurhoRoXA= sharp@^0.29.1: - version "0.29.1" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.29.1.tgz#f60b50f24f399464a24187c86bd2da41aae50b85" - integrity sha512-DpgdAny9TuS+oWCQ7MRS8XyY9x6q1+yW3a5wNx0J3HrGuB/Jot/8WcT+lElHY9iJu2pwtegSGxqMaqFiMhs4rQ== + version "0.29.2" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.29.2.tgz#e8c003cd9cb321585b32dbda6eed3baa7d6f2308" + integrity sha512-XWRdiYLIJ3tDUejRyG24KERnJzMfIoyiJBntd2S6/uj3NEeNgRFRLgiBlvPxMa8aml14dKKD98yHinSNKp1xzQ== dependencies: color "^4.0.1" detect-libc "^1.0.3" - node-addon-api "^4.1.0" + node-addon-api "^4.2.0" prebuild-install "^6.1.4" semver "^7.3.5" simple-get "^3.1.0" From e0440dcbe6d6e419a412c8c568d94715cdb4282a Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Mon, 1 Nov 2021 19:45:06 +0100 Subject: [PATCH 53/68] Update to prettier 2 (#7209) --- .prettierrc | 1 + package.json | 2 +- .../bundlers/default/src/DefaultBundler.js | 5 +- packages/core/codeframe/src/codeframe.js | 5 +- packages/core/core/src/PackagerRunner.js | 4 +- packages/core/core/src/Parcel.js | 14 +- packages/core/core/src/ParcelConfig.js | 16 +- packages/core/core/src/RequestTracker.js | 7 +- packages/core/core/src/applyRuntimes.js | 6 +- packages/core/core/src/public/Asset.js | 6 +- packages/core/core/src/public/Bundle.js | 6 +- packages/core/core/src/public/BundleGraph.js | 3 +- packages/core/core/src/public/Dependency.js | 6 +- .../core/src/public/MutableBundleGraph.js | 11 +- .../core/core/src/public/PluginOptions.js | 6 +- packages/core/core/src/public/Symbols.js | 6 +- .../core/src/requests/AssetGraphRequest.js | 8 +- .../core/core/src/requests/EntryRequest.js | 4 +- .../core/core/src/requests/PackageRequest.js | 24 +- .../core/src/requests/ParcelConfigRequest.js | 12 +- .../core/core/src/requests/TargetRequest.js | 10 +- packages/core/core/src/types.js | 5 +- packages/core/core/src/worker.js | 3 +- packages/core/core/test/EntryRequest.test.js | 10 +- packages/core/core/test/Parcel.test.js | 2 +- packages/core/diagnostic/src/diagnostic.js | 8 +- packages/core/fs/src/MemoryFS.js | 5 +- packages/core/fs/src/OverlayFS.js | 34 +- packages/core/graph/src/Graph.js | 12 +- packages/core/integration-tests/test/api.js | 6 +- packages/core/integration-tests/test/babel.js | 56 +- .../core/integration-tests/test/bundler.js | 8 +- packages/core/integration-tests/test/cache.js | 396 ++++++------ .../integration-tests/test/compressors.js | 6 +- .../integration-tests/test/config-merging.js | 4 +- .../integration-tests/test/contentHashing.js | 6 +- packages/core/integration-tests/test/css.js | 14 +- packages/core/integration-tests/test/elm.js | 14 +- .../core/integration-tests/test/encodedURI.js | 4 +- .../test/eslint-validation.js | 6 +- packages/core/integration-tests/test/fs.js | 44 +- packages/core/integration-tests/test/glob.js | 16 +- .../core/integration-tests/test/globals.js | 6 +- packages/core/integration-tests/test/glsl.js | 4 +- .../core/integration-tests/test/graphql.js | 8 +- packages/core/integration-tests/test/hmr.js | 26 +- packages/core/integration-tests/test/html.js | 162 ++--- packages/core/integration-tests/test/image.js | 32 +- .../core/integration-tests/test/javascript.js | 379 +++++------ .../core/integration-tests/test/kotlin.js | 4 +- packages/core/integration-tests/test/less.js | 22 +- .../core/integration-tests/test/markdown.js | 4 +- packages/core/integration-tests/test/mdx.js | 6 +- .../core/integration-tests/test/monorepos.js | 30 +- packages/core/integration-tests/test/namer.js | 4 +- .../integration-tests/test/output-formats.js | 172 ++--- .../core/integration-tests/test/parser.js | 4 +- .../core/integration-tests/test/plugin.js | 18 +- packages/core/integration-tests/test/pnp.js | 6 +- .../core/integration-tests/test/postcss.js | 14 +- .../core/integration-tests/test/posthtml.js | 8 +- packages/core/integration-tests/test/proxy.js | 10 +- packages/core/integration-tests/test/pug.js | 16 +- .../integration-tests/test/react-refresh.js | 24 +- .../core/integration-tests/test/reason.js | 4 +- .../core/integration-tests/test/resolver.js | 38 +- packages/core/integration-tests/test/rust.js | 12 +- packages/core/integration-tests/test/sass.js | 26 +- .../integration-tests/test/schema-jsonld.js | 4 +- .../integration-tests/test/scope-hoisting.js | 589 +++++++++--------- .../core/integration-tests/test/server.js | 32 +- .../core/integration-tests/test/sourcemaps.js | 46 +- .../core/integration-tests/test/stylus.js | 14 +- .../core/integration-tests/test/sugarss.js | 4 +- .../core/integration-tests/test/svg-react.js | 4 +- packages/core/integration-tests/test/svg.js | 14 +- .../integration-tests/test/transpilation.js | 57 +- .../core/integration-tests/test/ts-types.js | 24 +- .../integration-tests/test/ts-validation.js | 12 +- .../integration-tests/test/typescript-tsc.js | 4 +- .../core/integration-tests/test/typescript.js | 24 +- packages/core/integration-tests/test/vue.js | 22 +- packages/core/integration-tests/test/wasm.js | 10 +- .../core/integration-tests/test/watcher.js | 20 +- .../integration-tests/test/webextension.js | 6 +- .../integration-tests/test/webmanifest.js | 12 +- packages/core/integration-tests/test/xml.js | 8 +- .../test/NodePackageManager.test.js | 2 +- packages/core/parcel/src/cli.js | 20 +- packages/core/test-utils/src/utils.js | 4 +- packages/core/utils/src/collection.js | 4 +- packages/core/utils/src/debounce.js | 2 +- packages/core/utils/src/getExisting.js | 5 +- packages/core/utils/src/hash.js | 2 +- .../core/utils/src/replaceBundleReferences.js | 7 +- packages/core/utils/src/schema.js | 2 +- packages/core/utils/src/sourcemap.js | 3 +- packages/core/utils/test/DefaultMap.test.js | 11 +- packages/core/utils/test/throttle.test.js | 2 +- packages/core/workers/src/cpuCount.js | 5 +- packages/core/workers/test/cpuCount.test.js | 2 +- packages/core/workers/test/workerfarm.js | 2 +- .../rules/no-self-package-imports.test.js | 9 +- packages/examples/react-hmr/src/index.js | 4 +- packages/examples/simple/src/foo.js | 2 +- packages/namers/default/src/DefaultNamer.js | 9 +- .../data-url/src/DataURLOptimizer.js | 2 +- packages/packagers/html/src/HTMLPackager.js | 5 +- packages/packagers/js/src/DevPackager.js | 5 +- .../packagers/js/src/ScopeHoistingPackager.js | 9 +- packages/packagers/js/src/dev-prelude.js | 10 +- packages/reporters/cli/src/CLIReporter.js | 9 +- packages/reporters/cli/src/utils.js | 2 +- .../reporters/dev-server/src/HMRServer.js | 5 +- packages/resolvers/glob/src/GlobResolver.js | 11 +- .../runtimes/hmr/src/loaders/hmr-runtime.js | 26 +- packages/runtimes/js/src/JSRuntime.js | 9 +- .../js/src/helpers/browser/css-loader.js | 8 +- .../js/src/helpers/browser/html-loader.js | 2 +- .../js/src/helpers/browser/import-polyfill.js | 2 +- .../js/src/helpers/browser/js-loader.js | 8 +- .../js/src/helpers/browser/wasm-loader.js | 6 +- .../runtimes/js/src/helpers/cacheLoader.js | 4 +- .../js/src/helpers/node/html-loader.js | 6 +- .../runtimes/js/src/helpers/node/js-loader.js | 8 +- .../js/src/helpers/node/wasm-loader.js | 8 +- .../js/src/helpers/worker/js-loader.js | 2 +- .../js/src/helpers/worker/wasm-loader.js | 6 +- .../babel-ast-utils/src/babelErrorUtils.js | 5 +- .../shared/babel-ast-utils/src/generator.js | 2 +- packages/shared/babel-ast-utils/test/index.js | 2 +- packages/transformers/babel/src/config.js | 7 +- .../transformers/html/src/HTMLTransformer.js | 6 +- .../image/src/ImageTransformer.js | 5 +- packages/transformers/js/src/JSTransformer.js | 6 +- .../transformers/js/src/esmodule-helpers.js | 12 +- .../react-refresh-wrap/src/helpers/helpers.js | 18 +- .../transformers/sass/src/SassTransformer.js | 2 +- packages/transformers/svg/src/dependencies.js | 3 +- .../webextension/src/runtime/autoreload-bg.js | 2 +- .../webextension/src/runtime/autoreload.js | 2 +- .../src/index.js | 4 +- packages/utils/babylon-walk/src/index.js | 5 +- .../fs-write-stream-atomic/test/basic.js | 33 +- .../fs-write-stream-atomic/test/chown.js | 16 +- .../test/rename-eperm.js | 52 +- .../test/rename-fail.js | 10 +- .../fs-write-stream-atomic/test/slow-close.js | 12 +- .../fs-write-stream-atomic/test/thread-id.js | 8 +- .../fs-write-stream-atomic/test/toolong.js | 6 +- .../utils/node-resolver-core/test/resolver.js | 180 +++--- packages/utils/ts-utils/src/FSHost.js | 7 +- .../utils/ts-utils/src/LanguageServiceHost.js | 6 +- .../typescript/src/TypeScriptValidator.js | 2 +- yarn.lock | 12 +- 155 files changed, 1664 insertions(+), 1777 deletions(-) diff --git a/.prettierrc b/.prettierrc index c957da40809..6e76d2a1a1e 100644 --- a/.prettierrc +++ b/.prettierrc @@ -3,6 +3,7 @@ "endOfLine": "lf", "singleQuote": true, "trailingComma": "all", + "arrowParens": "avoid", "overrides": [ { "files": [ diff --git a/package.json b/package.json index 2670e8f35e9..e8252a79015 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "mocha": "^8.3.0", "mocha-junit-reporter": "^2.0.0", "mocha-multi-reporters": "^1.5.1", - "prettier": "1.19.1", + "prettier": "2.4.1", "rimraf": "^2.6.3", "semver": "^5.4.1", "sinon": "^7.3.1" diff --git a/packages/bundlers/default/src/DefaultBundler.js b/packages/bundlers/default/src/DefaultBundler.js index c7c834b4e8e..aa3a00320a6 100644 --- a/packages/bundlers/default/src/DefaultBundler.js +++ b/packages/bundlers/default/src/DefaultBundler.js @@ -246,9 +246,8 @@ export default (new Bundler({ ); for (let candidate of candidates) { - let bundleGroups = bundleGraph.getBundleGroupsContainingBundle( - candidate, - ); + let bundleGroups = + bundleGraph.getBundleGroupsContainingBundle(candidate); if ( Array.from(bundleGroups).every( group => diff --git a/packages/core/codeframe/src/codeframe.js b/packages/core/codeframe/src/codeframe.js index 5f60794a376..3eca8729395 100644 --- a/packages/core/codeframe/src/codeframe.js +++ b/packages/core/codeframe/src/codeframe.js @@ -121,9 +121,8 @@ export default function codeFrame( // Split input into lines and highlight syntax let lines = code.split(NEWLINE); - let syntaxHighlightedLines = (opts.syntaxHighlighting - ? highlightSyntax(code, opts.language) - : code + let syntaxHighlightedLines = ( + opts.syntaxHighlighting ? highlightSyntax(code, opts.language) : code ) .replace(TAB_REPLACE_REGEX, TAB_REPLACEMENT) .split(NEWLINE); diff --git a/packages/core/core/src/PackagerRunner.js b/packages/core/core/src/PackagerRunner.js index 4789b63269d..c062edc9da4 100644 --- a/packages/core/core/src/PackagerRunner.js +++ b/packages/core/core/src/PackagerRunner.js @@ -589,9 +589,7 @@ export default class PackagerRunner { return devDepHashes; } - async readFromCache( - cacheKey: string, - ): Promise { diff --git a/packages/core/core/src/Parcel.js b/packages/core/core/src/Parcel.js index 70b3b24d79f..60d7a2cbb2d 100644 --- a/packages/core/core/src/Parcel.js +++ b/packages/core/core/src/Parcel.js @@ -109,10 +109,8 @@ export default class Parcel { await resolvedOptions.cache.ensure(); - let { - dispose: disposeOptions, - ref: optionsRef, - } = await this.#farm.createSharedReference(resolvedOptions); + let {dispose: disposeOptions, ref: optionsRef} = + await this.#farm.createSharedReference(resolvedOptions); this.#optionsRef = optionsRef; this.#disposable = new Disposable(); @@ -268,12 +266,8 @@ export default class Parcel { signal, }); - let { - bundleGraph, - bundleInfo, - changedAssets, - assetRequests, - } = await this.#requestTracker.runRequest(request, {force: true}); + let {bundleGraph, bundleInfo, changedAssets, assetRequests} = + await this.#requestTracker.runRequest(request, {force: true}); this.#requestedAssetIds.clear(); diff --git a/packages/core/core/src/ParcelConfig.js b/packages/core/core/src/ParcelConfig.js index 6650485bcf8..2ace49e0344 100644 --- a/packages/core/core/src/ParcelConfig.js +++ b/packages/core/core/src/ParcelConfig.js @@ -116,9 +116,7 @@ export default class ParcelConfig { }; } - _loadPlugin( - node: ParcelPluginNode, - ): Promise<{| + _loadPlugin(node: ParcelPluginNode): Promise<{| plugin: T, version: Semver, resolveFrom: ProjectPath, @@ -179,9 +177,8 @@ export default class ParcelConfig { } getValidatorNames(filePath: ProjectPath): Array { - let validators: PureParcelConfigPipeline = this._getValidatorNodes( - filePath, - ); + let validators: PureParcelConfigPipeline = + this._getValidatorNodes(filePath); return validators.map(v => v.packageName); } @@ -203,11 +200,8 @@ export default class ParcelConfig { pipeline?: ?string, allowEmpty?: boolean, ): Promise>>> { - let transformers: PureParcelConfigPipeline | null = this.matchGlobMapPipelines( - filePath, - this.transformers, - pipeline, - ); + let transformers: PureParcelConfigPipeline | null = + this.matchGlobMapPipelines(filePath, this.transformers, pipeline); if (!transformers || transformers.length === 0) { if (allowEmpty) { return []; diff --git a/packages/core/core/src/RequestTracker.js b/packages/core/core/src/RequestTracker.js index 755459b48be..de505da8a31 100644 --- a/packages/core/core/src/RequestTracker.js +++ b/packages/core/core/src/RequestTracker.js @@ -783,9 +783,10 @@ export default class RequestTracker { this.signal = signal; } - startRequest( - request: StoredRequest, - ): {|requestNodeId: NodeId, deferred: Deferred|} { + startRequest(request: StoredRequest): {| + requestNodeId: NodeId, + deferred: Deferred, + |} { let didPreviouslyExist = this.graph.hasContentKey(request.id); let requestNodeId; if (didPreviouslyExist) { diff --git a/packages/core/core/src/applyRuntimes.js b/packages/core/core/src/applyRuntimes.js index c567ea10247..34cc00e0cc5 100644 --- a/packages/core/core/src/applyRuntimes.js +++ b/packages/core/core/src/applyRuntimes.js @@ -138,10 +138,8 @@ export default async function applyRuntimes({ await runDevDepRequest(api, devDepRequest); } - let { - assetGraph: runtimesAssetGraph, - changedAssets, - } = await reconcileNewRuntimes(api, connections, optionsRef); + let {assetGraph: runtimesAssetGraph, changedAssets} = + await reconcileNewRuntimes(api, connections, optionsRef); let runtimesGraph = InternalBundleGraph.fromAssetGraph( runtimesAssetGraph, diff --git a/packages/core/core/src/public/Asset.js b/packages/core/core/src/public/Asset.js index 88da55b1558..88372c2f0c2 100644 --- a/packages/core/core/src/public/Asset.js +++ b/packages/core/core/src/public/Asset.js @@ -41,10 +41,8 @@ const inspect = Symbol.for('nodejs.util.inspect.custom'); const uncommittedAssetValueToAsset: WeakMap = new WeakMap(); const committedAssetValueToAsset: WeakMap = new WeakMap(); -const assetValueToMutableAsset: WeakMap< - AssetValue, - MutableAsset, -> = new WeakMap(); +const assetValueToMutableAsset: WeakMap = + new WeakMap(); const _assetToAssetValue: WeakMap< IAsset | IMutableAsset | BaseAsset, diff --git a/packages/core/core/src/public/Bundle.js b/packages/core/core/src/public/Bundle.js index 00793ad4c66..1c9ae0a2bc7 100644 --- a/packages/core/core/src/public/Bundle.js +++ b/packages/core/core/src/public/Bundle.js @@ -51,10 +51,8 @@ const _bundleToInternalBundle: WeakMap = new WeakMap(); export function bundleToInternalBundle(bundle: IBundle): InternalBundle { return nullthrows(_bundleToInternalBundle.get(bundle)); } -const _bundleToInternalBundleGraph: WeakMap< - IBundle, - BundleGraph, -> = new WeakMap(); +const _bundleToInternalBundleGraph: WeakMap = + new WeakMap(); export function bundleToInternalBundleGraph(bundle: IBundle): BundleGraph { return nullthrows(_bundleToInternalBundleGraph.get(bundle)); } diff --git a/packages/core/core/src/public/BundleGraph.js b/packages/core/core/src/public/BundleGraph.js index d6da6ba49bb..47372f53c08 100644 --- a/packages/core/core/src/public/BundleGraph.js +++ b/packages/core/core/src/public/BundleGraph.js @@ -47,7 +47,8 @@ type BundleFactory = ( ) => TBundle; export default class BundleGraph - implements IBundleGraph { + implements IBundleGraph +{ #graph: InternalBundleGraph; #options: ParcelOptions; #createBundle: BundleFactory; diff --git a/packages/core/core/src/public/Dependency.js b/packages/core/core/src/public/Dependency.js index 60cc46042d1..950bb54249a 100644 --- a/packages/core/core/src/public/Dependency.js +++ b/packages/core/core/src/public/Dependency.js @@ -26,10 +26,8 @@ const PriorityNames = Object.keys(Priority); const inspect = Symbol.for('nodejs.util.inspect.custom'); -const internalDependencyToDependency: WeakMap< - InternalDependency, - Dependency, -> = new WeakMap(); +const internalDependencyToDependency: WeakMap = + new WeakMap(); const _dependencyToInternalDependency: WeakMap< IDependency, InternalDependency, diff --git a/packages/core/core/src/public/MutableBundleGraph.js b/packages/core/core/src/public/MutableBundleGraph.js index 59a8028bd5d..65c174fb8c5 100644 --- a/packages/core/core/src/public/MutableBundleGraph.js +++ b/packages/core/core/src/public/MutableBundleGraph.js @@ -27,8 +27,10 @@ import {fromProjectPathRelative} from '../projectPath'; import {BundleBehavior} from '../types'; import BundleGroup, {bundleGroupToInternalBundleGroup} from './BundleGroup'; -export default class MutableBundleGraph extends BundleGraph - implements IMutableBundleGraph { +export default class MutableBundleGraph + extends BundleGraph + implements IMutableBundleGraph +{ #graph /*: InternalBundleGraph */; #options /*: ParcelOptions */; #bundlePublicIds /*: Set */ = new Set(); @@ -102,9 +104,8 @@ export default class MutableBundleGraph extends BundleGraph dependencyNode.id, ); let resolvedNodeId = this.#graph._graph.getNodeIdByContentKey(resolved.id); - let assetNodes = this.#graph._graph.getNodeIdsConnectedFrom( - dependencyNodeId, - ); + let assetNodes = + this.#graph._graph.getNodeIdsConnectedFrom(dependencyNodeId); this.#graph._graph.addEdge(dependencyNodeId, bundleGroupNodeId); this.#graph._graph.replaceNodeIdsConnectedTo(bundleGroupNodeId, assetNodes); this.#graph._graph.addEdge( diff --git a/packages/core/core/src/public/PluginOptions.js b/packages/core/core/src/public/PluginOptions.js index 41688e0f859..7ae8fdff268 100644 --- a/packages/core/core/src/public/PluginOptions.js +++ b/packages/core/core/src/public/PluginOptions.js @@ -13,10 +13,8 @@ import type {FileSystem} from '@parcel/fs'; import type {PackageManager} from '@parcel/package-manager'; import type {ParcelOptions} from '../types'; -let parcelOptionsToPluginOptions: WeakMap< - ParcelOptions, - PluginOptions, -> = new WeakMap(); +let parcelOptionsToPluginOptions: WeakMap = + new WeakMap(); export default class PluginOptions implements IPluginOptions { #options /*: ParcelOptions */; diff --git a/packages/core/core/src/public/Symbols.js b/packages/core/core/src/public/Symbols.js index 32ae9ca92be..cca19f14c0d 100644 --- a/packages/core/core/src/public/Symbols.js +++ b/packages/core/core/src/public/Symbols.js @@ -97,10 +97,8 @@ export class AssetSymbols implements IAssetSymbols { } } -let valueToMutableAssetSymbols: WeakMap< - Asset, - MutableAssetSymbols, -> = new WeakMap(); +let valueToMutableAssetSymbols: WeakMap = + new WeakMap(); export class MutableAssetSymbols implements IMutableAssetSymbols { /*:: @@iterator(): Iterator<[ISymbol, {|local: ISymbol, loc: ?SourceLocation, meta?: ?Meta|}]> { return ({}: any); } diff --git a/packages/core/core/src/requests/AssetGraphRequest.js b/packages/core/core/src/requests/AssetGraphRequest.js index 95b8b32ba2e..37896f780f2 100644 --- a/packages/core/core/src/requests/AssetGraphRequest.js +++ b/packages/core/core/src/requests/AssetGraphRequest.js @@ -79,7 +79,8 @@ export default function createAssetGraphRequest( type: 'asset_graph_request', id: input.name, run: async input => { - let prevResult = await input.api.getPreviousResult(); + let prevResult = + await input.api.getPreviousResult(); let builder = new AssetGraphBuilder(input, prevResult); return builder.build(); }, @@ -778,9 +779,8 @@ export class AssetGraphBuilder { } } } else { - let connectedNodes = this.assetGraph.getNodeIdsConnectedTo( - queuedNodeId, - ); + let connectedNodes = + this.assetGraph.getNodeIdsConnectedTo(queuedNodeId); if (connectedNodes.length > 0) { queue.add(...connectedNodes); } diff --git a/packages/core/core/src/requests/EntryRequest.js b/packages/core/core/src/requests/EntryRequest.js index 91f8d3cfddc..0c3b75d64cb 100644 --- a/packages/core/core/src/requests/EntryRequest.js +++ b/packages/core/core/src/requests/EntryRequest.js @@ -314,9 +314,7 @@ export class EntryResolver { }); } - async readPackage( - entry: FilePath, - ): Promise(createParcelConfigRequest()), ); - let { - devDepRequests, - configRequests, - bundleInfo, - invalidations, - } = await runPackage({ - bundle, - bundleGraphReference, - optionsRef, - configCachePath: cachePath, - previousDevDeps: devDeps, - invalidDevDeps, - previousInvalidations: api.getInvalidations(), - }); + let {devDepRequests, configRequests, bundleInfo, invalidations} = + await runPackage({ + bundle, + bundleGraphReference, + optionsRef, + configCachePath: cachePath, + previousDevDeps: devDeps, + invalidDevDeps, + previousInvalidations: api.getInvalidations(), + }); for (let devDepRequest of devDepRequests) { await runDevDepRequest(api, devDepRequest); diff --git a/packages/core/core/src/requests/ParcelConfigRequest.js b/packages/core/core/src/requests/ParcelConfigRequest.js index d4c8d44078e..546d59854f3 100644 --- a/packages/core/core/src/requests/ParcelConfigRequest.js +++ b/packages/core/core/src/requests/ParcelConfigRequest.js @@ -443,16 +443,8 @@ export async function processConfigChain( : '/extends'; let resolved = await resolveExtends(ext, filePath, key, options); extendedFiles.push(resolved); - let { - extendedFiles: moreExtendedFiles, - config: nextConfig, - } = await processExtendedConfig( - filePath, - key, - ext, - resolved, - options, - ); + let {extendedFiles: moreExtendedFiles, config: nextConfig} = + await processExtendedConfig(filePath, key, ext, resolved, options); extendedFiles = extendedFiles.concat(moreExtendedFiles); extStartConfig = extStartConfig ? mergeConfigs(extStartConfig, nextConfig) diff --git a/packages/core/core/src/requests/TargetRequest.js b/packages/core/core/src/requests/TargetRequest.js index ece93ebf6fe..e4ed1429dde 100644 --- a/packages/core/core/src/requests/TargetRequest.js +++ b/packages/core/core/src/requests/TargetRequest.js @@ -154,10 +154,8 @@ export class TargetResolver { optionTargets = [exclusiveTarget]; } - let packageTargets: Map< - string, - Target | null, - > = await this.resolvePackageTargets(rootDir, exclusiveTarget); + let packageTargets: Map = + await this.resolvePackageTargets(rootDir, exclusiveTarget); let targets: Array; if (optionTargets) { if (Array.isArray(optionTargets)) { @@ -322,8 +320,8 @@ export class TargetResolver { engines: {}, shouldOptimize: this.options.defaultTargetOptions.shouldOptimize, outputFormat: this.options.defaultTargetOptions.outputFormat, - shouldScopeHoist: this.options.defaultTargetOptions - .shouldScopeHoist, + shouldScopeHoist: + this.options.defaultTargetOptions.shouldScopeHoist, sourceMap: this.options.defaultTargetOptions.sourceMaps ? {} : undefined, diff --git a/packages/core/core/src/types.js b/packages/core/core/src/types.js index 5f1f5ddb585..6c498c47385 100644 --- a/packages/core/core/src/types.js +++ b/packages/core/core/src/types.js @@ -148,9 +148,8 @@ export const BundleBehavior = { isolated: 1, }; -export const BundleBehaviorNames: Array< - $Keys, -> = Object.keys(BundleBehavior); +export const BundleBehaviorNames: Array<$Keys> = + Object.keys(BundleBehavior); export type Asset = {| id: ContentKey, diff --git a/packages/core/core/src/worker.js b/packages/core/core/src/worker.js index 6fdb6db46e6..bb1467076f5 100644 --- a/packages/core/core/src/worker.js +++ b/packages/core/core/src/worker.js @@ -150,7 +150,8 @@ export async function childInit() { await initHash; } -const PKG_RE = /node_modules[/\\]((?:@[^/\\]+[/\\][^/\\]+)|[^/\\]+)(?!.*[/\\]node_modules[/\\])/; +const PKG_RE = + /node_modules[/\\]((?:@[^/\\]+[/\\][^/\\]+)|[^/\\]+)(?!.*[/\\]node_modules[/\\])/; export function invalidateRequireCache(workerApi: WorkerApi, file: string) { if (process.env.PARCEL_BUILD_ENV === 'test') { // Delete this module and all children in the same node_modules folder diff --git a/packages/core/core/test/EntryRequest.test.js b/packages/core/core/test/EntryRequest.test.js index ccc870a7a02..6b5ca40a6f7 100644 --- a/packages/core/core/test/EntryRequest.test.js +++ b/packages/core/core/test/EntryRequest.test.js @@ -33,10 +33,10 @@ const INVALID_TARGET_SOURCE_NOT_FILE_FIXTURE_PATH = path.join( 'fixtures/invalid-target-source-not-file', ); -describe('EntryResolver', function() { +describe('EntryResolver', function () { let entryResolver = new EntryResolver({...DEFAULT_OPTIONS}); - it('rejects missing source in package.json', async function() { + it('rejects missing source in package.json', async function () { this.timeout(10000); // $FlowFixMe assert.rejects is Node 10+ await assert.rejects( @@ -76,7 +76,7 @@ describe('EntryResolver', function() { }, ); }); - it('rejects non-file source in package.json', async function() { + it('rejects non-file source in package.json', async function () { this.timeout(10000); // $FlowFixMe assert.rejects is Node 10+ await assert.rejects( @@ -115,7 +115,7 @@ describe('EntryResolver', function() { }, ); }); - it('rejects missing target source in package.json', async function() { + it('rejects missing target source in package.json', async function () { this.timeout(10000); // $FlowFixMe assert.rejects is Node 10+ await assert.rejects( @@ -159,7 +159,7 @@ describe('EntryResolver', function() { }, ); }); - it('rejects non-file target source in package.json', async function() { + it('rejects non-file target source in package.json', async function () { this.timeout(10000); // $FlowFixMe assert.rejects is Node 10+ await assert.rejects( diff --git a/packages/core/core/test/Parcel.test.js b/packages/core/core/test/Parcel.test.js index ac3025d671b..2419cbaef9e 100644 --- a/packages/core/core/test/Parcel.test.js +++ b/packages/core/core/test/Parcel.test.js @@ -8,7 +8,7 @@ import assert from 'assert'; import path from 'path'; import Parcel, {createWorkerFarm} from '../src/Parcel'; -describe('Parcel', function() { +describe('Parcel', function () { this.timeout(75000); let workerFarm; diff --git a/packages/core/diagnostic/src/diagnostic.js b/packages/core/diagnostic/src/diagnostic.js index 95251b40979..cc8b05331ae 100644 --- a/packages/core/diagnostic/src/diagnostic.js +++ b/packages/core/diagnostic/src/diagnostic.js @@ -313,22 +313,22 @@ export function md( return result.join('') + strings[strings.length - 1]; } -md.bold = function(s: TemplateInput): TemplateInput { +md.bold = function (s: TemplateInput): TemplateInput { // $FlowFixMe[invalid-computed-prop] return {[mdVerbatim]: '**' + escapeMarkdown(`${s}`) + '**'}; }; -md.italic = function(s: TemplateInput): TemplateInput { +md.italic = function (s: TemplateInput): TemplateInput { // $FlowFixMe[invalid-computed-prop] return {[mdVerbatim]: '_' + escapeMarkdown(`${s}`) + '_'}; }; -md.underline = function(s: TemplateInput): TemplateInput { +md.underline = function (s: TemplateInput): TemplateInput { // $FlowFixMe[invalid-computed-prop] return {[mdVerbatim]: '__' + escapeMarkdown(`${s}`) + '__'}; }; -md.strikethrough = function(s: TemplateInput): TemplateInput { +md.strikethrough = function (s: TemplateInput): TemplateInput { // $FlowFixMe[invalid-computed-prop] return {[mdVerbatim]: '~~' + escapeMarkdown(`${s}`) + '~~'}; }; diff --git a/packages/core/fs/src/MemoryFS.js b/packages/core/fs/src/MemoryFS.js index 890ff79d23d..93e25fe701b 100644 --- a/packages/core/fs/src/MemoryFS.js +++ b/packages/core/fs/src/MemoryFS.js @@ -138,10 +138,7 @@ export class MemoryFS implements FileSystem { // get realpath by following symlinks if (realpath) { let {root, dir, base} = path.parse(filePath); - let parts = dir - .slice(root.length) - .split(path.sep) - .concat(base); + let parts = dir.slice(root.length).split(path.sep).concat(base); let res = root; for (let part of parts) { res = path.join(res, part); diff --git a/packages/core/fs/src/OverlayFS.js b/packages/core/fs/src/OverlayFS.js index 375c0dffc3a..1dd40800a18 100644 --- a/packages/core/fs/src/OverlayFS.js +++ b/packages/core/fs/src/OverlayFS.js @@ -14,7 +14,7 @@ import packageJSON from '../package.json'; import {findAncestorFile, findNodeModule, findFirstFile} from './find'; function read(method) { - return async function(...args: Array) { + return async function (...args: Array) { try { return await this.writable[method](...args); } catch (err) { @@ -24,7 +24,7 @@ function read(method) { } function readSync(method) { - return function(...args: Array) { + return function (...args: Array) { try { return this.writable[method](...args); } catch (err) { @@ -34,13 +34,13 @@ function readSync(method) { } function write(method) { - return function(...args: Array) { + return function (...args: Array) { return this.writable[method](...args); }; } function checkExists(method) { - return function(filePath: FilePath, ...args: Array) { + return function (filePath: FilePath, ...args: Array) { if (this.writable.existsSync(filePath)) { return this.writable[method](filePath, ...args); } @@ -69,9 +69,8 @@ export class OverlayFS implements FileSystem { }; } - readFile: ( - ...args: Array - ) => Promise> = read('readFile'); + readFile: (...args: Array) => Promise> = + read('readFile'); writeFile: (...args: Array) => any = write('writeFile'); async copyFile(source: FilePath, destination: FilePath) { if (await this.writable.exists(source)) { @@ -86,30 +85,25 @@ export class OverlayFS implements FileSystem { ); } } - stat: ( - ...args: Array - ) => Promise> = read('stat'); + stat: (...args: Array) => Promise> = + read('stat'); unlink: (...args: Array) => any = write('unlink'); mkdirp: (...args: Array) => any = write('mkdirp'); rimraf: (...args: Array) => any = write('rimraf'); ncp: (...args: Array) => any = write('ncp'); - createReadStream: ( - filePath: FilePath, - ...args: Array - ) => any = checkExists('createReadStream'); + createReadStream: (filePath: FilePath, ...args: Array) => any = + checkExists('createReadStream'); createWriteStream: (...args: Array) => any = write('createWriteStream'); cwd: (...args: Array) => any = readSync('cwd'); chdir: (...args: Array) => any = readSync('chdir'); - realpath: (filePath: FilePath, ...args: Array) => any = checkExists( - 'realpath', - ); + realpath: (filePath: FilePath, ...args: Array) => any = + checkExists('realpath'); readFileSync: (...args: Array) => any = readSync('readFileSync'); statSync: (...args: Array) => any = readSync('statSync'); existsSync: (...args: Array) => any = readSync('existsSync'); - realpathSync: (filePath: FilePath, ...args: Array) => any = checkExists( - 'realpathSync', - ); + realpathSync: (filePath: FilePath, ...args: Array) => any = + checkExists('realpathSync'); async exists(filePath: FilePath): Promise { return ( diff --git a/packages/core/graph/src/Graph.js b/packages/core/graph/src/Graph.js index d68ced59065..d6fc0879fe7 100644 --- a/packages/core/graph/src/Graph.js +++ b/packages/core/graph/src/Graph.js @@ -596,12 +596,7 @@ class AdjacencyList { } hasEdge(from: NodeId, to: NodeId, type: TEdgeType): boolean { - return Boolean( - this._listMap - .get(from) - ?.get(type) - ?.has(to), - ); + return Boolean(this._listMap.get(from)?.get(type)?.has(to)); } addEdge(from: NodeId, to: NodeId, type: TEdgeType): void { @@ -620,9 +615,6 @@ class AdjacencyList { } removeEdge(from: NodeId, to: NodeId, type: TEdgeType): void { - this._listMap - .get(from) - ?.get(type) - ?.delete(to); + this._listMap.get(from)?.get(type)?.delete(to); } } diff --git a/packages/core/integration-tests/test/api.js b/packages/core/integration-tests/test/api.js index 97ecfd92002..b2327e9d708 100644 --- a/packages/core/integration-tests/test/api.js +++ b/packages/core/integration-tests/test/api.js @@ -3,8 +3,8 @@ import path from 'path'; import assert from 'assert'; import {distDir, bundle, assertBundles, outputFS} from '@parcel/test-utils'; -describe('JS API', function() { - it('should respect distEntry', async function() { +describe('JS API', function () { + it('should respect distEntry', async function () { const NAME = 'custom-name.js'; let b = await bundle( @@ -27,7 +27,7 @@ describe('JS API', function() { assert(await outputFS.exists(path.join(distDir, NAME))); }); - it('should run additional reports from the options', async function() { + it('should run additional reports from the options', async function () { let b = await bundle( path.join(__dirname, '/integration/js-comment/index.js'), { diff --git a/packages/core/integration-tests/test/babel.js b/packages/core/integration-tests/test/babel.js index d0ab06dcb26..53c2f3d912a 100644 --- a/packages/core/integration-tests/test/babel.js +++ b/packages/core/integration-tests/test/babel.js @@ -21,9 +21,9 @@ import {md} from '@parcel/diagnostic'; const parcelCli = require.resolve('parcel/src/bin.js'); const inputDir = path.join(__dirname, '/input'); -describe('babel', function() { +describe('babel', function () { let subscription; - beforeEach(async function() { + beforeEach(async function () { // TODO maybe don't do this for all tests await sleep(100); await outputFS.rimraf(inputDir); @@ -38,7 +38,7 @@ describe('babel', function() { } }); - it.skip('should auto install @babel/core v7', async function() { + it.skip('should auto install @babel/core v7', async function () { let originalPkg = await fs.readFile( __dirname + '/integration/babel-7-autoinstall/package.json', ); @@ -61,7 +61,7 @@ describe('babel', function() { ); }); - it.skip('should auto install babel plugins', async function() { + it.skip('should auto install babel plugins', async function () { let originalPkg = await fs.readFile( __dirname + '/integration/babel-plugin-autoinstall/package.json', ); @@ -89,7 +89,7 @@ describe('babel', function() { ); }); - it('should support compiling with babel using .babelrc config', async function() { + it('should support compiling with babel using .babelrc config', async function () { await bundle(path.join(__dirname, '/integration/babelrc-custom/index.js')); let file = await outputFS.readFile(path.join(distDir, 'index.js'), 'utf8'); @@ -97,7 +97,7 @@ describe('babel', function() { assert(file.includes('hello there')); }); - it('should support compiling with babel using babel.config.json config without warnings', async function() { + it('should support compiling with babel using babel.config.json config without warnings', async function () { let messages = []; let loggerDisposable = Logger.onLog(message => { messages.push(message); @@ -116,12 +116,14 @@ describe('babel', function() { assert.deepEqual(messages, []); }); - it.skip('should support compiling with babel using browserslist for different environments', async function() { + it.skip('should support compiling with babel using browserslist for different environments', async function () { async function testBrowserListMultipleEnv(projectBasePath) { // Transpiled destructuring, like r = p.prop1, o = p.prop2, a = p.prop3; - const prodRegExp = /\S+ ?= ?\S+\.prop1,\s*?\S+ ?= ?\S+\.prop2,\s*?\S+ ?= ?\S+\.prop3;/; + const prodRegExp = + /\S+ ?= ?\S+\.prop1,\s*?\S+ ?= ?\S+\.prop2,\s*?\S+ ?= ?\S+\.prop3;/; // ES6 Destructuring, like in the source; - const devRegExp = /const ?{\s*prop1(:.+)?,\s*prop2(:.+)?,\s*prop3(:.+)?\s*} ?= ?.*/; + const devRegExp = + /const ?{\s*prop1(:.+)?,\s*prop2(:.+)?,\s*prop3(:.+)?\s*} ?= ?.*/; let file; // Dev build test await bundle(path.join(__dirname, projectBasePath, '/index.js')); @@ -147,7 +149,7 @@ describe('babel', function() { ); }); - it.skip('should compile node_modules with browserslist to app target', async function() { + it.skip('should compile node_modules with browserslist to app target', async function () { await bundle( path.join( __dirname, @@ -160,7 +162,7 @@ describe('babel', function() { assert(file.includes('function Bar')); }); - it('should strip away flow types', async function() { + it('should strip away flow types', async function () { let b = await bundle( path.join(__dirname, '/integration/babel-strip-flow-types/index.js'), ); @@ -173,7 +175,7 @@ describe('babel', function() { assert(!file.includes('OptionsType')); }); - it('should support compiling with babel using babel.config.js config', async function() { + it('should support compiling with babel using babel.config.js config', async function () { await bundle( path.join(__dirname, '/integration/babel-config-js/src/index.js'), ); @@ -183,7 +185,7 @@ describe('babel', function() { assert(file.match(/return \d+;/)); }); - it('should support compiling with babel using babel.config.js config with a require in it', async function() { + it('should support compiling with babel using babel.config.js config with a require in it', async function () { await bundle( path.join(__dirname, '/integration/babel-config-js-require/src/index.js'), ); @@ -193,7 +195,7 @@ describe('babel', function() { assert(file.match(/return \d+;/)); }); - it('should support multitarget builds using a custom babel config with @parcel/babel-preset-env', async function() { + it('should support multitarget builds using a custom babel config with @parcel/babel-preset-env', async function () { let fixtureDir = path.join( __dirname, '/integration/babel-config-js-multitarget', @@ -215,7 +217,7 @@ describe('babel', function() { await outputFS.rimraf(path.join(fixtureDir, 'dist')); }); - it('should support multitarget builds using a custom babel config with @parcel/babel-plugin-transform-runtime', async function() { + it('should support multitarget builds using a custom babel config with @parcel/babel-plugin-transform-runtime', async function () { let fixtureDir = path.join( __dirname, '/integration/babel-config-js-multitarget-transform-runtime', @@ -240,7 +242,7 @@ describe('babel', function() { await outputFS.rimraf(path.join(fixtureDir, 'dist')); }); - it('should support building with custom babel config when running parcel globally', async function() { + it('should support building with custom babel config when running parcel globally', async function () { let tmpDir = tempy.directory(); let distDir = path.join(tmpDir, 'dist'); await fs.ncp( @@ -263,7 +265,7 @@ describe('babel', function() { assert(file.includes('hello there')); }); - it('should support merging .babelrc and babel.config.json in a monorepo', async function() { + it('should support merging .babelrc and babel.config.json in a monorepo', async function () { await bundle( path.join( __dirname, @@ -373,7 +375,7 @@ describe('babel', function() { } }); - it('should rebuild when .babelrc changes', async function() { + it('should rebuild when .babelrc changes', async function () { let inputDir = tempy.directory(); let differentPath = path.join(inputDir, 'differentConfig'); let configPath = path.join(inputDir, '.babelrc'); @@ -407,7 +409,7 @@ describe('babel', function() { assert(distFile.includes('something different')); }); - it('should invalidate babel.config.js across runs', async function() { + it('should invalidate babel.config.js across runs', async function () { let dateRe = /return (\d+);/; let fixtureDir = path.join(__dirname, '/integration/babel-config-js'); @@ -452,7 +454,7 @@ describe('babel', function() { assert.notEqual(firstDatestamp, secondDatestamp); }); - it('should invalidate when babel plugins are upgraded across runs', async function() { + it('should invalidate when babel plugins are upgraded across runs', async function () { let fixtureDir = path.join( __dirname, '/integration/babel-plugin-upgrade', @@ -502,7 +504,7 @@ describe('babel', function() { }); }); - it('should enable shippedProposals with @parcel/babel-preset-env in custom babelrc', async function() { + it('should enable shippedProposals with @parcel/babel-preset-env in custom babelrc', async function () { let b = await bundle( path.join( __dirname, @@ -518,7 +520,7 @@ describe('babel', function() { assert.strictEqual(output.default, 123); }); - it('should compile with custom babel plugin plus default transforms', async function() { + it('should compile with custom babel plugin plus default transforms', async function () { let b = await bundle( path.join(__dirname, '/integration/babel-custom/index.js'), ); @@ -533,7 +535,7 @@ describe('babel', function() { assert.strictEqual(output.default, 'hello'); }); - it('should compile with custom babel plugin and jsx', async function() { + it('should compile with custom babel plugin and jsx', async function () { let b = await bundle( path.join(__dirname, '/integration/babel-custom/jsx.js'), ); @@ -543,7 +545,7 @@ describe('babel', function() { assert(file.includes('React.createElement')); }); - it('should compile with custom babel plugin and typescript', async function() { + it('should compile with custom babel plugin and typescript', async function () { let b = await bundle( path.join(__dirname, '/integration/babel-custom/ts.ts'), ); @@ -559,7 +561,7 @@ describe('babel', function() { assert.strictEqual(output.default, 'hello'); }); - it('should compile with custom babel plugin and tsx', async function() { + it('should compile with custom babel plugin and tsx', async function () { let b = await bundle( path.join(__dirname, '/integration/babel-custom/tsx.tsx'), ); @@ -570,7 +572,7 @@ describe('babel', function() { assert(file.includes('React.createElement')); }); - it('should warn when a babel config contains only redundant plugins', async function() { + it('should warn when a babel config contains only redundant plugins', async function () { let messages = []; let loggerDisposable = Logger.onLog(message => { messages.push(message); @@ -648,7 +650,7 @@ describe('babel', function() { ]); }); - it('should warn when a babel config contains redundant plugins', async function() { + it('should warn when a babel config contains redundant plugins', async function () { let messages = []; let loggerDisposable = Logger.onLog(message => { messages.push(message); diff --git a/packages/core/integration-tests/test/bundler.js b/packages/core/integration-tests/test/bundler.js index 87929278e1e..13c1cca56f9 100644 --- a/packages/core/integration-tests/test/bundler.js +++ b/packages/core/integration-tests/test/bundler.js @@ -8,8 +8,8 @@ import { nextBundle, } from '@parcel/test-utils'; -describe.skip('bundler', function() { - it('should bundle once before exporting middleware', async function() { +describe.skip('bundler', function () { + it('should bundle once before exporting middleware', async function () { let b = bundler( path.join(__dirname, '/integration/bundler-middleware/index.js'), ); @@ -58,7 +58,7 @@ describe.skip('bundler', function() { }, 'before bundling'); }); - it('should support multiple entry points', async function() { + it('should support multiple entry points', async function () { let b = await bundle([ path.join(__dirname, '/integration/multi-entry/one.html'), path.join(__dirname, '/integration/multi-entry/two.html'), @@ -83,7 +83,7 @@ describe.skip('bundler', function() { ]); }); - it('should support multiple entry points as a glob', async function() { + it('should support multiple entry points as a glob', async function () { let b = await bundle( path.join(__dirname, '/integration/multi-entry/*.html'), ); diff --git a/packages/core/integration-tests/test/cache.js b/packages/core/integration-tests/test/cache.js index c63a97cf7d6..817f6c1f5ba 100644 --- a/packages/core/integration-tests/test/cache.js +++ b/packages/core/integration-tests/test/cache.js @@ -107,7 +107,7 @@ async function testCache(update: UpdateFn | TestConfig, integration) { return b; } -describe('cache', function() { +describe('cache', function () { before(async () => { await inputFS.rimraf(path.join(__dirname, 'input')); }); @@ -116,13 +116,11 @@ describe('cache', function() { inputDir = path.join( __dirname, '/input', - Math.random() - .toString(36) - .slice(2), + Math.random().toString(36).slice(2), ); }); - it('should support updating a JS file', async function() { + it('should support updating a JS file', async function () { let b = await testCache(async b => { assert.equal(await run(b.bundleGraph), 4); await overlayFS.writeFile( @@ -134,7 +132,7 @@ describe('cache', function() { assert.equal(await run(b.bundleGraph), 6); }); - it('should support adding a dependency', async function() { + it('should support adding a dependency', async function () { let b = await testCache(async b => { assert.equal(await run(b.bundleGraph), 4); await overlayFS.writeFile( @@ -150,7 +148,7 @@ describe('cache', function() { assert.equal(await run(b.bundleGraph), 8); }); - it('should support adding a dependency which changes the referenced bundles of a parent bundle', async function() { + it('should support adding a dependency which changes the referenced bundles of a parent bundle', async function () { async function exec(bundleGraph) { let calls = []; await run(bundleGraph, { @@ -178,7 +176,7 @@ describe('cache', function() { assert.deepEqual(await exec(b.bundleGraph), ['b', 'a']); }); - it('should error when deleting a file', async function() { + it('should error when deleting a file', async function () { // $FlowFixMe await assert.rejects( async () => { @@ -190,7 +188,7 @@ describe('cache', function() { ); }); - it('should error when starting parcel from a broken state with no changes', async function() { + it('should error when starting parcel from a broken state with no changes', async function () { // $FlowFixMe await assert.rejects(async () => { await testCache(async () => { @@ -208,7 +206,7 @@ describe('cache', function() { ); }); - describe('babel', function() { + describe('babel', function () { let json = config => JSON.stringify(config); let cjs = config => `module.exports = ${JSON.stringify(config)}`; // TODO: not sure how to invalidate the ESM cache in node... @@ -235,8 +233,8 @@ describe('cache', function() { }); for (let {name, formatter, nesting} of configs) { - describe(name, function() { - it(`should support adding a ${name}`, async function() { + describe(name, function () { + it(`should support adding a ${name}`, async function () { let b = await testCache({ // Babel's config loader only works with the node filesystem inputFS, @@ -283,7 +281,7 @@ describe('cache', function() { ); }); - it(`should support updating a ${name}`, async function() { + it(`should support updating a ${name}`, async function () { let b = await testCache({ // Babel's config loader only works with the node filesystem inputFS, @@ -334,7 +332,7 @@ describe('cache', function() { ); }); - it(`should support deleting a ${name}`, async function() { + it(`should support deleting a ${name}`, async function () { let b = await testCache({ // Babel's config loader only works with the node filesystem inputFS, @@ -377,7 +375,7 @@ describe('cache', function() { ); }); - it(`should support updating an extended ${name}`, async function() { + it(`should support updating an extended ${name}`, async function () { let extendedName = '.babelrc-extended' + path.extname(name); let b = await testCache({ // Babel's config loader only works with the node filesystem @@ -436,7 +434,7 @@ describe('cache', function() { }); if (nesting) { - it(`should support adding a nested ${name}`, async function() { + it(`should support adding a nested ${name}`, async function () { let b = await testCache({ // Babel's config loader only works with the node filesystem inputFS, @@ -491,7 +489,7 @@ describe('cache', function() { ); }); - it(`should support updating a nested ${name}`, async function() { + it(`should support updating a nested ${name}`, async function () { let b = await testCache({ // Babel's config loader only works with the node filesystem inputFS, @@ -550,7 +548,7 @@ describe('cache', function() { ); }); - it(`should support deleting a nested ${name}`, async function() { + it(`should support deleting a nested ${name}`, async function () { let b = await testCache({ // Babel's config loader only works with the node filesystem inputFS, @@ -604,8 +602,8 @@ describe('cache', function() { }); } - describe('.babelignore', function() { - it('should support adding a .babelignore', async function() { + describe('.babelignore', function () { + it('should support adding a .babelignore', async function () { let b = await testCache({ // Babel's config loader only works with the node filesystem inputFS, @@ -660,7 +658,7 @@ describe('cache', function() { ); }); - it('should support updating a .babelignore', async function() { + it('should support updating a .babelignore', async function () { let b = await testCache({ // Babel's config loader only works with the node filesystem inputFS, @@ -715,7 +713,7 @@ describe('cache', function() { ); }); - it('should support deleting a .babelignore', async function() { + it('should support deleting a .babelignore', async function () { let b = await testCache({ // Babel's config loader only works with the node filesystem inputFS, @@ -768,8 +766,8 @@ describe('cache', function() { }); }); - describe('plugins', function() { - it('should invalidate when plugins are updated', async function() { + describe('plugins', function () { + it('should invalidate when plugins are updated', async function () { let b = await testCache({ // Babel's config loader only works with the node filesystem inputFS, @@ -842,7 +840,7 @@ describe('cache', function() { assert(contents.includes('replaced'), 'string should be replaced'); }); - it('should invalidate when there are relative plugins', async function() { + it('should invalidate when there are relative plugins', async function () { let b = await testCache({ // Babel's config loader only works with the node filesystem inputFS, @@ -899,7 +897,7 @@ describe('cache', function() { assert(contents.includes('replaced'), 'string should be replaced'); }); - it('should invalidate when there are symlinked plugins', async function() { + it('should invalidate when there are symlinked plugins', async function () { // Symlinks don't work consistently on windows. Skip this test. if (process.platform === 'win32') { this.skip(); @@ -982,8 +980,8 @@ describe('cache', function() { }); }); - describe('parcel config', function() { - it('should support adding a .parcelrc', async function() { + describe('parcel config', function () { + it('should support adding a .parcelrc', async function () { let b = await testCache(async b => { assert.equal(await run(b.bundleGraph), 4); @@ -1011,7 +1009,7 @@ describe('cache', function() { assert(contents.includes('TRANSFORMED CODE')); }); - it('should support updating a .parcelrc', async function() { + it('should support updating a .parcelrc', async function () { let b = await testCache({ async setup() { await overlayFS.writeFile( @@ -1049,7 +1047,7 @@ describe('cache', function() { assert.equal(await run(b.bundleGraph), 4); }); - it('should support updating an extended .parcelrc', async function() { + it('should support updating an extended .parcelrc', async function () { let b = await testCache({ async setup() { await overlayFS.writeFile( @@ -1094,7 +1092,7 @@ describe('cache', function() { assert.equal(await run(b.bundleGraph), 4); }); - it('should error when deleting an extended parcelrc', async function() { + it('should error when deleting an extended parcelrc', async function () { // $FlowFixMe await assert.rejects( async () => { @@ -1132,7 +1130,7 @@ describe('cache', function() { ); }); - it('should support deleting a .parcelrc', async function() { + it('should support deleting a .parcelrc', async function () { let b = await testCache({ async setup() { await overlayFS.writeFile( @@ -1166,8 +1164,8 @@ describe('cache', function() { }); }); - describe('transformations', function() { - it('should invalidate when included files changes', async function() { + describe('transformations', function () { + it('should invalidate when included files changes', async function () { let b = await testCache({ // TODO: update when the fs transform supports the MemoryFS inputFS, @@ -1273,7 +1271,7 @@ describe('cache', function() { assert.equal(await run(b.bundleGraph), undefined); }); - it('should invalidate when environment variables change', async function() { + it('should invalidate when environment variables change', async function () { let b = await testCache({ async setup() { await overlayFS.writeFile(path.join(inputDir, '.env'), 'TEST=hi'); @@ -1297,8 +1295,8 @@ describe('cache', function() { }); }); - describe('entries', function() { - it('should support adding an entry that matches a glob', async function() { + describe('entries', function () { + it('should support adding an entry that matches a glob', async function () { let b = await testCache({ entries: ['src/entries/*.js'], async update(b) { @@ -1336,7 +1334,7 @@ describe('cache', function() { ]); }); - it('should support deleting an entry that matches a glob', async function() { + it('should support deleting an entry that matches a glob', async function () { let b = await testCache({ entries: ['src/entries/*.js'], async update(b) { @@ -1363,7 +1361,7 @@ describe('cache', function() { ]); }); - it('should error when deleting a file entry', async function() { + it('should error when deleting a file entry', async function () { // $FlowFixMe await assert.rejects( async () => { @@ -1380,7 +1378,7 @@ describe('cache', function() { ); }); - it('should recover from errors when adding a missing entry', async function() { + it('should recover from errors when adding a missing entry', async function () { // $FlowFixMe await assert.rejects( async () => { @@ -1406,8 +1404,8 @@ describe('cache', function() { }); }); - describe('target config', function() { - it('should support adding a target config', async function() { + describe('target config', function () { + it('should support adding a target config', async function () { let b = await testCache({ defaultTargetOptions: { shouldScopeHoist: true, @@ -1443,7 +1441,7 @@ describe('cache', function() { assert(contents.includes('export '), 'should include export'); }); - it('should support adding a second target', async function() { + it('should support adding a second target', async function () { let pkgFile = path.join(inputDir, 'package.json'); let b = await testCache({ defaultTargetOptions: { @@ -1507,7 +1505,7 @@ describe('cache', function() { ]); }); - it('should support changing target output location', async function() { + it('should support changing target output location', async function () { let pkgFile = path.join(inputDir, 'package.json'); await testCache({ defaultTargetOptions: { @@ -1576,7 +1574,7 @@ describe('cache', function() { ); }); - it('should support updating target config options', async function() { + it('should support updating target config options', async function () { let pkgFile = path.join(inputDir, 'package.json'); let b = await testCache({ defaultTargetOptions: { @@ -1629,7 +1627,7 @@ describe('cache', function() { ); }); - it('should support deleting a target', async function() { + it('should support deleting a target', async function () { let pkgFile = path.join(inputDir, 'package.json'); let b = await testCache({ defaultTargetOptions: { @@ -1693,7 +1691,7 @@ describe('cache', function() { ]); }); - it('should support deleting all targets', async function() { + it('should support deleting all targets', async function () { let pkgFile = path.join(inputDir, 'package.json'); let b = await testCache({ defaultTargetOptions: { @@ -1773,7 +1771,7 @@ describe('cache', function() { ); }); - it('should update when sourcemap options change', async function() { + it('should update when sourcemap options change', async function () { let pkgFile = path.join(inputDir, 'package.json'); let b = await testCache({ defaultTargetOptions: { @@ -1830,7 +1828,7 @@ describe('cache', function() { ); }); - it('should update when publicUrl changes', async function() { + it('should update when publicUrl changes', async function () { let pkgFile = path.join(inputDir, 'package.json'); let b = await testCache({ entries: ['src/index.html'], @@ -1888,7 +1886,7 @@ describe('cache', function() { ); }); - it('should update when a package.json is created', async function() { + it('should update when a package.json is created', async function () { let pkgFile = path.join(inputDir, 'package.json'); let pkg; let b = await testCache({ @@ -1928,7 +1926,7 @@ describe('cache', function() { assert(contents.includes('export '), 'should include export'); }); - it('should update when a package.json is deleted', async function() { + it('should update when a package.json is deleted', async function () { let pkgFile = path.join(inputDir, 'package.json'); let b = await testCache({ defaultTargetOptions: { @@ -1966,8 +1964,8 @@ describe('cache', function() { assert(!contents.includes('export '), 'does not include export'); }); - describe('browserslist', function() { - it('should update when a browserslist file is added', async function() { + describe('browserslist', function () { + it('should update when a browserslist file is added', async function () { let b = await testCache({ defaultTargetOptions: { shouldScopeHoist: true, @@ -1998,7 +1996,7 @@ describe('cache', function() { ); }); - it('should update when a .browserslistrc file is added', async function() { + it('should update when a .browserslistrc file is added', async function () { let b = await testCache({ defaultTargetOptions: { shouldScopeHoist: true, @@ -2029,7 +2027,7 @@ describe('cache', function() { ); }); - it('should update when a browserslist is updated', async function() { + it('should update when a browserslist is updated', async function () { let b = await testCache({ defaultTargetOptions: { shouldScopeHoist: true, @@ -2066,7 +2064,7 @@ describe('cache', function() { ); }); - it('should update when a browserslist is deleted', async function() { + it('should update when a browserslist is deleted', async function () { let b = await testCache({ defaultTargetOptions: { shouldScopeHoist: true, @@ -2100,7 +2098,7 @@ describe('cache', function() { ); }); - it('should update when BROWSERSLIST_ENV changes', async function() { + it('should update when BROWSERSLIST_ENV changes', async function () { let b = await testCache({ defaultTargetOptions: { shouldScopeHoist: true, @@ -2146,7 +2144,7 @@ describe('cache', function() { delete process.env.BROWSERSLIST_ENV; }); - it('should update when NODE_ENV changes', async function() { + it('should update when NODE_ENV changes', async function () { let env = process.env.NODE_ENV; let b = await testCache({ defaultTargetOptions: { @@ -2195,8 +2193,8 @@ describe('cache', function() { }); }); - describe('options', function() { - it('should update when publicUrl changes', async function() { + describe('options', function () { + it('should update when publicUrl changes', async function () { let b = await testCache({ entries: ['src/index.html'], defaultTargetOptions: { @@ -2233,7 +2231,7 @@ describe('cache', function() { ); }); - it('should update when minify changes', async function() { + it('should update when minify changes', async function () { let b = await testCache({ entries: ['src/index.html'], defaultTargetOptions: { @@ -2263,7 +2261,7 @@ describe('cache', function() { assert(!contents.includes('Test'), 'should not include Test'); }); - it('should update when scopeHoist changes', async function() { + it('should update when scopeHoist changes', async function () { let b = await testCache({ defaultTargetOptions: { shouldScopeHoist: false, @@ -2293,7 +2291,7 @@ describe('cache', function() { assert(!contents.includes('parcelRequire'), 'should not include Test'); }); - it('should update when sourceMaps changes', async function() { + it('should update when sourceMaps changes', async function () { let b = await testCache({ defaultTargetOptions: { sourceMaps: false, @@ -2326,7 +2324,7 @@ describe('cache', function() { ); }); - it('should update when distDir changes', async function() { + it('should update when distDir changes', async function () { let b = await testCache({ defaultTargetOptions: { shouldScopeHoist: true, @@ -2353,7 +2351,7 @@ describe('cache', function() { ); }); - it('should update when targets changes', async function() { + it('should update when targets changes', async function () { let b = await testCache({ defaultTargetOptions: { shouldScopeHoist: true, @@ -2421,7 +2419,7 @@ describe('cache', function() { ); }); - it('should update when defaultEngines changes', async function() { + it('should update when defaultEngines changes', async function () { let b = await testCache({ defaultTargetOptions: { shouldScopeHoist: true, @@ -2460,7 +2458,7 @@ describe('cache', function() { ); }); - it('should update when shouldContentHash changes', async function() { + it('should update when shouldContentHash changes', async function () { let b = await testCache({ entries: ['src/index.html'], defaultTargetOptions: { @@ -2481,7 +2479,7 @@ describe('cache', function() { assert(bundle.filePath.includes(bundle.id.slice(-8))); }); - it('should update when hmr options change', async function() { + it('should update when hmr options change', async function () { let b = await testCache({ hmrOptions: { host: 'localhost', @@ -2536,7 +2534,7 @@ describe('cache', function() { ); }); - it('should invalidate react refresh hot options change', async function() { + it('should invalidate react refresh hot options change', async function () { let b = await testCache({ async setup() { let pkgFile = path.join(inputDir, 'package.json'); @@ -2589,7 +2587,7 @@ describe('cache', function() { ); }); - it('should update when the config option changes', async function() { + it('should update when the config option changes', async function () { let b = await testCache({ async update(b) { let contents = await overlayFS.readFile( @@ -2621,7 +2619,7 @@ describe('cache', function() { assert(contents.includes('TRANSFORMED CODE')); }); - it('should update when the defaultConfig option changes', async function() { + it('should update when the defaultConfig option changes', async function () { let b = await testCache({ async update(b) { let contents = await overlayFS.readFile( @@ -2653,7 +2651,7 @@ describe('cache', function() { assert(contents.includes('TRANSFORMED CODE')); }); - it('should update env browserslist in package.json when mode changes', async function() { + it('should update env browserslist in package.json when mode changes', async function () { let env = process.env.NODE_ENV; delete process.env.NODE_ENV; try { @@ -2703,8 +2701,8 @@ describe('cache', function() { }); }); - describe('resolver', function() { - it('should support updating a package.json#main field', async function() { + describe('resolver', function () { + it('should support updating a package.json#main field', async function () { let b = await testCache(async b => { assert.equal(await run(b.bundleGraph), 4); await overlayFS.writeFile( @@ -2721,7 +2719,7 @@ describe('cache', function() { assert.equal(await run(b.bundleGraph), 8); }); - it('should support adding an alias', async function() { + it('should support adding an alias', async function () { let b = await testCache(async b => { assert.equal(await run(b.bundleGraph), 4); await overlayFS.writeFile( @@ -2743,7 +2741,7 @@ describe('cache', function() { assert.equal(await run(b.bundleGraph), 8); }); - it('should support updating an alias', async function() { + it('should support updating an alias', async function () { let b = await testCache({ async setup() { await overlayFS.writeFile( @@ -2783,7 +2781,7 @@ describe('cache', function() { assert.equal(await run(b.bundleGraph), 12); }); - it('should support deleting an alias', async function() { + it('should support deleting an alias', async function () { let b = await testCache({ async setup() { await overlayFS.writeFile( @@ -2813,7 +2811,7 @@ describe('cache', function() { assert.equal(await run(b.bundleGraph), 4); }); - it('should support adding an alias in a closer package.json', async function() { + it('should support adding an alias in a closer package.json', async function () { let b = await testCache(async b => { assert.equal(await run(b.bundleGraph), 4); await overlayFS.writeFile( @@ -2834,7 +2832,7 @@ describe('cache', function() { assert.equal(await run(b.bundleGraph), 6); }); - it('should support adding a file with a higher priority extension', async function() { + it('should support adding a file with a higher priority extension', async function () { let b = await testCache({ async setup() { // Start out pointing to a .ts file from a .js file @@ -2865,7 +2863,7 @@ describe('cache', function() { assert.equal(await run(b.bundleGraph), 4); }); - it('should support renaming a file to a different extension', async function() { + it('should support renaming a file to a different extension', async function () { let b = await testCache({ async setup() { // Start out pointing to a .js file @@ -2898,7 +2896,7 @@ describe('cache', function() { assert.equal(await run(b.bundleGraph), 4); }); - it('should resolve to a file over a directory with an index.js', async function() { + it('should resolve to a file over a directory with an index.js', async function () { let b = await testCache({ async setup() { let contents = await overlayFS.readFile( @@ -2927,7 +2925,7 @@ describe('cache', function() { assert.equal(await run(b.bundleGraph), 4); }); - it('should resolve to package.json#main over an index.js', async function() { + it('should resolve to package.json#main over an index.js', async function () { let b = await testCache({ async setup() { let contents = await overlayFS.readFile( @@ -2958,7 +2956,7 @@ describe('cache', function() { assert.equal(await run(b.bundleGraph), 4); }); - it('should recover from errors when adding a missing dependency', async function() { + it('should recover from errors when adding a missing dependency', async function () { // $FlowFixMe await assert.rejects( async () => { @@ -2983,7 +2981,7 @@ describe('cache', function() { assert.equal(await run(b.bundleGraph), 6); }); - it('should recover from a missing package.json#main', async function() { + it('should recover from a missing package.json#main', async function () { let b = await testCache({ async setup() { let contents = await overlayFS.readFile( @@ -3020,7 +3018,7 @@ describe('cache', function() { assert.equal(await run(b.bundleGraph), 10); }); - it('should recover from an invalid package.json', async function() { + it('should recover from an invalid package.json', async function () { // $FlowFixMe await assert.rejects(async () => { await testCache({ @@ -3059,7 +3057,7 @@ describe('cache', function() { assert.equal(await run(b.bundleGraph), 4); }); - it('should support adding a deeper node_modules folder', async function() { + it('should support adding a deeper node_modules folder', async function () { let b = await testCache({ async update(b) { assert.equal(await run(b.bundleGraph), 4); @@ -3078,8 +3076,8 @@ describe('cache', function() { assert.equal(await run(b.bundleGraph), 6); }); - describe('pnp', function() { - it('should invalidate when the .pnp.js file changes', async function() { + describe('pnp', function () { + it('should invalidate when the .pnp.js file changes', async function () { let Module = require('module'); let origPnpVersion = process.versions.pnp; // $FlowFixMe[prop-missing] @@ -3142,8 +3140,8 @@ describe('cache', function() { }); }); - describe('stylus', function() { - it('should support resolver inside stylus file', async function() { + describe('stylus', function () { + it('should support resolver inside stylus file', async function () { let b = await testCache( { entries: ['index.js'], @@ -3197,7 +3195,7 @@ describe('cache', function() { assert(css.includes('.c {')); }); - it('should support stylus default resolver', async function() { + it('should support stylus default resolver', async function () { let b = await testCache( { entries: ['index.js'], @@ -3238,7 +3236,7 @@ describe('cache', function() { assert(css.includes('.b {')); }); - it('should support glob imports in stylus files', async function() { + it('should support glob imports in stylus files', async function () { let b = await testCache( { entries: ['index.js'], @@ -3285,7 +3283,7 @@ describe('cache', function() { assert(css.includes('.foo-test')); }); - it('should support glob imports under stylus paths', async function() { + it('should support glob imports under stylus paths', async function () { let b = await testCache( { entries: ['index.js'], @@ -3351,8 +3349,8 @@ describe('cache', function() { }); }); - describe('less', function() { - it('should support adding higher priority less include paths', async function() { + describe('less', function () { + it('should support adding higher priority less include paths', async function () { let b = await testCache( { entries: ['index.js'], @@ -3401,7 +3399,7 @@ describe('cache', function() { assert(css.includes('.d')); }); - it('should recover from missing import errors', async function() { + it('should recover from missing import errors', async function () { // $FlowFixMe await assert.rejects( async () => { @@ -3452,8 +3450,8 @@ describe('cache', function() { }); }); - describe('sass', function() { - it('should support adding higher priority sass include paths', async function() { + describe('sass', function () { + it('should support adding higher priority sass include paths', async function () { let b = await testCache( { entries: ['index.sass'], @@ -3492,7 +3490,7 @@ describe('cache', function() { assert(css.includes('.test')); }); - it('should the SASS_PATH environment variable', async function() { + it('should the SASS_PATH environment variable', async function () { let b = await testCache( { entries: ['index.sass'], @@ -3534,7 +3532,7 @@ describe('cache', function() { assert(css.includes('.test')); }); - it('should recover from missing import errors', async function() { + it('should recover from missing import errors', async function () { // $FlowFixMe await assert.rejects(async () => { await testCache( @@ -3577,8 +3575,8 @@ describe('cache', function() { }); }); - describe('dev deps', function() { - it('should invalidate when updating a parcel transformer plugin', async function() { + describe('dev deps', function () { + it('should invalidate when updating a parcel transformer plugin', async function () { let b = await testCache({ async setup() { await overlayFS.writeFile( @@ -3617,7 +3615,7 @@ describe('cache', function() { assert(output.includes('UPDATED')); }); - it('should invalidate when updating a file required via options.packageManager.require', async function() { + it('should invalidate when updating a file required via options.packageManager.require', async function () { let b = await testCache({ async setup() { await overlayFS.writeFile( @@ -3670,7 +3668,7 @@ describe('cache', function() { assert(output.includes('FOO: 3')); }); - it('should resolve to package.json#main over an index.js', async function() { + it('should resolve to package.json#main over an index.js', async function () { let b = await testCache({ async setup() { await overlayFS.writeFile( @@ -3726,7 +3724,7 @@ describe('cache', function() { assert(output.includes('UPDATED')); }); - it('should resolve to a file over a directory with an index.js', async function() { + it('should resolve to a file over a directory with an index.js', async function () { let transformerDir = path.join( inputDir, 'node_modules', @@ -3772,9 +3770,9 @@ describe('cache', function() { assert(output.includes('UPDATED')); }); - it('should support adding a deeper node_modules folder', async function() {}); + it('should support adding a deeper node_modules folder', async function () {}); - it('should support yarn pnp', async function() { + it('should support yarn pnp', async function () { let Module = require('module'); // $FlowFixMe[incompatible-type] let origPnpVersion = process.versions.pnp; @@ -3927,8 +3925,8 @@ describe('cache', function() { } }); - describe('postcss', function() { - it('should invalidate when a postcss plugin changes', async function() { + describe('postcss', function () { + it('should invalidate when a postcss plugin changes', async function () { let b = await testCache( { entries: ['index.css'], @@ -3976,7 +3974,7 @@ describe('cache', function() { assert(output.includes('background: blue')); }); - it('should invalidate when a JS postcss config changes', async function() { + it('should invalidate when a JS postcss config changes', async function () { let b = await testCache( { entries: ['style.css'], @@ -4015,7 +4013,7 @@ describe('cache', function() { assert(output.includes('background-color: blue')); }); - it('should invalidate when a JSON postcss config changes', async function() { + it('should invalidate when a JSON postcss config changes', async function () { let b = await testCache( { entries: ['nested/index.css'], @@ -4046,7 +4044,7 @@ describe('cache', function() { assert(output.includes('background-color: blue')); }); - it('should invalidate when a closer postcss config is added', async function() { + it('should invalidate when a closer postcss config is added', async function () { let b = await testCache( { entries: ['nested/index.css'], @@ -4078,8 +4076,8 @@ describe('cache', function() { }); }); - describe('posthtml', function() { - it('should invalidate when a posthtml plugin changes', async function() { + describe('posthtml', function () { + it('should invalidate when a posthtml plugin changes', async function () { let b = await testCache( { entries: ['index.html'], @@ -4127,7 +4125,7 @@ describe('cache', function() { assert(output.includes('
Test
')); }); - it('should invalidate when a JS postcss config changes', async function() { + it('should invalidate when a JS postcss config changes', async function () { let b = await testCache( { entries: ['index.html'], @@ -4174,8 +4172,8 @@ describe('cache', function() { }); }); - describe('bundling', function() { - it('should invalidate when switching to a different bundler plugin', async function() { + describe('bundling', function () { + it('should invalidate when switching to a different bundler plugin', async function () { let b = await testCache({ async update(b) { assert.equal(b.bundleGraph.getBundles().length, 1); @@ -4193,7 +4191,7 @@ describe('cache', function() { assert.equal(b.bundleGraph.getBundles().length, 4); }); - it('should invalidate when a bundler plugin is updated', async function() { + it('should invalidate when a bundler plugin is updated', async function () { let b = await testCache({ async setup() { await overlayFS.writeFile( @@ -4216,10 +4214,9 @@ describe('cache', function() { ); await overlayFS.writeFile( bundler, - (await overlayFS.readFile(bundler, 'utf8')).replace( - 'Boolean(dependency.isEntry)', - 'false', - ), + ( + await overlayFS.readFile(bundler, 'utf8') + ).replace('Boolean(dependency.isEntry)', 'false'), ); }, }); @@ -4228,7 +4225,7 @@ describe('cache', function() { assert(b.bundleGraph.getBundles()[0].name.includes('HASH_REF')); }); - it('should invalidate when adding a namer plugin', async function() { + it('should invalidate when adding a namer plugin', async function () { let b = await testCache({ async update(b) { let bundles = b.bundleGraph.getBundles().map(b => b.name); @@ -4251,7 +4248,7 @@ describe('cache', function() { ); }); - it('should invalidate when a namer plugin is updated', async function() { + it('should invalidate when a namer plugin is updated', async function () { let b = await testCache({ async setup() { await overlayFS.writeFile( @@ -4277,10 +4274,9 @@ describe('cache', function() { ); await overlayFS.writeFile( namer, - (await overlayFS.readFile(namer, 'utf8')).replace( - 'bundle.id', - 'bundle.id.slice(-8)', - ), + ( + await overlayFS.readFile(namer, 'utf8') + ).replace('bundle.id', 'bundle.id.slice(-8)'), ); }, }); @@ -4292,7 +4288,7 @@ describe('cache', function() { ); }); - it('should invalidate when adding a runtime plugin', async function() { + it('should invalidate when adding a runtime plugin', async function () { let b = await testCache({ async update(b) { let res = await run(b.bundleGraph, null, {require: false}); @@ -4312,7 +4308,7 @@ describe('cache', function() { assert.equal(res.runtime_test, true); }); - it('should invalidate when a runtime is updated', async function() { + it('should invalidate when a runtime is updated', async function () { let b = await testCache({ async setup() { await overlayFS.writeFile( @@ -4336,10 +4332,9 @@ describe('cache', function() { ); await overlayFS.writeFile( namer, - (await overlayFS.readFile(namer, 'utf8')).replace( - 'runtime_test', - 'test_runtime', - ), + ( + await overlayFS.readFile(namer, 'utf8') + ).replace('runtime_test', 'test_runtime'), ); }, }); @@ -4349,8 +4344,8 @@ describe('cache', function() { assert.equal(res.test_runtime, true); }); - describe('bundler config', function() { - it('should support adding bundler config', async function() { + describe('bundler config', function () { + it('should support adding bundler config', async function () { let b = await testCache( { entries: ['*.html'], @@ -4397,7 +4392,7 @@ describe('cache', function() { assert.equal(html.match(/