bin/dev-stub: genereer een Tampermonkey-loader voor een script uit de repo
Met een geplakte kopie in Tampermonkey zijn er twee waarheden die stil uit elkaar lopen. Deze stub bevat alleen metadata en haalt de code via @require uit de repo-file, zodat die file de enige bron blijft en opslaan in je editor genoeg is. De metadata komt uit de stub en niet uit de required file, dus @match, @grant en @run-at worden overgenomen uit het echte script. @downloadURL en @updateURL blijven weg, anders overschrijft Tampermonkey de stub bij de eerste update-check met de volledige raw-versie. De stub gaat meteen naar het klembord. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
785ce600da
commit
338da6378e
Executable
+129
@@ -0,0 +1,129 @@
|
|||||||
|
#!/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
|
||||||
|
|
||||||
|
# Eén metadataveld uit de kop van het echte script halen.
|
||||||
|
meta() {
|
||||||
|
sed -n 's|^// @'"$1"' *\(.*[^ ]\) *$|\1|p' "$src"
|
||||||
|
}
|
||||||
|
|
||||||
|
name="$(meta name | head -1)"
|
||||||
|
version="$(meta version | head -1)"
|
||||||
|
namespace="$(meta namespace | head -1)"
|
||||||
|
author="$(meta author | head -1)"
|
||||||
|
|
||||||
|
if [ -z "$name" ] || [ -z "$version" ]; then
|
||||||
|
echo "dev-stub: @name of @version ontbreekt in $src" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# @downloadURL en @updateURL komen er bewust NIET in: Tampermonkey zou de stub
|
||||||
|
# dan bij de eerste update-check overschrijven met de volledige raw-versie.
|
||||||
|
{
|
||||||
|
echo "// ==UserScript=="
|
||||||
|
printf '// @name %s\n' "$name"
|
||||||
|
[ -n "$namespace" ] && printf '// @namespace %s\n' "$namespace"
|
||||||
|
printf '// @version %s-dev\n' "${version%-dev}"
|
||||||
|
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 "$src"
|
||||||
|
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"
|
||||||
Reference in New Issue
Block a user