UNPKG

@meta2d/core

Version:

@meta2d/core: Powerful, Beautiful, Simple, Open - Web-Based 2D At Its Best .

58 lines 2.08 kB
// 该文件为penPlugin的相关文件 /** * @description 闭包 重写 pen的生命周期,为了追加回调函数 * @return 生命周期操作函数,可在原生命周期回调函数基础上进行执行多个函数,可通过传参,设置函数的增加和删除,类似addEventListener 和 removeEventListener * @bug 漏洞:后面的生命周期无法将前面的生命周期需要的参数正确传递 */ function rewritePenLifeCycle() { let funcMap = null; let funcPenMap = new WeakMap(); return (pen, lifeCycle, func, del = false) => { if (funcPenMap.has(pen) && funcPenMap.get(pen)) { funcMap = funcPenMap.get(pen); } else { funcPenMap.set(pen, funcMap = new Map()); } if (typeof func !== "function") return () => { console.warn('[rewritePenLifeCycle] warn: not a function '); }; let funcListSet = new Set(); let originFuncMap = new Map(); // 原始事件回调Map if (funcMap.has(lifeCycle) && funcMap.get(lifeCycle)) { funcListSet = funcMap.get(lifeCycle); } else { originFuncMap.set(lifeCycle, pen[lifeCycle]); funcMap.set(lifeCycle, funcListSet); } if (del) { funcListSet.delete(func); } else { funcListSet.add(func); } let originLifeCycle = originFuncMap.get(lifeCycle); // 原始事件; let rewriteFunc = (...args) => { originLifeCycle?.(...args); funcListSet.forEach(i => { // @ts-ignore i(...args); }); }; pen[lifeCycle] = rewriteFunc; }; } export let setLifeCycleFunc = rewritePenLifeCycle(); /** * @description 校验插件*/ export function validationPlugin(plugin) { // 校验penPlugin if (!plugin.name && !plugin.install) { console.error('installPenPlugin Error: Validation Failed'); return false; } return true; } //# sourceMappingURL=plugin.js.map