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

116 lines
5.6 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.makeCachedDependenciesLinker = makeCachedDependenciesLinker;
exports.scanDependencyResolutionsForPlatform = scanDependencyResolutionsForPlatform;
exports.scanExpoModuleResolutionsForPlatform = scanExpoModuleResolutionsForPlatform;
const fs_1 = __importDefault(require("fs"));
const resolution_1 = require("./resolution");
const rncliLocal_1 = require("./rncliLocal");
const scanning_1 = require("./scanning");
const utils_1 = require("./utils");
const findModules_1 = require("../autolinking/findModules");
const autolinkingOptions_1 = require("../commands/autolinkingOptions");
const reactNativeConfig_1 = require("../reactNativeConfig");
const config_1 = require("../reactNativeConfig/config");
function makeCachedDependenciesLinker(params) {
const autolinkingOptionsLoader = (0, autolinkingOptions_1.createAutolinkingOptionsLoader)({
projectRoot: params.projectRoot,
});
let appRoot;
const getAppRoot = () => appRoot || (appRoot = autolinkingOptionsLoader.getAppRoot());
const dependenciesResultBySearchPath = new Map();
let reactNativeProjectConfig;
let reactNativeProjectConfigDependencies;
let recursiveDependencies;
return {
async getOptionsForPlatform(platform) {
const options = await autolinkingOptionsLoader.getPlatformOptions(platform);
return makeCachedDependenciesSearchOptions(options);
},
async loadReactNativeProjectConfig() {
if (reactNativeProjectConfig === undefined) {
reactNativeProjectConfig = (0, config_1.loadConfigAsync)(await getAppRoot());
}
return reactNativeProjectConfig;
},
async scanDependenciesFromRNProjectConfig() {
const reactNativeProjectConfig = await this.loadReactNativeProjectConfig();
return (reactNativeProjectConfigDependencies ||
(reactNativeProjectConfigDependencies = (0, rncliLocal_1.scanDependenciesFromRNProjectConfig)(await getAppRoot(), reactNativeProjectConfig)));
},
async scanDependenciesRecursively() {
return (recursiveDependencies ||
(recursiveDependencies = (0, resolution_1.scanDependenciesRecursively)(await getAppRoot())));
},
async scanDependenciesInSearchPath(searchPath) {
let result = dependenciesResultBySearchPath.get(searchPath);
if (!result) {
dependenciesResultBySearchPath.set(searchPath, (result = (0, scanning_1.scanDependenciesInSearchPath)(searchPath)));
}
return result;
},
};
}
async function scanDependencyResolutionsForPlatform(linker, platform, include) {
const { excludeNames, searchPaths } = await linker.getOptionsForPlatform(platform);
const includeNames = new Set(include);
const reactNativeProjectConfig = await linker.loadReactNativeProjectConfig();
const resolutions = (0, utils_1.mergeResolutionResults)(await Promise.all([
linker.scanDependenciesFromRNProjectConfig(),
...searchPaths.map((searchPath) => {
return linker.scanDependenciesInSearchPath(searchPath);
}),
linker.scanDependenciesRecursively(),
]));
const dependencies = await (0, utils_1.filterMapResolutionResult)(resolutions, async (resolution) => {
if (excludeNames.has(resolution.name)) {
return null;
}
else if (includeNames.has(resolution.name)) {
return resolution;
}
else if (resolution.source === 2 /* DependencyResolutionSource.RN_CLI_LOCAL */) {
// If the dependency was resolved frpom the React Native project config, we'll only
// attempt to resolve it as a React Native module
const reactNativeModuleDesc = await (0, reactNativeConfig_1.resolveReactNativeModule)(resolution, reactNativeProjectConfig, platform, excludeNames);
if (!reactNativeModuleDesc) {
return null;
}
}
else {
const [reactNativeModule, expoModule] = await Promise.all([
(0, reactNativeConfig_1.resolveReactNativeModule)(resolution, reactNativeProjectConfig, platform, excludeNames),
(0, findModules_1.resolveExpoModule)(resolution, platform, excludeNames),
]);
if (!reactNativeModule && !expoModule) {
return null;
}
}
return resolution;
});
return dependencies;
}
async function scanExpoModuleResolutionsForPlatform(linker, platform) {
const { excludeNames, searchPaths } = await linker.getOptionsForPlatform(platform);
const resolutions = (0, utils_1.mergeResolutionResults)(await Promise.all([
...searchPaths.map((searchPath) => {
return linker.scanDependenciesInSearchPath(searchPath);
}),
linker.scanDependenciesRecursively(),
].filter((x) => x != null)));
return await (0, utils_1.filterMapResolutionResult)(resolutions, async (resolution) => {
return !excludeNames.has(resolution.name)
? await (0, findModules_1.resolveExpoModule)(resolution, platform, excludeNames)
: null;
});
}
const makeCachedDependenciesSearchOptions = (options) => ({
excludeNames: new Set(options.exclude),
searchPaths: options.nativeModulesDir && fs_1.default.existsSync(options.nativeModulesDir)
? [options.nativeModulesDir, ...(options.searchPaths ?? [])]
: (options.searchPaths ?? []),
});
//# sourceMappingURL=CachedDependenciesLinker.js.map