@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.
Files changed (125) hide show
  1. package/README.md +102 -222
  2. package/dist/bin/cli.js +199 -347
  3. package/dist/bin/cli.js.map +1 -1
  4. package/dist/browser.d.ts +42 -11
  5. package/dist/browser.d.ts.map +1 -1
  6. package/dist/browser.js +371 -94
  7. package/dist/browser.js.map +1 -1
  8. package/dist/capture.d.ts +1 -6
  9. package/dist/capture.d.ts.map +1 -1
  10. package/dist/capture.js +12 -35
  11. package/dist/capture.js.map +1 -1
  12. package/dist/commands/compare.d.ts +18 -0
  13. package/dist/commands/compare.d.ts.map +1 -0
  14. package/dist/commands/compare.js +64 -0
  15. package/dist/commands/compare.js.map +1 -0
  16. package/dist/commands/detect.d.ts +20 -0
  17. package/dist/commands/detect.d.ts.map +1 -0
  18. package/dist/commands/detect.js +19 -0
  19. package/dist/commands/detect.js.map +1 -0
  20. package/dist/commands/doctor.d.ts +10 -0
  21. package/dist/commands/doctor.d.ts.map +1 -0
  22. package/dist/commands/doctor.js +38 -0
  23. package/dist/commands/doctor.js.map +1 -0
  24. package/dist/commands/login.d.ts +6 -0
  25. package/dist/commands/login.d.ts.map +1 -0
  26. package/dist/commands/login.js +34 -0
  27. package/dist/commands/login.js.map +1 -0
  28. package/dist/commands/pr.d.ts +28 -0
  29. package/dist/commands/pr.d.ts.map +1 -0
  30. package/dist/commands/pr.js +159 -0
  31. package/dist/commands/pr.js.map +1 -0
  32. package/dist/commands/prune.d.ts +10 -0
  33. package/dist/commands/prune.d.ts.map +1 -0
  34. package/dist/commands/prune.js +13 -0
  35. package/dist/commands/prune.js.map +1 -0
  36. package/dist/config.d.ts +36 -0
  37. package/dist/config.d.ts.map +1 -0
  38. package/dist/config.js +60 -0
  39. package/dist/config.js.map +1 -0
  40. package/dist/diff-pool.d.ts +17 -0
  41. package/dist/diff-pool.d.ts.map +1 -0
  42. package/dist/diff-pool.js +89 -0
  43. package/dist/diff-pool.js.map +1 -0
  44. package/dist/diff-worker.d.ts +29 -0
  45. package/dist/diff-worker.d.ts.map +1 -0
  46. package/dist/diff-worker.js +38 -0
  47. package/dist/diff-worker.js.map +1 -0
  48. package/dist/diff.d.ts +37 -0
  49. package/dist/diff.d.ts.map +1 -0
  50. package/dist/diff.js +171 -0
  51. package/dist/diff.js.map +1 -0
  52. package/dist/doctor.d.ts +38 -0
  53. package/dist/doctor.d.ts.map +1 -0
  54. package/dist/doctor.js +72 -0
  55. package/dist/doctor.js.map +1 -0
  56. package/dist/errors.d.ts +38 -0
  57. package/dist/errors.d.ts.map +1 -0
  58. package/dist/errors.js +59 -0
  59. package/dist/errors.js.map +1 -0
  60. package/dist/filename.d.ts +2 -0
  61. package/dist/filename.d.ts.map +1 -1
  62. package/dist/filename.js +2 -1
  63. package/dist/filename.js.map +1 -1
  64. package/dist/git.d.ts +23 -0
  65. package/dist/git.d.ts.map +1 -0
  66. package/dist/git.js +86 -0
  67. package/dist/git.js.map +1 -0
  68. package/dist/github.d.ts +73 -0
  69. package/dist/github.d.ts.map +1 -0
  70. package/dist/github.js +240 -0
  71. package/dist/github.js.map +1 -0
  72. package/dist/index.d.ts +22 -22
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +17 -66
  75. package/dist/index.js.map +1 -1
  76. package/dist/pkg.d.ts +8 -0
  77. package/dist/pkg.d.ts.map +1 -0
  78. package/dist/pkg.js +35 -0
  79. package/dist/pkg.js.map +1 -0
  80. package/dist/report.d.ts +20 -0
  81. package/dist/report.d.ts.map +1 -0
  82. package/dist/report.js +107 -0
  83. package/dist/report.js.map +1 -0
  84. package/dist/routes/imports.d.ts +46 -0
  85. package/dist/routes/imports.d.ts.map +1 -0
  86. package/dist/routes/imports.js +208 -0
  87. package/dist/routes/imports.js.map +1 -0
  88. package/dist/routes/vite.d.ts +15 -0
  89. package/dist/routes/vite.d.ts.map +1 -0
  90. package/dist/routes/vite.js +130 -0
  91. package/dist/routes/vite.js.map +1 -0
  92. package/dist/routes.d.ts +41 -14
  93. package/dist/routes.d.ts.map +1 -1
  94. package/dist/routes.js +271 -141
  95. package/dist/routes.js.map +1 -1
  96. package/dist/run.d.ts +36 -0
  97. package/dist/run.d.ts.map +1 -0
  98. package/dist/run.js +128 -0
  99. package/dist/run.js.map +1 -0
  100. package/dist/sessions.d.ts +50 -0
  101. package/dist/sessions.d.ts.map +1 -0
  102. package/dist/sessions.js +74 -0
  103. package/dist/sessions.js.map +1 -0
  104. package/dist/types.d.ts +118 -41
  105. package/dist/types.d.ts.map +1 -1
  106. package/dist/types.js +1 -0
  107. package/dist/types.js.map +1 -1
  108. package/dist/viewport.d.ts +6 -1
  109. package/dist/viewport.d.ts.map +1 -1
  110. package/dist/viewport.js +13 -7
  111. package/dist/viewport.js.map +1 -1
  112. package/package.json +21 -13
  113. package/skill/SKILL.md +31 -229
  114. package/dist/clipboard.d.ts +0 -9
  115. package/dist/clipboard.d.ts.map +0 -1
  116. package/dist/clipboard.js +0 -26
  117. package/dist/clipboard.js.map +0 -1
  118. package/dist/upload.d.ts +0 -39
  119. package/dist/upload.d.ts.map +0 -1
  120. package/dist/upload.js +0 -149
  121. package/dist/upload.js.map +0 -1
  122. package/skill/scripts/adapters/0x0st.sh +0 -36
  123. package/skill/scripts/adapters/blob.sh +0 -55
  124. package/skill/scripts/adapters/git-native.sh +0 -51
  125. 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
- | ![Pre]($BEFORE_URL) | ![Post]($AFTER_URL) |"
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"