refactor(auth): use NativeModuleError for native module load failures
Replace generic Error instances with NativeModuleError in loadDatabaseModule to provide more structured error information, including rebuild status and restart requirements. Update getAuthStatus to re-throw NativeModuleError instances without wrapping.
This commit is contained in:
@@ -15,6 +15,7 @@ import { createRequire } from 'module';
|
|||||||
import { ANTIGRAVITY_DB_PATH } from '../constants.js';
|
import { ANTIGRAVITY_DB_PATH } from '../constants.js';
|
||||||
import { isModuleVersionError, attemptAutoRebuild, clearRequireCache } from '../utils/native-module-helper.js';
|
import { isModuleVersionError, attemptAutoRebuild, clearRequireCache } from '../utils/native-module-helper.js';
|
||||||
import { logger } from '../utils/logger.js';
|
import { logger } from '../utils/logger.js';
|
||||||
|
import { NativeModuleError } from '../errors.js';
|
||||||
|
|
||||||
const require = createRequire(import.meta.url);
|
const require = createRequire(import.meta.url);
|
||||||
|
|
||||||
@@ -54,18 +55,22 @@ function loadDatabaseModule() {
|
|||||||
return Database;
|
return Database;
|
||||||
} catch (retryError) {
|
} catch (retryError) {
|
||||||
// Rebuild succeeded but reload failed - user needs to restart
|
// Rebuild succeeded but reload failed - user needs to restart
|
||||||
moduleLoadError = new Error(
|
moduleLoadError = new NativeModuleError(
|
||||||
'Native module rebuild completed. Please restart the server to apply the fix.'
|
'Native module rebuild completed. Please restart the server to apply the fix.',
|
||||||
|
true, // rebuildSucceeded
|
||||||
|
true // restartRequired
|
||||||
);
|
);
|
||||||
logger.info('[Database] Rebuild succeeded - server restart required');
|
logger.info('[Database] Rebuild succeeded - server restart required');
|
||||||
throw moduleLoadError;
|
throw moduleLoadError;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
moduleLoadError = new Error(
|
moduleLoadError = new NativeModuleError(
|
||||||
'Failed to auto-rebuild native module. Please run manually:\n' +
|
'Failed to auto-rebuild native module. Please run manually:\n' +
|
||||||
' npm rebuild better-sqlite3\n' +
|
' npm rebuild better-sqlite3\n' +
|
||||||
'Or if using npx, find the package location in the error and run:\n' +
|
'Or if using npx, find the package location in the error and run:\n' +
|
||||||
' cd /path/to/better-sqlite3 && npm rebuild'
|
' cd /path/to/better-sqlite3 && npm rebuild',
|
||||||
|
false, // rebuildSucceeded
|
||||||
|
false // restartRequired
|
||||||
);
|
);
|
||||||
throw moduleLoadError;
|
throw moduleLoadError;
|
||||||
}
|
}
|
||||||
@@ -122,8 +127,8 @@ export function getAuthStatus(dbPath = ANTIGRAVITY_DB_PATH) {
|
|||||||
if (error.message.includes('No auth status') || error.message.includes('missing apiKey')) {
|
if (error.message.includes('No auth status') || error.message.includes('missing apiKey')) {
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
// Check for version mismatch that might have been thrown by loadDatabaseModule
|
// Re-throw native module errors from loadDatabaseModule without wrapping
|
||||||
if (error.message.includes('restart the server') || error.message.includes('auto-rebuild')) {
|
if (error instanceof NativeModuleError) {
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
throw new Error(`Failed to read Antigravity database: ${error.message}`);
|
throw new Error(`Failed to read Antigravity database: ${error.message}`);
|
||||||
|
|||||||
Reference in New Issue
Block a user