58 lines
1.6 KiB
TypeScript
58 lines
1.6 KiB
TypeScript
|
|
import { DomainError } from './DomainError';
|
||
|
|
|
||
|
|
export class PluginError extends DomainError {
|
||
|
|
constructor(
|
||
|
|
message: string,
|
||
|
|
public readonly pluginId?: string,
|
||
|
|
public readonly pluginName?: string,
|
||
|
|
public readonly operation?: 'load' | 'activate' | 'deactivate' | 'execute',
|
||
|
|
public readonly originalError?: Error
|
||
|
|
) {
|
||
|
|
super(message);
|
||
|
|
}
|
||
|
|
|
||
|
|
getUserMessage(): string {
|
||
|
|
const operationMap = {
|
||
|
|
load: '加载',
|
||
|
|
activate: '激活',
|
||
|
|
deactivate: '停用',
|
||
|
|
execute: '执行'
|
||
|
|
};
|
||
|
|
|
||
|
|
const operationText = this.operation ? operationMap[this.operation] : '操作';
|
||
|
|
const pluginText = this.pluginName || this.pluginId || '插件';
|
||
|
|
|
||
|
|
return `${pluginText}${operationText}失败: ${this.message}`;
|
||
|
|
}
|
||
|
|
|
||
|
|
static loadFailed(pluginId: string, error?: Error): PluginError {
|
||
|
|
return new PluginError(
|
||
|
|
error?.message || '插件加载失败',
|
||
|
|
pluginId,
|
||
|
|
undefined,
|
||
|
|
'load',
|
||
|
|
error
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
static activateFailed(pluginId: string, pluginName: string, error?: Error): PluginError {
|
||
|
|
return new PluginError(
|
||
|
|
error?.message || '插件激活失败',
|
||
|
|
pluginId,
|
||
|
|
pluginName,
|
||
|
|
'activate',
|
||
|
|
error
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
static executeFailed(pluginId: string, error?: Error): PluginError {
|
||
|
|
return new PluginError(
|
||
|
|
error?.message || '插件执行失败',
|
||
|
|
pluginId,
|
||
|
|
undefined,
|
||
|
|
'execute',
|
||
|
|
error
|
||
|
|
);
|
||
|
|
}
|
||
|
|
}
|