65 lines
2.3 KiB
JavaScript
65 lines
2.3 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.getDependentPods = getDependentPods;
|
|
exports.getFirstExternalSourceForPod = getFirstExternalSourceForPod;
|
|
function getDependentPods(podfileLock, { name, version }) {
|
|
if (!podfileLock.pods) {
|
|
return [];
|
|
}
|
|
const hasPodDependency = (pods) => {
|
|
for (const podDependency of pods) {
|
|
if (podDependency.name === name) {
|
|
return !version || podDependency.version === version;
|
|
}
|
|
if (podDependency.dependencies && hasPodDependency(podDependency.dependencies)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
return podfileLock.pods.reduce((prev, curr) => {
|
|
if (curr.name !== name && curr.dependencies && hasPodDependency(curr.dependencies)) {
|
|
return [...prev, curr.name];
|
|
}
|
|
return prev;
|
|
}, []);
|
|
}
|
|
/**
|
|
* Find the first "external source" (local file path reference) for a given pod.
|
|
*
|
|
* @param podfileLock
|
|
* @param props.name The pod name to search for.
|
|
* @param props.checked A recursive parameter to prevent infinite recursion, not for public use.
|
|
* @returns
|
|
*/
|
|
function getFirstExternalSourceForPod(podfileLock, { name, checked }) {
|
|
if (!podfileLock.externalSources) {
|
|
return null;
|
|
}
|
|
if (podfileLock.externalSources[name]) {
|
|
return { pod: name, source: podfileLock.externalSources[name] };
|
|
}
|
|
else if (name.includes('/')) {
|
|
// Short cut for pods with a path
|
|
const possibleName = name.split('/')[0];
|
|
if (podfileLock.externalSources[possibleName]) {
|
|
return { pod: possibleName, source: podfileLock.externalSources[possibleName] };
|
|
}
|
|
}
|
|
if (!checked) {
|
|
checked = [];
|
|
}
|
|
checked.push(name);
|
|
const dependents = getDependentPods(podfileLock, { name });
|
|
for (const dependent of dependents) {
|
|
// Prevent pods with cyclic dependencies from causing infinite loops.
|
|
if (!checked.includes(dependent)) {
|
|
const results = getFirstExternalSourceForPod(podfileLock, { name: dependent, checked });
|
|
if (results) {
|
|
return results;
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
//# sourceMappingURL=getFirstExternalSourceForPod.js.map
|