@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.
- package/dependencies-cmd.ts +335 -0
- package/dependencies.aspect.ts +5 -0
- package/dependencies.main.runtime.ts +387 -0
- package/dist/dependencies-cmd.d.ts +5 -5
- package/dist/dependencies-loader/apply-overrides.d.ts +3 -3
- package/dist/dependencies-loader/apply-overrides.js +9 -15
- package/dist/dependencies-loader/apply-overrides.js.map +1 -1
- package/dist/dependencies-loader/auto-detect-deps.d.ts +4 -4
- package/dist/dependencies-loader/auto-detect-deps.js +8 -12
- package/dist/dependencies-loader/auto-detect-deps.js.map +1 -1
- package/dist/dependencies-loader/dependencies-data.d.ts +1 -1
- package/dist/dependencies-loader/dependencies-loader.js +1 -2
- package/dist/dependencies-loader/dependencies-loader.js.map +1 -1
- package/dist/dependencies-loader/dependencies-versions-resolver.js +6 -10
- package/dist/dependencies-loader/dependencies-versions-resolver.js.map +1 -1
- package/dist/dependencies-loader/overrides-dependencies.js +1 -2
- package/dist/dependencies-loader/overrides-dependencies.js.map +1 -1
- package/dist/dependencies.main.runtime.d.ts +5 -5
- package/dist/dependencies.main.runtime.js +5 -7
- package/dist/dependencies.main.runtime.js.map +1 -1
- package/index.ts +5 -0
- package/package.json +15 -24
- package/tsconfig.json +16 -21
- package/types/asset.d.ts +15 -3
- /package/dist/{preview-1703505948637.js → preview-1703647408454.js} +0 -0
|
@@ -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
|
-
|
|
3
|
+
type GetDependenciesFlags = {
|
|
4
4
|
tree: boolean;
|
|
5
5
|
};
|
|
6
|
-
export
|
|
6
|
+
export type SetDependenciesFlags = {
|
|
7
7
|
dev?: boolean;
|
|
8
8
|
optional?: boolean;
|
|
9
9
|
peer?: boolean;
|
|
10
10
|
};
|
|
11
|
-
export
|
|
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
|
-
|
|
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:
|
|
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
|
|
11
|
+
export type AllDependencies = {
|
|
12
12
|
dependencies: Dependency[];
|
|
13
13
|
devDependencies: Dependency[];
|
|
14
14
|
};
|
|
15
|
-
export
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
239
|
-
packageName: packageData
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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) {
|