@teambit/dependencies 1.0.106 → 1.0.108

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,387 @@
1
+ import { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';
2
+ import moment from 'moment';
3
+ import { ComponentID } from '@teambit/component-id';
4
+ import {
5
+ DependencyResolverAspect,
6
+ DependencyResolverMain,
7
+ KEY_NAME_BY_LIFECYCLE_TYPE,
8
+ } from '@teambit/dependency-resolver';
9
+ import WorkspaceAspect, { OutsideWorkspaceError, Workspace } from '@teambit/workspace';
10
+ import { cloneDeep, compact, set } from 'lodash';
11
+ import pMapSeries from 'p-map-series';
12
+ import ConsumerComponent from '@teambit/legacy/dist/consumer/component';
13
+ import ComponentLoader, { DependencyLoaderOpts } from '@teambit/legacy/dist/consumer/component/component-loader';
14
+ import DependencyGraph from '@teambit/legacy/dist/scope/graph/scope-graph';
15
+ import DevFilesAspect, { DevFilesMain } from '@teambit/dev-files';
16
+ import AspectLoaderAspect, { AspectLoaderMain } from '@teambit/aspect-loader';
17
+ import { DependenciesLoader } from './dependencies-loader/dependencies-loader';
18
+ import { DependenciesData, OverridesDependenciesData } from './dependencies-loader/dependencies-data';
19
+ import {
20
+ DependenciesBlameCmd,
21
+ DependenciesCmd,
22
+ DependenciesDebugCmd,
23
+ DependenciesEjectCmd,
24
+ DependenciesGetCmd,
25
+ DependenciesRemoveCmd,
26
+ DependenciesResetCmd,
27
+ DependenciesSetCmd,
28
+ DependenciesUnsetCmd,
29
+ DependenciesUsageCmd,
30
+ RemoveDependenciesFlags,
31
+ SetDependenciesFlags,
32
+ WhyCmd,
33
+ } from './dependencies-cmd';
34
+ import { DependenciesAspect } from './dependencies.aspect';
35
+ import { DebugDependencies } from './dependencies-loader/auto-detect-deps';
36
+
37
+ export type RemoveDependencyResult = { id: ComponentID; removedPackages: string[] };
38
+
39
+ export type DependenciesResultsDebug = DebugDependencies &
40
+ OverridesDependenciesData & { coreAspects: string[]; sources: { id: string; source: string }[] };
41
+
42
+ export type DependenciesResults = {
43
+ scopeGraph: DependencyGraph;
44
+ workspaceGraph: DependencyGraph;
45
+ id: ComponentID;
46
+ };
47
+
48
+ export type BlameResult = {
49
+ snap: string;
50
+ tag?: string;
51
+ author: string;
52
+ date: string;
53
+ message: string;
54
+ version: string;
55
+ };
56
+
57
+ export class DependenciesMain {
58
+ constructor(
59
+ private workspace: Workspace,
60
+ private dependencyResolver: DependencyResolverMain,
61
+ private devFiles: DevFilesMain,
62
+ private aspectLoader: AspectLoaderMain
63
+ ) {}
64
+
65
+ async setDependency(
66
+ componentPattern: string,
67
+ packages: string[],
68
+ options: SetDependenciesFlags
69
+ ): Promise<{ changedComps: string[]; addedPackages: Record<string, string> }> {
70
+ const compIds = await this.workspace.idsByPattern(componentPattern);
71
+ const getDepField = () => {
72
+ if (options.dev) return 'devDependencies';
73
+ if (options.peer) return 'peerDependencies';
74
+ return 'dependencies';
75
+ };
76
+ const packagesObj = {};
77
+ await Promise.all(
78
+ packages.map(async (pkg) => {
79
+ const [name, version] = await this.getPackageNameAndVerResolved(pkg);
80
+ if (options.optional) {
81
+ packagesObj[name] = { optional: true, version };
82
+ } else {
83
+ packagesObj[name] = version;
84
+ }
85
+ })
86
+ );
87
+ const config = {
88
+ policy: {
89
+ [getDepField()]: packagesObj,
90
+ },
91
+ };
92
+ await Promise.all(
93
+ compIds.map(async (compId) => {
94
+ await this.workspace.addSpecificComponentConfig(compId, DependencyResolverAspect.id, config, {
95
+ shouldMergeWithExisting: true,
96
+ shouldMergeWithPrevious: true,
97
+ });
98
+ })
99
+ );
100
+
101
+ await this.workspace.bitMap.write(`deps-set (${componentPattern})`);
102
+
103
+ return {
104
+ changedComps: compIds.map((compId) => compId.toStringWithoutVersion()),
105
+ addedPackages: packagesObj,
106
+ };
107
+ }
108
+
109
+ async removeDependency(
110
+ componentPattern: string,
111
+ packages: string[],
112
+ options: RemoveDependenciesFlags = {},
113
+ removeOnlyIfExists = false // unset
114
+ ): Promise<RemoveDependencyResult[]> {
115
+ const compIds = await this.workspace.idsByPattern(componentPattern);
116
+ const results = await pMapSeries(compIds, async (compId) => {
117
+ const component = await this.workspace.get(compId);
118
+ const depList = await this.dependencyResolver.getDependencies(component);
119
+ const getCurrentConfig = async () => {
120
+ const currentConfigFromWorkspace = await this.workspace.getSpecificComponentConfig(
121
+ compId,
122
+ DependencyResolverAspect.id
123
+ );
124
+ if (currentConfigFromWorkspace) return currentConfigFromWorkspace;
125
+ const extFromScope = await this.workspace.getExtensionsFromScopeAndSpecific(compId);
126
+ return extFromScope?.toConfigObject()[DependencyResolverAspect.id];
127
+ };
128
+ const currentDepResolverConfig = await getCurrentConfig();
129
+ const newDepResolverConfig = cloneDeep(currentDepResolverConfig || {});
130
+ const removedPackagesWithNulls = await pMapSeries(packages, async (pkg) => {
131
+ const [name, version] = this.splitPkgToNameAndVer(pkg);
132
+ const dependency = depList.findByPkgNameOrCompId(name, version);
133
+ if (!dependency) return null;
134
+ const depName = dependency.getPackageName?.() || dependency.id;
135
+ const getLifeCycle = () => {
136
+ if (options.dev) return 'dev';
137
+ if (options.peer) return 'peer';
138
+ return dependency.lifecycle;
139
+ };
140
+ const depField = KEY_NAME_BY_LIFECYCLE_TYPE[getLifeCycle()];
141
+ const existsInSpecificConfig = newDepResolverConfig.policy?.[depField]?.[depName];
142
+ if (existsInSpecificConfig) {
143
+ if (existsInSpecificConfig === '-') return null;
144
+ delete newDepResolverConfig.policy[depField][depName];
145
+ } else {
146
+ if (removeOnlyIfExists) return null;
147
+ set(newDepResolverConfig, ['policy', depField, depName], '-');
148
+ }
149
+ return `${depName}@${dependency.version}`;
150
+ });
151
+ const removedPackages = compact(removedPackagesWithNulls);
152
+ if (!removedPackages.length) return null;
153
+ await this.workspace.addSpecificComponentConfig(compId, DependencyResolverAspect.id, newDepResolverConfig);
154
+ return { id: compId, removedPackages };
155
+ });
156
+ await this.workspace.bitMap.write(`deps-remove (${componentPattern})`);
157
+
158
+ return compact(results);
159
+ }
160
+
161
+ async reset(componentPattern: string): Promise<ComponentID[]> {
162
+ const compIds = await this.workspace.idsByPattern(componentPattern);
163
+ await pMapSeries(compIds, async (compId) => {
164
+ await this.workspace.addSpecificComponentConfig(compId, DependencyResolverAspect.id, { policy: {} });
165
+ });
166
+ await this.workspace.bitMap.write(`deps-reset (${componentPattern})`);
167
+
168
+ return compIds;
169
+ }
170
+
171
+ async eject(componentPattern: string): Promise<ComponentID[]> {
172
+ const compIds = await this.workspace.idsByPattern(componentPattern);
173
+ await pMapSeries(compIds, async (compId) => {
174
+ await this.workspace.addSpecificComponentConfig(
175
+ compId,
176
+ DependencyResolverAspect.id,
177
+ {},
178
+ {
179
+ shouldMergeWithExisting: true,
180
+ shouldMergeWithPrevious: true,
181
+ }
182
+ );
183
+ });
184
+ await this.workspace.bitMap.write(`deps-eject (${componentPattern})`);
185
+
186
+ return compIds;
187
+ }
188
+
189
+ async getDependencies(id: string): Promise<DependenciesResults> {
190
+ // @todo: supports this on bare-scope.
191
+ if (!this.workspace) throw new OutsideWorkspaceError();
192
+ const compId = await this.workspace.resolveComponentId(id);
193
+ const consumer = this.workspace.consumer;
194
+ const scopeGraph = await DependencyGraph.buildGraphFromScope(consumer.scope);
195
+ const scopeDependencyGraph = new DependencyGraph(scopeGraph);
196
+
197
+ const workspaceGraph = await DependencyGraph.buildGraphFromWorkspace(consumer, true);
198
+ const workspaceDependencyGraph = new DependencyGraph(workspaceGraph);
199
+
200
+ return { scopeGraph: scopeDependencyGraph, workspaceGraph: workspaceDependencyGraph, id: compId };
201
+ }
202
+
203
+ async loadDependencies(component: ConsumerComponent, opts: DependencyLoaderOpts) {
204
+ const dependenciesLoader = new DependenciesLoader(
205
+ component,
206
+ this.dependencyResolver,
207
+ this.devFiles,
208
+ this.aspectLoader
209
+ );
210
+ return dependenciesLoader.load(this.workspace, opts);
211
+ }
212
+
213
+ /**
214
+ * load dependencies without the need for the workspace.
215
+ * the "auto-detect" are passed here as "dependenciesData". the "overrides", such as dependencies from the env,
216
+ * are calculated here.
217
+ * eventually all these dependencies are added to the ConsumerComponent object.
218
+ */
219
+ async loadDependenciesFromScope(component: ConsumerComponent, dependenciesData: Partial<DependenciesData>) {
220
+ const dependenciesLoader = new DependenciesLoader(
221
+ component,
222
+ this.dependencyResolver,
223
+ this.devFiles,
224
+ this.aspectLoader
225
+ );
226
+ return dependenciesLoader.loadFromScope(dependenciesData);
227
+ }
228
+
229
+ async debugDependencies(id: string): Promise<DependenciesResultsDebug> {
230
+ // @todo: supports this on bare-scope.
231
+ if (!this.workspace) throw new OutsideWorkspaceError();
232
+ const compId = await this.workspace.resolveComponentId(id);
233
+ const component = await this.workspace.get(compId);
234
+ const consumerComponent = component.state._consumer as ConsumerComponent;
235
+
236
+ const dependenciesData = await this.loadDependencies(consumerComponent, {
237
+ cacheResolvedDependencies: {},
238
+ useDependenciesCache: false,
239
+ });
240
+
241
+ const { missingPackageDependencies, manuallyAddedDependencies, manuallyRemovedDependencies } =
242
+ dependenciesData.overridesDependencies;
243
+
244
+ const results = await this.dependencyResolver.getDependencies(component);
245
+ const sources = results.map((dep) => ({ id: dep.id, source: dep.source }));
246
+
247
+ return {
248
+ ...dependenciesData.debugDependenciesData,
249
+ manuallyRemovedDependencies,
250
+ manuallyAddedDependencies,
251
+ missingPackageDependencies,
252
+ coreAspects: dependenciesData.dependenciesData.coreAspects,
253
+ sources,
254
+ };
255
+ }
256
+
257
+ /**
258
+ * helps determine what snap/tag changed a specific dependency.
259
+ * the results are sorted from the oldest to newest.
260
+ */
261
+ async blame(compName: string, depName: string) {
262
+ const id = await this.workspace.resolveComponentId(compName);
263
+ const log = await this.workspace.scope.getLogs(id);
264
+ const blameResults: BlameResult[] = [];
265
+ let lastVersion = '';
266
+ await pMapSeries(log, async (logItem) => {
267
+ const component = await this.workspace.get(id.changeVersion(logItem.tag || logItem.hash));
268
+ const depList = await this.dependencyResolver.getDependencies(component);
269
+ const dependency = depList.findByPkgNameOrCompId(depName);
270
+ if (dependency && dependency.version === lastVersion) {
271
+ return;
272
+ }
273
+ let version: string;
274
+ if (!dependency) {
275
+ if (!lastVersion) return;
276
+ version = '<REMOVED>';
277
+ } else {
278
+ version = dependency.version;
279
+ }
280
+ if (!dependency || dependency.version === lastVersion) return;
281
+ lastVersion = dependency.version;
282
+ blameResults.push({
283
+ snap: logItem.hash,
284
+ tag: logItem.tag,
285
+ author: logItem.username || '<N/A>',
286
+ date: logItem.date ? moment(new Date(parseInt(logItem.date))).format('YYYY-MM-DD HH:mm:ss') : '<N/A>',
287
+ message: logItem.message,
288
+ version,
289
+ });
290
+ });
291
+ return blameResults;
292
+ }
293
+
294
+ async usageDeep(depName: string, opts?: { depth?: number }): Promise<string | undefined> {
295
+ if (!isComponentId(depName)) {
296
+ return this.dependencyResolver.getPackageManager()?.findUsages?.(depName, {
297
+ lockfileDir: this.workspace.path,
298
+ depth: opts?.depth,
299
+ });
300
+ }
301
+ return undefined;
302
+ }
303
+
304
+ /**
305
+ * @param depName either component-id-string or package-name (of the component or not component)
306
+ * @returns a map of component-id-string to the version of the dependency
307
+ */
308
+ async usage(depName: string): Promise<{ [compIdStr: string]: string }> {
309
+ const [name, version] = this.splitPkgToNameAndVer(depName);
310
+ const allComps = await this.workspace.list();
311
+ const results = {};
312
+ await Promise.all(
313
+ allComps.map(async (comp) => {
314
+ const depList = await this.dependencyResolver.getDependencies(comp);
315
+ const dependency = depList.findByPkgNameOrCompId(name, version);
316
+ if (dependency) {
317
+ results[comp.id.toString()] = dependency.version;
318
+ }
319
+ })
320
+ );
321
+ return results;
322
+ }
323
+
324
+ private async getPackageNameAndVerResolved(pkg: string): Promise<[string, string]> {
325
+ const resolveLatest = async (pkgName: string) => {
326
+ const versionResolver = await this.dependencyResolver.getVersionResolver({});
327
+ const resolved = await versionResolver.resolveRemoteVersion(pkgName, { rootDir: '' });
328
+ if (!resolved.version) throw new Error(`unable to resolve version for ${pkgName}`);
329
+ return resolved.version;
330
+ };
331
+ const [name, version] = this.splitPkgToNameAndVer(pkg);
332
+ const versionResolved = !version || version === 'latest' ? await resolveLatest(name) : version;
333
+ return [name, versionResolved];
334
+ }
335
+
336
+ private splitPkgToNameAndVer(pkg: string): [string, string | undefined] {
337
+ const packageSplit = pkg.split('@');
338
+ if (pkg.startsWith('@')) {
339
+ // scoped package
340
+ if (packageSplit.length > 3) throw new Error(`invalid package "${pkg}" syntax, expected "package[@version]"`);
341
+ return [`@${packageSplit[1]}`, packageSplit[2]];
342
+ }
343
+ if (packageSplit.length > 2) throw new Error(`invalid package "${pkg}" syntax, expected "package[@version]"`);
344
+ return [packageSplit[0], packageSplit[1]];
345
+ }
346
+
347
+ static slots = [];
348
+ static dependencies = [CLIAspect, WorkspaceAspect, DependencyResolverAspect, DevFilesAspect, AspectLoaderAspect];
349
+
350
+ static runtime = MainRuntime;
351
+
352
+ static async provider([cli, workspace, depsResolver, devFiles, aspectLoader]: [
353
+ CLIMain,
354
+ Workspace,
355
+ DependencyResolverMain,
356
+ DevFilesMain,
357
+ AspectLoaderMain
358
+ ]) {
359
+ const depsMain = new DependenciesMain(workspace, depsResolver, devFiles, aspectLoader);
360
+ const depsCmd = new DependenciesCmd();
361
+ depsCmd.commands = [
362
+ new DependenciesGetCmd(depsMain),
363
+ new DependenciesRemoveCmd(depsMain),
364
+ new DependenciesUnsetCmd(depsMain),
365
+ new DependenciesDebugCmd(depsMain),
366
+ new DependenciesSetCmd(depsMain),
367
+ new DependenciesResetCmd(depsMain),
368
+ new DependenciesEjectCmd(depsMain),
369
+ new DependenciesBlameCmd(depsMain),
370
+ new DependenciesUsageCmd(depsMain),
371
+ ];
372
+ const whyCmd = new WhyCmd(depsMain);
373
+ cli.register(depsCmd, whyCmd);
374
+
375
+ ComponentLoader.loadDeps = depsMain.loadDependencies.bind(depsMain);
376
+
377
+ return depsMain;
378
+ }
379
+ }
380
+
381
+ function isComponentId(depName: string) {
382
+ return depName.includes('/') && depName[0] !== '@';
383
+ }
384
+
385
+ DependenciesAspect.addRuntime(DependenciesMain);
386
+
387
+ export default DependenciesMain;
@@ -1,14 +1,14 @@
1
1
  import { Command, CommandOptions } from '@teambit/cli';
2
2
  import { DependenciesMain } from './dependencies.main.runtime';
3
- declare type GetDependenciesFlags = {
3
+ type GetDependenciesFlags = {
4
4
  tree: boolean;
5
5
  };
6
- export declare type SetDependenciesFlags = {
6
+ export type SetDependenciesFlags = {
7
7
  dev?: boolean;
8
8
  optional?: boolean;
9
9
  peer?: boolean;
10
10
  };
11
- export declare type RemoveDependenciesFlags = SetDependenciesFlags;
11
+ export type RemoveDependenciesFlags = SetDependenciesFlags;
12
12
  export declare class DependenciesGetCmd implements Command {
13
13
  private deps;
14
14
  name: string;
@@ -121,7 +121,7 @@ export declare class DependenciesBlameCmd implements Command {
121
121
  constructor(deps: DependenciesMain);
122
122
  report([compName, depName]: [string, string]): Promise<string>;
123
123
  }
124
- declare type DependenciesUsageCmdOptions = {
124
+ type DependenciesUsageCmdOptions = {
125
125
  depth?: number;
126
126
  };
127
127
  export declare class DependenciesUsageCmd implements Command {
@@ -145,7 +145,7 @@ export declare class DependenciesCmd implements Command {
145
145
  name: string;
146
146
  alias: string;
147
147
  description: string;
148
- options: never[];
148
+ options: any[];
149
149
  group: string;
150
150
  commands: Command[];
151
151
  helpUrl: string;
@@ -8,11 +8,11 @@ import Consumer from '@teambit/legacy/dist/consumer/consumer';
8
8
  import OverridesDependencies from './overrides-dependencies';
9
9
  import { DependenciesData } from './dependencies-data';
10
10
  import { DebugDependencies } from './auto-detect-deps';
11
- export declare type AllDependencies = {
11
+ export type AllDependencies = {
12
12
  dependencies: Dependency[];
13
13
  devDependencies: Dependency[];
14
14
  };
15
- export declare type AllPackagesDependencies = {
15
+ export type AllPackagesDependencies = {
16
16
  packageDependencies: Record<string, string>;
17
17
  devPackageDependencies: Record<string, string>;
18
18
  peerPackageDependencies: Record<string, string>;
@@ -36,7 +36,7 @@ export declare class ApplyOverrides {
36
36
  overridesDependencies: OverridesDependencies;
37
37
  debugDependenciesData: DebugDependencies;
38
38
  autoDetectOverrides: Record<string, any> | undefined;
39
- constructor(component: Component, depsResolver: DependencyResolverMain, workspace?: Workspace | undefined);
39
+ constructor(component: Component, depsResolver: DependencyResolverMain, workspace?: Workspace);
40
40
  get consumer(): Consumer | undefined;
41
41
  getDependenciesData(): Promise<{
42
42
  dependenciesData: DependenciesData;
@@ -131,8 +131,7 @@ class ApplyOverrides {
131
131
  };
132
132
  }
133
133
  get consumer() {
134
- var _this$workspace;
135
- return (_this$workspace = this.workspace) === null || _this$workspace === void 0 ? void 0 : _this$workspace.consumer;
134
+ return this.workspace?.consumer;
136
135
  }
137
136
  async getDependenciesData() {
138
137
  await this.populateDependencies();
@@ -204,8 +203,7 @@ class ApplyOverrides {
204
203
  if (!missingIssue.data.length) this.issues.delete(_componentIssues().IssuesClasses.MissingPackagesDependenciesOnFs);
205
204
  }
206
205
  async loadAutoDetectOverrides() {
207
- var _this$workspace2;
208
- this.autoDetectOverrides = await ((_this$workspace2 = this.workspace) === null || _this$workspace2 === void 0 ? void 0 : _this$workspace2.getAutoDetectOverrides(this.component.extensions, this.component.id, this.component.files));
206
+ this.autoDetectOverrides = await this.workspace?.getAutoDetectOverrides(this.component.extensions, this.component.id, this.component.files);
209
207
  }
210
208
  cloneAllPackagesDependencies() {
211
209
  this.originAllPackagesDependencies = (0, _lodash().cloneDeep)(this.allPackagesDependencies);
@@ -235,8 +233,8 @@ class ApplyOverrides {
235
233
  if (field === 'peerDependencies') return undefined;
236
234
  const packageData = this._resolvePackageData(dependency);
237
235
  return {
238
- componentId: packageData === null || packageData === void 0 ? void 0 : packageData.componentId,
239
- packageName: packageData === null || packageData === void 0 ? void 0 : packageData.name
236
+ componentId: packageData?.componentId,
237
+ packageName: packageData?.name
240
238
  };
241
239
  }
242
240
  getDependenciesToAddManually(packageJson, existingDependencies) {
@@ -249,7 +247,7 @@ class ApplyOverrides {
249
247
  Object.keys(overrides[depField]).forEach(dependency => {
250
248
  const dependencyValue = overrides[depField][dependency];
251
249
  const componentData = this._getComponentIdToAdd(depField, dependency);
252
- if (componentData !== null && componentData !== void 0 && componentData.componentId) {
250
+ if (componentData?.componentId) {
253
251
  const dependencyExist = existingDependencies[depField].find(d => d.id.isEqualWithoutVersion(componentData.componentId));
254
252
  if (!dependencyExist) {
255
253
  this.overridesDependencies._addManuallyAddedDep(depField, componentData.componentId.toString());
@@ -353,8 +351,7 @@ class ApplyOverrides {
353
351
  delete this.allPackagesDependencies[field][pkgName];
354
352
  peerDeps[pkgName] = peerVersionFromPkgJson;
355
353
  } else if (regularVersionFromPkgJson) {
356
- var _this$allPackagesDepe;
357
- (_this$allPackagesDepe = this.allPackagesDependencies.peerPackageDependencies) === null || _this$allPackagesDepe === void 0 || delete _this$allPackagesDepe[pkgName];
354
+ delete this.allPackagesDependencies.peerPackageDependencies?.[pkgName];
358
355
  this.allPackagesDependencies[field][pkgName] = regularVersionFromPkgJson;
359
356
  }
360
357
  }, this.allPackagesDependencies[field]);
@@ -377,8 +374,7 @@ class ApplyOverrides {
377
374
  delete this.allPackagesDependencies[field][pkgName];
378
375
  peerDeps[pkgName] = peerVersionFromWsPolicy;
379
376
  } else if (regularVersionFromWsPolicy) {
380
- var _this$allPackagesDepe2;
381
- (_this$allPackagesDepe2 = this.allPackagesDependencies.peerPackageDependencies) === null || _this$allPackagesDepe2 === void 0 || delete _this$allPackagesDepe2[pkgName];
377
+ delete this.allPackagesDependencies.peerPackageDependencies?.[pkgName];
382
378
  this.allPackagesDependencies[field][pkgName] = regularVersionFromWsPolicy;
383
379
  }
384
380
  }, this.allPackagesDependencies[field]);
@@ -405,7 +401,6 @@ class ApplyOverrides {
405
401
  }
406
402
  }
407
403
  async applyAutoDetectOverridesOnComponent() {
408
- var _this$issues$getIssue;
409
404
  const autoDetectOverrides = this.autoDetectOverrides;
410
405
  if (!autoDetectOverrides || !Object.keys(autoDetectOverrides).length) {
411
406
  return;
@@ -413,7 +408,7 @@ class ApplyOverrides {
413
408
  const originallyExists = [];
414
409
  let missingPackages = [];
415
410
  // We want to also add missing packages to the peer list as we know to resolve the version from the env anyway
416
- const missingData = (_this$issues$getIssue = this.issues.getIssueByName('MissingPackagesDependenciesOnFs')) === null || _this$issues$getIssue === void 0 ? void 0 : _this$issues$getIssue.data;
411
+ const missingData = this.issues.getIssueByName('MissingPackagesDependenciesOnFs')?.data;
417
412
  if (missingData) {
418
413
  missingPackages = (0, _lodash().uniq)(missingData.map(d => d.missingPackages).flat());
419
414
  }
@@ -506,8 +501,7 @@ class ApplyOverrides {
506
501
  * when it's authored.
507
502
  */
508
503
  _getPackageJson() {
509
- var _this$consumer;
510
- return (_this$consumer = this.consumer) === null || _this$consumer === void 0 ? void 0 : _this$consumer.packageJson.packageJsonObject;
504
+ return this.consumer?.packageJson.packageJsonObject;
511
505
  }
512
506
  _getPackageJsonFromComponentModel() {
513
507
  if (this.componentFromModel && this.component.componentMap) {