@ckeditor/ckeditor5-dev-license-checker 55.6.0 → 55.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/dist/index.d.ts +4 -4
- package/dist/index.js +180 -215
- package/dist/validate-license-files.d.ts +28 -32
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export { validateLicenseFiles } from
|
|
2
|
+
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md.
|
|
4
|
+
*/
|
|
5
|
+
export { validateLicenseFiles } from "./validate-license-files.js";
|
package/dist/index.js
CHANGED
|
@@ -1,242 +1,207 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { createPatch } from
|
|
4
|
-
import upath from
|
|
5
|
-
|
|
1
|
+
import { findPackageJSON } from "node:module";
|
|
2
|
+
import { glob, readFile, writeFile } from "node:fs/promises";
|
|
3
|
+
import { createPatch } from "diff";
|
|
4
|
+
import upath from "upath";
|
|
5
|
+
//#region src/validate-license-files.ts
|
|
6
6
|
/**
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const conjunctionFormatter = new Intl.ListFormat(
|
|
7
|
+
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
8
|
+
* For licensing, see LICENSE.md.
|
|
9
|
+
*/
|
|
10
|
+
const conjunctionFormatter = new Intl.ListFormat("en", {
|
|
11
|
+
style: "long",
|
|
12
|
+
type: "conjunction"
|
|
13
|
+
});
|
|
11
14
|
/**
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
15
|
+
* @param options
|
|
16
|
+
* @param options.fix Whether to fix license files instead of printing errors.
|
|
17
|
+
* @param options.verbose Whether to print diff instead of just path to file on failed validation.
|
|
18
|
+
* @param options.shouldProcessRoot Whether validation should process the root.
|
|
19
|
+
* @param options.shouldProcessPackages Whether validation should process `packages/*`.
|
|
20
|
+
* @param options.isPublic Whether license should use disclaimer meant for open source repositories.
|
|
21
|
+
* @param options.rootDir Base directory.
|
|
22
|
+
* @param options.projectName Project name referred to in the licenses.
|
|
23
|
+
* @param options.mainPackageName Designated package that contains collected licenses from all other packages.
|
|
24
|
+
* @param options.copyrightOverrides Map of of copyright that can both add new ones, as well as override existing ones.
|
|
25
|
+
*
|
|
26
|
+
* @returns Exit code of the script that indicates whether it passed or errored.
|
|
27
|
+
*/
|
|
25
28
|
async function validateLicenseFiles({ fix = false, verbose = false, shouldProcessRoot = false, shouldProcessPackages = false, isPublic = false, rootDir, projectName, mainPackageName, copyrightOverrides = [] }) {
|
|
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
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}
|
|
76
|
-
if (updatesNeeded.length) {
|
|
77
|
-
console.error('\nFollowing license files are not up to date. Please run this script with `--fix` option and review the changes.');
|
|
78
|
-
if (!verbose) {
|
|
79
|
-
console.error(makeLicenseFileList(updatesNeeded));
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
console.error('\n' + updatesNeeded.map(({ patch }) => patch).join('\n'));
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
return 1;
|
|
29
|
+
const packagePaths = [];
|
|
30
|
+
if (shouldProcessRoot) packagePaths.push(rootDir);
|
|
31
|
+
if (shouldProcessPackages) packagePaths.push(...await fromAsync(glob(upath.join(rootDir, "packages", "*"))));
|
|
32
|
+
if (!packagePaths.length) {
|
|
33
|
+
console.error(["No packages to parse detected. Make sure that you provided proper paths,", "as well as set at least one of: `shouldProcessRoot` or `shouldProcessPackages`."].join("\n"));
|
|
34
|
+
return 1;
|
|
35
|
+
}
|
|
36
|
+
const dependencyMaps = await Promise.all(packagePaths.map(async (packagePath) => getPackageDependencyMap(packagePath, copyrightOverrides)));
|
|
37
|
+
console.info("Validating licenses in following packages:");
|
|
38
|
+
console.info(dependencyMaps.map(({ packageName }) => ` - ${packageName}`).join("\n"));
|
|
39
|
+
const missingCopyrightLists = getMissingCopyrightLists(dependencyMaps);
|
|
40
|
+
if (missingCopyrightLists.length) {
|
|
41
|
+
console.error("\n❌ Following packages include dependencies where finding copyright message failed. Please add an override:\n");
|
|
42
|
+
console.error(missingCopyrightLists.join("\n"));
|
|
43
|
+
return 1;
|
|
44
|
+
}
|
|
45
|
+
if (mainPackageName) copyDependenciesToTheMainPackage(dependencyMaps, mainPackageName);
|
|
46
|
+
const processingResults = await Promise.all(dependencyMaps.map((dependencyMap) => processDependencyMap({
|
|
47
|
+
dependencyMap,
|
|
48
|
+
projectName,
|
|
49
|
+
isPublic,
|
|
50
|
+
fix
|
|
51
|
+
})));
|
|
52
|
+
const updatedLicenses = processingResults.filter((processingResult) => "updated" in processingResult);
|
|
53
|
+
const licensesMissing = processingResults.filter((processingResult) => "licenseMissing" in processingResult);
|
|
54
|
+
const sectionsMissing = processingResults.filter((processingResult) => "sectionMissing" in processingResult);
|
|
55
|
+
const updatesNeeded = processingResults.filter((processingResult) => "updateNeeded" in processingResult);
|
|
56
|
+
if (updatedLicenses.length) {
|
|
57
|
+
console.info("\nUpdated the following license files:");
|
|
58
|
+
console.info(makeLicenseFileList(updatedLicenses));
|
|
59
|
+
}
|
|
60
|
+
if (!licensesMissing.length && !sectionsMissing.length && !updatesNeeded.length) {
|
|
61
|
+
console.info("\nValidation complete.");
|
|
62
|
+
return 0;
|
|
63
|
+
}
|
|
64
|
+
if (licensesMissing.length) {
|
|
65
|
+
console.error("\nFollowing license files are missing. Please create them:");
|
|
66
|
+
console.error(makeLicenseFileList(licensesMissing));
|
|
67
|
+
}
|
|
68
|
+
if (sectionsMissing.length) {
|
|
69
|
+
console.error(["\nFailed to detect license section in following files.", "Please add an `Sources of Intellectual Property Included in ...` section to them:"].join(" "));
|
|
70
|
+
console.error(makeLicenseFileList(sectionsMissing));
|
|
71
|
+
}
|
|
72
|
+
if (updatesNeeded.length) {
|
|
73
|
+
console.error("\nFollowing license files are not up to date. Please run this script with `--fix` option and review the changes.");
|
|
74
|
+
if (!verbose) console.error(makeLicenseFileList(updatesNeeded));
|
|
75
|
+
else console.error("\n" + updatesNeeded.map(({ patch }) => patch).join("\n"));
|
|
76
|
+
}
|
|
77
|
+
return 1;
|
|
86
78
|
}
|
|
87
79
|
async function getPackageDependencyMap(packagePath, copyrightOverrides) {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
try {
|
|
111
|
-
const dependencyPkgJsonPath = findPackageJSON(dependencyName, packagePath);
|
|
112
|
-
const dependencyPkgJsonContent = JSON.parse(await readFile(dependencyPkgJsonPath, 'utf-8'));
|
|
113
|
-
dependencyData.license = dependencyPkgJsonContent.license;
|
|
114
|
-
dependencyData.copyright = await getCopyright(dependencyPkgJsonPath);
|
|
115
|
-
}
|
|
116
|
-
catch {
|
|
117
|
-
// For packages such as `empathic` there is no export under that namespace, only `empathic/*`.
|
|
118
|
-
// This causes `findPackageJSON()` to error. We silently fail and later ask the integrator to add an override.
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
return dependencyMap;
|
|
80
|
+
const pkgJsonPath = upath.join(packagePath, "package.json");
|
|
81
|
+
const pkgJsonContent = JSON.parse(await readFile(pkgJsonPath, "utf-8"));
|
|
82
|
+
const dependencyNames = Object.keys(pkgJsonContent.dependencies || {}).filter((dependency) => !dependency.match(/(ckeditor)|(cksource)/i));
|
|
83
|
+
const packageName = pkgJsonContent.name;
|
|
84
|
+
const dependencyMap = {
|
|
85
|
+
packageName,
|
|
86
|
+
packagePath,
|
|
87
|
+
dependencies: []
|
|
88
|
+
};
|
|
89
|
+
const copyrightOverridesPackage = copyrightOverrides.find(({ packageName: overridePackageName }) => packageName === overridePackageName);
|
|
90
|
+
if (copyrightOverridesPackage) dependencyMap.dependencies.push(...copyrightOverridesPackage.dependencies);
|
|
91
|
+
for (const dependencyName of dependencyNames) {
|
|
92
|
+
if (dependencyMap.dependencies.some(({ name }) => name === dependencyName)) continue;
|
|
93
|
+
const dependencyData = { name: dependencyName };
|
|
94
|
+
dependencyMap.dependencies.push(dependencyData);
|
|
95
|
+
try {
|
|
96
|
+
const dependencyPkgJsonPath = findPackageJSON(dependencyName, packagePath);
|
|
97
|
+
dependencyData.license = JSON.parse(await readFile(dependencyPkgJsonPath, "utf-8")).license;
|
|
98
|
+
dependencyData.copyright = await getCopyright(dependencyPkgJsonPath);
|
|
99
|
+
} catch {}
|
|
100
|
+
}
|
|
101
|
+
return dependencyMap;
|
|
122
102
|
}
|
|
123
103
|
function getMissingCopyrightLists(dependencyMaps) {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
...missingCopyrights,
|
|
133
|
-
''
|
|
134
|
-
].join('\n');
|
|
135
|
-
}
|
|
136
|
-
})
|
|
137
|
-
.filter((item) => typeof item === 'string');
|
|
104
|
+
return dependencyMaps.map(({ packageName, dependencies }) => {
|
|
105
|
+
const missingCopyrights = dependencies.filter(({ license, copyright }) => !license || !copyright).map(({ name }) => ` - ${name}`);
|
|
106
|
+
if (missingCopyrights.length) return [
|
|
107
|
+
`${packageName}:`,
|
|
108
|
+
...missingCopyrights,
|
|
109
|
+
""
|
|
110
|
+
].join("\n");
|
|
111
|
+
}).filter((item) => typeof item === "string");
|
|
138
112
|
}
|
|
139
113
|
function copyDependenciesToTheMainPackage(dependencyMaps, mainPackageName) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
});
|
|
148
|
-
return output;
|
|
149
|
-
}, []);
|
|
114
|
+
const mainPackage = dependencyMaps.find(({ packageName }) => packageName === mainPackageName);
|
|
115
|
+
mainPackage.dependencies = dependencyMaps.reduce((output, item) => {
|
|
116
|
+
item.dependencies.forEach((dependency) => {
|
|
117
|
+
if (!output.some(({ name }) => name === dependency.name)) output.push(dependency);
|
|
118
|
+
});
|
|
119
|
+
return output;
|
|
120
|
+
}, []);
|
|
150
121
|
}
|
|
151
122
|
async function processDependencyMap({ dependencyMap, projectName, isPublic, fix }) {
|
|
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
|
-
|
|
181
|
-
|
|
123
|
+
const licenseSectionPattern = /(?<=\n)Sources of Intellectual Property Included in .*?\n[\S\s]*?(?=(\nTrademarks\n)|$)/;
|
|
124
|
+
const header = `Sources of Intellectual Property Included in ${projectName}`;
|
|
125
|
+
const licensePath = upath.join(dependencyMap.packagePath, "LICENSE.md");
|
|
126
|
+
let currentLicense;
|
|
127
|
+
try {
|
|
128
|
+
currentLicense = await readFile(licensePath, "utf-8");
|
|
129
|
+
} catch {
|
|
130
|
+
return {
|
|
131
|
+
licensePath,
|
|
132
|
+
licenseMissing: true
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
if (!currentLicense.match(licenseSectionPattern)) return {
|
|
136
|
+
licensePath,
|
|
137
|
+
sectionMissing: true
|
|
138
|
+
};
|
|
139
|
+
const newLicense = currentLicense.replace(licenseSectionPattern, [
|
|
140
|
+
header,
|
|
141
|
+
"-".repeat(header.length),
|
|
142
|
+
"",
|
|
143
|
+
getAuthorDisclaimer(projectName, isPublic),
|
|
144
|
+
"",
|
|
145
|
+
...getLicenseList(projectName, dependencyMap.dependencies)
|
|
146
|
+
].filter((item) => typeof item === "string").join("\n"));
|
|
147
|
+
if (currentLicense === newLicense) return { licensePath };
|
|
148
|
+
if (fix) {
|
|
149
|
+
await writeFile(licensePath, newLicense, "utf-8");
|
|
150
|
+
return {
|
|
151
|
+
licensePath,
|
|
152
|
+
updated: true
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
licensePath,
|
|
157
|
+
updateNeeded: true,
|
|
158
|
+
patch: createPatch(licensePath, currentLicense, newLicense)
|
|
159
|
+
};
|
|
182
160
|
}
|
|
183
161
|
function getAuthorDisclaimer(projectName, isPublic) {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
];
|
|
188
|
-
if (isPublic) {
|
|
189
|
-
authorDisclaimer.push(`In some specific instances, ${projectName} will incorporate work done by`, 'developers outside of CKSource with their express permission.');
|
|
190
|
-
}
|
|
191
|
-
return authorDisclaimer.join(' ');
|
|
162
|
+
const authorDisclaimer = [`Where not otherwise indicated, all ${projectName} content is authored`, "by CKSource engineers and consists of CKSource-owned intellectual property."];
|
|
163
|
+
if (isPublic) authorDisclaimer.push(`In some specific instances, ${projectName} will incorporate work done by`, "developers outside of CKSource with their express permission.");
|
|
164
|
+
return authorDisclaimer.join(" ");
|
|
192
165
|
}
|
|
193
166
|
function getLicenseTypeHeader(projectName, licenseType) {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
167
|
+
return [
|
|
168
|
+
"The following libraries are included in",
|
|
169
|
+
projectName,
|
|
170
|
+
`under the [${licenseType} license](https://opensource.org/licenses/${licenseType}):`
|
|
171
|
+
].join(" ");
|
|
199
172
|
}
|
|
200
173
|
function getLicenseList(projectName, dependencies) {
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
.sort((a, b) => a.name.localeCompare(b.name))
|
|
208
|
-
.map(({ name, copyright }) => `* ${name} - ${copyright}`),
|
|
209
|
-
''
|
|
210
|
-
]);
|
|
174
|
+
return removeDuplicates(dependencies.flatMap((dependency) => dependency.license)).sort().flatMap((licenseType) => [
|
|
175
|
+
getLicenseTypeHeader(projectName, licenseType),
|
|
176
|
+
"",
|
|
177
|
+
...dependencies.filter(({ license }) => license === licenseType).sort((a, b) => a.name.localeCompare(b.name)).map(({ name, copyright }) => `* ${name} - ${copyright}`),
|
|
178
|
+
""
|
|
179
|
+
]);
|
|
211
180
|
}
|
|
212
181
|
async function getCopyright(dependencyPkgJsonPath) {
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
const dependencyLicenseContent = await readFile(dependencyLicensePath, 'utf-8');
|
|
220
|
-
const matches = dependencyLicenseContent.match(/(?<=^|\n[ \t]*?)Copyright.+/g);
|
|
221
|
-
if (!matches) {
|
|
222
|
-
return;
|
|
223
|
-
}
|
|
224
|
-
return conjunctionFormatter.format(matches.map(match => match.replace(/\.$/, '')) // Strip preexisting trailing dot.
|
|
225
|
-
) + '.'; // Add the trailing dot back.
|
|
182
|
+
const dependencyPath = upath.dirname(dependencyPkgJsonPath);
|
|
183
|
+
const dependencyLicensePath = (await fromAsync(glob(upath.join(dependencyPath, "*")))).find((path) => upath.basename(path).match(/license/i));
|
|
184
|
+
if (!dependencyLicensePath) return;
|
|
185
|
+
const matches = (await readFile(dependencyLicensePath, "utf-8")).match(/(?<=^|\n[ \t]*?)Copyright.+/g);
|
|
186
|
+
if (!matches) return;
|
|
187
|
+
return conjunctionFormatter.format(matches.map((match) => match.replace(/\.$/, ""))) + ".";
|
|
226
188
|
}
|
|
227
189
|
function removeDuplicates(array) {
|
|
228
|
-
|
|
190
|
+
return Array.from(new Set(array));
|
|
229
191
|
}
|
|
230
192
|
function makeLicenseFileList(array) {
|
|
231
|
-
|
|
193
|
+
return array.map(({ licensePath }) => ` - ${licensePath}`).join("\n");
|
|
232
194
|
}
|
|
233
|
-
// TODO: Replace with `Array.fromAsync()` once we upgrade to TS 5.5
|
|
234
195
|
async function fromAsync(iterable) {
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
}
|
|
239
|
-
return result;
|
|
196
|
+
const result = [];
|
|
197
|
+
for await (const item of iterable) result.push(item);
|
|
198
|
+
return result;
|
|
240
199
|
}
|
|
241
|
-
|
|
200
|
+
//#endregion
|
|
201
|
+
//#region src/index.ts
|
|
202
|
+
/**
|
|
203
|
+
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
204
|
+
* For licensing, see LICENSE.md.
|
|
205
|
+
*/
|
|
206
|
+
//#endregion
|
|
242
207
|
export { validateLicenseFiles };
|
|
@@ -1,38 +1,34 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
-
* For licensing, see LICENSE.md.
|
|
4
|
-
*/
|
|
5
1
|
type CopyrightOverride = {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
2
|
+
packageName: string;
|
|
3
|
+
dependencies: Array<{
|
|
4
|
+
license: string;
|
|
5
|
+
name: string;
|
|
6
|
+
copyright: string;
|
|
7
|
+
}>;
|
|
12
8
|
};
|
|
13
9
|
/**
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
10
|
+
* @param options
|
|
11
|
+
* @param options.fix Whether to fix license files instead of printing errors.
|
|
12
|
+
* @param options.verbose Whether to print diff instead of just path to file on failed validation.
|
|
13
|
+
* @param options.shouldProcessRoot Whether validation should process the root.
|
|
14
|
+
* @param options.shouldProcessPackages Whether validation should process `packages/*`.
|
|
15
|
+
* @param options.isPublic Whether license should use disclaimer meant for open source repositories.
|
|
16
|
+
* @param options.rootDir Base directory.
|
|
17
|
+
* @param options.projectName Project name referred to in the licenses.
|
|
18
|
+
* @param options.mainPackageName Designated package that contains collected licenses from all other packages.
|
|
19
|
+
* @param options.copyrightOverrides Map of of copyright that can both add new ones, as well as override existing ones.
|
|
20
|
+
*
|
|
21
|
+
* @returns Exit code of the script that indicates whether it passed or errored.
|
|
22
|
+
*/
|
|
27
23
|
export declare function validateLicenseFiles({ fix, verbose, shouldProcessRoot, shouldProcessPackages, isPublic, rootDir, projectName, mainPackageName, copyrightOverrides }: {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
24
|
+
fix?: boolean;
|
|
25
|
+
verbose?: boolean;
|
|
26
|
+
shouldProcessRoot?: boolean;
|
|
27
|
+
shouldProcessPackages?: boolean;
|
|
28
|
+
isPublic?: boolean;
|
|
29
|
+
rootDir: string;
|
|
30
|
+
projectName: string;
|
|
31
|
+
mainPackageName?: string;
|
|
32
|
+
copyrightOverrides?: Array<CopyrightOverride>;
|
|
37
33
|
}): Promise<number>;
|
|
38
34
|
export {};
|