Initial commit

This commit is contained in:
Zhongwei Li
2025-11-30 09:04:14 +08:00
commit 70c36b5eff
248 changed files with 47482 additions and 0 deletions

View File

@@ -0,0 +1,90 @@
import { Hook } from '@oclif/core'
/**
* oclif Hook Types:
* - init: Runs before any command
* - prerun: Runs before a command's run method
* - postrun: Runs after a command's run method
* - command_not_found: Runs when command not found
*/
/**
* Init hook - runs before any command
*/
export const init: Hook<'init'> = async function (opts) {
// Access configuration
const { config } = opts
// Plugin initialization logic
this.log('Plugin {{PLUGIN_NAME}} initialized')
// Example: Check for required environment variables
if (!process.env.PLUGIN_API_KEY) {
this.warn('PLUGIN_API_KEY not set - some features may not work')
}
// Example: Load plugin configuration
try {
// Load config from default locations
} catch (error) {
this.debug('Failed to load plugin config')
}
}
/**
* Prerun hook - runs before each command
*/
export const prerun: Hook<'prerun'> = async function (opts) {
const { Command, argv } = opts
// Log command execution (in debug mode)
this.debug(`Executing command: ${Command.id}`)
// Example: Validate environment before running commands
// Example: Log analytics
// Example: Check for updates
}
/**
* Postrun hook - runs after each command
*/
export const postrun: Hook<'postrun'> = async function (opts) {
const { Command } = opts
this.debug(`Command completed: ${Command.id}`)
// Example: Cleanup operations
// Example: Log analytics
// Example: Cache results
}
/**
* Command not found hook - runs when command doesn't exist
*/
export const command_not_found: Hook<'command_not_found'> = async function (opts) {
const { id } = opts
this.log(`Command "${id}" not found`)
// Example: Suggest similar commands
const suggestions = this.config.commands
.filter(c => c.id.includes(id) || id.includes(c.id))
.map(c => c.id)
.slice(0, 5)
if (suggestions.length > 0) {
this.log('\nDid you mean one of these?')
suggestions.forEach(s => this.log(` - ${s}`))
}
// Example: Check if command is in a plugin that's not installed
// Example: Suggest installing missing plugin
}
/**
* Custom plugin-specific hooks
* Export them and register in package.json oclif.hooks
*/
export const customHook = async function (opts: any) {
// Custom hook logic
}