@volumegraphics/license-info-collector 2.0.0 → 3.0.3
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/lib/index.d.ts +3 -3
- package/lib/index.js +19 -8
- package/lib/package_infos.d.ts +57 -47
- package/lib/package_infos.js +208 -180
- package/lib/package_overrides.d.ts +13 -13
- package/lib/package_overrides.js +58 -57
- package/lib/section.d.ts +14 -14
- package/lib/section.js +38 -37
- package/package.json +36 -33
- package/lib/test.d.ts +0 -1
- package/lib/test.js +0 -45
package/lib/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export * from './package_infos';
|
|
2
|
-
export * from './package_overrides';
|
|
3
|
-
export * from './section';
|
|
1
|
+
export * from './package_infos';
|
|
2
|
+
export * from './package_overrides';
|
|
3
|
+
export * from './section';
|
package/lib/index.js
CHANGED
|
@@ -1,8 +1,19 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
function
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./package_infos"), exports);
|
|
18
|
+
__exportStar(require("./package_overrides"), exports);
|
|
19
|
+
__exportStar(require("./section"), exports);
|
package/lib/package_infos.d.ts
CHANGED
|
@@ -1,47 +1,57 @@
|
|
|
1
|
-
export interface Author {
|
|
2
|
-
name?: string;
|
|
3
|
-
email?: string;
|
|
4
|
-
url?: string;
|
|
5
|
-
}
|
|
6
|
-
export interface Repository {
|
|
7
|
-
type: string;
|
|
8
|
-
url: string;
|
|
9
|
-
}
|
|
10
|
-
export interface PackageContent {
|
|
11
|
-
name: string;
|
|
12
|
-
version: string;
|
|
13
|
-
packageJson: string[];
|
|
14
|
-
contributors?: (string | Author)[];
|
|
15
|
-
author?: string | Author;
|
|
16
|
-
description?: string;
|
|
17
|
-
repository?: string | Repository;
|
|
18
|
-
homepage?: string;
|
|
19
|
-
license?: string;
|
|
20
|
-
}
|
|
21
|
-
export interface Dependency {
|
|
22
|
-
[index: string]: string;
|
|
23
|
-
}
|
|
24
|
-
export interface RawPackageDependencies {
|
|
25
|
-
dependencies?: Dependency;
|
|
26
|
-
devDependencies?: Dependency;
|
|
27
|
-
optionalDependencies?: Dependency;
|
|
28
|
-
}
|
|
29
|
-
export interface PackageDependencies {
|
|
30
|
-
packageDependencies: PackageContent[];
|
|
31
|
-
packageDevDependencies: PackageContent[];
|
|
32
|
-
packageOptionalDependencies: PackageContent[];
|
|
33
|
-
}
|
|
34
|
-
export interface InvalidPackageContent {
|
|
35
|
-
copyright: PackageContent[];
|
|
36
|
-
license: PackageContent[];
|
|
37
|
-
}
|
|
38
|
-
export
|
|
39
|
-
export
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
export declare function
|
|
1
|
+
export interface Author {
|
|
2
|
+
name?: string;
|
|
3
|
+
email?: string;
|
|
4
|
+
url?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface Repository {
|
|
7
|
+
type: string;
|
|
8
|
+
url: string;
|
|
9
|
+
}
|
|
10
|
+
export interface PackageContent {
|
|
11
|
+
name: string;
|
|
12
|
+
version: string;
|
|
13
|
+
packageJson: string[];
|
|
14
|
+
contributors?: (string | Author)[];
|
|
15
|
+
author?: string | Author;
|
|
16
|
+
description?: string;
|
|
17
|
+
repository?: string | Repository;
|
|
18
|
+
homepage?: string;
|
|
19
|
+
license?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface Dependency {
|
|
22
|
+
[index: string]: string;
|
|
23
|
+
}
|
|
24
|
+
export interface RawPackageDependencies {
|
|
25
|
+
dependencies?: Dependency;
|
|
26
|
+
devDependencies?: Dependency;
|
|
27
|
+
optionalDependencies?: Dependency;
|
|
28
|
+
}
|
|
29
|
+
export interface PackageDependencies {
|
|
30
|
+
packageDependencies: PackageContent[];
|
|
31
|
+
packageDevDependencies: PackageContent[];
|
|
32
|
+
packageOptionalDependencies: PackageContent[];
|
|
33
|
+
}
|
|
34
|
+
export interface InvalidPackageContent {
|
|
35
|
+
copyright: PackageContent[];
|
|
36
|
+
license: PackageContent[];
|
|
37
|
+
}
|
|
38
|
+
export type ContentAndRawDependencies = PackageContent & RawPackageDependencies;
|
|
39
|
+
export type CollectPackageError = {
|
|
40
|
+
packageFilePath: string;
|
|
41
|
+
};
|
|
42
|
+
export type CollectPackageInfoResult = {
|
|
43
|
+
result: (PackageContent & PackageDependencies & RawPackageDependencies)[];
|
|
44
|
+
invalidPackages: CollectPackageError[];
|
|
45
|
+
};
|
|
46
|
+
export declare function isCollectPackageError(object: ContentAndRawDependencies | CollectPackageError): object is CollectPackageError;
|
|
47
|
+
export declare function isCollectRawDependencies(object: ContentAndRawDependencies | CollectPackageError): object is ContentAndRawDependencies;
|
|
48
|
+
export declare function collectPackageInfos(productPackageJson: string, nodeModulePaths: string[], disableNpmVersionCheck: boolean): CollectPackageInfoResult;
|
|
49
|
+
export type LicenseName = string;
|
|
50
|
+
export declare function findInvalidPackageContent(packageContents: (PackageContent & PackageDependencies)[], allowedLicenses: LicenseName[], evaluateCopyrightInfo: (content: PackageContent) => boolean): InvalidPackageContent;
|
|
51
|
+
export interface MissingPackages {
|
|
52
|
+
packageReference: PackageContent & PackageDependencies & RawPackageDependencies;
|
|
53
|
+
missingDependencies: Dependency;
|
|
54
|
+
missingDevDependencies: Dependency;
|
|
55
|
+
missingOptionalDependencies: Dependency;
|
|
56
|
+
}
|
|
57
|
+
export declare function findMissingPackages(contents: (PackageContent & PackageDependencies & RawPackageDependencies)[], disableNpmVersionCheck: boolean): MissingPackages[];
|
package/lib/package_infos.js
CHANGED
|
@@ -1,180 +1,208 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
return false;
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
if (!
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
if (
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
if (
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
}
|
|
180
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findMissingPackages = exports.findInvalidPackageContent = exports.collectPackageInfos = exports.isCollectRawDependencies = exports.isCollectPackageError = void 0;
|
|
4
|
+
const path = require("path");
|
|
5
|
+
const fs = require("fs");
|
|
6
|
+
const semver = require("semver");
|
|
7
|
+
function isCollectPackageError(object) {
|
|
8
|
+
return object.packageFilePath !== undefined;
|
|
9
|
+
}
|
|
10
|
+
exports.isCollectPackageError = isCollectPackageError;
|
|
11
|
+
function isCollectRawDependencies(object) {
|
|
12
|
+
return !isCollectPackageError(object);
|
|
13
|
+
}
|
|
14
|
+
exports.isCollectRawDependencies = isCollectRawDependencies;
|
|
15
|
+
function isSamePackageContent(left, right) {
|
|
16
|
+
return left.name === right.name && left.version === right.version;
|
|
17
|
+
}
|
|
18
|
+
function groupSameContents(contents) {
|
|
19
|
+
let uniques = [];
|
|
20
|
+
contents.forEach((content) => {
|
|
21
|
+
let foundUniqueItem = uniques.find((uniqueItem) => {
|
|
22
|
+
return content !== uniqueItem && isSamePackageContent(content, uniqueItem);
|
|
23
|
+
});
|
|
24
|
+
if (foundUniqueItem === undefined) {
|
|
25
|
+
uniques.push(content);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
foundUniqueItem.packageJson = foundUniqueItem.packageJson.concat(content.packageJson);
|
|
29
|
+
});
|
|
30
|
+
return uniques;
|
|
31
|
+
}
|
|
32
|
+
function getPackageFileFromDirectory(dir) {
|
|
33
|
+
let files = [];
|
|
34
|
+
const directoryItems = fs.readdirSync(dir);
|
|
35
|
+
for (let directoryItem of directoryItems) {
|
|
36
|
+
const absItem = path.join(dir, directoryItem);
|
|
37
|
+
if (fs.statSync(absItem).isDirectory()) {
|
|
38
|
+
files = files.concat(getPackageFileFromDirectory(absItem));
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
if (directoryItem !== "package.json") {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
files.push(absItem);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return files;
|
|
48
|
+
}
|
|
49
|
+
function getPackageFiles(nodeModulePaths) {
|
|
50
|
+
const paths = [];
|
|
51
|
+
for (const nodeModulesPath of nodeModulePaths) {
|
|
52
|
+
paths.push(...getPackageFileFromDirectory(nodeModulesPath));
|
|
53
|
+
}
|
|
54
|
+
return paths;
|
|
55
|
+
}
|
|
56
|
+
function resolve(dependencies, contents, disableNpmVersionCheck) {
|
|
57
|
+
let result = {
|
|
58
|
+
foundPackages: [],
|
|
59
|
+
missing: {}
|
|
60
|
+
};
|
|
61
|
+
for (let packageName in dependencies) {
|
|
62
|
+
const versionSemanticString = dependencies[packageName];
|
|
63
|
+
const referencedLib = contents.find((pack) => {
|
|
64
|
+
if (pack.name !== packageName)
|
|
65
|
+
return false;
|
|
66
|
+
if (pack.version === versionSemanticString)
|
|
67
|
+
return true;
|
|
68
|
+
if (disableNpmVersionCheck)
|
|
69
|
+
return false;
|
|
70
|
+
try {
|
|
71
|
+
return semver.satisfies(pack.version, versionSemanticString);
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
if (referencedLib === undefined) {
|
|
78
|
+
result.missing[packageName] = dependencies[packageName];
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
result.foundPackages.push(referencedLib);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return result;
|
|
85
|
+
}
|
|
86
|
+
;
|
|
87
|
+
function resolveRawDependencies(contents, disableNpmVersionCheck) {
|
|
88
|
+
return contents.map((content) => {
|
|
89
|
+
const resolvedDependencies = {
|
|
90
|
+
packageDependencies: resolve(content.dependencies, contents, disableNpmVersionCheck).foundPackages,
|
|
91
|
+
packageDevDependencies: resolve(content.devDependencies, contents, disableNpmVersionCheck).foundPackages,
|
|
92
|
+
packageOptionalDependencies: resolve(content.optionalDependencies, contents, disableNpmVersionCheck).foundPackages
|
|
93
|
+
};
|
|
94
|
+
return Object.assign(content, resolvedDependencies);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
function removeUnreferencedContents(contents, targetPackage) {
|
|
98
|
+
return contents.filter((content) => {
|
|
99
|
+
if (content === targetPackage) {
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
for (let c of contents) {
|
|
103
|
+
if (c === content)
|
|
104
|
+
continue;
|
|
105
|
+
if (c.packageDependencies.includes(content) || c.packageDevDependencies.includes(content) || c.packageOptionalDependencies.includes(content))
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
return false;
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
function collectPackageInfos(productPackageJson, nodeModulePaths, disableNpmVersionCheck) {
|
|
112
|
+
const transformDeprecatedContent = (content, deprecatedContent) => {
|
|
113
|
+
if (content.license && typeof content.license === "string") {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
if (deprecatedContent.license !== undefined && deprecatedContent.license.type !== undefined) {
|
|
117
|
+
if (!deprecatedContent.licenses)
|
|
118
|
+
deprecatedContent.licenses = [];
|
|
119
|
+
deprecatedContent.licenses.push(deprecatedContent.license);
|
|
120
|
+
}
|
|
121
|
+
if (!deprecatedContent.licenses) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
const types = [];
|
|
125
|
+
for (let license of deprecatedContent.licenses) {
|
|
126
|
+
if (!license.type)
|
|
127
|
+
continue;
|
|
128
|
+
types.push(license.type);
|
|
129
|
+
}
|
|
130
|
+
if (types.length > 1) {
|
|
131
|
+
content.license = "(" + types.join(" OR ") + ")";
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (types.length === 1) {
|
|
135
|
+
content.license = types[0];
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
const parseFileContents = (packageFilePath) => {
|
|
139
|
+
const fileContents = fs.readFileSync(packageFilePath).toString();
|
|
140
|
+
try {
|
|
141
|
+
return JSON.parse(fileContents);
|
|
142
|
+
}
|
|
143
|
+
catch (e) {
|
|
144
|
+
return {
|
|
145
|
+
packageFilePath
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
const createPackageContent = (packageFilePath) => {
|
|
150
|
+
const contents = parseFileContents(packageFilePath);
|
|
151
|
+
if (isCollectPackageError(contents))
|
|
152
|
+
return contents;
|
|
153
|
+
contents.packageJson = [packageFilePath];
|
|
154
|
+
transformDeprecatedContent(contents, contents);
|
|
155
|
+
return contents;
|
|
156
|
+
};
|
|
157
|
+
const contentsAndErrors = getPackageFiles(nodeModulePaths).map(createPackageContent);
|
|
158
|
+
const productContentOrError = createPackageContent(productPackageJson);
|
|
159
|
+
let contents = contentsAndErrors.filter(isCollectRawDependencies);
|
|
160
|
+
contents = groupSameContents(contents);
|
|
161
|
+
const invalidPackages = contentsAndErrors.filter(isCollectPackageError);
|
|
162
|
+
isCollectPackageError(productContentOrError)
|
|
163
|
+
? invalidPackages.push(productContentOrError)
|
|
164
|
+
: contents.push(productContentOrError);
|
|
165
|
+
const resolvedContents = resolveRawDependencies(contents, disableNpmVersionCheck);
|
|
166
|
+
const result = removeUnreferencedContents(resolvedContents, resolvedContents[resolvedContents.length - 1]);
|
|
167
|
+
return {
|
|
168
|
+
result,
|
|
169
|
+
invalidPackages
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
exports.collectPackageInfos = collectPackageInfos;
|
|
173
|
+
function findInvalidPackageContent(packageContents, allowedLicenses, evaluateCopyrightInfo) {
|
|
174
|
+
const invalid = {
|
|
175
|
+
copyright: [],
|
|
176
|
+
license: []
|
|
177
|
+
};
|
|
178
|
+
for (let content of packageContents) {
|
|
179
|
+
if (!allowedLicenses.find((name) => { return name === content.license; })) {
|
|
180
|
+
invalid.license.push(content);
|
|
181
|
+
}
|
|
182
|
+
if (evaluateCopyrightInfo(content) === false) {
|
|
183
|
+
invalid.copyright.push(content);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return invalid;
|
|
187
|
+
}
|
|
188
|
+
exports.findInvalidPackageContent = findInvalidPackageContent;
|
|
189
|
+
function findMissingPackages(contents, disableNpmVersionCheck) {
|
|
190
|
+
const missing = [];
|
|
191
|
+
for (const content of contents) {
|
|
192
|
+
const missingDependencies = resolve(content.dependencies, contents, disableNpmVersionCheck).missing;
|
|
193
|
+
const missingDevDependencies = resolve(content.devDependencies, contents, disableNpmVersionCheck).missing;
|
|
194
|
+
const missingOptionalDependencies = resolve(content.optionalDependencies, contents, disableNpmVersionCheck).missing;
|
|
195
|
+
if (Object.keys(missingDependencies).length !== 0
|
|
196
|
+
|| Object.keys(missingDevDependencies).length !== 0
|
|
197
|
+
|| Object.keys(missingOptionalDependencies).length !== 0) {
|
|
198
|
+
missing.push({
|
|
199
|
+
packageReference: content,
|
|
200
|
+
missingDependencies: missingDependencies,
|
|
201
|
+
missingDevDependencies: missingDevDependencies,
|
|
202
|
+
missingOptionalDependencies: missingOptionalDependencies
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return missing;
|
|
207
|
+
}
|
|
208
|
+
exports.findMissingPackages = findMissingPackages;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { PackageContent } from './package_infos';
|
|
2
|
-
export interface Override {
|
|
3
|
-
name: string;
|
|
4
|
-
version: string;
|
|
5
|
-
new: string;
|
|
6
|
-
comment: string;
|
|
7
|
-
}
|
|
8
|
-
export interface Overrides {
|
|
9
|
-
homepage: Override[];
|
|
10
|
-
license: Override[];
|
|
11
|
-
}
|
|
12
|
-
export declare function applyOverrides(packages: PackageContent[], overrides: Overrides): void;
|
|
13
|
-
export declare function findUnusedOverrides(packages: PackageContent[], overrides: Overrides): Overrides;
|
|
1
|
+
import { PackageContent } from './package_infos';
|
|
2
|
+
export interface Override {
|
|
3
|
+
name: string;
|
|
4
|
+
version: string;
|
|
5
|
+
new: string;
|
|
6
|
+
comment: string;
|
|
7
|
+
}
|
|
8
|
+
export interface Overrides {
|
|
9
|
+
homepage: Override[];
|
|
10
|
+
license: Override[];
|
|
11
|
+
}
|
|
12
|
+
export declare function applyOverrides(packages: PackageContent[], overrides: Overrides): void;
|
|
13
|
+
export declare function findUnusedOverrides(packages: PackageContent[], overrides: Overrides): Overrides;
|
package/lib/package_overrides.js
CHANGED
|
@@ -1,57 +1,58 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
OverrideSection[OverrideSection["
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findUnusedOverrides = exports.applyOverrides = void 0;
|
|
4
|
+
var OverrideSection;
|
|
5
|
+
(function (OverrideSection) {
|
|
6
|
+
OverrideSection[OverrideSection["Homepage"] = 0] = "Homepage";
|
|
7
|
+
OverrideSection[OverrideSection["License"] = 1] = "License";
|
|
8
|
+
})(OverrideSection || (OverrideSection = {}));
|
|
9
|
+
function findOverrides(packages, overrides, overrideMatch) {
|
|
10
|
+
const getPackageFn = (o) => (pack) => {
|
|
11
|
+
return o.name === pack.name && o.version == pack.version;
|
|
12
|
+
};
|
|
13
|
+
for (let override of overrides.homepage) {
|
|
14
|
+
overrideMatch(packages.find(getPackageFn(override)), override, OverrideSection.Homepage);
|
|
15
|
+
}
|
|
16
|
+
for (let override of overrides.license) {
|
|
17
|
+
overrideMatch(packages.find(getPackageFn(override)), override, OverrideSection.License);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function applyOverrides(packages, overrides) {
|
|
21
|
+
findOverrides(packages, overrides, (pack, override, overrideSection) => {
|
|
22
|
+
if (!pack)
|
|
23
|
+
return;
|
|
24
|
+
switch (overrideSection) {
|
|
25
|
+
case OverrideSection.Homepage: {
|
|
26
|
+
pack.homepage = override.new;
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
case OverrideSection.License: {
|
|
30
|
+
pack.license = override.new;
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
exports.applyOverrides = applyOverrides;
|
|
37
|
+
function findUnusedOverrides(packages, overrides) {
|
|
38
|
+
const unusedOverrides = {
|
|
39
|
+
license: [],
|
|
40
|
+
homepage: []
|
|
41
|
+
};
|
|
42
|
+
findOverrides(packages, overrides, (pack, override, overrideSection) => {
|
|
43
|
+
if (pack)
|
|
44
|
+
return;
|
|
45
|
+
switch (overrideSection) {
|
|
46
|
+
case OverrideSection.Homepage: {
|
|
47
|
+
unusedOverrides.homepage.push(override);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
case OverrideSection.License: {
|
|
51
|
+
unusedOverrides.license.push(override);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
return unusedOverrides;
|
|
57
|
+
}
|
|
58
|
+
exports.findUnusedOverrides = findUnusedOverrides;
|
package/lib/section.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { PackageContent } from './package_infos';
|
|
2
|
-
export
|
|
3
|
-
licenseName: string;
|
|
4
|
-
meta: T;
|
|
5
|
-
};
|
|
6
|
-
export
|
|
7
|
-
licenseName: string;
|
|
8
|
-
libraries: PackageContent[];
|
|
9
|
-
};
|
|
10
|
-
export
|
|
11
|
-
meta?: T;
|
|
12
|
-
} & LicenseSection;
|
|
13
|
-
export declare function gatherLicenseSections(packageInfos: PackageContent[]): LicenseSection[];
|
|
14
|
-
export declare function attachMeta<T>(l: LicenseSection[], m: LicenseMeta<T>[]): LicenseSectionWithMeta<T>[];
|
|
1
|
+
import { PackageContent } from './package_infos';
|
|
2
|
+
export type LicenseMeta<T> = {
|
|
3
|
+
licenseName: string;
|
|
4
|
+
meta: T;
|
|
5
|
+
};
|
|
6
|
+
export type LicenseSection = {
|
|
7
|
+
licenseName: string;
|
|
8
|
+
libraries: PackageContent[];
|
|
9
|
+
};
|
|
10
|
+
export type LicenseSectionWithMeta<T> = {
|
|
11
|
+
meta?: T;
|
|
12
|
+
} & LicenseSection;
|
|
13
|
+
export declare function gatherLicenseSections(packageInfos: PackageContent[]): LicenseSection[];
|
|
14
|
+
export declare function attachMeta<T>(l: LicenseSection[], m: LicenseMeta<T>[]): LicenseSectionWithMeta<T>[];
|
package/lib/section.js
CHANGED
|
@@ -1,37 +1,38 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.attachMeta = exports.gatherLicenseSections = void 0;
|
|
4
|
+
function orderByLicense(packageInfos) {
|
|
5
|
+
const getLicenseStr = (a) => {
|
|
6
|
+
return a === undefined ? "" : a;
|
|
7
|
+
};
|
|
8
|
+
packageInfos.sort((a, b) => {
|
|
9
|
+
return getLicenseStr(a.license).localeCompare(getLicenseStr(b.license));
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
function gatherLicenseSections(packageInfos) {
|
|
13
|
+
orderByLicense(packageInfos);
|
|
14
|
+
const licenseSections = [];
|
|
15
|
+
for (let info of packageInfos) {
|
|
16
|
+
if (licenseSections.length === 0 || licenseSections[licenseSections.length - 1].licenseName !== info.license) {
|
|
17
|
+
licenseSections.push({
|
|
18
|
+
licenseName: info.license,
|
|
19
|
+
libraries: []
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
licenseSections[licenseSections.length - 1].libraries.push(info);
|
|
23
|
+
}
|
|
24
|
+
for (let license of licenseSections) {
|
|
25
|
+
license.libraries.sort((a, b) => {
|
|
26
|
+
return a.name.localeCompare(b.name);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
return licenseSections;
|
|
30
|
+
}
|
|
31
|
+
exports.gatherLicenseSections = gatherLicenseSections;
|
|
32
|
+
function attachMeta(l, m) {
|
|
33
|
+
return l.map((ls) => {
|
|
34
|
+
const licenseMeta = m.find((lm) => lm.licenseName === ls.licenseName);
|
|
35
|
+
return Object.assign(Object.assign({}, ls), licenseMeta);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
exports.attachMeta = attachMeta;
|
package/package.json
CHANGED
|
@@ -1,33 +1,36 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@volumegraphics/license-info-collector",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Collects license information of all dependencies of your project",
|
|
5
|
-
"main": "./lib/index.js",
|
|
6
|
-
"types": "./lib/index.d.ts",
|
|
7
|
-
"scripts": {
|
|
8
|
-
"prepublishOnly": "tsc",
|
|
9
|
-
"build": "tsc"
|
|
10
|
-
},
|
|
11
|
-
"author": "Volume Graphics GmbH",
|
|
12
|
-
"homepage": "https://www.volumegraphics.com/",
|
|
13
|
-
"license": "MIT",
|
|
14
|
-
"keywords": [
|
|
15
|
-
"license",
|
|
16
|
-
"licensing",
|
|
17
|
-
"collect",
|
|
18
|
-
"dependencies"
|
|
19
|
-
],
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
"
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"
|
|
32
|
-
}
|
|
33
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "@volumegraphics/license-info-collector",
|
|
3
|
+
"version": "3.0.3",
|
|
4
|
+
"description": "Collects license information of all dependencies of your project",
|
|
5
|
+
"main": "./lib/index.js",
|
|
6
|
+
"types": "./lib/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"prepublishOnly": "tsc",
|
|
9
|
+
"build": "tsc"
|
|
10
|
+
},
|
|
11
|
+
"author": "Volume Graphics GmbH",
|
|
12
|
+
"homepage": "https://www.volumegraphics.com/",
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"keywords": [
|
|
15
|
+
"license",
|
|
16
|
+
"licensing",
|
|
17
|
+
"collect",
|
|
18
|
+
"dependencies"
|
|
19
|
+
],
|
|
20
|
+
"publishConfig": {
|
|
21
|
+
"registry": "https://registry.npmjs.org/"
|
|
22
|
+
},
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "https://github.com/VolumeGraphics/license-info-collector.git"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@types/node": "^10.17.60",
|
|
29
|
+
"@types/semver": "^5.5.0",
|
|
30
|
+
"ts-node": "^6.2.0",
|
|
31
|
+
"typescript": "^5.2.2"
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"semver": "^5.7.2"
|
|
35
|
+
}
|
|
36
|
+
}
|
package/lib/test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/lib/test.js
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const _1 = require(".");
|
|
4
|
-
const fs = require("fs");
|
|
5
|
-
function authorToString(author) {
|
|
6
|
-
if (typeof author !== "string") {
|
|
7
|
-
return author.name;
|
|
8
|
-
}
|
|
9
|
-
return author;
|
|
10
|
-
}
|
|
11
|
-
function repositoryToString(repo) {
|
|
12
|
-
if (typeof repo !== "string") {
|
|
13
|
-
return repo.url;
|
|
14
|
-
}
|
|
15
|
-
return repo;
|
|
16
|
-
}
|
|
17
|
-
function copyrightInfo(p) {
|
|
18
|
-
if (p.author) {
|
|
19
|
-
return authorToString(p.author);
|
|
20
|
-
}
|
|
21
|
-
else if (p.homepage) {
|
|
22
|
-
return p.homepage;
|
|
23
|
-
}
|
|
24
|
-
else if (p.repository) {
|
|
25
|
-
return repositoryToString(p.repository);
|
|
26
|
-
}
|
|
27
|
-
return undefined;
|
|
28
|
-
}
|
|
29
|
-
function evaluateCopyRightInfo(p) {
|
|
30
|
-
return copyrightInfo(p) !== undefined;
|
|
31
|
-
}
|
|
32
|
-
function toHtml(productPackageJsonFile, productNodeModulesPaths, licenseFilesPath, configFilePath) {
|
|
33
|
-
let packageInfos = _1.collectPackageInfos(productPackageJsonFile, productNodeModulesPaths, false);
|
|
34
|
-
const config = JSON.parse(fs.readFileSync(configFilePath).toString());
|
|
35
|
-
_1.applyOverrides(packageInfos, config.overrides);
|
|
36
|
-
const invalidOverrides = _1.findUnusedOverrides(packageInfos, config.overrides);
|
|
37
|
-
const invalidInfo = _1.findInvalidPackageContent(packageInfos, config.licenses, evaluateCopyRightInfo);
|
|
38
|
-
const missingPackages = _1.findMissingPackages(packageInfos, false);
|
|
39
|
-
if (invalidOverrides.homepage.length != 0
|
|
40
|
-
|| invalidOverrides.license.length != 0
|
|
41
|
-
|| missingPackages.length != 0) {
|
|
42
|
-
}
|
|
43
|
-
const licenseSections = _1.gatherLicenseSections(packageInfos, config.licenses, licenseFilesPath);
|
|
44
|
-
}
|
|
45
|
-
console.log(toHtml("example/package.json", ["example/node_modules"], "example/license_files", "example/config.json"));
|