@contrast/patcher
高级猴子补丁:登记钩子在前、前后运行 函数、方法和类构造器.
使用量
@contrast/agentify 将补丁编成核心 core.patcher。 。 。 .
// patch a method in place; returns the object
core.patcher.patch(obj, 'method', {
name: 'lib.obj.method',
patchType: 'assess-dataflow-source',
pre(data) {},
around(next, data) { return next(); },
post(data) {},
});
// patch a function (or class constructor) directly; returns the patched function
const patched = core.patcher.patch(fn, { name: 'lib.fn', patchType: 'protect-input-analysis', post(data) {} });
选项
name(需要):识别补丁功能,例如.'http.Server.prototype.emit'。 。 。 .patchType(需要):仪器类,例如.assess-dataflow-source或者说protect-input-analysis。 。 。 .pre(data):在原作之前运行.around(next, data):包裹原作. 打电话next()运行( 或下一个)around钩子)并还取出结果.post(data):运行在原作后.data.result持有返回值,并给它分配更改呼叫者收到的金额.
虎克数据包括: args, (中文(简体) ), obj (单位:千美元) this 数值, orig (原始内容
函数), hooked (补丁函数), name,以及 funcKey。 。 。 .
钩是按键 `${patchType}:${name}`。再次补丁相同的函数
相同的密钥会被忽略, 因此不同的特性可以钩住一个函数
使用不同的 patchType 数值.
unpatch(fn, name, patchType) 移除一个钩子, unwrap(fn) 返回时
原始函数,以及 isContrastHooked(fn) 报告函数是否为
补齐了 类型定义为 lib/index.d.ts。 。 。 .