license-cop 1.6.0 → 1.6.2
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/package.json
CHANGED
|
@@ -15,10 +15,10 @@ const _joinstringarray = require("../utils/join-string-array");
|
|
|
15
15
|
const Arborist = require("@npmcli/arborist");
|
|
16
16
|
const npmDependencyScanning = async (options)=>{
|
|
17
17
|
const { workingDirectory, allowedLicenses, allowedPackages, includeDevDependencies, devDependenciesOnly } = options;
|
|
18
|
-
const foundAllowedPackages = new
|
|
19
|
-
const packagesWithAllowedLicenses = new
|
|
20
|
-
const packagesWithNoLicenses = new
|
|
21
|
-
const packagesWithForbiddenLicenses = new
|
|
18
|
+
const foundAllowedPackages = new Map();
|
|
19
|
+
const packagesWithAllowedLicenses = new Map();
|
|
20
|
+
const packagesWithNoLicenses = new Map();
|
|
21
|
+
const packagesWithForbiddenLicenses = new Map();
|
|
22
22
|
const arborist = new Arborist({
|
|
23
23
|
path: workingDirectory
|
|
24
24
|
});
|
|
@@ -38,7 +38,7 @@ const npmDependencyScanning = async (options)=>{
|
|
|
38
38
|
const packageJson = await (0, _packagejson.readPackageJson)(packageJsonPath);
|
|
39
39
|
if ((0, _packagerules.isAllowedPackage)(node.name, packageJson.version, allowedPackages)) {
|
|
40
40
|
_logger.default.verbose(`Package ${packageJson.name} is an allowed package`);
|
|
41
|
-
foundAllowedPackages.
|
|
41
|
+
foundAllowedPackages.set(node.pkgid, {
|
|
42
42
|
name: packageJson.name,
|
|
43
43
|
version: packageJson.version
|
|
44
44
|
});
|
|
@@ -51,7 +51,7 @@ const npmDependencyScanning = async (options)=>{
|
|
|
51
51
|
const licenseExpression = (0, _parselicenseexpression.parseLicenseExpression)(rawLicenseExpression);
|
|
52
52
|
if (licenseExpression.type === "unlicensed") {
|
|
53
53
|
_logger.default.verbose(`Package ${packageJson.name} is unlicensed`);
|
|
54
|
-
packagesWithNoLicenses.
|
|
54
|
+
packagesWithNoLicenses.set(node.pkgid, {
|
|
55
55
|
name: packageJson.name,
|
|
56
56
|
version: packageJson.version
|
|
57
57
|
});
|
|
@@ -64,7 +64,7 @@ const npmDependencyScanning = async (options)=>{
|
|
|
64
64
|
const joinedIssues = (0, _joinstringarray.joinStringArray)(licenseIssues);
|
|
65
65
|
if (licenseIssues.length > 0) {
|
|
66
66
|
_logger.default.verbose(`Package ${packageJson.name} has the forbidden license: ${joinedIssues}`);
|
|
67
|
-
packagesWithForbiddenLicenses.
|
|
67
|
+
packagesWithForbiddenLicenses.set(node.pkgid, {
|
|
68
68
|
name: packageJson.name,
|
|
69
69
|
version: packageJson.version,
|
|
70
70
|
licenseIdentifiers: joinedIssues,
|
|
@@ -72,7 +72,7 @@ const npmDependencyScanning = async (options)=>{
|
|
|
72
72
|
});
|
|
73
73
|
} else {
|
|
74
74
|
_logger.default.verbose(`Package ${packageJson.name} has the allowed license: ${rawLicenseExpression}`);
|
|
75
|
-
packagesWithAllowedLicenses.
|
|
75
|
+
packagesWithAllowedLicenses.set(node.pkgid, {
|
|
76
76
|
name: packageJson.name,
|
|
77
77
|
version: packageJson.version,
|
|
78
78
|
spdxExpression: rawLicenseExpression,
|
|
@@ -90,10 +90,10 @@ const npmDependencyScanning = async (options)=>{
|
|
|
90
90
|
};
|
|
91
91
|
await parseNodes(topNode.children.values());
|
|
92
92
|
return {
|
|
93
|
-
allowedPackages: foundAllowedPackages,
|
|
94
|
-
allowedLicenses: packagesWithAllowedLicenses,
|
|
95
|
-
noLicenses: packagesWithNoLicenses,
|
|
96
|
-
forbiddenLicenses: packagesWithForbiddenLicenses
|
|
93
|
+
allowedPackages: new Set(foundAllowedPackages.values()),
|
|
94
|
+
allowedLicenses: new Set(packagesWithAllowedLicenses.values()),
|
|
95
|
+
noLicenses: new Set(packagesWithNoLicenses.values()),
|
|
96
|
+
forbiddenLicenses: new Set(packagesWithForbiddenLicenses.values())
|
|
97
97
|
};
|
|
98
98
|
};
|
|
99
99
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/license-cop/src/lib/dependency-scanning/npm.ts"],"sourcesContent":["import Arborist = require(\"@npmcli/arborist\");\nimport { Link, Node } from \"@npmcli/arborist\";\nimport { join } from \"node:path\";\nimport { getLicenseExpression, readPackageJson } from \"../dependency/package-json\";\nimport { isAllowedPackage } from \"../dependency/package-rules\";\nimport logger from \"../logger\";\nimport {\n AllowedPackage,\n CheckLicensesResult,\n ForbiddenLicenseResult,\n LicensedPackage,\n NoLicenseResult\n} from \"../result\";\nimport { calculateIssues } from \"../spdx/calculate-issues\";\nimport { parseLicenseExpression } from \"../spdx/parse-license-expression\";\nimport { joinStringArray } from \"../utils/join-string-array\";\nimport { DependencyScanningOptions } from \"./options\";\n\nexport const npmDependencyScanning = async (\n options: DependencyScanningOptions\n): Promise<CheckLicensesResult> => {\n const {\n workingDirectory,\n allowedLicenses,\n allowedPackages,\n includeDevDependencies,\n devDependenciesOnly\n } = options;\n\n const foundAllowedPackages = new
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/license-cop/src/lib/dependency-scanning/npm.ts"],"sourcesContent":["import Arborist = require(\"@npmcli/arborist\");\nimport { Link, Node } from \"@npmcli/arborist\";\nimport { join } from \"node:path\";\nimport { getLicenseExpression, readPackageJson } from \"../dependency/package-json\";\nimport { isAllowedPackage } from \"../dependency/package-rules\";\nimport logger from \"../logger\";\nimport {\n AllowedPackage,\n CheckLicensesResult,\n ForbiddenLicenseResult,\n LicensedPackage,\n NoLicenseResult\n} from \"../result\";\nimport { calculateIssues } from \"../spdx/calculate-issues\";\nimport { parseLicenseExpression } from \"../spdx/parse-license-expression\";\nimport { joinStringArray } from \"../utils/join-string-array\";\nimport { DependencyScanningOptions } from \"./options\";\n\nexport const npmDependencyScanning = async (\n options: DependencyScanningOptions\n): Promise<CheckLicensesResult> => {\n const {\n workingDirectory,\n allowedLicenses,\n allowedPackages,\n includeDevDependencies,\n devDependenciesOnly\n } = options;\n\n const foundAllowedPackages = new Map<string, AllowedPackage>();\n const packagesWithAllowedLicenses = new Map<string, LicensedPackage>();\n const packagesWithNoLicenses = new Map<string, NoLicenseResult>();\n const packagesWithForbiddenLicenses = new Map<string, ForbiddenLicenseResult>();\n\n const arborist = new Arborist({ path: workingDirectory });\n\n const topNode = await arborist.loadActual();\n\n // This function is very similar to the one in pnpm.ts\n // If you change this, you probably want to change that one too\n const parseNode = async (node: Node | Link) => {\n logger.verbose(`Parsing node: ${node.name}`);\n\n const isDevDependency = node.dev;\n\n if (!includeDevDependencies && !devDependenciesOnly && isDevDependency) {\n return;\n }\n\n if (devDependenciesOnly && !isDevDependency) {\n return;\n }\n\n const packageJsonPath = join(node.realpath, \"package.json\");\n const packageJson = await readPackageJson(packageJsonPath);\n\n if (isAllowedPackage(node.name, packageJson.version, allowedPackages)) {\n logger.verbose(`Package ${packageJson.name} is an allowed package`);\n foundAllowedPackages.set(node.pkgid, {\n name: packageJson.name,\n version: packageJson.version\n });\n\n if (node.children.size > 0) {\n await parseNodes(node.children.values());\n }\n return;\n }\n\n const rawLicenseExpression = getLicenseExpression(packageJson);\n const licenseExpression = parseLicenseExpression(rawLicenseExpression);\n\n if (licenseExpression.type === \"unlicensed\") {\n logger.verbose(`Package ${packageJson.name} is unlicensed`);\n packagesWithNoLicenses.set(node.pkgid, {\n name: packageJson.name,\n version: packageJson.version\n });\n\n if (node.children.size > 0) {\n await parseNodes(node.children.values());\n }\n return;\n }\n\n const licenseIssues = calculateIssues(licenseExpression, allowedLicenses);\n const joinedIssues = joinStringArray(licenseIssues);\n\n if (licenseIssues.length > 0) {\n logger.verbose(`Package ${packageJson.name} has the forbidden license: ${joinedIssues}`);\n packagesWithForbiddenLicenses.set(node.pkgid, {\n name: packageJson.name,\n version: packageJson.version,\n licenseIdentifiers: joinedIssues,\n spdxExpression: rawLicenseExpression\n });\n } else {\n logger.verbose(\n `Package ${packageJson.name} has the allowed license: ${rawLicenseExpression}`\n );\n packagesWithAllowedLicenses.set(node.pkgid, {\n name: packageJson.name,\n version: packageJson.version,\n spdxExpression: rawLicenseExpression,\n licenses: licenseExpression\n });\n }\n\n if (node.children.size > 0) {\n parseNodes(node.children.values());\n }\n };\n\n const parseNodes = async (nodes: IterableIterator<Node | Link>) => {\n for (const node of nodes) {\n await parseNode(node);\n }\n };\n\n await parseNodes(topNode.children.values());\n\n return {\n allowedPackages: new Set(foundAllowedPackages.values()),\n allowedLicenses: new Set(packagesWithAllowedLicenses.values()),\n noLicenses: new Set(packagesWithNoLicenses.values()),\n forbiddenLicenses: new Set(packagesWithForbiddenLicenses.values())\n };\n};\n"],"names":["npmDependencyScanning","Arborist","options","workingDirectory","allowedLicenses","allowedPackages","includeDevDependencies","devDependenciesOnly","foundAllowedPackages","Map","packagesWithAllowedLicenses","packagesWithNoLicenses","packagesWithForbiddenLicenses","arborist","path","topNode","loadActual","parseNode","node","logger","verbose","name","isDevDependency","dev","packageJsonPath","join","realpath","packageJson","readPackageJson","isAllowedPackage","version","set","pkgid","children","size","parseNodes","values","rawLicenseExpression","getLicenseExpression","licenseExpression","parseLicenseExpression","type","licenseIssues","calculateIssues","joinedIssues","joinStringArray","length","licenseIdentifiers","spdxExpression","licenses","nodes","Set","noLicenses","forbiddenLicenses"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -15,10 +15,10 @@ const _parselicenseexpression = require("../spdx/parse-license-expression");
|
|
|
15
15
|
const _joinstringarray = require("../utils/join-string-array");
|
|
16
16
|
const pnpmDependencyScanning = async (options)=>{
|
|
17
17
|
const { workingDirectory, allowedLicenses, allowedPackages, includeDevDependencies, devDependenciesOnly } = options;
|
|
18
|
-
const foundAllowedPackages = new
|
|
19
|
-
const packagesWithAllowedLicenses = new
|
|
20
|
-
const packagesWithNoLicenses = new
|
|
21
|
-
const packagesWithForbiddenLicenses = new
|
|
18
|
+
const foundAllowedPackages = new Map();
|
|
19
|
+
const packagesWithAllowedLicenses = new Map();
|
|
20
|
+
const packagesWithNoLicenses = new Map();
|
|
21
|
+
const packagesWithForbiddenLicenses = new Map();
|
|
22
22
|
const dependencyHierarchies = await (0, _reviewingdependencieshierarchy.buildDependenciesHierarchy)([
|
|
23
23
|
workingDirectory
|
|
24
24
|
], {
|
|
@@ -35,11 +35,12 @@ const pnpmDependencyScanning = async (options)=>{
|
|
|
35
35
|
// If you change this, you probably want to change that one too
|
|
36
36
|
const parseNode = async (node)=>{
|
|
37
37
|
_logger.default.verbose(`Parsing node: ${node.name}`);
|
|
38
|
+
const pkgId = `${node.alias}@${node.version}`;
|
|
38
39
|
const packageJsonPath = (0, _nodepath.join)(node.path, "package.json");
|
|
39
40
|
const packageJson = await (0, _packagejson.readPackageJson)(packageJsonPath);
|
|
40
41
|
if ((0, _packagerules.isAllowedPackage)(packageJson.name, packageJson.version, allowedPackages)) {
|
|
41
42
|
_logger.default.verbose(`Package ${packageJson.name} is an allowed package`);
|
|
42
|
-
foundAllowedPackages.
|
|
43
|
+
foundAllowedPackages.set(pkgId, {
|
|
43
44
|
name: packageJson.name,
|
|
44
45
|
version: packageJson.version
|
|
45
46
|
});
|
|
@@ -50,7 +51,7 @@ const pnpmDependencyScanning = async (options)=>{
|
|
|
50
51
|
const licenseExpression = (0, _parselicenseexpression.parseLicenseExpression)(rawLicenseExpression);
|
|
51
52
|
if (licenseExpression.type === "unlicensed") {
|
|
52
53
|
_logger.default.verbose(`Package ${packageJson.name} is unlicensed`);
|
|
53
|
-
packagesWithNoLicenses.
|
|
54
|
+
packagesWithNoLicenses.set(pkgId, {
|
|
54
55
|
name: packageJson.name,
|
|
55
56
|
version: packageJson.version
|
|
56
57
|
});
|
|
@@ -61,7 +62,7 @@ const pnpmDependencyScanning = async (options)=>{
|
|
|
61
62
|
const joinedIssues = (0, _joinstringarray.joinStringArray)(licenseIssues);
|
|
62
63
|
if (licenseIssues.length > 0) {
|
|
63
64
|
_logger.default.verbose(`Package ${packageJson.name} has the forbidden license: ${joinedIssues}`);
|
|
64
|
-
packagesWithForbiddenLicenses.
|
|
65
|
+
packagesWithForbiddenLicenses.set(pkgId, {
|
|
65
66
|
name: packageJson.name,
|
|
66
67
|
version: packageJson.version,
|
|
67
68
|
licenseIdentifiers: joinedIssues,
|
|
@@ -69,7 +70,7 @@ const pnpmDependencyScanning = async (options)=>{
|
|
|
69
70
|
});
|
|
70
71
|
} else {
|
|
71
72
|
_logger.default.verbose(`Package ${packageJson.name} has the allowed license: ${rawLicenseExpression}`);
|
|
72
|
-
packagesWithAllowedLicenses.
|
|
73
|
+
packagesWithAllowedLicenses.set(pkgId, {
|
|
73
74
|
name: packageJson.name,
|
|
74
75
|
version: packageJson.version,
|
|
75
76
|
spdxExpression: rawLicenseExpression,
|
|
@@ -90,13 +91,12 @@ const pnpmDependencyScanning = async (options)=>{
|
|
|
90
91
|
await parseNodes(hierarchies.dependencies);
|
|
91
92
|
await parseNodes(hierarchies.devDependencies);
|
|
92
93
|
await parseNodes(hierarchies.optionalDependencies);
|
|
93
|
-
await parseNodes(hierarchies.unsavedDependencies);
|
|
94
94
|
}
|
|
95
95
|
return {
|
|
96
|
-
allowedPackages: foundAllowedPackages,
|
|
97
|
-
allowedLicenses: packagesWithAllowedLicenses,
|
|
98
|
-
noLicenses: packagesWithNoLicenses,
|
|
99
|
-
forbiddenLicenses: packagesWithForbiddenLicenses
|
|
96
|
+
allowedPackages: new Set(foundAllowedPackages.values()),
|
|
97
|
+
allowedLicenses: new Set(packagesWithAllowedLicenses.values()),
|
|
98
|
+
noLicenses: new Set(packagesWithNoLicenses.values()),
|
|
99
|
+
forbiddenLicenses: new Set(packagesWithForbiddenLicenses.values())
|
|
100
100
|
};
|
|
101
101
|
};
|
|
102
102
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/license-cop/src/lib/dependency-scanning/pnpm.ts"],"sourcesContent":["import {\n buildDependenciesHierarchy,\n type PackageNode\n} from \"@pnpm/reviewing.dependencies-hierarchy\";\nimport { join } from \"node:path\";\nimport { getLicenseExpression, readPackageJson } from \"../dependency/package-json\";\nimport { isAllowedPackage } from \"../dependency/package-rules\";\nimport logger from \"../logger\";\nimport {\n AllowedPackage,\n CheckLicensesResult,\n ForbiddenLicenseResult,\n LicensedPackage,\n NoLicenseResult\n} from \"../result\";\nimport { calculateIssues } from \"../spdx/calculate-issues\";\nimport { parseLicenseExpression } from \"../spdx/parse-license-expression\";\nimport { joinStringArray } from \"../utils/join-string-array\";\nimport { DependencyScanningOptions } from \"./options\";\n\nexport const pnpmDependencyScanning = async (\n options: DependencyScanningOptions\n): Promise<CheckLicensesResult> => {\n const {\n workingDirectory,\n allowedLicenses,\n allowedPackages,\n includeDevDependencies,\n devDependenciesOnly\n } = options;\n\n const foundAllowedPackages = new
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/license-cop/src/lib/dependency-scanning/pnpm.ts"],"sourcesContent":["import {\n buildDependenciesHierarchy,\n type PackageNode\n} from \"@pnpm/reviewing.dependencies-hierarchy\";\nimport { join } from \"node:path\";\nimport { getLicenseExpression, readPackageJson } from \"../dependency/package-json\";\nimport { isAllowedPackage } from \"../dependency/package-rules\";\nimport logger from \"../logger\";\nimport {\n AllowedPackage,\n CheckLicensesResult,\n ForbiddenLicenseResult,\n LicensedPackage,\n NoLicenseResult\n} from \"../result\";\nimport { calculateIssues } from \"../spdx/calculate-issues\";\nimport { parseLicenseExpression } from \"../spdx/parse-license-expression\";\nimport { joinStringArray } from \"../utils/join-string-array\";\nimport { DependencyScanningOptions } from \"./options\";\n\nexport const pnpmDependencyScanning = async (\n options: DependencyScanningOptions\n): Promise<CheckLicensesResult> => {\n const {\n workingDirectory,\n allowedLicenses,\n allowedPackages,\n includeDevDependencies,\n devDependenciesOnly\n } = options;\n\n const foundAllowedPackages = new Map<string, AllowedPackage>();\n const packagesWithAllowedLicenses = new Map<string, LicensedPackage>();\n const packagesWithNoLicenses = new Map<string, NoLicenseResult>();\n const packagesWithForbiddenLicenses = new Map<string, ForbiddenLicenseResult>();\n\n const dependencyHierarchies = await buildDependenciesHierarchy([workingDirectory], {\n depth: Infinity,\n include: {\n dependencies: !devDependenciesOnly,\n devDependencies: includeDevDependencies,\n optionalDependencies: false\n },\n lockfileDir: workingDirectory,\n virtualStoreDirMaxLength: Infinity\n });\n\n // This function is very similar to the one in npm.ts\n // If you change this, you probably want to change that one too\n const parseNode = async (node: PackageNode) => {\n logger.verbose(`Parsing node: ${node.name}`);\n\n const pkgId = `${node.alias}@${node.version}`;\n const packageJsonPath = join(node.path, \"package.json\");\n const packageJson = await readPackageJson(packageJsonPath);\n\n if (isAllowedPackage(packageJson.name, packageJson.version, allowedPackages)) {\n logger.verbose(`Package ${packageJson.name} is an allowed package`);\n foundAllowedPackages.set(pkgId, {\n name: packageJson.name,\n version: packageJson.version\n });\n\n await parseNodes(node.dependencies);\n return;\n }\n\n const rawLicenseExpression = getLicenseExpression(packageJson);\n const licenseExpression = parseLicenseExpression(rawLicenseExpression);\n\n if (licenseExpression.type === \"unlicensed\") {\n logger.verbose(`Package ${packageJson.name} is unlicensed`);\n packagesWithNoLicenses.set(pkgId, {\n name: packageJson.name,\n version: packageJson.version\n });\n\n await parseNodes(node.dependencies);\n return;\n }\n\n const licenseIssues = calculateIssues(licenseExpression, allowedLicenses);\n const joinedIssues = joinStringArray(licenseIssues);\n\n if (licenseIssues.length > 0) {\n logger.verbose(`Package ${packageJson.name} has the forbidden license: ${joinedIssues}`);\n packagesWithForbiddenLicenses.set(pkgId, {\n name: packageJson.name,\n version: packageJson.version,\n licenseIdentifiers: joinedIssues,\n spdxExpression: rawLicenseExpression\n });\n } else {\n logger.verbose(\n `Package ${packageJson.name} has the allowed license: ${rawLicenseExpression}`\n );\n packagesWithAllowedLicenses.set(pkgId, {\n name: packageJson.name,\n version: packageJson.version,\n spdxExpression: rawLicenseExpression,\n licenses: licenseExpression\n });\n }\n\n await parseNodes(node.dependencies);\n };\n\n const parseNodes = async (nodes: PackageNode[] | undefined) => {\n if (!nodes) {\n return;\n }\n\n for (const node of nodes) {\n await parseNode(node);\n }\n };\n\n for (const hierarchies of Object.values(dependencyHierarchies)) {\n await parseNodes(hierarchies.dependencies);\n await parseNodes(hierarchies.devDependencies);\n await parseNodes(hierarchies.optionalDependencies);\n }\n\n return {\n allowedPackages: new Set(foundAllowedPackages.values()),\n allowedLicenses: new Set(packagesWithAllowedLicenses.values()),\n noLicenses: new Set(packagesWithNoLicenses.values()),\n forbiddenLicenses: new Set(packagesWithForbiddenLicenses.values())\n };\n};\n"],"names":["pnpmDependencyScanning","options","workingDirectory","allowedLicenses","allowedPackages","includeDevDependencies","devDependenciesOnly","foundAllowedPackages","Map","packagesWithAllowedLicenses","packagesWithNoLicenses","packagesWithForbiddenLicenses","dependencyHierarchies","buildDependenciesHierarchy","depth","Infinity","include","dependencies","devDependencies","optionalDependencies","lockfileDir","virtualStoreDirMaxLength","parseNode","node","logger","verbose","name","pkgId","alias","version","packageJsonPath","join","path","packageJson","readPackageJson","isAllowedPackage","set","parseNodes","rawLicenseExpression","getLicenseExpression","licenseExpression","parseLicenseExpression","type","licenseIssues","calculateIssues","joinedIssues","joinStringArray","length","licenseIdentifiers","spdxExpression","licenses","nodes","hierarchies","Object","values","Set","noLicenses","forbiddenLicenses"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|