@@ -5,7 +5,7 @@ import type {Async} from '@parcel/types';
55import type { SharedReference } from '@parcel/workers' ;
66
77import type { StaticRunOpts } from '../RequestTracker' ;
8- import { requestTypes } from '../RequestTracker' ;
8+ import { requestTypes , type RunAPI } from '../RequestTracker' ;
99import type { Bundle } from '../types' ;
1010import type BundleGraph from '../BundleGraph' ;
1111import type { BundleInfo , RunPackagerRunnerResult } from '../PackagerRunner' ;
@@ -15,6 +15,7 @@ import nullthrows from 'nullthrows';
1515import { runConfigRequest } from './ConfigRequest' ;
1616import { getDevDepRequests , runDevDepRequest } from './DevDepRequest' ;
1717import createParcelConfigRequest from './ParcelConfigRequest' ;
18+ import type { WriteBundlesRequestResult } from './WriteBundlesRequest' ;
1819
1920type 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
2933type RunInput < TResult > = { |
3034 input : PackageRequestInput ,
@@ -34,7 +38,7 @@ type RunInput<TResult> = {|
3438export 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+
5271async 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}
0 commit comments