@juangadm/pre-post 0.2.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +102 -222
- package/dist/bin/cli.js +199 -347
- package/dist/bin/cli.js.map +1 -1
- package/dist/browser.d.ts +42 -11
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +371 -94
- package/dist/browser.js.map +1 -1
- package/dist/capture.d.ts +1 -6
- package/dist/capture.d.ts.map +1 -1
- package/dist/capture.js +12 -35
- package/dist/capture.js.map +1 -1
- package/dist/commands/compare.d.ts +18 -0
- package/dist/commands/compare.d.ts.map +1 -0
- package/dist/commands/compare.js +64 -0
- package/dist/commands/compare.js.map +1 -0
- package/dist/commands/detect.d.ts +20 -0
- package/dist/commands/detect.d.ts.map +1 -0
- package/dist/commands/detect.js +19 -0
- package/dist/commands/detect.js.map +1 -0
- package/dist/commands/doctor.d.ts +10 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +38 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/login.d.ts +6 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +34 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/pr.d.ts +28 -0
- package/dist/commands/pr.d.ts.map +1 -0
- package/dist/commands/pr.js +159 -0
- package/dist/commands/pr.js.map +1 -0
- package/dist/commands/prune.d.ts +10 -0
- package/dist/commands/prune.d.ts.map +1 -0
- package/dist/commands/prune.js +13 -0
- package/dist/commands/prune.js.map +1 -0
- package/dist/config.d.ts +36 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +60 -0
- package/dist/config.js.map +1 -0
- package/dist/diff-pool.d.ts +17 -0
- package/dist/diff-pool.d.ts.map +1 -0
- package/dist/diff-pool.js +89 -0
- package/dist/diff-pool.js.map +1 -0
- package/dist/diff-worker.d.ts +29 -0
- package/dist/diff-worker.d.ts.map +1 -0
- package/dist/diff-worker.js +38 -0
- package/dist/diff-worker.js.map +1 -0
- package/dist/diff.d.ts +37 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +171 -0
- package/dist/diff.js.map +1 -0
- package/dist/doctor.d.ts +38 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +72 -0
- package/dist/doctor.js.map +1 -0
- package/dist/errors.d.ts +38 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +59 -0
- package/dist/errors.js.map +1 -0
- package/dist/filename.d.ts +2 -0
- package/dist/filename.d.ts.map +1 -1
- package/dist/filename.js +2 -1
- package/dist/filename.js.map +1 -1
- package/dist/git.d.ts +23 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +86 -0
- package/dist/git.js.map +1 -0
- package/dist/github.d.ts +73 -0
- package/dist/github.d.ts.map +1 -0
- package/dist/github.js +240 -0
- package/dist/github.js.map +1 -0
- package/dist/index.d.ts +22 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -66
- package/dist/index.js.map +1 -1
- package/dist/pkg.d.ts +8 -0
- package/dist/pkg.d.ts.map +1 -0
- package/dist/pkg.js +35 -0
- package/dist/pkg.js.map +1 -0
- package/dist/report.d.ts +20 -0
- package/dist/report.d.ts.map +1 -0
- package/dist/report.js +107 -0
- package/dist/report.js.map +1 -0
- package/dist/routes/imports.d.ts +46 -0
- package/dist/routes/imports.d.ts.map +1 -0
- package/dist/routes/imports.js +208 -0
- package/dist/routes/imports.js.map +1 -0
- package/dist/routes/vite.d.ts +15 -0
- package/dist/routes/vite.d.ts.map +1 -0
- package/dist/routes/vite.js +130 -0
- package/dist/routes/vite.js.map +1 -0
- package/dist/routes.d.ts +41 -14
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +271 -141
- package/dist/routes.js.map +1 -1
- package/dist/run.d.ts +36 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +128 -0
- package/dist/run.js.map +1 -0
- package/dist/sessions.d.ts +50 -0
- package/dist/sessions.d.ts.map +1 -0
- package/dist/sessions.js +74 -0
- package/dist/sessions.js.map +1 -0
- package/dist/types.d.ts +118 -41
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- package/dist/viewport.d.ts +6 -1
- package/dist/viewport.d.ts.map +1 -1
- package/dist/viewport.js +13 -7
- package/dist/viewport.js.map +1 -1
- package/package.json +21 -13
- package/skill/SKILL.md +31 -229
- package/dist/clipboard.d.ts +0 -9
- package/dist/clipboard.d.ts.map +0 -1
- package/dist/clipboard.js +0 -26
- package/dist/clipboard.js.map +0 -1
- package/dist/upload.d.ts +0 -39
- package/dist/upload.d.ts.map +0 -1
- package/dist/upload.js +0 -149
- package/dist/upload.js.map +0 -1
- package/skill/scripts/adapters/0x0st.sh +0 -36
- package/skill/scripts/adapters/blob.sh +0 -55
- package/skill/scripts/adapters/git-native.sh +0 -51
- package/skill/scripts/upload-and-copy.sh +0 -230
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# upload-and-copy.sh - Upload images via pluggable storage adapters
|
|
3
|
-
# Usage: ./upload-and-copy.sh <before.png> <after.png> [--markdown]
|
|
4
|
-
#
|
|
5
|
-
# Options:
|
|
6
|
-
# --markdown Generate PR markdown table and copy to clipboard
|
|
7
|
-
#
|
|
8
|
-
# Environment:
|
|
9
|
-
# IMAGE_ADAPTER Storage adapter to use (default: git-native)
|
|
10
|
-
# Available: git-native, 0x0st, blob
|
|
11
|
-
#
|
|
12
|
-
# Adapter-specific environment variables:
|
|
13
|
-
# blob: BLOB_UPLOAD_URL - Custom upload endpoint
|
|
14
|
-
#
|
|
15
|
-
# Examples:
|
|
16
|
-
# ./upload-and-copy.sh before.png after.png
|
|
17
|
-
# ./upload-and-copy.sh before.png after.png --markdown
|
|
18
|
-
# IMAGE_ADAPTER=0x0st ./upload-and-copy.sh before.png after.png --markdown
|
|
19
|
-
|
|
20
|
-
set -e
|
|
21
|
-
|
|
22
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
23
|
-
|
|
24
|
-
# Resolve owner/repo from env vars or git remote URL (supports proxy URLs)
|
|
25
|
-
resolve_owner_repo() {
|
|
26
|
-
if [[ -n "${GH_REPO:-}" ]]; then echo "$GH_REPO"; return; fi
|
|
27
|
-
if [[ -n "${GITHUB_REPOSITORY:-}" ]]; then echo "$GITHUB_REPOSITORY"; return; fi
|
|
28
|
-
|
|
29
|
-
local url
|
|
30
|
-
url=$(git remote get-url origin 2>/dev/null) || true
|
|
31
|
-
|
|
32
|
-
# Standard GitHub HTTPS/SSH
|
|
33
|
-
local std
|
|
34
|
-
std=$(echo "$url" | sed -nE 's#.*github\.com[/:]([^/]+/[^/]+?)(\.git)?$#\1#p')
|
|
35
|
-
if [[ -n "$std" ]]; then echo "$std"; return; fi
|
|
36
|
-
|
|
37
|
-
# Proxy fallback: last two path segments
|
|
38
|
-
local proxy
|
|
39
|
-
proxy=$(echo "$url" | sed -nE 's#.*/([^/]+/[^/]+?)(\.git)?$#\1#p')
|
|
40
|
-
if [[ -n "$proxy" ]]; then echo "$proxy"; return; fi
|
|
41
|
-
|
|
42
|
-
echo "Error: Cannot parse owner/repo. Set GH_REPO=owner/repo" >&2
|
|
43
|
-
exit 1
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
# Check if gh CLI is installed and authenticated
|
|
47
|
-
gh_is_authenticated() {
|
|
48
|
-
command -v gh &>/dev/null && gh auth status &>/dev/null
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
# Copy text to system clipboard (macOS or Linux)
|
|
52
|
-
copy_to_clipboard() {
|
|
53
|
-
local text="$1"
|
|
54
|
-
local label="${2:-Text}"
|
|
55
|
-
if command -v pbcopy &>/dev/null; then
|
|
56
|
-
echo "$text" | pbcopy
|
|
57
|
-
echo "$label copied to clipboard!"
|
|
58
|
-
elif command -v xclip &>/dev/null; then
|
|
59
|
-
echo "$text" | xclip -selection clipboard
|
|
60
|
-
echo "$label copied to clipboard!"
|
|
61
|
-
else
|
|
62
|
-
echo "(clipboard copy not available - install pbcopy or xclip)"
|
|
63
|
-
fi
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
ADAPTERS_DIR="$SCRIPT_DIR/adapters"
|
|
67
|
-
|
|
68
|
-
# Default adapter
|
|
69
|
-
IMAGE_ADAPTER="${IMAGE_ADAPTER:-git-native}"
|
|
70
|
-
|
|
71
|
-
BEFORE_FILE="$1"
|
|
72
|
-
AFTER_FILE="$2"
|
|
73
|
-
shift 2 2>/dev/null || true
|
|
74
|
-
|
|
75
|
-
MARKDOWN_MODE=false
|
|
76
|
-
|
|
77
|
-
# Parse options
|
|
78
|
-
while [[ $# -gt 0 ]]; do
|
|
79
|
-
case $1 in
|
|
80
|
-
--markdown)
|
|
81
|
-
MARKDOWN_MODE=true
|
|
82
|
-
shift
|
|
83
|
-
;;
|
|
84
|
-
*)
|
|
85
|
-
echo "Unknown option: $1"
|
|
86
|
-
exit 1
|
|
87
|
-
;;
|
|
88
|
-
esac
|
|
89
|
-
done
|
|
90
|
-
|
|
91
|
-
# Validate inputs
|
|
92
|
-
if [[ -z "$BEFORE_FILE" || -z "$AFTER_FILE" ]]; then
|
|
93
|
-
echo "Usage: $0 <before.png> <after.png> [--markdown]"
|
|
94
|
-
echo ""
|
|
95
|
-
echo "Environment:"
|
|
96
|
-
echo " IMAGE_ADAPTER Storage adapter (default: git-native)"
|
|
97
|
-
echo " Available: git-native, 0x0st, blob"
|
|
98
|
-
exit 1
|
|
99
|
-
fi
|
|
100
|
-
|
|
101
|
-
if [[ ! -f "$BEFORE_FILE" ]]; then
|
|
102
|
-
echo "Error: Before file not found: $BEFORE_FILE"
|
|
103
|
-
exit 1
|
|
104
|
-
fi
|
|
105
|
-
|
|
106
|
-
if [[ ! -f "$AFTER_FILE" ]]; then
|
|
107
|
-
echo "Error: After file not found: $AFTER_FILE"
|
|
108
|
-
exit 1
|
|
109
|
-
fi
|
|
110
|
-
|
|
111
|
-
# Validate adapter exists
|
|
112
|
-
ADAPTER_SCRIPT="$ADAPTERS_DIR/$IMAGE_ADAPTER.sh"
|
|
113
|
-
if [[ ! -f "$ADAPTER_SCRIPT" ]]; then
|
|
114
|
-
echo "Error: Unknown adapter: $IMAGE_ADAPTER"
|
|
115
|
-
echo ""
|
|
116
|
-
echo "Available adapters:"
|
|
117
|
-
for adapter in "$ADAPTERS_DIR"/*.sh; do
|
|
118
|
-
name=$(basename "$adapter" .sh)
|
|
119
|
-
echo " - $name"
|
|
120
|
-
done
|
|
121
|
-
exit 1
|
|
122
|
-
fi
|
|
123
|
-
|
|
124
|
-
# Upload function using adapter
|
|
125
|
-
# NOTE: git-native adapter returns a filename (not a URL) — the URL is
|
|
126
|
-
# constructed below after commit+push, using the SHA for blob URLs.
|
|
127
|
-
upload_file() {
|
|
128
|
-
local file="$1"
|
|
129
|
-
local filename=$(basename "$file")
|
|
130
|
-
|
|
131
|
-
echo "Uploading: $filename (via $IMAGE_ADAPTER)" >&2
|
|
132
|
-
"$ADAPTER_SCRIPT" "$file"
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
# Upload both files (adapter returns filename for git-native, URL for others)
|
|
136
|
-
echo "=== Uploading Screenshots ==="
|
|
137
|
-
BEFORE_RESULT=$(upload_file "$BEFORE_FILE")
|
|
138
|
-
AFTER_RESULT=$(upload_file "$AFTER_FILE")
|
|
139
|
-
|
|
140
|
-
# For git-native: commit, push, then construct blob+SHA URLs.
|
|
141
|
-
# Blob URLs work for both public and private repos (same-origin on GitHub).
|
|
142
|
-
if [[ "$IMAGE_ADAPTER" == "git-native" ]]; then
|
|
143
|
-
echo "Committing and pushing screenshots..." >&2
|
|
144
|
-
git commit -m "chore: add pre/post screenshots"
|
|
145
|
-
git push origin HEAD
|
|
146
|
-
|
|
147
|
-
SHA=$(git rev-parse HEAD)
|
|
148
|
-
if [[ ! "$SHA" =~ ^[0-9a-f]{40}$ ]]; then
|
|
149
|
-
echo "Error: Could not determine commit SHA after push (got: '$SHA')" >&2
|
|
150
|
-
exit 1
|
|
151
|
-
fi
|
|
152
|
-
|
|
153
|
-
OWNER_REPO=$(resolve_owner_repo)
|
|
154
|
-
|
|
155
|
-
BEFORE_URL="https://github.com/$OWNER_REPO/blob/$SHA/.pre-post/$BEFORE_RESULT?raw=true"
|
|
156
|
-
AFTER_URL="https://github.com/$OWNER_REPO/blob/$SHA/.pre-post/$AFTER_RESULT?raw=true"
|
|
157
|
-
else
|
|
158
|
-
# Other adapters (0x0st, blob) return full URLs directly
|
|
159
|
-
BEFORE_URL="$BEFORE_RESULT"
|
|
160
|
-
AFTER_URL="$AFTER_RESULT"
|
|
161
|
-
fi
|
|
162
|
-
|
|
163
|
-
echo ""
|
|
164
|
-
echo "Before URL: $BEFORE_URL"
|
|
165
|
-
echo "After URL: $AFTER_URL"
|
|
166
|
-
echo ""
|
|
167
|
-
|
|
168
|
-
if [[ "$MARKDOWN_MODE" != "true" ]]; then
|
|
169
|
-
copy_to_clipboard "Before: $BEFORE_URL
|
|
170
|
-
After: $AFTER_URL" "URLs"
|
|
171
|
-
exit 0
|
|
172
|
-
fi
|
|
173
|
-
|
|
174
|
-
# Build section with commit reference
|
|
175
|
-
SHORT_SHA=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
|
|
176
|
-
TIMESTAMP=$(date "+%Y-%m-%d %H:%M")
|
|
177
|
-
|
|
178
|
-
SECTION="### Screenshots ($SHORT_SHA — $TIMESTAMP)
|
|
179
|
-
|
|
180
|
-
| Pre | Post |
|
|
181
|
-
|:---:|:----:|
|
|
182
|
-
|  |  |"
|
|
183
|
-
|
|
184
|
-
echo "=== PR Markdown ==="
|
|
185
|
-
echo "$SECTION"
|
|
186
|
-
echo ""
|
|
187
|
-
|
|
188
|
-
# Auto-append to PR body if gh CLI is available and authenticated
|
|
189
|
-
GH_REPO=$(resolve_owner_repo)
|
|
190
|
-
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || true)
|
|
191
|
-
|
|
192
|
-
if ! gh_is_authenticated || [[ -z "$GH_REPO" ]] || [[ -z "$CURRENT_BRANCH" ]]; then
|
|
193
|
-
if command -v gh &>/dev/null && ! gh_is_authenticated; then
|
|
194
|
-
echo "(gh CLI found but not authenticated — run 'gh auth login' to enable auto PR updates)"
|
|
195
|
-
fi
|
|
196
|
-
echo "Paste the markdown above into your PR description."
|
|
197
|
-
copy_to_clipboard "$SECTION" "Markdown"
|
|
198
|
-
exit 0
|
|
199
|
-
fi
|
|
200
|
-
|
|
201
|
-
PR_JSON=$(gh pr view "$CURRENT_BRANCH" --repo "$GH_REPO" --json number,body 2>/dev/null || true)
|
|
202
|
-
|
|
203
|
-
if [[ -z "$PR_JSON" ]]; then
|
|
204
|
-
echo "(no PR found for branch '$CURRENT_BRANCH' — create a PR first, then paste the markdown above into the description)"
|
|
205
|
-
copy_to_clipboard "$SECTION" "Markdown"
|
|
206
|
-
exit 0
|
|
207
|
-
fi
|
|
208
|
-
|
|
209
|
-
PR_NUMBER=$(echo "$PR_JSON" | grep -o '"number":[0-9]*' | grep -o '[0-9]*')
|
|
210
|
-
PR_BODY=$(echo "$PR_JSON" | python3 -c "import sys,json; print(json.load(sys.stdin).get('body',''))" 2>/dev/null || echo "")
|
|
211
|
-
|
|
212
|
-
# Stack: newest on top, right after ## Visual Changes header
|
|
213
|
-
NEW_BODY=$(python3 -c "
|
|
214
|
-
import sys
|
|
215
|
-
body = sys.argv[1]
|
|
216
|
-
section = sys.argv[2]
|
|
217
|
-
marker = '## Visual Changes'
|
|
218
|
-
if marker in body:
|
|
219
|
-
# Insert new section right after header, push older ones down
|
|
220
|
-
parts = body.split(marker, 1)
|
|
221
|
-
print(parts[0] + marker + '\n\n' + section + '\n\n---' + parts[1])
|
|
222
|
-
else:
|
|
223
|
-
# First time
|
|
224
|
-
print(body + '\n\n' + marker + '\n\n' + section)
|
|
225
|
-
" "$PR_BODY" "$SECTION")
|
|
226
|
-
|
|
227
|
-
gh pr edit "$PR_NUMBER" --repo "$GH_REPO" --body "$NEW_BODY"
|
|
228
|
-
echo "Screenshots appended to PR #$PR_NUMBER body"
|
|
229
|
-
|
|
230
|
-
copy_to_clipboard "$SECTION" "Markdown"
|