2026-04-24 10:58:27 +08:00
|
|
|
const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config');
|
feat: complete production chat demo — all screens, real media, SDK remote init
- App.tsx: replaced dev console with AuthProvider + AppNavigator
- Auth: Login, Register, ResetPassword screens via demo-service
- Conversations: reactive WatermelonDB subscription with user profile enrichment
- Chat: SingleChat + GroupChat with full media (image/video/audio/file), revoke, pull-up load more
- Contacts: local contacts list + UserSearch with debounced fuzzy search
- Groups: GroupList, CreateGroup (fuzzy member picker), GroupMembers, GroupSettings
- Profile: view + EditProfile (nickname, gender)
- MessageSearch: local DB full-text search across conversations
- ChatInput: text, 20-emoji picker, image/video/audio/file send, tap-to-record audio
- DisconnectBanner: connection status with reconnect
- AuthContext: uses await XuqmSDK.initialize({ appId, serverUrl }) for remote config
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 16:41:54 +08:00
|
|
|
const path = require('path');
|
2026-04-24 10:58:27 +08:00
|
|
|
|
feat: complete production chat demo — all screens, real media, SDK remote init
- App.tsx: replaced dev console with AuthProvider + AppNavigator
- Auth: Login, Register, ResetPassword screens via demo-service
- Conversations: reactive WatermelonDB subscription with user profile enrichment
- Chat: SingleChat + GroupChat with full media (image/video/audio/file), revoke, pull-up load more
- Contacts: local contacts list + UserSearch with debounced fuzzy search
- Groups: GroupList, CreateGroup (fuzzy member picker), GroupMembers, GroupSettings
- Profile: view + EditProfile (nickname, gender)
- MessageSearch: local DB full-text search across conversations
- ChatInput: text, 20-emoji picker, image/video/audio/file send, tap-to-record audio
- DisconnectBanner: connection status with reconnect
- AuthContext: uses await XuqmSDK.initialize({ appId, serverUrl }) for remote config
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 16:41:54 +08:00
|
|
|
const sdkRoot = path.resolve(__dirname, 'node_modules/@xuqm/rn-sdk');
|
|
|
|
|
|
|
|
|
|
const config = {
|
|
|
|
|
resolver: {
|
|
|
|
|
extraNodeModules: {
|
|
|
|
|
'@xuqm/rn-common': path.join(sdkRoot, 'packages/common'),
|
|
|
|
|
'@xuqm/rn-im': path.join(sdkRoot, 'packages/im'),
|
|
|
|
|
'@xuqm/rn-push': path.join(sdkRoot, 'packages/push'),
|
|
|
|
|
'@xuqm/rn-update': path.join(sdkRoot, 'packages/update'),
|
|
|
|
|
// WatermelonDB is a peerDep of rn-im; resolve from demo's node_modules
|
|
|
|
|
'@nozbe/watermelondb': path.resolve(__dirname, 'node_modules/@nozbe/watermelondb'),
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
};
|
2026-04-24 10:58:27 +08:00
|
|
|
|
|
|
|
|
module.exports = mergeConfig(getDefaultConfig(__dirname), config);
|