79 lines
2.4 KiB
Bash
Executable File
79 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Rebrand peardata → your product name.
|
|
# Usage: bash scripts/rename-template.sh my-app MyApp
|
|
set -euo pipefail
|
|
|
|
OLD_SLUG="peardata"
|
|
OLD_NAME="peardata"
|
|
OLD_PRODUCT="PearData"
|
|
OLD_PROTOCOL="peardata/rpc"
|
|
OLD_PREFIX="pd1."
|
|
OLD_ENV="PEARDATA_"
|
|
|
|
NEW_SLUG="${1:-}"
|
|
NEW_PRODUCT="${2:-}"
|
|
|
|
if [[ -z "$NEW_SLUG" || -z "$NEW_PRODUCT" ]]; then
|
|
echo "Usage: $0 <slug> <ProductName>"
|
|
echo " example: $0 notes-mesh NotesMesh"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! "$NEW_SLUG" =~ ^[a-z][a-z0-9-]*$ ]]; then
|
|
echo "slug must be lowercase alphanumeric + dashes"
|
|
exit 1
|
|
fi
|
|
|
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
cd "$ROOT"
|
|
|
|
PREFIX="$(echo "$NEW_SLUG" | tr -cd 'a-z' | cut -c1-2)1."
|
|
ENV_PREFIX="$(echo "$NEW_SLUG" | tr 'a-z-' 'A-Z_')_"
|
|
ENV_PREFIX="${ENV_PREFIX//__/_}"
|
|
|
|
echo "Renaming:"
|
|
echo " package: $OLD_NAME → $NEW_SLUG"
|
|
echo " product: $OLD_PRODUCT → $NEW_PRODUCT"
|
|
echo " protocol: $OLD_PROTOCOL → ${NEW_SLUG}/rpc"
|
|
echo " invite: $OLD_PREFIX → $PREFIX"
|
|
echo " env: $OLD_ENV → $ENV_PREFIX"
|
|
|
|
export LC_ALL=C
|
|
# Use python for safe replacements (perl struggles with slashes in protocol id)
|
|
python3 - "$OLD_NAME" "$NEW_SLUG" "$OLD_PRODUCT" "$NEW_PRODUCT" "$OLD_PROTOCOL" "${NEW_SLUG}/rpc" "$OLD_SLUG" "$NEW_SLUG" "$OLD_PREFIX" "$PREFIX" "$OLD_ENV" "$ENV_PREFIX" <<'PY'
|
|
import os, sys
|
|
from pathlib import Path
|
|
|
|
pairs = list(zip(sys.argv[1::2], sys.argv[2::2]))
|
|
# longer keys first
|
|
pairs.sort(key=lambda x: -len(x[0]))
|
|
SKIP = {'node_modules', '.git', 'data'}
|
|
EXTS = {'.js','.mjs','.cjs','.json','.md','.html','.css','.yml','.yaml','.service','.example','.sh'}
|
|
|
|
for dirpath, dirnames, filenames in os.walk('.'):
|
|
dirnames[:] = [d for d in dirnames if d not in SKIP]
|
|
for name in filenames:
|
|
p = Path(dirpath) / name
|
|
if p.suffix not in EXTS:
|
|
continue
|
|
try:
|
|
text = p.read_text(encoding='utf-8')
|
|
except Exception:
|
|
continue
|
|
orig = text
|
|
for a, b in pairs:
|
|
text = text.replace(a, b)
|
|
if text != orig:
|
|
p.write_text(text, encoding='utf-8')
|
|
print('updated', p)
|
|
PY
|
|
|
|
if [[ -f bin/peardata-server.mjs && "$NEW_SLUG" != "peardata" ]]; then
|
|
mv bin/peardata-server.mjs "bin/${NEW_SLUG}-server.mjs"
|
|
fi
|
|
if [[ -f deploy/peardata.service && "$NEW_SLUG" != "peardata" ]]; then
|
|
mv deploy/peardata.service "deploy/${NEW_SLUG}.service"
|
|
fi
|
|
|
|
echo "Done. Review git diff, then: npm install && npm test"
|