( plugins: readonly Plugin[], )
| 173 | } |
| 174 | |
| 175 | export function createPluginHookUtils( |
| 176 | plugins: readonly Plugin[], |
| 177 | ): PluginHookUtils { |
| 178 | // sort plugins per hook |
| 179 | const sortedPluginsCache = new Map<keyof Plugin, Plugin[]>() |
| 180 | function getSortedPlugins<K extends keyof Plugin>( |
| 181 | hookName: K, |
| 182 | ): PluginWithRequiredHook<K>[] { |
| 183 | if (sortedPluginsCache.has(hookName)) |
| 184 | return sortedPluginsCache.get(hookName) as PluginWithRequiredHook<K>[] |
| 185 | const sorted = getSortedPluginsByHook(hookName, plugins) |
| 186 | sortedPluginsCache.set(hookName, sorted) |
| 187 | return sorted |
| 188 | } |
| 189 | function getSortedPluginHooks<K extends keyof Plugin>( |
| 190 | hookName: K, |
| 191 | ): NonNullable<HookHandler<Plugin[K]>>[] { |
| 192 | const plugins = getSortedPlugins(hookName) |
| 193 | return plugins.map((p) => getHookHandler(p[hookName])).filter(Boolean) |
| 194 | } |
| 195 | |
| 196 | return { |
| 197 | getSortedPlugins, |
| 198 | getSortedPluginHooks, |
| 199 | } |
| 200 | } |
| 201 | |
| 202 | export function getSortedPluginsByHook<K extends keyof Plugin>( |
| 203 | hookName: K, |
no outgoing calls
no test coverage detected