43 lines
1.5 KiB
Bash
Executable File
43 lines
1.5 KiB
Bash
Executable File
#!/bin/sh
|
|
# Dev launcher for the omp CLI, installed by `bun run setup`.
|
|
#
|
|
# Problem it solves: Bun reads `bunfig.toml` from the *current working
|
|
# directory* at startup and evaluates its `preload` entries before running the
|
|
# script. A bun-shebang bin (what `bun link` creates for `src/cli.ts`)
|
|
# therefore inherits whatever `preload` the directory you happen to be in
|
|
# declares. Running `omp`/`pi` inside an unrelated Bun project can execute — and
|
|
# crash on — that project's preload, e.g.
|
|
# error: Cannot find module '@v12sh/utils/frontmatter' from '.../loader.ts'
|
|
#
|
|
# Bun only reads the *exact* cwd (it does not walk parents) and ignores
|
|
# `--config`/`BUN_BE_BUN` for this, so the fix is to launch Bun from an empty,
|
|
# bunfig-free directory and restore the real cwd inside the process via the
|
|
# preload shim alongside this file.
|
|
set -e
|
|
|
|
# Resolve this script's real location even when invoked through a symlink
|
|
# (`$HOME/.bun/bin/omp` -> this file).
|
|
self=$0
|
|
while [ -L "$self" ]; do
|
|
link=$(readlink "$self")
|
|
case $link in
|
|
/*) self=$link ;;
|
|
*) self=$(dirname "$self")/$link ;;
|
|
esac
|
|
done
|
|
scripts_dir=$(CDPATH= cd -- "$(dirname -- "$self")" && pwd -P)
|
|
cli=$scripts_dir/../src/cli.ts
|
|
preload=$scripts_dir/omp.ts
|
|
timing_preload=$scripts_dir/../../utils/src/module-timer.ts
|
|
|
|
launch_dir=${OMP_DEV_LAUNCH_DIR:-${HOME}/.omp/.dev-cwd}
|
|
mkdir -p "$launch_dir"
|
|
|
|
OMP_LAUNCH_CWD=$PWD
|
|
export OMP_LAUNCH_CWD
|
|
cd "$launch_dir"
|
|
if [ -n "${PI_TIMING:-}" ]; then
|
|
exec bun --preload "$preload" --preload "$timing_preload" "$cli" "$@"
|
|
fi
|
|
exec bun --preload "$preload" "$cli" "$@"
|