chore: crush git history - reborn from consolidation on 2026-03-10
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
import type { RouteContract } from '../types.js'
|
||||
/**
|
||||
* Plugin Contract Types
|
||||
* Types for plugin contract system and composed contracts.
|
||||
*/
|
||||
export interface PluginContractSpec {
|
||||
/** Route path prefix pattern. Supports wildcards: '/api/**' matches '/api/users' */
|
||||
readonly appliesTo: string
|
||||
/** Contracts organized by hook phase */
|
||||
readonly hooks: {
|
||||
readonly [phase: string]: {
|
||||
/** Preconditions that must hold before this phase executes */
|
||||
readonly requires?: readonly string[]
|
||||
/** Postconditions that must hold after this phase executes */
|
||||
readonly ensures?: readonly string[]
|
||||
}
|
||||
}
|
||||
/** Plugin metadata for diagnostics */
|
||||
readonly meta?: {
|
||||
readonly name?: string
|
||||
readonly version?: string
|
||||
readonly description?: string
|
||||
}
|
||||
/**
|
||||
* Lazy extension references — Apophis extensions this plugin needs.
|
||||
* Extensions are resolved at test time from the extension registry.
|
||||
* If a required extension is missing, the plugin's contracts are skipped with a warning.
|
||||
*/
|
||||
readonly extensions?: ReadonlyArray<{
|
||||
readonly name: string
|
||||
readonly required?: boolean
|
||||
}>
|
||||
}
|
||||
export interface ComposedContract {
|
||||
readonly route: RouteContract
|
||||
phases: {
|
||||
[phase: string]: {
|
||||
requires: Array<{ formula: string; source: 'route' | `plugin:${string}` }>
|
||||
ensures: Array<{ formula: string; source: 'route' | `plugin:${string}` }>
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user