/
mustreets
/
TestApp
Обзор
Документация
Войти
/
mustreets
/
TestApp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
1
CI/CD
Аналитика
Безопасность
master
scripts/metroAliasResolver.js
87 строк
2 KB
Slava
Remove Crashlytics integration from the beta lane in Fastfile
07 июн 2026, 20:06
07 июн 2026, 20:06
f21773c
Код
Авторство
О чём код?
const fs = require('fs'); const path = require('path'); const aliases = require('../aliases'); const EXTENSIONS = ['.tsx', '.ts', '.jsx', '.js', '.json']; function fileExists(filePath) { try { return fs.statSync(filePath).isFile(); } catch { return false; } } function resolveFile(basePath, subpath) { const relative = subpath ? path.join(basePath, subpath) : basePath; const candidates = subpath ? [ ...EXTENSIONS.map((ext) => `${relative}${ext}`), relative, ] : [ ...EXTENSIONS.map((ext) => path.join(relative, `index${ext}`)), relative, ]; for (const candidate of candidates) { if (fileExists(candidate)) { return candidate; } } return null; } /** * Resolves path aliases (@navigation, @locales, @/…) for Metro when Babel has not rewritten them yet. */ function resolveAliasModule(moduleName) { if (aliases['@'] && moduleName.startsWith('@/')) { const subpath = moduleName.slice(2); const base = path.resolve(__dirname, '..', aliases['@']); return resolveFile(base, subpath); } for (const [alias, relativePath] of Object.entries(aliases)) { if (alias === '@') { continue; } const prefix = `${alias}/`; if (moduleName !== alias && !moduleName.startsWith(prefix)) { continue; } const subpath = moduleName === alias ? '' : moduleName.slice(prefix.length); const base = path.resolve(__dirname, '..', relativePath); const resolved = resolveFile(base, subpath); if (resolved) { return resolved; } } return null; } function createMetroAliasResolver(defaultResolveRequest) { return (context, moduleName, platform) => { const aliasFile = resolveAliasModule(moduleName); if (aliasFile) { return { type: 'sourceFile', filePath: aliasFile }; } if (defaultResolveRequest) { return defaultResolveRequest(context, moduleName, platform); } return context.resolveRequest(context, moduleName, platform); }; } module.exports = { createMetroAliasResolver, resolveAliasModule };