UNPKG

3.65 kBJavaScriptView Raw
1"use strict";
2/**
3 * SPDX-FileCopyrightText: © 2017 Liferay, Inc. <https://liferay.com>
4 * SPDX-License-Identifier: LGPL-3.0-or-later
5 */
6var __importDefault = (this && this.__importDefault) || function (mod) {
7 return (mod && mod.__esModule) ? mod : { "default": mod };
8};
9Object.defineProperty(exports, "__esModule", { value: true });
10const pkg_desc_1 = __importDefault(require("liferay-npm-build-tools-common/lib/pkg-desc"));
11const project_1 = __importDefault(require("liferay-npm-build-tools-common/lib/project"));
12const path_1 = __importDefault(require("path"));
13const read_json_sync_1 = __importDefault(require("read-json-sync"));
14const resolve_1 = __importDefault(require("resolve"));
15const report_1 = __importDefault(require("./report"));
16const pkgJson = project_1.default.pkgJson;
17const rootPkg = new pkg_desc_1.default(pkgJson.name, pkgJson.version);
18/**
19 * Get root package descriptor
20 * @return {PkgDesc} the root package descriptor
21 */
22function getRootPkg() {
23 return rootPkg;
24}
25exports.getRootPkg = getRootPkg;
26/**
27 * Recursively find the dependencies of a package and return them as PkgDesc
28 * objects.
29 * @param {object} collectedDependencies a hash of objects where key is the
30 * package id and values are PkgDesc objects
31 * @param {string} basedirPath directory where package lives in
32 * @param {Array} extraDependencies an array of package names to add to
33 * dependencies collected from package.json
34 * @return {{[pkgId:string]: PkgDesc}} the given collectedDependencies object
35 */
36function addPackageDependencies(collectedDependencies, basedirPath, extraDependencies = []) {
37 const packageJson = read_json_sync_1.default(path_1.default.join(basedirPath, '/package.json'));
38 const pkg = new pkg_desc_1.default(packageJson.name, packageJson.version, path_1.default.resolve(basedirPath) == path_1.default.resolve(project_1.default.dir.asNative)
39 ? null
40 : basedirPath);
41 if (collectedDependencies[pkg.id]) {
42 return;
43 }
44 collectedDependencies[pkg.id] = pkg;
45 let dependencies = packageJson.dependencies || {};
46 dependencies = Object.keys(dependencies);
47 dependencies = dependencies.concat(extraDependencies);
48 const dependencyDirs = dependencies
49 .map(dependency => {
50 return resolveDependencyDir(basedirPath, packageJson, dependency);
51 })
52 .filter(dependencyDir => {
53 return dependencyDir != null;
54 });
55 dependencyDirs.forEach(dependencyDir => {
56 addPackageDependencies(collectedDependencies, dependencyDir);
57 });
58 return collectedDependencies;
59}
60exports.addPackageDependencies = addPackageDependencies;
61/**
62 * Resolves a dependency package and returns its directory.
63 * @param {String} packageDir the base directory used for resolution
64 * @param {Object} packageJson the package.json object
65 * @param {String} dependency a package name
66 * @return {String} the path of the directory containing the dependency package
67 */
68function resolveDependencyDir(packageDir, packageJson, dependency) {
69 try {
70 const pkgJsonFile = resolve_1.default.sync(dependency + '/package.json', {
71 basedir: packageDir,
72 });
73 return path_1.default.dirname(pkgJsonFile);
74 }
75 catch (err) {
76 if (packageJson.optionalDependencies &&
77 packageJson.optionalDependencies[dependency]) {
78 report_1.default.warn(`Optional dependency '${dependency}' of ` +
79 `'${packageJson.name}' could not be found in ` +
80 `node_modules: it will be missing in the output bundle.`);
81 return null;
82 }
83 else {
84 throw err;
85 }
86 }
87}