29 lines
950 B
Bash
29 lines
950 B
Bash
#!/usr/bin/env bash
|
|
|
|
declare -A _LOADED_COMMANDS=() # Unused for now
|
|
readonly _COMMAND_NAMESPACE="cmd"
|
|
readonly _COMMAND_AUTO_LOAD_HOOK="on_load"
|
|
|
|
function command::namespace { echo "${_COMMAND_NAMESPACE}"; }
|
|
function command::fn { echo "$(command::namespace)::$(command::to_namespace "$1")::${2}"; }
|
|
function command::loaded() { [[ -n "${_LOADED_COMMANDS["$1"]:-}" ]]; }
|
|
function command::has_function() { declare -F "$(command::fn "$1" "$2")" >/dev/null 2>&1; }
|
|
function command::is_auto_load() { declare -F "$(command::fn "$1" on_load)" >/dev/null 2>&1; }
|
|
function command::to_namespace() { echo "${1//\//::}"; }
|
|
function command::exists() { command::has_function "$1" run; }
|
|
function command::run() {
|
|
local cmd="$1"
|
|
shift
|
|
|
|
hook::run "$cmd" pre
|
|
|
|
core::call_function "$(command::fn "$cmd" run)" "$@"
|
|
|
|
local exit_code=$?
|
|
if [[ $exit_code -eq 0 ]]; then
|
|
hook::run "$cmd" post
|
|
fi
|
|
|
|
return $exit_code
|
|
}
|
|
|