Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
142 lines
4.2 KiB
Bash
Executable File
142 lines
4.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Genereert een Tampermonkey dev-loader voor een script uit deze repo.
|
|
# De stub bevat alleen metadata; de code komt via @require uit de repo-file,
|
|
# die daarmee de enige bron van waarheid blijft.
|
|
#
|
|
# Gebruik: bin/dev-stub <scriptmap> [--no-copy]
|
|
# bin/dev-stub bipp-budgetcode
|
|
# bin/dev-stub scripts/select-search --no-copy
|
|
set -euo pipefail
|
|
|
|
usage() {
|
|
cat <<'USAGE'
|
|
Gebruik: bin/dev-stub <scriptmap> [opties]
|
|
|
|
<scriptmap> naam onder scripts/, of een pad naar de map
|
|
|
|
Opties:
|
|
--no-copy, -n niet naar het klembord, alleen naar stdout
|
|
--list, -l toon de beschikbare scriptmappen
|
|
--help, -h deze uitleg
|
|
USAGE
|
|
}
|
|
|
|
here="$(cd "$(dirname "$0")/.." && pwd)"
|
|
copy=1
|
|
target=""
|
|
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
--no-copy|-n) copy=0 ;;
|
|
--list|-l)
|
|
for d in "$here"/scripts/*/; do
|
|
[ -d "$d" ] && basename "$d"
|
|
done
|
|
exit 0
|
|
;;
|
|
--help|-h) usage; exit 0 ;;
|
|
-*) echo "dev-stub: onbekende optie: $1" >&2; usage >&2; exit 2 ;;
|
|
*)
|
|
if [ -n "$target" ]; then
|
|
echo "dev-stub: geef één scriptmap op" >&2
|
|
exit 2
|
|
fi
|
|
target="$1"
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [ -z "$target" ]; then
|
|
echo "dev-stub: geen scriptmap opgegeven" >&2
|
|
usage >&2
|
|
exit 2
|
|
fi
|
|
|
|
dir="$target"
|
|
[ -d "$dir" ] || dir="$here/scripts/$(basename "$target")"
|
|
if [ ! -d "$dir" ]; then
|
|
echo "dev-stub: map niet gevonden: $target (zie --list)" >&2
|
|
exit 1
|
|
fi
|
|
dir="$(cd "$dir" && pwd)"
|
|
|
|
src=""
|
|
for f in "$dir"/*.user.js; do
|
|
[ -f "$f" ] && src="$f" && break
|
|
done
|
|
if [ -z "$src" ]; then
|
|
echo "dev-stub: geen *.user.js in $dir" >&2
|
|
echo "dev-stub: bij een script met een build: draai eerst ./build.sh" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Heeft de map een build, dan wijst @require naar de bron in plaats van naar het
|
|
# gebouwde bestand: zo volstaat opslaan en de pagina herladen, zonder build.sh
|
|
# ertussen. De metadata blijft wel uit het gebouwde script komen, want de bron
|
|
# heeft geen ==UserScript==-blok.
|
|
code="$src"
|
|
if [ -f "$dir/src/$(basename "$dir").js" ]; then
|
|
code="$dir/src/$(basename "$dir").js"
|
|
fi
|
|
|
|
# Eén metadataveld uit de kop van het echte script halen.
|
|
meta() {
|
|
sed -n 's|^// @'"$1"' *\(.*[^ ]\) *$|\1|p' "$src"
|
|
}
|
|
|
|
name="$(meta name | head -1)"
|
|
namespace="$(meta namespace | head -1)"
|
|
author="$(meta author | head -1)"
|
|
|
|
if [ -z "$name" ]; then
|
|
echo "dev-stub: @name ontbreekt in $src" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# @downloadURL en @updateURL staan er allebei bewust NIET in. @updateURL none is geen
|
|
# oplossing: Tampermonkey markeert het ontbrekende @downloadURL dan in de editor, en de
|
|
# stub is lokaal, dus er is niets te downloaden of bij te werken.
|
|
{
|
|
echo "// ==UserScript=="
|
|
printf '// @name %s\n' "$name"
|
|
[ -n "$namespace" ] && printf '// @namespace %s\n' "$namespace"
|
|
# Vaste versie, losgekoppeld van het echte script. De code komt bij elke pagina-load
|
|
# van schijf, dus een nummer hier zou hooguit suggereren dat er iets vastligt. De kolom
|
|
# hoeft alleen -dev te tonen, en zo hoeft de stub niet mee met elke @version-bump.
|
|
printf '// @version 0.0.0-dev\n'
|
|
printf '// @description Dev-loader. De code staat in de repo, dit bestand wijst er alleen naar.\n'
|
|
[ -n "$author" ] && printf '// @author %s\n' "$author"
|
|
for key in match include exclude; do
|
|
meta "$key" | while IFS= read -r value; do
|
|
[ -n "$value" ] && printf '// @%-12s %s\n' "$key" "$value"
|
|
done
|
|
done
|
|
# Bestaande externe @require en @resource eerst, want de code eronder rekent erop.
|
|
meta require | while IFS= read -r value; do
|
|
case "$value" in
|
|
file://*) ;;
|
|
"") ;;
|
|
*) printf '// @%-12s %s\n' require "$value" ;;
|
|
esac
|
|
done
|
|
meta resource | while IFS= read -r value; do
|
|
[ -n "$value" ] && printf '// @%-12s %s\n' resource "$value"
|
|
done
|
|
printf '// @%-12s file://%s\n' require "$code"
|
|
for key in grant connect run-at noframes; do
|
|
meta "$key" | while IFS= read -r value; do
|
|
[ -n "$value" ] && printf '// @%-12s %s\n' "$key" "$value"
|
|
done
|
|
done
|
|
echo "// ==/UserScript=="
|
|
} > "$dir/.dev-stub.tmp"
|
|
|
|
cat "$dir/.dev-stub.tmp"
|
|
if [ "$copy" -eq 1 ] && command -v pbcopy >/dev/null 2>&1; then
|
|
pbcopy < "$dir/.dev-stub.tmp"
|
|
echo >&2
|
|
echo "dev-stub: staat op het klembord" >&2
|
|
fi
|
|
rm -f "$dir/.dev-stub.tmp"
|