/
ParcelBuildRequest.js
101 lines (85 loc) 路 2.81 KB
/
ParcelBuildRequest.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
// @flow strict-local
import type {ContentKey} from '@parcel/graph';
import type {Async} from '@parcel/types';
import type {SharedReference} from '@parcel/workers';
import type {AbortSignal} from 'abortcontroller-polyfill/dist/cjs-ponyfill';
import type {StaticRunOpts} from '../RequestTracker';
import type {Asset, AssetGroup, PackagedBundleInfo} from '../types';
import type BundleGraph from '../BundleGraph';
import createBundleGraphRequest from './BundleGraphRequest';
import createWriteBundlesRequest from './WriteBundlesRequest';
import {assertSignalNotAborted} from '../utils';
import dumpGraphToGraphViz from '../dumpGraphToGraphViz';
import {bundleGraphEdgeTypes} from '../BundleGraph';
import {report} from '../ReporterRunner';
import IBundleGraph from '../public/BundleGraph';
import {NamedBundle} from '../public/Bundle';
import {assetFromValue} from '../public/Asset';
type ParcelBuildRequestInput = {|
optionsRef: SharedReference,
requestedAssetIds: Set<string>,
signal?: AbortSignal,
|};
type ParcelBuildRequestResult = {|
bundleGraph: BundleGraph,
bundleInfo: Map<string, PackagedBundleInfo>,
changedAssets: Map<string, Asset>,
assetRequests: Array<AssetGroup>,
|};
type RunInput = {|
input: ParcelBuildRequestInput,
...StaticRunOpts,
|};
export type ParcelBuildRequest = {|
id: ContentKey,
+type: 'parcel_build_request',
run: RunInput => Async<ParcelBuildRequestResult>,
input: ParcelBuildRequestInput,
|};
export default function createParcelBuildRequest(
input: ParcelBuildRequestInput,
): ParcelBuildRequest {
return {
type: 'parcel_build_request',
id: 'parcel_build_request',
run,
input,
};
}
async function run({input, api, options}: RunInput) {
let {optionsRef, requestedAssetIds, signal} = input;
let bundleGraphRequest = createBundleGraphRequest({
optionsRef,
requestedAssetIds,
signal,
});
let {bundleGraph, changedAssets, assetRequests} = await api.runRequest(
bundleGraphRequest,
{force: options.shouldBuildLazily && requestedAssetIds.size > 0},
);
// $FlowFixMe Added in Flow 0.121.0 upgrade in #4381 (Windows only)
dumpGraphToGraphViz(bundleGraph._graph, 'BundleGraph', bundleGraphEdgeTypes);
await report({
type: 'buildProgress',
phase: 'bundled',
bundleGraph: new IBundleGraph(
bundleGraph,
(bundle, bundleGraph, options) =>
NamedBundle.get(bundle, bundleGraph, options),
options,
),
changedAssets: new Map(
Array.from(changedAssets).map(([id, asset]) => [
id,
assetFromValue(asset, options),
]),
),
});
let writeBundlesRequest = createWriteBundlesRequest({
bundleGraph,
optionsRef,
});
let bundleInfo = await api.runRequest(writeBundlesRequest);
assertSignalNotAborted(signal);
return {bundleGraph, bundleInfo, changedAssets, assetRequests};
}