1#!/usr/bin/env bash 2set -euo pipefail 3 4# Update vendor libraries (bpmn-js and dmn-js) from npm registry. 5# Downloads pre-built npm packages (which include dist/) and keeps only 6# the files needed to run the plugin. 7# Usage: ./update-vendor.sh 8 9SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 10VENDOR_DIR="$SCRIPT_DIR/vendor" 11TMP_DIR=$(mktemp -d) 12trap 'rm -rf "$TMP_DIR"' EXIT 13 14# Files/dirs to keep from the npm package 15KEEP_PATTERNS=(dist package.json LICENSE README.md CHANGELOG.md) 16 17update_library() { 18 local name="$1" 19 local version="$2" 20 local dest="$VENDOR_DIR/$name" 21 22 local tarball_url="https://registry.npmjs.org/${name}/-/${name}-${version}.tgz" 23 echo "Updating $name to $version from $tarball_url ..." 24 25 local archive="$TMP_DIR/$name.tgz" 26 curl -sL "$tarball_url" -o "$archive" 27 28 local extract_dir="$TMP_DIR/$name-extract" 29 mkdir -p "$extract_dir" 30 # npm tarballs extract to a package/ directory 31 tar xzf "$archive" -C "$extract_dir" 32 33 local src_dir="$extract_dir/package" 34 if [[ ! -d "$src_dir" ]]; then 35 echo "ERROR: Could not find extracted package/ directory for $name" 36 return 1 37 fi 38 39 # Preserve url.txt 40 local url_backup="$TMP_DIR/${name}_url.txt" 41 cp "$dest/url.txt" "$url_backup" 42 43 # Remove old vendor dir and recreate with only needed files 44 rm -rf "$dest" 45 mkdir -p "$dest" 46 47 for pattern in "${KEEP_PATTERNS[@]}"; do 48 if [[ -e "$src_dir/$pattern" ]]; then 49 cp -r "$src_dir/$pattern" "$dest/$pattern" 50 fi 51 done 52 53 # Restore url.txt and update version references 54 cp "$url_backup" "$dest/url.txt" 55 56 # Rename .css to .less so DokuWiki's LESS compiler inlines them. 57 # DokuWiki's default nginx config blocks /vendor/ paths (403), so CSS 58 # @import directives for .css files would fail at runtime. 59 find "$dest" -name '*.css' -exec bash -c 'mv "$1" "${1%.css}.less"' _ {} \; 60 61 echo "Updated $name to $version successfully." 62} 63 64get_version() { 65 local name="$1" 66 local url_file="$VENDOR_DIR/$name/url.txt" 67 68 if [[ ! -f "$url_file" ]]; then 69 echo "ERROR: $url_file not found" >&2 70 return 1 71 fi 72 73 # Extract version from the npm URL in url.txt (e.g. ...@18.14.0/) 74 local version 75 version=$(grep -oP "${name}@\K[0-9]+\.[0-9]+\.[0-9]+" "$url_file" | head -1) 76 77 if [[ -z "$version" ]]; then 78 echo "ERROR: Could not extract version for $name from $url_file" >&2 79 return 1 80 fi 81 82 echo "$version" 83} 84 85bpmn_version=$(get_version "bpmn-js") 86dmn_version=$(get_version "dmn-js") 87 88update_library "bpmn-js" "$bpmn_version" 89update_library "dmn-js" "$dmn_version" 90 91echo "" 92echo "Done. Updated bpmn-js to $bpmn_version and dmn-js to $dmn_version." 93