transform()

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();
        }