123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
- "use strict";
- const { join, dirname, readJson } = require("../util/fs");
- /** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
- /**
- * @param {string} str maybe required version
- * @returns {boolean} true, if it looks like a version
- */
- exports.isRequiredVersion = str => {
- return /^([\d^=v<>~]|[*xX]$)/.test(str);
- };
- /**
- *
- * @param {InputFileSystem} fs file system
- * @param {string} directory directory to start looking into
- * @param {string[]} descriptionFiles possible description filenames
- * @param {function((Error | null)=, {data: object, path: string}=): void} callback callback
- */
- const getDescriptionFile = (fs, directory, descriptionFiles, callback) => {
- let i = 0;
- const tryLoadCurrent = () => {
- if (i >= descriptionFiles.length) {
- const parentDirectory = dirname(fs, directory);
- if (!parentDirectory || parentDirectory === directory) return callback();
- return getDescriptionFile(
- fs,
- parentDirectory,
- descriptionFiles,
- callback
- );
- }
- const filePath = join(fs, directory, descriptionFiles[i]);
- readJson(fs, filePath, (err, data) => {
- if (err) {
- if ("code" in err && err.code === "ENOENT") {
- i++;
- return tryLoadCurrent();
- }
- return callback(err);
- }
- if (!data || typeof data !== "object" || Array.isArray(data)) {
- return callback(
- new Error(`Description file ${filePath} is not an object`)
- );
- }
- callback(null, { data, path: filePath });
- });
- };
- tryLoadCurrent();
- };
- exports.getDescriptionFile = getDescriptionFile;
- exports.getRequiredVersionFromDescriptionFile = (data, packageName) => {
- if (
- data.optionalDependencies &&
- typeof data.optionalDependencies === "object" &&
- packageName in data.optionalDependencies
- ) {
- return data.optionalDependencies[packageName];
- }
- if (
- data.dependencies &&
- typeof data.dependencies === "object" &&
- packageName in data.dependencies
- ) {
- return data.dependencies[packageName];
- }
- if (
- data.peerDependencies &&
- typeof data.peerDependencies === "object" &&
- packageName in data.peerDependencies
- ) {
- return data.peerDependencies[packageName];
- }
- if (
- data.devDependencies &&
- typeof data.devDependencies === "object" &&
- packageName in data.devDependencies
- ) {
- return data.devDependencies[packageName];
- }
- };
|