UNPKG

1.52 kBJavaScriptView Raw
1// @flow
2import type {
3 SourceLocation,
4 Meta,
5 ModuleSpecifier,
6 Symbol,
7} from '@parcel/types';
8import {md5FromObject} from '@parcel/utils';
9import type {Dependency, Environment, Target} from './types';
10import {getEnvironmentHash} from './Environment';
11
12type DependencyOpts = {|
13 id?: string,
14 sourcePath?: string,
15 sourceAssetId?: string,
16 moduleSpecifier: ModuleSpecifier,
17 isAsync?: boolean,
18 isEntry?: boolean,
19 isOptional?: boolean,
20 isURL?: boolean,
21 isWeak?: ?boolean,
22 loc?: SourceLocation,
23 env: Environment,
24 meta?: Meta,
25 target?: Target,
26 symbols?: Map<Symbol, Symbol>,
27 pipeline?: ?string,
28|};
29
30export function createDependency(opts: DependencyOpts): Dependency {
31 let id =
32 opts.id ||
33 md5FromObject({
34 sourceAssetId: opts.sourceAssetId,
35 moduleSpecifier: opts.moduleSpecifier,
36 env: getEnvironmentHash(opts.env),
37 target: opts.target,
38 pipeline: opts.pipeline,
39 });
40
41 return {
42 ...opts,
43 id,
44 isAsync: opts.isAsync ?? false,
45 isEntry: opts.isEntry ?? false,
46 isOptional: opts.isOptional ?? false,
47 isURL: opts.isURL ?? false,
48 isDeferred: false,
49 meta: opts.meta || {},
50 symbols: opts.symbols || new Map(),
51 };
52}
53
54export function mergeDependencies(a: Dependency, b: Dependency): void {
55 let {meta, symbols, isWeak, ...other} = b;
56 Object.assign(a, other);
57 Object.assign(a.meta, meta);
58 a.isWeak = a.isWeak === isWeak ? a.isWeak : a.isWeak ?? isWeak;
59 for (let [k, v] of symbols) {
60 a.symbols.set(k, v);
61 }
62}