28 lines
1.0 KiB
JavaScript
28 lines
1.0 KiB
JavaScript
|
|
const { getDefaultConfig } = require("expo/metro-config");
|
||
|
|
const { resolveTypeScriptSource } = require("./metro-resolver");
|
||
|
|
|
||
|
|
const projectRoot = __dirname;
|
||
|
|
const config = getDefaultConfig(projectRoot);
|
||
|
|
const defaultResolveRequest = config.resolver.resolveRequest;
|
||
|
|
const pinned = new Set(["react", "react/jsx-runtime", "react/jsx-dev-runtime", "react-native"]);
|
||
|
|
|
||
|
|
function resolveFromApp(moduleName) {
|
||
|
|
return require.resolve(moduleName, { paths: [projectRoot] });
|
||
|
|
}
|
||
|
|
|
||
|
|
config.resolver.resolveRequest = (context, moduleName, platform) => {
|
||
|
|
if (pinned.has(moduleName) || moduleName.startsWith("react-native/")) {
|
||
|
|
try {
|
||
|
|
return { type: "sourceFile", filePath: resolveFromApp(moduleName) };
|
||
|
|
} catch {
|
||
|
|
// Fall through to Metro if this exact subpath is not in the app tree.
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (defaultResolveRequest) {
|
||
|
|
return resolveTypeScriptSource(context, moduleName, platform, defaultResolveRequest);
|
||
|
|
}
|
||
|
|
return resolveTypeScriptSource(context, moduleName, platform, context.resolveRequest);
|
||
|
|
};
|
||
|
|
|
||
|
|
module.exports = config;
|