- Add snake-case.ts: objectToSnakeCase, objectToCamelCase utilities - Add tool-name.ts: transformToolName with PascalCase conversion - Add pattern-matcher.ts: findMatchingHooks for hook config matching - Add hook-disabled.ts: isHookDisabled for hook config validation - Add temporary stub types at src/hooks/claude-code-hooks/types.ts - Export all new utilities from src/shared/index.ts Stub types will be replaced with full implementation in Task 1. Import paths adjusted from opencode-cc-plugin structure to oh-my-opencode. 🤖 GENERATED WITH ASSISTANCE OF [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)
30 lines
855 B
TypeScript
30 lines
855 B
TypeScript
import type { ClaudeHooksConfig, HookMatcher } from "../hooks/claude-code-hooks/types"
|
|
|
|
export function matchesToolMatcher(toolName: string, matcher: string): boolean {
|
|
if (!matcher) {
|
|
return true
|
|
}
|
|
const patterns = matcher.split("|").map((p) => p.trim())
|
|
return patterns.some((p) => {
|
|
if (p.includes("*")) {
|
|
const regex = new RegExp(`^${p.replace(/\*/g, ".*")}$`, "i")
|
|
return regex.test(toolName)
|
|
}
|
|
return p.toLowerCase() === toolName.toLowerCase()
|
|
})
|
|
}
|
|
|
|
export function findMatchingHooks(
|
|
config: ClaudeHooksConfig,
|
|
eventName: keyof ClaudeHooksConfig,
|
|
toolName?: string
|
|
): HookMatcher[] {
|
|
const hookMatchers = config[eventName]
|
|
if (!hookMatchers) return []
|
|
|
|
return hookMatchers.filter((hookMatcher) => {
|
|
if (!toolName) return true
|
|
return matchesToolMatcher(toolName, hookMatcher.matcher)
|
|
})
|
|
}
|