Skip to content

Commit

Permalink
feat: filter deps by target framework
Browse files Browse the repository at this point in the history
When target framework option is provided, resulting depTree should contain only dependencies with particular target framework entry
  • Loading branch information
Mila Votradovec committed Jan 4, 2019
1 parent b8f45f2 commit 9d4ece5
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 6 deletions.
9 changes: 5 additions & 4 deletions lib/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,10 @@ function buildDepTreeFromProjectJson(manifestFileContents: string, includeDev =

async function buildDepTreeFromPackagesConfig(
manifestFileContents: string,
includeDev = false): Promise<PkgTree> {
includeDev = false,
targetFramework?: string): Promise<PkgTree> {
const manifestFile: any = await parseManifestFile(manifestFileContents);
return getDependencyTreeFromPackagesConfig(manifestFile, includeDev);
return getDependencyTreeFromPackagesConfig(manifestFile, includeDev, targetFramework);
}

async function buildDepTreeFromProjectFile(
Expand All @@ -48,7 +49,7 @@ async function buildDepTreeFromProjectFile(
}

function buildDepTreeFromFiles(
root: string, manifestFilePath: string, includeDev = false) {
root: string, manifestFilePath: string, includeDev = false, targetFramework?: string) {
if (!root || !manifestFilePath) {
throw new Error('Missing required parameters for buildDepTreeFromFiles()');
}
Expand All @@ -66,7 +67,7 @@ function buildDepTreeFromFiles(
if (_.includes(PROJ_FILE_EXTENSIONS, manifestFileExtension)) {
return buildDepTreeFromProjectFile(manifestFileContents, includeDev);
} else if (_.endsWith(manifestFilePath, 'packages.config')) {
return buildDepTreeFromPackagesConfig(manifestFileContents, includeDev);
return buildDepTreeFromPackagesConfig(manifestFileContents, includeDev, targetFramework);
} else if (_.endsWith(manifestFilePath, 'project.json')) {
return buildDepTreeFromProjectJson(manifestFileContents, includeDev);
} else {
Expand Down
6 changes: 4 additions & 2 deletions lib/parsers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,8 @@ function buildSubTreeFromProjectJson(name, version, isDev: boolean): PkgTree {
return depSubTree;
}

export async function getDependencyTreeFromPackagesConfig(manifestFile, includeDev: boolean = false) {
export async function getDependencyTreeFromPackagesConfig(
manifestFile, includeDev: boolean = false, targetFramework?: string) {
const depTree: PkgTree = {
dependencies: {},
hasDevDependencies: false,
Expand All @@ -96,7 +97,8 @@ export async function getDependencyTreeFromPackagesConfig(manifestFile, includeD
const depName = dep.$.id;
const isDev = !!dep.$.developmentDependency;
depTree.hasDevDependencies = depTree.hasDevDependencies || isDev;
if (isDev && !includeDev) {
if ((isDev && !includeDev) ||
(targetFramework && dep.$.targetFramework && dep.$.targetFramework !== targetFramework)) {
continue;
}
depTree.dependencies[depName] = buildSubTreeFromPackagesConfig(dep, isDev);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"dependencies": {
"jQuery": {
"depType": "prod",
"dependencies": {},
"name": "jQuery",
"version": "3.1.1"
},
"NLog": {
"depType": "prod",
"dependencies": {},
"name": "NLog",
"version": "4.3.10"
}
},
"hasDevDependencies": false,
"name": "",
"version": ""
}
11 changes: 11 additions & 0 deletions test/lib/dependencies.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,17 @@ test('.Net dotnet-simple-project-with-devDeps tree generated as expected', async
t.deepEqual(tree, expectedTree, 'trees are equal');
});

test('.Net packages.config with multiple target frameworks is limited to selected framework', async (t) => {
const includeDev = false;
const tree = await buildDepTreeFromFiles(
`${__dirname}/../fixtures/dotnet-multiple-target-frameworks`,
'packages.config',
includeDev,
'net46');
const expectedTree = load('dotnet-multiple-target-frameworks/expected-tree-net46.json');
t.deepEqual(tree, expectedTree, 'trees are equal');
});

/*
****** csproj ******
*/
Expand Down

0 comments on commit 9d4ece5

Please sign in to comment.