Skip to content

Commit afc86c2

Browse files
committed
Use stable id for package requests
This allows the previous dev dependencies to be loaded from the graph correctly.
1 parent a993f98 commit afc86c2

File tree

3 files changed

+44
-10
lines changed

3 files changed

+44
-10
lines changed

packages/core/core/src/BundleGraph.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1932,9 +1932,13 @@ export default class BundleGraph {
19321932
addReferencedBundles(bundle);
19331933

19341934
this.traverseBundles((childBundle, _, traversal) => {
1935+
if (childBundle.id === bundle.id) {
1936+
return;
1937+
}
1938+
19351939
if (childBundle.bundleBehavior === BundleBehavior.inline) {
19361940
bundles.push(childBundle);
1937-
} else if (childBundle.id !== bundle.id) {
1941+
} else {
19381942
traversal.skipChildren();
19391943
}
19401944
}, bundle);

packages/core/core/src/requests/PackageRequest.js

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import type {Async} from '@parcel/types';
55
import type {SharedReference} from '@parcel/workers';
66

77
import type {StaticRunOpts} from '../RequestTracker';
8-
import {requestTypes} from '../RequestTracker';
8+
import {requestTypes, type RunAPI} from '../RequestTracker';
99
import type {Bundle} from '../types';
1010
import type BundleGraph from '../BundleGraph';
1111
import type {BundleInfo, RunPackagerRunnerResult} from '../PackagerRunner';
@@ -15,6 +15,7 @@ import nullthrows from 'nullthrows';
1515
import {runConfigRequest} from './ConfigRequest';
1616
import {getDevDepRequests, runDevDepRequest} from './DevDepRequest';
1717
import createParcelConfigRequest from './ParcelConfigRequest';
18+
import type {WriteBundlesRequestResult} from './WriteBundlesRequest';
1819

1920
type PackageRequestInput = {|
2021
bundleGraph: BundleGraph,
@@ -24,7 +25,10 @@ type PackageRequestInput = {|
2425
useMainThread?: boolean,
2526
|};
2627

27-
export type PackageRequestResult = BundleInfo[];
28+
export type PackageRequestResult = {|
29+
hash: string,
30+
info: BundleInfo[],
31+
|};
2832

2933
type RunInput<TResult> = {|
3034
input: PackageRequestInput,
@@ -34,7 +38,7 @@ type RunInput<TResult> = {|
3438
export type PackageRequest = {|
3539
id: ContentKey,
3640
+type: typeof requestTypes.package_request,
37-
run: (RunInput<BundleInfo[]>) => Async<BundleInfo[]>,
41+
run: (RunInput<PackageRequestResult>) => Async<PackageRequestResult>,
3842
input: PackageRequestInput,
3943
|};
4044

@@ -43,12 +47,27 @@ export function createPackageRequest(
4347
): PackageRequest {
4448
return {
4549
type: requestTypes.package_request,
46-
id: input.bundleGraph.getHash(input.bundle),
50+
id: getPackageRequestId(input.bundle),
4751
run,
4852
input,
4953
};
5054
}
5155

56+
export function getPackageRequestId(bundle: Bundle): string {
57+
return 'package:' + bundle.id;
58+
}
59+
60+
export async function canSkipPackageRequest(
61+
api: RunAPI<WriteBundlesRequestResult>,
62+
request: PackageRequest,
63+
): Promise<boolean> {
64+
return (
65+
api.canSkipSubrequest(request.id) &&
66+
(await api.getRequestResult<PackageRequestResult>(request.id))?.hash ===
67+
request.input.bundleGraph.getHash(request.input.bundle)
68+
);
69+
}
70+
5271
async function run({input, api, farm}) {
5372
let {bundleGraphReference, optionsRef, bundle, useMainThread} = input;
5473
let runPackage = farm.createHandle('runPackage', useMainThread);
@@ -100,6 +119,11 @@ async function run({input, api, farm}) {
100119
info.time = Date.now() - start;
101120
}
102121

103-
api.storeResult(bundleInfo);
104-
return bundleInfo;
122+
let res = {
123+
hash: input.bundleGraph.getHash(input.bundle),
124+
info: bundleInfo,
125+
};
126+
127+
api.storeResult(res);
128+
return res;
105129
}

packages/core/core/src/requests/WriteBundlesRequest.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@ import {HASH_REF_PREFIX} from '../constants';
1313
import {joinProjectPath} from '../projectPath';
1414
import nullthrows from 'nullthrows';
1515
import {hashString} from '@parcel/rust';
16-
import {createPackageRequest} from './PackageRequest';
16+
import {
17+
canSkipPackageRequest,
18+
createPackageRequest,
19+
getPackageRequestId,
20+
} from './PackageRequest';
1721
import createWriteBundleRequest from './WriteBundleRequest';
1822

1923
type WriteBundlesRequestInput = {|
@@ -93,7 +97,7 @@ async function run({input, api, farm, options}) {
9397
// This avoids the cost of serializing the bundle graph for single file change builds.
9498
let useMainThread =
9599
bundles.length === 1 ||
96-
bundles.filter(b => !api.canSkipSubrequest(bundleGraph.getHash(b)))
100+
bundles.filter(b => !api.canSkipSubrequest(getPackageRequestId(b)))
97101
.length === 1;
98102

99103
try {
@@ -107,7 +111,9 @@ async function run({input, api, farm, options}) {
107111
useMainThread,
108112
});
109113

110-
let infos = await api.runRequest(request);
114+
let {info: infos} = await api.runRequest(request, {
115+
force: !(await canSkipPackageRequest(api, request)),
116+
});
111117

112118
if (!useMainThread) {
113119
// Force a refresh of the cache to avoid a race condition

0 commit comments

Comments
 (0)