Skip to content

Commit 0623918

Browse files
committed
fixup! Refactor PackageJsonEditor.
1 parent 99585f3 commit 0623918

1 file changed

Lines changed: 60 additions & 53 deletions

File tree

libraries/rush-lib/src/api/PackageJsonEditor.ts

Lines changed: 60 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -97,82 +97,89 @@ export class PackageJsonEditor {
9797
this._sourceData = data;
9898
this._modified = false;
9999

100-
this._dependencies = new Map<string, PackageJsonDependency>();
101-
this._devDependencies = new Map<string, PackageJsonDependency>();
102-
this._resolutions = new Map<string, PackageJsonDependency>();
103-
this._dependenciesMeta = new Map<string, PackageJsonDependencyMeta>();
104-
105-
const dependencies: { [key: string]: string } = data.dependencies || {};
106-
const optionalDependencies: { [key: string]: string } = data.optionalDependencies || {};
107-
const peerDependencies: { [key: string]: string } = data.peerDependencies || {};
108-
109-
const devDependencies: { [key: string]: string } = data.devDependencies || {};
110-
const resolutions: { [key: string]: string } = data.resolutions || {};
111-
112-
const dependenciesMeta: { [key: string]: { [key: string]: boolean } } = data.dependenciesMeta || {};
100+
const {
101+
dependencies = {},
102+
optionalDependencies = {},
103+
peerDependencies = {},
104+
devDependencies = {},
105+
resolutions = {},
106+
dependenciesMeta = {}
107+
} = data;
113108

114109
const _onChange: () => void = this._onChange.bind(this);
115110

111+
const optionalDependenciesSet: Set<string> = new Set(Object.keys(optionalDependencies));
112+
const peerDependenciesSet: Set<string> = new Set(Object.keys(peerDependencies));
116113
try {
117-
Object.entries(dependencies || {}).forEach(([packageName, version]: [string, string]) => {
118-
if (Object.prototype.hasOwnProperty.call(optionalDependencies, packageName)) {
119-
throw new Error(
120-
`The package "${packageName}" cannot be listed in both ` +
121-
`"dependencies" and "optionalDependencies"`
122-
);
123-
}
124-
if (Object.prototype.hasOwnProperty.call(peerDependencies, packageName)) {
125-
throw new Error(
126-
`The package "${packageName}" cannot be listed in both "dependencies" and "peerDependencies"`
127-
);
128-
}
114+
const dependenciesMapEntries: [string, PackageJsonDependency][] = Object.entries(dependencies).map(
115+
([packageName, version]: [string, string]) => {
116+
if (optionalDependenciesSet.has(packageName)) {
117+
throw new Error(
118+
`The package "${packageName}" cannot be listed in both ` +
119+
`"dependencies" and "optionalDependencies"`
120+
);
121+
}
122+
if (peerDependenciesSet.has(packageName)) {
123+
throw new Error(
124+
`The package "${packageName}" cannot be listed in both "dependencies" and "peerDependencies"`
125+
);
126+
}
129127

130-
this._dependencies.set(
131-
packageName,
132-
new PackageJsonDependency(packageName, version, DependencyType.Regular, _onChange)
133-
);
134-
});
128+
return [
129+
packageName,
130+
new PackageJsonDependency(packageName, version, DependencyType.Regular, _onChange)
131+
];
132+
}
133+
);
135134

136-
Object.entries(optionalDependencies || {}).forEach(([packageName, version]: [string, string]) => {
137-
if (Object.prototype.hasOwnProperty.call(peerDependencies, packageName)) {
135+
const optionalDependenciesMapEntries: [string, PackageJsonDependency][] = Object.entries(
136+
optionalDependencies
137+
).map(([packageName, version]) => {
138+
if (peerDependenciesSet.has(packageName)) {
138139
throw new Error(
139140
`The package "${packageName}" cannot be listed in both ` +
140141
`"optionalDependencies" and "peerDependencies"`
141142
);
142143
}
143-
this._dependencies.set(
144+
return [
144145
packageName,
145146
new PackageJsonDependency(packageName, version, DependencyType.Optional, _onChange)
146-
);
147-
});
148-
149-
Object.entries(peerDependencies || {}).forEach(([packageName, version]: [string, string]) => {
150-
this._dependencies.set(
151-
packageName,
152-
new PackageJsonDependency(packageName, version, DependencyType.Peer, _onChange)
153-
);
147+
];
154148
});
155149

156-
Object.entries(devDependencies || {}).forEach(([packageName, version]: [string, string]) => {
157-
this._devDependencies.set(
150+
const peerDependenciesMapEntries: [string, PackageJsonDependency][] = Object.entries(
151+
peerDependencies
152+
).map(([packageName, version]) => [
153+
packageName,
154+
new PackageJsonDependency(packageName, version, DependencyType.Peer, _onChange)
155+
]);
156+
157+
this._dependencies = new Map([
158+
...dependenciesMapEntries,
159+
...optionalDependenciesMapEntries,
160+
...peerDependenciesMapEntries
161+
]);
162+
163+
this._devDependencies = new Map(
164+
Object.entries(devDependencies).map(([packageName, version]) => [
158165
packageName,
159166
new PackageJsonDependency(packageName, version, DependencyType.Dev, _onChange)
160-
);
161-
});
167+
])
168+
);
162169

163-
Object.entries(resolutions || {}).forEach(([packageName, version]: [string, string]) => {
164-
this._resolutions.set(
170+
this._resolutions = new Map(
171+
Object.entries(resolutions).map(([packageName, version]) => [
165172
packageName,
166173
new PackageJsonDependency(packageName, version, DependencyType.YarnResolutions, _onChange)
167-
);
168-
});
174+
])
175+
);
169176

170-
Object.entries(dependenciesMeta || {}).forEach(([packageName, { injected = false }]) => {
171-
this._dependenciesMeta.set(
177+
this._dependenciesMeta = new Map(
178+
Object.entries(dependenciesMeta).map(([packageName, { injected = false }]) => [
172179
packageName,
173180
new PackageJsonDependencyMeta(packageName, injected, _onChange)
174-
);
175-
});
181+
])
182+
);
176183

177184
// (Do not sort this._resolutions because order may be significant; the RFC is unclear about that.)
178185
Sort.sortMapKeys(this._dependencies);

0 commit comments

Comments
 (0)