in core/processors/licensing.js [87:161]
transform(chunk, encoding, callback) {
const stat = fs.statSync(chunk.path);
if (!stat.isFile()) {
callback(new Error(`Cannot handle non-file package: ${chunk.path}`));
return;
}
/** @type {IPackageConfig} */
const packageJson = JSON.parse(fs.readFileSync(chunk.path, "utf8"));
/** @type {IDictionary.<string>} */
const dependencies = Object.create(null);
if (!utils.isNullOrUndefined(packageJson.dependencies)
&& !utils.object.isEmpty(packageJson.dependencies)) {
Object.assign(dependencies, packageJson.dependencies);
}
if (!utils.isNullOrUndefined(packageJson.bundleDependencies)
&& !utils.object.isEmpty(packageJson.bundleDependencies)) {
Object.assign(dependencies, packageJson.bundleDependencies);
}
if (utils.isNullOrUndefined(packageJson.dependencies)
|| utils.object.isEmpty(dependencies)) {
callback();
return;
}
/** @type {string} */
let nodeModulesDir = path.dirname(chunk.path);
while (!fs.existsSync(path.join(nodeModulesDir, "node_modules"))) {
if (nodeModulesDir === path.dirname(nodeModulesDir)) {
callback(new Error(`Cannot find "node_modules" folder for package.json: ${chunk.path}`));
return;
}
nodeModulesDir = path.dirname(nodeModulesDir);
}
nodeModulesDir = path.join(nodeModulesDir, "node_modules");
for (const depName in dependencies) {
if (depName in depLicenses) {
continue;
}
/** @type {Array.<string>} */
const licenseFiles = glob.sync(
[
path.join(nodeModulesDir, depName, "LICENSE"),
path.join(nodeModulesDir, depName, "LICENSE.*"),
path.join(nodeModulesDir, depName, "README"),
path.join(nodeModulesDir, depName, "README.*")
],
{ case: false, nocase: true, dot: true });
if (!licenseFiles || licenseFiles.length <= 0) {
callback(new Error(`Failed to acquire license file for "${depName}"`));
return;
}
/** @type {IPackageConfig} */
const depPackageJson = JSON.parse(fs.readFileSync(path.join(nodeModulesDir, depName, "package.json"), "utf8"));
depLicenses[depName] = {
name: depName,
licensePath: licenseFiles[0],
homepage: depPackageJson.homepage
};
}
callback();
}