#!/bin/sh
# dsh launcher: runs the apps/cli `dsh` bin FROM SOURCE through the tsx ESM
# hook, so a symlink from anywhere (e.g. ~/.local/bin/dsh) always executes the
# current working tree without a build step.
set -eu

# Resolve symlink chains without readlink -f (not on every macOS).
script=$0
while [ -L "$script" ]; do
  target=$(readlink "$script")
  case $target in
    /*) script=$target ;;
    *) script=$(dirname "$script")/$target ;;
  esac
done
root=$(CDPATH='' cd -- "$(dirname -- "$script")/.." && pwd)

# The ESM-only tsx hook transforms TypeScript and projects this checkout's
# tsconfig paths into Node resolution (the CJS hook stays off: the graph is
# ESM-only and the CJS resolver costs ~0.4s of startup). Absolute paths keep
# both the hook and the tsconfig anchored to this checkout when the launcher
# runs from any cwd, where bare `tsx/esm` would not resolve.
TSX_TSCONFIG_PATH="$root/tsconfig.json" \
  exec node --import "$root/node_modules/tsx/dist/esm/index.mjs" \
  "$root/apps/cli/src/bin.ts" "$@"
