mirror of
https://github.com/luxfi/safe-wallet.git
synced 2026-10-30 15:19:21 +00:00
* feat(mobile): upgrade Expo SDK to v55 Upgrade Expo SDK from v54 to v55, along with React Native 0.83.4, React 19.2, and all related dependencies. Key changes: - Refactored @safe-global/theme to use sub-path exports to fix RN import resolution issues - Added react-native patch for Appearance.setColorScheme bug (facebook/react-native#08d176453) not yet in 0.83.4 release - Replaced Tamagui Skeleton with custom SafeSkeleton component - Updated expo config plugins for SDK 55 compatibility * fix: downgrade eslint-config-next to v15 to match next.js version eslint-config-next v16 requires next v16 but the project uses next v15.5.8. The v16 package tries to import next/dist/compiled/babel/ eslint-parser which doesn't exist in next v15. * fix: migrate packages away from eslint-config-next eslint-config-next requires next at runtime for its babel parser, but next is only installed in apps/web. After the Expo SDK v55 upgrade changed dependency hoisting, the parser became unreachable. - Create shared config/eslint/base.mjs using direct plugin imports - Migrate store, theme, utils, and tx-builder to the shared config - Add packageExtensions in .yarnrc.yml so eslint-config-next in apps/web can still resolve next as a peer dependency * chore: align react 19.2 across workspaces and fix MUI peer dep - Bump react/react-dom to 19.2.0 in web and tx-builder to match mobile - Add @mui/material as optional peer dependency in theme package to avoid duplicate installations causing type conflicts * chore(mobile): update storybook on mobile to v10 * fix(web): resolve @emotion/react hoisting issue after Expo SDK 55 upgrade Yarn 4's node-modules hoisting shifted after dependency graph changes, leaving @emotion/react only in apps/web/node_modules while @mui/styled-engine remained at root. Add webpack resolve aliases to ensure Next.js finds emotion packages from the web workspace. * fix(web): resolve @emotion hoisting issue in Jest config Same hoisting fix as next.config.mjs but for Jest's module resolution. Add moduleNameMapper entries for @emotion/react and @emotion/styled. * fix(tx-builder): prettier * fix: resolve type-check errors after Expo SDK 55 upgrade - Fix BlurView tint prop: map ColorSchemeName to valid BlurTint values - Replace @storybook/test imports with storybook/test (merged in v10) - Align @types/react (~19.2.10) and @types/react-dom (~19.2.0) across all workspaces to prevent duplicate @mui/material type mismatches - Spread visuallyHidden into sx prop for @types/react 19.2.x compat - Add @types/react, @types/react-dom, storybook to yarn version checker * chore: align more dependencies * chore(web): update storybook snapshot * fix(mobile): normalize color scheme and deduplicate MUI/emotion packages - Normalize useTheme colorScheme to 'light' | 'dark', never 'unspecified' so TamaguiProvider always receives a valid theme name - Update ColorScheme type to exclude 'unspecified' - Remove redundant ?? 'light' fallbacks in SafeThemeProvider - Align @emotion/* and @mui/icons-material versions across workspaces to prevent Yarn from creating duplicate lockfile resolutions - Remove emotion webpack/Jest aliases (no longer needed after dedup) - Add @emotion/react, @emotion/styled, @mui/material, @mui/icons-material to yarn version consistency checker --------- Co-authored-by: Hanzo Dev <[email protected]>
57 lines
1.5 KiB
JavaScript
57 lines
1.5 KiB
JavaScript
const fs = require('fs')
|
|
const path = require('path')
|
|
const { withDangerousMod } = require('expo/config-plugins')
|
|
|
|
const androidFolderPath = ['app', 'src', 'main', 'res', 'drawable']
|
|
|
|
const withDrawableAssets = function (expoConfig, files) {
|
|
return withDangerousMod(expoConfig, [
|
|
'android',
|
|
function (modConfig) {
|
|
if (modConfig.modRequest.platform === 'android') {
|
|
const projectRoot = modConfig.modRequest.projectRoot
|
|
const androidDrawablePath = path.join(modConfig.modRequest.platformProjectRoot, ...androidFolderPath)
|
|
|
|
if (!Array.isArray(files)) {
|
|
files = [files]
|
|
}
|
|
|
|
files.forEach(function (file) {
|
|
if (!path.isAbsolute(file)) {
|
|
file = path.join(projectRoot, file)
|
|
}
|
|
|
|
const isFile = fs.lstatSync(file).isFile()
|
|
if (isFile) {
|
|
fs.copyFileSync(file, path.join(androidDrawablePath, path.basename(file)))
|
|
} else {
|
|
copyFolderRecursiveSync(file, androidDrawablePath)
|
|
}
|
|
})
|
|
}
|
|
return modConfig
|
|
},
|
|
])
|
|
}
|
|
|
|
function copyFolderRecursiveSync(source, target) {
|
|
if (!fs.existsSync(target)) {
|
|
fs.mkdirSync(target)
|
|
}
|
|
|
|
const files = fs.readdirSync(source)
|
|
|
|
files.forEach(function (file) {
|
|
const sourcePath = path.join(source, file)
|
|
const targetPath = path.join(target, file)
|
|
|
|
if (fs.lstatSync(sourcePath).isDirectory()) {
|
|
copyFolderRecursiveSync(sourcePath, targetPath)
|
|
} else {
|
|
fs.copyFileSync(sourcePath, targetPath)
|
|
}
|
|
})
|
|
}
|
|
|
|
module.exports = withDrawableAssets
|