
- Complete NestJS TypeScript implementation with WebSocket support - Direct messaging (DM) and group chat functionality - End-to-end encryption with AES encryption and key pairs - Media file support (images, videos, audio, documents) up to 100MB - Push notifications with Firebase Cloud Messaging integration - Mention alerts and real-time typing indicators - User authentication with JWT and Passport - SQLite database with TypeORM entities and relationships - Comprehensive API documentation with Swagger/OpenAPI - File upload handling with secure access control - Online/offline status tracking and presence management - Message editing, deletion, and reply functionality - Notification management with automatic cleanup - Health check endpoint for monitoring - CORS configuration for cross-origin requests - Environment-based configuration management - Structured for Flutter SDK integration Features implemented: ✅ Real-time messaging with Socket.IO ✅ User registration and authentication ✅ Direct messages and group chats ✅ Media file uploads and management ✅ End-to-end encryption ✅ Push notifications ✅ Mention alerts ✅ Typing indicators ✅ Message read receipts ✅ Online status tracking ✅ File access control ✅ Comprehensive API documentation Ready for Flutter SDK development and production deployment.
23 lines
745 B
JavaScript
23 lines
745 B
JavaScript
import isFunction from './isFunction.js';
|
|
import toPath from './_toPath.js';
|
|
|
|
// Traverses the children of `obj` along `path`. If a child is a function, it
|
|
// is invoked with its parent as context. Returns the value of the final
|
|
// child, or `fallback` if any child is undefined.
|
|
export default function result(obj, path, fallback) {
|
|
path = toPath(path);
|
|
var length = path.length;
|
|
if (!length) {
|
|
return isFunction(fallback) ? fallback.call(obj) : fallback;
|
|
}
|
|
for (var i = 0; i < length; i++) {
|
|
var prop = obj == null ? void 0 : obj[path[i]];
|
|
if (prop === void 0) {
|
|
prop = fallback;
|
|
i = length; // Ensure we don't continue iterating.
|
|
}
|
|
obj = isFunction(prop) ? prop.call(obj) : prop;
|
|
}
|
|
return obj;
|
|
}
|