From 74ce89b6ab99c689a45fc08360f05201b5d32fdd Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Tue, 7 Dec 2021 12:24:26 -0500 Subject: [PATCH 1/4] Make getReferencedBundle faster --- packages/core/core/src/BundleGraph.js | 17 +++++------------ packages/core/integration-tests/test/cache.js | 3 ++- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/packages/core/core/src/BundleGraph.js b/packages/core/core/src/BundleGraph.js index f17ef135267..2772e186ebd 100644 --- a/packages/core/core/src/BundleGraph.js +++ b/packages/core/core/src/BundleGraph.js @@ -436,24 +436,17 @@ export default class BundleGraph { }); } - // Otherwise, it may be a reference to another asset in the same bundle group. - // Resolve the dependency to an asset, and look for it in one of the referenced bundles. - let referencedBundles = this.getReferencedBundles(fromBundle, { - includeInline: true, - }); - let referenced = this._graph + // Otherwise, find an attached bundle via a reference edge (e.g. from createAssetReference). + let bundleNode = this._graph .getNodeIdsConnectedFrom( dependencyNodeId, bundleGraphEdgeTypes.references, ) .map(id => nullthrows(this._graph.getNode(id))) - .find(node => node.type === 'asset'); + .find(node => node.type === 'bundle'); - if (referenced != null) { - invariant(referenced.type === 'asset'); - return referencedBundles.find(b => - this.bundleHasAsset(b, referenced.value), - ); + if (bundleNode) { + return bundleNode.value; } } diff --git a/packages/core/integration-tests/test/cache.js b/packages/core/integration-tests/test/cache.js index 817f6c1f5ba..75fb6505f2b 100644 --- a/packages/core/integration-tests/test/cache.js +++ b/packages/core/integration-tests/test/cache.js @@ -148,7 +148,8 @@ 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 () { + // This test is already pretty broken at the moment... + it.skip('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, { From f9e0836d69292ed0f4416eaa15058825d73b1080 Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Tue, 7 Dec 2021 13:37:42 -0500 Subject: [PATCH 2/4] Fix flow --- packages/core/core/src/BundleGraph.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core/core/src/BundleGraph.js b/packages/core/core/src/BundleGraph.js index 2772e186ebd..4b607873ae1 100644 --- a/packages/core/core/src/BundleGraph.js +++ b/packages/core/core/src/BundleGraph.js @@ -446,6 +446,7 @@ export default class BundleGraph { .find(node => node.type === 'bundle'); if (bundleNode) { + invariant(bundleNode.type === 'bundle'); return bundleNode.value; } } From 3610ca29e3f6973de895b4e810556aa69df6623f Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Tue, 7 Dec 2021 14:05:31 -0500 Subject: [PATCH 3/4] Update test so it still tests the original issue --- packages/core/integration-tests/test/cache.js | 26 +++++++++++++------ .../{index.html => a.html} | 1 - .../cache-add-dep-referenced/b.html | 2 ++ .../integration/cache-add-dep-referenced/c.js | 1 + .../cache-add-dep-referenced/package.json | 5 ++++ .../cache-add-dep-referenced/yarn.lock | 0 6 files changed, 26 insertions(+), 9 deletions(-) rename packages/core/integration-tests/test/integration/cache-add-dep-referenced/{index.html => a.html} (57%) create mode 100644 packages/core/integration-tests/test/integration/cache-add-dep-referenced/b.html create mode 100644 packages/core/integration-tests/test/integration/cache-add-dep-referenced/c.js create mode 100644 packages/core/integration-tests/test/integration/cache-add-dep-referenced/package.json create mode 100644 packages/core/integration-tests/test/integration/cache-add-dep-referenced/yarn.lock diff --git a/packages/core/integration-tests/test/cache.js b/packages/core/integration-tests/test/cache.js index 75fb6505f2b..de60bceb491 100644 --- a/packages/core/integration-tests/test/cache.js +++ b/packages/core/integration-tests/test/cache.js @@ -2,11 +2,13 @@ import type {InitialParcelOptions, BuildSuccessEvent} from '@parcel/types'; import assert from 'assert'; import invariant from 'assert'; +import nullthrows from 'nullthrows'; import path from 'path'; import { assertBundles, bundler, run, + runBundle as runSingleBundle, overlayFS, outputFS, inputFS, @@ -148,11 +150,10 @@ describe('cache', function () { assert.equal(await run(b.bundleGraph), 8); }); - // This test is already pretty broken at the moment... - it.skip('should support adding a dependency which changes the referenced bundles of a parent bundle', async function () { - async function exec(bundleGraph) { + it('should support adding a dependency which changes the referenced bundles of a parent bundle', async function () { + async function exec(bundleGraph, bundle) { let calls = []; - await run(bundleGraph, { + await runSingleBundle(bundleGraph, nullthrows(bundle), { call(v) { calls.push(v); }, @@ -162,19 +163,28 @@ describe('cache', function () { let b = await testCache( { - entries: ['index.html'], + entries: ['a.html', 'b.html'], + mode: 'production', update: async b => { - assert.deepEqual(await exec(b.bundleGraph), ['a', 'b']); + let html = b.bundleGraph.getBundles().filter(b => b.type === 'html'); + assert.deepEqual(await exec(b.bundleGraph, html[0]), ['a']); + assert.deepEqual(await exec(b.bundleGraph, html[1]), ['b']); await overlayFS.writeFile( path.join(inputDir, 'a.js'), - 'import "./b.js"; call("a");', + 'import "./c.js"; call("a");', + ); + await overlayFS.writeFile( + path.join(inputDir, 'b.js'), + 'import "./c.js"; call("b");', ); }, }, 'cache-add-dep-referenced', ); - assert.deepEqual(await exec(b.bundleGraph), ['b', 'a']); + let html = b.bundleGraph.getBundles().filter(b => b.type === 'html'); + assert.deepEqual(await exec(b.bundleGraph, html[0]), ['c', 'a']); + assert.deepEqual(await exec(b.bundleGraph, html[1]), ['c', 'b']); }); it('should error when deleting a file', async function () { diff --git a/packages/core/integration-tests/test/integration/cache-add-dep-referenced/index.html b/packages/core/integration-tests/test/integration/cache-add-dep-referenced/a.html similarity index 57% rename from packages/core/integration-tests/test/integration/cache-add-dep-referenced/index.html rename to packages/core/integration-tests/test/integration/cache-add-dep-referenced/a.html index 1efba3d84ad..c85cb84ecfa 100644 --- a/packages/core/integration-tests/test/integration/cache-add-dep-referenced/index.html +++ b/packages/core/integration-tests/test/integration/cache-add-dep-referenced/a.html @@ -1,3 +1,2 @@ - diff --git a/packages/core/integration-tests/test/integration/cache-add-dep-referenced/b.html b/packages/core/integration-tests/test/integration/cache-add-dep-referenced/b.html new file mode 100644 index 00000000000..c1fa1bf97bc --- /dev/null +++ b/packages/core/integration-tests/test/integration/cache-add-dep-referenced/b.html @@ -0,0 +1,2 @@ + + diff --git a/packages/core/integration-tests/test/integration/cache-add-dep-referenced/c.js b/packages/core/integration-tests/test/integration/cache-add-dep-referenced/c.js new file mode 100644 index 00000000000..2c935611eab --- /dev/null +++ b/packages/core/integration-tests/test/integration/cache-add-dep-referenced/c.js @@ -0,0 +1 @@ +call("c"); diff --git a/packages/core/integration-tests/test/integration/cache-add-dep-referenced/package.json b/packages/core/integration-tests/test/integration/cache-add-dep-referenced/package.json new file mode 100644 index 00000000000..c5f216e03fd --- /dev/null +++ b/packages/core/integration-tests/test/integration/cache-add-dep-referenced/package.json @@ -0,0 +1,5 @@ +{ + "@parcel/bundler-default": { + "minBundleSize": 0 + } +} diff --git a/packages/core/integration-tests/test/integration/cache-add-dep-referenced/yarn.lock b/packages/core/integration-tests/test/integration/cache-add-dep-referenced/yarn.lock new file mode 100644 index 00000000000..e69de29bb2d From 54b0027d649ce32f9f057f3addc5706e2c2d9dcc Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Tue, 7 Dec 2021 22:05:28 -0500 Subject: [PATCH 4/4] Ignore unused param... --- packages/core/core/src/BundleGraph.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core/core/src/BundleGraph.js b/packages/core/core/src/BundleGraph.js index 4b607873ae1..94dddb16617 100644 --- a/packages/core/core/src/BundleGraph.js +++ b/packages/core/core/src/BundleGraph.js @@ -417,6 +417,7 @@ export default class BundleGraph { }; } + // eslint-disable-next-line no-unused-vars getReferencedBundle(dependency: Dependency, fromBundle: Bundle): ?Bundle { let dependencyNodeId = this._graph.getNodeIdByContentKey(dependency.id);