116 lines
5.6 KiB
JavaScript
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
|