From bc3066a890213dffff3de6a5a37bbe116944bfe0 Mon Sep 17 00:00:00 2001 From: "fatih.bulut" Date: Sun, 21 Jun 2026 02:00:26 +0300 Subject: [PATCH] feat(clone-app): add extract-package.sh URL parser with tests --- .../clone-app/scripts/extract-package.sh | 23 ++++++++++++++++ .../clone-app/tests/test-extract-package.sh | 26 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100755 plugins/clone-app/skills/clone-app/scripts/extract-package.sh create mode 100644 plugins/clone-app/tests/test-extract-package.sh diff --git a/plugins/clone-app/skills/clone-app/scripts/extract-package.sh b/plugins/clone-app/skills/clone-app/scripts/extract-package.sh new file mode 100755 index 0000000..844647a --- /dev/null +++ b/plugins/clone-app/skills/clone-app/scripts/extract-package.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +set -euo pipefail + +input="${1:-}" +if [[ -z "$input" ]]; then + echo "ERROR: usage: extract-package.sh " >&2 + exit 1 +fi + +# Case 1: full URL containing id= +if [[ "$input" =~ id=([a-zA-Z0-9._]+) ]]; then + echo "${BASH_REMATCH[1]}" + exit 0 +fi + +# Case 2: already a bare package (must contain a dot, valid chars only) +if [[ "$input" =~ ^[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)+$ ]]; then + echo "$input" + exit 0 +fi + +echo "ERROR: could not extract package from '$input'" >&2 +exit 1 diff --git a/plugins/clone-app/tests/test-extract-package.sh b/plugins/clone-app/tests/test-extract-package.sh new file mode 100644 index 0000000..718e3e0 --- /dev/null +++ b/plugins/clone-app/tests/test-extract-package.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +set -uo pipefail +SCRIPT="$(dirname "$0")/../skills/clone-app/scripts/extract-package.sh" +fail=0 +check() { + local desc="$1" expected="$2" actual="$3" + if [[ "$expected" == "$actual" ]]; then + echo "PASS: $desc" + else + echo "FAIL: $desc — expected '$expected' got '$actual'"; fail=1 + fi +} + +check "full url" "com.example.app" \ + "$(bash "$SCRIPT" 'https://play.google.com/store/apps/details?id=com.example.app')" +check "url with extra params" "com.whatsapp" \ + "$(bash "$SCRIPT" 'https://play.google.com/store/apps/details?id=com.whatsapp&hl=en&gl=US')" +check "bare package passthrough" "com.spotify.music" \ + "$(bash "$SCRIPT" 'com.spotify.music')" + +# invalid input → exit 1, empty stdout +out="$(bash "$SCRIPT" 'not a url' 2>/dev/null)"; rc=$? +check "invalid exit code" "1" "$rc" +check "invalid empty stdout" "" "$out" + +exit $fail