mirror of
https://github.com/getpaseo/paseo.git
synced 2026-07-29 12:01:31 +00:00
46 lines
1.6 KiB
JavaScript
46 lines
1.6 KiB
JavaScript
const { getDefaultConfig } = require("expo/metro-config");
|
|
const { resolve } = require("metro-resolver");
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
|
|
const projectRoot = __dirname;
|
|
const monorepoRoot = path.resolve(projectRoot, "../..");
|
|
const serverSrcRoot = path.resolve(projectRoot, "../server/src");
|
|
const relaySrcRoot = path.resolve(projectRoot, "../relay/src");
|
|
|
|
const config = getDefaultConfig(projectRoot);
|
|
const defaultResolveRequest = config.resolver.resolveRequest ?? resolve;
|
|
|
|
// This app imports TypeScript sources from sibling workspaces (server/relay).
|
|
// Metro's default hierarchical lookup won't find hoisted deps when resolving
|
|
// from those out-of-tree source files, so point Metro at the monorepo root.
|
|
config.watchFolders = Array.from(
|
|
new Set([...(config.watchFolders ?? []), monorepoRoot])
|
|
);
|
|
config.resolver.nodeModulesPaths = Array.from(
|
|
new Set([
|
|
...(config.resolver.nodeModulesPaths ?? []),
|
|
path.join(projectRoot, "node_modules"),
|
|
path.join(monorepoRoot, "node_modules"),
|
|
])
|
|
);
|
|
|
|
config.resolver.resolveRequest = (context, moduleName, platform) => {
|
|
const origin = context.originModulePath;
|
|
if (
|
|
origin &&
|
|
(origin.startsWith(serverSrcRoot) || origin.startsWith(relaySrcRoot)) &&
|
|
moduleName.endsWith(".js")
|
|
) {
|
|
const tsModuleName = moduleName.replace(/\.js$/, ".ts");
|
|
const candidatePath = path.resolve(path.dirname(origin), tsModuleName);
|
|
if (fs.existsSync(candidatePath)) {
|
|
return defaultResolveRequest(context, tsModuleName, platform);
|
|
}
|
|
}
|
|
|
|
return defaultResolveRequest(context, moduleName, platform);
|
|
};
|
|
|
|
module.exports = config;
|