nativescript
Version:
Command-line interface for building NativeScript projects
106 lines • 4.94 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.NodeModulesDependenciesBuilder = void 0;
const path = require("path");
const constants_1 = require("../../constants");
const _ = require("lodash");
const yok_1 = require("../../common/yok");
const resolve_package_path_1 = require("@rigor789/resolve-package-path");
class NodeModulesDependenciesBuilder {
constructor($fs) {
this.$fs = $fs;
}
getProductionDependencies(projectPath, ignore) {
const projectPackageJsonPath = path.join(projectPath, constants_1.PACKAGE_JSON_FILE_NAME);
const packageJsonContent = this.$fs.readJson(projectPackageJsonPath);
const dependencies = packageJsonContent && packageJsonContent.dependencies;
const resolvedDependencies = [];
const queue = _.keys(dependencies).map((dependencyName) => ({
parent: null,
parentDir: projectPath,
name: dependencyName,
depth: 0,
}));
while (queue.length) {
const currentModule = queue.shift();
const resolvedDependency = this.findModule(currentModule, resolvedDependencies, projectPath);
if (resolvedDependency &&
!_.some(resolvedDependencies, (r) => r.directory === resolvedDependency.directory)) {
_.each(resolvedDependency.dependencies, (d) => {
const dependency = {
parent: currentModule,
name: d,
parentDir: resolvedDependency.directory,
depth: resolvedDependency.depth + 1,
};
const shouldAdd = !_.some(queue, (element) => element.parent === dependency.parent &&
element.name === dependency.name &&
element.parentDir === dependency.parentDir &&
element.depth === dependency.depth);
if (shouldAdd) {
queue.push(dependency);
}
});
resolvedDependencies.push(resolvedDependency);
}
}
if (ignore && ignore.length > 0) {
return resolvedDependencies.filter((d) => ignore.indexOf(d.name) === -1);
}
return resolvedDependencies;
}
findModule(depDescription, resolvedDependencies, rootPath) {
var _a, _b;
try {
const parentModulesPath = (_a = depDescription === null || depDescription === void 0 ? void 0 : depDescription.parentDir) !== null && _a !== void 0 ? _a : (_b = depDescription === null || depDescription === void 0 ? void 0 : depDescription.parent) === null || _b === void 0 ? void 0 : _b.parentDir;
let modulePath = (0, resolve_package_path_1.resolvePackagePath)(depDescription.name, {
paths: [parentModulesPath],
});
// perhaps traverse up the tree here?
if (!modulePath) {
// fallback to searching in the root path
modulePath = (0, resolve_package_path_1.resolvePackagePath)(depDescription.name, {
paths: [rootPath],
});
}
// if we failed to find the module...
if (!modulePath) {
return null;
}
// if we already resolved this dependency, we return null to avoid a duplicate resolution
if (resolvedDependencies.some((r) => {
return r.name === depDescription.name && r.directory === modulePath;
})) {
return null;
}
return this.getDependencyData(depDescription.name, modulePath, depDescription.depth);
}
catch (err) {
return null;
}
}
getDependencyData(name, directory, depth) {
const dependency = {
name,
directory,
depth,
version: null,
};
const packageJsonPath = path.join(directory, constants_1.PACKAGE_JSON_FILE_NAME);
const packageJsonExists = this.$fs.getLsStats(packageJsonPath).isFile();
if (packageJsonExists) {
const packageJsonContents = this.$fs.readJson(packageJsonPath);
dependency.version = packageJsonContents.version;
if (!!packageJsonContents.nativescript) {
// add `nativescript` property, necessary for resolving plugins
dependency.nativescript = packageJsonContents.nativescript;
}
dependency.dependencies = _.keys(packageJsonContents.dependencies);
return dependency;
}
return null;
}
}
exports.NodeModulesDependenciesBuilder = NodeModulesDependenciesBuilder;
yok_1.injector.register("nodeModulesDependenciesBuilder", NodeModulesDependenciesBuilder);
//# sourceMappingURL=node-modules-dependencies-builder.js.map
;