-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathpatch-package-dir.sh
More file actions
executable file
·53 lines (40 loc) · 1.27 KB
/
patch-package-dir.sh
File metadata and controls
executable file
·53 lines (40 loc) · 1.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/bin/bash
set -euo pipefail
usage() {
cat <<'EOF'
Usage: ./patch-package-dir.sh <package-name> <source-dir> [target-dir]
Creates a pnpm patch edit directory for the package, replaces target-dir inside the
patched package with source-dir, and commits the patch.
Examples:
./patch-package-dir.sh @tanstack/query-core ~/pj/tanstack/tanstack-query/packages/query-core/build
./patch-package-dir.sh effect ~/pj/effect/effect/packages/effect/dist dist
EOF
}
if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
usage
exit 0
fi
if [[ $# -lt 2 || $# -gt 3 ]]; then
usage >&2
exit 1
fi
PACKAGE_NAME="$1"
SOURCE_DIR="${2%/}"
TARGET_DIR="${3:-$(basename "$SOURCE_DIR")}"
SAFE_NAME="$(printf '%s' "$PACKAGE_NAME" | tr '@/ ' '___')"
EDIT_DIR="node_modules/.patch-edits/${SAFE_NAME}_patch"
if [[ ! -d "$SOURCE_DIR" ]]; then
echo "Source directory not found: $SOURCE_DIR" >&2
exit 1
fi
rm -rf "$EDIT_DIR"
echo "Creating patch edit directory for $PACKAGE_NAME..."
pnpm patch "$PACKAGE_NAME" --edit-dir "$EDIT_DIR"
DEST_DIR="$EDIT_DIR/$TARGET_DIR"
rm -rf "$DEST_DIR"
mkdir -p "$(dirname "$DEST_DIR")"
echo "Replacing $TARGET_DIR from $SOURCE_DIR..."
cp -a "$SOURCE_DIR" "$DEST_DIR"
echo "Committing patch..."
pnpm patch-commit "$EDIT_DIR"
echo "Patch committed for $PACKAGE_NAME"