Guest User

Untitled

a guest
Oct 18th, 2017
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.74 KB | None | 0 0
  1. #!/bin/sh
  2.  
  3. set -e
  4.  
  5. PACKAGE_JSON="package.json"
  6. PACKAGE_JSON_NEW="package.new.json"
  7. PACKAGE_LOCK="package-lock.json" # default. when shrinkwrap used, is npm-shrinkwrap.json
  8.  
  9. function usage() {
  10. echo "Usage: ${0} -d=<abs-path-to-dir-with-package.json> [-lf=<name-of-the-lock-file>]"
  11. echo "Output: Creates ${PACKAGE_JSON_NEW} in the same directory"
  12. }
  13.  
  14. function check_reqs() {
  15. jq --help > /dev/null 2>&1 || { echo "jq not installed. Aborting." >&2; exit 1; }
  16. [ -d ${DIRECTORY} ] || { echo "Directory ${DIRECTORY} does not exist. Aborting"; exit 1; }
  17. [ -f ${DIRECTORY}/${PACKAGE_JSON} ] || { echo "${DIRECTORY}/${PACKAGE_JSON} not found. Aborting"; exit 1; }
  18. [ -f ${DIRECTORY}/${PACKAGE_LOCK} ] || { echo "${DIRECTORY}/${PACKAGE_LOCK} not found. Aborting"; exit 1; }
  19. }
  20.  
  21. function get_locked_version() {
  22. jq ".dependencies.${1}.version" ${PACKAGE_LOCK} | sed 's/file://g'
  23. }
  24.  
  25. function set_locked_version() {
  26. local cmd=".$1.$2=$3"
  27. echo $cmd
  28. jq --arg pkg "$2" --arg ver "$3" ${cmd} ${PACKAGE_JSON_NEW} > ${PACKAGE_JSON_NEW}.1 && \
  29. mv ${PACKAGE_JSON_NEW}.1 ${PACKAGE_JSON_NEW}
  30. }
  31.  
  32. function set_all_locked_versions() {
  33. for pkg in $(jq ".${1}" ${PACKAGE_JSON} | jq keys[]); do
  34. set_locked_version ${1} ${pkg} $(get_locked_version $pkg)
  35. done
  36. }
  37.  
  38. function main() {
  39. cd ${DIRECTORY}
  40. cp ${PACKAGE_JSON} ${PACKAGE_JSON_NEW}
  41. set_all_locked_versions dependencies
  42. set_all_locked_versions devDependencies
  43. echo "DONE! Created ${DIRECTORY}/${PACKAGE_JSON_NEW}"
  44. }
  45.  
  46. for i in "$@"
  47. do
  48. case $i in
  49. -d=*|--directory=*)
  50. DIRECTORY="${i#*=}"
  51. DIRECTORY=${DIRECTORY%/}
  52. if [[ "$DIRECTORY" != /* ]]; then
  53. # relative path
  54. DIRECTORY=$(pwd)/${DIRECTORY}
  55. fi
  56. shift
  57. ;;
  58. -l=*|--lock-file=*)
  59. PACKAGE_LOCK="${i#*=}"
  60. shift
  61. ;;
  62. -h|--help)
  63. usage
  64. exit 0
  65. ;;
  66. esac
  67. done
  68.  
  69. check_reqs
  70. main
Add Comment
Please, Sign In to add comment