mirror of
https://github.com/selfxyz/self.git
synced 2026-04-05 03:00:53 -04:00
chore: add TypeScript tooling (#891)
* chore: add TypeScript tooling * chore: remove unused tsconfig and migration script * update settings * add knip config * format * more reliable circuits tests * fix workflow * fix types * updates * ts updates * more updates * fix upgrade * fixes
This commit is contained in:
@@ -3,10 +3,9 @@
|
||||
import type { configLoggerType } from 'react-native-logs';
|
||||
import { logger } from 'react-native-logs';
|
||||
|
||||
import { interceptConsole } from './logger/consoleInterceptor';
|
||||
import { lokiTransport } from './logger/lokiTransport';
|
||||
|
||||
import './logger/nativeLoggerBridge';
|
||||
import { interceptConsole } from '@/utils/logger/consoleInterceptor';
|
||||
import { lokiTransport } from '@/utils/logger/lokiTransport';
|
||||
import { setupNativeLoggerBridge } from '@/utils/logger/nativeLoggerBridge';
|
||||
|
||||
export {
|
||||
AppLogger,
|
||||
@@ -41,9 +40,6 @@ const defaultConfig: configLoggerType<any, any> = {
|
||||
|
||||
const Logger = logger.createLogger(defaultConfig);
|
||||
|
||||
// Initialize console interceptor to route console logs to Loki
|
||||
interceptConsole();
|
||||
|
||||
// loggers based on src/consts/analytics.ts
|
||||
const AppLogger = Logger.extend('APP');
|
||||
const NotificationLogger = Logger.extend('NOTIFICATION');
|
||||
@@ -58,6 +54,9 @@ const DocumentLogger = Logger.extend('DOCUMENT');
|
||||
//Native Modules
|
||||
const NfcLogger = Logger.extend('NFC');
|
||||
|
||||
// Initialize console interceptor to route console logs to Loki
|
||||
interceptConsole(AppLogger);
|
||||
|
||||
// Define log levels
|
||||
export const logLevels = {
|
||||
debug: 0,
|
||||
@@ -65,3 +64,7 @@ export const logLevels = {
|
||||
warn: 2,
|
||||
error: 3,
|
||||
};
|
||||
|
||||
// Initialize native logger bridge after all loggers are defined
|
||||
// This avoids module cycle by injecting dependencies instead of importing them
|
||||
setupNativeLoggerBridge({ AppLogger, NfcLogger, Logger });
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
|
||||
|
||||
import { AppLogger } from '../logger';
|
||||
|
||||
// Store original console methods
|
||||
const originalConsole = {
|
||||
log: console.log,
|
||||
@@ -11,29 +9,29 @@ const originalConsole = {
|
||||
debug: console.debug,
|
||||
};
|
||||
|
||||
const interceptConsole = () => {
|
||||
const interceptConsole = (appLogger: any) => {
|
||||
console.log = (...args: any[]) => {
|
||||
AppLogger.info(...args);
|
||||
appLogger.info(...args);
|
||||
originalConsole.log(...args);
|
||||
};
|
||||
|
||||
console.info = (...args: any[]) => {
|
||||
AppLogger.info(...args);
|
||||
appLogger.info(...args);
|
||||
originalConsole.info(...args);
|
||||
};
|
||||
|
||||
console.warn = (...args: any[]) => {
|
||||
AppLogger.warn(...args);
|
||||
appLogger.warn(...args);
|
||||
originalConsole.warn(...args);
|
||||
};
|
||||
|
||||
console.error = (...args: any[]) => {
|
||||
AppLogger.error(...args);
|
||||
appLogger.error(...args);
|
||||
originalConsole.error(...args);
|
||||
};
|
||||
|
||||
console.debug = (...args: any[]) => {
|
||||
AppLogger.debug(...args);
|
||||
appLogger.debug(...args);
|
||||
originalConsole.debug(...args);
|
||||
};
|
||||
};
|
||||
|
||||
@@ -133,6 +133,13 @@ registerDocumentChangeCallback((isMock: boolean) => {
|
||||
isCurrentPassportMockFlag = isMock;
|
||||
});
|
||||
|
||||
export const cleanupLokiTransport = () => {
|
||||
try {
|
||||
appStateSubscription.remove?.();
|
||||
} catch {}
|
||||
flushLokiTransport();
|
||||
};
|
||||
|
||||
// Export flush function for manual flushing if needed
|
||||
export const flushLokiTransport = () => {
|
||||
if (batch.length > 0) {
|
||||
@@ -145,6 +152,17 @@ export const flushLokiTransport = () => {
|
||||
}
|
||||
};
|
||||
|
||||
const handleAppStateChange = (nextAppState: AppStateStatus) => {
|
||||
if (nextAppState === 'background' || nextAppState === 'inactive') {
|
||||
flushLokiTransport();
|
||||
}
|
||||
};
|
||||
|
||||
const appStateSubscription = AppState.addEventListener(
|
||||
'change',
|
||||
handleAppStateChange,
|
||||
);
|
||||
|
||||
// Create react-native-logs transport function
|
||||
export const lokiTransport: transportFunctionType<any> = props => {
|
||||
const { msg, rawMsg, level, extension } = props;
|
||||
@@ -189,11 +207,3 @@ export const lokiTransport: transportFunctionType<any> = props => {
|
||||
|
||||
addToBatch(entry, namespace);
|
||||
};
|
||||
|
||||
const handleAppStateChange = (nextAppState: AppStateStatus) => {
|
||||
if (nextAppState === 'background' || nextAppState === 'inactive') {
|
||||
flushLokiTransport();
|
||||
}
|
||||
};
|
||||
|
||||
AppState.addEventListener('change', handleAppStateChange);
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
|
||||
import { NativeEventEmitter, NativeModules, Platform } from 'react-native';
|
||||
|
||||
import { AppLogger, Logger, NfcLogger } from '../logger';
|
||||
// Remove direct imports to avoid module cycle
|
||||
// Dependencies will be injected via setupNativeLoggerBridge
|
||||
|
||||
interface NativeLogEvent {
|
||||
level: 'debug' | 'info' | 'warn' | 'error';
|
||||
@@ -13,10 +14,22 @@ interface NativeLogEvent {
|
||||
|
||||
let eventEmitter: NativeEventEmitter | null = null;
|
||||
let isInitialized = false;
|
||||
let injectedLoggers: {
|
||||
AppLogger: any;
|
||||
NfcLogger: any;
|
||||
Logger: any;
|
||||
} | null = null;
|
||||
|
||||
const setupNativeLoggerBridge = () => {
|
||||
const setupNativeLoggerBridge = (loggers: {
|
||||
AppLogger: any;
|
||||
NfcLogger: any;
|
||||
Logger: any;
|
||||
}) => {
|
||||
if (isInitialized) return;
|
||||
|
||||
// Store injected loggers
|
||||
injectedLoggers = loggers;
|
||||
|
||||
const moduleName =
|
||||
Platform.OS === 'android' ? 'RNPassportReader' : 'NativeLoggerBridge';
|
||||
|
||||
@@ -48,38 +61,43 @@ const setupEventListeners = () => {
|
||||
};
|
||||
|
||||
const handleNativeLogEvent = (event: NativeLogEvent) => {
|
||||
if (!injectedLoggers) {
|
||||
console.warn('NativeLoggerBridge not initialized with loggers');
|
||||
return;
|
||||
}
|
||||
|
||||
const { level, category, message, data } = event;
|
||||
|
||||
// Route to appropriate logger based on category
|
||||
let logger;
|
||||
let logger: any;
|
||||
switch (category.toLowerCase()) {
|
||||
case 'nfc':
|
||||
logger = NfcLogger;
|
||||
logger = injectedLoggers.NfcLogger;
|
||||
break;
|
||||
case 'app':
|
||||
logger = AppLogger;
|
||||
logger = injectedLoggers.AppLogger;
|
||||
break;
|
||||
default:
|
||||
// For unknown categories, use AppLogger with category prefix
|
||||
logger = Logger.extend(category.toUpperCase());
|
||||
// For unknown categories, use Logger with category prefix
|
||||
logger = injectedLoggers.Logger.extend(category.toUpperCase());
|
||||
}
|
||||
|
||||
// Log with appropriate level
|
||||
switch (level) {
|
||||
case 'debug':
|
||||
(logger as any).debug(message, data);
|
||||
logger.debug(message, data);
|
||||
break;
|
||||
case 'info':
|
||||
(logger as any).info(message, data);
|
||||
logger.info(message, data);
|
||||
break;
|
||||
case 'warn':
|
||||
(logger as any).warn(message, data);
|
||||
logger.warn(message, data);
|
||||
break;
|
||||
case 'error':
|
||||
(logger as any).error(message, data);
|
||||
logger.error(message, data);
|
||||
break;
|
||||
default:
|
||||
(logger as any).info(message, data);
|
||||
logger.info(message, data);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -89,9 +107,8 @@ const cleanup = () => {
|
||||
eventEmitter = null;
|
||||
}
|
||||
isInitialized = false;
|
||||
injectedLoggers = null;
|
||||
};
|
||||
|
||||
// Initialize the bridge
|
||||
setupNativeLoggerBridge();
|
||||
|
||||
export { cleanup };
|
||||
// Export the setup function for explicit initialization
|
||||
export { cleanup, setupNativeLoggerBridge };
|
||||
|
||||
Reference in New Issue
Block a user