File: //var/packages/Node.js_v12/scripts/common
#!/bin/sh
# Copyright (C) 2000-2019 Synology Inc. All rights reserved.
USR_BIN_FILES="node"
NPM_DIR="/usr/local/lib/node_modules/npm"
NODE_JS_PKG="Node.js_v12"
PKG_DIR="/var/packages/${NODE_JS_PKG}/target"
NODE_VERSION="12.22.12"
NVM_PREFIX_DIR="/usr/local/node/nvm"
NVM_VERSION_DIR="$NVM_PREFIX_DIR/versions/${NODE_VERSION}"
NODEJS_ETC_DIR="/usr/syno/etc/packages/Node.js"
PREFERENCE_CONF="$NODEJS_ETC_DIR/.version.pref"
LOCAL_NPM="$PKG_DIR/usr/local/lib/node_modules/npm/bin/npm-cli.js"
_REMOVE_INVALID_VERSIONS()
{
local i;
for i in "$NVM_PREFIX_DIR/versions/"*; do
if [ -e "$i/bin/node" ] && "$i/bin/node" -v | grep -q "v$(basename "$i")"; then
continue;
fi
rm "$i/bin/node"
rmdir "$i/bin" "$i"
done
}
_CHECK_AND_LINK_FILE()
{
local LINK=$NVM_VERSION_DIR/$1
local LINK_TARGET="`realpath ${PKG_DIR}/usr/local/$1`"
local LINK_BASE=`dirname $LINK`
if [ ! -d "$LINK_BASE" ]; then
mkdir -p $LINK_BASE
fi
if [ -e "$LINK" ]; then
rm -rf $LINK
fi
if [ ! -e "$LINK" ]; then
ln -sf $LINK_TARGET $LINK
fi
}
_CHECK_AND_REMOVE()
{
[ -L /usr/local/$1 ] && rm /usr/local/$1
}
_EXEC_LINKING()
{
local file
for file in $USR_BIN_FILES; do
$1 "bin/$file"
done
}
DO_LINK()
{
_REMOVE_INVALID_VERSIONS
_EXEC_LINKING _CHECK_AND_LINK_FILE
}
DO_REMOVE()
{
_EXEC_LINKING _CHECK_AND_REMOVE
}
GET_STATUS()
{
[ -x "/usr/local/bin/node" ] && [ -x "${PKG_DIR}/usr/local/bin/node" ] || return 150
return 0
}
USE_LATEST_NODE()
{
LATEST_VER=$(/usr/local/bin/nvm latest)
[ -z "$(/usr/local/bin/nvm list | grep $LATEST_VER)" ] && return 1
/usr/local/bin/nvm set $LATEST_VER
return $?
}
USE_STABLE_NODE()
{
STABLE_VER=$(/usr/local/bin/nvm stable)
[ -z "$(/usr/local/bin/nvm list | grep $STABLE_VER)" ] && return 1
/usr/local/bin/nvm set $STABLE_VER
return $?
}
USE_PREFERENCE_NODE()
{
[ -f "$PREFERENCE_CONF" ] && PREFER_VERSION=$(cat $PREFERENCE_CONF) || return 1
/usr/local/bin/nvm set $PREFER_VERSION
return $?
}
SET_DEFAULT_NODE()
{
USE_PREFERENCE_NODE
[ 0 -eq "$?" ] && return
USE_STABLE_NODE
[ 0 -eq "$?" ] && return
USE_LATEST_NODE
return $?
}
UPDATE_NPM()
{
if [ ! -d $NPM_DIR ]; then
mkdir -p /usr/local/lib/node_modules
cp -rf $PKG_DIR/$NPM_DIR $NPM_DIR
ln -sf $NPM_DIR/bin/npm-cli.js /usr/local/bin/npm
return
fi
GLOBAL_NPM_VER=$(node /usr/local/bin/npm -v)
LOCAL_NPM_VER=$(node $LOCAL_NPM -v)
for i in 1 2 3; do
G_V=$(echo $GLOBAL_NPM_VER | cut -d"." -f$i)
L_V=$(echo $LOCAL_NPM_VER | cut -d"." -f$i)
case $(($G_V-$L_V)) in
0) ;;
-[0-9]*) rm -rf $NPM_DIR && cp -rf $PKG_DIR/$NPM_DIR $NPM_DIR; return ;;
[0-9]*) return ;;
esac
done
}