Skip to content

Commit 7d61b4f

Browse files
author
Maël Nison
committed
Implements the new peerDependenciesMeta field
1 parent bf63d74 commit 7d61b4f

3 files changed

Lines changed: 32 additions & 3 deletions

File tree

__tests__/fixtures/install/missing-opt-peer-dep/foo/package.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22
"name": "foo",
33
"version": "1.0.0",
44
"peerDependencies": {
5-
"bar": "optional:*"
5+
"bar": "*"
6+
},
7+
"peerDependenciesMeta": {
8+
"bar": {
9+
"optional": true
10+
}
611
}
712
}

src/package-linker.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -595,11 +595,15 @@ export default class PackageLinker {
595595
resolvePeerModules() {
596596
for (const pkg of this.resolver.getManifests()) {
597597
const peerDeps = pkg.peerDependencies;
598+
const peerDepsMeta = pkg.peerDependenciesMeta;
599+
598600
if (!peerDeps) {
599601
continue;
600602
}
603+
601604
const ref = pkg._reference;
602605
invariant(ref, 'Package reference is missing');
606+
603607
// TODO: We are taking the "shortest" ref tree but there may be multiple ref trees with the same length
604608
const refTree = ref.requests.map(req => req.parentNames).sort((arr1, arr2) => arr1.length - arr2.length)[0];
605609

@@ -617,8 +621,10 @@ export default class PackageLinker {
617621
};
618622

619623
for (const peerDepName in peerDeps) {
620-
const range = peerDeps[peerDepName].replace(/^optional:/, '');
621-
const isOptional = peerDeps[peerDepName].startsWith('optional:');
624+
const range = peerDeps[peerDepName];
625+
const meta = peerDepsMeta && peerDepsMeta[peerDepName];
626+
627+
const isOptional = meta && meta.optional ? true : false;
622628

623629
const peerPkgs = this.resolver.getAllInfoForPackageName(peerDepName);
624630

src/types.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,21 @@ export type CLIFunction = (config: Config, reporter: Reporter, flags: Object, ar
1313
type _CLIFunctionReturn = boolean;
1414
export type CLIFunctionReturn = ?_CLIFunctionReturn | Promise<?_CLIFunctionReturn>;
1515

16+
export type DependencyMeta = {
17+
};
18+
19+
export type DependenciesMeta = {
20+
[name: string]: DependencyMeta,
21+
};
22+
23+
export type PeerDependencyMeta = {
24+
optional?: boolean,
25+
};
26+
27+
export type PeerDependenciesMeta = {
28+
[name: string]: DependencyMeta,
29+
};
30+
1631
// dependency request pattern data structure that's used to request dependencies from a
1732
// PackageResolver
1833
export type DependencyRequestPattern = {
@@ -132,6 +147,9 @@ export type Manifest = {
132147
peerDependencies?: Dependencies,
133148
optionalDependencies?: Dependencies,
134149

150+
dependenciesMeta?: DependenciesMeta,
151+
peerDependenciesMeta?: PeerDependenciesMeta,
152+
135153
bundleDependencies?: Array<string>,
136154
bundledDependencies?: Array<string>,
137155

0 commit comments

Comments
 (0)