@arkstack/foundry
Arkstack生态系统的可扩展性原始和框架内部. 这个软件包提供了塑造Arkstack在运行时的行为的工具. 虎克、生命周期拦截和公用事业,旨在扩展和调整框架而不修改其核心.
安装
pnpm add @arkstack/foundry
模块
钩子
src/Hook.ts
一个全球性的,命名为"钩子"的注册,用于扩展Arkstack内部而不修改核心代码. 虎克按下名称并辅以位置槽(before, (中文(简体) ), after,或任何自定义字符串)。 每个进程有一个登记册: @arkstack/common 再出口这个相同 Hook。 。 。 .
Hook.on(name, positions)
对钩子位置进行回调 注册同名再次合并:只增加或替换所提供的位置.
import { Hook } from '@arkstack/foundry'
Hook.on('request:handle', {
before: (ctx) => console.log('before handler'),
after: (ctx) => console.log('after handler'),
})
Hook.emit(name, pos, ...args)
使用给定的参数调用一个位置,并返回其结果: 承诺一个同声钩, 这样它就可以等待了 。 当没有注册时,它什么都不做,返回 undefined,所以呼叫者需要没有 has() 检查.
await Hook.emit('request:handle', 'before', ctx)
Hook.get(name, pos?)
取出全钩物体或一个位置的回调,而不用取出.
const hook = Hook.get('request:handle') // IHook | undefined
const before = Hook.get('request:handle', 'before') // function | undefined
Hook.has(name, pos?)
检查是否有钩(或其中的特定位置).
Hook.has('request:handle') // true | false
Hook.has('request:handle', 'after') // true | false
Hook.off(name?, pos?)
删除钩或单位. 一个没有位置的钩子会被删除 。 毫无争议地称呼它 清除每一个钩子; 一个没有注册的名字是无.
Hook.off('request:handle', 'before') // removes only the 'before' callback
Hook.off('request:handle') // removes the entire hook
Hook.off() // clears all hooks
Hook.all()
返回所有已注册的钩作为纯记录 .
const hooks = Hook.all()
// { 'request:handle': { before: fn, after: fn } }
Hook.clear()
清除所有注册的钩子.
折旧的别名
set() → on(), (中文(简体) ), unset() → off(), (中文(简体) ), getAll() → all()。 。 。 . get(name, pos, ...args) 参数仍然叫钩子,但使用 emit()· ; get() 只能找回来.