ssap_app/node_modules/expo-modules-autolinking/build/dependencies/scanning.js

110 lines
4.8 KiB
JavaScript

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.scanDependenciesInSearchPath = scanDependenciesInSearchPath;
const fs_1 = __importDefault(require("fs"));
const utils_1 = require("./utils");
async function resolveDependency(basePath, dependencyName, shouldIncludeDependency) {
if (dependencyName && !shouldIncludeDependency(dependencyName)) {
return null;
}
const originPath = dependencyName ? (0, utils_1.fastJoin)(basePath, dependencyName) : basePath;
const realPath = await (0, utils_1.maybeRealpath)(originPath);
const packageJson = await (0, utils_1.loadPackageJson)((0, utils_1.fastJoin)(realPath || originPath, 'package.json'));
if (packageJson) {
return {
source: 1 /* DependencyResolutionSource.SEARCH_PATH */,
name: packageJson.name,
version: packageJson.version || '',
path: realPath || originPath,
originPath,
duplicates: null,
depth: 0,
};
}
else if (dependencyName && realPath) {
return {
source: 1 /* DependencyResolutionSource.SEARCH_PATH */,
name: dependencyName.toLowerCase(),
version: '',
path: realPath,
originPath,
duplicates: null,
depth: 0,
};
}
else {
return null;
}
}
async function scanDependenciesInSearchPath(rawPath, { shouldIncludeDependency = utils_1.defaultShouldIncludeDependency } = {}) {
const rootPath = await (0, utils_1.maybeRealpath)(rawPath);
const searchResults = Object.create(null);
if (!rootPath) {
return searchResults;
}
const resolvedDependencies = [];
const localModuleTarget = await (0, utils_1.maybeRealpath)((0, utils_1.fastJoin)(rootPath, 'package.json'));
if (localModuleTarget) {
// If we have a `package.json` file in the search path, we're already dealing with a node module
// and can skip the rest. This is a special case created by create-expo-module's `nativeModulesDir: ../`
const resolution = await resolveDependency(rootPath, null, shouldIncludeDependency);
if (resolution)
resolvedDependencies.push(resolution);
}
else {
const dirents = await fs_1.default.promises.readdir(rootPath, { withFileTypes: true });
await Promise.all(dirents.map(async (entry) => {
if (entry.isSymbolicLink()) {
const resolution = await resolveDependency(rootPath, entry.name, shouldIncludeDependency);
if (resolution)
resolvedDependencies.push(resolution);
}
else if (entry.isDirectory()) {
if (entry.name === 'node_modules') {
// Ignore nested node_modules folder
}
if (entry.name[0] === '.') {
// Ignore hidden folders
}
else if (entry.name[0] === '@') {
// NOTE: We don't expect @-scope folders to be symlinks
const entryPath = (0, utils_1.fastJoin)(rootPath, entry.name);
const childEntries = await fs_1.default.promises.readdir(entryPath, { withFileTypes: true });
await Promise.all(childEntries.map(async (child) => {
const dependencyName = `${entry.name}/${child.name}`;
if (child.isDirectory() || child.isSymbolicLink()) {
const resolution = await resolveDependency(rootPath, dependencyName, shouldIncludeDependency);
if (resolution)
resolvedDependencies.push(resolution);
}
}));
}
else {
const resolution = await resolveDependency(rootPath, entry.name, shouldIncludeDependency);
if (resolution)
resolvedDependencies.push(resolution);
}
}
}));
}
for (let idx = 0; idx < resolvedDependencies.length; idx++) {
const resolution = resolvedDependencies[idx];
const prevEntry = searchResults[resolution.name];
if (prevEntry != null && resolution.path !== prevEntry.path) {
(prevEntry.duplicates ?? (prevEntry.duplicates = [])).push({
name: resolution.name,
version: resolution.version,
path: resolution.path,
originPath: resolution.originPath,
});
}
else if (prevEntry == null) {
searchResults[resolution.name] = resolution;
}
}
return searchResults;
}
//# sourceMappingURL=scanning.js.map