Skip to content

Commit

Permalink
feat: add paket support to plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
orsagie committed Feb 14, 2019
1 parent c2bf780 commit 36a812b
Show file tree
Hide file tree
Showing 6 changed files with 115 additions and 34 deletions.
43 changes: 21 additions & 22 deletions lib/dotnet-parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ var debug = require('debug')('snyk');
var projectJsonFormatParser = require('./formats/dotnet-core-parser');
var determineDotnetVersions = require('./proj-parser');

function injectProjectData(packageTree, projectData) {
packageTree.package.name = projectData.project.name;
packageTree.package.version = projectData.project.version;
function injectProjectData(tree, projectData) {
tree.name = projectData.project.name;
tree.version = projectData.project.version;
}

function injectPath(dep, packagesFolder) {
Expand All @@ -23,17 +23,23 @@ function injectPath(dep, packagesFolder) {
}
}

function getPackagesFolder(options, projectRootFolder) {
if (options && options.packagesFolder) {
return path.resolve(process.cwd(), options.packagesFolder);
function getPackagesFolder(packagesFolder, projectRootFolder) {
if (packagesFolder) {
return path.resolve(process.cwd(), packagesFolder);
}
return path.resolve(projectRootFolder, 'packages');
}

module.exports = {
parse: function (root, options, targetFile, fileContentPath, fileContent, manifestType) {
parse: function (root, targetFile, packagesFolder, fileContentPath, manifestType) {
var fileContent;
try {
fileContent = fs.readFileSync(fileContentPath).toString();
} catch (error) {
return Promise.reject(error);
}
var projectRootFolder = path.resolve(fileContentPath, '../../');
var packagesFolder = getPackagesFolder(options, projectRootFolder);
var packagesFolder = getPackagesFolder(packagesFolder, projectRootFolder);
var dotnetVersions;

try {
Expand All @@ -53,19 +59,12 @@ module.exports = {
var flattendPackageList = {};
var nuspecResolutions = {};

var packageTree = {
package: {
name: path.basename(root || projectRootFolder),
version: '0.0.0',
packageFormatVersion: 'nuget:0.0.0',
dependencies: {},
},
plugin: {
name: 'snyk-nuget-plugin',
targetFile: targetFile,
},
var tree = {
name: path.basename(root || projectRootFolder),
version: '0.0.0',
packageFormatVersion: 'nuget:0.0.0',
dependencies: {},
};
var tree = packageTree.package;

return new Promise(function parseFileContents(resolve, reject) {
var installedPackages = [];
Expand All @@ -90,7 +89,7 @@ module.exports = {
}
}
if (projectData.project) {
injectProjectData(packageTree, projectData);
injectProjectData(tree, projectData);
}
resolve(installedPackages);
break;
Expand Down Expand Up @@ -221,7 +220,7 @@ module.exports = {
tree.dependencies[node.name] = node;
}
}
return packageTree;
return tree;
})['catch'](function (err) {
throw (err);
});
Expand Down
39 changes: 28 additions & 11 deletions lib/index.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
var fs = require('fs');
var path = require('path');
var debug = require('debug')('snyk');
const dotnetParser = require('./dotnet-parser');
var dotnetParser = require('./dotnet-parser');
var paketParser = require('snyk-paket-parser');

function determineManifestType(filename) {
switch (true) {
Expand All @@ -23,25 +22,43 @@ function determineManifestType(filename) {
}
}


module.exports = {
inspect: function (root, targetFile, options) {
options = options || {};
var fileContentPath = path.resolve(root || '.', targetFile || '.');
var manifestType;
try {
manifestType = determineManifestType(path.basename(targetFile || root));
} catch (error) {
return Promise.reject(error);
}
var fileContent;
try {
fileContent = fs.readFileSync(fileContentPath).toString();
} catch (error) {
return Promise.reject(error);

var createPackageTree = function (depTree) {
return {
package: depTree,
plugin: {
name: 'snyk-nuget-plugin',
targetFile: targetFile,
},
};
};

if (manifestType === 'paket') {
return paketParser.buildDepTreeFromFiles(
root,
targetFile,
options['lock-file-path'] || 'paket.lock',
options['include-dev'],
options.strict
).then(createPackageTree);
}

return dotnetParser.parse(root, options, targetFile, fileContentPath, fileContent, manifestType);
return dotnetParser.parse(
root,
targetFile,
options.packagesFolder,
fileContentPath,
manifestType).then(createPackageTree);

},
};

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
"debug": "^3.1.0",
"jszip": "^3.1.5",
"lodash": "^4.17.10",
"snyk-paket-parser": "^1.2.0",
"snyk-paket-parser": "1.4.0",
"xml2js": "^0.4.17"
},
"devDependencies": {
Expand Down
50 changes: 50 additions & 0 deletions test/paket.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
var test = require('tap').test;
var plugin = require('../lib/index');
var path = require('path');

var simplePaket = './test/stubs/simple-paket/';

var simplePaketDeps = {
'FSharp.Formatting': {
depType: 'prod',
dependencies: {
'FSharp.Compiler.Service': {
depType: 'prod',
dependencies: {},
name: 'FSharp.Compiler.Service',
version: '2.0.0.6',
},
'FSharpVSPowerTools.Core': {
depType: 'prod',
dependencies: {
'FSharp.Compiler.Service': {
depType: 'prod',
dependencies: {},
name: 'FSharp.Compiler.Service',
version: '2.0.0.6',
},
},
name: 'FSharpVSPowerTools.Core',
version: '2.3',
},
},
name: 'FSharp.Formatting',
version: '2.14.4',
},
FAKE: {
depType: 'prod',
dependencies: {},
name: 'FAKE',
version: '5.8.4',
},
};


test('parse simple-paket project', function (t) {
plugin.inspect(simplePaket, 'paket.dependencies')
.then(function (tree) {
t.deepEquals(tree.package.dependencies, simplePaketDeps, 'expected dependencies');
t.equals(tree.package.name, path.resolve(simplePaket, 'paket.dependencies'), 'correct name');
t.end();
});
});
5 changes: 5 additions & 0 deletions test/stubs/simple-paket/paket.dependencies
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
redirects: on
source https://nuget.org/api/v2

nuget FSharp.Formatting
nuget FAKE
10 changes: 10 additions & 0 deletions test/stubs/simple-paket/paket.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
REDIRECTS: ON
NUGET
remote: https://www.nuget.org/api/v2
FAKE (5.8.4)
FSharp.Compiler.Service (2.0.0.6)
FSharp.Formatting (2.14.4)
FSharp.Compiler.Service (2.0.0.6)
FSharpVSPowerTools.Core (>= 2.3 < 2.4)
FSharpVSPowerTools.Core (2.3)
FSharp.Compiler.Service (>= 2.0.0.3)

0 comments on commit 36a812b

Please sign in to comment.