68 lines
2.3 KiB
JavaScript
68 lines
2.3 KiB
JavaScript
(function initEasterEggRegistry(global) {
|
||
/**
|
||
* 一个极简的彩蛋注册表,用于在主应用与各特效实现之间解耦。
|
||
* 每个特效需要调用 register(effectName, factory),factory 必须返回带有 destroy 方法的实例。
|
||
*/
|
||
const registry = {
|
||
effects: Object.create(null),
|
||
|
||
/**
|
||
* 注册彩蛋。
|
||
* @param {string} effectName
|
||
* @param {(context: object) => { destroy: Function }} factory
|
||
*/
|
||
register(effectName, factory) {
|
||
const key = (effectName || '').trim().toLowerCase();
|
||
if (!key) {
|
||
console.warn('[EasterEggRegistry] 忽略空 effectName');
|
||
return;
|
||
}
|
||
if (typeof factory !== 'function') {
|
||
console.warn('[EasterEggRegistry] 注册失败,factory 不是函数:', effectName);
|
||
return;
|
||
}
|
||
this.effects[key] = factory;
|
||
},
|
||
|
||
/**
|
||
* 创建彩蛋实例。
|
||
* @param {string} effectName
|
||
* @param {object} context
|
||
* @returns {object|null}
|
||
*/
|
||
start(effectName, context = {}) {
|
||
const key = (effectName || '').trim().toLowerCase();
|
||
const factory = this.effects[key];
|
||
if (!factory) {
|
||
console.warn('[EasterEggRegistry] 未找到特效:', effectName);
|
||
return null;
|
||
}
|
||
try {
|
||
const instance = factory({
|
||
...context,
|
||
effect: key,
|
||
});
|
||
if (!instance || typeof instance.destroy !== 'function') {
|
||
console.warn('[EasterEggRegistry] 特效未返回 destroy 方法:', effectName);
|
||
return null;
|
||
}
|
||
return instance;
|
||
} catch (error) {
|
||
console.error('[EasterEggRegistry] 特效初始化失败:', effectName, error);
|
||
return null;
|
||
}
|
||
},
|
||
|
||
has(effectName) {
|
||
const key = (effectName || '').trim().toLowerCase();
|
||
return Boolean(this.effects[key]);
|
||
},
|
||
|
||
list() {
|
||
return Object.keys(this.effects);
|
||
},
|
||
};
|
||
|
||
global.EasterEggRegistry = registry;
|
||
})(window);
|