141 lines
4.5 KiB
Bash
141 lines
4.5 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# Configuration
|
|
ENABLE_LOG_ROTATION="true"
|
|
LOG_RETENTION_COUNT=5
|
|
|
|
# Setup paths
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
LOG_DIR="${SCRIPT_DIR}/logs"
|
|
mkdir -p "${LOG_DIR}"
|
|
|
|
# Log rotation
|
|
if [ "${ENABLE_LOG_ROTATION}" = "true" ]; then
|
|
ls -tp "${LOG_DIR}/native_host_wrapper_macos_"* 2>/dev/null | tail -n +$((LOG_RETENTION_COUNT + 1)) | xargs -I {} rm -- {}
|
|
ls -tp "${LOG_DIR}/native_host_stderr_macos_"* 2>/dev/null | tail -n +$((LOG_RETENTION_COUNT + 1)) | xargs -I {} rm -- {}
|
|
fi
|
|
|
|
# Logging setup
|
|
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
|
WRAPPER_LOG="${LOG_DIR}/native_host_wrapper_macos_${TIMESTAMP}.log"
|
|
STDERR_LOG="${LOG_DIR}/native_host_stderr_macos_${TIMESTAMP}.log"
|
|
NODE_SCRIPT="${SCRIPT_DIR}/index.js"
|
|
|
|
# Initial logging
|
|
{
|
|
echo "--- Wrapper script called at $(date) ---"
|
|
echo "SCRIPT_DIR: ${SCRIPT_DIR}"
|
|
echo "LOG_DIR: ${LOG_DIR}"
|
|
echo "NODE_SCRIPT: ${NODE_SCRIPT}"
|
|
echo "Initial PATH: ${PATH}"
|
|
echo "User: $(whoami)"
|
|
echo "Current PWD: $(pwd)"
|
|
} > "${WRAPPER_LOG}"
|
|
|
|
# Node.js discovery
|
|
NODE_EXEC=""
|
|
|
|
# Priority 1: Installation-time node path
|
|
NODE_PATH_FILE="${SCRIPT_DIR}/node_path.txt"
|
|
echo "Searching for Node.js..." >> "${WRAPPER_LOG}"
|
|
echo "[Priority 1] Checking installation-time node path" >> "${WRAPPER_LOG}"
|
|
if [ -f "${NODE_PATH_FILE}" ]; then
|
|
EXPECTED_NODE=$(cat "${NODE_PATH_FILE}" 2>/dev/null | tr -d '\n\r')
|
|
if [ -n "${EXPECTED_NODE}" ] && [ -x "${EXPECTED_NODE}" ]; then
|
|
NODE_EXEC="${EXPECTED_NODE}"
|
|
echo "Found installation-time node at ${NODE_EXEC}" >> "${WRAPPER_LOG}"
|
|
fi
|
|
fi
|
|
|
|
# Priority 1.5: Fallback to relative path
|
|
if [ -z "${NODE_EXEC}" ]; then
|
|
EXPECTED_NODE="${SCRIPT_DIR}/../../../bin/node"
|
|
echo "[Priority 1.5] Checking relative path" >> "${WRAPPER_LOG}"
|
|
if [ -x "${EXPECTED_NODE}" ]; then
|
|
NODE_EXEC="${EXPECTED_NODE}"
|
|
echo "Found node at relative path: ${NODE_EXEC}" >> "${WRAPPER_LOG}"
|
|
fi
|
|
fi
|
|
|
|
# Priority 2: NVM
|
|
if [ -z "${NODE_EXEC}" ]; then
|
|
echo "[Priority 2] Checking NVM" >> "${WRAPPER_LOG}"
|
|
NVM_DIR="$HOME/.nvm"
|
|
if [ -d "${NVM_DIR}" ]; then
|
|
# Try default version first
|
|
if [ -L "${NVM_DIR}/alias/default" ]; then
|
|
NVM_DEFAULT_VERSION=$(readlink "${NVM_DIR}/alias/default")
|
|
NVM_DEFAULT_NODE="${NVM_DIR}/versions/node/${NVM_DEFAULT_VERSION}/bin/node"
|
|
if [ -x "${NVM_DEFAULT_NODE}" ]; then
|
|
NODE_EXEC="${NVM_DEFAULT_NODE}"
|
|
echo "Found NVM default node: ${NODE_EXEC}" >> "${WRAPPER_LOG}"
|
|
fi
|
|
fi
|
|
|
|
# Fallback to latest version
|
|
if [ -z "${NODE_EXEC}" ]; then
|
|
LATEST_NVM_VERSION_PATH=$(ls -d ${NVM_DIR}/versions/node/v* 2>/dev/null | sort -V | tail -n 1)
|
|
if [ -n "${LATEST_NVM_VERSION_PATH}" ] && [ -x "${LATEST_NVM_VERSION_PATH}/bin/node" ]; then
|
|
NODE_EXEC="${LATEST_NVM_VERSION_PATH}/bin/node"
|
|
echo "Found NVM latest node: ${NODE_EXEC}" >> "${WRAPPER_LOG}"
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Priority 3: Common paths
|
|
if [ -z "${NODE_EXEC}" ]; then
|
|
echo "[Priority 3] Checking common paths" >> "${WRAPPER_LOG}"
|
|
COMMON_NODE_PATHS=(
|
|
"/opt/homebrew/bin/node"
|
|
"/usr/local/bin/node"
|
|
)
|
|
for path_to_node in "${COMMON_NODE_PATHS[@]}"; do
|
|
if [ -x "${path_to_node}" ]; then
|
|
NODE_EXEC="${path_to_node}"
|
|
echo "Found node at: ${NODE_EXEC}" >> "${WRAPPER_LOG}"
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# Priority 4: command -v
|
|
if [ -z "${NODE_EXEC}" ]; then
|
|
echo "[Priority 4] Trying 'command -v node'" >> "${WRAPPER_LOG}"
|
|
if command -v node &>/dev/null; then
|
|
NODE_EXEC=$(command -v node)
|
|
echo "Found node using 'command -v': ${NODE_EXEC}" >> "${WRAPPER_LOG}"
|
|
fi
|
|
fi
|
|
|
|
# Priority 5: PATH search
|
|
if [ -z "${NODE_EXEC}" ]; then
|
|
echo "[Priority 5] Searching PATH" >> "${WRAPPER_LOG}"
|
|
OLD_IFS=$IFS
|
|
IFS=:
|
|
for path_in_env in $PATH; do
|
|
if [ -x "${path_in_env}/node" ]; then
|
|
NODE_EXEC="${path_in_env}/node"
|
|
echo "Found node in PATH: ${NODE_EXEC}" >> "${WRAPPER_LOG}"
|
|
break
|
|
fi
|
|
done
|
|
IFS=$OLD_IFS
|
|
fi
|
|
|
|
# Execution
|
|
if [ -z "${NODE_EXEC}" ]; then
|
|
{
|
|
echo "ERROR: Node.js executable not found!"
|
|
echo "Searched: installation path, relative path, NVM, common paths, command -v, PATH"
|
|
} >> "${WRAPPER_LOG}"
|
|
exit 1
|
|
fi
|
|
|
|
{
|
|
echo "Using Node executable: ${NODE_EXEC}"
|
|
echo "Node version: $(${NODE_EXEC} -v)"
|
|
echo "Executing: ${NODE_EXEC} ${NODE_SCRIPT}"
|
|
} >> "${WRAPPER_LOG}"
|
|
|
|
exec "${NODE_EXEC}" "${NODE_SCRIPT}" 2>> "${STDERR_LOG}" |